@vkontakte/vkui 7.1.2-alpha.0 → 7.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollContext.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuB/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD,wBAAwB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;CAC7D;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAM5D,CAAC;AAEL,eAAO,MAAM,SAAS,QAAO,sBAAyD,CAAC;AAgCvF,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,sBAAsB,iBAAkB,qBAAqB,KAAG,KAAK,CAAC,SAwElF,CAAC;AAEF,eAAO,MAAM,uBAAuB,yBAGjC,qBAAqB,KAAG,KAAK,CAAC,SA4EhC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,yBAAqB,IAW9C,CAAC"}
1
+ {"version":3,"file":"ScrollContext.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuB/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD,wBAAwB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;CAC7D;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAM5D,CAAC;AAEL,eAAO,MAAM,SAAS,QAAO,sBAAyD,CAAC;AA8BvF,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,sBAAsB,iBAAkB,qBAAqB,KAAG,KAAK,CAAC,SAwElF,CAAC;AAEF,eAAO,MAAM,uBAAuB,yBAGjC,qBAAqB,KAAG,KAAK,CAAC,SA4EhC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,yBAAqB,IAW9C,CAAC"}
@@ -3,7 +3,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { noop } from "@vkontakte/vkjs";
5
5
  import { clamp } from "../../helpers/math.js";
6
- import { useCounter } from "../../hooks/useCounter.js";
7
6
  import { useDOM } from "../../lib/dom.js";
