@skbkontur/react-ui 4.9.0 → 4.9.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 (69) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.js +14 -11
  3. package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.js.map +1 -1
  4. package/cjs/components/ScrollContainer/ScrollBar.d.ts +4 -0
  5. package/cjs/components/ScrollContainer/ScrollBar.js +24 -6
  6. package/cjs/components/ScrollContainer/ScrollBar.js.map +1 -1
  7. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +10 -0
  8. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js +4 -0
  9. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js.map +1 -1
  10. package/cjs/components/ScrollContainer/ScrollContainer.js +16 -1
  11. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  12. package/cjs/components/ScrollContainer/ScrollContainer.md +29 -0
  13. package/cjs/components/ScrollContainer/ScrollContainer.styles.d.ts +4 -0
  14. package/cjs/components/ScrollContainer/ScrollContainer.styles.js +23 -25
  15. package/cjs/components/ScrollContainer/ScrollContainer.styles.js.map +1 -1
  16. package/cjs/components/Switcher/Switcher.d.ts +2 -1
  17. package/cjs/components/Switcher/Switcher.js +35 -26
  18. package/cjs/components/Switcher/Switcher.js.map +1 -1
  19. package/cjs/components/Switcher/helpers.d.ts +1 -0
  20. package/cjs/components/Switcher/helpers.js +1 -0
  21. package/cjs/components/Switcher/helpers.js.map +1 -0
  22. package/cjs/internal/icons/16px/index.js +2 -1
  23. package/cjs/internal/icons/16px/index.js.map +1 -1
  24. package/cjs/internal/icons/20px/svg.js +2 -1
  25. package/cjs/internal/icons/20px/svg.js.map +1 -1
  26. package/cjs/internal/icons/CloudIcon.js +1 -1
  27. package/cjs/internal/icons/CloudIcon.js.map +1 -1
  28. package/cjs/internal/icons/CrossIcon.js +2 -1
  29. package/cjs/internal/icons/CrossIcon.js.map +1 -1
  30. package/cjs/internal/icons/SpinnerIcon.js +3 -1
  31. package/cjs/internal/icons/SpinnerIcon.js.map +1 -1
  32. package/cjs/lib/SSRSafe.d.ts +1 -0
  33. package/cjs/lib/SSRSafe.js +7 -1
  34. package/cjs/lib/SSRSafe.js.map +1 -1
  35. package/components/ResponsiveLayout/ResponsiveLayoutEvents/ResponsiveLayoutEvents.js +18 -12
  36. package/components/ResponsiveLayout/ResponsiveLayoutEvents/ResponsiveLayoutEvents.js.map +1 -1
  37. package/components/ScrollContainer/ScrollBar/ScrollBar.js +22 -4
  38. package/components/ScrollContainer/ScrollBar/ScrollBar.js.map +1 -1
  39. package/components/ScrollContainer/ScrollBar.d.ts +4 -0
  40. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +8 -1
  41. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  42. package/components/ScrollContainer/ScrollContainer.d.ts +10 -0
  43. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js +4 -1
  44. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js.map +1 -1
  45. package/components/ScrollContainer/ScrollContainer.md +29 -0
  46. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js +15 -7
  47. package/components/ScrollContainer/ScrollContainer.styles/ScrollContainer.styles.js.map +1 -1
  48. package/components/ScrollContainer/ScrollContainer.styles.d.ts +4 -0
  49. package/components/Switcher/Switcher/Switcher.js +52 -33
  50. package/components/Switcher/Switcher/Switcher.js.map +1 -1
  51. package/components/Switcher/Switcher.d.ts +2 -1
  52. package/components/Switcher/helpers/helpers.js +3 -0
  53. package/components/Switcher/helpers/helpers.js.map +1 -0
  54. package/components/Switcher/helpers/package.json +6 -0
  55. package/components/Switcher/helpers.d.ts +1 -0
  56. package/internal/icons/16px/index/index.js +2 -1
  57. package/internal/icons/16px/index/index.js.map +1 -1
  58. package/internal/icons/20px/svg/svg.js +2 -1
  59. package/internal/icons/20px/svg/svg.js.map +1 -1
  60. package/internal/icons/CloudIcon/CloudIcon.js +3 -1
  61. package/internal/icons/CloudIcon/CloudIcon.js.map +1 -1
  62. package/internal/icons/CrossIcon/CrossIcon.js +2 -1
  63. package/internal/icons/CrossIcon/CrossIcon.js.map +1 -1
  64. package/internal/icons/SpinnerIcon/SpinnerIcon.js +3 -1
  65. package/internal/icons/SpinnerIcon/SpinnerIcon.js.map +1 -1
  66. package/lib/SSRSafe/SSRSafe.js +5 -0
  67. package/lib/SSRSafe/SSRSafe.js.map +1 -1
  68. package/lib/SSRSafe.d.ts +1 -0
  69. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["CrossIcon.tsx"],"names":["CrossIcon"],"mappings":"uJAAA;;AAEO,IAAMA,SAAS,GAAG,SAAZA,SAAY;AACvB;AACE,MAAA,QAAQ,EAAC,SADX;AAEE,MAAA,IAAI,EAAC,cAFP;AAGE,MAAA,QAAQ,EAAC,SAHX;AAIE,MAAA,SAAS,EAAC,OAJZ;AAKE,MAAA,cAAc,EAAC,OALjB;AAME,MAAA,OAAO,EAAC,WANV;;AAQE,8CAAS,EAAE,EAAC,MAAZ,EAAmB,MAAM,EAAC,qDAA1B,GARF,CADuB,GAAlB,C","sourcesContent":["import React from 'react';\n\nexport const CrossIcon = () => (\n <svg\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n focusable=\"false\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 10 10\"\n >\n <polygon id=\"Path\" points=\"6 5 10 9 9 10 5 6 1 10 0 9 4 5 0 1 1 0 5 4 9 0 10 1\" />\n </svg>\n);\n"]}
1
+ {"version":3,"sources":["CrossIcon.tsx"],"names":["CrossIcon"],"mappings":"uJAAA;;AAEO,IAAMA,SAAS,GAAG,SAAZA,SAAY;AACvB;AACE,MAAA,QAAQ,EAAC,SADX;AAEE,MAAA,IAAI,EAAC,cAFP;AAGE,MAAA,QAAQ,EAAC,SAHX;AAIE,MAAA,SAAS,EAAC,OAJZ;AAKE,MAAA,cAAc,EAAC,OALjB;AAME,MAAA,OAAO,EAAC,WANV;AAOE,qBAAY,MAPd;;AASE,8CAAS,EAAE,EAAC,MAAZ,EAAmB,MAAM,EAAC,qDAA1B,GATF,CADuB,GAAlB,C","sourcesContent":["import React from 'react';\n\nexport const CrossIcon = () => (\n <svg\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n focusable=\"false\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 10 10\"\n aria-hidden=\"true\"\n >\n <polygon id=\"Path\" points=\"6 5 10 9 9 10 5 6 1 10 0 9 4 5 0 1 1 0 5 4 9 0 10 1\" />\n </svg>\n);\n"]}
@@ -100,7 +100,9 @@ var SpinnerIcon = function SpinnerIcon(_ref) {var _cx, _cx2;var size = _ref.size
100
100
  strokeDasharray: 10 * currentSize.radius / 6 + ", " + 27 * currentSize.radius / 6,
101
101
  strokeDashoffset: "0",
102
102
  strokeWidth: width || currentSize.width,
103
- ref: svgRef }, /*#__PURE__*/
103
+ ref: svgRef,
104
+ focusable: "false",
105
+ "aria-hidden": "true" }, /*#__PURE__*/
104
106
 
105
107
  _react.default.createElement("circle", { cx: currentSize.size / 2, cy: currentSize.size / 2, r: currentSize.radius }))));
106
108
 
