@vkontakte/vkui 8.3.0 → 8.3.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.
- package/dist/components/CalendarTime/ComboBox.d.ts.map +1 -1
- package/dist/components/CalendarTime/ComboBox.js +1 -0
- package/dist/components/CalendarTime/ComboBox.js.map +1 -1
- package/dist/components/View/ViewInfinite.js +27 -27
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/CalendarTime/ComboBox.js +1 -0
- package/dist/cssm/components/CalendarTime/ComboBox.js.map +1 -1
- package/dist/cssm/components/FormField/FormField.module.css +5 -2
- package/dist/cssm/components/View/ViewInfinite.js +27 -27
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
- package/src/components/CalendarTime/ComboBox.tsx +1 -0
- package/src/components/FormField/FormField.module.css +5 -2
- package/src/components/FormField/FormField.module.css.d.ts.map +1 -1
- package/src/components/View/ViewInfinite.tsx +8 -8
|
@@ -100,6 +100,7 @@ export function ComboBox({ getRootRef, onBlur, onFocus, after, labels = [], defa
|
|
|
100
100
|
autoUpdateOnTargetResize: true,
|
|
101
101
|
flipMiddlewareFallbackAxisSideDirection: "none",
|
|
102
102
|
offsetByMainAxis: 0,
|
|
103
|
+
usePortal: false,
|
|
103
104
|
children: /*#__PURE__*/ _jsx(CustomScrollView, {
|
|
104
105
|
tabIndex: -1,
|
|
105
106
|
className: styles.customScroll,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CalendarTime/ComboBox.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { type Placement } from '@vkontakte/vkui-floating-ui/core';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { CustomScrollView } from '../CustomScrollView/CustomScrollView';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { Input, type InputProps } from '../Input/Input';\nimport { Popper } from '../Popper/Popper';\nimport styles from './CalendarTime.module.css';\n\ntype Label = {\n /**\n * Значение.\n */\n value: string;\n /**\n * Лейбл.\n */\n label: string;\n /**\n * Disabled состояние.\n */\n disabled?: boolean;\n};\n\ntype OptionProps = {\n /**\n * Выбранное значение.\n */\n selectedValue: string | number | readonly string[] | undefined;\n /**\n * Опция.\n */\n option: Label;\n /**\n * Нажатие на элемент.\n */\n onClickOption?: ((value: string) => void) | undefined;\n};\n\nfunction getScrollParent(node: Node | null): HTMLElement | null {\n if (!(node instanceof HTMLElement)) {\n return null;\n }\n\n if (node.scrollHeight > node.clientHeight) {\n return node;\n } else {\n return getScrollParent(node.parentNode);\n }\n}\n\nfunction Option({ option, onClickOption, selectedValue }: OptionProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const selected = selectedValue === option.value;\n\n React.useEffect(() => {\n if (!selected) {\n return;\n }\n\n const element = ref.current;\n const scrollElement = getScrollParent(ref.current);\n\n if (!element || !scrollElement) {\n return;\n }\n\n scrollElement.scrollTo({\n top: element.offsetTop - scrollElement.offsetHeight / 2 + element.offsetHeight / 2,\n });\n }, [selected]);\n\n return (\n <CustomSelectOption\n getRootRef={ref}\n key={option.value}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n onClickOption?.(option.value);\n }}\n selected={selected}\n disabled={option.disabled}\n textNoWrap\n >\n {option.label}\n </CustomSelectOption>\n );\n}\n\ntype ComboBoxProps = InputProps & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n readonly labels?: readonly Label[] | undefined;\n\n /**\n * Нажатие на элемент.\n */\n onClickOption?: ((value: string) => void) | undefined;\n};\n\nexport function ComboBox({\n getRootRef,\n onBlur,\n onFocus,\n after,\n labels = [],\n defaultValue,\n slotProps,\n onClickOption,\n ...restProps\n}: ComboBoxProps) {\n const ref = useExternRef(getRootRef);\n const inputRef = useExternRef(slotProps?.input?.getRootRef);\n\n const [focus, setFocus, setBlur] = useBooleanState(false);\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>('bottom');\n\n const labelsElements = focus\n ? labels.map((option) => {\n return (\n <Option\n key={option.value}\n onClickOption={onClickOption}\n selectedValue={restProps.value}\n option={option}\n />\n );\n })\n : undefined;\n\n /**\n * При управлении стрелками необходима правильная очередность элементов в списке.\n */\n if (popperPlacement.includes('top')) {\n labelsElements?.reverse();\n }\n\n return (\n <>\n <Input\n getRootRef={ref}\n className={\n focus ? (popperPlacement.includes('top') ? styles.inputPopUp : styles.inputPopDown) : ''\n }\n type=\"text\"\n onFocus={callMultiple(setFocus, onFocus)}\n onBlur={callMultiple(setBlur, onBlur)}\n onClick={() => inputRef.current?.focus()}\n after={after || (labels && <DropdownIcon opened={focus} />)}\n slotProps={{\n ...slotProps,\n input: {\n ...slotProps?.input,\n getRootRef: inputRef,\n },\n }}\n {...restProps}\n />\n\n {focus && labels && (\n <Popper\n targetRef={ref}\n placement={popperPlacement}\n onPlacementChange={setPopperPlacement}\n className={classNames(\n styles.popper,\n popperPlacement.includes('top') ? styles.popperTop : styles.popperBottom,\n )}\n sameWidth\n autoUpdateOnTargetResize\n flipMiddlewareFallbackAxisSideDirection=\"none\"\n offsetByMainAxis={0}\n >\n <CustomScrollView tabIndex={-1} className={styles.customScroll}>\n {labelsElements}\n </CustomScrollView>\n </Popper>\n )}\n </>\n );\n}\n"],"names":["React","classNames","useBooleanState","useExternRef","callMultiple","CustomScrollView","CustomSelectOption","DropdownIcon","Input","Popper","styles","getScrollParent","node","HTMLElement","scrollHeight","clientHeight","parentNode","Option","option","onClickOption","selectedValue","ref","useRef","selected","value","useEffect","element","current","scrollElement","scrollTo","top","offsetTop","offsetHeight","getRootRef","onMouseDown","event","preventDefault","onClick","disabled","textNoWrap","label","ComboBox","onBlur","onFocus","after","labels","defaultValue","slotProps","restProps","inputRef","input","focus","setFocus","setBlur","popperPlacement","setPopperPlacement","useState","labelsElements","map","undefined","includes","reverse","className","inputPopUp","inputPopDown","type","opened","targetRef","placement","onPlacementChange","popper","popperTop","popperBottom","sameWidth","autoUpdateOnTargetResize","flipMiddlewareFallbackAxisSideDirection","offsetByMainAxis","tabIndex","customScroll"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,eAAe,QAAQ,iCAA8B;AAC9D,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,gBAAgB,QAAQ,0CAAuC;AACxE,SAASC,kBAAkB,QAAQ,8CAA2C;AAC9E,SAASC,YAAY,QAAQ,kCAA+B;AAC5D,SAASC,KAAK,QAAyB,oBAAiB;AACxD,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,OAAOC,YAAY,4BAA4B;AAgC/C,SAASC,gBAAgBC,IAAiB;IACxC,IAAI,CAAEA,CAAAA,gBAAgBC,WAAU,GAAI;QAClC,OAAO;IACT;IAEA,IAAID,KAAKE,YAAY,GAAGF,KAAKG,YAAY,EAAE;QACzC,OAAOH;IACT,OAAO;QACL,OAAOD,gBAAgBC,KAAKI,UAAU;IACxC;AACF;AAEA,SAASC,OAAO,EAAEC,MAAM,EAAEC,aAAa,EAAEC,aAAa,EAAe;IACnE,MAAMC,MAAMrB,MAAMsB,MAAM,CAAiB;IACzC,MAAMC,WAAWH,kBAAkBF,OAAOM,KAAK;IAE/CxB,MAAMyB,SAAS,CAAC;QACd,IAAI,CAACF,UAAU;YACb;QACF;QAEA,MAAMG,UAAUL,IAAIM,OAAO;QAC3B,MAAMC,gBAAgBjB,gBAAgBU,IAAIM,OAAO;QAEjD,IAAI,CAACD,WAAW,CAACE,eAAe;YAC9B;QACF;QAEAA,cAAcC,QAAQ,CAAC;YACrBC,KAAKJ,QAAQK,SAAS,GAAGH,cAAcI,YAAY,GAAG,IAAIN,QAAQM,YAAY,GAAG;QACnF;IACF,GAAG;QAACT;KAAS;IAEb,qBACE,KAACjB;QACC2B,YAAYZ;QAEZa,aAAa,CAACC;YACZA,MAAMC,cAAc;QACtB;QACAC,SAAS;YACPlB,gBAAgBD,OAAOM,KAAK;QAC9B;QACAD,UAAUA;QACVe,UAAUpB,OAAOoB,QAAQ;QACzBC,UAAU;kBAETrB,OAAOsB,KAAK;OAXRtB,OAAOM,KAAK;AAcvB;AAYA,OAAO,SAASiB,SAAS,EACvBR,UAAU,EACVS,MAAM,EACNC,OAAO,EACPC,KAAK,EACLC,SAAS,EAAE,EACXC,YAAY,EACZC,SAAS,EACT5B,aAAa,EACb,GAAG6B,WACW;IACd,MAAM3B,MAAMlB,aAAa8B;IACzB,MAAMgB,WAAW9C,aAAa4C,WAAWG,OAAOjB;IAEhD,MAAM,CAACkB,OAAOC,UAAUC,QAAQ,GAAGnD,gBAAgB;IAEnD,MAAM,CAACoD,iBAAiBC,mBAAmB,GAAGvD,MAAMwD,QAAQ,CAAY;IAExE,MAAMC,iBAAiBN,QACnBN,OAAOa,GAAG,CAAC,CAACxC;QACV,qBACE,KAACD;YAECE,eAAeA;YACfC,eAAe4B,UAAUxB,KAAK;YAC9BN,QAAQA;WAHHA,OAAOM,KAAK;IAMvB,KACAmC;IAEJ;;GAEC,GACD,IAAIL,gBAAgBM,QAAQ,CAAC,QAAQ;QACnCH,gBAAgBI;IAClB;IAEA,qBACE;;0BACE,KAACrD;gBACCyB,YAAYZ;gBACZyC,WACEX,QAASG,gBAAgBM,QAAQ,CAAC,SAASlD,OAAOqD,UAAU,GAAGrD,OAAOsD,YAAY,GAAI;gBAExFC,MAAK;gBACLtB,SAASvC,aAAagD,UAAUT;gBAChCD,QAAQtC,aAAaiD,SAASX;gBAC9BL,SAAS,IAAMY,SAAStB,OAAO,EAAEwB;gBACjCP,OAAOA,SAAUC,wBAAU,KAACtC;oBAAa2D,QAAQf;;gBACjDJ,WAAW;oBACT,GAAGA,SAAS;oBACZG,OAAO;wBACL,GAAGH,WAAWG,KAAK;wBACnBjB,YAAYgB;oBACd;gBACF;gBACC,GAAGD,SAAS;;YAGdG,SAASN,wBACR,KAACpC;gBACC0D,WAAW9C;gBACX+C,WAAWd;gBACXe,mBAAmBd;gBACnBO,WAAW7D,WACTS,OAAO4D,MAAM,EACbhB,gBAAgBM,QAAQ,CAAC,SAASlD,OAAO6D,SAAS,GAAG7D,OAAO8D,YAAY;gBAE1EC,SAAS;gBACTC,wBAAwB;gBACxBC,yCAAwC;gBACxCC,kBAAkB;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CalendarTime/ComboBox.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { type Placement } from '@vkontakte/vkui-floating-ui/core';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { CustomScrollView } from '../CustomScrollView/CustomScrollView';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { Input, type InputProps } from '../Input/Input';\nimport { Popper } from '../Popper/Popper';\nimport styles from './CalendarTime.module.css';\n\ntype Label = {\n /**\n * Значение.\n */\n value: string;\n /**\n * Лейбл.\n */\n label: string;\n /**\n * Disabled состояние.\n */\n disabled?: boolean;\n};\n\ntype OptionProps = {\n /**\n * Выбранное значение.\n */\n selectedValue: string | number | readonly string[] | undefined;\n /**\n * Опция.\n */\n option: Label;\n /**\n * Нажатие на элемент.\n */\n onClickOption?: ((value: string) => void) | undefined;\n};\n\nfunction getScrollParent(node: Node | null): HTMLElement | null {\n if (!(node instanceof HTMLElement)) {\n return null;\n }\n\n if (node.scrollHeight > node.clientHeight) {\n return node;\n } else {\n return getScrollParent(node.parentNode);\n }\n}\n\nfunction Option({ option, onClickOption, selectedValue }: OptionProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const selected = selectedValue === option.value;\n\n React.useEffect(() => {\n if (!selected) {\n return;\n }\n\n const element = ref.current;\n const scrollElement = getScrollParent(ref.current);\n\n if (!element || !scrollElement) {\n return;\n }\n\n scrollElement.scrollTo({\n top: element.offsetTop - scrollElement.offsetHeight / 2 + element.offsetHeight / 2,\n });\n }, [selected]);\n\n return (\n <CustomSelectOption\n getRootRef={ref}\n key={option.value}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n onClickOption?.(option.value);\n }}\n selected={selected}\n disabled={option.disabled}\n textNoWrap\n >\n {option.label}\n </CustomSelectOption>\n );\n}\n\ntype ComboBoxProps = InputProps & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n readonly labels?: readonly Label[] | undefined;\n\n /**\n * Нажатие на элемент.\n */\n onClickOption?: ((value: string) => void) | undefined;\n};\n\nexport function ComboBox({\n getRootRef,\n onBlur,\n onFocus,\n after,\n labels = [],\n defaultValue,\n slotProps,\n onClickOption,\n ...restProps\n}: ComboBoxProps) {\n const ref = useExternRef(getRootRef);\n const inputRef = useExternRef(slotProps?.input?.getRootRef);\n\n const [focus, setFocus, setBlur] = useBooleanState(false);\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>('bottom');\n\n const labelsElements = focus\n ? labels.map((option) => {\n return (\n <Option\n key={option.value}\n onClickOption={onClickOption}\n selectedValue={restProps.value}\n option={option}\n />\n );\n })\n : undefined;\n\n /**\n * При управлении стрелками необходима правильная очередность элементов в списке.\n */\n if (popperPlacement.includes('top')) {\n labelsElements?.reverse();\n }\n\n return (\n <>\n <Input\n getRootRef={ref}\n className={\n focus ? (popperPlacement.includes('top') ? styles.inputPopUp : styles.inputPopDown) : ''\n }\n type=\"text\"\n onFocus={callMultiple(setFocus, onFocus)}\n onBlur={callMultiple(setBlur, onBlur)}\n onClick={() => inputRef.current?.focus()}\n after={after || (labels && <DropdownIcon opened={focus} />)}\n slotProps={{\n ...slotProps,\n input: {\n ...slotProps?.input,\n getRootRef: inputRef,\n },\n }}\n {...restProps}\n />\n\n {focus && labels && (\n <Popper\n targetRef={ref}\n placement={popperPlacement}\n onPlacementChange={setPopperPlacement}\n className={classNames(\n styles.popper,\n popperPlacement.includes('top') ? styles.popperTop : styles.popperBottom,\n )}\n sameWidth\n autoUpdateOnTargetResize\n flipMiddlewareFallbackAxisSideDirection=\"none\"\n offsetByMainAxis={0}\n usePortal={false}\n >\n <CustomScrollView tabIndex={-1} className={styles.customScroll}>\n {labelsElements}\n </CustomScrollView>\n </Popper>\n )}\n </>\n );\n}\n"],"names":["React","classNames","useBooleanState","useExternRef","callMultiple","CustomScrollView","CustomSelectOption","DropdownIcon","Input","Popper","styles","getScrollParent","node","HTMLElement","scrollHeight","clientHeight","parentNode","Option","option","onClickOption","selectedValue","ref","useRef","selected","value","useEffect","element","current","scrollElement","scrollTo","top","offsetTop","offsetHeight","getRootRef","onMouseDown","event","preventDefault","onClick","disabled","textNoWrap","label","ComboBox","onBlur","onFocus","after","labels","defaultValue","slotProps","restProps","inputRef","input","focus","setFocus","setBlur","popperPlacement","setPopperPlacement","useState","labelsElements","map","undefined","includes","reverse","className","inputPopUp","inputPopDown","type","opened","targetRef","placement","onPlacementChange","popper","popperTop","popperBottom","sameWidth","autoUpdateOnTargetResize","flipMiddlewareFallbackAxisSideDirection","offsetByMainAxis","usePortal","tabIndex","customScroll"],"mappings":"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"}
|
|
@@ -182,11 +182,14 @@
|
|
|
182
182
|
/* [end] */
|
|
183
183
|
|
|
184
184
|
.disabled {
|
|
185
|
-
|
|
186
|
-
cursor: default;
|
|
185
|
+
cursor: not-allowed;
|
|
187
186
|
opacity: var(--vkui--opacity_disable);
|
|
188
187
|
}
|
|
189
188
|
|
|
189
|
+
.disabled > .scrollContainer {
|
|
190
|
+
pointer-events: none;
|
|
191
|
+
}
|
|
192
|
+
|
|
190
193
|
/**
|
|
191
194
|
* CMP:
|
|
192
195
|
* NativeSelect
|
|
@@ -90,17 +90,17 @@ export let scrollsCache = new Map();
|
|
|
90
90
|
if (this.shouldDisableTransitionMotion()) {
|
|
91
91
|
this.flushTransition(prevProps.activePanel, isBack);
|
|
92
92
|
} else {
|
|
93
|
-
this.setState({
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
93
|
+
this.setState(()=>({
|
|
94
|
+
visiblePanels: [
|
|
95
|
+
prevProps.activePanel,
|
|
96
|
+
this.props.activePanel
|
|
97
|
+
],
|
|
98
|
+
prevPanel: prevProps.activePanel,
|
|
99
|
+
nextPanel: this.props.activePanel,
|
|
100
|
+
activePanel: null,
|
|
101
|
+
animated: true,
|
|
102
|
+
isBack
|
|
103
|
+
}));
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
// Закончилась анимация свайпа назад
|
|
@@ -156,16 +156,16 @@ export let scrollsCache = new Map();
|
|
|
156
156
|
}
|
|
157
157
|
// Закончился Safari свайп
|
|
158
158
|
if (prevProps.activePanel !== this.props.activePanel && this.state.browserSwipe) {
|
|
159
|
-
this.setState({
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
159
|
+
this.setState(()=>({
|
|
160
|
+
browserSwipe: false,
|
|
161
|
+
nextPanel: null,
|
|
162
|
+
prevPanel: null,
|
|
163
|
+
animated: false,
|
|
164
|
+
visiblePanels: [
|
|
165
|
+
this.props.activePanel
|
|
166
|
+
],
|
|
167
|
+
activePanel: this.props.activePanel
|
|
168
|
+
}));
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
shouldDisableTransitionMotion() {
|
|
@@ -317,12 +317,12 @@ export let scrollsCache = new Map();
|
|
|
317
317
|
this.props.scroll?.getScroll().y
|
|
318
318
|
]);
|
|
319
319
|
}
|
|
320
|
-
this.setState({
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
320
|
+
this.setState((prevState)=>({
|
|
321
|
+
swipingBack: true,
|
|
322
|
+
swipeBackStartX: event.startX,
|
|
323
|
+
swipeBackPrevPanel: prevState.activePanel,
|
|
324
|
+
swipeBackNextPanel: this.props.history?.slice(-2)[0] ?? null
|
|
325
|
+
}));
|
|
326
326
|
}
|
|
327
327
|
if (this.state.swipingBack) {
|
|
328
328
|
if (event.shiftX < 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/View/ViewInfinite.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { millisecondsInSecond } from '../../lib/date';\nimport { canUseDOM, type DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasPlatform, HTMLAttributesWithRootRef } from '../../types';\nimport { ScrollContext, type ScrollContextInterface } from '../AppRoot/ScrollContext';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n} from '../ConfigProvider/ConfigProviderContext';\nimport { NavViewIdContext } from '../NavIdContext/NavIdContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { SplitColContext, type SplitColContextProps } from '../SplitCol/SplitColContext';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport {\n getSwipeBackPredicates,\n hasHorizontalScrollableElementWithScrolledToLeft,\n swipeBackExcluded,\n} from './utils';\nimport styles from './View.module.css';\n\nconst warn = warnOnce('ViewInfinite');\n\ntype TransitionEventHandler = (e?: TransitionEvent) => void;\n\nexport let scrollsCache = new Map<string, Map<string, Array<number | undefined>>>();\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type TransitionParams = { from: string | null; to: string | null };\n\nexport interface ViewInfiniteProps\n extends HTMLAttributesWithRootRef<HTMLElement>,\n HasPlatform,\n NavIdProps {\n /**\n * `id` активной панели.\n */\n activePanel: string;\n /**\n * Обработчик, который вызывается при завершении анимации смены активной панели.\n */\n onTransition?: ((params: TransitionParams & { isBack: boolean }) => void) | undefined;\n /**\n * Обработчик свайпа назад.\n */\n onSwipeBack?: (() => void) | undefined;\n /**\n * Обработчик начала анимации свайпа назад.\n */\n onSwipeBackStart?: ((activePanel: string | null) => void | 'prevent') | undefined;\n /**\n * Обработчик завершения анимации отмененного пользователем свайпа.\n */\n onSwipeBackCancel?: (() => void) | undefined;\n /**\n * Массив из id панелей в порядке открытия.\n */\n history?: string[] | undefined;\n /**\n * Функция проверки перехода назад.\n */\n isBackCheck?: ((params: TransitionParams) => boolean) | undefined;\n /**\n * @ignore\n */\n splitCol?: SplitColContextProps | undefined;\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface | undefined;\n /**\n * @ignore\n */\n scroll?: ScrollContextInterface | undefined;\n}\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport interface ViewInfiniteState {\n animated: boolean;\n\n visiblePanels: Array<string | null>;\n activePanel: string | null;\n isBack?: boolean | undefined;\n prevPanel: string | null;\n nextPanel: string | null;\n\n swipingBack?: boolean | undefined;\n swipeBackStartX: number;\n swipeBackShift: number;\n swipeBackNextPanel: string | null;\n swipeBackPrevPanel: string | null;\n swipeBackResult: 'success' | 'fail' | null;\n\n browserSwipe: boolean;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nclass ViewInfiniteComponent extends React.Component<\n ViewInfiniteProps & DOMProps,\n ViewInfiniteState\n> {\n constructor(props: ViewInfiniteProps) {\n super(props);\n\n this.state = {\n animated: false,\n\n visiblePanels: [props.activePanel],\n activePanel: props.activePanel,\n isBack: undefined,\n prevPanel: null,\n nextPanel: null,\n\n swipingBack: undefined,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n swipeBackNextPanel: null,\n swipeBackPrevPanel: null,\n swipeBackResult: null,\n\n browserSwipe: false,\n };\n }\n\n static defaultProps: Partial<ViewInfiniteProps> = {\n history: [],\n };\n\n private swipeBackPrevented = false;\n private readonly scrolls: Map<string, Array<number | undefined>> =\n scrollsCache.get(getNavId(this.props, warn) as string) || new Map();\n private transitionFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n private readonly animationFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\n get document() {\n return this.props.document;\n }\n\n get window() {\n return this.props.window;\n }\n\n get panels() {\n return React.Children.toArray(this.props.children) as Array<React.ReactElement<NavIdProps>>;\n }\n\n panelNodes: { [id: string]: HTMLDivElement | null } = {};\n\n componentWillUnmount() {\n const id = getNavId(this.props);\n if (id) {\n scrollsCache.set(id, this.scrolls);\n }\n if (this.animationFinishTimeout) {\n clearTimeout(this.animationFinishTimeout);\n }\n }\n\n componentDidUpdate(prevProps: ViewInfiniteProps, prevState: ViewInfiniteState) {\n // Нужен переход\n if (\n prevProps.activePanel !== this.props.activePanel &&\n !prevState.swipingBack &&\n !prevState.browserSwipe\n ) {\n let isBack = false;\n\n if (this.props.isBackCheck) {\n isBack = this.props.isBackCheck({\n from: prevProps.activePanel,\n to: this.props.activePanel,\n });\n } else {\n const firstLayerId = this.panels\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevProps.activePanel || id === this.props.activePanel);\n isBack = firstLayerId === this.props.activePanel;\n }\n\n this.blurActiveElement();\n\n const prevScrolls = this.scrolls.get(prevProps.activePanel) || [];\n this.scrolls.set(prevProps.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll({ compensateKeyboardHeight: false }).y,\n ]);\n\n if (this.shouldDisableTransitionMotion()) {\n this.flushTransition(prevProps.activePanel, isBack);\n } else {\n this.setState({\n visiblePanels: [prevProps.activePanel, this.props.activePanel],\n prevPanel: prevProps.activePanel,\n nextPanel: this.props.activePanel,\n activePanel: null,\n animated: true,\n isBack,\n });\n }\n }\n\n // Закончилась анимация свайпа назад\n if (prevProps.activePanel !== this.props.activePanel && prevState.swipingBack) {\n const nextPanel = this.state.swipeBackNextPanel;\n const prevPanel = this.state.swipeBackPrevPanel;\n let scrollPosition: undefined | number = undefined;\n\n if (prevPanel !== null) {\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n this.scrolls.set(prevPanel, prevPanelScrolls);\n }\n if (nextPanel !== null) {\n const newPanelScrolls = [...(this.scrolls.get(nextPanel) || [])];\n scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(nextPanel, newPanelScrolls);\n }\n\n this.setState(\n {\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n activePanel: nextPanel,\n visiblePanels: [nextPanel],\n },\n () => {\n this.props.scroll?.scrollTo(0, scrollPosition);\n prevProps.onTransition &&\n prevProps.onTransition({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n },\n );\n }\n\n // Началась анимация завершения свайпа назад.\n if (!prevState.swipeBackResult && this.state.swipeBackResult) {\n this.waitTransitionFinish(\n this.pickPanel(this.state.swipeBackNextPanel),\n this.swipingBackTransitionEndHandler,\n );\n }\n\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n if (\n prevState.swipeBackResult === 'fail' &&\n !this.state.swipeBackResult &&\n this.state.activePanel !== null\n ) {\n const newPanelScrolls = [...(this.scrolls.get(this.state.activePanel) || [])];\n const scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(this.state.activePanel, newPanelScrolls);\n\n this.props.scroll?.scrollTo(0, scrollPosition);\n }\n\n // Закончился Safari свайп\n if (prevProps.activePanel !== this.props.activePanel && this.state.browserSwipe) {\n this.setState({\n browserSwipe: false,\n nextPanel: null,\n prevPanel: null,\n animated: false,\n visiblePanels: [this.props.activePanel],\n activePanel: this.props.activePanel,\n });\n }\n }\n\n shouldDisableTransitionMotion(): boolean {\n return (\n this.props.configProvider?.transitionMotionEnabled === false ||\n !this.props.splitCol?.animate ||\n this.props.platform === 'vkcom'\n );\n }\n\n private transitionDisposer = noop;\n\n private disposeTransition() {\n this.transitionDisposer();\n this.transitionDisposer = noop;\n }\n\n waitTransitionFinish(\n elem: HTMLElement | null | undefined,\n eventHandler: TransitionEventHandler,\n ): void {\n if (this.shouldDisableTransitionMotion()) {\n this.disposeTransition();\n this.transitionFinishTimeout = setTimeout(eventHandler);\n } else if (elem) {\n this.disposeTransition();\n elem.addEventListener('transitionend', eventHandler);\n this.transitionDisposer = () => {\n elem.removeEventListener('transitionend', eventHandler);\n };\n } else {\n if (this.transitionFinishTimeout) {\n clearTimeout(this.transitionFinishTimeout);\n }\n this.transitionFinishTimeout = setTimeout(\n eventHandler,\n this.props.platform === 'android' || this.props.platform === 'vkcom' ? 300 : 600,\n );\n }\n }\n\n blurActiveElement(): void {\n if (typeof this.window !== 'undefined' && this.document?.activeElement) {\n (this.document.activeElement as HTMLElement).blur();\n }\n }\n\n pickPanel(id: string | null) {\n if (id === null) {\n return undefined;\n }\n return this.panelNodes[id];\n }\n\n flushTransition(prevPanel: string, isBack: boolean) {\n const activePanel = this.props.activePanel;\n\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n const newPanelScrolls = [...(this.scrolls.get(activePanel) || [])];\n const scrollPosition = isBack ? newPanelScrolls.pop() : 0;\n if (isBack) {\n this.scrolls.set(prevPanel, prevPanelScrolls);\n this.scrolls.set(activePanel, newPanelScrolls);\n }\n\n this.setState(\n {\n prevPanel: null,\n nextPanel: null,\n visiblePanels: [activePanel],\n activePanel: activePanel,\n animated: false,\n isBack,\n },\n () => {\n this.props.scroll?.scrollTo(0, isBack ? scrollPosition : 0);\n this.props.onTransition &&\n this.props.onTransition({ isBack, from: prevPanel, to: activePanel });\n },\n );\n }\n\n transitionEndHandler: React.AnimationEventHandler<HTMLDivElement> = (e): void => {\n if (e.target !== e.currentTarget) {\n return;\n }\n\n if (this.state.prevPanel !== null) {\n this.flushTransition(this.state.prevPanel, Boolean(this.state.isBack));\n }\n };\n\n swipingBackTransitionEndHandler = (e?: TransitionEvent): void => {\n // indexOf because of vendor prefixes in old browsers\n if (\n !e ||\n (e.propertyName.includes('transform') &&\n e.target === this.pickPanel(this.state.swipeBackNextPanel))\n ) {\n switch (this.state.swipeBackResult) {\n case 'fail':\n this.onSwipeBackCancel();\n break;\n case 'success':\n this.onSwipeBackSuccess();\n }\n }\n };\n\n onSwipeBackSuccess(): void {\n this.props.onSwipeBack && this.props.onSwipeBack();\n }\n\n onSwipeBackCancel(): void {\n this.props.onSwipeBackCancel && this.props.onSwipeBackCancel();\n this.setState({\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n });\n }\n\n handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext = (event: CustomTouchEvent) => {\n if (this.state.browserSwipe) {\n return;\n }\n const { swipeBackTriggered, viewportStartEdgeTouched, viewportEndEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if ((viewportStartEdgeTouched || viewportEndEdgeTouched) && swipeBackTriggered) {\n this.setState({ browserSwipe: true });\n }\n };\n\n handleTouchMoveXForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n if (this.swipeBackPrevented || swipeBackExcluded(event)) {\n return;\n }\n\n const { swipedToOpposite, swipeBackTriggered, viewportStartEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if (this.state.animated && swipeBackTriggered) {\n return;\n }\n\n if (!this.state.swipingBack && this.props.history && this.props.history.length > 1) {\n if (swipedToOpposite) {\n this.swipeBackPrevented = true;\n return;\n }\n\n if (!swipeBackTriggered) {\n return;\n }\n\n if (\n !viewportStartEdgeTouched &&\n hasHorizontalScrollableElementWithScrolledToLeft(event.originalEvent.target as HTMLElement)\n ) {\n this.swipeBackPrevented = true;\n return;\n }\n // Начался свайп назад\n if (this.props.onSwipeBackStart) {\n const payload = this.props.onSwipeBackStart(this.state.activePanel);\n if (payload === 'prevent') {\n this.swipeBackPrevented = true;\n return;\n }\n }\n\n if (this.state.activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n this.blurActiveElement();\n const prevScrolls = this.scrolls.get(this.state.activePanel) || [];\n this.scrolls.set(this.state.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll().y,\n ]);\n }\n\n this.setState({\n swipingBack: true,\n swipeBackStartX: event.startX,\n swipeBackPrevPanel: this.state.activePanel,\n swipeBackNextPanel: this.props.history.slice(-2)[0],\n });\n }\n\n if (this.state.swipingBack) {\n if (event.shiftX < 0) {\n this.setState({ swipeBackShift: 0 });\n } else if (event.shiftX > this.window!.innerWidth - this.state.swipeBackStartX) {\n this.setState({ swipeBackShift: this.window!.innerWidth });\n } else {\n this.setState({ swipeBackShift: event.shiftX });\n }\n }\n };\n\n handleTouchEndForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n this.swipeBackPrevented = false;\n\n if (this.state.swipingBack && this.window) {\n const speed = (this.state.swipeBackShift / event.duration) * millisecondsInSecond;\n if (this.state.swipeBackShift === 0) {\n this.onSwipeBackCancel();\n } else if (this.state.swipeBackShift >= this.window.innerWidth) {\n this.onSwipeBackSuccess();\n } else if (speed > 250 || this.state.swipeBackShift >= this.window.innerWidth / 2) {\n this.setState({ swipeBackResult: 'success' });\n } else {\n this.setState({ swipeBackResult: 'fail' });\n }\n }\n };\n\n calcPanelSwipeStyles(panelId: string | undefined): React.CSSProperties {\n if (!canUseDOM || !this.window) {\n return {};\n }\n\n const isPrev = panelId === this.state.swipeBackPrevPanel;\n const isNext = panelId === this.state.swipeBackNextPanel;\n\n if ((!isPrev && !isNext) || this.state.swipeBackResult) {\n return {};\n }\n\n let prevPanelTranslate = `${this.state.swipeBackShift}px`;\n let nextPanelTranslate = `${\n -50 + (this.state.swipeBackShift * 100) / this.window.innerWidth / 2\n }%`;\n let prevPanelShadow =\n (0.3 * (this.window.innerWidth - this.state.swipeBackShift)) / this.window.innerWidth;\n\n if (this.state.swipeBackResult) {\n return isPrev ? { boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})` } : {};\n }\n\n if (isNext) {\n return {\n transform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n };\n }\n if (isPrev) {\n return {\n transform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})`,\n };\n }\n\n return {};\n }\n\n render() {\n const {\n platform,\n activePanel: _1,\n splitCol,\n configProvider,\n history,\n id,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel,\n window,\n document,\n scroll,\n isBackCheck,\n className,\n ...restProps\n } = this.props;\n const {\n prevPanel,\n nextPanel,\n activePanel,\n isBack,\n animated,\n swipeBackPrevPanel,\n swipeBackNextPanel,\n swipeBackResult,\n swipingBack,\n } = this.state;\n\n const panels = this.panels\n .filter((panel) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && this.state.visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n })\n .sort((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrevPanel = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const isNextPanel = panelId === nextPanel || panelId === swipeBackNextPanel;\n\n if (isNextPanel) {\n return swipingBack || this.state.isBack ? -1 : 1;\n }\n\n if (isPrevPanel) {\n return swipingBack || this.state.isBack ? 1 : -1;\n }\n\n return 0;\n });\n\n const disableAnimation = this.shouldDisableTransitionMotion();\n const iOSSwipeBackSimulationEnabled =\n !disableAnimation && platform === 'ios' && configProvider?.isWebView && Boolean(onSwipeBack);\n\n return (\n <NavViewIdContext.Provider value={id || nav}>\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles.host,\n platform === 'ios' && classNames(styles.ios, 'vkuiInternalView--ios'),\n !disableAnimation && this.state.animated && styles.animated,\n !disableAnimation && this.state.swipingBack && styles.swipingBack,\n disableAnimation && styles.noMotion,\n className,\n )}\n onMoveX={\n iOSSwipeBackSimulationEnabled\n ? this.handleTouchMoveXForIOSSwipeBackSimulation\n : platform === 'ios'\n ? this.handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext\n : undefined\n }\n onEnd={\n iOSSwipeBackSimulationEnabled ? this.handleTouchEndForIOSSwipeBackSimulation : undefined\n }\n >\n <div className={styles.panels}>\n {panels.map((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const compensateScroll =\n isPrev || panelId === swipeBackNextPanel || (panelId === nextPanel && isBack);\n const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);\n const scrollList = (panelId && this.scrolls.get(panelId)) || [];\n const scroll = scrollList[scrollList.length - 1] || 0;\n\n return (\n <div\n className={classNames(\n styles.panel,\n panelId === activePanel && styles.panelActive,\n panelId === prevPanel && styles.panelPrev,\n panelId === nextPanel && styles.panelNext,\n panelId === swipeBackPrevPanel && styles.panelSwipeBackPrev,\n panelId === swipeBackNextPanel && styles.panelSwipeBackNext,\n swipeBackResult === 'success' && styles.panelSwipeBackSuccess,\n swipeBackResult === 'fail' && styles.panelSwipeBackFailed,\n )}\n onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : undefined}\n ref={(el) => {\n panelId !== undefined && (this.panelNodes[panelId] = el);\n }}\n style={this.calcPanelSwipeStyles(panelId)}\n key={panelId}\n >\n <div\n className={styles.panelIn}\n style={{ marginTop: compensateScroll ? -scroll : undefined }}\n >\n <NavTransitionDirectionProvider isBack={swipingBack || isBack}>\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n animating={swipingBack || animated}\n >\n {panel}\n </NavTransitionProvider>\n </NavTransitionDirectionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n </NavViewIdContext.Provider>\n );\n }\n}\n\nexport const ViewInfinite: React.FC<ViewInfiniteProps> = withContext(\n withContext(\n withContext(\n withPlatform(withDOM<ViewInfiniteProps>(ViewInfiniteComponent)),\n SplitColContext,\n 'splitCol',\n ),\n ConfigProviderContext,\n 'configProvider',\n ),\n ScrollContext,\n 'scroll',\n);\n"],"names":["React","classNames","noop","withContext","withPlatform","millisecondsInSecond","canUseDOM","withDOM","getNavId","warnOnce","ScrollContext","ConfigProviderContext","NavViewIdContext","NavTransitionProvider","NavTransitionDirectionProvider","SplitColContext","Touch","getSwipeBackPredicates","hasHorizontalScrollableElementWithScrolledToLeft","swipeBackExcluded","styles","warn","scrollsCache","Map","ViewInfiniteComponent","Component","props","state","animated","visiblePanels","activePanel","isBack","undefined","prevPanel","nextPanel","swipingBack","swipeBackStartX","swipeBackShift","swipeBackNextPanel","swipeBackPrevPanel","swipeBackResult","browserSwipe","defaultProps","history","swipeBackPrevented","scrolls","get","transitionFinishTimeout","animationFinishTimeout","document","window","panels","Children","toArray","children","panelNodes","componentWillUnmount","id","set","clearTimeout","componentDidUpdate","prevProps","prevState","isBackCheck","from","to","firstLayerId","map","panel","find","blurActiveElement","prevScrolls","scroll","getScroll","compensateKeyboardHeight","y","shouldDisableTransitionMotion","flushTransition","setState","scrollPosition","prevPanelScrolls","slice","newPanelScrolls","pop","scrollTo","onTransition","waitTransitionFinish","pickPanel","swipingBackTransitionEndHandler","configProvider","transitionMotionEnabled","splitCol","animate","platform","transitionDisposer","disposeTransition","elem","eventHandler","setTimeout","addEventListener","removeEventListener","activeElement","blur","transitionEndHandler","e","target","currentTarget","Boolean","propertyName","includes","onSwipeBackCancel","onSwipeBackSuccess","onSwipeBack","handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext","event","swipeBackTriggered","viewportStartEdgeTouched","viewportEndEdgeTouched","startX","shiftX","innerWidth","handleTouchMoveXForIOSSwipeBackSimulation","swipedToOpposite","length","originalEvent","onSwipeBackStart","payload","handleTouchEndForIOSSwipeBackSimulation","speed","duration","calcPanelSwipeStyles","panelId","isPrev","isNext","prevPanelTranslate","nextPanelTranslate","prevPanelShadow","boxShadow","transform","render","_1","nav","className","restProps","filter","sort","isPrevPanel","isNextPanel","disableAnimation","iOSSwipeBackSimulationEnabled","isWebView","Provider","value","host","ios","noMotion","onMoveX","onEnd","div","compensateScroll","isTransitionTarget","scrollList","panelActive","panelPrev","panelNext","panelSwipeBackPrev","panelSwipeBackNext","panelSwipeBackSuccess","panelSwipeBackFailed","onAnimationEnd","ref","el","style","panelIn","marginTop","entering","animating","ViewInfinite"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/View/ViewInfinite.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { millisecondsInSecond } from '../../lib/date';\nimport { canUseDOM, type DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasPlatform, HTMLAttributesWithRootRef } from '../../types';\nimport { ScrollContext, type ScrollContextInterface } from '../AppRoot/ScrollContext';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n} from '../ConfigProvider/ConfigProviderContext';\nimport { NavViewIdContext } from '../NavIdContext/NavIdContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { SplitColContext, type SplitColContextProps } from '../SplitCol/SplitColContext';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport {\n getSwipeBackPredicates,\n hasHorizontalScrollableElementWithScrolledToLeft,\n swipeBackExcluded,\n} from './utils';\nimport styles from './View.module.css';\n\nconst warn = warnOnce('ViewInfinite');\n\ntype TransitionEventHandler = (e?: TransitionEvent) => void;\n\nexport let scrollsCache = new Map<string, Map<string, Array<number | undefined>>>();\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport type TransitionParams = { from: string | null; to: string | null };\n\nexport interface ViewInfiniteProps\n extends HTMLAttributesWithRootRef<HTMLElement>,\n HasPlatform,\n NavIdProps {\n /**\n * `id` активной панели.\n */\n activePanel: string;\n /**\n * Обработчик, который вызывается при завершении анимации смены активной панели.\n */\n onTransition?: ((params: TransitionParams & { isBack: boolean }) => void) | undefined;\n /**\n * Обработчик свайпа назад.\n */\n onSwipeBack?: (() => void) | undefined;\n /**\n * Обработчик начала анимации свайпа назад.\n */\n onSwipeBackStart?: ((activePanel: string | null) => void | 'prevent') | undefined;\n /**\n * Обработчик завершения анимации отмененного пользователем свайпа.\n */\n onSwipeBackCancel?: (() => void) | undefined;\n /**\n * Массив из id панелей в порядке открытия.\n */\n history?: string[] | undefined;\n /**\n * Функция проверки перехода назад.\n */\n isBackCheck?: ((params: TransitionParams) => boolean) | undefined;\n /**\n * @ignore\n */\n splitCol?: SplitColContextProps | undefined;\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface | undefined;\n /**\n * @ignore\n */\n scroll?: ScrollContextInterface | undefined;\n}\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport interface ViewInfiniteState {\n animated: boolean;\n\n visiblePanels: Array<string | null>;\n activePanel: string | null;\n isBack?: boolean | undefined;\n prevPanel: string | null;\n nextPanel: string | null;\n\n swipingBack?: boolean | undefined;\n swipeBackStartX: number;\n swipeBackShift: number;\n swipeBackNextPanel: string | null;\n swipeBackPrevPanel: string | null;\n swipeBackResult: 'success' | 'fail' | null;\n\n browserSwipe: boolean;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nclass ViewInfiniteComponent extends React.Component<\n ViewInfiniteProps & DOMProps,\n ViewInfiniteState\n> {\n constructor(props: ViewInfiniteProps) {\n super(props);\n\n this.state = {\n animated: false,\n\n visiblePanels: [props.activePanel],\n activePanel: props.activePanel,\n isBack: undefined,\n prevPanel: null,\n nextPanel: null,\n\n swipingBack: undefined,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n swipeBackNextPanel: null,\n swipeBackPrevPanel: null,\n swipeBackResult: null,\n\n browserSwipe: false,\n };\n }\n\n static defaultProps: Partial<ViewInfiniteProps> = {\n history: [],\n };\n\n private swipeBackPrevented = false;\n private readonly scrolls: Map<string, Array<number | undefined>> =\n scrollsCache.get(getNavId(this.props, warn) as string) || new Map();\n private transitionFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n private readonly animationFinishTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\n get document() {\n return this.props.document;\n }\n\n get window() {\n return this.props.window;\n }\n\n get panels() {\n return React.Children.toArray(this.props.children) as Array<React.ReactElement<NavIdProps>>;\n }\n\n panelNodes: { [id: string]: HTMLDivElement | null } = {};\n\n componentWillUnmount() {\n const id = getNavId(this.props);\n if (id) {\n scrollsCache.set(id, this.scrolls);\n }\n if (this.animationFinishTimeout) {\n clearTimeout(this.animationFinishTimeout);\n }\n }\n\n componentDidUpdate(prevProps: ViewInfiniteProps, prevState: ViewInfiniteState) {\n // Нужен переход\n if (\n prevProps.activePanel !== this.props.activePanel &&\n !prevState.swipingBack &&\n !prevState.browserSwipe\n ) {\n let isBack = false;\n\n if (this.props.isBackCheck) {\n isBack = this.props.isBackCheck({\n from: prevProps.activePanel,\n to: this.props.activePanel,\n });\n } else {\n const firstLayerId = this.panels\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevProps.activePanel || id === this.props.activePanel);\n isBack = firstLayerId === this.props.activePanel;\n }\n\n this.blurActiveElement();\n\n const prevScrolls = this.scrolls.get(prevProps.activePanel) || [];\n this.scrolls.set(prevProps.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll({ compensateKeyboardHeight: false }).y,\n ]);\n\n if (this.shouldDisableTransitionMotion()) {\n this.flushTransition(prevProps.activePanel, isBack);\n } else {\n this.setState(() => ({\n visiblePanels: [prevProps.activePanel, this.props.activePanel],\n prevPanel: prevProps.activePanel,\n nextPanel: this.props.activePanel,\n activePanel: null,\n animated: true,\n isBack,\n }));\n }\n }\n\n // Закончилась анимация свайпа назад\n if (prevProps.activePanel !== this.props.activePanel && prevState.swipingBack) {\n const nextPanel = this.state.swipeBackNextPanel;\n const prevPanel = this.state.swipeBackPrevPanel;\n let scrollPosition: undefined | number = undefined;\n\n if (prevPanel !== null) {\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n this.scrolls.set(prevPanel, prevPanelScrolls);\n }\n if (nextPanel !== null) {\n const newPanelScrolls = [...(this.scrolls.get(nextPanel) || [])];\n scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(nextPanel, newPanelScrolls);\n }\n\n this.setState(\n {\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n activePanel: nextPanel,\n visiblePanels: [nextPanel],\n },\n () => {\n this.props.scroll?.scrollTo(0, scrollPosition);\n prevProps.onTransition &&\n prevProps.onTransition({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n },\n );\n }\n\n // Началась анимация завершения свайпа назад.\n if (!prevState.swipeBackResult && this.state.swipeBackResult) {\n this.waitTransitionFinish(\n this.pickPanel(this.state.swipeBackNextPanel),\n this.swipingBackTransitionEndHandler,\n );\n }\n\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n if (\n prevState.swipeBackResult === 'fail' &&\n !this.state.swipeBackResult &&\n this.state.activePanel !== null\n ) {\n const newPanelScrolls = [...(this.scrolls.get(this.state.activePanel) || [])];\n const scrollPosition = newPanelScrolls.pop();\n this.scrolls.set(this.state.activePanel, newPanelScrolls);\n\n this.props.scroll?.scrollTo(0, scrollPosition);\n }\n\n // Закончился Safari свайп\n if (prevProps.activePanel !== this.props.activePanel && this.state.browserSwipe) {\n this.setState(() => ({\n browserSwipe: false,\n nextPanel: null,\n prevPanel: null,\n animated: false,\n visiblePanels: [this.props.activePanel],\n activePanel: this.props.activePanel,\n }));\n }\n }\n\n shouldDisableTransitionMotion(): boolean {\n return (\n this.props.configProvider?.transitionMotionEnabled === false ||\n !this.props.splitCol?.animate ||\n this.props.platform === 'vkcom'\n );\n }\n\n private transitionDisposer = noop;\n\n private disposeTransition() {\n this.transitionDisposer();\n this.transitionDisposer = noop;\n }\n\n waitTransitionFinish(\n elem: HTMLElement | null | undefined,\n eventHandler: TransitionEventHandler,\n ): void {\n if (this.shouldDisableTransitionMotion()) {\n this.disposeTransition();\n this.transitionFinishTimeout = setTimeout(eventHandler);\n } else if (elem) {\n this.disposeTransition();\n elem.addEventListener('transitionend', eventHandler);\n this.transitionDisposer = () => {\n elem.removeEventListener('transitionend', eventHandler);\n };\n } else {\n if (this.transitionFinishTimeout) {\n clearTimeout(this.transitionFinishTimeout);\n }\n this.transitionFinishTimeout = setTimeout(\n eventHandler,\n this.props.platform === 'android' || this.props.platform === 'vkcom' ? 300 : 600,\n );\n }\n }\n\n blurActiveElement(): void {\n if (typeof this.window !== 'undefined' && this.document?.activeElement) {\n (this.document.activeElement as HTMLElement).blur();\n }\n }\n\n pickPanel(id: string | null) {\n if (id === null) {\n return undefined;\n }\n return this.panelNodes[id];\n }\n\n flushTransition(prevPanel: string, isBack: boolean) {\n const activePanel = this.props.activePanel;\n\n const prevPanelScrolls = [...(this.scrolls.get(prevPanel) || [])].slice(0, -1);\n const newPanelScrolls = [...(this.scrolls.get(activePanel) || [])];\n const scrollPosition = isBack ? newPanelScrolls.pop() : 0;\n if (isBack) {\n this.scrolls.set(prevPanel, prevPanelScrolls);\n this.scrolls.set(activePanel, newPanelScrolls);\n }\n\n this.setState(\n {\n prevPanel: null,\n nextPanel: null,\n visiblePanels: [activePanel],\n activePanel: activePanel,\n animated: false,\n isBack,\n },\n () => {\n this.props.scroll?.scrollTo(0, isBack ? scrollPosition : 0);\n this.props.onTransition &&\n this.props.onTransition({ isBack, from: prevPanel, to: activePanel });\n },\n );\n }\n\n transitionEndHandler: React.AnimationEventHandler<HTMLDivElement> = (e): void => {\n if (e.target !== e.currentTarget) {\n return;\n }\n\n if (this.state.prevPanel !== null) {\n this.flushTransition(this.state.prevPanel, Boolean(this.state.isBack));\n }\n };\n\n swipingBackTransitionEndHandler = (e?: TransitionEvent): void => {\n // indexOf because of vendor prefixes in old browsers\n if (\n !e ||\n (e.propertyName.includes('transform') &&\n e.target === this.pickPanel(this.state.swipeBackNextPanel))\n ) {\n switch (this.state.swipeBackResult) {\n case 'fail':\n this.onSwipeBackCancel();\n break;\n case 'success':\n this.onSwipeBackSuccess();\n }\n }\n };\n\n onSwipeBackSuccess(): void {\n this.props.onSwipeBack && this.props.onSwipeBack();\n }\n\n onSwipeBackCancel(): void {\n this.props.onSwipeBackCancel && this.props.onSwipeBackCancel();\n this.setState({\n swipeBackPrevPanel: null,\n swipeBackNextPanel: null,\n swipingBack: false,\n swipeBackResult: null,\n swipeBackStartX: 0,\n swipeBackShift: 0,\n });\n }\n\n handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext = (event: CustomTouchEvent) => {\n if (this.state.browserSwipe) {\n return;\n }\n const { swipeBackTriggered, viewportStartEdgeTouched, viewportEndEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if ((viewportStartEdgeTouched || viewportEndEdgeTouched) && swipeBackTriggered) {\n this.setState({ browserSwipe: true });\n }\n };\n\n handleTouchMoveXForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n if (this.swipeBackPrevented || swipeBackExcluded(event)) {\n return;\n }\n\n const { swipedToOpposite, swipeBackTriggered, viewportStartEdgeTouched } =\n getSwipeBackPredicates(event.startX, event.shiftX, this.window!.innerWidth);\n\n if (this.state.animated && swipeBackTriggered) {\n return;\n }\n\n if (!this.state.swipingBack && this.props.history && this.props.history.length > 1) {\n if (swipedToOpposite) {\n this.swipeBackPrevented = true;\n return;\n }\n\n if (!swipeBackTriggered) {\n return;\n }\n\n if (\n !viewportStartEdgeTouched &&\n hasHorizontalScrollableElementWithScrolledToLeft(event.originalEvent.target as HTMLElement)\n ) {\n this.swipeBackPrevented = true;\n return;\n }\n // Начался свайп назад\n if (this.props.onSwipeBackStart) {\n const payload = this.props.onSwipeBackStart(this.state.activePanel);\n if (payload === 'prevent') {\n this.swipeBackPrevented = true;\n return;\n }\n }\n\n if (this.state.activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n this.blurActiveElement();\n const prevScrolls = this.scrolls.get(this.state.activePanel) || [];\n this.scrolls.set(this.state.activePanel, [\n ...prevScrolls,\n this.props.scroll?.getScroll().y,\n ]);\n }\n\n this.setState((prevState) => ({\n swipingBack: true,\n swipeBackStartX: event.startX,\n swipeBackPrevPanel: prevState.activePanel,\n swipeBackNextPanel: this.props.history?.slice(-2)[0] ?? null,\n }));\n }\n\n if (this.state.swipingBack) {\n if (event.shiftX < 0) {\n this.setState({ swipeBackShift: 0 });\n } else if (event.shiftX > this.window!.innerWidth - this.state.swipeBackStartX) {\n this.setState({ swipeBackShift: this.window!.innerWidth });\n } else {\n this.setState({ swipeBackShift: event.shiftX });\n }\n }\n };\n\n handleTouchEndForIOSSwipeBackSimulation = (event: CustomTouchEvent) => {\n this.swipeBackPrevented = false;\n\n if (this.state.swipingBack && this.window) {\n const speed = (this.state.swipeBackShift / event.duration) * millisecondsInSecond;\n if (this.state.swipeBackShift === 0) {\n this.onSwipeBackCancel();\n } else if (this.state.swipeBackShift >= this.window.innerWidth) {\n this.onSwipeBackSuccess();\n } else if (speed > 250 || this.state.swipeBackShift >= this.window.innerWidth / 2) {\n this.setState({ swipeBackResult: 'success' });\n } else {\n this.setState({ swipeBackResult: 'fail' });\n }\n }\n };\n\n calcPanelSwipeStyles(panelId: string | undefined): React.CSSProperties {\n if (!canUseDOM || !this.window) {\n return {};\n }\n\n const isPrev = panelId === this.state.swipeBackPrevPanel;\n const isNext = panelId === this.state.swipeBackNextPanel;\n\n if ((!isPrev && !isNext) || this.state.swipeBackResult) {\n return {};\n }\n\n let prevPanelTranslate = `${this.state.swipeBackShift}px`;\n let nextPanelTranslate = `${\n -50 + (this.state.swipeBackShift * 100) / this.window.innerWidth / 2\n }%`;\n let prevPanelShadow =\n (0.3 * (this.window.innerWidth - this.state.swipeBackShift)) / this.window.innerWidth;\n\n if (this.state.swipeBackResult) {\n return isPrev ? { boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})` } : {};\n }\n\n if (isNext) {\n return {\n transform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n };\n }\n if (isPrev) {\n return {\n transform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})`,\n };\n }\n\n return {};\n }\n\n render() {\n const {\n platform,\n activePanel: _1,\n splitCol,\n configProvider,\n history,\n id,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel,\n window,\n document,\n scroll,\n isBackCheck,\n className,\n ...restProps\n } = this.props;\n const {\n prevPanel,\n nextPanel,\n activePanel,\n isBack,\n animated,\n swipeBackPrevPanel,\n swipeBackNextPanel,\n swipeBackResult,\n swipingBack,\n } = this.state;\n\n const panels = this.panels\n .filter((panel) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && this.state.visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n })\n .sort((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrevPanel = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const isNextPanel = panelId === nextPanel || panelId === swipeBackNextPanel;\n\n if (isNextPanel) {\n return swipingBack || this.state.isBack ? -1 : 1;\n }\n\n if (isPrevPanel) {\n return swipingBack || this.state.isBack ? 1 : -1;\n }\n\n return 0;\n });\n\n const disableAnimation = this.shouldDisableTransitionMotion();\n const iOSSwipeBackSimulationEnabled =\n !disableAnimation && platform === 'ios' && configProvider?.isWebView && Boolean(onSwipeBack);\n\n return (\n <NavViewIdContext.Provider value={id || nav}>\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles.host,\n platform === 'ios' && classNames(styles.ios, 'vkuiInternalView--ios'),\n !disableAnimation && this.state.animated && styles.animated,\n !disableAnimation && this.state.swipingBack && styles.swipingBack,\n disableAnimation && styles.noMotion,\n className,\n )}\n onMoveX={\n iOSSwipeBackSimulationEnabled\n ? this.handleTouchMoveXForIOSSwipeBackSimulation\n : platform === 'ios'\n ? this.handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext\n : undefined\n }\n onEnd={\n iOSSwipeBackSimulationEnabled ? this.handleTouchEndForIOSSwipeBackSimulation : undefined\n }\n >\n <div className={styles.panels}>\n {panels.map((panel) => {\n const panelId = getNavId(panel.props, warn);\n const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const compensateScroll =\n isPrev || panelId === swipeBackNextPanel || (panelId === nextPanel && isBack);\n const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);\n const scrollList = (panelId && this.scrolls.get(panelId)) || [];\n const scroll = scrollList[scrollList.length - 1] || 0;\n\n return (\n <div\n className={classNames(\n styles.panel,\n panelId === activePanel && styles.panelActive,\n panelId === prevPanel && styles.panelPrev,\n panelId === nextPanel && styles.panelNext,\n panelId === swipeBackPrevPanel && styles.panelSwipeBackPrev,\n panelId === swipeBackNextPanel && styles.panelSwipeBackNext,\n swipeBackResult === 'success' && styles.panelSwipeBackSuccess,\n swipeBackResult === 'fail' && styles.panelSwipeBackFailed,\n )}\n onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : undefined}\n ref={(el) => {\n panelId !== undefined && (this.panelNodes[panelId] = el);\n }}\n style={this.calcPanelSwipeStyles(panelId)}\n key={panelId}\n >\n <div\n className={styles.panelIn}\n style={{ marginTop: compensateScroll ? -scroll : undefined }}\n >\n <NavTransitionDirectionProvider isBack={swipingBack || isBack}>\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n animating={swipingBack || animated}\n >\n {panel}\n </NavTransitionProvider>\n </NavTransitionDirectionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n </NavViewIdContext.Provider>\n );\n }\n}\n\nexport const ViewInfinite: React.FC<ViewInfiniteProps> = withContext(\n withContext(\n withContext(\n withPlatform(withDOM<ViewInfiniteProps>(ViewInfiniteComponent)),\n SplitColContext,\n 'splitCol',\n ),\n ConfigProviderContext,\n 'configProvider',\n ),\n ScrollContext,\n 'scroll',\n);\n"],"names":["React","classNames","noop","withContext","withPlatform","millisecondsInSecond","canUseDOM","withDOM","getNavId","warnOnce","ScrollContext","ConfigProviderContext","NavViewIdContext","NavTransitionProvider","NavTransitionDirectionProvider","SplitColContext","Touch","getSwipeBackPredicates","hasHorizontalScrollableElementWithScrolledToLeft","swipeBackExcluded","styles","warn","scrollsCache","Map","ViewInfiniteComponent","Component","props","state","animated","visiblePanels","activePanel","isBack","undefined","prevPanel","nextPanel","swipingBack","swipeBackStartX","swipeBackShift","swipeBackNextPanel","swipeBackPrevPanel","swipeBackResult","browserSwipe","defaultProps","history","swipeBackPrevented","scrolls","get","transitionFinishTimeout","animationFinishTimeout","document","window","panels","Children","toArray","children","panelNodes","componentWillUnmount","id","set","clearTimeout","componentDidUpdate","prevProps","prevState","isBackCheck","from","to","firstLayerId","map","panel","find","blurActiveElement","prevScrolls","scroll","getScroll","compensateKeyboardHeight","y","shouldDisableTransitionMotion","flushTransition","setState","scrollPosition","prevPanelScrolls","slice","newPanelScrolls","pop","scrollTo","onTransition","waitTransitionFinish","pickPanel","swipingBackTransitionEndHandler","configProvider","transitionMotionEnabled","splitCol","animate","platform","transitionDisposer","disposeTransition","elem","eventHandler","setTimeout","addEventListener","removeEventListener","activeElement","blur","transitionEndHandler","e","target","currentTarget","Boolean","propertyName","includes","onSwipeBackCancel","onSwipeBackSuccess","onSwipeBack","handleTouchMoveXForNativeIOSSwipeBackOrSwipeNext","event","swipeBackTriggered","viewportStartEdgeTouched","viewportEndEdgeTouched","startX","shiftX","innerWidth","handleTouchMoveXForIOSSwipeBackSimulation","swipedToOpposite","length","originalEvent","onSwipeBackStart","payload","handleTouchEndForIOSSwipeBackSimulation","speed","duration","calcPanelSwipeStyles","panelId","isPrev","isNext","prevPanelTranslate","nextPanelTranslate","prevPanelShadow","boxShadow","transform","render","_1","nav","className","restProps","filter","sort","isPrevPanel","isNextPanel","disableAnimation","iOSSwipeBackSimulationEnabled","isWebView","Provider","value","host","ios","noMotion","onMoveX","onEnd","div","compensateScroll","isTransitionTarget","scrollList","panelActive","panelPrev","panelNext","panelSwipeBackPrev","panelSwipeBackNext","panelSwipeBackSuccess","panelSwipeBackFailed","onAnimationEnd","ref","el","style","panelIn","marginTop","entering","animating","ViewInfinite"],"mappings":"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"}
|