@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Oleh Apostol
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,29 @@
1
+ [![npm](https://img.shields.io/npm/dm/@foreverido/uilib?style=flat-square)](https://www.npmjs.com/package/@foreverido/uilib)
2
+
3
+ # UILIB
4
+
5
+ Design system that makes building web applications with ReactJS faster and easier.
6
+
7
+ It's a collection of pre-built components, guidelines, and best practices that help you create high-quality user interfaces with less code.
8
+
9
+ ## Best practices
10
+
11
+ Codebase are folows software development principles: DRY, KISS, SOLID.
12
+
13
+ ### Tree shakable
14
+
15
+ UILIB is designed to make your web application run faster by only including the components that are actually used in your code. This reduces the amount of code that needs to be loaded, which makes your application load faster and run more smoothly.
16
+
17
+ ### Typescript support
18
+
19
+ UILIB is designed to work well with Typescript, which is a popular programming language that helps you write more reliable and maintainable code. With UILIB, you get all the benefits of Typescript, like better error messages and more accurate code completion, to make your development experience smoother and more productive.
20
+
21
+ ### SSR compatible
22
+
23
+ The components can be used in projects with SSR enabled. Check the test project [uilib-next](https://github.com/foreverido/uilib-nextjs)
24
+
25
+ ## Perspective
26
+
27
+ There's still a lot of work to be done to make it shine ✨
28
+
29
+ Always welcome to contact me if you have any ideas - [Twitter](https://twitter.com/vpostol), [Telegram](https://t.me/apostol) or create issue/PR in [GitHub](https://github.com/foreverido/uilib/pulls).
@@ -0,0 +1,78 @@
1
+ export { AssistiveText } from './src/components/AssistiveText/AssistiveText.js';
2
+ export { Button } from './src/components/Button/Button.js';
3
+ export { ButtonGroup } from './src/components/ButtonGroup/ButtonGroup.js';
4
+ export { Checkbox } from './src/components/Checkbox/Checkbox.js';
5
+ export { Container } from './src/components/Container/Container.js';
6
+ export { DateTime, formatDate } from './src/components/DateTime/DateTime.js';
7
+ export { Draggable } from './src/components/Draggable/Draggable.js';
8
+ export { Expand } from './src/components/Expand/Expand.js';
9
+ export { Form } from './src/components/Form/Form.js';
10
+ export { Gallery } from './src/components/Gallery/Gallery.js';
11
+ export { Heading } from './src/components/Heading/Heading.js';
12
+ export { Icon, icons } from './src/components/Icon/Icon.js';
13
+ export { Input } from './src/components/Input/Input.js';
14
+ export { InputFile } from './src/components/InputFile/InputFile.js';
15
+ export { Label } from './src/components/Label/Label.js';
16
+ export { Lazy } from './src/components/Lazy/Lazy.js';
17
+ export { LightBox } from './src/components/LightBox/LightBox.js';
18
+ export { Notifications, NotificationsStore } from './src/components/Notifications/Notifications.js';
19
+ export { Paranja } from './src/components/Paranja/Paranja.js';
20
+ export { ANIMATION_DURATION, Popup } from './src/components/Popup/Popup.js';
21
+ export { Portal } from './src/components/Portal/Portal.js';
22
+ export { PopupMenu } from './src/components/PopupMenu/PopupMenu.js';
23
+ export { Router, RouterContext, RouterStore } from './src/components/Router/Router.js';
24
+ export { RequiredStar } from './src/components/RequiredStar/RequiredStar.js';
25
+ export { Select, SelectHelpers } from './src/components/Select/Select.js';
26
+ export { Scroll } from './src/components/Scroll/Scroll.js';
27
+ export { Spinner } from './src/components/Spinner/Spinner.js';
28
+ export { Table } from './src/components/Table/Table.js';
29
+ export { Tabs } from './src/components/Tabs/Tabs.js';
30
+ export { H1, H2, H3, H4, H5, H6 } from './src/components/Text/Text.js';
31
+ export { Theme } from './src/components/Theme/Theme.js';
32
+ export { VH } from './src/components/VH/VH.js';
33
+ export { default as Virtualized } from './src/components/Virtualized/Virtualized.js';
34
+ export { default as VirtualizedList } from './src/components/Virtualized/List/List.js';
35
+ export { default as VirtualizedListScroll } from './src/components/Virtualized/List/ListScroll.js';
36
+ import * as Virtualized_types from './src/components/Virtualized/Virtualized.types.js';
37
+ export { Virtualized_types as VirtualizedTypes };
38
+ import * as i18n from './src/services/i18n.js';
39
+ export { i18n };
40
+ import * as env from './src/tools/env.js';
41
+ export { env };
42
+ export { config } from './src/tools/config.js';
43
+ import * as array from './src/tools/array.js';
44
+ export { array };
45
+ import * as string from './src/tools/string.js';
46
+ export { string };
47
+ import * as number from './src/tools/number.js';
48
+ export { number };
49
+ import * as object from './src/tools/object.js';
50
+ export { object };
51
+ import * as file from './src/tools/file.js';
52
+ export { file };
53
+ import * as uid from './src/tools/uid.js';
54
+ export { uid };
55
+ import * as dom from './src/tools/dom.js';
56
+ export { dom };
57
+ export { default as rangeMap } from './src/tools/rangeMap.js';
58
+ import * as scroll from './src/tools/scroll.js';
59
+ export { scroll };
60
+ export { default as throttle } from './src/tools/throttle.js';
61
+ export { default as debounce } from './src/tools/debounce.js';
62
+ export { default as LS } from './src/tools/localStorage.js';
63
+ import * as resizeObserver from './src/tools/resizeObserver.js';
64
+ export { resizeObserver };
65
+ import * as queryParams from './src/tools/queryParams.js';
66
+ export { queryParams };
67
+ import * as Form_types from './src/components/Form/Form.types.js';
68
+ export { Form_types as FormTypes };
69
+ export { SubmitButtons } from './src/components/Form/SubmitButtons/SubmitButtons.js';
70
+ import * as InputFile_types from './src/components/InputFile/InputFile.types.js';
71
+ export { InputFile_types as InputFileTypes };
72
+ export { Route } from './src/components/Router/Route.js';
73
+ export { Redirect } from './src/components/Router/Redirect.js';
74
+ export { Link } from './src/components/Router/Link/Link.js';
75
+ import * as Theme_helpers from './src/components/Theme/Theme.helpers.js';
76
+ export { Theme_helpers as ThemeHelpers };
77
+ import * as Theme_defaults from './src/components/Theme/Theme.defaults.js';
78
+ export { Theme_defaults as ThemeDefaults };
@@ -0,0 +1,28 @@
1
+ function styleInject(css, ref) {
2
+ if ( ref === void 0 ) ref = {};
3
+ var insertAt = ref.insertAt;
4
+
5
+ if (!css || typeof document === 'undefined') { return; }
6
+
7
+ var head = document.head || document.getElementsByTagName('head')[0];
8
+ var style = document.createElement('style');
9
+ style.type = 'text/css';
10
+
11
+ if (insertAt === 'top') {
12
+ if (head.firstChild) {
13
+ head.insertBefore(style, head.firstChild);
14
+ } else {
15
+ head.appendChild(style);
16
+ }
17
+ } else {
18
+ head.appendChild(style);
19
+ }
20
+
21
+ if (style.styleSheet) {
22
+ style.styleSheet.cssText = css;
23
+ } else {
24
+ style.appendChild(document.createTextNode(css));
25
+ }
26
+ }
27
+
28
+ export { styleInject as default };
@@ -0,0 +1,10 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import cn from 'classnames';
3
+ import S from './AssistiveText.styl.js';
4
+
5
+ function AssistiveText(props) {
6
+ const { className, size = 'm', variant = 'default', children, ...rest } = props;
7
+ return (jsx("div", { className: cn(S.root, S[`size-${size}`], S[`variant-${variant}`], className), ...rest, children: children }));
8
+ }
9
+
10
+ export { AssistiveText };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".AssistiveText_root__OI3ju{font-size:80%;line-height:1.5em;margin-bottom:.2em}.AssistiveText_size-s__gsuS-{padding:0 10px}.AssistiveText_size-m__PDlkc{padding:0 12px}.AssistiveText_size-l__D-9pQ{padding:0 14px}.AssistiveText_variant-danger__N8sGS{color:var(--danger-color)}";
4
+ var S = {"root":"AssistiveText_root__OI3ju","size-s":"AssistiveText_size-s__gsuS-","size-m":"AssistiveText_size-m__PDlkc","size-l":"AssistiveText_size-l__D-9pQ","variant-danger":"AssistiveText_variant-danger__N8sGS"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,12 @@
1
+ // Safari and Firefox not fire focus on click
2
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
3
+ function focusOnClick(buttonElem) {
4
+ const ua = navigator.userAgent.toLowerCase();
5
+ const isSafari = ua.indexOf('safari') > -1 && ua.indexOf('chrome') === -1;
6
+ const isFirefox = /firefox/.test(ua);
7
+ if (isSafari || isFirefox) {
8
+ buttonElem?.focus();
9
+ }
10
+ }
11
+
12
+ export { focusOnClick };
@@ -0,0 +1,38 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import cn from 'classnames';
4
+ import { Spinner } from '../Spinner/Spinner.js';
5
+ import S from './Button.styl.js';
6
+ import { focusOnClick } from './Button.helpers.js';
7
+
8
+ function Button(props) {
9
+ const { className, loading, checked, square, onMouseUp, children, type = 'button', variant = 'default', size = 'm', prefixElem, postfixElem, onRef, ...rest } = props;
10
+ const { disabled } = props;
11
+ const classes = cn(S.root, S[`size-${size}`], S[`variant-${variant}`], loading && S.loading, checked && S.checked, square && S.square, className);
12
+ const [buttonElem, setButtonElem] = useState(null);
13
+ const onRefHandler = useCallback(elem => {
14
+ if (onRef)
15
+ onRef(elem);
16
+ setButtonElem(elem);
17
+ }, []);
18
+ // @ts-ignore
19
+ rest.onMouseUp = useCallback(e => {
20
+ if (onMouseUp)
21
+ onMouseUp(e);
22
+ focusOnClick(buttonElem);
23
+ }, [onMouseUp, buttonElem]);
24
+ if (disabled)
25
+ rest.tabIndex = -1;
26
+ useEffect(() => {
27
+ const activeElement = document.activeElement;
28
+ if (!disabled || !activeElement)
29
+ return;
30
+ if (buttonElem && buttonElem === activeElement)
31
+ activeElement?.blur(); // eslint-disable-line
32
+ }, [disabled]);
33
+ return (
34
+ // @ts-ignore
35
+ jsxs("button", { className: classes, ...rest, type: type, ref: onRefHandler, children: [prefixElem && jsx("div", { className: S.prefix, children: prefixElem }), typeof children === 'string' ? jsx("span", { children: children }) : children, postfixElem && jsx("div", { className: S.postfix, children: postfixElem }), loading && jsx(Spinner, { className: cn(S.spinner, S.postfix), size: size })] }));
36
+ }
37
+
38
+ export { Button };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Button_root__SZns2{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:inset 0 0 0 2px none;box-sizing:border-box;color:inherit;cursor:pointer;display:inline-flex;justify-content:center;line-height:1em;text-decoration:none;transition:.2s ease-out;transition-property:background-color,box-shadow,opacity;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Button_root__SZns2:focus,.Button_root__SZns2:hover{background-color:var(--active-color-alpha-100)}.Button_root__SZns2[disabled]{background-color:var(--accent-color-alpha-100);opacity:.4;pointer-events:none}.Button_root__SZns2:active,.Button_root__SZns2:hover{background-color:var(--active-color-alpha-300)}.Button_root__SZns2:active{opacity:.7}.Button_root__SZns2.Button_loading__c4pdo{pointer-events:none}.Button_root__SZns2.Button_checked__X7f58,.Button_root__SZns2.Button_checked__X7f58:hover{background-color:var(--accent-color);box-shadow:none;color:var(--decent-color)}.Button_root__SZns2.Button_checked__X7f58:hover{background-color:var(--accent-color-alpha-900)}.Button_root__SZns2.Button_checked__X7f58 path{fill:var(--decent-color)}.Button_postfix__DwG-n,.Button_prefix__czqd5{display:flex}.Button_prefix__czqd5:not(:last-child){margin-right:.5em}.Button_postfix__DwG-n:not(:first-child){margin-left:.5em}.Button_size-s__-SIY1{border-radius:4px;font-size:12px;min-height:30px;min-width:30px;padding:0 10px}.Button_size-s__-SIY1.Button_square__eYSY3{max-height:30px;width:30px}.Button_size-m__TBXc-{border-radius:6px;font-size:16px;min-height:40px;min-width:40px;padding:0 12px}.Button_size-m__TBXc-.Button_square__eYSY3{max-height:40px;width:40px}.Button_size-l__Sx37T{border-radius:8px;font-size:20px;min-height:50px;min-width:50px;padding:0 14px}.Button_size-l__Sx37T.Button_square__eYSY3{max-height:50px}.Button_square__eYSY3{justify-content:center;padding:0}.Button_variant-clear__z1HZm:focus,.Button_variant-clear__z1HZm:hover,.Button_variant-default__vbo51:focus,.Button_variant-default__vbo51:hover{background-color:var(--active-color-alpha-300)}.Button_variant-clear__z1HZm{background-color:transparent}.Button_variant-default__vbo51{background-color:var(--accent-color-alpha-100)}.Button_variant-outlined__shnIq{background-color:transparent;box-shadow:inset 0 0 0 2px var(--accent-color)}.Button_variant-outlined__shnIq:focus{background-color:var(--active-color-alpha-300);box-shadow:inset 0 0 0 2px var(--active-color)}.Button_variant-primary__zhEQI{background-color:var(--active-color);color:var(--accent-color-alpha-900)}.Button_variant-primary__zhEQI:hover{background-color:var(--active-color-alpha-800)}.Button_variant-primary__zhEQI:focus{background-color:var(--active-color);box-shadow:inset 0 0 0 2px var(--accent-color)}.Button_spinner__ttaMr{margin-left:var(--indent-s)}";
4
+ var S = {"root":"Button_root__SZns2","loading":"Button_loading__c4pdo","checked":"Button_checked__X7f58","prefix":"Button_prefix__czqd5","postfix":"Button_postfix__DwG-n","size-s":"Button_size-s__-SIY1","square":"Button_square__eYSY3","size-m":"Button_size-m__TBXc-","size-l":"Button_size-l__Sx37T","variant-clear":"Button_variant-clear__z1HZm","variant-default":"Button_variant-default__vbo51","variant-outlined":"Button_variant-outlined__shnIq","variant-primary":"Button_variant-primary__zhEQI","spinner":"Button_spinner__ttaMr"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,10 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import cn from 'classnames';
3
+ import S from './ButtonGroup.styl.js';
4
+
5
+ function ButtonGroup(props) {
6
+ const { children, className, ...rest } = props;
7
+ return (jsx("div", { className: cn(S.root, className), ...rest, children: children }));
8
+ }
9
+
10
+ export { ButtonGroup };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".ButtonGroup_root__DGOTX{display:flex}.ButtonGroup_root__DGOTX>button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.ButtonGroup_root__DGOTX>button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}";
4
+ var S = {"root":"ButtonGroup_root__DGOTX"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,48 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Component } from 'react';
3
+ import cn from 'classnames';
4
+ import { createStore } from 'justorm/react';
5
+ import { Icon } from '../Icon/Icon.js';
6
+ import { generateUID } from '../../tools/uid.js';
7
+ import S from './Checkbox.styl.js';
8
+
9
+ class Checkbox extends Component {
10
+ id;
11
+ store;
12
+ static defaultProps = {
13
+ size: 'm',
14
+ variant: 'default',
15
+ label: '',
16
+ checked: false,
17
+ };
18
+ constructor(props) {
19
+ super(props);
20
+ this.id = props.id || generateUID();
21
+ this.store = createStore(this, { isActive: false, isFocused: false });
22
+ }
23
+ onMouseDown = () => {
24
+ this.store.isActive = true;
25
+ };
26
+ onMouseUp = () => {
27
+ this.store.isActive = false;
28
+ };
29
+ onFocus = (e) => {
30
+ const { onFocus } = this.props;
31
+ this.store.isFocused = true;
32
+ onFocus?.(e);
33
+ };
34
+ onBlur = (e) => {
35
+ const { onBlur } = this.props;
36
+ this.store.isFocused = false;
37
+ onBlur?.(e);
38
+ };
39
+ render() {
40
+ const { className, label, size, variant, error, ...props } = this.props;
41
+ const { checked, disabled } = props;
42
+ const { isActive, isFocused } = this.store;
43
+ const classes = cn(S.root, S[`size-${size}`], S[`variant-${variant}`], checked && S.checked, disabled && S.disabled, error && S.hasError, isActive && S.isActive, isFocused && S.isFocused, className);
44
+ return (jsxs("label", { className: classes, onMouseDown: this.onMouseDown, onMouseUp: this.onMouseUp, children: [jsxs("div", { className: S.controlWrapper, children: [jsx("input", { className: S.control, ...props, onFocus: this.onFocus, onBlur: this.onBlur, id: this.id, type: "checkbox", tabIndex: 0 }), jsx(Icon, { type: "check", className: S.checkmark, size: size })] }), label] }));
45
+ }
46
+ }
47
+
48
+ export { Checkbox };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Checkbox_root__4nsMp{align-items:center;box-sizing:border-box;color:inherit;cursor:pointer;display:inline-flex;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Checkbox_disabled__mcg2G{opacity:.4;pointer-events:none}.Checkbox_controlWrapper__bHYKO{border-radius:var(--border-radius-m);display:block;margin-right:1em;position:relative;transition:.2s ease-out;transition-property:opacity,box-shadow}.Checkbox_variant-default__ck-xT .Checkbox_controlWrapper__bHYKO{background-color:var(--accent-color-alpha-100)}.Checkbox_variant-outlined__dtjX- .Checkbox_controlWrapper__bHYKO{background-color:transparent;box-shadow:inset 0 0 0 2px var(--accent-color)}.Checkbox_root__4nsMp:hover .Checkbox_controlWrapper__bHYKO{background-color:var(--active-color-alpha-100)}.Checkbox_isActive__uu6VN .Checkbox_controlWrapper__bHYKO,.Checkbox_isFocused__fMPy3 .Checkbox_controlWrapper__bHYKO{box-shadow:inset 0 0 0 2px var(--active-color)!important}.Checkbox_hasError__YUP6n .Checkbox_controlWrapper__bHYKO{box-shadow:inset 0 0 0 2px var(--danger-color)!important}.Checkbox_isActive__uu6VN .Checkbox_controlWrapper__bHYKO{background-color:var(--active-color-alpha-100);opacity:.7}.Checkbox_control__SAuxo{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:inset 0 0 0 2px none;box-sizing:border-box;cursor:pointer;transition:.2s ease-out;transition-property:background-color,box-shadow,opacity;transition:.1s ease-out;transition-property:background-color,color}.Checkbox_control__SAuxo:focus,.Checkbox_control__SAuxo:hover{background-color:var(--active-color-alpha-100)}.Checkbox_control__SAuxo[disabled]{background-color:var(--accent-color-alpha-100);opacity:.4;pointer-events:none}.Checkbox_checkmark__FrCws{height:100%!important;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transform:scale(.6) rotateY(-90deg);transition:.1s ease-in;transition-property:transform,opacity;width:100%!important}.Checkbox_checked__ZREOF .Checkbox_checkmark__FrCws{opacity:1;transform:scale(.6)}.Checkbox_size-s__T8-y2{font-size:12px}.Checkbox_size-s__T8-y2 .Checkbox_controlWrapper__bHYKO{border-radius:4px;min-height:30px;min-width:30px}.Checkbox_size-m__LCe6f{font-size:16px}.Checkbox_size-m__LCe6f .Checkbox_controlWrapper__bHYKO{border-radius:6px;min-height:40px;min-width:40px}.Checkbox_size-l__U-WS4{font-size:20px}.Checkbox_size-l__U-WS4 .Checkbox_controlWrapper__bHYKO{border-radius:8px;min-height:50px;min-width:50px}";
4
+ var S = {"root":"Checkbox_root__4nsMp","disabled":"Checkbox_disabled__mcg2G","controlWrapper":"Checkbox_controlWrapper__bHYKO","variant-default":"Checkbox_variant-default__ck-xT","variant-outlined":"Checkbox_variant-outlined__dtjX-","isActive":"Checkbox_isActive__uu6VN","isFocused":"Checkbox_isFocused__fMPy3","hasError":"Checkbox_hasError__YUP6n","control":"Checkbox_control__SAuxo","checkmark":"Checkbox_checkmark__FrCws","checked":"Checkbox_checked__ZREOF","size-s":"Checkbox_size-s__T8-y2","size-m":"Checkbox_size-m__LCe6f","size-l":"Checkbox_size-l__U-WS4"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,12 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import cn from 'classnames';
3
+ import S from './Container.styl.js';
4
+
5
+ function Container(props) {
6
+ const { className, children, size, alignItemsCenter, justifyContentCenter, vertical, fullHeight, fullWidth, scrolledX, scrolledY, style, ...rest } = props;
7
+ const classes = cn(S.root, size && S[`size-${size}`], alignItemsCenter && S.alignItemsCenter, justifyContentCenter && S.justifyContentCenter, vertical && S.vertical, scrolledX && S.scrolledX, scrolledY && S.scrolledY, fullHeight && S.fullHeight, fullWidth && S.fullWidth, className);
8
+ const stylesObj = { ...style };
9
+ return (jsx("div", { className: classes, ...rest, style: stylesObj, children: children }));
10
+ }
11
+
12
+ export { Container };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Container_root__ZumTN{display:flex;margin:0 auto}@media (min-width:var(--tablet )){.Container_root__ZumTN{padding:var(--indent-m)}}@media (min-width:var(--desktop )){.Container_root__ZumTN{padding:var(--indent-l)}}.Container_size-s__zyPBS{padding:var(--indent-s)}.Container_size-m__MGaiX{padding:var(--indent-m)}.Container_size-l__hHWPx{padding:var(--indent-l)}.Container_size-xl__1X88n{padding:50px}.Container_vertical__Xzag9{flex-direction:column}.Container_justifyContentCenter__t2p2K{justify-content:center}.Container_alignItemsCenter__gVolL{align-items:center}.Container_fullHeight__5dBZa{height:100%;width:100%}.Container_fullWidth__javSY{width:100%}.Container_scrolledX__FFZpZ{overflow-x:auto}.Container_scrolledY__0HKdO{overflow-y:auto}";
4
+ var S = {"root":"Container_root__ZumTN","size-s":"Container_size-s__zyPBS","size-m":"Container_size-m__MGaiX","size-l":"Container_size-l__hHWPx","size-xl":"Container_size-xl__1X88n","vertical":"Container_vertical__Xzag9","justifyContentCenter":"Container_justifyContentCenter__t2p2K","alignItemsCenter":"Container_alignItemsCenter__gVolL","fullHeight":"Container_fullHeight__5dBZa","fullWidth":"Container_fullWidth__javSY","scrolledX":"Container_scrolledX__FFZpZ","scrolledY":"Container_scrolledY__0HKdO"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,17 @@
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
+ import moment from 'moment';
3
+
4
+ function formatDate({ value, format, locale = 'en' }) {
5
+ const d = moment(value).locale(locale);
6
+ if (format) {
7
+ if (d[format])
8
+ return d[format]();
9
+ return d.format(format);
10
+ }
11
+ return d.toString();
12
+ }
13
+ function DateTime({ value = new Date(), format, locale }) {
14
+ return jsx(Fragment, { children: formatDate({ value, format, locale }) });
15
+ }
16
+
17
+ export { DateTime, formatDate };
@@ -0,0 +1,136 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Component } from 'react';
3
+ import { createStore } from 'justorm/react';
4
+ import cn from 'classnames';
5
+ import Time from 'timen';
6
+ import 'nanoid';
7
+ import '../../tools/dom.js';
8
+ import debounce from '../../tools/debounce.js';
9
+ import 'compareq';
10
+ import 'lodash.pick';
11
+ import '../../tools/queryParams.js';
12
+ import S from './Draggable.styl.js';
13
+
14
+ class Draggable extends Component {
15
+ store;
16
+ startPos = null;
17
+ draggingElem = null;
18
+ draggingElemBounds = null;
19
+ dragStartFired = false;
20
+ timers = Time.create();
21
+ constructor(props) {
22
+ super(props);
23
+ this.store = createStore(this, {
24
+ draggingId: null,
25
+ underId: null,
26
+ underOffset: '',
27
+ });
28
+ }
29
+ componentDidUpdate(prevProps) {
30
+ if (prevProps.items.join(',') !== this.props.items.join(',')) {
31
+ this.dropUnder();
32
+ }
33
+ }
34
+ componentWillUnmount() {
35
+ this.timers.clear();
36
+ }
37
+ onPointerDown = e => {
38
+ const { clientX: x, clientY: y, currentTarget } = e;
39
+ e.stopPropagation();
40
+ this.timers.clear();
41
+ this.startPos = { x, y };
42
+ this.draggingElem = currentTarget;
43
+ this.draggingElemBounds = currentTarget.getBoundingClientRect();
44
+ document.addEventListener('pointermove', this.onPointerMove);
45
+ document.addEventListener('pointerup', this.onPointerUp);
46
+ };
47
+ onPointerMove = e => {
48
+ if (!this.draggingElem)
49
+ return;
50
+ const { clientX: x, clientY: y } = e;
51
+ if (!this.store.draggingId) {
52
+ this.store.draggingId = this.draggingElem.dataset.id;
53
+ }
54
+ if (!this.dragStartFired) {
55
+ this.dragStartFired = true;
56
+ this.props.onDragStart?.(this.store.draggingId);
57
+ }
58
+ const dx = x - this.startPos.x;
59
+ const dy = y - this.startPos.y;
60
+ this.transformInner(this.draggingElem, `translate(${dx}px, ${dy}px)`);
61
+ this.checkUnderElem(x, y);
62
+ };
63
+ checkUnderElem = debounce((x, y) => {
64
+ const underItem = document.elementFromPoint(x, y)?.closest(`.${S.item}`);
65
+ if (!underItem) {
66
+ this.store.underOffset = '';
67
+ this.store.underId = null;
68
+ return;
69
+ }
70
+ // @ts-ignore
71
+ const { id } = underItem.dataset;
72
+ const { draggingId, underId } = this.store;
73
+ if (!this.startPos || id === draggingId || id === underId)
74
+ return;
75
+ const { x: x1, y: y1 } = this.draggingElemBounds;
76
+ const { x: x2, y: y2 } = this.selectInner(underItem).getBoundingClientRect();
77
+ const dx = x1 - x2;
78
+ const dy = y1 - y2;
79
+ this.store.underOffset = `translate(${dx}px, ${dy}px)`;
80
+ this.store.underId = id;
81
+ }, 100);
82
+ onPointerOut = ({ target }) => {
83
+ const { id } = target.dataset;
84
+ if (!id || id === this.store.draggingId)
85
+ return;
86
+ this.transformInner(target, null);
87
+ this.dropUnder();
88
+ };
89
+ onPointerUp = e => {
90
+ const { underId, draggingId } = this.store;
91
+ const { onChange, onDragEnd } = this.props;
92
+ const { id } = this.draggingElem.dataset;
93
+ if (draggingId) {
94
+ e.stopPropagation();
95
+ e.preventDefault();
96
+ }
97
+ document.removeEventListener('pointermove', this.onPointerMove);
98
+ document.removeEventListener('pointerup', this.onPointerUp);
99
+ this.dragStartFired = false;
100
+ this.startPos = null;
101
+ this.store.draggingId = null;
102
+ if (underId && onChange) {
103
+ const newItems = [...this.props.items];
104
+ const draggingIndex = newItems.indexOf(id);
105
+ const underIndex = newItems.indexOf(underId);
106
+ newItems[underIndex] = id;
107
+ newItems[draggingIndex] = underId;
108
+ onChange(newItems);
109
+ }
110
+ this.dropUnder();
111
+ this.timers.after(100, () => {
112
+ if (this.draggingElem) {
113
+ this.selectInner(this.draggingElem).style.transform = null;
114
+ this.draggingElem = null;
115
+ }
116
+ onDragEnd?.(draggingId);
117
+ });
118
+ };
119
+ selectInner = elem => elem.querySelector('& > div');
120
+ transformInner(elem, str) {
121
+ if (!elem)
122
+ return;
123
+ this.selectInner(elem).style.transform = str;
124
+ }
125
+ dropUnder() {
126
+ this.store.underId = null;
127
+ this.store.underOffset = null;
128
+ }
129
+ render() {
130
+ const { items, className, itemClassName, renderItem, children } = this.props;
131
+ const { draggingId, underId, underOffset } = this.store;
132
+ return (jsxs("div", { className: cn(S.root, draggingId && S.dragging, className), children: [items.map(id => (jsx("div", { className: cn(S.item, itemClassName, id === draggingId && S.active), onPointerDown: this.onPointerDown, "data-id": id, children: jsx("div", { className: S.inner, style: underId === id ? { transform: underOffset } : null, children: renderItem(id, id === draggingId) }) }, id))), children] }));
133
+ }
134
+ }
135
+
136
+ export { Draggable };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Draggable_root__S1BgI{display:flex;flex-wrap:wrap;position:relative;touch-action:none}.Draggable_item__Z1pXk{display:flex}.Draggable_inner__c4syM{height:100%;transition:transform .2s ease-out;width:100%}.Draggable_dragging__M8qhF .Draggable_active__XcFM3,.Draggable_dragging__M8qhF .Draggable_inner__c4syM{pointer-events:none}.Draggable_dragging__M8qhF .Draggable_active__XcFM3 .Draggable_inner__c4syM{transition-duration:0s;z-index:1}";
4
+ var S = {"root":"Draggable_root__S1BgI","item":"Draggable_item__Z1pXk","inner":"Draggable_inner__c4syM","dragging":"Draggable_dragging__M8qhF","active":"Draggable_active__XcFM3"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,24 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import cn from 'classnames';
4
+ import { Button } from '../Button/Button.js';
5
+ import { Icon } from '../Icon/Icon.js';
6
+ import S from './Expand.styl.js';
7
+
8
+ function Expand(props) {
9
+ const { className, size = 'm', header, headerClassName, content, contentProps = {}, isOpen: initialOpen = false, onChange, } = props;
10
+ const [isOpen, setIsOpen] = useState(initialOpen);
11
+ const onHeaderClick = useCallback(() => {
12
+ const value = !isOpen;
13
+ setIsOpen(value);
14
+ onChange?.(value);
15
+ }, [isOpen]);
16
+ useEffect(() => {
17
+ setIsOpen(initialOpen);
18
+ }, [initialOpen]);
19
+ return (jsxs("div", { className: cn(S.root, isOpen && S.isOpen, className), children: [jsxs(Button, { variant: "clear", className: cn(S.header, headerClassName), size: size, onClick: onHeaderClick, children: [header, "\u00A0", jsx(Icon, { type: "chevronRight", size: size, className: S.headerIcon })] }), isOpen &&
20
+ // @ts-ignore
21
+ (content?.(contentProps) || jsx("div", { ...contentProps, children: content }))] }));
22
+ }
23
+
24
+ export { Expand };
@@ -0,0 +1,7 @@
1
+ import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
+
3
+ var css_248z = ".Expand_root__zxSvx{display:flex;flex-direction:column}.Expand_root__zxSvx+.Expand_root__zxSvx{margin-top:var(--indent-s)}.Expand_header__LxAel{justify-content:space-between}.Expand_headerIcon__CXlwY{transition:transform .2s ease-out}.Expand_isOpen__k6lyZ .Expand_header__LxAel{background-color:var(--active-color-alpha-500)}.Expand_isOpen__k6lyZ .Expand_headerIcon__CXlwY{transform:rotate(90deg)}";
4
+ var S = {"root":"Expand_root__zxSvx","header":"Expand_header__LxAel","headerIcon":"Expand_headerIcon__CXlwY","isOpen":"Expand_isOpen__k6lyZ"};
5
+ styleInject(css_248z);
6
+
7
+ export { S as default };
@@ -0,0 +1,42 @@
1
+ import compare from 'compareq';
2
+ import { clone } from '../../tools/object.js';
3
+
4
+ function patchWithCustomMessages(checkRes, validationSchema) {
5
+ return checkRes.reduce((acc, { field, ...rest }) => {
6
+ const customMessage = validationSchema[field]?.message ??
7
+ validationSchema[field]?.messages?.[rest.type];
8
+ if (customMessage)
9
+ rest.message = customMessage;
10
+ return { ...acc, [field]: rest };
11
+ }, {});
12
+ }
13
+ function dropFocusFromSubmit() {
14
+ const focusedSubmit = document.querySelector('button[type=submit]:focus');
15
+ focusedSubmit?.blur(); // eslint-disable-line
16
+ }
17
+ function getInitialTouched(initialValues) {
18
+ return Object.keys(initialValues).reduce((acc, name) => ({ ...acc, [name]: false }), {});
19
+ }
20
+ function getNotEmpty(_defaultValues, values) {
21
+ const defaultValues = _defaultValues || values;
22
+ return Object.entries(values).reduce((acc, [field, val]) => compare(defaultValues[field], val) ? acc : { ...acc, [field]: true }, {});
23
+ }
24
+ function getVal(e, val, valField) {
25
+ if (val !== undefined)
26
+ return val;
27
+ return e?.target ? e.target[valField] : e;
28
+ }
29
+ function cloneValue(val) {
30
+ if (typeof val === 'object' && val !== null) {
31
+ // date
32
+ if (val?._isAMomentObject)
33
+ return val.clone();
34
+ return clone(val);
35
+ }
36
+ return val;
37
+ }
38
+ function cloneValues(values) {
39
+ return Object.entries(values).reduce((acc, [name, val]) => ({ ...acc, [name]: cloneValue(val) }), {});
40
+ }
41
+
42
+ export { cloneValues, dropFocusFromSubmit, getInitialTouched, getNotEmpty, getVal, patchWithCustomMessages };