@@ -1 +1 @@
1
- {"version":3,"sources":["SpinnerIcon.tsx"],"names":["sizes","big","size","width","radius","normal","mini","SpinnerIcon","className","dimmed","inline","color","currentSize","svgRef","React","useRef","isIE11","isTestEnv","fallbackAnimationRef","useContext","ThemeContext","red","yellow","green","brand","useEffect","svg","current","setStyleProperty","style","setProperty","SpinnerFallbackAnimationRunner","fallbackAnimation","stop","removeAttribute","styles","root","rootInline","icon","iconInline"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isIE11 } from '../../lib/client';\nimport {\n SpinnerFallbackAnimationRunner,\n createOffsetAnimation,\n createLengthAnimation,\n createColorAnimation,\n createRotationAnimation,\n} from '../../components/Spinner/SpinnerFallbackAnimation';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './SpinnerIcon.styles';\n\nexport interface SpinnerIconProps {\n className: string;\n size: 'mini' | 'normal' | 'big';\n dimmed?: boolean;\n inline?: boolean;\n width?: number;\n color?: React.CSSProperties['color'];\n}\n\nexport const sizes = {\n big: {\n size: 96,\n width: 4,\n radius: 32,\n },\n normal: {\n size: 48,\n width: 2,\n radius: 16,\n },\n mini: {\n size: 16,\n width: 1.5,\n radius: 6,\n },\n};\n\nexport const SpinnerIcon = ({ size, className, dimmed, inline, width, color }: SpinnerIconProps) => {\n const currentSize = inline ? sizes.mini : sizes[size];\n const svgRef = React.useRef<SVGSVGElement>(null);\n\n if (isIE11 && !isTestEnv) {\n // This condition will not change during app's life time\n // So its OK to use hooks here\n // https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const fallbackAnimationRef = React.useRef<SpinnerFallbackAnimationRunner | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { red, yellow, green, brand } = React.useContext(ThemeContext);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n const svg = svgRef.current;\n\n const setStyleProperty: CSSStyleDeclaration['setProperty'] = (...args) => {\n if (svg) {\n svg.style.setProperty(...args);\n }\n };\n\n fallbackAnimationRef.current = new SpinnerFallbackAnimationRunner(\n [\n createOffsetAnimation(0, -230, 1000, setStyleProperty, '%'),\n createLengthAnimation([62, 168], [187, 43], 2000, setStyleProperty, '%'),\n createRotationAnimation(0, 360, 2000, setStyleProperty),\n ...(dimmed ? [] : [createColorAnimation([red, yellow, green, brand], 1500, setStyleProperty)]),\n ],\n 1000 / 60,\n );\n\n return () => {\n const fallbackAnimation = fallbackAnimationRef.current;\n if (fallbackAnimation) {\n fallbackAnimation.stop();\n }\n if (svg) {\n svg.removeAttribute('style');\n }\n };\n }, [dimmed, red, yellow, green, brand]);\n }\n\n return (\n <span className={cx(styles.root(), { [styles.rootInline()]: inline })}>\n <svg\n viewBox={`0 0 ${currentSize.size} ${currentSize.size}`}\n className={cx(styles.icon(), className, {\n [styles.iconInline()]: inline,\n })}\n width={currentSize.size}\n height={currentSize.size}\n fill=\"none\"\n stroke={color}\n strokeDasharray={`${(10 * currentSize.radius) / 6}, ${(27 * currentSize.radius) / 6}`}\n strokeDashoffset=\"0\"\n strokeWidth={width || currentSize.width}\n ref={svgRef}\n >\n <circle cx={currentSize.size / 2} cy={currentSize.size / 2} r={currentSize.radius} />\n </svg>\n </span>\n );\n};\n"]}
1
+ {"version":3,"sources":["SpinnerIcon.tsx"],"names":["sizes","big","size","width","radius","normal","mini","SpinnerIcon","className","dimmed","inline","color","currentSize","svgRef","React","useRef","isIE11","isTestEnv","fallbackAnimationRef","useContext","ThemeContext","red","yellow","green","brand","useEffect","svg","current","setStyleProperty","style","setProperty","SpinnerFallbackAnimationRunner","fallbackAnimation","stop","removeAttribute","styles","root","rootInline","icon","iconInline"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isIE11 } from '../../lib/client';\nimport {\n SpinnerFallbackAnimationRunner,\n createOffsetAnimation,\n createLengthAnimation,\n createColorAnimation,\n createRotationAnimation,\n} from '../../components/Spinner/SpinnerFallbackAnimation';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './SpinnerIcon.styles';\n\nexport interface SpinnerIconProps {\n className: string;\n size: 'mini' | 'normal' | 'big';\n dimmed?: boolean;\n inline?: boolean;\n width?: number;\n color?: React.CSSProperties['color'];\n}\n\nexport const sizes = {\n big: {\n size: 96,\n width: 4,\n radius: 32,\n },\n normal: {\n size: 48,\n width: 2,\n radius: 16,\n },\n mini: {\n size: 16,\n width: 1.5,\n radius: 6,\n },\n};\n\nexport const SpinnerIcon = ({ size, className, dimmed, inline, width, color }: SpinnerIconProps) => {\n const currentSize = inline ? sizes.mini : sizes[size];\n const svgRef = React.useRef<SVGSVGElement>(null);\n\n if (isIE11 && !isTestEnv) {\n // This condition will not change during app's life time\n // So its OK to use hooks here\n // https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const fallbackAnimationRef = React.useRef<SpinnerFallbackAnimationRunner | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { red, yellow, green, brand } = React.useContext(ThemeContext);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n const svg = svgRef.current;\n\n const setStyleProperty: CSSStyleDeclaration['setProperty'] = (...args) => {\n if (svg) {\n svg.style.setProperty(...args);\n }\n };\n\n fallbackAnimationRef.current = new SpinnerFallbackAnimationRunner(\n [\n createOffsetAnimation(0, -230, 1000, setStyleProperty, '%'),\n createLengthAnimation([62, 168], [187, 43], 2000, setStyleProperty, '%'),\n createRotationAnimation(0, 360, 2000, setStyleProperty),\n ...(dimmed ? [] : [createColorAnimation([red, yellow, green, brand], 1500, setStyleProperty)]),\n ],\n 1000 / 60,\n );\n\n return () => {\n const fallbackAnimation = fallbackAnimationRef.current;\n if (fallbackAnimation) {\n fallbackAnimation.stop();\n }\n if (svg) {\n svg.removeAttribute('style');\n }\n };\n }, [dimmed, red, yellow, green, brand]);\n }\n\n return (\n <span className={cx(styles.root(), { [styles.rootInline()]: inline })}>\n <svg\n viewBox={`0 0 ${currentSize.size} ${currentSize.size}`}\n className={cx(styles.icon(), className, {\n [styles.iconInline()]: inline,\n })}\n width={currentSize.size}\n height={currentSize.size}\n fill=\"none\"\n stroke={color}\n strokeDasharray={`${(10 * currentSize.radius) / 6}, ${(27 * currentSize.radius) / 6}`}\n strokeDashoffset=\"0\"\n strokeWidth={width || currentSize.width}\n ref={svgRef}\n focusable=\"false\"\n aria-hidden=\"true\"\n >\n <circle cx={currentSize.size / 2} cy={currentSize.size / 2} r={currentSize.radius} />\n </svg>\n </span>\n );\n};\n"]}
@@ -3,4 +3,5 @@ export declare function safePropTypesInstanceOf<T>(getExpectedClass: () => new (
3
3
  export declare function isElement(el: unknown): el is Element;
4
4
  export declare function isHTMLElement(el: unknown): el is HTMLElement;
5
5
  export declare function isNode(node: unknown): node is Node;
6
+ export declare function matchMediaSSRSafe(mediaQuery: string): MediaQueryList | undefined;
6
7
  export declare const globalThat: typeof globalThis;
@@ -1,4 +1,4 @@
1
- "use strict";exports.__esModule = true;exports.globalThat = void 0;exports.isElement = isElement;exports.isHTMLElement = isHTMLElement;exports.isNode = isNode;exports.safePropTypesInstanceOf = safePropTypesInstanceOf;var PropTypes = _interopRequireWildcard(require("prop-types"));
1
+ "use strict";exports.__esModule = true;exports.globalThat = void 0;exports.isElement = isElement;exports.isHTMLElement = isHTMLElement;exports.isNode = isNode;exports.matchMediaSSRSafe = matchMediaSSRSafe;exports.safePropTypesInstanceOf = safePropTypesInstanceOf;var PropTypes = _interopRequireWildcard(require("prop-types"));
2
2
 
3
3
  var _client = require("./client");function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
4
4
 
@@ -36,6 +36,12 @@ function isNode(node) {
36
36
  return false;
37
37
  }
38
38
 
39
+ function matchMediaSSRSafe(mediaQuery) {
40
+ if (_client.isBrowser) {
41
+ return window.matchMedia(mediaQuery);
42
+ }
43
+ }
44
+
39
45
  var globalThat =
40
46
  typeof globalThis === 'object' && globalThis ||
41
47
  typeof global === 'object' && global ||
@@ -1 +1 @@
1
- {"version":3,"sources":["SSRSafe.ts"],"names":["safePropTypesInstanceOf","getExpectedClass","isBrowser","PropTypes","instanceOf","any","isElement","el","Element","isHTMLElement","HTMLElement","isNode","node","Node","globalThat","globalThis","global","window","Function"],"mappings":"yNAAA;;AAEA,kC;;AAEO,SAASA,uBAAT;AACLC,gBADK;AAEqB;AAC1B,MAAIC,iBAAJ,EAAe;AACb,WAAOC,SAAS,CAACC,UAAV,CAAqBH,gBAAgB,EAArC,CAAP;AACD;;AAED,SAAOE,SAAS,CAACE,GAAjB;AACD;;AAEM,SAASC,SAAT,CAAmBC,EAAnB,EAA+C;AACpD,MAAIL,iBAAJ,EAAe;AACb,WAAOK,EAAE,YAAYC,OAArB;AACD;;AAED,SAAO,KAAP;AACD;;AAEM,SAASC,aAAT,CAAuBF,EAAvB,EAAuD;AAC5D,MAAIL,iBAAJ,EAAe;AACb,WAAOK,EAAE,YAAYG,WAArB;AACD;;AAED,SAAO,KAAP;AACD;;AAEM,SAASC,MAAT,CAAgBC,IAAhB,EAA6C;AAClD,MAAIV,iBAAJ,EAAe;AACb,WAAOU,IAAI,YAAYC,IAAvB;AACD;;AAED,SAAO,KAAP;AACD;;AAEM,IAAMC,UAA6B;AACvC,OAAOC,UAAP,KAAsB,QAAtB,IAAkCA,UAAnC;AACC,OAAOC,MAAP,KAAkB,QAAlB,IAA8BA,MAD/B;AAEC,OAAOC,MAAP,KAAkB,QAAlB,IAA8BA,MAF/B;AAGAC,QAAQ,CAAC,aAAD,CAAR,EAJK,C","sourcesContent":["import * as PropTypes from 'prop-types';\n\nimport { isBrowser } from './client';\n\nexport function safePropTypesInstanceOf<T>(\n getExpectedClass: () => new (...args: any[]) => T,\n): PropTypes.Requireable<T> {\n if (isBrowser) {\n return PropTypes.instanceOf(getExpectedClass());\n }\n\n return PropTypes.any;\n}\n\nexport function isElement(el: unknown): el is Element {\n if (isBrowser) {\n return el instanceof Element;\n }\n\n return false;\n}\n\nexport function isHTMLElement(el: unknown): el is HTMLElement {\n if (isBrowser) {\n return el instanceof HTMLElement;\n }\n\n return false;\n}\n\nexport function isNode(node: unknown): node is Node {\n if (isBrowser) {\n return node instanceof Node;\n }\n\n return false;\n}\n\nexport const globalThat: typeof globalThis =\n (typeof globalThis === 'object' && globalThis) ||\n (typeof global === 'object' && global) ||\n (typeof window === 'object' && window) ||\n Function('return this')();\n"]}
1
+ {"version":3,"sources":["SSRSafe.ts"],"names":["safePropTypesInstanceOf","getExpectedClass","isBrowser","PropTypes","instanceOf","any","isElement","el","Element","isHTMLElement","HTMLElement","isNode","node","Node","matchMediaSSRSafe","mediaQuery","window","matchMedia","globalThat","globalThis","global","Function"],"mappings":"uQAAA;;AAEA,kC;;AAEO,SAASA,uBAAT;AACLC,gBADK;AAEqB;AAC1B,MAAIC,iBAAJ,EAAe;AACb,WAAOC,SAAS,CAACC,UAAV,CAAqBH,gBAAgB,EAArC,CAAP;AACD;;AAED,SAAOE,SAAS,CAACE,GAAjB;AACD;;AAEM,SAASC,SAAT,CAAmBC,EAAnB,EAA+C;AACpD,MAAIL,iBAAJ,EAAe;AACb,WAAOK,EAAE,YAAYC,OAArB;AACD;;AAED,SAAO,KAAP;AACD;;AAEM,SAASC,aAAT,CAAuBF,EAAvB,EAAuD;AAC5D,MAAIL,iBAAJ,EAAe;AACb,WAAOK,EAAE,YAAYG,WAArB;AACD;;AAED,SAAO,KAAP;AACD;;AAEM,SAASC,MAAT,CAAgBC,IAAhB,EAA6C;AAClD,MAAIV,iBAAJ,EAAe;AACb,WAAOU,IAAI,YAAYC,IAAvB;AACD;;AAED,SAAO,KAAP;AACD;;AAEM,SAASC,iBAAT,CAA2BC,UAA3B,EAA+C;AACpD,MAAIb,iBAAJ,EAAe;AACb,WAAOc,MAAM,CAACC,UAAP,CAAkBF,UAAlB,CAAP;AACD;AACF;;AAEM,IAAMG,UAA6B;AACvC,OAAOC,UAAP,KAAsB,QAAtB,IAAkCA,UAAnC;AACC,OAAOC,MAAP,KAAkB,QAAlB,IAA8BA,MAD/B;AAEC,OAAOJ,MAAP,KAAkB,QAAlB,IAA8BA,MAF/B;AAGAK,QAAQ,CAAC,aAAD,CAAR,EAJK,C","sourcesContent":["import * as PropTypes from 'prop-types';\n\nimport { isBrowser } from './client';\n\nexport function safePropTypesInstanceOf<T>(\n getExpectedClass: () => new (...args: any[]) => T,\n): PropTypes.Requireable<T> {\n if (isBrowser) {\n return PropTypes.instanceOf(getExpectedClass());\n }\n\n return PropTypes.any;\n}\n\nexport function isElement(el: unknown): el is Element {\n if (isBrowser) {\n return el instanceof Element;\n }\n\n return false;\n}\n\nexport function isHTMLElement(el: unknown): el is HTMLElement {\n if (isBrowser) {\n return el instanceof HTMLElement;\n }\n\n return false;\n}\n\nexport function isNode(node: unknown): node is Node {\n if (isBrowser) {\n return node instanceof Node;\n }\n\n return false;\n}\n\nexport function matchMediaSSRSafe(mediaQuery: string) {\n if (isBrowser) {\n return window.matchMedia(mediaQuery);\n }\n}\n\nexport const globalThat: typeof globalThis =\n (typeof globalThis === 'object' && globalThis) ||\n (typeof global === 'object' && global) ||\n (typeof window === 'object' && window) ||\n Function('return this')();\n"]}
@@ -1,4 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { matchMediaSSRSafe } from "../../../lib/SSRSafe";
2
3
  import { canUseDOM } from "../../../lib/client";
3
4
  export var eventListenersMap = new Map();
4
5
  export function addResponsiveLayoutListener(mediaQuery, callback) {
@@ -26,17 +27,20 @@ function addCallbackToMQListener(mediaQuery, callback) {
26
27
  }
27
28
 
28
29
  function createMQListener(mediaQuery, callback) {
29
- var mql = window.matchMedia(mediaQuery);
30
- var newMediaQueryInfo = {
31
- mql: mql,
32
- listeners: [callback]
33
- };
34
- eventListenersMap.set(mediaQuery, newMediaQueryInfo);
35
-
36
- if (mql.addEventListener) {
37
- mql.addEventListener('change', changeCallback);
38
- } else {
39
- mql.addListener(changeCallback);
30
+ var mql = matchMediaSSRSafe(mediaQuery);
31
+
32
+ if (mql) {
33
+ var newMediaQueryInfo = {
34
+ mql: mql,
35
+ listeners: [callback]
36
+ };
37
+ eventListenersMap.set(mediaQuery, newMediaQueryInfo);
38
+
39
+ if (mql.addEventListener) {
40
+ mql.addEventListener('change', changeCallback);
41
+ } else {
42
+ mql.addListener(changeCallback);
43
+ }
40
44
  }
41
45
  }
42
46
 
@@ -75,7 +79,9 @@ export function checkMatches(mediaQuery) {
75
79
  }
76
80
 
77
81
  if (!eventListenersMap.has(mediaQuery)) {
78
- return window.matchMedia(mediaQuery).matches;
82
+ var _matchMediaSSRSafe;
83
+
84
+ return !!((_matchMediaSSRSafe = matchMediaSSRSafe(mediaQuery)) != null && _matchMediaSSRSafe.matches);
79
85
  }
80
86
 
81
87
  var eventListener = eventListenersMap.get(mediaQuery);
@@ -1 +1 @@
1
- {"version":3,"sources":["ResponsiveLayoutEvents.ts"],"names":["canUseDOM","eventListenersMap","Map","addResponsiveLayoutListener","mediaQuery","callback","has","addCallbackToMQListener","createMQListener","remove","removeCallbackFromMQListener","eventListener","get","set","listeners","mql","window","matchMedia","newMediaQueryInfo","addEventListener","changeCallback","addListener","newListeners","filter","listener","length","removeEventListener","removeListener","checkMatches","matches","e","media","forEach"],"mappings":"0DAAA,SAASA,SAAT,QAA0B,kBAA1B;;;;;;;;;;;AAWA,OAAO,IAAMC,iBAAiB,GAAG,IAAIC,GAAJ,EAA1B;;AAEP,OAAO,SAASC,2BAAT;AACLC,UADK;AAELC,QAFK;AAGU;AACf,MAAIJ,iBAAiB,CAACK,GAAlB,CAAsBF,UAAtB,CAAJ,EAAuC;AACrCG,IAAAA,uBAAuB,CAACH,UAAD,EAAaC,QAAb,CAAvB;AACD,GAFD,MAEO;AACLG,IAAAA,gBAAgB,CAACJ,UAAD,EAAaC,QAAb,CAAhB;AACD;;AAED,SAAO;AACLI,IAAAA,MADK,oBACI;AACPC,MAAAA,4BAA4B,CAACN,UAAD,EAAaC,QAAb,CAA5B;AACD,KAHI,EAAP;;AAKD;;AAED,SAASE,uBAAT,CAAiCH,UAAjC,EAAqDC,QAArD,EAAiG;AAC/F,MAAMM,aAAa,GAAGV,iBAAiB,CAACW,GAAlB,CAAsBR,UAAtB,CAAtB;;AAEA,MAAIO,aAAJ,EAAmB;AACjBV,IAAAA,iBAAiB,CAACY,GAAlB,CAAsBT,UAAtB;AACKO,IAAAA,aADL;AAEEG,MAAAA,SAAS,YAAMH,aAAa,CAACG,SAApB,GAA+BT,QAA/B,EAFX;;AAID;AACF;;AAED,SAASG,gBAAT,CAA0BJ,UAA1B,EAA8CC,QAA9C,EAA0F;AACxF,MAAMU,GAAG,GAAGC,MAAM,CAACC,UAAP,CAAkBb,UAAlB,CAAZ;AACA,MAAMc,iBAAiC,GAAG,EAAEH,GAAG,EAAHA,GAAF,EAAOD,SAAS,EAAE,CAACT,QAAD,CAAlB,EAA1C;;AAEAJ,EAAAA,iBAAiB,CAACY,GAAlB,CAAsBT,UAAtB,EAAkCc,iBAAlC;AACA,MAAIH,GAAG,CAACI,gBAAR,EAA0B;AACxBJ,IAAAA,GAAG,CAACI,gBAAJ,CAAqB,QAArB,EAA+BC,cAA/B;AACD,GAFD,MAEO;AACLL,IAAAA,GAAG,CAACM,WAAJ,CAAgBD,cAAhB;AACD;AACF;;AAED,SAASV,4BAAT,CAAsCN,UAAtC,EAA0DC,QAA1D,EAAsG;AACpG,MAAIJ,iBAAiB,CAACK,GAAlB,CAAsBF,UAAtB,CAAJ,EAAuC;AACrC,QAAMO,aAAa,GAAGV,iBAAiB,CAACW,GAAlB,CAAsBR,UAAtB,CAAtB;;AAEA,QAAIO,aAAJ,EAAmB;AACjB,UAAMW,YAAY,GAAGX,aAAa,CAACG,SAAd,CAAwBS,MAAxB,CAA+B,UAACC,QAAD,UAAcA,QAAQ,KAAKnB,QAA3B,EAA/B,CAArB;;AAEA,UAAIiB,YAAY,CAACG,MAAb,KAAwB,CAA5B,EAA+B;AAC7B,YAAId,aAAa,CAACI,GAAd,CAAkBW,mBAAtB,EAA2C;AACzCf,UAAAA,aAAa,CAACI,GAAd,CAAkBW,mBAAlB,CAAsC,QAAtC,EAAgDN,cAAhD;AACD,SAFD,MAEO;AACLT,UAAAA,aAAa,CAACI,GAAd,CAAkBY,cAAlB,CAAiCP,cAAjC;AACD;AACDnB,QAAAA,iBAAiB,UAAjB,CAAyBG,UAAzB;AACA;AACD;;AAEDH,MAAAA,iBAAiB,CAACY,GAAlB,CAAsBT,UAAtB;AACKO,MAAAA,aADL;AAEEG,QAAAA,SAAS,YAAMQ,YAAN,CAFX;;AAID;AACF;AACF;;AAED,OAAO,SAASM,YAAT,CAAsBxB,UAAtB,EAA0C;AAC/C,MAAI,CAACJ,SAAL,EAAgB;AACd,WAAO,KAAP;AACD;;AAED,MAAI,CAACC,iBAAiB,CAACK,GAAlB,CAAsBF,UAAtB,CAAL,EAAwC;AACtC,WAAOY,MAAM,CAACC,UAAP,CAAkBb,UAAlB,EAA8ByB,OAArC;AACD;;AAED,MAAMlB,aAAa,GAAGV,iBAAiB,CAACW,GAAlB,CAAsBR,UAAtB,CAAtB;AACA,kCAAOO,aAAP,oBAAOA,aAAa,CAAEI,GAAf,CAAmBc,OAA1B,oCAAqC,KAArC;AACD;;AAED,SAAST,cAAT,CAAwBU,CAAxB,EAAgD;AAC9C,MAAMnB,aAAa,GAAGV,iBAAiB,CAACW,GAAlB,CAAsBkB,CAAC,CAACC,KAAxB,CAAtB;;AAEA,MAAIpB,aAAJ,EAAmB;AACjBA,IAAAA,aAAa,CAACG,SAAd,CAAwBkB,OAAxB,CAAgC,UAACR,QAAD,EAAc;AAC5CA,MAAAA,QAAQ,CAACM,CAAD,CAAR;AACD,KAFD;AAGD;AACF","sourcesContent":["import { canUseDOM } from '../../lib/client';\n\ninterface mediaQueryData {\n mql: MediaQueryList;\n listeners: Array<(e: MediaQueryListEvent) => void>;\n}\n\nexport interface listenerToken {\n remove: () => void;\n}\n\nexport const eventListenersMap = new Map<string, mediaQueryData>();\n\nexport function addResponsiveLayoutListener(\n mediaQuery: string,\n callback: (e: MediaQueryListEvent) => void,\n): listenerToken {\n if (eventListenersMap.has(mediaQuery)) {\n addCallbackToMQListener(mediaQuery, callback);\n } else {\n createMQListener(mediaQuery, callback);\n }\n\n return {\n remove() {\n removeCallbackFromMQListener(mediaQuery, callback);\n },\n };\n}\n\nfunction addCallbackToMQListener(mediaQuery: string, callback: (e: MediaQueryListEvent) => void) {\n const eventListener = eventListenersMap.get(mediaQuery);\n\n if (eventListener) {\n eventListenersMap.set(mediaQuery, {\n ...eventListener,\n listeners: [...eventListener.listeners, callback],\n });\n }\n}\n\nfunction createMQListener(mediaQuery: string, callback: (e: MediaQueryListEvent) => void) {\n const mql = window.matchMedia(mediaQuery);\n const newMediaQueryInfo: mediaQueryData = { mql, listeners: [callback] };\n\n eventListenersMap.set(mediaQuery, newMediaQueryInfo);\n if (mql.addEventListener) {\n mql.addEventListener('change', changeCallback);\n } else {\n mql.addListener(changeCallback);\n }\n}\n\nfunction removeCallbackFromMQListener(mediaQuery: string, callback: (e: MediaQueryListEvent) => void) {\n if (eventListenersMap.has(mediaQuery)) {\n const eventListener = eventListenersMap.get(mediaQuery);\n\n if (eventListener) {\n const newListeners = eventListener.listeners.filter((listener) => listener !== callback);\n\n if (newListeners.length === 0) {\n if (eventListener.mql.removeEventListener) {\n eventListener.mql.removeEventListener('change', changeCallback);\n } else {\n eventListener.mql.removeListener(changeCallback);\n }\n eventListenersMap.delete(mediaQuery);\n return;\n }\n\n eventListenersMap.set(mediaQuery, {\n ...eventListener,\n listeners: [...newListeners],\n });\n }\n }\n}\n\nexport function checkMatches(mediaQuery: string) {\n if (!canUseDOM) {\n return false;\n }\n\n if (!eventListenersMap.has(mediaQuery)) {\n return window.matchMedia(mediaQuery).matches;\n }\n\n const eventListener = eventListenersMap.get(mediaQuery);\n return eventListener?.mql.matches ?? false;\n}\n\nfunction changeCallback(e: MediaQueryListEvent) {\n const eventListener = eventListenersMap.get(e.media);\n\n if (eventListener) {\n eventListener.listeners.forEach((listener) => {\n listener(e);\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["ResponsiveLayoutEvents.ts"],"names":["matchMediaSSRSafe","canUseDOM","eventListenersMap","Map","addResponsiveLayoutListener","mediaQuery","callback","has","addCallbackToMQListener","createMQListener","remove","removeCallbackFromMQListener","eventListener","get","set","listeners","mql","newMediaQueryInfo","addEventListener","changeCallback","addListener","newListeners","filter","listener","length","removeEventListener","removeListener","checkMatches","matches","e","media","forEach"],"mappings":"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","sourcesContent":["import { matchMediaSSRSafe } from '../../lib/SSRSafe';\nimport { canUseDOM } from '../../lib/client';\n\ninterface mediaQueryData {\n mql: MediaQueryList;\n listeners: Array<(e: MediaQueryListEvent) => void>;\n}\n\nexport interface listenerToken {\n remove: () => void;\n}\n\nexport const eventListenersMap = new Map<string, mediaQueryData>();\n\nexport function addResponsiveLayoutListener(\n mediaQuery: string,\n callback: (e: MediaQueryListEvent) => void,\n): listenerToken {\n if (eventListenersMap.has(mediaQuery)) {\n addCallbackToMQListener(mediaQuery, callback);\n } else {\n createMQListener(mediaQuery, callback);\n }\n\n return {\n remove() {\n removeCallbackFromMQListener(mediaQuery, callback);\n },\n };\n}\n\nfunction addCallbackToMQListener(mediaQuery: string, callback: (e: MediaQueryListEvent) => void) {\n const eventListener = eventListenersMap.get(mediaQuery);\n\n if (eventListener) {\n eventListenersMap.set(mediaQuery, {\n ...eventListener,\n listeners: [...eventListener.listeners, callback],\n });\n }\n}\n\nfunction createMQListener(mediaQuery: string, callback: (e: MediaQueryListEvent) => void) {\n const mql = matchMediaSSRSafe(mediaQuery);\n if (mql) {\n const newMediaQueryInfo: mediaQueryData = { mql, listeners: [callback] };\n\n eventListenersMap.set(mediaQuery, newMediaQueryInfo);\n if (mql.addEventListener) {\n mql.addEventListener('change', changeCallback);\n } else {\n mql.addListener(changeCallback);\n }\n }\n}\n\nfunction removeCallbackFromMQListener(mediaQuery: string, callback: (e: MediaQueryListEvent) => void) {\n if (eventListenersMap.has(mediaQuery)) {\n const eventListener = eventListenersMap.get(mediaQuery);\n\n if (eventListener) {\n const newListeners = eventListener.listeners.filter((listener) => listener !== callback);\n\n if (newListeners.length === 0) {\n if (eventListener.mql.removeEventListener) {\n eventListener.mql.removeEventListener('change', changeCallback);\n } else {\n eventListener.mql.removeListener(changeCallback);\n }\n eventListenersMap.delete(mediaQuery);\n return;\n }\n\n eventListenersMap.set(mediaQuery, {\n ...eventListener,\n listeners: [...newListeners],\n });\n }\n }\n}\n\nexport function checkMatches(mediaQuery: string) {\n if (!canUseDOM) {\n return false;\n }\n\n if (!eventListenersMap.has(mediaQuery)) {\n return !!matchMediaSSRSafe(mediaQuery)?.matches;\n }\n\n const eventListener = eventListenersMap.get(mediaQuery);\n return eventListener?.mql.matches ?? false;\n}\n\nfunction changeCallback(e: MediaQueryListEvent) {\n const eventListener = eventListenersMap.get(e.media);\n\n if (eventListener) {\n eventListener.listeners.forEach((listener) => {\n listener(e);\n });\n }\n}\n"]}
@@ -18,6 +18,7 @@ export var ScrollBar = /*#__PURE__*/function (_React$Component) {
18
18
  }
19
19
 
20
20
  _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
21
+ _this.containerRef = /*#__PURE__*/React.createRef();
21
22
  _this.state = _extends({}, defaultScrollbarState);
22
23
 
23
24
  _this.renderMain = function () {
@@ -34,14 +35,18 @@ export var ScrollBar = /*#__PURE__*/function (_React$Component) {
34
35
  customScrollPos = _scrollSizeParameters.customScrollPos,
35
36
  customScrollSize = _scrollSizeParameters.customScrollSize;
36
37
  var classNames = cx(props.className, styles.scrollBar(_this.theme), _this.scrollBarStyles, (_cx = {}, _cx[styles.scrollBarInvert(_this.theme)] = props.invert, _cx));
37
- var inlineStyles = (_inlineStyles = {}, _inlineStyles[customScrollPos] = state.pos, _inlineStyles[customScrollSize] = state.size, _inlineStyles);
38
+ var inlineStyles = (_inlineStyles = {}, _inlineStyles[customScrollPos] = state.pos + "%", _inlineStyles[customScrollSize] = state.size + "%", _inlineStyles);
38
39
  return /*#__PURE__*/React.createElement("div", {
40
+ ref: _this.containerRef,
41
+ className: _this.scrollBarContainerClassNames,
42
+ style: props.offset
43
+ }, /*#__PURE__*/React.createElement("div", {
39
44
  ref: _this.refScroll,
40
45
  style: inlineStyles,
41
46
  className: classNames,
42
47
  onMouseDown: _this.handleScrollMouseDown,
43
48
  "data-tid": "ScrollContainer__ScrollBar-" + props.axis
44
- });
49
+ }));
45
50
  };
46
51
 
47
52
  _this.reflow = function () {
@@ -117,11 +122,13 @@ export var ScrollBar = /*#__PURE__*/function (_React$Component) {
117
122
  var state = _this.state;
118
123
 
119
124
  var mouseMove = function mouseMove(mouseMoveEvent) {
120
- if (!_this.inner) {
125
+ if (!_this.inner || !_this.containerRef.current) {
121
126
  return;
122
127
  }
123
128
 
124
- var ratio = (_this.inner[size] - _this.inner[offset]) / (_this.inner[offset] - state.size);
129
+ var remainingScrollingContent = _this.inner[size] - _this.inner[offset];
130
+ var remainingScrollingSpace = _this.containerRef.current[offset] / 100 * (100 - state.size);
131
+ var ratio = remainingScrollingContent / remainingScrollingSpace;
125
132
  var delta = (mouseMoveEvent[coord] - initialCoord) * ratio;
126
133
  _this.inner[pos] = initialScrollPos + delta;
127
134
 
@@ -249,6 +256,17 @@ export var ScrollBar = /*#__PURE__*/function (_React$Component) {
249
256
 
250
257
  return cx(styles.scrollBarY(this.theme), globalClasses.scrollbarY, (_cx3 = {}, _cx3[styles.scrollBarYHover(this.theme)] = state.hover || state.scrolling, _cx3));
251
258
  }
259
+ }, {
260
+ key: "scrollBarContainerClassNames",
261
+ get: function get() {
262
+ var axis = this.props.axis;
263
+
264
+ if (axis === 'x') {
265
+ return cx(globalClasses.scrollbarContainerX, styles.scrollBarContainerX(this.theme));
266
+ }
267
+
268
+ return cx(globalClasses.scrollbarContainerY, styles.scrollBarContainerY());
269
+ }
252
270
  }]);
253
271
 
254
272
  return ScrollBar;
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollBar.tsx"],"names":["React","ThemeContext","cx","defaultScrollbarState","scrollSizeParametersNames","styles","globalClasses","getScrollSizeParams","ScrollBar","state","renderMain","props","active","axis","customScrollPos","customScrollSize","classNames","className","scrollBar","theme","scrollBarStyles","scrollBarInvert","invert","inlineStyles","pos","size","refScroll","handleScrollMouseDown","reflow","inner","scrollSize","scrollPos","scrollActive","scrollState","getImmediateScrollState","onScrollStateChange","setState","setInnerElement","element","handleScrollWheel","event","node","addEventListener","passive","removeEventListener","offset","coord","initialCoord","target","window","document","initialScrollPos","mouseMove","mouseMoveEvent","ratio","delta","preventDefault","Object","prototype","hasOwnProperty","call","returnValue","mouseUp","scrolling","WheelEvent","shiftKey","offsetHeight","deltaY","clientSize","maxScrollPos","Math","abs","componentDidMount","componentDidUpdate","render","setHover","hover","scrollBarX","scrollbarX","scrollBarXHover","scrollBarY","scrollbarY","scrollBarYHover","Component"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { defaultScrollbarState, scrollSizeParametersNames } from './ScrollContainer.constants';\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { getScrollSizeParams } from './ScrollContainer.helpers';\n\nexport type ScrollAxis = 'x' | 'y';\nexport type ScrollBarScrollState = 'begin' | 'middle' | 'end';\n\nexport interface ScrollBarState {\n active: boolean;\n hover: boolean;\n scrolling: boolean;\n size: number;\n pos: number;\n scrollState: ScrollBarScrollState;\n}\n\nexport interface ScrollBarProps {\n invert: boolean;\n axis: ScrollAxis;\n className?: string;\n onScrollStateChange?: (state: ScrollBarScrollState, axis: ScrollAxis) => void;\n}\n\nexport class ScrollBar extends React.Component<ScrollBarProps, ScrollBarState> {\n private inner: Nullable<HTMLElement>;\n private theme!: Theme;\n\n public node: Nullable<HTMLElement>;\n public state: ScrollBarState = {\n ...defaultScrollbarState,\n };\n\n public componentDidMount() {\n this.reflow();\n }\n\n public componentDidUpdate() {\n this.reflow();\n }\n\n public render() {\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 state = this.state;\n const props = this.props;\n\n if (!state.active) {\n return null;\n }\n\n const { customScrollPos, customScrollSize } = scrollSizeParametersNames[this.props.axis];\n\n const classNames = cx(props.className, styles.scrollBar(this.theme), this.scrollBarStyles, {\n [styles.scrollBarInvert(this.theme)]: props.invert,\n });\n\n const inlineStyles: React.CSSProperties = {\n [customScrollPos]: state.pos,\n [customScrollSize]: state.size,\n };\n\n return (\n <div\n ref={this.refScroll}\n style={inlineStyles}\n className={classNames}\n onMouseDown={this.handleScrollMouseDown}\n data-tid={`ScrollContainer__ScrollBar-${props.axis}`}\n />\n );\n };\n\n public reflow = () => {\n if (!this.inner) {\n return;\n }\n\n const props = this.props;\n const state = this.state;\n\n const { scrollSize, scrollPos, scrollActive } = getScrollSizeParams(this.inner, props.axis);\n\n if (!scrollActive && !state.active) {\n return;\n }\n\n if (state.active !== scrollActive || state.size !== scrollSize || state.pos !== scrollPos) {\n const scrollState = this.getImmediateScrollState();\n\n if (scrollState !== state.scrollState) {\n this.props.onScrollStateChange?.(scrollState, props.axis);\n }\n\n this.setState({\n ...this.state,\n active: scrollActive,\n size: scrollSize,\n pos: scrollPos,\n scrollState,\n });\n }\n };\n\n public setInnerElement = (inner: Nullable<HTMLElement>) => {\n this.inner = inner;\n this.reflow();\n };\n\n public setHover(hover: boolean) {\n if (this.state.active && this.state.hover !== hover) {\n this.setState({ ...this.state, hover });\n }\n }\n\n public get scrollBarState() {\n return this.state.scrollState;\n }\n\n private get scrollBarStyles() {\n const state = this.state;\n\n if (this.props.axis === 'x') {\n return cx(styles.scrollBarX(this.theme), globalClasses.scrollbarX, {\n [styles.scrollBarXHover(this.theme)]: state.hover || state.scrolling,\n });\n }\n\n return cx(styles.scrollBarY(this.theme), globalClasses.scrollbarY, {\n [styles.scrollBarYHover(this.theme)]: state.hover || state.scrolling,\n });\n }\n\n private refScroll = (element: HTMLElement | null) => {\n const handleScrollWheel = (event: Event) => this.handleScrollWheel(event, this.props.axis);\n\n if (!this.node && element) {\n element.addEventListener('wheel', handleScrollWheel, { passive: false });\n }\n if (this.node && !element) {\n this.node.removeEventListener('wheel', handleScrollWheel);\n }\n this.node = element;\n };\n\n private handleScrollMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.inner) {\n return;\n }\n\n const { offset, size, pos, coord } = scrollSizeParametersNames[this.props.axis];\n\n const initialCoord = event[coord];\n const target: Document = window.document;\n const initialScrollPos = this.inner[pos];\n const state = this.state;\n\n const mouseMove = (mouseMoveEvent: MouseEvent) => {\n if (!this.inner) {\n return;\n }\n\n const ratio = (this.inner[size] - this.inner[offset]) / (this.inner[offset] - state.size);\n const delta = (mouseMoveEvent[coord] - initialCoord) * ratio;\n\n this.inner[pos] = initialScrollPos + delta;\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({ ...this.state, scrolling: false });\n };\n\n target.addEventListener('mousemove', mouseMove);\n target.addEventListener('mouseup', mouseUp);\n this.setState({ ...this.state, scrolling: true });\n\n event.preventDefault();\n };\n\n private handleScrollWheel = (event: Event, axis: ScrollAxis) => {\n if (!this.inner || !(event instanceof WheelEvent) || (axis === 'x' && !event.shiftKey)) {\n return;\n }\n\n const { offset, size, pos } = scrollSizeParametersNames[axis];\n\n const scrollSize = this.inner[size];\n const scrollPos = this.inner[pos];\n const offsetHeight = this.inner[offset];\n\n if (event.deltaY > 0 && scrollSize <= scrollPos + offsetHeight) {\n return;\n }\n if (event.deltaY < 0 && scrollPos <= 0) {\n return;\n }\n\n this.inner[pos] += event.deltaY;\n\n event.preventDefault();\n };\n\n private getImmediateScrollState = (): ScrollBarScrollState => {\n const { pos, size, clientSize } = scrollSizeParametersNames[this.props.axis];\n\n if (!this.inner || this.inner[pos] === 0) {\n return 'begin';\n }\n // Zoom in Chrome causes problems\n // https://github.com/skbkontur/retail-ui/pull/2705#issue-806286945\n const maxScrollPos = this.inner[size] - this.inner[clientSize];\n if (Math.abs(maxScrollPos - this.inner[pos]) <= 1) {\n return 'end';\n }\n\n return 'middle';\n };\n}\n"]}
1
+ {"version":3,"sources":["ScrollBar.tsx"],"names":["React","ThemeContext","cx","defaultScrollbarState","scrollSizeParametersNames","styles","globalClasses","getScrollSizeParams","ScrollBar","containerRef","createRef","state","renderMain","props","active","axis","customScrollPos","customScrollSize","classNames","className","scrollBar","theme","scrollBarStyles","scrollBarInvert","invert","inlineStyles","pos","size","scrollBarContainerClassNames","offset","refScroll","handleScrollMouseDown","reflow","inner","scrollSize","scrollPos","scrollActive","scrollState","getImmediateScrollState","onScrollStateChange","setState","setInnerElement","element","handleScrollWheel","event","node","addEventListener","passive","removeEventListener","coord","initialCoord","target","window","document","initialScrollPos","mouseMove","mouseMoveEvent","current","remainingScrollingContent","remainingScrollingSpace","ratio","delta","preventDefault","Object","prototype","hasOwnProperty","call","returnValue","mouseUp","scrolling","WheelEvent","shiftKey","offsetHeight","deltaY","clientSize","maxScrollPos","Math","abs","componentDidMount","componentDidUpdate","render","setHover","hover","scrollBarX","scrollbarX","scrollBarXHover","scrollBarY","scrollbarY","scrollBarYHover","scrollbarContainerX","scrollBarContainerX","scrollbarContainerY","scrollBarContainerY","Component"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { defaultScrollbarState, scrollSizeParametersNames } from './ScrollContainer.constants';\nimport { styles, globalClasses } from './ScrollContainer.styles';\nimport { getScrollSizeParams } from './ScrollContainer.helpers';\nimport { ScrollContainerProps } from './ScrollContainer';\n\nexport type ScrollAxis = 'x' | 'y';\nexport type ScrollBarScrollState = 'begin' | 'middle' | 'end';\n\nexport interface ScrollBarState {\n active: boolean;\n hover: boolean;\n scrolling: boolean;\n size: number; // in percentages\n pos: number; // in percentages\n scrollState: ScrollBarScrollState;\n}\n\nexport interface ScrollBarProps {\n invert: boolean;\n axis: ScrollAxis;\n className?: string;\n onScrollStateChange?: (state: ScrollBarScrollState, axis: ScrollAxis) => void;\n offset: ScrollContainerProps['offsetY'] | ScrollContainerProps['offsetX'];\n}\n\nexport class ScrollBar extends React.Component<ScrollBarProps, ScrollBarState> {\n private inner: Nullable<HTMLElement>;\n private containerRef = React.createRef<HTMLDivElement>();\n private theme!: Theme;\n\n public node: Nullable<HTMLElement>;\n public state: ScrollBarState = {\n ...defaultScrollbarState,\n };\n\n public componentDidMount() {\n this.reflow();\n }\n\n public componentDidUpdate() {\n this.reflow();\n }\n\n public render() {\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 state = this.state;\n const props = this.props;\n\n if (!state.active) {\n return null;\n }\n\n const { customScrollPos, customScrollSize } = scrollSizeParametersNames[this.props.axis];\n\n const classNames = cx(props.className, styles.scrollBar(this.theme), this.scrollBarStyles, {\n [styles.scrollBarInvert(this.theme)]: props.invert,\n });\n\n const inlineStyles: React.CSSProperties = {\n [customScrollPos]: `${state.pos}%`,\n [customScrollSize]: `${state.size}%`,\n };\n\n return (\n <div ref={this.containerRef} className={this.scrollBarContainerClassNames} style={props.offset}>\n <div\n ref={this.refScroll}\n style={inlineStyles}\n className={classNames}\n onMouseDown={this.handleScrollMouseDown}\n data-tid={`ScrollContainer__ScrollBar-${props.axis}`}\n />\n </div>\n );\n };\n\n public reflow = () => {\n if (!this.inner) {\n return;\n }\n\n const props = this.props;\n const state = this.state;\n\n const { scrollSize, scrollPos, scrollActive } = getScrollSizeParams(this.inner, props.axis);\n\n if (!scrollActive && !state.active) {\n return;\n }\n\n if (state.active !== scrollActive || state.size !== scrollSize || state.pos !== scrollPos) {\n const scrollState = this.getImmediateScrollState();\n\n if (scrollState !== state.scrollState) {\n this.props.onScrollStateChange?.(scrollState, props.axis);\n }\n\n this.setState({\n ...this.state,\n active: scrollActive,\n size: scrollSize,\n pos: scrollPos,\n scrollState,\n });\n }\n };\n\n public setInnerElement = (inner: Nullable<HTMLElement>) => {\n this.inner = inner;\n this.reflow();\n };\n\n public setHover(hover: boolean) {\n if (this.state.active && this.state.hover !== hover) {\n this.setState({ ...this.state, hover });\n }\n }\n\n public get scrollBarState() {\n return this.state.scrollState;\n }\n\n private get scrollBarStyles() {\n const state = this.state;\n\n if (this.props.axis === 'x') {\n return cx(styles.scrollBarX(this.theme), globalClasses.scrollbarX, {\n [styles.scrollBarXHover(this.theme)]: state.hover || state.scrolling,\n });\n }\n\n return cx(styles.scrollBarY(this.theme), globalClasses.scrollbarY, {\n [styles.scrollBarYHover(this.theme)]: state.hover || state.scrolling,\n });\n }\n\n private get scrollBarContainerClassNames() {\n const { axis } = this.props;\n\n if (axis === 'x') {\n return cx(globalClasses.scrollbarContainerX, styles.scrollBarContainerX(this.theme));\n }\n\n return cx(globalClasses.scrollbarContainerY, styles.scrollBarContainerY());\n }\n\n private refScroll = (element: HTMLElement | null) => {\n const handleScrollWheel = (event: Event) => this.handleScrollWheel(event, this.props.axis);\n\n if (!this.node && element) {\n element.addEventListener('wheel', handleScrollWheel, { passive: false });\n }\n if (this.node && !element) {\n this.node.removeEventListener('wheel', handleScrollWheel);\n }\n this.node = element;\n };\n\n private handleScrollMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.inner) {\n return;\n }\n\n const { offset, size, pos, coord } = scrollSizeParametersNames[this.props.axis];\n\n const initialCoord = event[coord];\n const target: Document = window.document;\n const initialScrollPos = this.inner[pos];\n const state = this.state;\n\n const mouseMove = (mouseMoveEvent: MouseEvent) => {\n if (!this.inner || !this.containerRef.current) {\n return;\n }\n\n const remainingScrollingContent = this.inner[size] - this.inner[offset];\n const remainingScrollingSpace = (this.containerRef.current[offset] / 100) * (100 - state.size);\n\n const ratio = remainingScrollingContent / remainingScrollingSpace;\n const delta = (mouseMoveEvent[coord] - initialCoord) * ratio;\n\n this.inner[pos] = initialScrollPos + delta;\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({ ...this.state, scrolling: false });\n };\n\n target.addEventListener('mousemove', mouseMove);\n target.addEventListener('mouseup', mouseUp);\n this.setState({ ...this.state, scrolling: true });\n\n event.preventDefault();\n };\n\n private handleScrollWheel = (event: Event, axis: ScrollAxis) => {\n if (!this.inner || !(event instanceof WheelEvent) || (axis === 'x' && !event.shiftKey)) {\n return;\n }\n\n const { offset, size, pos } = scrollSizeParametersNames[axis];\n\n const scrollSize = this.inner[size];\n const scrollPos = this.inner[pos];\n const offsetHeight = this.inner[offset];\n\n if (event.deltaY > 0 && scrollSize <= scrollPos + offsetHeight) {\n return;\n }\n if (event.deltaY < 0 && scrollPos <= 0) {\n return;\n }\n\n this.inner[pos] += event.deltaY;\n\n event.preventDefault();\n };\n\n private getImmediateScrollState = (): ScrollBarScrollState => {\n const { pos, size, clientSize } = scrollSizeParametersNames[this.props.axis];\n\n if (!this.inner || this.inner[pos] === 0) {\n return 'begin';\n }\n // Zoom in Chrome causes problems\n // https://github.com/skbkontur/retail-ui/pull/2705#issue-806286945\n const maxScrollPos = this.inner[size] - this.inner[clientSize];\n if (Math.abs(maxScrollPos - this.inner[pos]) <= 1) {\n return 'end';\n }\n\n return 'middle';\n };\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Nullable } from '../../typings/utility-types';
3
+ import { ScrollContainerProps } from './ScrollContainer';
3
4
  export declare type ScrollAxis = 'x' | 'y';
4
5
  export declare type ScrollBarScrollState = 'begin' | 'middle' | 'end';
5
6
  export interface ScrollBarState {
@@ -15,9 +16,11 @@ export interface ScrollBarProps {
15
16
  axis: ScrollAxis;
16
17
  className?: string;
17
18
  onScrollStateChange?: (state: ScrollBarScrollState, axis: ScrollAxis) => void;
19
+ offset: ScrollContainerProps['offsetY'] | ScrollContainerProps['offsetX'];
18
20
  }
19
21
  export declare class ScrollBar extends React.Component<ScrollBarProps, ScrollBarState> {
20
22
  private inner;
23
+ private containerRef;
21
24
  private theme;
22
25
  node: Nullable<HTMLElement>;
23
26
  state: ScrollBarState;
@@ -30,6 +33,7 @@ export declare class ScrollBar extends React.Component<ScrollBarProps, ScrollBar
30
33
  setHover(hover: boolean): void;
31
34
  get scrollBarState(): ScrollBarScrollState;
32
35
  private get scrollBarStyles();
36
+ private get scrollBarContainerClassNames();
33
37
  private refScroll;
34
38
  private handleScrollMouseDown;
35
39
  private handleScrollWheel;
@@ -68,11 +68,18 @@ export var ScrollContainer = rootNode(_class = (_temp = _class2 = /*#__PURE__*/f
68
68
 
69
69
  _this.renderScrollbar = function (axis) {
70
70
  var refScrollBar = axis === 'x' ? _this.refScrollBarX : _this.refScrollBarY;
71
+
72
+ var _this$getProps = _this.getProps(),
73
+ offsetY = _this$getProps.offsetY,
74
+ offsetX = _this$getProps.offsetX;
75
+
76
+ var offset = axis === 'x' ? offsetX : offsetY;
71
77
  return /*#__PURE__*/React.createElement(ScrollBar, {
72
78
  axis: axis,
73
79
  ref: refScrollBar,
74
80
  invert: _this.getProps().invert,
75
- onScrollStateChange: _this.handleScrollStateChange
81
+ onScrollStateChange: _this.handleScrollStateChange,
82
+ offset: offset
76
83
  });
77
84
  };
78
85
 
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","refScrollBar","refScrollBarX","refScrollBarY","invert","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","emit","WheelEvent","shiftKey","hasScrollBar","pos","size","offset","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","componentDidMount","setInnerElement","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","string","number","oneOf","func"],"mappings":"2JAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;AAEA,OAAO,KAAKC,YAAZ,MAA8B,wBAA9B;AACA,SAAsBC,aAAtB,QAA2C,8BAA3C;;AAEA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,MAAT,QAAuB,kBAAvB;AACA,SAASC,QAAT,QAAuC,oBAAvC;AACA,SAASC,UAAT,QAA2B,0BAA3B;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,MAAT,EAAiBC,aAAjB,QAAsC,0BAAtC;AACA,SAASC,yBAAT,QAA0C,6BAA1C;AACA;AACEC,gBADF;AAEEC,4BAFF;AAGEC,4BAHF;AAIO,2BAJP;AAKA,SAAqBC,SAArB,QAA4D,aAA5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,OAAO,IAAMC,uBAAuB,GAAG;AACrCC,EAAAA,IAAI,EAAE,uBAD+B;AAErCC,EAAAA,KAAK,EAAE,wBAF8B,EAAhC;;;;;;AAQP,WAAaC,eAAb,GADCb,QACD;;;;;;;;;;;;;;;;;;AAkBUc,IAAAA,QAlBV,GAkBqBZ,iBAAiB,CAACW,eAAe,CAACE,YAAjB,CAlBtC;;;;;;;;;;;;;;;;;;;;;;;;AA0CSC,IAAAA,MA1CT,GA0CkB,YAAM;AACpB,UAAMC,KAAK,GAAG,MAAKA,KAAnB;;AAEA,UAAI,MAAKA,KAAL,CAAWC,QAAf,EAAyB;AACvB,eAAO,MAAKD,KAAL,CAAWE,QAAlB;AACD;;AAED,UAAMC,UAA+B,GAAG;AACtCC,QAAAA,cAAc,EAAE,MAAKP,QAAL,GAAgBQ,eADM;AAEtCC,QAAAA,SAAS,EAAEN,KAAK,CAACM,SAFqB;AAGtCC,QAAAA,QAAQ,EAAEP,KAAK,CAACO,QAHsB,EAAxC;;;AAMA,UAAMC,UAAU,GAAG,MAAKC,eAAL,CAAqB,GAArB,CAAnB;AACA,UAAMC,UAAU,GAAG,MAAKD,eAAL,CAAqB,GAArB,CAAnB;;AAEA;AACE,4BAAC,aAAD,aAAe,WAAW,EAAE,MAAKE,WAAjC,IAAkD,MAAKX,KAAvD;AACE;AACE,sBAAUP,uBAAuB,CAACC,IADpC;AAEE,UAAA,SAAS,EAAER,MAAM,CAACQ,IAAP,EAFb;AAGE,UAAA,WAAW,EAAE,MAAKkB,eAHpB;AAIE,UAAA,YAAY,EAAE,MAAKC,gBAJrB;;AAMGL,QAAAA,UANH;AAOGE,QAAAA,UAPH;AAQE;AACE,UAAA,KAAK,EAAEP,UADT;AAEE,UAAA,GAAG,EAAE,MAAKW,QAFZ;AAGE,UAAA,SAAS,EAAEjC,EAAE,CAACK,MAAM,CAACS,KAAP,EAAD,EAAiBR,aAAa,CAACQ,KAA/B,EAAsCb,MAAM,IAAII,MAAM,CAAC6B,SAAP,EAAhD,CAHf;AAIE,sBAAUtB,uBAAuB,CAACE,KAJpC;AAKE,UAAA,QAAQ,EAAE,MAAKqB,kBALjB;;AAOGhB,QAAAA,KAAK,CAACE,QAPT,CARF,CADF,CADF;;;;;AAsBD,KAhFH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkJUO,IAAAA,eAlJV,GAkJ4B,UAACQ,IAAD,EAAsB;AAC9C,UAAMC,YAAY,GAAGD,IAAI,KAAK,GAAT,GAAe,MAAKE,aAApB,GAAoC,MAAKC,aAA9D;;AAEA;AACE,4BAAC,SAAD;AACE,UAAA,IAAI,EAAEH,IADR;AAEE,UAAA,GAAG,EAAEC,YAFP;AAGE,UAAA,MAAM,EAAE,MAAKrB,QAAL,GAAgBwB,MAH1B;AAIE,UAAA,mBAAmB,EAAE,MAAKC,uBAJ5B,GADF;;;AAQD,KA7JH;;AA+JUA,IAAAA,uBA/JV,GA+JoC,UAACC,WAAD,EAAoCN,IAApC,EAAyD;AACzF,UAAI,CAAC,MAAKO,OAAN,IAAiB,CAAC,MAAKC,OAA3B,EAAoC;AAClC;AACD;;AAED,UAAIR,IAAI,KAAK,GAAb,EAAkB;AAChB,YAAMS,YAAY,GAAGpC,4BAA4B,CAACiC,WAAD,CAAjD;;AAEA,cAAKvB,KAAL,CAAW2B,oBAAX,0BAAK3B,KAAL,CAAW2B,oBAAX,CAAkCD,YAAlC;AACA;AACD;;AAED,UAAME,YAAY,GAAGrC,4BAA4B,CAACgC,WAAD,CAAjD;;AAEA,YAAKvB,KAAL,CAAW6B,mBAAX,0BAAK7B,KAAL,CAAW6B,mBAAX,CAAiCD,YAAjC;AACA,YAAK5B,KAAL,CAAW8B,oBAAX,0BAAK9B,KAAL,CAAW8B,oBAAX,CAAkCF,YAAlC;AACD,KA/KH;;AAiLUR,IAAAA,aAjLV,GAiL0B,UAACW,SAAD,EAAoC;AAC1D,YAAKP,OAAL,GAAeO,SAAf;AACD,KAnLH;;AAqLUZ,IAAAA,aArLV,GAqL0B,UAACY,SAAD,EAAoC;AAC1D,YAAKN,OAAL,GAAeM,SAAf;AACD,KAvLH;;AAyLUjB,IAAAA,QAzLV,GAyLqB,UAACkB,OAAD,EAAiC;AAClD,UAAI,CAAC,MAAKrC,KAAN,IAAeqC,OAAf,IAA0B,MAAKnC,QAAL,GAAgBoC,mBAA9C,EAAmE;AACjED,QAAAA,OAAO,CAACE,gBAAR,CAAyB,OAAzB,EAAkC,MAAKC,sBAAvC,EAA+D,EAAEC,OAAO,EAAE,KAAX,EAA/D;AACD;AACD,UAAI,MAAKzC,KAAL,IAAc,CAACqC,OAAnB,EAA4B;AAC1B,cAAKrC,KAAL,CAAW0C,mBAAX,CAA+B,OAA/B,EAAwC,MAAKF,sBAA7C;AACD;AACD,YAAKxC,KAAL,GAAaqC,OAAb;AACD,KAjMH;;AAmMUhB,IAAAA,kBAnMV,GAmM+B,UAACsB,KAAD,EAA0C;AACrE,6BAAKb,OAAL,mCAAcc,MAAd;AACA,6BAAKf,OAAL,mCAAce,MAAd;;AAEA,YAAKvC,KAAL,CAAWwC,QAAX,0BAAKxC,KAAL,CAAWwC,QAAX,CAAsBF,KAAtB;AACA,UAAI,MAAKzC,QAAL,GAAgBoC,mBAApB,EAAyC;AACvCK,QAAAA,KAAK,CAACG,cAAN;AACA;AACD;AACD9D,MAAAA,YAAY,CAAC+D,IAAb;AACD,KA7MH;;AA+MUP,IAAAA,sBA/MV,GA+MmC,UAACG,KAAD,EAAkB;AACjD,UAAI,CAAC,MAAK3C,KAAN,IAAe,EAAE2C,KAAK,YAAYK,UAAnB,CAAnB,EAAmD;AACjD;AACD;;AAED,UAAM1B,IAAgB,GAAGqB,KAAK,CAACM,QAAN,GAAiB,GAAjB,GAAuB,GAAhD;;AAEA,UAAI,MAAKC,YAAL,CAAkB5B,IAAlB,CAAJ,EAA6B;AAC3B,oCAA8B7B,yBAAyB,CAAC6B,IAAD,CAAvD,CAAQ6B,GAAR,yBAAQA,GAAR,CAAaC,IAAb,yBAAaA,IAAb,CAAmBC,MAAnB,yBAAmBA,MAAnB;;AAEA,YAAIV,KAAK,CAACW,MAAN,GAAe,CAAf,IAAoB,MAAKtD,KAAL,CAAWoD,IAAX,KAAoB,MAAKpD,KAAL,CAAWmD,GAAX,IAAkB,MAAKnD,KAAL,CAAWqD,MAAX,CAA9D,EAAkF;AAChFV,UAAAA,KAAK,CAACG,cAAN;AACA,iBAAO,KAAP;AACD;AACD,YAAIH,KAAK,CAACW,MAAN,GAAe,CAAf,IAAoB,MAAKtD,KAAL,CAAWmD,GAAX,KAAmB,CAA3C,EAA8C;AAC5CR,UAAAA,KAAK,CAACG,cAAN;AACA,iBAAO,KAAP;AACD;AACF;AACF,KAlOH;;AAoOU7B,IAAAA,eApOV,GAoO4B,UAAC0B,KAAD,EAA6C;AACrE,UAAMY,KAAK,GAAGlE,UAAU,CAACsD,KAAK,CAACa,aAAP,CAAV,CAAgCD,KAAhC,GAAwCZ,KAAK,CAACc,KAA5D;AACA,UAAMC,MAAM,GAAGrE,UAAU,CAACsD,KAAK,CAACa,aAAP,CAAV,CAAgCE,MAAhC,GAAyCf,KAAK,CAACgB,KAA9D;;AAEA,8BAAK9B,OAAL,oCAAc+B,QAAd,CAAuBL,KAAK,IAAI,EAAhC;AACA,8BAAKzB,OAAL,oCAAc8B,QAAd,CAAuBL,KAAK,IAAI,EAAT,IAAeG,MAAM,IAAI,EAAhD;AACD,KA1OH;;AA4OUxC,IAAAA,gBA5OV,GA4O6B,YAAM;AAC/B,8BAAKW,OAAL,oCAAc+B,QAAd,CAAuB,KAAvB;AACA,8BAAK9B,OAAL,oCAAc8B,QAAd,CAAuB,KAAvB;AACD,KA/OH,6DAyBSC,iBAzBT,GAyBE,6BAA2B,oCACzB,uBAAK/B,OAAL,oCAAcgC,eAAd,CAA8B,KAAK9D,KAAnC,EACA,uBAAK6B,OAAL,oCAAciC,eAAd,CAA8B,KAAK9D,KAAnC,EACD,CA5BH,QA8BS+D,kBA9BT,GA8BE,4BAA0BC,SAA1B,EAA2D,CACzD,IAAM1B,mBAAmB,GAAG,KAAKpC,QAAL,GAAgBoC,mBAA5C,CACA,IAAI,KAAKtC,KAAT,EAAgB,CACd,IAAIgE,SAAS,CAAC1B,mBAAV,IAAiC,CAACA,mBAAtC,EAA2D,CACzD,KAAKtC,KAAL,CAAW0C,mBAAX,CAA+B,OAA/B,EAAwC,KAAKF,sBAA7C,EACD,CACD,IAAI,CAACwB,SAAS,CAAC1B,mBAAX,IAAkCA,mBAAtC,EAA2D,CACzD,KAAKtC,KAAL,CAAWuC,gBAAX,CAA4B,OAA5B,EAAqC,KAAKC,sBAA1C,EAAkE,EAAEC,OAAO,EAAE,KAAX,EAAlE,EACD,CACF,CACF,CAxCH,EAkFE;AACF;AACA;AACA,KArFA,OAsFSwB,QAtFT,GAsFE,kBAAgB5B,OAAhB,EAAgD,CAC9C,IAAI,CAACA,OAAD,IAAY,CAAC,KAAKrC,KAAtB,EAA6B,CAC3B,OACD,CAED,KAAKA,KAAL,CAAWkE,UAAX,GAAwB7B,OAAO,CAAC8B,UAAhC,CACA,KAAKnE,KAAL,CAAWoE,SAAX,GAAuB1E,gBAAgB,CAAC2C,OAAD,EAAU,KAAKrC,KAAf,CAAvC,CACD,CA7FH,CA+FE;AACF;AACA,KAjGA,QAkGSqE,WAlGT,GAkGE,uBAAqB,CACnB,IAAI,CAAC,KAAKrE,KAAV,EAAiB,CACf,OACD,CACD,KAAKA,KAAL,CAAWoE,SAAX,GAAuB,CAAvB,CACD,CAvGH,CAyGE;AACF;AACA,KA3GA,QA4GSE,cA5GT,GA4GE,0BAAwB,CACtB,IAAI,CAAC,KAAKtE,KAAV,EAAiB,CACf,OACD,CACD,KAAKA,KAAL,CAAWoE,SAAX,GAAuB,KAAKpE,KAAL,CAAWuE,YAAX,GAA0B,KAAKvE,KAAL,CAAWwE,YAA5D,CACD,CAjHH,CAmHE;AACF;AACA,KArHA,QAsHSC,YAtHT,GAsHE,wBAAsB,CACpB,IAAI,CAAC,KAAKzE,KAAV,EAAiB,CACf,OACD,CACD,KAAKA,KAAL,CAAWkE,UAAX,GAAwB,CAAxB,CACD,CA3HH,CA6HE;AACF;AACA,KA/HA,QAgISQ,aAhIT,GAgIE,yBAAuB,CACrB,IAAI,CAAC,KAAK1E,KAAV,EAAiB,CACf,OACD,CAED,KAAKA,KAAL,CAAWkE,UAAX,GAAwB,KAAKlE,KAAL,CAAW2E,WAAX,GAAyB,KAAK3E,KAAL,CAAW4E,WAA5D,CACD,CAtIH,QAwIU1B,YAxIV,GAwIE,sBAAqB5B,IAArB,EAAuC,CACrC,IAAI,CAAC,KAAKtB,KAAV,EAAiB,CACf,OAAO,KAAP,CACD,CAED,OAAOsB,IAAI,KAAK,GAAT,GACH,KAAKtB,KAAL,CAAW4E,WAAX,GAAyB,KAAK5E,KAAL,CAAW2E,WADjC,GAEH,KAAK3E,KAAL,CAAWwE,YAAX,GAA0B,KAAKxE,KAAL,CAAWuE,YAFzC,CAGD,CAhJH,0BAAqCzF,KAAK,CAAC+F,SAA3C,WACgBC,mBADhB,GACsC,iBADtC,UAGgBC,SAHhB,GAG4B,EACxBrD,MAAM,EAAE3C,SAAS,CAACiG,IADM,EAExBpE,QAAQ,EAAE7B,SAAS,CAACkG,SAAV,CAAoB,CAAClG,SAAS,CAACmG,MAAX,EAAmBnG,SAAS,CAACoG,MAA7B,CAApB,CAFc,EAGxBxE,SAAS,EAAE5B,SAAS,CAACkG,SAAV,CAAoB,CAAClG,SAAS,CAACmG,MAAX,EAAmBnG,SAAS,CAACoG,MAA7B,CAApB,CAHa,EAIxBzE,eAAe,EAAE3B,SAAS,CAACqG,KAAV,CAAgB,CAAC,MAAD,EAAS,QAAT,CAAhB,CAJO,EAKxB9C,mBAAmB,EAAEvD,SAAS,CAACiG,IALP,EAMxB9C,mBAAmB,EAAEnD,SAAS,CAACsG,IANP,EAH5B,UAYgBlF,YAZhB,GAY6C,EACzCuB,MAAM,EAAE,KADiC,EAEzChB,eAAe,EAAE,MAFwB,EAGzC4B,mBAAmB,EAAE,KAHoB,EAZ7C","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';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\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 * Отключение кастомного скролла\n */\n disabled?: boolean;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll'>>;\n\n@rootNode\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: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private inner: Nullable<HTMLElement>;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().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 rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} 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.getProps().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.getProps().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.getProps().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 = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).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"]}
1
+ {"version":3,"sources":["ScrollContainer.tsx"],"names":["React","PropTypes","LayoutEvents","CommonWrapper","cx","isIE11","rootNode","getDOMRect","createPropsGetter","styles","globalClasses","scrollSizeParametersNames","getScrollYOffset","convertScrollbarXScrollState","convertScrollbarYScrollState","ScrollBar","ScrollContainerDataTids","root","inner","ScrollContainer","getProps","defaultProps","render","props","disabled","children","innerStyle","scrollBehavior","scrollBehaviour","maxHeight","maxWidth","scrollbarY","renderScrollbar","scrollbarX","setRootNode","handleMouseMove","handleMouseLeave","refInner","innerIE11","handleNativeScroll","axis","refScrollBar","refScrollBarX","refScrollBarY","offsetY","offsetX","offset","invert","handleScrollStateChange","scrollState","scrollY","scrollX","scrollXState","onScrollStateChangeX","scrollYState","onScrollStateChange","onScrollStateChangeY","scrollbar","element","preventWindowScroll","addEventListener","handleInnerScrollWheel","passive","removeEventListener","event","reflow","onScroll","preventDefault","emit","WheelEvent","shiftKey","hasScrollBar","pos","size","deltaY","right","currentTarget","pageX","bottom","pageY","setHover","componentDidMount","setInnerElement","componentDidUpdate","prevProps","scrollTo","scrollLeft","offsetLeft","scrollTop","scrollToTop","scrollToBottom","scrollHeight","offsetHeight","scrollToLeft","scrollToRight","scrollWidth","offsetWidth","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","string","number","oneOf","func"],"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';\nimport { isIE11 } from '../../lib/client';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\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\ntype OffsetCSSPropsY = 'top' | 'right' | 'bottom';\ntype OffsetCSSPropsX = 'right' | 'bottom' | 'left';\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 * Отключение кастомного скролла\n */\n disabled?: boolean;\n /**\n * Смещение вертикального скроллбара\n */\n offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;\n /**\n * Смещение горизонтального скроллбара\n */\n offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;\n}\n\nexport const ScrollContainerDataTids = {\n root: 'ScrollContainer__root',\n inner: 'ScrollContainer__inner',\n} as const;\n\ntype DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll'>>;\n\n@rootNode\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: DefaultProps = {\n invert: false,\n scrollBehaviour: 'auto',\n preventWindowScroll: false,\n };\n\n private getProps = createPropsGetter(ScrollContainer.defaultProps);\n\n private scrollX: Nullable<ScrollBar>;\n private scrollY: Nullable<ScrollBar>;\n private inner: Nullable<HTMLElement>;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.scrollX?.setInnerElement(this.inner);\n this.scrollY?.setInnerElement(this.inner);\n }\n\n public componentDidUpdate(prevProps: ScrollContainerProps) {\n const preventWindowScroll = this.getProps().preventWindowScroll;\n if (this.inner) {\n if (prevProps.preventWindowScroll && !preventWindowScroll) {\n this.inner.removeEventListener('wheel', this.handleInnerScrollWheel);\n }\n if (!prevProps.preventWindowScroll && preventWindowScroll) {\n this.inner.addEventListener('wheel', this.handleInnerScrollWheel, { passive: false });\n }\n }\n }\n\n public render = () => {\n const props = this.props;\n\n if (this.props.disabled) {\n return this.props.children;\n }\n\n const innerStyle: React.CSSProperties = {\n scrollBehavior: this.getProps().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 rootNodeRef={this.setRootNode} {...this.props}>\n <div\n data-tid={ScrollContainerDataTids.root}\n className={styles.root()}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n >\n {scrollbarY}\n {scrollbarX}\n <div\n style={innerStyle}\n ref={this.refInner}\n className={cx(styles.inner(), globalClasses.inner, isIE11 && styles.innerIE11())}\n data-tid={ScrollContainerDataTids.inner}\n onScroll={this.handleNativeScroll}\n >\n {props.children}\n </div>\n </div>\n </CommonWrapper>\n );\n };\n\n /**\n * @public\n * @param {Element} 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 const { offsetY, offsetX } = this.getProps();\n\n const offset = axis === 'x' ? offsetX : offsetY;\n\n return (\n <ScrollBar\n axis={axis}\n ref={refScrollBar}\n invert={this.getProps().invert}\n onScrollStateChange={this.handleScrollStateChange}\n offset={offset}\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.getProps().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.getProps().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 = getDOMRect(event.currentTarget).right - event.pageX;\n const bottom = getDOMRect(event.currentTarget).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"]}
@@ -6,6 +6,8 @@ export declare type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';
6
6
  export declare type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';
7
7
  export declare type ScrollContainerScrollState = ScrollContainerScrollStateY;
8
8
  export declare type ScrollBehaviour = 'auto' | 'smooth';
9
+ declare type OffsetCSSPropsY = 'top' | 'right' | 'bottom';
10
+ declare type OffsetCSSPropsX = 'right' | 'bottom' | 'left';
9
11
  export interface ScrollContainerProps extends CommonProps {
10
12
  /**
11
13
  * Инвертировать цвет скроллбара
@@ -31,6 +33,14 @@ export interface ScrollContainerProps extends CommonProps {
31
33
  * Отключение кастомного скролла
32
34
  */
33
35
  disabled?: boolean;
36
+ /**
37
+ * Смещение вертикального скроллбара
38
+ */
39
+ offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;
40
+ /**
41
+ * Смещение горизонтального скроллбара
42
+ */
43
+ offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;
34
44
  }
35
45
  export declare const ScrollContainerDataTids: {
36
46
  readonly root: "ScrollContainer__root";
@@ -13,7 +13,10 @@ export var getScrollSizeParams = function getScrollSizeParams(inner, axis) {
13
13
 
14
14
  if (scrollActive) {
15
15
  scrollSize = Math.max(containerSize / contentSize * containerSize, MIN_SCROLL_SIZE);
16
- scrollPos = scrollOffset / (contentSize - containerSize) * (containerSize - scrollSize);
16
+ scrollPos = scrollOffset / (contentSize - containerSize) * (containerSize - scrollSize); // Convert pixels to percentages
17
+
18
+ scrollSize = containerSize && 100 / containerSize * scrollSize;
19
+ scrollPos = containerSize && 100 / containerSize * scrollPos;
17
20
  }
18
21
 
19
22
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["ScrollContainer.helpers.ts"],"names":["MIN_SCROLL_SIZE","scrollSizeParametersNames","getScrollSizeParams","inner","axis","offset","size","pos","contentSize","scrollOffset","containerSize","scrollActive","scrollSize","scrollPos","Math","max","getScrollYOffset","element","container","elementTopOffset","offsetTop","scrollTop","scrollHeight","offsetHeight","convertScrollbarXScrollState","state","scrollBarState","begin","end","middle","convertScrollbarYScrollState"],"mappings":"AAAA,SAASA,eAAT,EAA0BC,yBAA1B,QAA2D,6BAA3D;;;;AAIA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD,EAAqBC,IAArB,EAAyC;AAC1E,8BAA8BH,yBAAyB,CAACG,IAAD,CAAvD,CAAQC,MAAR,yBAAQA,MAAR,CAAgBC,IAAhB,yBAAgBA,IAAhB,CAAsBC,GAAtB,yBAAsBA,GAAtB;;AAEA,MAAMC,WAAW,GAAGL,KAAK,CAACG,IAAD,CAAzB;AACA,MAAMG,YAAY,GAAGN,KAAK,CAACI,GAAD,CAA1B;AACA,MAAMG,aAAa,GAAGP,KAAK,CAACE,MAAD,CAA3B;;AAEA,MAAMM,YAAY,GAAGD,aAAa,GAAGF,WAArC;;AAEA,MAAII,UAAU,GAAG,CAAjB;AACA,MAAIC,SAAS,GAAG,CAAhB;;AAEA,MAAIF,YAAJ,EAAkB;AAChBC,IAAAA,UAAU,GAAGE,IAAI,CAACC,GAAL,CAAUL,aAAa,GAAGF,WAAjB,GAAgCE,aAAzC,EAAwDV,eAAxD,CAAb;AACAa,IAAAA,SAAS,GAAIJ,YAAY,IAAID,WAAW,GAAGE,aAAlB,CAAb,IAAkDA,aAAa,GAAGE,UAAlE,CAAZ;AACD;;AAED,SAAO;AACLD,IAAAA,YAAY,EAAZA,YADK;AAELC,IAAAA,UAAU,EAAVA,UAFK;AAGLC,IAAAA,SAAS,EAATA,SAHK,EAAP;;AAKD,CAtBM;;AAwBP,OAAO,IAAMG,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,OAAD,EAAuBC,SAAvB,EAAkD;AAChF,MAAMC,gBAAgB,GAAGF,OAAO,CAACG,SAAjC;;AAEA,MAAIF,SAAS,CAACG,SAAV,GAAsBF,gBAA1B,EAA4C;AAC1C,WAAOA,gBAAP;AACD;;AAED,MAAMd,MAAM,GAAGc,gBAAgB,GAAGF,OAAO,CAACK,YAA3B,GAA0CJ,SAAS,CAACK,YAAnE;AACA,MAAIL,SAAS,CAACG,SAAV,GAAsBhB,MAA1B,EAAkC;AAChC,WAAOA,MAAP;AACD;;AAED,SAAOa,SAAS,CAACG,SAAjB;AACD,CAbM;;AAeP,OAAO,IAAMG,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACC,KAAD,EAA8D;AACxG,MAAMC,cAAyE,GAAG;AAChFC,IAAAA,KAAK,EAAE,MADyE;AAEhFC,IAAAA,GAAG,EAAE,OAF2E;AAGhFC,IAAAA,MAAM,EAAE,QAHwE,EAAlF;;;AAMA,SAAOH,cAAc,CAACD,KAAD,CAArB;AACD,CARM;;AAUP,OAAO,IAAMK,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACL,KAAD,EAA8D;AACxG,MAAMC,cAAyE,GAAG;AAChFC,IAAAA,KAAK,EAAE,KADyE;AAEhFC,IAAAA,GAAG,EAAE,QAF2E;AAGhFC,IAAAA,MAAM,EAAE,QAHwE,EAAlF;;;AAMA,SAAOH,cAAc,CAACD,KAAD,CAArB;AACD,CARM","sourcesContent":["import { MIN_SCROLL_SIZE, scrollSizeParametersNames } from './ScrollContainer.constants';\nimport { ScrollBarScrollState } from './ScrollBar';\nimport { ScrollContainerScrollStateX, ScrollContainerScrollStateY } from './ScrollContainer';\n\nexport const getScrollSizeParams = (inner: HTMLElement, axis: 'x' | 'y') => {\n const { offset, size, pos } = scrollSizeParametersNames[axis];\n\n const contentSize = inner[size];\n const scrollOffset = inner[pos];\n const containerSize = inner[offset];\n\n const scrollActive = containerSize < contentSize;\n\n let scrollSize = 0;\n let scrollPos = 0;\n\n if (scrollActive) {\n scrollSize = Math.max((containerSize / contentSize) * containerSize, MIN_SCROLL_SIZE);\n scrollPos = (scrollOffset / (contentSize - containerSize)) * (containerSize - scrollSize);\n }\n\n return {\n scrollActive,\n scrollSize,\n scrollPos,\n };\n};\n\nexport const getScrollYOffset = (element: HTMLElement, container: HTMLElement) => {\n const elementTopOffset = element.offsetTop;\n\n if (container.scrollTop > elementTopOffset) {\n return elementTopOffset;\n }\n\n const offset = elementTopOffset + element.scrollHeight - container.offsetHeight;\n if (container.scrollTop < offset) {\n return offset;\n }\n\n return container.scrollTop;\n};\n\nexport const convertScrollbarXScrollState = (state: ScrollBarScrollState): ScrollContainerScrollStateX => {\n const scrollBarState: Record<ScrollBarScrollState, ScrollContainerScrollStateX> = {\n begin: 'left',\n end: 'right',\n middle: 'scroll',\n };\n\n return scrollBarState[state];\n};\n\nexport const convertScrollbarYScrollState = (state: ScrollBarScrollState): ScrollContainerScrollStateY => {\n const scrollBarState: Record<ScrollBarScrollState, ScrollContainerScrollStateY> = {\n begin: 'top',\n end: 'bottom',\n middle: 'scroll',\n };\n\n return scrollBarState[state];\n};\n"]}
1
+ {"version":3,"sources":["ScrollContainer.helpers.ts"],"names":["MIN_SCROLL_SIZE","scrollSizeParametersNames","getScrollSizeParams","inner","axis","offset","size","pos","contentSize","scrollOffset","containerSize","scrollActive","scrollSize","scrollPos","Math","max","getScrollYOffset","element","container","elementTopOffset","offsetTop","scrollTop","scrollHeight","offsetHeight","convertScrollbarXScrollState","state","scrollBarState","begin","end","middle","convertScrollbarYScrollState"],"mappings":"AAAA,SAASA,eAAT,EAA0BC,yBAA1B,QAA2D,6BAA3D;;;;AAIA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD,EAAqBC,IAArB,EAAyC;AAC1E,8BAA8BH,yBAAyB,CAACG,IAAD,CAAvD,CAAQC,MAAR,yBAAQA,MAAR,CAAgBC,IAAhB,yBAAgBA,IAAhB,CAAsBC,GAAtB,yBAAsBA,GAAtB;;AAEA,MAAMC,WAAW,GAAGL,KAAK,CAACG,IAAD,CAAzB;AACA,MAAMG,YAAY,GAAGN,KAAK,CAACI,GAAD,CAA1B;AACA,MAAMG,aAAa,GAAGP,KAAK,CAACE,MAAD,CAA3B;;AAEA,MAAMM,YAAY,GAAGD,aAAa,GAAGF,WAArC;;AAEA,MAAII,UAAU,GAAG,CAAjB;AACA,MAAIC,SAAS,GAAG,CAAhB;;AAEA,MAAIF,YAAJ,EAAkB;AAChBC,IAAAA,UAAU,GAAGE,IAAI,CAACC,GAAL,CAAUL,aAAa,GAAGF,WAAjB,GAAgCE,aAAzC,EAAwDV,eAAxD,CAAb;AACAa,IAAAA,SAAS,GAAIJ,YAAY,IAAID,WAAW,GAAGE,aAAlB,CAAb,IAAkDA,aAAa,GAAGE,UAAlE,CAAZ;;AAEA;AACAA,IAAAA,UAAU,GAAGF,aAAa,IAAK,MAAMA,aAAP,GAAwBE,UAAtD;AACAC,IAAAA,SAAS,GAAGH,aAAa,IAAK,MAAMA,aAAP,GAAwBG,SAArD;AACD;;AAED,SAAO;AACLF,IAAAA,YAAY,EAAZA,YADK;AAELC,IAAAA,UAAU,EAAVA,UAFK;AAGLC,IAAAA,SAAS,EAATA,SAHK,EAAP;;AAKD,CA1BM;;AA4BP,OAAO,IAAMG,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,OAAD,EAAuBC,SAAvB,EAAkD;AAChF,MAAMC,gBAAgB,GAAGF,OAAO,CAACG,SAAjC;;AAEA,MAAIF,SAAS,CAACG,SAAV,GAAsBF,gBAA1B,EAA4C;AAC1C,WAAOA,gBAAP;AACD;;AAED,MAAMd,MAAM,GAAGc,gBAAgB,GAAGF,OAAO,CAACK,YAA3B,GAA0CJ,SAAS,CAACK,YAAnE;AACA,MAAIL,SAAS,CAACG,SAAV,GAAsBhB,MAA1B,EAAkC;AAChC,WAAOA,MAAP;AACD;;AAED,SAAOa,SAAS,CAACG,SAAjB;AACD,CAbM;;AAeP,OAAO,IAAMG,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACC,KAAD,EAA8D;AACxG,MAAMC,cAAyE,GAAG;AAChFC,IAAAA,KAAK,EAAE,MADyE;AAEhFC,IAAAA,GAAG,EAAE,OAF2E;AAGhFC,IAAAA,MAAM,EAAE,QAHwE,EAAlF;;;AAMA,SAAOH,cAAc,CAACD,KAAD,CAArB;AACD,CARM;;AAUP,OAAO,IAAMK,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACL,KAAD,EAA8D;AACxG,MAAMC,cAAyE,GAAG;AAChFC,IAAAA,KAAK,EAAE,KADyE;AAEhFC,IAAAA,GAAG,EAAE,QAF2E;AAGhFC,IAAAA,MAAM,EAAE,QAHwE,EAAlF;;;AAMA,SAAOH,cAAc,CAACD,KAAD,CAArB;AACD,CARM","sourcesContent":["import { MIN_SCROLL_SIZE, scrollSizeParametersNames } from './ScrollContainer.constants';\nimport { ScrollBarScrollState } from './ScrollBar';\nimport { ScrollContainerScrollStateX, ScrollContainerScrollStateY } from './ScrollContainer';\n\nexport const getScrollSizeParams = (inner: HTMLElement, axis: 'x' | 'y') => {\n const { offset, size, pos } = scrollSizeParametersNames[axis];\n\n const contentSize = inner[size];\n const scrollOffset = inner[pos];\n const containerSize = inner[offset];\n\n const scrollActive = containerSize < contentSize;\n\n let scrollSize = 0;\n let scrollPos = 0;\n\n if (scrollActive) {\n scrollSize = Math.max((containerSize / contentSize) * containerSize, MIN_SCROLL_SIZE);\n scrollPos = (scrollOffset / (contentSize - containerSize)) * (containerSize - scrollSize);\n\n // Convert pixels to percentages\n scrollSize = containerSize && (100 / containerSize) * scrollSize;\n scrollPos = containerSize && (100 / containerSize) * scrollPos;\n }\n\n return {\n scrollActive,\n scrollSize,\n scrollPos,\n };\n};\n\nexport const getScrollYOffset = (element: HTMLElement, container: HTMLElement) => {\n const elementTopOffset = element.offsetTop;\n\n if (container.scrollTop > elementTopOffset) {\n return elementTopOffset;\n }\n\n const offset = elementTopOffset + element.scrollHeight - container.offsetHeight;\n if (container.scrollTop < offset) {\n return offset;\n }\n\n return container.scrollTop;\n};\n\nexport const convertScrollbarXScrollState = (state: ScrollBarScrollState): ScrollContainerScrollStateX => {\n const scrollBarState: Record<ScrollBarScrollState, ScrollContainerScrollStateX> = {\n begin: 'left',\n end: 'right',\n middle: 'scroll',\n };\n\n return scrollBarState[state];\n};\n\nexport const convertScrollbarYScrollState = (state: ScrollBarScrollState): ScrollContainerScrollStateY => {\n const scrollBarState: Record<ScrollBarScrollState, ScrollContainerScrollStateY> = {\n begin: 'top',\n end: 'bottom',\n middle: 'scroll',\n };\n\n return scrollBarState[state];\n};\n"]}
@@ -141,3 +141,32 @@ var innerStyle = {
141
141
  </div>
142
142
  </div>;
143
143
  ```
144
+
145
+
146
+ Смещение скроллбара
147
+
148
+ ```jsx harmony
149
+ const containerStyle = {
150
+ display: 'inline-block',
151
+ border: '1px solid #f99',
152
+ height: 200,
153
+ margin: 1,
154
+ width: 200,
155
+ };
156
+
157
+ const offsetY = {
158
+ top: 8,
159
+ bottom: 8,
160
+ right: 8,
161
+ };
162
+
163
+ <div style={containerStyle}>
164
+ <ScrollContainer offsetY={offsetY}>
165
+ {Array(30).fill(null).map((_,i) => (
166
+ <div key={i}>
167
+ {i}
168
+ </div>
169
+ ))}
170
+ </ScrollContainer>
171
+ </div>
172
+ ```