@vkontakte/vkui 5.9.1 → 5.9.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.
- package/dist/cjs/components/Alert/Alert.d.ts +3 -3
- package/dist/cjs/components/Alert/Alert.d.ts.map +1 -1
- package/dist/cjs/components/Alert/Alert.js +5 -3
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.js +1 -2
- package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js +17 -5
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/cjs/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/cjs/components/FormLayout/FormLayout.js +5 -2
- package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.js +3 -10
- package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
- package/dist/cjs/components/Gallery/hooks.d.ts +2 -0
- package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/cjs/components/Gallery/hooks.js +52 -0
- package/dist/cjs/components/Gallery/hooks.js.map +1 -0
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +5 -2
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/cjs/lib/floating/adapters.d.ts +1 -1
- package/dist/cjs/lib/floating/adapters.d.ts.map +1 -1
- package/dist/cjs/lib/floating/adapters.js +1 -1
- package/dist/cjs/lib/floating/adapters.js.map +1 -1
- package/dist/cjs/lib/floating/index.d.ts +1 -1
- package/dist/cjs/lib/floating/index.d.ts.map +1 -1
- package/dist/cjs/lib/floating/index.js +1 -1
- package/dist/cjs/lib/floating/index.js.map +1 -1
- package/dist/cjs/lib/floating/types.d.ts +2 -2
- package/dist/cjs/lib/floating/types.d.ts.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -3
- package/dist/components/Alert/Alert.d.ts.map +1 -1
- package/dist/components/Alert/Alert.js +5 -3
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +1 -2
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +17 -5
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/components/FormLayout/FormLayout.js +5 -2
- package/dist/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +3 -10
- package/dist/components/Gallery/Gallery.js.map +1 -1
- package/dist/components/Gallery/hooks.d.ts +2 -0
- package/dist/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/components/Gallery/hooks.js +41 -0
- package/dist/components/Gallery/hooks.js.map +1 -0
- package/dist/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/components/ModalPageHeader/ModalPageHeader.js +5 -2
- package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/components.css +5 -5
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +3719 -2461
- package/dist/cssm/components/Alert/Alert.d.ts +3 -3
- package/dist/cssm/components/Alert/Alert.d.ts.map +1 -1
- package/dist/cssm/components/Alert/Alert.js +3 -2
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/Button/Button.module.css +3 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +4 -2
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
- package/dist/cssm/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/cssm/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/cssm/components/FormLayout/FormLayout.js +4 -2
- package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.js +2 -7
- package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
- package/dist/cssm/components/Gallery/hooks.d.ts +2 -0
- package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/cssm/components/Gallery/hooks.js +39 -0
- package/dist/cssm/components/Gallery/hooks.js.map +1 -0
- package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -4
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -2
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +7 -1
- package/dist/cssm/components/Snackbar/Snackbar.module.css +1 -1
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js +4 -2
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/cssm/lib/floating/adapters.d.ts +1 -1
- package/dist/cssm/lib/floating/adapters.d.ts.map +1 -1
- package/dist/cssm/lib/floating/adapters.js +1 -1
- package/dist/cssm/lib/floating/adapters.js.map +1 -1
- package/dist/cssm/lib/floating/index.d.ts +1 -1
- package/dist/cssm/lib/floating/index.d.ts.map +1 -1
- package/dist/cssm/lib/floating/index.js +1 -1
- package/dist/cssm/lib/floating/index.js.map +1 -1
- package/dist/cssm/lib/floating/types.d.ts +2 -2
- package/dist/cssm/lib/floating/types.d.ts.map +1 -1
- package/dist/cssm/lib/floating/types.js.map +1 -1
- package/dist/lib/floating/adapters.d.ts +1 -1
- package/dist/lib/floating/adapters.d.ts.map +1 -1
- package/dist/lib/floating/adapters.js +1 -1
- package/dist/lib/floating/adapters.js.map +1 -1
- package/dist/lib/floating/index.d.ts +1 -1
- package/dist/lib/floating/index.d.ts.map +1 -1
- package/dist/lib/floating/index.js +1 -1
- package/dist/lib/floating/index.js.map +1 -1
- package/dist/lib/floating/types.d.ts +2 -2
- package/dist/lib/floating/types.d.ts.map +1 -1
- package/dist/lib/floating/types.js.map +1 -1
- package/dist/vkui.css +5 -5
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +3719 -2461
- package/package.json +2 -2
- package/src/components/Alert/Alert.tsx +10 -3
- package/src/components/Button/Button.module.css +3 -1
- package/src/components/CalendarRange/CalendarRange.tsx +0 -1
- package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
- package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
- package/src/components/CustomSelect/CustomSelect.tsx +5 -1
- package/src/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
- package/src/components/FormLayout/FormLayout.tsx +8 -3
- package/src/components/Gallery/Gallery.tsx +2 -6
- package/src/components/Gallery/hooks.ts +39 -0
- package/src/components/ModalPage/ModalPage.module.css +1 -4
- package/src/components/ModalPageHeader/ModalPageHeader.tsx +8 -4
- package/src/components/ModalRoot/ModalRoot.tsx +6 -5
- package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +6 -1
- package/src/components/Snackbar/Snackbar.module.css +1 -1
- package/src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx +6 -2
- package/src/lib/floating/adapters.ts +1 -1
- package/src/lib/floating/index.ts +1 -1
- package/src/lib/floating/types.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = (contentElement?.firstElementChild as HTMLElement).scrollHeight;\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) ||\n modalState.settlingHeight === 100 ||\n modalState.expanded;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange;\n let hiddenRange: TranslateRange;\n\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = [shiftHalf, translateYFrom + visiblePart / 4];\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = [translateY + 25, translateY + 25];\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["React","classNames","clamp","withContext","withPlatform","withDOM","getNavId","Platform","setTransformStyle","transitionEvent","rubber","warnOnce","ConfigProviderContext","FocusTrap","Touch","TouchRootContext","ModalRootContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","ModalType","withModalManager","styles","warn","numberInRange","number","range","rangeTranslate","ModalRootTouchComponent","Component","constructor","props","state","touchDown","dragging","modalOpenedLog","maskElementRef","createRef","modalRootContext","updateModalHeight","registerModal","id","data","Object","assign","getModalState","onClose","onExit","isInsideModal","frameIds","documentScrolling","viewportRef","maskAnimationFrame","undefined","restoreFocusTo","timeout","platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","exitingModal","closeModal","enteringModal","enteringState","onEnter","waitTransitionFinish","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeModal","activeElement","focus","enabled","preventTouch","passive","event","originalEvent","preventDefault","checkPageContentHeight","modalState","type","PAGE","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","requestAnimationFrame","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","onTouchMove","e","onPageTouchMove","CARD","onCardTouchMove","shiftY","target","isY","current","contains","stopPropagation","contentScrolled","collapsed","expanded","touchStartContentScrollTop","contentElement","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","onTouchEnd","onPageTouchEnd","onCardTouchEnd","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","onScroll","contentScrollStopTimeout","clearTimeout","setTimeout","eventHandler","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","forceOpacity","history","opacity","toString","render","Provider","value","className","configProvider","hasCustomPanelHeaderAfter","onMove","onEnd","div","onClick","ref","map","Modal","modalId","_modalState","isPage","key","getRootRef","restoreFocus","ModalRootTouch","initModal","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","firstElementChild","scrollHeight","bottomInsetHeight","contentHeight","prevTranslateY","clientHeight","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = (contentElement?.firstElementChild as HTMLElement).scrollHeight;\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) ||\n modalState.settlingHeight === 100 ||\n modalState.expanded;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange | undefined;\n let hiddenRange: TranslateRange;\n\n const hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = hasCollapsedState ? [shiftHalf, translateYFrom + visiblePart / 4] : undefined;\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = hasCollapsedState && translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = undefined;\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["React","classNames","clamp","withContext","withPlatform","withDOM","getNavId","Platform","setTransformStyle","transitionEvent","rubber","warnOnce","ConfigProviderContext","FocusTrap","Touch","TouchRootContext","ModalRootContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","ModalType","withModalManager","styles","warn","numberInRange","number","range","rangeTranslate","ModalRootTouchComponent","Component","constructor","props","state","touchDown","dragging","modalOpenedLog","maskElementRef","createRef","modalRootContext","updateModalHeight","registerModal","id","data","Object","assign","getModalState","onClose","onExit","isInsideModal","frameIds","documentScrolling","viewportRef","maskAnimationFrame","undefined","restoreFocusTo","timeout","platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","exitingModal","closeModal","enteringModal","enteringState","onEnter","waitTransitionFinish","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeModal","activeElement","focus","enabled","preventTouch","passive","event","originalEvent","preventDefault","checkPageContentHeight","modalState","type","PAGE","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","requestAnimationFrame","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","onTouchMove","e","onPageTouchMove","CARD","onCardTouchMove","shiftY","target","isY","current","contains","stopPropagation","contentScrolled","collapsed","expanded","touchStartContentScrollTop","contentElement","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","onTouchEnd","onPageTouchEnd","onCardTouchEnd","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","onScroll","contentScrollStopTimeout","clearTimeout","setTimeout","eventHandler","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","forceOpacity","history","opacity","toString","render","Provider","value","className","configProvider","hasCustomPanelHeaderAfter","onMove","onEnd","div","onClick","ref","map","Modal","modalId","_modalState","isPage","key","getRootRef","restoreFocus","ModalRootTouch","initModal","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","firstElementChild","scrollHeight","bottomInsetHeight","contentHeight","prevTranslateY","clientHeight","hasCollapsedState","Boolean","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
.PanelHeaderButton--primitive {
|
|
20
20
|
height: 48px;
|
|
21
21
|
line-height: 48px;
|
|
22
|
-
padding: 0
|
|
22
|
+
padding: 0 10px;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/*
|
|
@@ -46,6 +46,12 @@
|
|
|
46
46
|
padding: 8px;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
/* stylelint-disable-next-line @project-tools/stylelint-atomic -- фикс для иконки назад */
|
|
50
|
+
|
|
51
|
+
.PanelHeaderBack--ios :global(.vkuiIcon--w-20) {
|
|
52
|
+
padding-left: 4px;
|
|
53
|
+
}
|
|
54
|
+
|
|
49
55
|
/*
|
|
50
56
|
* Android
|
|
51
57
|
*/
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
align-items: center;
|
|
47
47
|
background: var(--vkui--color_background_modal);
|
|
48
48
|
box-shadow: var(--vkui--elevation4);
|
|
49
|
-
border-radius: var(--vkui--
|
|
49
|
+
border-radius: var(--vkui--size_card_border_radius--regular);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
.Snackbar--mode-dark .Snackbar__body {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { HasRef } from '../../types';
|
|
3
|
-
export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement> {
|
|
2
|
+
import { HasRef, HasRootRef } from '../../types';
|
|
3
|
+
export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLInputElement>, HasRef<HTMLInputElement> {
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
6
|
* @deprecated v5.4.0
|
|
@@ -8,5 +8,5 @@ export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTML
|
|
|
8
8
|
* Компонент устарел и будет удален в v6. Используйте
|
|
9
9
|
* `<VisuallyHidden Component="input" />`
|
|
10
10
|
*/
|
|
11
|
-
export declare const VisuallyHiddenInput: ({ getRef, className, ...restProps }: VisuallyHiddenInputProps) => React.JSX.Element;
|
|
11
|
+
export declare const VisuallyHiddenInput: ({ getRef, className, getRootRef, ...restProps }: VisuallyHiddenInputProps) => React.JSX.Element;
|
|
12
12
|
//# sourceMappingURL=VisuallyHiddenInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisuallyHiddenInput.d.ts","sourceRoot":"","sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"VisuallyHiddenInput.d.ts","sourceRoot":"","sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,wBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC,EAC5B,MAAM,CAAC,gBAAgB,CAAC;CAAG;AAC/B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,oDAK7B,wBAAwB,sBAe1B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { classNames } from '@vkontakte/vkjs';
|
|
3
|
+
import { useExternRef } from '../../hooks/useExternRef';
|
|
3
4
|
import { warnOnce } from '../../lib/warnOnce';
|
|
4
5
|
import styles from './VisuallyHiddenInput.module.css';
|
|
5
6
|
const warn = warnOnce('VisuallyHiddenInput');
|
|
@@ -8,14 +9,15 @@ const warn = warnOnce('VisuallyHiddenInput');
|
|
|
8
9
|
*
|
|
9
10
|
* Компонент устарел и будет удален в v6. Используйте
|
|
10
11
|
* `<VisuallyHidden Component="input" />`
|
|
11
|
-
*/ export const VisuallyHiddenInput = ({ getRef, className, ...restProps })=>{
|
|
12
|
+
*/ export const VisuallyHiddenInput = ({ getRef, className, getRootRef, ...restProps })=>{
|
|
13
|
+
const visuallyHiddenInputRef = useExternRef(getRef, getRootRef);
|
|
12
14
|
if (process.env.NODE_ENV === 'development') {
|
|
13
15
|
warn('Компонент устарел и будет удален в v6. Используйте https://vkcom.github.io/VKUI/#/VisuallyHidden');
|
|
14
16
|
}
|
|
15
17
|
return /*#__PURE__*/ React.createElement("input", {
|
|
16
18
|
...restProps,
|
|
17
19
|
className: classNames(styles['VisuallyHiddenInput'], className),
|
|
18
|
-
ref:
|
|
20
|
+
ref: visuallyHiddenInputRef
|
|
19
21
|
});
|
|
20
22
|
};
|
|
21
23
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRef } from '../../types';\nimport styles from './VisuallyHiddenInput.module.css';\n\nconst warn = warnOnce('VisuallyHiddenInput');\nexport interface VisuallyHiddenInputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement> {}\n/**\n * @deprecated v5.4.0\n *\n * Компонент устарел и будет удален в v6. Используйте\n * `<VisuallyHidden Component=\"input\" />`\n */\nexport const VisuallyHiddenInput = ({\n getRef,\n className,\n ...restProps\n}: VisuallyHiddenInputProps) => {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Компонент устарел и будет удален в v6. Используйте https://vkcom.github.io/VKUI/#/VisuallyHidden',\n );\n }\n\n return (\n <input\n {...restProps}\n className={classNames(styles['VisuallyHiddenInput'], className)}\n ref={
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRef, HasRootRef } from '../../types';\nimport styles from './VisuallyHiddenInput.module.css';\n\nconst warn = warnOnce('VisuallyHiddenInput');\nexport interface VisuallyHiddenInputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLInputElement>,\n HasRef<HTMLInputElement> {}\n/**\n * @deprecated v5.4.0\n *\n * Компонент устарел и будет удален в v6. Используйте\n * `<VisuallyHidden Component=\"input\" />`\n */\nexport const VisuallyHiddenInput = ({\n getRef,\n className,\n getRootRef,\n ...restProps\n}: VisuallyHiddenInputProps) => {\n const visuallyHiddenInputRef = useExternRef(getRef, getRootRef);\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Компонент устарел и будет удален в v6. Используйте https://vkcom.github.io/VKUI/#/VisuallyHidden',\n );\n }\n\n return (\n <input\n {...restProps}\n className={classNames(styles['VisuallyHiddenInput'], className)}\n ref={visuallyHiddenInputRef}\n />\n );\n};\n"],"names":["React","classNames","useExternRef","warnOnce","styles","warn","VisuallyHiddenInput","getRef","className","getRootRef","restProps","visuallyHiddenInputRef","process","env","NODE_ENV","input","ref"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,QAAQ,QAAQ,qBAAqB;AAE9C,OAAOC,YAAY,mCAAmC;AAEtD,MAAMC,OAAOF,SAAS;AAKtB;;;;;CAKC,GACD,OAAO,MAAMG,sBAAsB,CAAC,EAClCC,MAAM,EACNC,SAAS,EACTC,UAAU,EACV,GAAGC,WACsB;IACzB,MAAMC,yBAAyBT,aAAaK,QAAQE;IACpD,IAAIG,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CT,KACE;IAEJ;IAEA,qBACE,oBAACU;QACE,GAAGL,SAAS;QACbF,WAAWP,WAAWG,MAAM,CAAC,sBAAsB,EAAEI;QACrDQ,KAAKL;;AAGX,EAAE"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { autoUpdate as autoUpdateLib, type AutoUpdateOptions, type FloatingElement, type ReferenceType } from '@floating-ui/react-dom';
|
|
1
|
+
import { autoUpdate as autoUpdateLib, type AutoUpdateOptions, type FloatingElement, type ReferenceType } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
2
2
|
export declare function autoUpdateFloatingElement(reference: ReferenceType, floating: FloatingElement, update: () => void, options?: Partial<AutoUpdateOptions>): ReturnType<typeof autoUpdateLib>;
|
|
3
3
|
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,aAAa,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,aAAa,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,uCAAuC,CAAC;AAY/C,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,IAAI,EAClB,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAkB,GACnD,UAAU,CAAC,OAAO,aAAa,CAAC,CA4ClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/adapters.ts"],"sourcesContent":["import {\n autoUpdate as autoUpdateLib,\n type AutoUpdateOptions,\n type FloatingElement,\n type ReferenceType,\n} from '@floating-ui/react-dom';\n\nconst defaultOptions = {\n ancestorScroll: true,\n ancestorResize: true,\n // По умолчанию отключаем, т.к. навешивать `MutationObserver` может быть дорого.\n // В `autoUpdateLib` по умолчанию опция включена. Там используется ResizeObserver, но и он не менее дорогостоящий.\n // https://github.com/floating-ui/floating-ui/blob/0a34fe9cc2c7483976785a71bd0777cd7c3f2a6a/packages/dom/src/autoUpdate.ts#L6-L33\n elementResize: false,\n animationFrame: false,\n};\n\nexport function autoUpdateFloatingElement(\n reference: ReferenceType,\n floating: FloatingElement,\n update: () => void,\n options: Partial<AutoUpdateOptions> = defaultOptions,\n): ReturnType<typeof autoUpdateLib> {\n const { elementResize = false, ...restOptions } = options;\n\n const autoUpdateLibDisposer = autoUpdateLib(reference, floating, update, {\n ...restOptions,\n // Отключаем в библиотеке, т.к. под капотом используется `ResizeObserver`, которое не покрывается нашим `browserlist`.\n // Вместо него мы используем `MutationObserver`.\n // https://caniuse.com/resizeobserver\n elementResize: false,\n });\n\n // В случае если `ResizeObserver` будет полифилиться или он будет покрываться нашим `browserlist`, то надо удалить\n // код с `MutationObserver`.\n let observer: MutationObserver | null = null;\n if (elementResize) {\n let initialUpdate = true;\n observer = new MutationObserver(() => {\n if (!initialUpdate) {\n update();\n }\n\n initialUpdate = false;\n });\n\n if (reference instanceof Element) {\n observer.observe(reference, {\n childList: true,\n subtree: true,\n });\n }\n\n observer.observe(floating, {\n childList: true,\n subtree: true,\n });\n }\n\n return () => {\n if (observer !== null) {\n observer.disconnect();\n observer = null;\n }\n autoUpdateLibDisposer();\n };\n}\n"],"names":["autoUpdate","autoUpdateLib","defaultOptions","ancestorScroll","ancestorResize","elementResize","animationFrame","autoUpdateFloatingElement","reference","floating","update","options","restOptions","autoUpdateLibDisposer","observer","initialUpdate","MutationObserver","Element","observe","childList","subtree","disconnect"],"mappings":"AAAA,SACEA,cAAcC,aAAa,QAItB,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/adapters.ts"],"sourcesContent":["import {\n autoUpdate as autoUpdateLib,\n type AutoUpdateOptions,\n type FloatingElement,\n type ReferenceType,\n} from '@vkontakte/vkui-floating-ui/react-dom';\n\nconst defaultOptions = {\n ancestorScroll: true,\n ancestorResize: true,\n // По умолчанию отключаем, т.к. навешивать `MutationObserver` может быть дорого.\n // В `autoUpdateLib` по умолчанию опция включена. Там используется ResizeObserver, но и он не менее дорогостоящий.\n // https://github.com/floating-ui/floating-ui/blob/0a34fe9cc2c7483976785a71bd0777cd7c3f2a6a/packages/dom/src/autoUpdate.ts#L6-L33\n elementResize: false,\n animationFrame: false,\n};\n\nexport function autoUpdateFloatingElement(\n reference: ReferenceType,\n floating: FloatingElement,\n update: () => void,\n options: Partial<AutoUpdateOptions> = defaultOptions,\n): ReturnType<typeof autoUpdateLib> {\n const { elementResize = false, ...restOptions } = options;\n\n const autoUpdateLibDisposer = autoUpdateLib(reference, floating, update, {\n ...restOptions,\n // Отключаем в библиотеке, т.к. под капотом используется `ResizeObserver`, которое не покрывается нашим `browserlist`.\n // Вместо него мы используем `MutationObserver`.\n // https://caniuse.com/resizeobserver\n elementResize: false,\n });\n\n // В случае если `ResizeObserver` будет полифилиться или он будет покрываться нашим `browserlist`, то надо удалить\n // код с `MutationObserver`.\n let observer: MutationObserver | null = null;\n if (elementResize) {\n let initialUpdate = true;\n observer = new MutationObserver(() => {\n if (!initialUpdate) {\n update();\n }\n\n initialUpdate = false;\n });\n\n if (reference instanceof Element) {\n observer.observe(reference, {\n childList: true,\n subtree: true,\n });\n }\n\n observer.observe(floating, {\n childList: true,\n subtree: true,\n });\n }\n\n return () => {\n if (observer !== null) {\n observer.disconnect();\n observer = null;\n }\n autoUpdateLibDisposer();\n };\n}\n"],"names":["autoUpdate","autoUpdateLib","defaultOptions","ancestorScroll","ancestorResize","elementResize","animationFrame","autoUpdateFloatingElement","reference","floating","update","options","restOptions","autoUpdateLibDisposer","observer","initialUpdate","MutationObserver","Element","observe","childList","subtree","disconnect"],"mappings":"AAAA,SACEA,cAAcC,aAAa,QAItB,wCAAwC;AAE/C,MAAMC,iBAAiB;IACrBC,gBAAgB;IAChBC,gBAAgB;IAChB,gFAAgF;IAChF,kHAAkH;IAClH,iIAAiI;IACjIC,eAAe;IACfC,gBAAgB;AAClB;AAEA,OAAO,SAASC,0BACdC,SAAwB,EACxBC,QAAyB,EACzBC,MAAkB,EAClBC,UAAsCT,cAAc;IAEpD,MAAM,EAAEG,gBAAgB,KAAK,EAAE,GAAGO,aAAa,GAAGD;IAElD,MAAME,wBAAwBZ,cAAcO,WAAWC,UAAUC,QAAQ;QACvE,GAAGE,WAAW;QACd,sHAAsH;QACtH,gDAAgD;QAChD,qCAAqC;QACrCP,eAAe;IACjB;IAEA,kHAAkH;IAClH,4BAA4B;IAC5B,IAAIS,WAAoC;IACxC,IAAIT,eAAe;QACjB,IAAIU,gBAAgB;QACpBD,WAAW,IAAIE,iBAAiB;YAC9B,IAAI,CAACD,eAAe;gBAClBL;YACF;YAEAK,gBAAgB;QAClB;QAEA,IAAIP,qBAAqBS,SAAS;YAChCH,SAASI,OAAO,CAACV,WAAW;gBAC1BW,WAAW;gBACXC,SAAS;YACX;QACF;QAEAN,SAASI,OAAO,CAACT,UAAU;YACzBU,WAAW;YACXC,SAAS;QACX;IACF;IAEA,OAAO;QACL,IAAIN,aAAa,MAAM;YACrBA,SAASO,UAAU;YACnBP,WAAW;QACb;QACAD;IACF;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors, } from '@floating-ui/react-dom';
|
|
1
|
+
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors, } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
2
2
|
export type { Placement, PlacementWithAuto, AutoPlacementType, UseFloatingMiddleware, } from './types';
|
|
3
3
|
export { checkIsNotAutoPlacement, getAutoPlacementAlign, convertFloatingDataToReactCSSProperties, } from './functions';
|
|
4
4
|
export { autoUpdateFloatingElement } from './adapters';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,MAAM,IAAI,gBAAgB,EAC1B,IAAI,IAAI,cAAc,EACtB,KAAK,IAAI,eAAe,EACxB,aAAa,IAAI,uBAAuB,EACxC,KAAK,IAAI,eAAe,EACxB,IAAI,IAAI,cAAc,EACtB,IAAI,IAAI,cAAc,EACtB,oBAAoB,GACrB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,MAAM,IAAI,gBAAgB,EAC1B,IAAI,IAAI,cAAc,EACtB,KAAK,IAAI,eAAe,EACxB,aAAa,IAAI,uBAAuB,EACxC,KAAK,IAAI,eAAe,EACxB,IAAI,IAAI,cAAc,EACtB,IAAI,IAAI,cAAc,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAE/C,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uCAAuC,GACxC,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors } from '@floating-ui/react-dom';
|
|
1
|
+
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
2
2
|
export { checkIsNotAutoPlacement, getAutoPlacementAlign, convertFloatingDataToReactCSSProperties } from './functions';
|
|
3
3
|
export { autoUpdateFloatingElement } from './adapters';
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/index.ts"],"sourcesContent":["export {\n useFloating,\n offset as offsetMiddleware,\n flip as flipMiddleware,\n shift as shiftMiddleware,\n autoPlacement as autoPlacementMiddleware,\n arrow as arrowMiddleware,\n size as sizeMiddleware,\n hide as hideMiddleware,\n getOverflowAncestors,\n} from '@floating-ui/react-dom';\n\nexport type {\n Placement,\n PlacementWithAuto,\n AutoPlacementType,\n UseFloatingMiddleware,\n} from './types';\n\nexport {\n checkIsNotAutoPlacement,\n getAutoPlacementAlign,\n convertFloatingDataToReactCSSProperties,\n} from './functions';\n\nexport { autoUpdateFloatingElement } from './adapters';\n"],"names":["useFloating","offset","offsetMiddleware","flip","flipMiddleware","shift","shiftMiddleware","autoPlacement","autoPlacementMiddleware","arrow","arrowMiddleware","size","sizeMiddleware","hide","hideMiddleware","getOverflowAncestors","checkIsNotAutoPlacement","getAutoPlacementAlign","convertFloatingDataToReactCSSProperties","autoUpdateFloatingElement"],"mappings":"AAAA,SACEA,WAAW,EACXC,UAAUC,gBAAgB,EAC1BC,QAAQC,cAAc,EACtBC,SAASC,eAAe,EACxBC,iBAAiBC,uBAAuB,EACxCC,SAASC,eAAe,EACxBC,QAAQC,cAAc,EACtBC,QAAQC,cAAc,EACtBC,oBAAoB,QACf,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/index.ts"],"sourcesContent":["export {\n useFloating,\n offset as offsetMiddleware,\n flip as flipMiddleware,\n shift as shiftMiddleware,\n autoPlacement as autoPlacementMiddleware,\n arrow as arrowMiddleware,\n size as sizeMiddleware,\n hide as hideMiddleware,\n getOverflowAncestors,\n} from '@vkontakte/vkui-floating-ui/react-dom';\n\nexport type {\n Placement,\n PlacementWithAuto,\n AutoPlacementType,\n UseFloatingMiddleware,\n} from './types';\n\nexport {\n checkIsNotAutoPlacement,\n getAutoPlacementAlign,\n convertFloatingDataToReactCSSProperties,\n} from './functions';\n\nexport { autoUpdateFloatingElement } from './adapters';\n"],"names":["useFloating","offset","offsetMiddleware","flip","flipMiddleware","shift","shiftMiddleware","autoPlacement","autoPlacementMiddleware","arrow","arrowMiddleware","size","sizeMiddleware","hide","hideMiddleware","getOverflowAncestors","checkIsNotAutoPlacement","getAutoPlacementAlign","convertFloatingDataToReactCSSProperties","autoUpdateFloatingElement"],"mappings":"AAAA,SACEA,WAAW,EACXC,UAAUC,gBAAgB,EAC1BC,QAAQC,cAAc,EACtBC,SAASC,eAAe,EACxBC,iBAAiBC,uBAAuB,EACxCC,SAASC,eAAe,EACxBC,QAAQC,cAAc,EACtBC,QAAQC,cAAc,EACtBC,oBAAoB,QACf,wCAAwC;AAS/C,SACEC,uBAAuB,EACvBC,qBAAqB,EACrBC,uCAAuC,QAClC,cAAc;AAErB,SAASC,yBAAyB,QAAQ,aAAa"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Placement } from '@floating-ui/react-dom';
|
|
1
|
+
import type { Placement } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
2
2
|
export type AutoPlacementType = 'auto' | 'auto-start' | 'auto-end';
|
|
3
3
|
export type PlacementWithAuto = AutoPlacementType | Placement;
|
|
4
|
-
export type { Placement, Middleware as UseFloatingMiddleware, UseFloatingData, Strategy as FloatingPositionStrategy, } from '@floating-ui/react-dom';
|
|
4
|
+
export type { Placement, Middleware as UseFloatingMiddleware, UseFloatingData, Strategy as FloatingPositionStrategy, } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
5
5
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAE9D,YAAY,EACV,SAAS,EACT,UAAU,IAAI,qBAAqB,EACnC,eAAe,EACf,QAAQ,IAAI,wBAAwB,GACrC,MAAM,uCAAuC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/types.ts"],"sourcesContent":["import type { Placement } from '@floating-ui/react-dom';\n\nexport type AutoPlacementType = 'auto' | 'auto-start' | 'auto-end';\n\nexport type PlacementWithAuto = AutoPlacementType | Placement;\n\nexport type {\n Placement,\n Middleware as UseFloatingMiddleware,\n UseFloatingData,\n Strategy as FloatingPositionStrategy,\n} from '@floating-ui/react-dom';\n"],"names":[],"mappings":"AAMA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/types.ts"],"sourcesContent":["import type { Placement } from '@vkontakte/vkui-floating-ui/react-dom';\n\nexport type AutoPlacementType = 'auto' | 'auto-start' | 'auto-end';\n\nexport type PlacementWithAuto = AutoPlacementType | Placement;\n\nexport type {\n Placement,\n Middleware as UseFloatingMiddleware,\n UseFloatingData,\n Strategy as FloatingPositionStrategy,\n} from '@vkontakte/vkui-floating-ui/react-dom';\n"],"names":[],"mappings":"AAMA,WAK+C"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { autoUpdate as autoUpdateLib, type AutoUpdateOptions, type FloatingElement, type ReferenceType } from '@floating-ui/react-dom';
|
|
1
|
+
import { autoUpdate as autoUpdateLib, type AutoUpdateOptions, type FloatingElement, type ReferenceType } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
2
2
|
export declare function autoUpdateFloatingElement(reference: ReferenceType, floating: FloatingElement, update: () => void, options?: Partial<AutoUpdateOptions>): ReturnType<typeof autoUpdateLib>;
|
|
3
3
|
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,aAAa,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,aAAa,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,uCAAuC,CAAC;AAY/C,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,IAAI,EAClB,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAkB,GACnD,UAAU,CAAC,OAAO,aAAa,CAAC,CA4ClC"}
|
|
@@ -2,7 +2,7 @@ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
|
2
2
|
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
3
3
|
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
4
4
|
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
|
|
5
|
-
import { autoUpdate as autoUpdateLib } from "@floating-ui/react-dom";
|
|
5
|
+
import { autoUpdate as autoUpdateLib } from "@vkontakte/vkui-floating-ui/react-dom";
|
|
6
6
|
var defaultOptions = {
|
|
7
7
|
ancestorScroll: true,
|
|
8
8
|
ancestorResize: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/floating/adapters.ts"],"sourcesContent":["import {\n autoUpdate as autoUpdateLib,\n type AutoUpdateOptions,\n type FloatingElement,\n type ReferenceType,\n} from '@floating-ui/react-dom';\n\nconst defaultOptions = {\n ancestorScroll: true,\n ancestorResize: true,\n // По умолчанию отключаем, т.к. навешивать `MutationObserver` может быть дорого.\n // В `autoUpdateLib` по умолчанию опция включена. Там используется ResizeObserver, но и он не менее дорогостоящий.\n // https://github.com/floating-ui/floating-ui/blob/0a34fe9cc2c7483976785a71bd0777cd7c3f2a6a/packages/dom/src/autoUpdate.ts#L6-L33\n elementResize: false,\n animationFrame: false,\n};\n\nexport function autoUpdateFloatingElement(\n reference: ReferenceType,\n floating: FloatingElement,\n update: () => void,\n options: Partial<AutoUpdateOptions> = defaultOptions,\n): ReturnType<typeof autoUpdateLib> {\n const { elementResize = false, ...restOptions } = options;\n\n const autoUpdateLibDisposer = autoUpdateLib(reference, floating, update, {\n ...restOptions,\n // Отключаем в библиотеке, т.к. под капотом используется `ResizeObserver`, которое не покрывается нашим `browserlist`.\n // Вместо него мы используем `MutationObserver`.\n // https://caniuse.com/resizeobserver\n elementResize: false,\n });\n\n // В случае если `ResizeObserver` будет полифилиться или он будет покрываться нашим `browserlist`, то надо удалить\n // код с `MutationObserver`.\n let observer: MutationObserver | null = null;\n if (elementResize) {\n let initialUpdate = true;\n observer = new MutationObserver(() => {\n if (!initialUpdate) {\n update();\n }\n\n initialUpdate = false;\n });\n\n if (reference instanceof Element) {\n observer.observe(reference, {\n childList: true,\n subtree: true,\n });\n }\n\n observer.observe(floating, {\n childList: true,\n subtree: true,\n });\n }\n\n return () => {\n if (observer !== null) {\n observer.disconnect();\n observer = null;\n }\n autoUpdateLibDisposer();\n };\n}\n"],"names":["autoUpdate","autoUpdateLib","defaultOptions","ancestorScroll","ancestorResize","elementResize","animationFrame","autoUpdateFloatingElement","reference","floating","update","options","restOptions","autoUpdateLibDisposer","observer","initialUpdate","MutationObserver","Element","observe","childList","subtree","disconnect"],"mappings":";;;;AAAA,SACEA,cAAcC,aAAa,QAItB,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/floating/adapters.ts"],"sourcesContent":["import {\n autoUpdate as autoUpdateLib,\n type AutoUpdateOptions,\n type FloatingElement,\n type ReferenceType,\n} from '@vkontakte/vkui-floating-ui/react-dom';\n\nconst defaultOptions = {\n ancestorScroll: true,\n ancestorResize: true,\n // По умолчанию отключаем, т.к. навешивать `MutationObserver` может быть дорого.\n // В `autoUpdateLib` по умолчанию опция включена. Там используется ResizeObserver, но и он не менее дорогостоящий.\n // https://github.com/floating-ui/floating-ui/blob/0a34fe9cc2c7483976785a71bd0777cd7c3f2a6a/packages/dom/src/autoUpdate.ts#L6-L33\n elementResize: false,\n animationFrame: false,\n};\n\nexport function autoUpdateFloatingElement(\n reference: ReferenceType,\n floating: FloatingElement,\n update: () => void,\n options: Partial<AutoUpdateOptions> = defaultOptions,\n): ReturnType<typeof autoUpdateLib> {\n const { elementResize = false, ...restOptions } = options;\n\n const autoUpdateLibDisposer = autoUpdateLib(reference, floating, update, {\n ...restOptions,\n // Отключаем в библиотеке, т.к. под капотом используется `ResizeObserver`, которое не покрывается нашим `browserlist`.\n // Вместо него мы используем `MutationObserver`.\n // https://caniuse.com/resizeobserver\n elementResize: false,\n });\n\n // В случае если `ResizeObserver` будет полифилиться или он будет покрываться нашим `browserlist`, то надо удалить\n // код с `MutationObserver`.\n let observer: MutationObserver | null = null;\n if (elementResize) {\n let initialUpdate = true;\n observer = new MutationObserver(() => {\n if (!initialUpdate) {\n update();\n }\n\n initialUpdate = false;\n });\n\n if (reference instanceof Element) {\n observer.observe(reference, {\n childList: true,\n subtree: true,\n });\n }\n\n observer.observe(floating, {\n childList: true,\n subtree: true,\n });\n }\n\n return () => {\n if (observer !== null) {\n observer.disconnect();\n observer = null;\n }\n autoUpdateLibDisposer();\n };\n}\n"],"names":["autoUpdate","autoUpdateLib","defaultOptions","ancestorScroll","ancestorResize","elementResize","animationFrame","autoUpdateFloatingElement","reference","floating","update","options","restOptions","autoUpdateLibDisposer","observer","initialUpdate","MutationObserver","Element","observe","childList","subtree","disconnect"],"mappings":";;;;AAAA,SACEA,cAAcC,aAAa,QAItB,wCAAwC;AAE/C,IAAMC,iBAAiB;IACrBC,gBAAgB;IAChBC,gBAAgB;IAChB,gFAAgF;IAChF,kHAAkH;IAClH,iIAAiI;IACjIC,eAAe;IACfC,gBAAgB;AAClB;AAEA,OAAO,SAASC,0BACdC,SAAwB,EACxBC,QAAyB,EACzBC,MAAkB;QAClBC,UAAAA,iEAAsCT;IAEtC,6BAAkDS,QAA1CN,eAAAA,oDAAgB,gCAAUO,yCAAgBD;QAA1CN;;IAER,IAAMQ,wBAAwBZ,cAAcO,WAAWC,UAAUC,QAAQ,wCACpEE;QACH,sHAAsH;QACtH,gDAAgD;QAChD,qCAAqC;QACrCP,eAAe;;IAGjB,kHAAkH;IAClH,4BAA4B;IAC5B,IAAIS,WAAoC;IACxC,IAAIT,eAAe;QACjB,IAAIU,gBAAgB;QACpBD,WAAW,IAAIE,iBAAiB;YAC9B,IAAI,CAACD,eAAe;gBAClBL;YACF;YAEAK,gBAAgB;QAClB;QAEA,IAAIP,AAAS,YAATA,WAAqBS,UAAS;YAChCH,SAASI,OAAO,CAACV,WAAW;gBAC1BW,WAAW;gBACXC,SAAS;YACX;QACF;QAEAN,SAASI,OAAO,CAACT,UAAU;YACzBU,WAAW;YACXC,SAAS;QACX;IACF;IAEA,OAAO;QACL,IAAIN,aAAa,MAAM;YACrBA,SAASO,UAAU;YACnBP,WAAW;QACb;QACAD;IACF;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors, } from '@floating-ui/react-dom';
|
|
1
|
+
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors, } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
2
2
|
export type { Placement, PlacementWithAuto, AutoPlacementType, UseFloatingMiddleware, } from './types';
|
|
3
3
|
export { checkIsNotAutoPlacement, getAutoPlacementAlign, convertFloatingDataToReactCSSProperties, } from './functions';
|
|
4
4
|
export { autoUpdateFloatingElement } from './adapters';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,MAAM,IAAI,gBAAgB,EAC1B,IAAI,IAAI,cAAc,EACtB,KAAK,IAAI,eAAe,EACxB,aAAa,IAAI,uBAAuB,EACxC,KAAK,IAAI,eAAe,EACxB,IAAI,IAAI,cAAc,EACtB,IAAI,IAAI,cAAc,EACtB,oBAAoB,GACrB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,MAAM,IAAI,gBAAgB,EAC1B,IAAI,IAAI,cAAc,EACtB,KAAK,IAAI,eAAe,EACxB,aAAa,IAAI,uBAAuB,EACxC,KAAK,IAAI,eAAe,EACxB,IAAI,IAAI,cAAc,EACtB,IAAI,IAAI,cAAc,EACtB,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAE/C,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uCAAuC,GACxC,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors } from "@floating-ui/react-dom";
|
|
1
|
+
export { useFloating, offset as offsetMiddleware, flip as flipMiddleware, shift as shiftMiddleware, autoPlacement as autoPlacementMiddleware, arrow as arrowMiddleware, size as sizeMiddleware, hide as hideMiddleware, getOverflowAncestors } from "@vkontakte/vkui-floating-ui/react-dom";
|
|
2
2
|
export { checkIsNotAutoPlacement, getAutoPlacementAlign, convertFloatingDataToReactCSSProperties } from "./functions";
|
|
3
3
|
export { autoUpdateFloatingElement } from "./adapters";
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/floating/index.ts"],"sourcesContent":["export {\n useFloating,\n offset as offsetMiddleware,\n flip as flipMiddleware,\n shift as shiftMiddleware,\n autoPlacement as autoPlacementMiddleware,\n arrow as arrowMiddleware,\n size as sizeMiddleware,\n hide as hideMiddleware,\n getOverflowAncestors,\n} from '@floating-ui/react-dom';\n\nexport type {\n Placement,\n PlacementWithAuto,\n AutoPlacementType,\n UseFloatingMiddleware,\n} from './types';\n\nexport {\n checkIsNotAutoPlacement,\n getAutoPlacementAlign,\n convertFloatingDataToReactCSSProperties,\n} from './functions';\n\nexport { autoUpdateFloatingElement } from './adapters';\n"],"names":["useFloating","offset","offsetMiddleware","flip","flipMiddleware","shift","shiftMiddleware","autoPlacement","autoPlacementMiddleware","arrow","arrowMiddleware","size","sizeMiddleware","hide","hideMiddleware","getOverflowAncestors","checkIsNotAutoPlacement","getAutoPlacementAlign","convertFloatingDataToReactCSSProperties","autoUpdateFloatingElement"],"mappings":"AAAA,SACEA,WAAW,EACXC,UAAUC,gBAAgB,EAC1BC,QAAQC,cAAc,EACtBC,SAASC,eAAe,EACxBC,iBAAiBC,uBAAuB,EACxCC,SAASC,eAAe,EACxBC,QAAQC,cAAc,EACtBC,QAAQC,cAAc,EACtBC,oBAAoB,QACf,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/floating/index.ts"],"sourcesContent":["export {\n useFloating,\n offset as offsetMiddleware,\n flip as flipMiddleware,\n shift as shiftMiddleware,\n autoPlacement as autoPlacementMiddleware,\n arrow as arrowMiddleware,\n size as sizeMiddleware,\n hide as hideMiddleware,\n getOverflowAncestors,\n} from '@vkontakte/vkui-floating-ui/react-dom';\n\nexport type {\n Placement,\n PlacementWithAuto,\n AutoPlacementType,\n UseFloatingMiddleware,\n} from './types';\n\nexport {\n checkIsNotAutoPlacement,\n getAutoPlacementAlign,\n convertFloatingDataToReactCSSProperties,\n} from './functions';\n\nexport { autoUpdateFloatingElement } from './adapters';\n"],"names":["useFloating","offset","offsetMiddleware","flip","flipMiddleware","shift","shiftMiddleware","autoPlacement","autoPlacementMiddleware","arrow","arrowMiddleware","size","sizeMiddleware","hide","hideMiddleware","getOverflowAncestors","checkIsNotAutoPlacement","getAutoPlacementAlign","convertFloatingDataToReactCSSProperties","autoUpdateFloatingElement"],"mappings":"AAAA,SACEA,WAAW,EACXC,UAAUC,gBAAgB,EAC1BC,QAAQC,cAAc,EACtBC,SAASC,eAAe,EACxBC,iBAAiBC,uBAAuB,EACxCC,SAASC,eAAe,EACxBC,QAAQC,cAAc,EACtBC,QAAQC,cAAc,EACtBC,oBAAoB,QACf,wCAAwC;AAS/C,SACEC,uBAAuB,EACvBC,qBAAqB,EACrBC,uCAAuC,QAClC,cAAc;AAErB,SAASC,yBAAyB,QAAQ,aAAa"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Placement } from '@floating-ui/react-dom';
|
|
1
|
+
import type { Placement } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
2
2
|
export type AutoPlacementType = 'auto' | 'auto-start' | 'auto-end';
|
|
3
3
|
export type PlacementWithAuto = AutoPlacementType | Placement;
|
|
4
|
-
export type { Placement, Middleware as UseFloatingMiddleware, UseFloatingData, Strategy as FloatingPositionStrategy, } from '@floating-ui/react-dom';
|
|
4
|
+
export type { Placement, Middleware as UseFloatingMiddleware, UseFloatingData, Strategy as FloatingPositionStrategy, } from '@vkontakte/vkui-floating-ui/react-dom';
|
|
5
5
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAEvE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAE9D,YAAY,EACV,SAAS,EACT,UAAU,IAAI,qBAAqB,EACnC,eAAe,EACf,QAAQ,IAAI,wBAAwB,GACrC,MAAM,uCAAuC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/floating/types.ts"],"sourcesContent":["import type { Placement } from '@floating-ui/react-dom';\n\nexport type AutoPlacementType = 'auto' | 'auto-start' | 'auto-end';\n\nexport type PlacementWithAuto = AutoPlacementType | Placement;\n\nexport type {\n Placement,\n Middleware as UseFloatingMiddleware,\n UseFloatingData,\n Strategy as FloatingPositionStrategy,\n} from '@floating-ui/react-dom';\n"],"names":[],"mappings":"AAMA,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/floating/types.ts"],"sourcesContent":["import type { Placement } from '@vkontakte/vkui-floating-ui/react-dom';\n\nexport type AutoPlacementType = 'auto' | 'auto-start' | 'auto-end';\n\nexport type PlacementWithAuto = AutoPlacementType | Placement;\n\nexport type {\n Placement,\n Middleware as UseFloatingMiddleware,\n UseFloatingData,\n Strategy as FloatingPositionStrategy,\n} from '@vkontakte/vkui-floating-ui/react-dom';\n"],"names":[],"mappings":"AAMA,WAK+C"}
|