@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,12 @@
1
+ import { useEffect } from 'react';
2
+ import STORE from './store.js';
3
+
4
+ const Redirect = (props) => {
5
+ useEffect(() => {
6
+ STORE.replaceState(props.to, { replace: true });
7
+ }, []);
8
+ return null;
9
+ };
10
+ Redirect.displayName = 'Redirect';
11
+
12
+ export { Redirect };
@@ -0,0 +1,4 @@
1
+ const Route = (props) => null;
2
+ Route.displayName = 'Route';
3
+
4
+ export { Route };
@@ -0,0 +1,33 @@
1
+ const replaceParamsInPath = (path, params) => {
2
+ if (path === '/')
3
+ return '';
4
+ return Object.keys(params).reduce((updatedPath, paramKey) => {
5
+ return updatedPath.replace(`:${paramKey}`, params[paramKey]);
6
+ }, path);
7
+ };
8
+ function parsePath(currPath, routePath, exact = false) {
9
+ const pathParts = currPath.split('/');
10
+ const routePathParts = routePath.split('/');
11
+ let matched = true;
12
+ if (exact && routePathParts.length !== pathParts.length) {
13
+ return null;
14
+ }
15
+ const params = {};
16
+ for (let i = 0; i < routePathParts.length; i++) {
17
+ const routeToken = routePathParts[i];
18
+ const currentPathToken = pathParts[i];
19
+ if (currentPathToken && routeToken.startsWith(':')) {
20
+ const paramName = routeToken.slice(1);
21
+ params[paramName] = currentPathToken;
22
+ }
23
+ else if (routeToken !== currentPathToken) {
24
+ matched = false;
25
+ break;
26
+ }
27
+ }
28
+ if (!matched)
29
+ return null;
30
+ return params;
31
+ }
32
+
33
+ export { parsePath, replaceParamsInPath };
@@ -0,0 +1,68 @@
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
+ import { useContext, useEffect, useMemo } from 'react';
3
+ import { withStore } from 'justorm/react';
4
+ import STORE from './store.js';
5
+ import Context from './context.js';
6
+ import { parsePath, replaceParamsInPath } from './Router.helpers.js';
7
+ export { Route } from './Route.js';
8
+ export { Redirect } from './Redirect.js';
9
+ export { Link } from './Link/Link.js';
10
+
11
+ const Router = withStore({
12
+ router: ['path'],
13
+ })((props) => {
14
+ const { children, single, basePath = '', store: { router }, } = props;
15
+ const ctx = useContext(Context);
16
+ const fullPath = ctx.basePath + basePath;
17
+ useEffect(() => {
18
+ const onPopState = () => {
19
+ STORE.go(window.location.pathname, { replace: true });
20
+ };
21
+ window.addEventListener('popstate', onPopState);
22
+ return () => window.removeEventListener('popstate', onPopState);
23
+ }, []);
24
+ const matchedRoutes = useMemo(() => {
25
+ const childs = [];
26
+ let noMatchRoute;
27
+ let isRouteMatched = false;
28
+ for (const child of React.Children.toArray(children)) {
29
+ if (!React.isValidElement(child)) {
30
+ childs.push(child);
31
+ continue;
32
+ }
33
+ // @ts-ignore
34
+ const isRouteComponent = child.type.displayName === 'Route';
35
+ const { path, exact, component: Component, ...rest } = child.props;
36
+ if (!path) {
37
+ if (isRouteComponent && Component) {
38
+ noMatchRoute = jsx(Component, { ...rest });
39
+ continue;
40
+ }
41
+ childs.push(child);
42
+ continue;
43
+ }
44
+ if (single && isRouteMatched) {
45
+ continue;
46
+ }
47
+ const tailPath = fullPath && path === '/' ? '' : path;
48
+ const routePath = fullPath + tailPath;
49
+ const params = parsePath(router.path, routePath, exact);
50
+ if (params) {
51
+ const routeBasePath = fullPath + replaceParamsInPath(path, params);
52
+ const matchedRoute = (jsx(Context.Provider, { value: { basePath: routeBasePath }, children: jsx(Component, { ...rest, pathParams: params }) }, path));
53
+ isRouteMatched = true;
54
+ childs.push(matchedRoute);
55
+ }
56
+ }
57
+ if (childs.length === 0 && noMatchRoute) {
58
+ return noMatchRoute;
59
+ }
60
+ return childs;
61
+ }, [children, router.path, fullPath, single]);
62
+ return jsx(Fragment, { children: matchedRoutes });
63
+ });
64
+ Router.displayName = 'Router';
65
+ const RouterStore = STORE;
66
+ const RouterContext = Context;
67
+
68
+ export { Router, RouterContext, RouterStore };
@@ -0,0 +1,5 @@
1
+ import { createContext } from 'react';
2
+
3
+ var Context = createContext({ basePath: '' });
4
+
5
+ export { Context as default };
@@ -0,0 +1,55 @@
1
+ import { createStore } from 'justorm/react';
2
+ import { addUniq, spliceWhere } from '../../tools/array.js';
3
+ import { parseQueryParams } from '../../tools/queryParams.js';
4
+ import { isBrowser } from '../../tools/env.js';
5
+ import 'nanoid';
6
+ import '../../tools/dom.js';
7
+ import 'timen';
8
+ import 'compareq';
9
+ import 'lodash.pick';
10
+
11
+ const LISTENERS = [];
12
+ const STORE = createStore('router', {
13
+ path: isBrowser && location.pathname,
14
+ params: {},
15
+ query: parseQueryParams(),
16
+ queryString: isBrowser && location.search,
17
+ on(cb) {
18
+ addUniq(LISTENERS, cb);
19
+ },
20
+ un(cb) {
21
+ spliceWhere(LISTENERS, cb);
22
+ },
23
+ go(href, { replace } = {}) {
24
+ if (href === this.path)
25
+ return;
26
+ history[replace ? 'replaceState' : 'pushState']({}, '', href);
27
+ onRouteChange(href);
28
+ },
29
+ back() {
30
+ history.back();
31
+ onRouteChange();
32
+ },
33
+ replaceState(href, { quiet } = {}) {
34
+ history.replaceState({}, '', href);
35
+ if (!quiet)
36
+ onRouteChange(href);
37
+ },
38
+ });
39
+ function onRouteChange(href = window.location.pathname) {
40
+ STORE.queryString = location.search;
41
+ STORE.query = parseQueryParams();
42
+ STORE.path = href.replace(/\?.+/, '') || '/';
43
+ LISTENERS.forEach(cb => cb(STORE.path));
44
+ }
45
+ function updateRouteState() {
46
+ if (STORE.path !== window.location.pathname ||
47
+ STORE.queryString !== location.search)
48
+ onRouteChange();
49
+ }
50
+ if (isBrowser) {
51
+ window.addEventListener('popstate', updateRouteState);
52
+ window.addEventListener('pushstate', updateRouteState);
53
+ }
54
+
55
+ export { STORE as default };
@@ -0,0 +1,274 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Component, createRef, createElement } from 'react';
3
+ import cn from 'classnames';
4
+ import { createStore } from 'justorm/react';
5
+ import omit from 'lodash.omit';
6
+ import Time from 'timen';
7
+ import { isTouch } from '../../tools/dom.js';
8
+ import { unobserve, observe } from '../../tools/resizeObserver.js';
9
+ import S from './Scroll.styl.js';
10
+ import debounce from '../../tools/debounce.js';
11
+
12
+ const getEventCoords = e => ({
13
+ x: e.clientX,
14
+ y: e.clientY,
15
+ });
16
+ const AXES = ['x', 'y'];
17
+ const BY_AXIS = {
18
+ x: {
19
+ scrollPos: 'scrollLeft',
20
+ scrollSize: 'scrollWidth',
21
+ size: 'width',
22
+ offsetSize: 'offsetWidth',
23
+ innerSize: 'clientWidth',
24
+ posField: 'left',
25
+ },
26
+ y: {
27
+ scrollPos: 'scrollTop',
28
+ scrollSize: 'scrollHeight',
29
+ size: 'height',
30
+ offsetSize: 'offsetHeight',
31
+ innerSize: 'clientHeight',
32
+ posField: 'top',
33
+ },
34
+ };
35
+ class Scroll extends Component {
36
+ innerElem;
37
+ onInnerRef = elem => {
38
+ if (this.innerElem) {
39
+ unobserve(this.innerElem, this.updateAll);
40
+ }
41
+ this.innerElem = elem;
42
+ this.props.onInnerRef?.(elem);
43
+ if (elem) {
44
+ this.updateAll();
45
+ observe(elem, this.updateAll);
46
+ }
47
+ };
48
+ thumbELem = {
49
+ x: createRef(),
50
+ y: createRef(),
51
+ };
52
+ store;
53
+ isTouch;
54
+ timers = Time.create();
55
+ currAxis;
56
+ pos = { x: 0, y: 0 };
57
+ prevCoords = { x: 0, y: 0 };
58
+ prevScrolls = { x: 0, y: 0 };
59
+ prevBoundings = { x: 0, y: 0 };
60
+ unsubscribeScrollHeightObserver;
61
+ static defaultProps = { size: 'm' };
62
+ constructor(props) {
63
+ super(props);
64
+ this.isTouch = isTouch();
65
+ this.store = createStore(this, {
66
+ isScrolling: false,
67
+ activeAxis: null,
68
+ coeff: { x: 0, y: 0 },
69
+ });
70
+ }
71
+ componentDidMount() {
72
+ this.updateAll();
73
+ this.unsubscribeScrollHeightObserver = Time.every(100, this.observeScrollHeight);
74
+ document.addEventListener('scroll', this.onDocScroll);
75
+ }
76
+ componentWillUnmount() {
77
+ this.unsubscribeScrollHeightObserver?.();
78
+ this.unsubscribePointerMoveUp();
79
+ document.removeEventListener('scroll', this.onDocScroll);
80
+ }
81
+ eachAxis = fn => AXES.map(axis => this.props[axis] && fn(axis));
82
+ observeScrollHeight = () => {
83
+ this.eachAxis(axis => {
84
+ if ((this.props[axis] && this.isScrollChanged(axis)) ||
85
+ this.isBoudingsChanged(axis)) {
86
+ this.update(axis);
87
+ }
88
+ });
89
+ };
90
+ isScrollChanged(axis) {
91
+ const currScrolls = this.getScrollSize(axis);
92
+ const isChanged = this.prevScrolls[axis] !== currScrolls[axis];
93
+ if (isChanged)
94
+ this.prevScrolls[axis] = currScrolls;
95
+ return isChanged;
96
+ }
97
+ isBoudingsChanged(axis) {
98
+ const curroffsetSize = this.getoffsetSize(axis);
99
+ const isChanged = this.prevBoundings[axis] !== curroffsetSize[axis];
100
+ if (isChanged)
101
+ this.prevBoundings[axis] = curroffsetSize[axis];
102
+ return isChanged;
103
+ }
104
+ getoffsetSize = axis => this.innerElem[BY_AXIS[axis].offsetSize];
105
+ getInnerSize = axis => this.innerElem[BY_AXIS[axis].innerSize];
106
+ getScrollSize = axis => this.innerElem[BY_AXIS[axis].scrollSize];
107
+ getScrollPos = axis => this.innerElem[BY_AXIS[axis].scrollPos];
108
+ getThumbSize = axis => this.thumbELem[axis].current[BY_AXIS[axis].offsetSize];
109
+ getOffset(axis) {
110
+ const offset = this.props.offset?.[axis];
111
+ const isVertical = axis === 'y';
112
+ const before = isVertical ? 'top' : 'left';
113
+ const after = isVertical ? 'bottom' : 'right';
114
+ return {
115
+ [before]: offset?.before || 0,
116
+ [after]: offset?.after || 0,
117
+ };
118
+ }
119
+ getCoeffStyle = axis => `${this.store.coeff[axis] * 100}%`;
120
+ getPosStyle = axis => `${this.pos[axis]}px`;
121
+ updateAll = () => {
122
+ this.eachAxis(this.update);
123
+ };
124
+ update = axis => {
125
+ this.updateCoeff(axis);
126
+ this.updatePos(axis);
127
+ };
128
+ updateCoeff(axis) {
129
+ const thumb = this.thumbELem[axis].current;
130
+ if (!this.innerElem)
131
+ return;
132
+ const sizeField = BY_AXIS[axis].size;
133
+ this.store.coeff[axis] = this.getInnerSize(axis) / this.getScrollSize(axis);
134
+ if (thumb)
135
+ thumb.style[sizeField] = this.getCoeffStyle(axis);
136
+ }
137
+ updatePos = axis => {
138
+ const thumb = this.thumbELem[axis].current;
139
+ if (!this.innerElem || !thumb)
140
+ return;
141
+ const { offset } = this.props;
142
+ const offsetBefore = offset?.[axis]?.before || 0;
143
+ const offsetAfter = offset?.[axis]?.after || 0;
144
+ const innerSize = this.getInnerSize(axis);
145
+ const thumbSize = this.getThumbSize(axis);
146
+ const scrollSize = this.getScrollSize(axis);
147
+ const scrollPos = this.getScrollPos(axis);
148
+ const posField = BY_AXIS[axis].posField;
149
+ // const AXIS = axis.toUpperCase();
150
+ const pos = thumbSize
151
+ ? (innerSize - thumbSize - offsetBefore - offsetAfter) *
152
+ (scrollPos / (scrollSize - innerSize))
153
+ : 0;
154
+ this.pos[axis] = pos;
155
+ // thumb.style.transform = `translate${AXIS}(${pos}px)`;
156
+ thumb.style[posField] = this.getPosStyle(axis);
157
+ };
158
+ updateScroll = (axis, e) => {
159
+ const coords = getEventCoords(e);
160
+ const scrollPos = BY_AXIS[axis].scrollPos;
161
+ const pos = coords[axis] - this.prevCoords[axis];
162
+ this.prevCoords = coords;
163
+ this.innerElem[scrollPos] += pos / this.store.coeff[axis];
164
+ };
165
+ dropScrollingState = debounce(() => (this.store.isScrolling = false), 2000);
166
+ subscribePointerMoveUp = () => {
167
+ document.addEventListener('pointermove', this.onPointerMove, {
168
+ passive: false, // do not generate passive event warning
169
+ });
170
+ document.addEventListener('pointerup', this.onPointerUp);
171
+ };
172
+ unsubscribePointerMoveUp = () => {
173
+ document.removeEventListener('pointermove', this.onPointerMove);
174
+ document.removeEventListener('pointerup', this.onPointerUp);
175
+ };
176
+ onDocScroll = e => {
177
+ const { activeAxis } = this.store;
178
+ // if dragging thumb - prevent any other scrolls
179
+ if (activeAxis && this.innerElem !== e.target) {
180
+ e.preventDefault();
181
+ e.stopPropagation();
182
+ }
183
+ };
184
+ onInnerScroll = e => {
185
+ if (this.innerElem !== e.target)
186
+ return;
187
+ const { onScroll } = this.props;
188
+ const { activeAxis, isScrolling } = this.store;
189
+ onScroll?.(e);
190
+ if (!activeAxis) {
191
+ this.eachAxis(axis => {
192
+ if (this.isScrollChanged(axis))
193
+ this.update(axis);
194
+ });
195
+ }
196
+ if (!isScrolling)
197
+ this.store.isScrolling = true;
198
+ this.dropScrollingState();
199
+ };
200
+ onPointerDown = (axis, e) => {
201
+ e.preventDefault();
202
+ e.stopPropagation();
203
+ // TOOD: if target is bar(not thumb) - move thumb to target coords
204
+ this.prevCoords = getEventCoords(e);
205
+ this.store.activeAxis = axis;
206
+ this.subscribePointerMoveUp();
207
+ };
208
+ onPointerMove = e => {
209
+ const { activeAxis: axis } = this.store;
210
+ if (!axis)
211
+ return;
212
+ e.preventDefault();
213
+ e.stopPropagation();
214
+ this.updateScroll(axis, e);
215
+ this.updatePos(axis);
216
+ };
217
+ onPointerUp = e => {
218
+ e.stopPropagation();
219
+ this.store.activeAxis = null;
220
+ this.dropScrollingState();
221
+ this.unsubscribePointerMoveUp();
222
+ };
223
+ renderBar = axis => {
224
+ const { thumbClassName } = this.props;
225
+ const { activeAxis, coeff } = this.store;
226
+ if (coeff[axis] === 1)
227
+ return null;
228
+ const sizeField = BY_AXIS[axis].size;
229
+ const posField = BY_AXIS[axis].posField;
230
+ const thumbStyle = {
231
+ [sizeField]: this.getCoeffStyle(axis),
232
+ [posField]: this.getPosStyle(axis),
233
+ };
234
+ const barProps = {
235
+ className: cn(S.bar, S[axis], activeAxis === axis && S.isActive),
236
+ style: this.getOffset(axis),
237
+ onPointerDown: this.onPointerDown.bind(this, axis),
238
+ };
239
+ return (createElement("div", { ...barProps, key: `bar-${axis}` },
240
+ jsx("div", { className: cn(S.thumb, thumbClassName), style: thumbStyle, ref: this.thumbELem[axis] })));
241
+ };
242
+ renderInner() {
243
+ const { innerClassName, innerProps, children, smooth } = this.props;
244
+ const { activeAxis } = this.store;
245
+ const innerClasses = cn(S.inner, innerProps?.className, innerClassName, !activeAxis && smooth && S.smooth);
246
+ const props = { ...innerProps };
247
+ props.onScrollCapture = this.onInnerScroll;
248
+ return (createElement("div", { ...props, className: innerClasses, ref: this.onInnerRef, key: "inner" }, children));
249
+ }
250
+ render() {
251
+ const { y, x, size, fadeSize, extraWide, autoHide, className } = this.props;
252
+ const { isScrolling, activeAxis } = this.store;
253
+ const classes = cn(S.root, y && S.y, x && S.x, S[`size-${size}`], fadeSize && S[`fadeSize-${fadeSize}`], autoHide && S.autoHide, extraWide && S.extraWide, (isScrolling || activeAxis) && S.isScrolling, this.isTouch && S.isTouch, className);
254
+ const props = omit(this.props, [
255
+ 'x',
256
+ 'y',
257
+ 'offset',
258
+ 'size',
259
+ 'fadeSize',
260
+ 'smooth',
261
+ 'className',
262
+ 'innerClassName',
263
+ 'innerProps',
264
+ 'onInnerRef',
265
+ 'thumbClassName',
266
+ 'autoHide',
267
+ 'children',
268
+ 'extraWide',
269
+ ]);
270
+ return (jsxs("div", { className: classes, ...props, children: [this.renderInner(), this.eachAxis(this.renderBar)] }));
271
+ }
272
+ }
273
+
274
+ export { Scroll };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Scroll_root__NNx5K{display:flex;overflow:hidden;position:relative}.Scroll_inner__DmxTb{-webkit-overflow-scrolling:touch;-ms-overflow-style:none;overflow:hidden;position:relative;scrollbar-width:none;width:100%}.Scroll_inner__DmxTb.Scroll_smooth__2vqKe{scroll-behavior:smooth}.Scroll_inner__DmxTb::-webkit-scrollbar{display:none}.Scroll_y__2xWol .Scroll_inner__DmxTb{max-height:100%;overflow-y:auto}.Scroll_x__--Ycm .Scroll_inner__DmxTb{max-width:100%;overflow-x:auto}.Scroll_y__2xWol.Scroll_fadeSize-s__WeI0f .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(180deg,transparent 2px,#000 10px,#000 calc(100% - 10px),transparent);mask-image:linear-gradient(180deg,transparent 2px,#000 10px,#000 calc(100% - 10px),transparent)}.Scroll_x__--Ycm.Scroll_fadeSize-s__WeI0f .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(90deg,transparent 2px,#000 10px,#000 calc(100% - 10px),transparent);mask-image:linear-gradient(90deg,transparent 2px,#000 10px,#000 calc(100% - 10px),transparent)}.Scroll_y__2xWol.Scroll_fadeSize-m__Hb-1p .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(180deg,transparent 2px,#000 16px,#000 calc(100% - 16px),transparent);mask-image:linear-gradient(180deg,transparent 2px,#000 16px,#000 calc(100% - 16px),transparent)}.Scroll_x__--Ycm.Scroll_fadeSize-m__Hb-1p .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(90deg,transparent 2px,#000 16px,#000 calc(100% - 16px),transparent);mask-image:linear-gradient(90deg,transparent 2px,#000 16px,#000 calc(100% - 16px),transparent)}.Scroll_y__2xWol.Scroll_fadeSize-l__E0CbA .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(180deg,transparent 2px,#000 20px,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(180deg,transparent 2px,#000 20px,#000 calc(100% - 20px),transparent)}.Scroll_x__--Ycm.Scroll_fadeSize-l__E0CbA .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(90deg,transparent 2px,#000 20px,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(90deg,transparent 2px,#000 20px,#000 calc(100% - 20px),transparent)}.Scroll_y__2xWol.Scroll_fadeSize-xl__jcYk0 .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(180deg,transparent 2px,#000 30px,#000 calc(100% - 30px),transparent);mask-image:linear-gradient(180deg,transparent 2px,#000 30px,#000 calc(100% - 30px),transparent)}.Scroll_x__--Ycm.Scroll_fadeSize-xl__jcYk0 .Scroll_inner__DmxTb{-webkit-mask-image:linear-gradient(90deg,transparent 2px,#000 30px,#000 calc(100% - 30px),transparent);mask-image:linear-gradient(90deg,transparent 2px,#000 30px,#000 calc(100% - 30px),transparent)}.Scroll_autoHide__URLqx>.Scroll_bar__6CL7R{opacity:0}.Scroll_isScrolling__yV2Pj.Scroll_autoHide__URLqx>.Scroll_bar__6CL7R{opacity:1;transition:none}.Scroll_thumb__ccEPj{background-color:var(--accent-color-alpha-200);border-radius:1px;position:absolute;transform-origin:center;transition:background-color .1s ease-out}.Scroll_y__2xWol>.Scroll_thumb__ccEPj{min-height:30px;top:0;width:100%}.Scroll_x__--Ycm>.Scroll_thumb__ccEPj{height:100%;left:0;min-width:30px}.Scroll_bar__6CL7R{cursor:pointer;overflow:hidden;position:absolute;touch-action:none;transition:opacity .3s ease-out .1s;z-index:2}.Scroll_bar__6CL7R:before{background-color:var(--accent-color-alpha-100);border-radius:2px;content:\"\";opacity:0;position:absolute;transition:opacity .2s ease-out .3s}.Scroll_bar__6CL7R.Scroll_isActive__Nkkmi,.Scroll_bar__6CL7R:hover{z-index:1}.Scroll_bar__6CL7R.Scroll_isActive__Nkkmi:before,.Scroll_bar__6CL7R:hover:before{opacity:1;transition-delay:0s}.Scroll_bar__6CL7R.Scroll_isActive__Nkkmi .Scroll_thumb__ccEPj,.Scroll_bar__6CL7R:hover .Scroll_thumb__ccEPj{background-color:var(--active-color)}.Scroll_bar__6CL7R.Scroll_y__2xWol{bottom:8px;right:0;top:8px;width:16px}.Scroll_isTouch__Vb2mT .Scroll_bar__6CL7R.Scroll_y__2xWol{width:32px}.Scroll_bar__6CL7R.Scroll_y__2xWol .Scroll_thumb__ccEPj,.Scroll_bar__6CL7R.Scroll_y__2xWol:before{right:30%}.Scroll_bar__6CL7R.Scroll_y__2xWol:before{height:100%}.Scroll_bar__6CL7R.Scroll_x__--Ycm{bottom:0;height:16px;left:8px;right:8px}.Scroll_isTouch__Vb2mT .Scroll_bar__6CL7R.Scroll_x__--Ycm{height:32px}.Scroll_bar__6CL7R.Scroll_x__--Ycm .Scroll_thumb__ccEPj,.Scroll_bar__6CL7R.Scroll_x__--Ycm:before{bottom:30%}.Scroll_bar__6CL7R.Scroll_x__--Ycm:before{width:100%}.Scroll_bar__6CL7R.Scroll_x__--Ycm{height:32px}.Scroll_size-s__px8sG>.Scroll_bar__6CL7R.Scroll_x__--Ycm .Scroll_thumb__ccEPj,.Scroll_size-s__px8sG>.Scroll_bar__6CL7R.Scroll_x__--Ycm:before{height:1px}.Scroll_size-m__gfTwB>.Scroll_bar__6CL7R.Scroll_x__--Ycm .Scroll_thumb__ccEPj,.Scroll_size-m__gfTwB>.Scroll_bar__6CL7R.Scroll_x__--Ycm:before{border-radius:2.5px;height:5px}.Scroll_size-l__Pe4z7>.Scroll_bar__6CL7R.Scroll_x__--Ycm .Scroll_thumb__ccEPj,.Scroll_size-l__Pe4z7>.Scroll_bar__6CL7R.Scroll_x__--Ycm:before{border-radius:4.5px;height:9px}.Scroll_bar__6CL7R.Scroll_y__2xWol{width:32px}.Scroll_size-s__px8sG>.Scroll_bar__6CL7R.Scroll_y__2xWol .Scroll_thumb__ccEPj,.Scroll_size-s__px8sG>.Scroll_bar__6CL7R.Scroll_y__2xWol:before{width:1px}.Scroll_size-m__gfTwB>.Scroll_bar__6CL7R.Scroll_y__2xWol .Scroll_thumb__ccEPj,.Scroll_size-m__gfTwB>.Scroll_bar__6CL7R.Scroll_y__2xWol:before{border-radius:2.5px;width:5px}.Scroll_size-l__Pe4z7>.Scroll_bar__6CL7R.Scroll_y__2xWol .Scroll_thumb__ccEPj,.Scroll_size-l__Pe4z7>.Scroll_bar__6CL7R.Scroll_y__2xWol:before{border-radius:4.5px;width:9px}.Scroll_extraWide__IL5ZI .Scroll_bar__6CL7R.Scroll_x__--Ycm{height:52px}.Scroll_extraWide__IL5ZI .Scroll_bar__6CL7R.Scroll_y__2xWol{width:52px}";
4
+ var S = {"root":"Scroll_root__NNx5K","inner":"Scroll_inner__DmxTb","smooth":"Scroll_smooth__2vqKe","y":"Scroll_y__2xWol","x":"Scroll_x__--Ycm","fadeSize-s":"Scroll_fadeSize-s__WeI0f","fadeSize-m":"Scroll_fadeSize-m__Hb-1p","fadeSize-l":"Scroll_fadeSize-l__E0CbA","fadeSize-xl":"Scroll_fadeSize-xl__jcYk0","autoHide":"Scroll_autoHide__URLqx","bar":"Scroll_bar__6CL7R","isScrolling":"Scroll_isScrolling__yV2Pj","thumb":"Scroll_thumb__ccEPj","isActive":"Scroll_isActive__Nkkmi","isTouch":"Scroll_isTouch__Vb2mT","size-s":"Scroll_size-s__px8sG","size-m":"Scroll_size-m__gfTwB","size-l":"Scroll_size-l__Pe4z7","extraWide":"Scroll_extraWide__IL5ZI"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,37 @@
1
+ function isMultiple(value) {
2
+ return Array.isArray(value);
3
+ }
4
+ function renderLabel({ label, render }) {
5
+ if (render)
6
+ return render(label);
7
+ return label;
8
+ }
9
+ function buildOptionsTree(options, idsMap) {
10
+ function buildOption(id) {
11
+ const { items, childIds } = idsMap;
12
+ const data = { ...items[id] };
13
+ const childs = childIds[id];
14
+ if (childs)
15
+ data.children = childs.map(buildOption);
16
+ return data;
17
+ }
18
+ return options.reduce((acc, { id, parentId }) => (parentId ? acc : [...acc, buildOption(id)]), []);
19
+ }
20
+ function mapById(options) {
21
+ return options.reduce((acc, item) => {
22
+ const { items, childIds } = acc;
23
+ const { id, parentId } = item;
24
+ items[id] = item;
25
+ if (parentId) {
26
+ if (!childIds[parentId])
27
+ childIds[parentId] = [];
28
+ childIds[parentId].push(id);
29
+ }
30
+ return acc;
31
+ }, {
32
+ items: {},
33
+ childIds: {},
34
+ });
35
+ }
36
+
37
+ export { buildOptionsTree, isMultiple, mapById, renderLabel };