8
7
  const clearDisableScrollStyle = (node)=>{
9
8
  Object.assign(node.style, {
@@ -37,28 +36,33 @@ export const useScroll = ()=>React.useContext(ScrollContext);
37
36
  * Управляет блокировкой окна в зависимости от внутреннего счетчика.
38
37
  * Если счетчик больше нуля, требуется заблокировать прокрутку
39
38
  */ function useScrollLockController(enableScrollLock, disableScrollLock) {
40
- const isFirstEffect = React.useRef(true);
41
- const [count, { increment: incrementScrollLockCounter, decrement: decrementScrollLockCounter }] = useCounter(0);
42
- const needLockScroll = count > 0;
43
- React.useEffect(()=>{
44
- if (isFirstEffect.current) {
45
- isFirstEffect.current = false;
46
- return;
47
- }
48
- if (needLockScroll) {
39
+ const countRef = React.useRef(0);
40
+ const updateScrollLock = React.useCallback(()=>{
41
+ if (countRef.current > 0) {
49
42
  enableScrollLock();
50
43
  } else {
51
44
  disableScrollLock();
52
45
  }
53
46
  }, [
54
- needLockScroll,
55
47
  enableScrollLock,
56
48
  disableScrollLock
57
49
  ]);
58
- return {
50
+ const incrementScrollLockCounter = React.useCallback(()=>{
51
+ countRef.current += 1;
52
+ updateScrollLock();
53
+ }, [
54
+ updateScrollLock
55
+ ]);
56
+ const decrementScrollLockCounter = React.useCallback(()=>{
57
+ countRef.current -= 1;
58
+ updateScrollLock();
59
+ }, [
60
+ updateScrollLock
61
+ ]);
62
+ return [
59
63
  incrementScrollLockCounter,
60
64
  decrementScrollLockCounter
61
- };
65
+ ];
62
66
  }
63
67
  export const GlobalScrollController = ({ children })=>{
64
68
  const { window, document } = useDOM();
@@ -114,7 +118,7 @@ export const GlobalScrollController = ({ children })=>{
114
118
  document,
115
119
  window
116
120
  ]);
117
- const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(enableScrollLock, disableScrollLock);
121
+ const [incrementScrollLockCounter, decrementScrollLockCounter] = useScrollLockController(enableScrollLock, disableScrollLock);
118
122
  const scrollController = React.useMemo(()=>({
119
123
  getScroll,
120
124
  scrollTo,
@@ -186,7 +190,7 @@ export const ElementScrollController = ({ elRef, children })=>{
186
190
  }, [
187
191
  elRef
188
192
  ]);
189
- const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(enableScrollLock, disableScrollLock);
193
+ const [incrementScrollLockCounter, decrementScrollLockCounter] = useScrollLockController(enableScrollLock, disableScrollLock);
190
194
  const scrollController = React.useMemo(()=>({
191
195
  getScroll,
192
196
  scrollTo,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useCounter } from '../../hooks/useCounter';\nimport { useDOM } from '../../lib/dom';\nimport type { HasChildren } from '../../types';\n\nconst clearDisableScrollStyle = (node: HTMLElement) => {\n Object.assign(node.style, {\n position: '',\n top: '',\n left: '',\n right: '',\n overscrollBehavior: '',\n overflowY: '',\n overflowX: '',\n });\n};\n\nconst getPageYOffsetWithoutKeyboardHeight = (window: Window) => {\n // Note: здесь расчёт на то, что `clientHeight` равен `window.innerHeight`.\n // Это достигается тем, что тегу `html` задали`height: 100%` и у него нет отступов сверху и снизу. Если есть отступы,\n // то надо задать `box-sizing: border-box`, чтобы они не учитывались.\n const diffOfClientHeightAndViewportHeight =\n window.document.documentElement.clientHeight - window.innerHeight;\n return window.pageYOffset - diffOfClientHeightAndViewportHeight;\n};\n\nexport type GetScrollOptions = {\n compensateKeyboardHeight?: boolean;\n};\n\nexport interface ScrollContextInterface {\n getScroll: (this: void, options?: GetScrollOptions) => { x: number; y: number };\n scrollTo: (this: void, x?: number, y?: number) => void;\n /**\n * Увеличивает счетчик блокировки прокрутки\n */\n incrementScrollLockCounter: (this: void) => void;\n /**\n * Уменьшает счетчик блокировки прокрутки\n */\n decrementScrollLockCounter: (this: void) => void;\n beforeScrollLockFnSetRef?: React.RefObject<Set<() => void>>;\n}\n\nexport const ScrollContext: React.Context<ScrollContextInterface> =\n React.createContext<ScrollContextInterface>({\n getScroll: () => ({ x: 0, y: 0 }),\n scrollTo: noop,\n incrementScrollLockCounter: noop,\n decrementScrollLockCounter: noop,\n });\n\nexport const useScroll = (): ScrollContextInterface => React.useContext(ScrollContext);\n\n/**\n * Управляет блокировкой окна в зависимости от внутреннего счетчика.\n * Если счетчик больше нуля, требуется заблокировать прокрутку\n */\nfunction useScrollLockController(enableScrollLock: () => void, disableScrollLock: () => void) {\n const isFirstEffect = React.useRef(true);\n const [count, { increment: incrementScrollLockCounter, decrement: decrementScrollLockCounter }] =\n useCounter(0);\n\n const needLockScroll = count > 0;\n\n React.useEffect(() => {\n if (isFirstEffect.current) {\n isFirstEffect.current = false;\n return;\n }\n\n if (needLockScroll) {\n enableScrollLock();\n } else {\n disableScrollLock();\n }\n }, [needLockScroll, enableScrollLock, disableScrollLock]);\n\n return {\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n };\n}\n\nexport interface ScrollControllerProps extends HasChildren {\n elRef: React.RefObject<HTMLElement | null>;\n}\n\nexport const GlobalScrollController = ({ children }: ScrollControllerProps): React.ReactNode => {\n const { window, document } = useDOM();\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n (options = { compensateKeyboardHeight: true }) => ({\n x: window!.pageXOffset,\n y: options.compensateKeyboardHeight\n ? getPageYOffsetWithoutKeyboardHeight(window!)\n : window!.pageYOffset,\n }),\n [window],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n // Some iOS versions do not normalize scroll — do it manually.\n window!.scrollTo(\n x ? clamp(x, 0, document!.body.scrollWidth - window!.innerWidth) : 0,\n y ? clamp(y, 0, document!.body.scrollHeight - window!.innerHeight) : 0,\n );\n },\n [document, window],\n );\n\n const enableScrollLock = React.useCallback(() => {\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = window!.pageYOffset;\n const scrollX = window!.pageXOffset;\n const overflowY = window!.innerWidth > document!.documentElement.clientWidth ? 'scroll' : '';\n const overflowX = window!.innerHeight > document!.documentElement.clientHeight ? 'scroll' : '';\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: 'none' });\n Object.assign(document!.body.style, {\n position: 'fixed',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overscrollBehavior: 'none',\n overflowY,\n overflowX,\n });\n }, [document, window]);\n\n const disableScrollLock = React.useCallback(() => {\n const scrollY = document!.body.style.top;\n const scrollX = document!.body.style.left;\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: '' });\n clearDisableScrollStyle(document!.body);\n window!.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [document, window]);\n\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef: beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\nexport const ElementScrollController = ({\n elRef,\n children,\n}: ScrollControllerProps): React.ReactNode => {\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n () => ({\n x: elRef.current?.scrollLeft ?? 0,\n y: elRef.current?.scrollTop ?? 0,\n }),\n [elRef],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n const el = elRef.current;\n // Some iOS versions do not normalize scroll — do it manually.\n el?.scrollTo(\n x ? clamp(x, 0, el.scrollWidth - el.clientWidth) : 0,\n y ? clamp(y, 0, el.scrollHeight - el.clientHeight) : 0,\n );\n },\n [elRef],\n );\n\n const enableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = el.scrollTop;\n const scrollX = el.scrollLeft;\n const overflowY = el.scrollWidth > el.clientWidth ? 'scroll' : '';\n const overflowX = el.scrollHeight > el.clientHeight ? 'scroll' : '';\n\n Object.assign(el.style, {\n position: 'absolute',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overflowY,\n overflowX,\n });\n }, [elRef]);\n\n const disableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n\n const scrollY = el.style.top;\n const scrollX = el.style.left;\n\n clearDisableScrollStyle(el);\n el.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [elRef]);\n\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\n/**\n * Блокирует прокрутку окна\n *\n * @param enabled - если false то не будет блокировать\n */\nexport const useScrollLock = (enabled = true): void => {\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScroll();\n\n React.useEffect(() => {\n if (enabled) {\n incrementScrollLockCounter();\n return decrementScrollLockCounter;\n }\n\n return noop;\n }, [enabled, incrementScrollLockCounter, decrementScrollLockCounter]);\n};\n"],"names":["React","noop","clamp","useCounter","useDOM","clearDisableScrollStyle","node","Object","assign","style","position","top","left","right","overscrollBehavior","overflowY","overflowX","getPageYOffsetWithoutKeyboardHeight","window","diffOfClientHeightAndViewportHeight","document","documentElement","clientHeight","innerHeight","pageYOffset","ScrollContext","createContext","getScroll","x","y","scrollTo","incrementScrollLockCounter","decrementScrollLockCounter","useScroll","useContext","useScrollLockController","enableScrollLock","disableScrollLock","isFirstEffect","useRef","count","increment","decrement","needLockScroll","useEffect","current","GlobalScrollController","children","beforeScrollLockFnSetRef","Set","useCallback","options","compensateKeyboardHeight","pageXOffset","body","scrollWidth","innerWidth","scrollHeight","forEach","fn","scrollY","scrollX","clientWidth","parseInt","scrollController","useMemo","Provider","value","ElementScrollController","elRef","scrollLeft","scrollTop","el","useScrollLock","enabled"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useDOM } from '../../lib/dom';\nimport type { HasChildren } from '../../types';\n\nconst clearDisableScrollStyle = (node: HTMLElement) => {\n Object.assign(node.style, {\n position: '',\n top: '',\n left: '',\n right: '',\n overscrollBehavior: '',\n overflowY: '',\n overflowX: '',\n });\n};\n\nconst getPageYOffsetWithoutKeyboardHeight = (window: Window) => {\n // Note: здесь расчёт на то, что `clientHeight` равен `window.innerHeight`.\n // Это достигается тем, что тегу `html` задали`height: 100%` и у него нет отступов сверху и снизу. Если есть отступы,\n // то надо задать `box-sizing: border-box`, чтобы они не учитывались.\n const diffOfClientHeightAndViewportHeight =\n window.document.documentElement.clientHeight - window.innerHeight;\n return window.pageYOffset - diffOfClientHeightAndViewportHeight;\n};\n\nexport type GetScrollOptions = {\n compensateKeyboardHeight?: boolean;\n};\n\nexport interface ScrollContextInterface {\n getScroll: (this: void, options?: GetScrollOptions) => { x: number; y: number };\n scrollTo: (this: void, x?: number, y?: number) => void;\n /**\n * Увеличивает счетчик блокировки прокрутки\n */\n incrementScrollLockCounter: (this: void) => void;\n /**\n * Уменьшает счетчик блокировки прокрутки\n */\n decrementScrollLockCounter: (this: void) => void;\n beforeScrollLockFnSetRef?: React.RefObject<Set<() => void>>;\n}\n\nexport const ScrollContext: React.Context<ScrollContextInterface> =\n React.createContext<ScrollContextInterface>({\n getScroll: () => ({ x: 0, y: 0 }),\n scrollTo: noop,\n incrementScrollLockCounter: noop,\n decrementScrollLockCounter: noop,\n });\n\nexport const useScroll = (): ScrollContextInterface => React.useContext(ScrollContext);\n\n/**\n * Управляет блокировкой окна в зависимости от внутреннего счетчика.\n * Если счетчик больше нуля, требуется заблокировать прокрутку\n */\nfunction useScrollLockController(enableScrollLock: () => void, disableScrollLock: () => void) {\n const countRef = React.useRef(0);\n\n const updateScrollLock = React.useCallback(() => {\n if (countRef.current > 0) {\n enableScrollLock();\n } else {\n disableScrollLock();\n }\n }, [enableScrollLock, disableScrollLock]);\n\n const incrementScrollLockCounter = React.useCallback(() => {\n countRef.current += 1;\n updateScrollLock();\n }, [updateScrollLock]);\n\n const decrementScrollLockCounter = React.useCallback(() => {\n countRef.current -= 1;\n updateScrollLock();\n }, [updateScrollLock]);\n\n return [incrementScrollLockCounter, decrementScrollLockCounter];\n}\n\nexport interface ScrollControllerProps extends HasChildren {\n elRef: React.RefObject<HTMLElement | null>;\n}\n\nexport const GlobalScrollController = ({ children }: ScrollControllerProps): React.ReactNode => {\n const { window, document } = useDOM();\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n (options = { compensateKeyboardHeight: true }) => ({\n x: window!.pageXOffset,\n y: options.compensateKeyboardHeight\n ? getPageYOffsetWithoutKeyboardHeight(window!)\n : window!.pageYOffset,\n }),\n [window],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n // Some iOS versions do not normalize scroll — do it manually.\n window!.scrollTo(\n x ? clamp(x, 0, document!.body.scrollWidth - window!.innerWidth) : 0,\n y ? clamp(y, 0, document!.body.scrollHeight - window!.innerHeight) : 0,\n );\n },\n [document, window],\n );\n\n const enableScrollLock = React.useCallback(() => {\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = window!.pageYOffset;\n const scrollX = window!.pageXOffset;\n const overflowY = window!.innerWidth > document!.documentElement.clientWidth ? 'scroll' : '';\n const overflowX = window!.innerHeight > document!.documentElement.clientHeight ? 'scroll' : '';\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: 'none' });\n Object.assign(document!.body.style, {\n position: 'fixed',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overscrollBehavior: 'none',\n overflowY,\n overflowX,\n });\n }, [document, window]);\n\n const disableScrollLock = React.useCallback(() => {\n const scrollY = document!.body.style.top;\n const scrollX = document!.body.style.left;\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: '' });\n clearDisableScrollStyle(document!.body);\n window!.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [document, window]);\n\n const [incrementScrollLockCounter, decrementScrollLockCounter] = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef: beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\nexport const ElementScrollController = ({\n elRef,\n children,\n}: ScrollControllerProps): React.ReactNode => {\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n () => ({\n x: elRef.current?.scrollLeft ?? 0,\n y: elRef.current?.scrollTop ?? 0,\n }),\n [elRef],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n const el = elRef.current;\n // Some iOS versions do not normalize scroll — do it manually.\n el?.scrollTo(\n x ? clamp(x, 0, el.scrollWidth - el.clientWidth) : 0,\n y ? clamp(y, 0, el.scrollHeight - el.clientHeight) : 0,\n );\n },\n [elRef],\n );\n\n const enableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = el.scrollTop;\n const scrollX = el.scrollLeft;\n const overflowY = el.scrollWidth > el.clientWidth ? 'scroll' : '';\n const overflowX = el.scrollHeight > el.clientHeight ? 'scroll' : '';\n\n Object.assign(el.style, {\n position: 'absolute',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overflowY,\n overflowX,\n });\n }, [elRef]);\n\n const disableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n\n const scrollY = el.style.top;\n const scrollX = el.style.left;\n\n clearDisableScrollStyle(el);\n el.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [elRef]);\n\n const [incrementScrollLockCounter, decrementScrollLockCounter] = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\n/**\n * Блокирует прокрутку окна\n *\n * @param enabled - если false то не будет блокировать\n */\nexport const useScrollLock = (enabled = true): void => {\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScroll();\n\n React.useEffect(() => {\n if (enabled) {\n incrementScrollLockCounter();\n return decrementScrollLockCounter;\n }\n\n return noop;\n }, [enabled, incrementScrollLockCounter, decrementScrollLockCounter]);\n};\n"],"names":["React","noop","clamp","useDOM","clearDisableScrollStyle","node","Object","assign","style","position","top","left","right","overscrollBehavior","overflowY","overflowX","getPageYOffsetWithoutKeyboardHeight","window","diffOfClientHeightAndViewportHeight","document","documentElement","clientHeight","innerHeight","pageYOffset","ScrollContext","createContext","getScroll","x","y","scrollTo","incrementScrollLockCounter","decrementScrollLockCounter","useScroll","useContext","useScrollLockController","enableScrollLock","disableScrollLock","countRef","useRef","updateScrollLock","useCallback","current","GlobalScrollController","children","beforeScrollLockFnSetRef","Set","options","compensateKeyboardHeight","pageXOffset","body","scrollWidth","innerWidth","scrollHeight","forEach","fn","scrollY","scrollX","clientWidth","parseInt","scrollController","useMemo","Provider","value","ElementScrollController","elRef","scrollLeft","scrollTop","el","useScrollLock","enabled","useEffect"],"mappings":"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"}