@skbkontur/react-ui 3.6.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/cjs/components/Button/Button.d.ts +1 -0
  3. package/cjs/components/Button/Button.js +7 -4
  4. package/cjs/components/Button/Button.js.map +1 -1
  5. package/cjs/components/Button/Button.styles.js +2 -2
  6. package/cjs/components/Button/Button.styles.js.map +1 -1
  7. package/cjs/components/Checkbox/Checkbox.js +9 -8
  8. package/cjs/components/Checkbox/Checkbox.js.map +1 -1
  9. package/cjs/components/Checkbox/Checkbox.styles.js +3 -2
  10. package/cjs/components/Checkbox/Checkbox.styles.js.map +1 -1
  11. package/cjs/components/CurrencyLabel/CurrencyLabel.js +14 -5
  12. package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
  13. package/cjs/components/CurrencyLabel/CurrencyLabel.styles.d.ts +4 -0
  14. package/cjs/components/CurrencyLabel/CurrencyLabel.styles.js +9 -0
  15. package/cjs/components/CurrencyLabel/CurrencyLabel.styles.js.map +1 -0
  16. package/cjs/components/FxInput/FxInput.js +1 -1
  17. package/cjs/components/FxInput/FxInput.js.map +1 -1
  18. package/cjs/components/Input/Input.styles.js +1 -1
  19. package/cjs/components/Input/Input.styles.js.map +1 -1
  20. package/cjs/components/Kebab/Kebab.js +2 -2
  21. package/cjs/components/Kebab/Kebab.js.map +1 -1
  22. package/cjs/components/Link/Link.js +2 -2
  23. package/cjs/components/Link/Link.js.map +1 -1
  24. package/cjs/components/Loader/Loader.d.ts +3 -1
  25. package/cjs/components/Loader/Loader.js +20 -1
  26. package/cjs/components/Loader/Loader.js.map +1 -1
  27. package/cjs/components/MenuItem/MenuItem.md +1 -1
  28. package/cjs/components/MenuItem/MenuItem.styles.js +3 -2
  29. package/cjs/components/MenuItem/MenuItem.styles.js.map +1 -1
  30. package/cjs/components/Modal/Modal.styles.d.ts +1 -0
  31. package/cjs/components/Modal/Modal.styles.js +24 -21
  32. package/cjs/components/Modal/Modal.styles.js.map +1 -1
  33. package/cjs/components/Modal/ModalClose.js +23 -3
  34. package/cjs/components/Modal/ModalClose.js.map +1 -1
  35. package/cjs/components/Paging/Paging.js +2 -2
  36. package/cjs/components/Paging/Paging.js.map +1 -1
  37. package/cjs/components/Paging/Paging.styles.js +2 -1
  38. package/cjs/components/Paging/Paging.styles.js.map +1 -1
  39. package/cjs/components/Radio/Radio.d.ts +9 -1
  40. package/cjs/components/Radio/Radio.js +37 -4
  41. package/cjs/components/Radio/Radio.js.map +1 -1
  42. package/cjs/components/Radio/Radio.styles.d.ts +1 -1
  43. package/cjs/components/Radio/Radio.styles.js +5 -10
  44. package/cjs/components/Radio/Radio.styles.js.map +1 -1
  45. package/cjs/components/ScrollContainer/ScrollBar.d.ts +37 -0
  46. package/cjs/components/ScrollContainer/ScrollBar.js +244 -0
  47. package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -0
  48. package/cjs/components/ScrollContainer/ScrollContainer.constants.d.ts +23 -0
  49. package/cjs/components/ScrollContainer/ScrollContainer.constants.js +33 -0
  50. package/cjs/components/ScrollContainer/ScrollContainer.constants.js.map +1 -0
  51. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +38 -23
  52. package/cjs/components/ScrollContainer/ScrollContainer.helpers.d.ts +10 -0
  53. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js +62 -0
  54. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js.map +1 -0
  55. package/cjs/components/ScrollContainer/ScrollContainer.js +81 -153
  56. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  57. package/cjs/components/ScrollContainer/ScrollContainer.md +62 -13
  58. package/cjs/components/ScrollContainer/ScrollContainer.styles.d.ts +12 -3
  59. package/cjs/components/ScrollContainer/ScrollContainer.styles.js +72 -9
  60. package/cjs/components/ScrollContainer/ScrollContainer.styles.js.map +1 -1
  61. package/cjs/components/SidePage/SidePage.d.ts +1 -2
  62. package/cjs/components/SidePage/SidePage.js +1 -5
  63. package/cjs/components/SidePage/SidePage.js.map +1 -1
  64. package/cjs/components/SidePage/SidePage.styles.d.ts +2 -1
  65. package/cjs/components/SidePage/SidePage.styles.js +44 -28
  66. package/cjs/components/SidePage/SidePage.styles.js.map +1 -1
  67. package/cjs/components/SidePage/SidePageHeader.d.ts +4 -1
  68. package/cjs/components/SidePage/SidePageHeader.js +33 -23
  69. package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
  70. package/cjs/components/Switcher/Switcher.js +1 -1
  71. package/cjs/components/Switcher/Switcher.js.map +1 -1
  72. package/cjs/components/Switcher/Switcher.styles.d.ts +1 -1
  73. package/cjs/components/Switcher/Switcher.styles.js +3 -2
  74. package/cjs/components/Switcher/Switcher.styles.js.map +1 -1
  75. package/cjs/components/Tabs/Tab.d.ts +0 -3
  76. package/cjs/components/Tabs/Tab.js +3 -13
  77. package/cjs/components/Tabs/Tab.js.map +1 -1
  78. package/cjs/components/Tabs/Tab.styles.js +2 -2
  79. package/cjs/components/Tabs/Tab.styles.js.map +1 -1
  80. package/cjs/components/Toggle/Toggle.js +6 -5
  81. package/cjs/components/Toggle/Toggle.js.map +1 -1
  82. package/cjs/components/Toggle/Toggle.styles.d.ts +1 -0
  83. package/cjs/components/Toggle/Toggle.styles.js +26 -16
  84. package/cjs/components/Toggle/Toggle.styles.js.map +1 -1
  85. package/cjs/components/Token/Token.styles.js +8 -9
  86. package/cjs/components/Token/Token.styles.js.map +1 -1
  87. package/cjs/components/TokenInput/TokenInput.d.ts +8 -0
  88. package/cjs/components/TokenInput/TokenInput.js +24 -2
  89. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  90. package/cjs/components/Tooltip/Tooltip.styles.js +2 -1
  91. package/cjs/components/Tooltip/Tooltip.styles.js.map +1 -1
  92. package/cjs/internal/CustomComboBox/ComboBoxView.js +2 -1
  93. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  94. package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js +3 -2
  95. package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js.map +1 -1
  96. package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js +5 -7
  97. package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
  98. package/cjs/internal/InputLikeText/InputLikeText.js +2 -1
  99. package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
  100. package/cjs/internal/PopupMenu/PopupMenu.js +1 -1
  101. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  102. package/cjs/internal/RenderContainer/RenderContainer.js +2 -1
  103. package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
  104. package/cjs/internal/ThemePlayground/darkTheme.js +3 -3
  105. package/cjs/internal/ThemePlayground/darkTheme.js.map +1 -1
  106. package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  107. package/cjs/internal/icons/CrossIcon.js +8 -1
  108. package/cjs/internal/icons/CrossIcon.js.map +1 -1
  109. package/cjs/internal/themes/DefaultTheme.d.ts +23 -7
  110. package/cjs/internal/themes/DefaultTheme.js +77 -32
  111. package/cjs/internal/themes/DefaultTheme.js.map +1 -1
  112. package/cjs/internal/themes/FlatTheme.d.ts +4 -4
  113. package/cjs/internal/themes/FlatTheme.js +16 -8
  114. package/cjs/internal/themes/FlatTheme.js.map +1 -1
  115. package/cjs/internal/themes/Theme8px.d.ts +0 -5
  116. package/cjs/internal/themes/Theme8px.js +2 -12
  117. package/cjs/internal/themes/Theme8px.js.map +1 -1
  118. package/cjs/lib/Upgrades.d.ts +2 -0
  119. package/cjs/lib/Upgrades.js +14 -0
  120. package/cjs/lib/Upgrades.js.map +1 -1
  121. package/cjs/lib/events/keyListener.d.ts +7 -0
  122. package/cjs/lib/events/keyListener.js +22 -0
  123. package/cjs/lib/events/keyListener.js.map +1 -0
  124. package/cjs/lib/events/keyboard/identifiers.d.ts +1 -0
  125. package/cjs/lib/events/keyboard/identifiers.js +6 -1
  126. package/cjs/lib/events/keyboard/identifiers.js.map +1 -1
  127. package/cjs/lib/events/tabListener.d.ts +1 -6
  128. package/cjs/lib/events/tabListener.js +2 -15
  129. package/cjs/lib/events/tabListener.js.map +1 -1
  130. package/cjs/lib/locale/LOCALECONTEXT.md +1 -1
  131. package/cjs/lib/styles/ColorFunctions.js +1 -1
  132. package/cjs/lib/styles/ColorFunctions.js.map +1 -1
  133. package/cjs/lib/theming/Emotion.js +1 -1
  134. package/cjs/lib/theming/Emotion.js.map +1 -1
  135. package/cjs/lib/theming/ThemeContext.md +1 -1
  136. package/cjs/lib/utils.d.ts +7 -0
  137. package/cjs/lib/utils.js +12 -2
  138. package/cjs/lib/utils.js.map +1 -1
  139. package/components/Button/Button/Button.js +5 -4
  140. package/components/Button/Button/Button.js.map +1 -1
  141. package/components/Button/Button.d.ts +1 -0
  142. package/components/Button/Button.styles/Button.styles.js +1 -1
  143. package/components/Button/Button.styles/Button.styles.js.map +1 -1
  144. package/components/Checkbox/Checkbox/Checkbox.js +5 -5
  145. package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
  146. package/components/Checkbox/Checkbox.styles/Checkbox.styles.js +2 -2
  147. package/components/Checkbox/Checkbox.styles/Checkbox.styles.js.map +1 -1
  148. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +11 -5
  149. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
  150. package/components/CurrencyLabel/CurrencyLabel.styles/CurrencyLabel.styles.js +10 -0
  151. package/components/CurrencyLabel/CurrencyLabel.styles/CurrencyLabel.styles.js.map +1 -0
  152. package/components/CurrencyLabel/CurrencyLabel.styles/package.json +6 -0
  153. package/components/CurrencyLabel/CurrencyLabel.styles.d.ts +4 -0
  154. package/components/FxInput/FxInput/FxInput.js +2 -1
  155. package/components/FxInput/FxInput/FxInput.js.map +1 -1
  156. package/components/Input/Input.styles/Input.styles.js +1 -1
  157. package/components/Input/Input.styles/Input.styles.js.map +1 -1
  158. package/components/Kebab/Kebab/Kebab.js +2 -2
  159. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  160. package/components/Link/Link/Link.js +2 -2
  161. package/components/Link/Link/Link.js.map +1 -1
  162. package/components/Loader/Loader/Loader.js +34 -14
  163. package/components/Loader/Loader/Loader.js.map +1 -1
  164. package/components/Loader/Loader.d.ts +3 -1
  165. package/components/MenuItem/MenuItem.md +1 -1
  166. package/components/MenuItem/MenuItem.styles/MenuItem.styles.js +1 -1
  167. package/components/MenuItem/MenuItem.styles/MenuItem.styles.js.map +1 -1
  168. package/components/Modal/Modal.styles/Modal.styles.js +18 -15
  169. package/components/Modal/Modal.styles/Modal.styles.js.map +1 -1
  170. package/components/Modal/Modal.styles.d.ts +1 -0
  171. package/components/Modal/ModalClose/ModalClose.js +25 -2
  172. package/components/Modal/ModalClose/ModalClose.js.map +1 -1
  173. package/components/Paging/Paging/Paging.js +2 -2
  174. package/components/Paging/Paging/Paging.js.map +1 -1
  175. package/components/Paging/Paging.styles/Paging.styles.js +1 -1
  176. package/components/Paging/Paging.styles/Paging.styles.js.map +1 -1
  177. package/components/Radio/Radio/Radio.js +36 -3
  178. package/components/Radio/Radio/Radio.js.map +1 -1
  179. package/components/Radio/Radio.d.ts +9 -1
  180. package/components/Radio/Radio.styles/Radio.styles.js +3 -3
  181. package/components/Radio/Radio.styles/Radio.styles.js.map +1 -1
  182. package/components/Radio/Radio.styles.d.ts +1 -1
  183. package/components/ScrollContainer/ScrollBar/ScrollBar.js +254 -0
  184. package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -0
  185. package/components/ScrollContainer/ScrollBar/package.json +6 -0
  186. package/components/ScrollContainer/ScrollBar.d.ts +37 -0
  187. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +121 -205
  188. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  189. package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js +31 -0
  190. package/components/ScrollContainer/ScrollContainer.constants/ScrollContainer.constants.js.map +1 -0
  191. package/components/ScrollContainer/ScrollContainer.constants/package.json +6 -0
  192. package/components/ScrollContainer/ScrollContainer.constants.d.ts +23 -0
  193. package/components/ScrollContainer/ScrollContainer.d.ts +38 -23
  194. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js +55 -0
  195. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js.map +1 -0
  196. package/components/ScrollContainer/ScrollContainer.helpers/package.json +6 -0
  197. package/components/ScrollContainer/ScrollContainer.helpers.d.ts +10 -0
  198. package/components/ScrollContainer/ScrollContainer.md +62 -13
  199. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js +23 -9
  200. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js.map +1 -1
  201. package/components/ScrollContainer/ScrollContainer.styles.d.ts +12 -3
  202. package/components/SidePage/SidePage/SidePage.js +2 -4
  203. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  204. package/components/SidePage/SidePage.d.ts +1 -2
  205. package/components/SidePage/SidePage.styles/SidePage.styles.js +20 -16
  206. package/components/SidePage/SidePage.styles/SidePage.styles.js.map +1 -1
  207. package/components/SidePage/SidePage.styles.d.ts +2 -1
  208. package/components/SidePage/SidePageHeader/SidePageHeader.js +40 -22
  209. package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
  210. package/components/SidePage/SidePageHeader.d.ts +4 -1
  211. package/components/Switcher/Switcher/Switcher.js +1 -1
  212. package/components/Switcher/Switcher/Switcher.js.map +1 -1
  213. package/components/Switcher/Switcher.styles/Switcher.styles.js +2 -2
  214. package/components/Switcher/Switcher.styles/Switcher.styles.js.map +1 -1
  215. package/components/Switcher/Switcher.styles.d.ts +1 -1
  216. package/components/Tabs/Tab/Tab.js +2 -16
  217. package/components/Tabs/Tab/Tab.js.map +1 -1
  218. package/components/Tabs/Tab.d.ts +0 -3
  219. package/components/Tabs/Tab.styles/Tab.styles.js +1 -1
  220. package/components/Tabs/Tab.styles/Tab.styles.js.map +1 -1
  221. package/components/Toggle/Toggle/Toggle.js +5 -5
  222. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  223. package/components/Toggle/Toggle.styles/Toggle.styles.js +15 -12
  224. package/components/Toggle/Toggle.styles/Toggle.styles.js.map +1 -1
  225. package/components/Toggle/Toggle.styles.d.ts +1 -0
  226. package/components/Token/Token.styles/Token.styles.js +2 -2
  227. package/components/Token/Token.styles/Token.styles.js.map +1 -1
  228. package/components/TokenInput/TokenInput/TokenInput.js +24 -2
  229. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  230. package/components/TokenInput/TokenInput.d.ts +8 -0
  231. package/components/Tooltip/Tooltip.styles/Tooltip.styles.js +1 -1
  232. package/components/Tooltip/Tooltip.styles/Tooltip.styles.js.map +1 -1
  233. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +2 -1
  234. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  235. package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js +3 -2
  236. package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js.map +1 -1
  237. package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js +4 -4
  238. package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
  239. package/internal/InputLikeText/InputLikeText/InputLikeText.js +2 -1
  240. package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
  241. package/internal/PopupMenu/PopupMenu/PopupMenu.js +2 -2
  242. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  243. package/internal/RenderContainer/RenderContainer/RenderContainer.js +2 -1
  244. package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
  245. package/internal/ThemePlayground/darkTheme/darkTheme.js +3 -3
  246. package/internal/ThemePlayground/darkTheme/darkTheme.js.map +1 -1
  247. package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  248. package/internal/icons/CrossIcon/CrossIcon.js +2 -1
  249. package/internal/icons/CrossIcon/CrossIcon.js.map +1 -1
  250. package/internal/themes/DefaultTheme/DefaultTheme.js +100 -19
  251. package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
  252. package/internal/themes/DefaultTheme.d.ts +23 -7
  253. package/internal/themes/FlatTheme/FlatTheme.js +18 -6
  254. package/internal/themes/FlatTheme/FlatTheme.js.map +1 -1
  255. package/internal/themes/FlatTheme.d.ts +4 -4
  256. package/internal/themes/Theme8px/Theme8px.js +1 -14
  257. package/internal/themes/Theme8px/Theme8px.js.map +1 -1
  258. package/internal/themes/Theme8px.d.ts +0 -5
  259. package/lib/Upgrades/Upgrades.js +13 -0
  260. package/lib/Upgrades/Upgrades.js.map +1 -1
  261. package/lib/Upgrades.d.ts +2 -0
  262. package/lib/events/keyListener/keyListener.js +22 -0
  263. package/lib/events/keyListener/keyListener.js.map +1 -0
  264. package/lib/events/keyListener/package.json +6 -0
  265. package/lib/events/keyListener.d.ts +7 -0
  266. package/lib/events/keyboard/identifiers/identifiers.js +10 -1
  267. package/lib/events/keyboard/identifiers/identifiers.js.map +1 -1
  268. package/lib/events/keyboard/identifiers.d.ts +1 -0
  269. package/lib/events/tabListener/tabListener.js +2 -19
  270. package/lib/events/tabListener/tabListener.js.map +1 -1
  271. package/lib/events/tabListener.d.ts +1 -6
  272. package/lib/locale/LOCALECONTEXT.md +1 -1
  273. package/lib/styles/ColorFunctions/ColorFunctions.js +1 -1
  274. package/lib/styles/ColorFunctions/ColorFunctions.js.map +1 -1
  275. package/lib/theming/Emotion/Emotion.js +1 -1
  276. package/lib/theming/Emotion/Emotion.js.map +1 -1
  277. package/lib/theming/ThemeContext.md +1 -1
  278. package/lib/utils/utils.js +10 -0
  279. package/lib/utils/utils.js.map +1 -1
  280. package/lib/utils.d.ts +7 -0
  281. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.tsx"],"names":["HIDE_SCROLLBAR_OFFSET","MIN_SCROLL_SIZE","ScrollContainer","state","scrollActive","scrollSize","scrollPos","hover","scrolling","scrollState","inner","scroll","refInner","element","props","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","refScroll","handleScrollWheel","handleNativeScroll","event","reflow","onScroll","preventDefault","LayoutEvents","emit","containerHeight","offsetHeight","contentHeight","scrollHeight","scrollTop","Math","max","getImmediateScrollState","onScrollStateChange","setState","handleScrollMouseDown","target","window","document","initialY","clientY","initialScrollTop","mouseMove","mouseMoveEvent","ratio","deltaY","Object","prototype","hasOwnProperty","call","returnValue","mouseUp","WheelEvent","handleMouseMove","right","currentTarget","getBoundingClientRect","pageX","setHover","handleMouseLeave","componentDidMount","componentDidUpdate","prevProps","render","scrollClass","styles","scrollInvert","Boolean","invert","scrollHover","scrollStyle","top","height","innerStyle","marginRight","paddingRight","maxHeight","scrollBehavior","scrollBehaviour","root","children","scrollTo","maxScroll","offsetTop","minScroll","scrollToTop","scrollToBottom","clientHeight","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","oneOfType","string","number","oneOf","func","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { getScrollWidth } from '../../lib/dom/getScrollWidth';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './ScrollContainer.styles';\n\nconst HIDE_SCROLLBAR_OFFSET = 30;\nconst MIN_SCROLL_SIZE = 20;\n\nexport type ScrollContainerScrollState = 'top' | 'scroll' | 'bottom';\n\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\nexport interface ScrollContainerProps extends CommonProps {\n invert?: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n preventWindowScroll?: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChange?: (scrollState: ScrollContainerScrollState) => void;\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n}\n\nexport interface ScrollContainerState {\n scrollActive: boolean;\n hover: boolean;\n scrolling: boolean;\n scrollSize: number;\n scrollPos: number;\n scrollState: ScrollContainerScrollState;\n}\n\nexport class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps = {\n scrollBehaviour: 'auto',\n };\n\n public state: ScrollContainerState = {\n scrollActive: false,\n scrollSize: 0,\n scrollPos: 0,\n\n // Mouse is moving where big scrollbar can be located.\n hover: false,\n // True when scroll is following mouse (mouse down on scroll).\n scrolling: false,\n scrollState: 'top',\n };\n\n private inner: Nullable<HTMLElement>;\n private scroll: Nullable<HTMLElement>;\n\n public componentDidMount() {\n this.reflow();\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n if (this.inner) {\n if (prevProps.preventWindowScroll && !this.props.preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && this.props.preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n this.reflow();\n }\n\n public render() {\n const state = this.state;\n const props = this.props;\n let scroll = null;\n\n if (state.scrollActive) {\n const scrollClass = cx({\n [styles.scroll()]: true,\n [styles.scrollInvert()]: Boolean(props.invert),\n [styles.scrollHover()]: state.hover || state.scrolling,\n });\n const scrollStyle = {\n top: state.scrollPos,\n height: state.scrollSize,\n };\n scroll = (\n <div\n ref={this.refScroll}\n className={scrollClass}\n style={scrollStyle}\n onMouseDown={this.handleScrollMouseDown}\n />\n );\n }\n\n const innerStyle: React.CSSProperties = {\n // hide vertical scrollbar with a little extra space\n marginRight: -1 * HIDE_SCROLLBAR_OFFSET,\n paddingRight: HIDE_SCROLLBAR_OFFSET - getScrollWidth(),\n\n maxHeight: props.maxHeight,\n scrollBehavior: props.scrollBehaviour,\n };\n\n return (\n <CommonWrapper {...this.props}>\n <div className={styles.root()} onMouseMove={this.handleMouseMove} onMouseLeave={this.handleMouseLeave}>\n {scroll}\n <div\n data-tid=\"ScrollContainer__inner\"\n className={styles.inner()}\n style={innerStyle}\n ref={this.refInner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * @public\n * @param {HTMLElement} element\n */\n public scrollTo(element: HTMLElement) {\n if (!element || !this.inner) {\n return;\n }\n const maxScroll = element.offsetTop;\n if (this.inner.scrollTop > maxScroll) {\n this.inner.scrollTop = maxScroll;\n return;\n }\n\n const minScroll = element.offsetTop + element.scrollHeight - this.inner.offsetHeight;\n if (this.inner.scrollTop < minScroll) {\n this.inner.scrollTop = minScroll;\n }\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.props.preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private refScroll = (element: HTMLElement | null) => {\n if (!this.scroll && element) {\n element.addEventListener('wheel', this.handleScrollWheel, { passive: false });\n }\n if (this.scroll && !element) {\n this.scroll.removeEventListener('wheel', this.handleScrollWheel);\n }\n this.scroll = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.reflow();\n this.props.onScroll?.(event);\n if (this.props.preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private reflow = () => {\n if (!this.inner) {\n return;\n }\n\n const containerHeight = this.inner.offsetHeight;\n const contentHeight = this.inner.scrollHeight;\n const scrollTop = this.inner.scrollTop;\n\n const scrollActive = containerHeight < contentHeight;\n\n if (!scrollActive && !this.state.scrollActive) {\n return;\n }\n\n let scrollSize = 0;\n let scrollPos = 0;\n let scrollState = this.state.scrollState;\n\n if (scrollActive) {\n scrollSize = Math.max((containerHeight / contentHeight) * containerHeight, MIN_SCROLL_SIZE);\n scrollPos = (scrollTop / (contentHeight - containerHeight)) * (containerHeight - scrollSize);\n }\n\n if (\n this.state.scrollActive !== scrollActive ||\n this.state.scrollSize !== scrollSize ||\n this.state.scrollPos !== scrollPos\n ) {\n scrollState = this.getImmediateScrollState();\n\n if (scrollState !== this.state.scrollState) {\n this.props.onScrollStateChange?.(scrollState);\n }\n\n this.setState({\n scrollActive,\n scrollSize,\n scrollPos,\n scrollState,\n });\n }\n };\n\n private handleScrollMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.inner) {\n return;\n }\n\n const target: Document = window.document;\n const initialY = event.clientY;\n const initialScrollTop = this.inner.scrollTop;\n\n const mouseMove = (mouseMoveEvent: MouseEvent) => {\n if (!this.inner) {\n return;\n }\n\n const ratio =\n (this.inner.scrollHeight - this.inner.offsetHeight) / (this.inner.offsetHeight - this.state.scrollSize);\n const deltaY = (mouseMoveEvent.clientY - initialY) * ratio;\n\n this.inner.scrollTop = initialScrollTop + deltaY;\n\n if (mouseMoveEvent.preventDefault) {\n mouseMoveEvent.preventDefault();\n }\n\n if (Object.prototype.hasOwnProperty.call(mouseMoveEvent, 'returnValue')) {\n (\n mouseMoveEvent as MouseEvent & {\n returnValue: boolean;\n }\n ).returnValue = false;\n }\n };\n\n const mouseUp = () => {\n target.removeEventListener('mousemove', mouseMove);\n target.removeEventListener('mouseup', mouseUp);\n this.setState({ scrolling: false });\n };\n\n target.addEventListener('mousemove', mouseMove);\n target.addEventListener('mouseup', mouseUp);\n this.setState({ scrolling: true });\n\n event.preventDefault();\n };\n\n private handleScrollWheel = (event: Event) => {\n if (!this.inner || !(event instanceof WheelEvent)) {\n return;\n }\n\n if (event.deltaY > 0 && this.inner.scrollHeight <= this.inner.scrollTop + this.inner.offsetHeight) {\n return;\n }\n if (event.deltaY < 0 && this.inner.scrollTop <= 0) {\n return;\n }\n\n this.inner.scrollTop += event.deltaY;\n event.preventDefault();\n };\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !(event instanceof WheelEvent)) {\n return;\n }\n\n if (this.state.scrollActive) {\n if (event.deltaY > 0 && this.inner.scrollHeight <= this.inner.scrollTop + this.inner.offsetHeight) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner.scrollTop <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = event.currentTarget.getBoundingClientRect().right - event.pageX;\n this.setHover(right <= 12);\n };\n\n private handleMouseLeave = () => {\n this.setHover(false);\n };\n\n private setHover(hover: boolean) {\n if (this.state.hover !== hover) {\n this.setState({ hover });\n }\n }\n\n private getImmediateScrollState(): ScrollContainerScrollState {\n if (!this.inner || this.inner.scrollTop === 0) {\n return 'top';\n } else if (this.inner.scrollTop === this.inner.scrollHeight - this.inner.clientHeight) {\n return 'bottom';\n } else {\n return 'scroll';\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["ScrollContainer.tsx"],"names":["ScrollContainer","scrollX","scrollY","inner","render","props","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","styles","root","handleMouseMove","handleMouseLeave","refInner","globalClasses","handleNativeScroll","children","axis","refScrollBar","refScrollBarX","refScrollBarY","invert","handleScrollStateChange","scrollState","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","LayoutEvents","emit","WheelEvent","shiftKey","hasScrollBar","scrollSizeParametersNames","pos","size","offset","deltaY","right","currentTarget","getBoundingClientRect","pageX","bottom","pageY","setHover","componentDidMount","setInnerElement","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","oneOfType","string","number","oneOf","func","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { scrollSizeParametersNames } from './ScrollContainer.constants';\nimport {\n getScrollYOffset,\n convertScrollbarXScrollState,\n convertScrollbarYScrollState,\n} from './ScrollContainer.helpers';\nimport { ScrollAxis, ScrollBar, ScrollBarScrollState } from './ScrollBar';\n\nexport type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';\nexport type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';\nexport type ScrollContainerScrollState = ScrollContainerScrollStateY; // deprecated\nexport type ScrollBehaviour = 'auto' | 'smooth';\n\nexport interface ScrollContainerProps extends CommonProps {\n /**\n * Инвертировать цвет скроллбара\n * @default false\n */\n invert: boolean;\n maxHeight?: React.CSSProperties['maxHeight'];\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * @default false\n */\n preventWindowScroll: boolean;\n /**\n * Поведение скролла (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)\n * @default 'auto'\n */\n scrollBehaviour?: ScrollBehaviour;\n onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;\n onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;\n onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void; // deprecated\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;\n}\n\nexport class ScrollContainer extends React.Component<ScrollContainerProps> {\n public static __KONTUR_REACT_UI__ = 'ScrollContainer';\n\n public static propTypes = {\n invert: PropTypes.bool,\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n scrollBehaviour: PropTypes.oneOf(['auto', 'smooth']),\n preventWindowScroll: PropTypes.bool,\n onScrollStateChange: PropTypes.func,\n };\n\n public static defaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n };\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private inner: Nullable<HTMLElement>;\n\n public componentDidMount() {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n if (this.inner) {\n if (prevProps.preventWindowScroll && !this.props.preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && this.props.preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: props.scrollBehaviour,\n maxHeight: props.maxHeight,\n maxWidth: props.maxWidth,\n };\n\n const scrollbarY = this.renderScrollbar('y');\n const scrollbarX = this.renderScrollbar('x');\n\n return (\n <CommonWrapper {...this.props}>\n <div className={styles.root()} onMouseMove={this.handleMouseMove} onMouseLeave={this.handleMouseLeave}>\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner)}\n data-tid=\"ScrollContainer__inner\"\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {HTMLElement} element\n */\n public scrollTo(element: Nullable<HTMLElement>) {\n if (!element || !this.inner) {\n return;\n }\n\n this.inner.scrollLeft = element.offsetLeft;\n this.inner.scrollTop = getScrollYOffset(element, this.inner);\n }\n\n /**\n * @public\n */\n public scrollToTop() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = 0;\n }\n\n /**\n * @public\n */\n public scrollToBottom() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollTop = this.inner.scrollHeight - this.inner.offsetHeight;\n }\n\n /**\n * @public\n */\n public scrollToLeft() {\n if (!this.inner) {\n return;\n }\n this.inner.scrollLeft = 0;\n }\n\n /**\n * @public\n */\n public scrollToRight() {\n if (!this.inner) {\n return;\n }\n\n this.inner.scrollLeft = this.inner.scrollWidth - this.inner.offsetWidth;\n }\n\n private hasScrollBar(axis: ScrollAxis) {\n if (!this.inner) {\n return false;\n }\n\n return axis === 'x'\n ? this.inner.offsetWidth < this.inner.scrollWidth\n : this.inner.offsetHeight < this.inner.scrollHeight;\n }\n\n private renderScrollbar = (axis: ScrollAxis) => {\n const refScrollBar = axis === 'x' ? this.refScrollBarX : this.refScrollBarY;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={this.props.invert}\n onScrollStateChange={this.handleScrollStateChange}\n />\n );\n };\n\n private handleScrollStateChange = (scrollState: ScrollBarScrollState, axis: ScrollAxis) => {\n if (!this.scrollY || !this.scrollX) {\n return;\n }\n\n if (axis === 'x') {\n const scrollXState = convertScrollbarXScrollState(scrollState);\n\n this.props.onScrollStateChangeX?.(scrollXState);\n return;\n }\n\n const scrollYState = convertScrollbarYScrollState(scrollState);\n\n this.props.onScrollStateChange?.(scrollYState);\n this.props.onScrollStateChangeY?.(scrollYState);\n };\n\n private refScrollBarY = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollY = scrollbar;\n };\n\n private refScrollBarX = (scrollbar: Nullable<ScrollBar>) => {\n this.scrollX = scrollbar;\n };\n\n private refInner = (element: HTMLElement | null) => {\n if (!this.inner && element && this.props.preventWindowScroll) {\n element.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n if (this.inner && !element) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n this.inner = element;\n };\n\n private handleNativeScroll = (event: React.UIEvent<HTMLDivElement>) => {\n this.scrollX?.reflow();\n this.scrollY?.reflow();\n\n this.props.onScroll?.(event);\n if (this.props.preventWindowScroll) {\n event.preventDefault();\n return;\n }\n LayoutEvents.emit();\n };\n\n private handleInnerScrollWheel = (event: Event) => {\n if (!this.inner || !(event instanceof WheelEvent)) {\n return;\n }\n\n const axis: ScrollAxis = event.shiftKey ? 'x' : 'y';\n\n if (this.hasScrollBar(axis)) {\n const { pos, size, offset } = scrollSizeParametersNames[axis];\n\n if (event.deltaY > 0 && this.inner[size] <= this.inner[pos] + this.inner[offset]) {\n event.preventDefault();\n return false;\n }\n if (event.deltaY < 0 && this.inner[pos] <= 0) {\n event.preventDefault();\n return false;\n }\n }\n };\n\n private handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const right = event.currentTarget.getBoundingClientRect().right - event.pageX;\n const bottom = event.currentTarget.getBoundingClientRect().bottom - event.pageY;\n\n this.scrollY?.setHover(right <= 12);\n this.scrollX?.setHover(right >= 12 && bottom <= 12);\n };\n\n private handleMouseLeave = () => {\n this.scrollY?.setHover(false);\n this.scrollX?.setHover(false);\n };\n}\n"]}
@@ -26,14 +26,14 @@ var absStyle = {
26
26
  <div>
27
27
  <div style={divStyle}>
28
28
  <ScrollContainer>
29
- {items(20).map(i => (
29
+ {items(20).map((i) => (
30
30
  <div key={i}>{i}</div>
31
31
  ))}
32
32
  </ScrollContainer>
33
33
  </div>
34
34
  <div style={{ ...divStyle, background: '#888' }}>
35
35
  <ScrollContainer invert>
36
- {items(20).map(i => (
36
+ {items(20).map((i) => (
37
37
  <div key={i}>{i}</div>
38
38
  ))}
39
39
  </ScrollContainer>
@@ -41,7 +41,7 @@ var absStyle = {
41
41
  <div style={divStyle}>
42
42
  <div style={absStyle}>
43
43
  <ScrollContainer>
44
- {items(3).map(i => (
44
+ {items(3).map((i) => (
45
45
  <div key={i}>{i}</div>
46
46
  ))}
47
47
  </ScrollContainer>
@@ -50,7 +50,7 @@ var absStyle = {
50
50
  <div style={divStyle}>
51
51
  <div style={absStyle}>
52
52
  <ScrollContainer maxHeight={150}>
53
- {items(30).map(i => (
53
+ {items(30).map((i) => (
54
54
  <div key={i}>{i}</div>
55
55
  ))}
56
56
  </ScrollContainer>
@@ -59,9 +59,25 @@ var absStyle = {
59
59
  </div>;
60
60
  ```
61
61
 
62
- На данный момент кастомизируется только вертикальный scrollbar. Горизонтальный, при наличии, остается нативным.
62
+ Горизонтальный scrollbar.
63
63
 
64
64
  ```jsx harmony
65
+ var divStyle = {
66
+ display: 'inline-block',
67
+ border: '1px solid #f99',
68
+ height: 200,
69
+ margin: 1,
70
+ position: 'relative',
71
+ verticalAlign: 'top',
72
+ width: 200,
73
+ };
74
+ var absStyle = {
75
+ border: '1px solid #000',
76
+ boxSizing: 'border-box',
77
+ position: 'absolute',
78
+ width: '100%',
79
+ };
80
+
65
81
  function items(count) {
66
82
  var items = [];
67
83
  for (var i = 0; i < count; ++i) {
@@ -82,13 +98,46 @@ var innerStyle = {
82
98
  width: 400,
83
99
  };
84
100
 
85
- <div style={containerStyle}>
86
- <ScrollContainer>
87
- {items(20).map(i => (
88
- <div style={innerStyle} key={i}>
89
- {i}
90
- </div>
91
- ))}
92
- </ScrollContainer>
101
+ <div>
102
+ <div style={divStyle}>
103
+ <ScrollContainer>
104
+ {items(5).map((i) => (
105
+ <div style={innerStyle} key={i}>
106
+ {i}
107
+ </div>
108
+ ))}
109
+ </ScrollContainer>
110
+ </div>
111
+ <div style={{ ...divStyle, background: '#888' }}>
112
+ <ScrollContainer invert>
113
+ {items(20).map((i) => (
114
+ <div style={innerStyle} key={i}>
115
+ {i}
116
+ </div>
117
+ ))}
118
+ </ScrollContainer>
119
+ </div>
120
+ <div style={divStyle}>
121
+ <div style={absStyle}>
122
+ <ScrollContainer maxHeight={150}>
123
+ {items(3).map((i) => (
124
+ <div style={innerStyle} key={i}>
125
+ {i}
126
+ </div>
127
+ ))}
128
+ </ScrollContainer>
129
+ </div>
130
+ </div>
131
+ <div style={divStyle}>
132
+ <div style={absStyle}>
133
+ <ScrollContainer maxHeight={150} maxWidth={200}>
134
+ {items(30).map((i) => (
135
+ <div style={innerStyle} key={i}>
136
+ {i}
137
+ </div>
138
+ ))}
139
+ </ScrollContainer>
140
+ </div>
141
+ </div>
93
142
  </div>;
94
143
  ```
@@ -1,7 +1,16 @@
1
+ import { Theme } from '../../lib/theming/Theme';
2
+ export declare const globalClasses: {
3
+ scrollbarX: string;
4
+ scrollbarY: string;
5
+ inner: string;
6
+ };
1
7
  export declare const styles: {
2
8
  root(): string;
3
9
  inner(): string;
4
- scroll(): string;
5
- scrollHover(): string;
6
- scrollInvert(): string;
10
+ scrollBar(t: Theme): string;
11
+ scrollBarInvert(t: Theme): string;
12
+ scrollBarY(t: Theme): string;
13
+ scrollBarYHover(t: Theme): string;
14
+ scrollBarX(t: Theme): string;
15
+ scrollBarXHover(t: Theme): string;
7
16
  };
@@ -1,4 +1,11 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.styles = exports.globalClasses = void 0;var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _Emotion = require("../../lib/theming/Emotion");var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
2
+
3
+
4
+ var globalClasses = (0, _Emotion.prefix)('scroll-container')({
5
+ scrollbarX: 'scrollbar-x',
6
+ scrollbarY: 'scrollbar-y',
7
+ inner: 'inner' });exports.globalClasses = globalClasses;
8
+
2
9
 
3
10
  var styles = (0, _Emotion.memoizeStyle)({
4
11
  root: function root() {
@@ -10,7 +17,9 @@ var styles = (0, _Emotion.memoizeStyle)({
10
17
  },
11
18
 
12
19
  inner: function inner() {
13
- return (0, _Emotion.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n margin-bottom: -1px;\n max-height: 100%;\n\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n padding-bottom: 1px;\n overflow-y: scroll;\n "])));
20
+ return (0, _Emotion.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: relative;\n overflow: scroll;\n max-height: 100%;\n max-width: 100%;\n\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n\n /* Hide scrobars without losing functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n "])));
21
+
22
+
14
23
 
15
24
 
16
25
 
@@ -18,10 +27,7 @@ var styles = (0, _Emotion.memoizeStyle)({
18
27
 
19
28
 
20
29
 
21
- },
22
30
 
23
- scroll: function scroll() {
24
- return (0, _Emotion.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: absolute;\n right: 2px;\n transition: width 0.2s;\n width: 4px;\n z-index: 200;\n\n &::after {\n background: #b7b7b7;\n border-radius: 5px;\n bottom: 1px;\n content: '';\n display: block;\n left: 0;\n position: absolute;\n right: 0;\n top: 1px;\n }\n "])));
25
31
 
26
32
 
27
33
 
@@ -31,6 +37,11 @@ var styles = (0, _Emotion.memoizeStyle)({
31
37
 
32
38
 
33
39
 
40
+ },
41
+
42
+ scrollBar: function scrollBar(t) {
43
+ return (0, _Emotion.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["\n position: absolute;\n z-index: 200;\n\n &::after {\n content: '';\n display: block;\n border-radius: 5px;\n position: absolute;\n background: ", ";\n }\n "])),
44
+
34
45
 
35
46
 
36
47
 
@@ -38,21 +49,73 @@ var styles = (0, _Emotion.memoizeStyle)({
38
49
 
39
50
 
40
51
 
52
+ t.scrollContainerScrollBarColor);
41
53
 
42
54
 
43
55
  },
44
56
 
45
- scrollHover: function scrollHover() {
46
- return (0, _Emotion.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["\n width: 10px;\n "])));
57
+ scrollBarInvert: function scrollBarInvert(t) {
58
+ return (0, _Emotion.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["\n &::after {\n background: #ccc;\n background: ", ";\n }\n "])),
59
+
60
+
61
+ t.scrollContainerScrollBarInvertColor);
47
62
 
48
63
 
49
64
  },
50
65
 
51
- scrollInvert: function scrollInvert() {
52
- return (0, _Emotion.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n &::after {\n background: #ccc;\n background: rgba(255, 255, 255, 0.5);\n }\n "])));
66
+ scrollBarY: function scrollBarY(t) {
67
+ return (0, _Emotion.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteralLoose2.default)(["\n right: 2px;\n transition: width 0.2s;\n width: ", ";\n\n &::after {\n bottom: 1px;\n left: 0;\n right: 0;\n top: 1px;\n }\n "])),
68
+
53
69
 
70
+ t.scrollContainerScrollBarSize);
54
71
 
55
72
 
56
73
 
57
74
 
75
+
76
+
77
+
78
+
79
+ },
80
+
81
+ scrollBarYHover: function scrollBarYHover(t) {
82
+ return (0, _Emotion.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteralLoose2.default)(["\n width: ", ";\n "])),
83
+ t.scrollContainerScrollBarHoverSize);
84
+
85
+ },
86
+
87
+ scrollBarX: function scrollBarX(t) {
88
+ return (0, _Emotion.css)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteralLoose2.default)(["\n bottom: 1px;\n transition: height 0.2s;\n height: ", ";\n\n &::after {\n bottom: 0px;\n left: 1px;\n right: 1px;\n top: 0;\n }\n\n .", " ~ & {\n &::after {\n right: calc(", " + 4px) !important;\n }\n }\n\n & ~ .", " {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(", " + 2px);\n }\n }\n "])),
89
+
90
+
91
+ t.scrollContainerScrollBarSize,
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ globalClasses.scrollbarY,
101
+
102
+ t.scrollContainerScrollBarHoverSize,
103
+
104
+
105
+
106
+ globalClasses.inner,
107
+
108
+
109
+
110
+
111
+ t.scrollContainerScrollBarHoverSize);
112
+
113
+
114
+
115
+ },
116
+
117
+ scrollBarXHover: function scrollBarXHover(t) {
118
+ return (0, _Emotion.css)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteralLoose2.default)(["\n height: ", ";\n "])),
119
+ t.scrollContainerScrollBarHoverSize);
120
+
58
121
  } });exports.styles = styles;
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.styles.ts"],"names":["styles","root","css","inner","scroll","scrollHover","scrollInvert"],"mappings":"4QAAA,oD;;AAEO,IAAMA,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,kBAC1B;AACL,eAAOC,YAAP;;;;;AAKD,GAPgC;;AASjCC,EAAAA,KATiC,mBASzB;AACN,eAAOD,YAAP;;;;;;;;AAQD,GAlBgC;;AAoBjCE,EAAAA,MApBiC,oBAoBxB;AACP,eAAOF,YAAP;;;;;;;;;;;;;;;;;;;AAmBD,GAxCgC;;AA0CjCG,EAAAA,WA1CiC,yBA0CnB;AACZ,eAAOH,YAAP;;;AAGD,GA9CgC;;AAgDjCI,EAAAA,YAhDiC,0BAgDlB;AACb,eAAOJ,YAAP;;;;;;AAMD,GAvDgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n overflow: hidden;\n position: relative;\n `;\n },\n\n inner() {\n return css`\n margin-bottom: -1px;\n max-height: 100%;\n\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n padding-bottom: 1px;\n overflow-y: scroll;\n `;\n },\n\n scroll() {\n return css`\n position: absolute;\n right: 2px;\n transition: width 0.2s;\n width: 4px;\n z-index: 200;\n\n &::after {\n background: #b7b7b7;\n border-radius: 5px;\n bottom: 1px;\n content: '';\n display: block;\n left: 0;\n position: absolute;\n right: 0;\n top: 1px;\n }\n `;\n },\n\n scrollHover() {\n return css`\n width: 10px;\n `;\n },\n\n scrollInvert() {\n return css`\n &::after {\n background: #ccc;\n background: rgba(255, 255, 255, 0.5);\n }\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["ScrollContainer.styles.ts"],"names":["globalClasses","scrollbarX","scrollbarY","inner","styles","root","css","scrollBar","t","scrollContainerScrollBarColor","scrollBarInvert","scrollContainerScrollBarInvertColor","scrollBarY","scrollContainerScrollBarSize","scrollBarYHover","scrollContainerScrollBarHoverSize","scrollBarX","scrollBarXHover"],"mappings":"oSAAA,oD;;;AAGO,IAAMA,aAAa,GAAG,qBAAO,kBAAP,EAA2B;AACtDC,EAAAA,UAAU,EAAE,aAD0C;AAEtDC,EAAAA,UAAU,EAAE,aAF0C;AAGtDC,EAAAA,KAAK,EAAE,OAH+C,EAA3B,CAAtB,C;;;AAMA,IAAMC,MAAM,GAAG,2BAAa;AACjCC,EAAAA,IADiC,kBAC1B;AACL,eAAOC,YAAP;;;;;AAKD,GAPgC;;AASjCH,EAAAA,KATiC,mBASzB;AACN,eAAOG,YAAP;;;;;;;;;;;;;;;;;;;;AAoBD,GA9BgC;;AAgCjCC,EAAAA,SAhCiC,qBAgCvBC,CAhCuB,EAgCb;AAClB,eAAOF,YAAP;;;;;;;;;AASkBE,IAAAA,CAAC,CAACC,6BATpB;;;AAYD,GA7CgC;;AA+CjCC,EAAAA,eA/CiC,2BA+CjBF,CA/CiB,EA+CP;AACxB,eAAOF,YAAP;;;AAGkBE,IAAAA,CAAC,CAACG,mCAHpB;;;AAMD,GAtDgC;;AAwDjCC,EAAAA,UAxDiC,sBAwDtBJ,CAxDsB,EAwDZ;AACnB,eAAOF,YAAP;;;AAGWE,IAAAA,CAAC,CAACK,4BAHb;;;;;;;;;AAYD,GArEgC;;AAuEjCC,EAAAA,eAvEiC,2BAuEjBN,CAvEiB,EAuEP;AACxB,eAAOF,YAAP;AACWE,IAAAA,CAAC,CAACO,iCADb;;AAGD,GA3EgC;;AA6EjCC,EAAAA,UA7EiC,sBA6EtBR,CA7EsB,EA6EZ;AACnB,eAAOF,YAAP;;;AAGYE,IAAAA,CAAC,CAACK,4BAHd;;;;;;;;;AAYKb,IAAAA,aAAa,CAACE,UAZnB;;AAcoBM,IAAAA,CAAC,CAACO,iCAdtB;;;;AAkBSf,IAAAA,aAAa,CAACG,KAlBvB;;;;;AAuBqBK,IAAAA,CAAC,CAACO,iCAvBvB;;;;AA2BD,GAzGgC;;AA2GjCE,EAAAA,eA3GiC,2BA2GjBT,CA3GiB,EA2GP;AACxB,eAAOF,YAAP;AACYE,IAAAA,CAAC,CAACO,iCADd;;AAGD,GA/GgC,EAAb,CAAf,C","sourcesContent":["import { css, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const globalClasses = prefix('scroll-container')({\n scrollbarX: 'scrollbar-x',\n scrollbarY: 'scrollbar-y',\n inner: 'inner',\n});\n\nexport const styles = memoizeStyle({\n root() {\n return css`\n height: 100%;\n overflow: hidden;\n position: relative;\n `;\n },\n\n inner() {\n return css`\n position: relative;\n overflow: scroll;\n max-height: 100%;\n max-width: 100%;\n\n /* IE sometimes enabled scroll: http://codepen.io/anon/pen/RRrLNX */\n margin-bottom: -1px;\n padding-bottom: 1px;\n margin-right: -1px;\n padding-right: 1px;\n\n /* Hide scrobars without losing functionality */\n scrollbar-width: none;\n -ms-overflow-style: none;\n &::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n `;\n },\n\n scrollBar(t: Theme) {\n return css`\n position: absolute;\n z-index: 200;\n\n &::after {\n content: '';\n display: block;\n border-radius: 5px;\n position: absolute;\n background: ${t.scrollContainerScrollBarColor};\n }\n `;\n },\n\n scrollBarInvert(t: Theme) {\n return css`\n &::after {\n background: #ccc;\n background: ${t.scrollContainerScrollBarInvertColor};\n }\n `;\n },\n\n scrollBarY(t: Theme) {\n return css`\n right: 2px;\n transition: width 0.2s;\n width: ${t.scrollContainerScrollBarSize};\n\n &::after {\n bottom: 1px;\n left: 0;\n right: 0;\n top: 1px;\n }\n `;\n },\n\n scrollBarYHover(t: Theme) {\n return css`\n width: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n\n scrollBarX(t: Theme) {\n return css`\n bottom: 1px;\n transition: height 0.2s;\n height: ${t.scrollContainerScrollBarSize};\n\n &::after {\n bottom: 0px;\n left: 1px;\n right: 1px;\n top: 0;\n }\n\n .${globalClasses.scrollbarY} ~ & {\n &::after {\n right: calc(${t.scrollContainerScrollBarHoverSize} + 4px) !important;\n }\n }\n\n & ~ .${globalClasses.inner} {\n &::after {\n content: ' ';\n width: 100%;\n display: block;\n height: calc(${t.scrollContainerScrollBarHoverSize} + 2px);\n }\n }\n `;\n },\n\n scrollBarXHover(t: Theme) {\n return css`\n height: ${t.scrollContainerScrollBarHoverSize};\n `;\n },\n});\n"]}
@@ -37,8 +37,7 @@ export interface SidePageProps extends CommonProps {
37
37
  */
38
38
  disableAnimations?: boolean;
39
39
  /**
40
- * Не использовать фокус-лок внутри сайдпейджа.
41
- * По умолчанию true для IE11.
40
+ * Работает только при заблокированном фоне: `blockBackground = true`
42
41
  */
43
42
  disableFocusLock: boolean;
44
43
  }
@@ -13,7 +13,6 @@ var _ZIndex = require("../../internal/ZIndex");
13
13
  var _ThemeContext = require("../../lib/theming/ThemeContext");
14
14
 
15
15
  var _CommonWrapper = require("../../internal/CommonWrapper");
16
- var _client = require("../../lib/client");
17
16
  var _Emotion = require("../../lib/theming/Emotion");
18
17
 
19
18
  var _SidePageBody = require("./SidePageBody");
@@ -76,7 +75,6 @@ var _SidePage = require("./SidePage.styles");
76
75
 
77
76
 
78
77
 
79
-
80
78
 
81
79
 
82
80
  var TRANSITION_TIMEOUT = 200;
@@ -207,7 +205,6 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
207
205
 
208
206
 
209
207
 
210
-
211
208
 
212
209
 
213
210
  getSidePageContextProps = function () {
@@ -336,5 +333,4 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
336
333
  };return _this;}var _proto = SidePage.prototype;_proto.componentDidMount = function componentDidMount() {window.addEventListener('keydown', this.handleKeyDown);this.stackSubscription = _ModalStack.ModalStack.add(this, this.handleStackChange);};_proto.componentWillUnmount = function componentWillUnmount() {window.removeEventListener('keydown', this.handleKeyDown);if (this.stackSubscription != null) {this.stackSubscription.remove();}_ModalStack.ModalStack.remove(this);} /**
337
334
  * Обновляет разметку компонента.
338
335
  * @public
339
- */;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _this$props = this.props,blockBackground = _this$props.blockBackground,disableAnimations = _this$props.disableAnimations;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, /*#__PURE__*/_react.default.createElement("div", null, blockBackground && this.renderShadow(), /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.CSSTransition, { in: true, classNames: this.getTransitionNames(), appear: !disableAnimations, enter: !disableAnimations, exit: false, timeout: { enter: TRANSITION_TIMEOUT, exit: TRANSITION_TIMEOUT } }, this.renderContainer()))));};_proto.renderContainer = function renderContainer() {var _cx,_cx2,_this3 = this;var _this$props2 = this.props,width = _this$props2.width,blockBackground = _this$props2.blockBackground,fromLeft = _this$props2.fromLeft,disableFocusLock = _this$props2.disableFocusLock;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', "data-tid": "SidePage__root", className: (0, _Emotion.cx)((_cx = {}, _cx[_SidePage.styles.root()] = true, _cx[_SidePage.styles.leftSide()] = Boolean(fromLeft), _cx)), onScroll: LayoutEvents.emit, createStackingContext: true, style: { width: width || (blockBackground ? 800 : 500) } }, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.handleClickOutside, active: true }, /*#__PURE__*/_react.default.createElement("div", { "data-tid": "SidePage__container", className: (0, _Emotion.cx)(_SidePage.styles.wrapper(this.theme), (_cx2 = {}, _cx2[_SidePage.styles.shadow(this.theme)] = this.state.hasShadow, _cx2[_SidePage.styles.wrapperLeft()] = fromLeft, _cx2)), style: this.getSidebarStyle() }, /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, { disabled: disableFocusLock, autoFocus: false }, /*#__PURE__*/_react.default.createElement("div", { ref: function ref(_) {return _this3.layoutRef = _;}, className: _SidePage.styles.layout() }, /*#__PURE__*/_react.default.createElement(_SidePageContext.SidePageContext.Provider, { value: this.getSidePageContextProps() }, this.props.children))))));};_proto.renderShadow = function renderShadow() {var _cx3;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', className: _SidePage.styles.overlay(), onScroll: LayoutEvents.emit }, /*#__PURE__*/_react.default.createElement(_HideBodyVerticalScroll.HideBodyVerticalScroll, { key: "hbvs" }), /*#__PURE__*/_react.default.createElement("div", { key: "overlay", className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_SidePage.styles.background()] = true, _cx3[_SidePage.styles.backgroundGray(this.theme)] = this.state.hasBackground, _cx3)) }));};_proto.getSidebarStyle = function getSidebarStyle() {var sidePageStyle = {};if (this.state.hasMargin) {if (this.props.fromLeft) {sidePageStyle.marginLeft = 20;} else {sidePageStyle.marginRight = 20;}}return sidePageStyle;};_proto.getTransitionNames = function getTransitionNames() {var transition = this.props.fromLeft ? _SidePage.styles.transitionRight : _SidePage.styles.transitionLeft;return { enter: transition(), enterActive: _SidePage.styles.transitionActive(), exit: _SidePage.styles.transitionLeave(), exitActive: _SidePage.styles.transitionLeaveActive(), appear: transition(), appearActive: _SidePage.styles.transitionActive() };};return SidePage;}(_react.default.Component);exports.SidePage = SidePage;SidePage.__KONTUR_REACT_UI__ = 'SidePage';SidePage.Header = _SidePageHeader.SidePageHeader;SidePage.Body = _SidePageBody.SidePageBody;SidePage.Footer = _SidePageFooter.SidePageFooter;SidePage.Container = _SidePageContainer.SidePageContainer;SidePage.defaultProps = { // NOTE: в ie нормально не работает
340
- disableFocusLock: _client.isIE11 };
336
+ */;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _this$props = this.props,blockBackground = _this$props.blockBackground,disableAnimations = _this$props.disableAnimations;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, /*#__PURE__*/_react.default.createElement("div", null, blockBackground && this.renderShadow(), /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.CSSTransition, { in: true, classNames: this.getTransitionNames(), appear: !disableAnimations, enter: !disableAnimations, exit: false, timeout: { enter: TRANSITION_TIMEOUT, exit: TRANSITION_TIMEOUT } }, this.renderContainer()))));};_proto.renderContainer = function renderContainer() {var _cx,_cx2,_this3 = this;var _this$props2 = this.props,width = _this$props2.width,blockBackground = _this$props2.blockBackground,fromLeft = _this$props2.fromLeft,disableFocusLock = _this$props2.disableFocusLock;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', "data-tid": "SidePage__root", className: (0, _Emotion.cx)((_cx = {}, _cx[_SidePage.styles.root()] = true, _cx[_SidePage.styles.leftSide()] = Boolean(fromLeft), _cx)), onScroll: LayoutEvents.emit, createStackingContext: true, style: { width: width || (blockBackground ? 800 : 500) } }, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.handleClickOutside, active: true }, /*#__PURE__*/_react.default.createElement("div", { "data-tid": "SidePage__container", className: (0, _Emotion.cx)(_SidePage.styles.wrapper(this.theme), (_cx2 = {}, _cx2[_SidePage.styles.shadow(this.theme)] = this.state.hasShadow, _cx2[_SidePage.styles.wrapperLeft()] = fromLeft, _cx2)), style: this.getSidebarStyle() }, /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, { disabled: disableFocusLock || !blockBackground, autoFocus: false }, /*#__PURE__*/_react.default.createElement("div", { ref: function ref(_) {return _this3.layoutRef = _;}, className: _SidePage.styles.layout() }, /*#__PURE__*/_react.default.createElement(_SidePageContext.SidePageContext.Provider, { value: this.getSidePageContextProps() }, this.props.children))))));};_proto.renderShadow = function renderShadow() {var _cx3;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', className: _SidePage.styles.overlay(), onScroll: LayoutEvents.emit }, /*#__PURE__*/_react.default.createElement(_HideBodyVerticalScroll.HideBodyVerticalScroll, { key: "hbvs" }), /*#__PURE__*/_react.default.createElement("div", { key: "overlay", className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_SidePage.styles.background()] = true, _cx3[_SidePage.styles.backgroundGray(this.theme)] = this.state.hasBackground, _cx3)) }));};_proto.getSidebarStyle = function getSidebarStyle() {var sidePageStyle = {};if (this.state.hasMargin) {if (this.props.fromLeft) {sidePageStyle.marginLeft = 20;} else {sidePageStyle.marginRight = 20;}}return sidePageStyle;};_proto.getTransitionNames = function getTransitionNames() {var transition = this.props.fromLeft ? _SidePage.styles.transitionRight : _SidePage.styles.transitionLeft;return { enter: transition(), enterActive: _SidePage.styles.transitionActive(), exit: _SidePage.styles.transitionLeave(), exitActive: _SidePage.styles.transitionLeaveActive(), appear: transition(), appearActive: _SidePage.styles.transitionActive() };};return SidePage;}(_react.default.Component);exports.SidePage = SidePage;SidePage.__KONTUR_REACT_UI__ = 'SidePage';SidePage.Header = _SidePageHeader.SidePageHeader;SidePage.Body = _SidePageBody.SidePageBody;SidePage.Footer = _SidePageFooter.SidePageFooter;SidePage.Container = _SidePageContainer.SidePageContainer;SidePage.defaultProps = { disableFocusLock: true };
@@ -1 +1 @@
1
- {"version":3,"sources":["SidePage.tsx"],"names":["TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layoutRef","footer","updateLayout","update","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","getBoundingClientRect","width","handleStackChange","stack","sidePages","filter","x","props","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","ModalStack","isBlocking","setState","stackPosition","handleClickOutside","e","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","clientWidth","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","add","componentWillUnmount","removeEventListener","remove","render","renderMain","blockBackground","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","disableFocusLock","styles","root","leftSide","Boolean","LayoutEvents","emit","wrapper","shadow","wrapperLeft","getSidebarStyle","_","layout","children","overlay","background","backgroundGray","sidePageStyle","marginLeft","marginRight","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","React","Component","__KONTUR_REACT_UI__","Header","SidePageHeader","Body","SidePageBody","Footer","SidePageFooter","Container","SidePageContainer","defaultProps","isIE11"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { isIE11 } from '../../lib/client';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Не использовать фокус-лок внутри сайдпейджа.\n * По умолчанию true для IE11.\n */\n disableFocusLock: boolean;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n // NOTE: в ie нормально не работает\n disableFocusLock: isIE11,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <CommonWrapper {...this.props}>\n <RenderContainer>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </RenderContainer>\n </CommonWrapper>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n [styles.leftSide()]: Boolean(fromLeft),\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{ width: width || (blockBackground ? 800 : 500) }}\n >\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.shadow(this.theme)]: this.state.hasShadow,\n [styles.wrapperLeft()]: fromLeft,\n })}\n style={this.getSidebarStyle()}\n >\n <FocusLock disabled={disableFocusLock} autoFocus={false}>\n <div ref={(_) => (this.layoutRef = _)} className={styles.layout()}>\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </FocusLock>\n </div>\n </RenderLayer>\n </ZIndex>\n );\n }\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.getBoundingClientRect().width;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getSidebarStyle(): React.CSSProperties {\n const sidePageStyle: React.CSSProperties = {};\n\n if (this.state.hasMargin) {\n if (this.props.fromLeft) {\n sidePageStyle.marginLeft = 20;\n } else {\n sidePageStyle.marginRight = 20;\n }\n }\n\n return sidePageStyle;\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
1
+ {"version":3,"sources":["SidePage.tsx"],"names":["TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","theme","stackSubscription","layoutRef","footer","updateLayout","update","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","getBoundingClientRect","width","handleStackChange","stack","sidePages","filter","x","props","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","ModalStack","isBlocking","setState","stackPosition","handleClickOutside","e","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","clientWidth","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","add","componentWillUnmount","removeEventListener","remove","render","renderMain","blockBackground","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","disableFocusLock","styles","root","leftSide","Boolean","LayoutEvents","emit","wrapper","shadow","wrapperLeft","getSidebarStyle","_","layout","children","overlay","background","backgroundGray","sidePageStyle","marginLeft","marginRight","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","React","Component","__KONTUR_REACT_UI__","Header","SidePageHeader","Body","SidePageBody","Footer","SidePageFooter","Container","SidePageContainer","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableFocusLock: true,\n };\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { blockBackground, disableAnimations } = this.props;\n\n return (\n <CommonWrapper {...this.props}>\n <RenderContainer>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </RenderContainer>\n </CommonWrapper>\n );\n }\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n [styles.leftSide()]: Boolean(fromLeft),\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{ width: width || (blockBackground ? 800 : 500) }}\n >\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.shadow(this.theme)]: this.state.hasShadow,\n [styles.wrapperLeft()]: fromLeft,\n })}\n style={this.getSidebarStyle()}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false}>\n <div ref={(_) => (this.layoutRef = _)} className={styles.layout()}>\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </FocusLock>\n </div>\n </RenderLayer>\n </ZIndex>\n );\n }\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.getBoundingClientRect().width;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getSidebarStyle(): React.CSSProperties {\n const sidePageStyle: React.CSSProperties = {};\n\n if (this.state.hasMargin) {\n if (this.props.fromLeft) {\n sidePageStyle.marginLeft = 20;\n } else {\n sidePageStyle.marginRight = 20;\n }\n }\n\n return sidePageStyle;\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
@@ -19,8 +19,9 @@ export declare const styles: {
19
19
  shadow(t: Theme): string;
20
20
  leftSide(): string;
21
21
  close(t: Theme): string;
22
+ closeFocus(t: Theme): string;
23
+ wrapperClose(t: Theme): string;
22
24
  panel(t: Theme): string;
23
- closeIcon(t: Theme): string;
24
25
  fixed(t: Theme): string;
25
26
  footer(): string;
26
27
  footerContent(t: Theme): string;