@vkontakte/vkui 5.9.4 → 5.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/cjs/components/ConfigProvider/ConfigProvider.d.ts +1 -1
  2. package/dist/cjs/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  3. package/dist/cjs/components/ConfigProvider/ConfigProvider.js +2 -1
  4. package/dist/cjs/components/ConfigProvider/ConfigProvider.js.map +1 -1
  5. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +9 -8
  6. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  7. package/dist/cjs/components/CustomSelect/CustomSelect.js +2 -1
  8. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  9. package/dist/cjs/components/ModalCard/ModalCard.d.ts +1 -1
  10. package/dist/cjs/components/ModalCard/ModalCard.d.ts.map +1 -1
  11. package/dist/cjs/components/ModalCard/ModalCard.js +17 -2
  12. package/dist/cjs/components/ModalCard/ModalCard.js.map +1 -1
  13. package/dist/cjs/components/ModalPage/ModalPage.d.ts +1 -1
  14. package/dist/cjs/components/ModalPage/ModalPage.d.ts.map +1 -1
  15. package/dist/cjs/components/ModalPage/ModalPage.js +7 -2
  16. package/dist/cjs/components/ModalPage/ModalPage.js.map +1 -1
  17. package/dist/cjs/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  18. package/dist/cjs/components/ModalRoot/ModalRoot.js +16 -11
  19. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  20. package/dist/cjs/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  21. package/dist/cjs/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
  22. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js +16 -9
  23. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  24. package/dist/cjs/components/ModalRoot/types.d.ts +4 -0
  25. package/dist/cjs/components/ModalRoot/types.d.ts.map +1 -1
  26. package/dist/cjs/components/ModalRoot/types.js.map +1 -1
  27. package/dist/cjs/components/Select/Select.d.ts +2 -2
  28. package/dist/cjs/components/Select/Select.d.ts.map +1 -1
  29. package/dist/cjs/components/Select/Select.js.map +1 -1
  30. package/dist/cjs/index.d.ts +3 -3
  31. package/dist/cjs/index.d.ts.map +1 -1
  32. package/dist/cjs/index.js +1 -1
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/lib/select.d.ts +2 -7
  35. package/dist/cjs/lib/select.d.ts.map +1 -1
  36. package/dist/cjs/lib/select.js.map +1 -1
  37. package/dist/cjs/lib/utils.d.ts +5 -0
  38. package/dist/cjs/lib/utils.d.ts.map +1 -1
  39. package/dist/cjs/lib/utils.js +12 -0
  40. package/dist/cjs/lib/utils.js.map +1 -1
  41. package/dist/components/ConfigProvider/ConfigProvider.d.ts +1 -1
  42. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  43. package/dist/components/ConfigProvider/ConfigProvider.js +3 -2
  44. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  45. package/dist/components/CustomSelect/CustomSelect.d.ts +9 -8
  46. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  47. package/dist/components/CustomSelect/CustomSelect.js +2 -1
  48. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  49. package/dist/components/ModalCard/ModalCard.d.ts +1 -1
  50. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  51. package/dist/components/ModalCard/ModalCard.js +17 -2
  52. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  53. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  54. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  55. package/dist/components/ModalPage/ModalPage.js +7 -2
  56. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  57. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  58. package/dist/components/ModalRoot/ModalRoot.js +16 -11
  59. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  60. package/dist/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  61. package/dist/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
  62. package/dist/components/ModalRoot/ModalRootDesktop.js +16 -9
  63. package/dist/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  64. package/dist/components/ModalRoot/types.d.ts +4 -0
  65. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  66. package/dist/components/ModalRoot/types.js.map +1 -1
  67. package/dist/components/Select/Select.d.ts +2 -2
  68. package/dist/components/Select/Select.d.ts.map +1 -1
  69. package/dist/components/Select/Select.js.map +1 -1
  70. package/dist/components.css +3 -3
  71. package/dist/components.css.map +1 -1
  72. package/dist/components.js.tmp +581 -535
  73. package/dist/cssm/components/ConfigProvider/ConfigProvider.d.ts +1 -1
  74. package/dist/cssm/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  75. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +3 -2
  76. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  77. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +9 -8
  78. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  79. package/dist/cssm/components/CustomSelect/CustomSelect.js +1 -1
  80. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  81. package/dist/cssm/components/ModalCard/ModalCard.d.ts +1 -1
  82. package/dist/cssm/components/ModalCard/ModalCard.d.ts.map +1 -1
  83. package/dist/cssm/components/ModalCard/ModalCard.js +13 -1
  84. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  85. package/dist/cssm/components/ModalCard/ModalCard.module.css +4 -0
  86. package/dist/cssm/components/ModalPage/ModalPage.d.ts +1 -1
  87. package/dist/cssm/components/ModalPage/ModalPage.d.ts.map +1 -1
  88. package/dist/cssm/components/ModalPage/ModalPage.js +5 -1
  89. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  90. package/dist/cssm/components/ModalPage/ModalPage.module.css +4 -0
  91. package/dist/cssm/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  92. package/dist/cssm/components/ModalRoot/ModalRoot.js +12 -11
  93. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  94. package/dist/cssm/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  95. package/dist/cssm/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
  96. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +14 -8
  97. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  98. package/dist/cssm/components/ModalRoot/types.d.ts +4 -0
  99. package/dist/cssm/components/ModalRoot/types.d.ts.map +1 -1
  100. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  101. package/dist/cssm/components/Select/Select.d.ts +2 -2
  102. package/dist/cssm/components/Select/Select.d.ts.map +1 -1
  103. package/dist/cssm/components/Select/Select.js.map +1 -1
  104. package/dist/cssm/index.d.ts +3 -3
  105. package/dist/cssm/index.d.ts.map +1 -1
  106. package/dist/cssm/index.js +1 -1
  107. package/dist/cssm/index.js.map +1 -1
  108. package/dist/cssm/lib/select.d.ts +2 -7
  109. package/dist/cssm/lib/select.d.ts.map +1 -1
  110. package/dist/cssm/lib/select.js.map +1 -1
  111. package/dist/cssm/lib/utils.d.ts +5 -0
  112. package/dist/cssm/lib/utils.d.ts.map +1 -1
  113. package/dist/cssm/lib/utils.js +9 -0
  114. package/dist/cssm/lib/utils.js.map +1 -1
  115. package/dist/index.d.ts +3 -3
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +1 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/lib/select.d.ts +2 -7
  120. package/dist/lib/select.d.ts.map +1 -1
  121. package/dist/lib/select.js.map +1 -1
  122. package/dist/lib/utils.d.ts +5 -0
  123. package/dist/lib/utils.d.ts.map +1 -1
  124. package/dist/lib/utils.js +9 -0
  125. package/dist/lib/utils.js.map +1 -1
  126. package/dist/vkui.css +3 -3
  127. package/dist/vkui.css.map +1 -1
  128. package/dist/vkui.js.tmp +581 -535
  129. package/package.json +1 -1
  130. package/src/components/ConfigProvider/ConfigProvider.tsx +7 -2
  131. package/src/components/CustomSelect/CustomSelect.tsx +33 -26
  132. package/src/components/ModalCard/ModalCard.module.css +4 -0
  133. package/src/components/ModalCard/ModalCard.tsx +10 -0
  134. package/src/components/ModalPage/ModalPage.module.css +4 -0
  135. package/src/components/ModalPage/ModalPage.tsx +5 -0
  136. package/src/components/ModalRoot/ModalRoot.tsx +18 -11
  137. package/src/components/ModalRoot/ModalRootDesktop.tsx +16 -11
  138. package/src/components/ModalRoot/types.ts +4 -0
  139. package/src/components/Select/Select.tsx +9 -2
  140. package/src/index.ts +3 -2
  141. package/src/lib/select.ts +5 -5
  142. package/src/lib/utils.ts +16 -0
@@ -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 // восстанавливаем значение overscroll behavior\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.remove('vkui--disable-overscroll-behavior');\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 // отключаем нативный pull-to-refresh при открытом модальном окне\n // чтобы он не срабатывал при закрытии модалки смахиванием вниз\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.add('vkui--disable-overscroll-behavior');\n\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","warn","numberInRange","number","range","rangeTranslate","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","PAGE","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","modalOpenedLog","registerModal","id","data","Object","assign","onClose","onExit","isInsideModal","timeout","platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeElement","focus","enabled","documentElement","classList","remove","passive","add","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","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","Component","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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"}
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 enteringState = this.props.getModalState(this.props.enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState) {\n if (enteringState.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.onEntered(enteringState);\n }\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 // восстанавливаем значение overscroll behavior\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.remove('vkui--disable-overscroll-behavior');\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 // отключаем нативный pull-to-refresh при открытом модальном окне\n // чтобы он не срабатывал при закрытии модалки смахиванием вниз\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.add('vkui--disable-overscroll-behavior');\n\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 onEntered({ id, modalElement }: ModalsStateEntry) {\n if (\n !this.props.noFocusToDialog &&\n modalElement &&\n !modalElement.contains(this.document.activeElement)\n ) {\n modalElement.focus();\n }\n\n this.props.onEntered(id);\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 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","warn","numberInRange","number","range","rangeTranslate","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","PAGE","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","modalOpenedLog","registerModal","id","data","Object","assign","onClose","onExit","isInsideModal","timeout","platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeElement","focus","enabled","documentElement","classList","remove","passive","add","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","noFocusToDialog","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","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","restoreFocus","Component","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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"}
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import { ModalRootWithDOMProps } from './types';
3
- export declare const ModalRootDesktop: ({ activeModal: activeModalProp, children, onOpen, onOpened, onClose, onClosed, }: ModalRootWithDOMProps) => React.JSX.Element | null;
3
+ export declare const ModalRootDesktop: ({ activeModal: activeModalProp, children, noFocusToDialog, onOpen, onOpened, onClose, onClosed, }: ModalRootWithDOMProps) => React.JSX.Element | null;
4
4
  //# sourceMappingURL=ModalRootDesktop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModalRootDesktop.d.ts","sourceRoot":"","sources":["../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,EAAE,qBAAqB,EAAoB,MAAM,SAAS,CAAC;AAMlE,eAAO,MAAM,gBAAgB,qFAO1B,qBAAqB,6BA+LvB,CAAC"}
1
+ {"version":3,"file":"ModalRootDesktop.d.ts","sourceRoot":"","sources":["../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,EAAE,qBAAqB,EAAoB,MAAM,SAAS,CAAC;AAMlE,eAAO,MAAM,gBAAgB,sGAQ1B,qBAAqB,6BAmMvB,CAAC"}
@@ -15,13 +15,13 @@ import { ModalRootContext } from "./ModalRootContext";
15
15
  import { useModalManager } from "./useModalManager";
16
16
  var warn = warnOnce("ModalRoot");
17
17
  export var ModalRootDesktop = function(param) {
18
- var activeModalProp = param.activeModal, children = param.children, onOpen = param.onOpen, onOpened = param.onOpened, onClose = param.onClose, onClosed = param.onClosed;
18
+ var activeModalProp = param.activeModal, children = param.children, _param_noFocusToDialog = param.noFocusToDialog, noFocusToDialog = _param_noFocusToDialog === void 0 ? false : _param_noFocusToDialog, onOpen = param.onOpen, onOpened = param.onOpened, onClose = param.onClose, onClosed = param.onClosed;
19
19
  var maskElementRef = React.useRef(null);
20
20
  var maskAnimationFrame = React.useRef(undefined);
21
21
  var restoreFocusTo = React.useRef(undefined);
22
22
  var document = useDOM().document;
23
23
  var _useConfigProvider = useConfigProvider(), hasCustomPanelHeaderAfter = _useConfigProvider.hasCustomPanelHeaderAfter, platform = _useConfigProvider.platform;
24
- var _useModalManager = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop), activeModal = _useModalManager.activeModal, exitingModal = _useModalManager.exitingModal, onExit = _useModalManager.onExit, getModalState = _useModalManager.getModalState, enteringModal = _useModalManager.enteringModal, onEnter = _useModalManager.onEnter, onEntered = _useModalManager.onEntered, onExited = _useModalManager.onExited, history = _useModalManager.history, delayEnter = _useModalManager.delayEnter;
24
+ var _useModalManager = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop), activeModal = _useModalManager.activeModal, exitingModal = _useModalManager.exitingModal, onExit = _useModalManager.onExit, getModalState = _useModalManager.getModalState, enteringModal = _useModalManager.enteringModal, onEnter = _useModalManager.onEnter, onEnteredProp = _useModalManager.onEntered, onExited = _useModalManager.onExited, history = _useModalManager.history, delayEnter = _useModalManager.delayEnter;
25
25
  var waitTransitionFinish = useWaitTransitionFinish().waitTransitionFinish;
26
26
  var prevProps = usePrevious({
27
27
  exitingModal: exitingModal,
@@ -67,6 +67,13 @@ export var ModalRootDesktop = function(param) {
67
67
  }
68
68
  });
69
69
  };
70
+ var onEntered = function(param) {
71
+ var id = param.id, modalElement = param.modalElement;
72
+ if (!noFocusToDialog && modalElement && !modalElement.contains(document.activeElement)) {
73
+ modalElement.focus();
74
+ }
75
+ onEnteredProp(id);
76
+ };
70
77
  var openModal = function() {
71
78
  if (!enteringModal || !prevProps) {
72
79
  return;
@@ -76,14 +83,12 @@ export var ModalRootDesktop = function(param) {
76
83
  // Анимация открытия модального окна
77
84
  if (!prevProps.exitingModal) {
78
85
  requestAnimationFrame(function() {
79
- if (enteringModal === enteringModal) {
80
- waitTransitionFinish(enteringState === null || enteringState === void 0 ? void 0 : enteringState.innerElement, function() {
81
- return onEntered(enteringModal);
86
+ if (enteringModal === enteringModal && enteringState) {
87
+ waitTransitionFinish(enteringState.innerElement, function() {
88
+ return onEntered(enteringState);
82
89
  }, timeout);
83
90
  animateModalOpacity(enteringState, true);
84
- if (enteringState) {
85
- setMaskOpacity(enteringState, 1);
86
- }
91
+ setMaskOpacity(enteringState, 1);
87
92
  }
88
93
  });
89
94
  return;
@@ -96,7 +101,9 @@ export var ModalRootDesktop = function(param) {
96
101
  setMaskOpacity(enteringState, 1);
97
102
  }
98
103
  });
99
- onEntered(enteringModal);
104
+ if (enteringState) {
105
+ onEntered(enteringState);
106
+ }
100
107
  };
101
108
  var closeModal = function(id) {
102
109
  var prevModalState = getModalState(id);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { ModalRootWithDOMProps, ModalsStateEntry } from './types';\nimport { useModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nexport const ModalRootDesktop = ({\n activeModal: activeModalProp,\n children,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n}: ModalRootWithDOMProps) => {\n const maskElementRef = React.useRef<HTMLDivElement>(null);\n const maskAnimationFrame = React.useRef<number | undefined>(undefined);\n const restoreFocusTo = React.useRef<HTMLElement | undefined>(undefined);\n\n const { document } = useDOM();\n const { hasCustomPanelHeaderAfter, platform } = useConfigProvider();\n const {\n activeModal,\n exitingModal,\n onExit,\n getModalState,\n enteringModal,\n onEnter,\n onEntered,\n onExited,\n history,\n delayEnter,\n } = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop);\n\n const { waitTransitionFinish } = useWaitTransitionFinish();\n const prevProps = usePrevious({\n exitingModal,\n enteringModal,\n activeModal,\n });\n const modalRootContext: ModalRootContextInterface = useObjectMemo({\n updateModalHeight: () => undefined,\n registerModal: ({ id, ...data }) => Object.assign(getModalState(id) ?? {}, data),\n onClose: onExit,\n isInsideModal: true,\n });\n\n const timeout = platform === Platform.IOS ? 400 : 320;\n const modals = React.Children.toArray(children) as React.ReactElement[];\n\n /* Анимирует сдвиг модального окна */\n const animateModalOpacity = (modalState: ModalsStateEntry | undefined, display: boolean) => {\n if (modalState?.innerElement) {\n modalState.innerElement.style.transition = '';\n modalState.innerElement.style.transitionDelay = display && delayEnter ? `${timeout}ms` : '';\n modalState.innerElement.style.opacity = display ? '1' : '0';\n }\n };\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n const setMaskOpacity = (modalState: ModalsStateEntry, forceOpacity: number | null = null) => {\n if (forceOpacity === null && history?.[0] !== modalState.id) {\n return;\n }\n\n if (maskAnimationFrame.current) {\n cancelAnimationFrame(maskAnimationFrame.current);\n }\n maskAnimationFrame.current = requestAnimationFrame(() => {\n if (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 maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n };\n\n const openModal = () => {\n if (!enteringModal || !prevProps) {\n return;\n }\n\n const enteringState = getModalState(enteringModal);\n onEnter();\n\n // Анимация открытия модального окна\n if (!prevProps.exitingModal) {\n requestAnimationFrame(() => {\n if (enteringModal === enteringModal) {\n waitTransitionFinish(\n enteringState?.innerElement,\n () => onEntered(enteringModal),\n timeout,\n );\n animateModalOpacity(enteringState, true);\n if (enteringState) {\n setMaskOpacity(enteringState, 1);\n }\n }\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n requestAnimationFrame(() => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transition = 'none';\n enteringState.innerElement.style.opacity = '1';\n setMaskOpacity(enteringState, 1);\n }\n });\n\n onEntered(enteringModal);\n };\n\n const closeModal = (id: string) => {\n const prevModalState = getModalState(id);\n if (!prevModalState) {\n return;\n }\n\n // Анимация закрытия модального окна\n if (!activeModal) {\n requestAnimationFrame(() => {\n waitTransitionFinish(prevModalState?.innerElement, () => onExited(id), timeout);\n animateModalOpacity(prevModalState, false);\n setMaskOpacity(prevModalState, 0);\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n onExited(id);\n };\n\n React.useEffect(() => {\n if (!prevProps) {\n return;\n }\n\n // transition phase 2: animate exiting modal\n if (exitingModal && exitingModal !== prevProps.exitingModal) {\n closeModal(exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (enteringModal && enteringModal !== prevProps.enteringModal) {\n openModal();\n }\n\n // focus restoration\n if (activeModal && !prevProps.activeModal) {\n restoreFocusTo.current = (document?.activeElement ?? undefined) as HTMLElement | undefined;\n }\n if (!activeModal && !exitingModal && restoreFocusTo.current) {\n restoreFocusTo.current.focus();\n restoreFocusTo.current = undefined;\n }\n });\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <ModalRootContext.Provider value={modalRootContext}>\n <div\n className={classNames(\n styles['ModalRoot'],\n hasCustomPanelHeaderAfter && styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n styles['ModalRoot--desktop'],\n )}\n >\n <div className={styles['ModalRoot__mask']} ref={maskElementRef} onClick={onExit} />\n <div className={styles['ModalRoot__viewport']}>\n {modals.map((Modal: React.ReactElement) => {\n const modalId = getNavId(Modal.props, warn);\n if (modalId !== activeModal && modalId !== exitingModal) {\n return null;\n }\n\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n restoreFocus={false}\n onClose={onExit}\n timeout={timeout}\n key={key}\n className={styles['ModalRoot__modal']}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </div>\n </ModalRootContext.Provider>\n );\n};\n"],"names":["React","classNames","noop","clamp","useObjectMemo","usePrevious","useWaitTransitionFinish","useDOM","getNavId","Platform","warnOnce","useConfigProvider","FocusTrap","ModalRootContext","useModalManager","warn","ModalRootDesktop","activeModal","activeModalProp","children","onOpen","onOpened","onClose","onClosed","maskElementRef","useRef","maskAnimationFrame","undefined","restoreFocusTo","document","hasCustomPanelHeaderAfter","platform","exitingModal","onExit","getModalState","enteringModal","onEnter","onEntered","onExited","history","delayEnter","waitTransitionFinish","prevProps","modalRootContext","updateModalHeight","registerModal","id","data","Object","assign","isInsideModal","timeout","IOS","modals","Children","toArray","animateModalOpacity","modalState","display","innerElement","style","transition","transitionDelay","opacity","setMaskOpacity","forceOpacity","current","cancelAnimationFrame","requestAnimationFrame","translateY","translateYCurrent","toString","openModal","enteringState","closeModal","prevModalState","useEffect","activeElement","focus","Provider","value","div","className","ref","onClick","map","Modal","modalId","props","key","restoreFocus"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { ModalRootWithDOMProps, ModalsStateEntry } from './types';\nimport { useModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nexport const ModalRootDesktop = ({\n activeModal: activeModalProp,\n children,\n noFocusToDialog = false,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n}: ModalRootWithDOMProps) => {\n const maskElementRef = React.useRef<HTMLDivElement>(null);\n const maskAnimationFrame = React.useRef<number | undefined>(undefined);\n const restoreFocusTo = React.useRef<HTMLElement | undefined>(undefined);\n\n const { document } = useDOM();\n const { hasCustomPanelHeaderAfter, platform } = useConfigProvider();\n const {\n activeModal,\n exitingModal,\n onExit,\n getModalState,\n enteringModal,\n onEnter,\n onEntered: onEnteredProp,\n onExited,\n history,\n delayEnter,\n } = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop);\n\n const { waitTransitionFinish } = useWaitTransitionFinish();\n const prevProps = usePrevious({\n exitingModal,\n enteringModal,\n activeModal,\n });\n const modalRootContext: ModalRootContextInterface = useObjectMemo({\n updateModalHeight: () => undefined,\n registerModal: ({ id, ...data }) => Object.assign(getModalState(id) ?? {}, data),\n onClose: onExit,\n isInsideModal: true,\n });\n\n const timeout = platform === Platform.IOS ? 400 : 320;\n const modals = React.Children.toArray(children) as React.ReactElement[];\n\n /* Анимирует сдвиг модального окна */\n const animateModalOpacity = (modalState: ModalsStateEntry | undefined, display: boolean) => {\n if (modalState?.innerElement) {\n modalState.innerElement.style.transition = '';\n modalState.innerElement.style.transitionDelay = display && delayEnter ? `${timeout}ms` : '';\n modalState.innerElement.style.opacity = display ? '1' : '0';\n }\n };\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n const setMaskOpacity = (modalState: ModalsStateEntry, forceOpacity: number | null = null) => {\n if (forceOpacity === null && history?.[0] !== modalState.id) {\n return;\n }\n\n if (maskAnimationFrame.current) {\n cancelAnimationFrame(maskAnimationFrame.current);\n }\n maskAnimationFrame.current = requestAnimationFrame(() => {\n if (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 maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n };\n\n const onEntered = ({ id, modalElement }: ModalsStateEntry) => {\n if (!noFocusToDialog && modalElement && !modalElement.contains(document!.activeElement)) {\n modalElement.focus();\n }\n\n onEnteredProp(id);\n };\n\n const openModal = () => {\n if (!enteringModal || !prevProps) {\n return;\n }\n\n const enteringState = getModalState(enteringModal);\n onEnter();\n\n // Анимация открытия модального окна\n if (!prevProps.exitingModal) {\n requestAnimationFrame(() => {\n if (enteringModal === enteringModal && enteringState) {\n waitTransitionFinish(enteringState.innerElement, () => onEntered(enteringState), timeout);\n animateModalOpacity(enteringState, true);\n setMaskOpacity(enteringState, 1);\n }\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n requestAnimationFrame(() => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transition = 'none';\n enteringState.innerElement.style.opacity = '1';\n setMaskOpacity(enteringState, 1);\n }\n });\n\n if (enteringState) {\n onEntered(enteringState);\n }\n };\n\n const closeModal = (id: string) => {\n const prevModalState = getModalState(id);\n if (!prevModalState) {\n return;\n }\n\n // Анимация закрытия модального окна\n if (!activeModal) {\n requestAnimationFrame(() => {\n waitTransitionFinish(prevModalState?.innerElement, () => onExited(id), timeout);\n animateModalOpacity(prevModalState, false);\n setMaskOpacity(prevModalState, 0);\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n onExited(id);\n };\n\n React.useEffect(() => {\n if (!prevProps) {\n return;\n }\n\n // transition phase 2: animate exiting modal\n if (exitingModal && exitingModal !== prevProps.exitingModal) {\n closeModal(exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (enteringModal && enteringModal !== prevProps.enteringModal) {\n openModal();\n }\n\n // focus restoration\n if (activeModal && !prevProps.activeModal) {\n restoreFocusTo.current = (document?.activeElement ?? undefined) as HTMLElement | undefined;\n }\n if (!activeModal && !exitingModal && restoreFocusTo.current) {\n restoreFocusTo.current.focus();\n restoreFocusTo.current = undefined;\n }\n });\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <ModalRootContext.Provider value={modalRootContext}>\n <div\n className={classNames(\n styles['ModalRoot'],\n hasCustomPanelHeaderAfter && styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n styles['ModalRoot--desktop'],\n )}\n >\n <div className={styles['ModalRoot__mask']} ref={maskElementRef} onClick={onExit} />\n <div className={styles['ModalRoot__viewport']}>\n {modals.map((Modal: React.ReactElement) => {\n const modalId = getNavId(Modal.props, warn);\n if (modalId !== activeModal && modalId !== exitingModal) {\n return null;\n }\n\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n restoreFocus={false}\n onClose={onExit}\n timeout={timeout}\n key={key}\n className={styles['ModalRoot__modal']}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </div>\n </ModalRootContext.Provider>\n );\n};\n"],"names":["React","classNames","noop","clamp","useObjectMemo","usePrevious","useWaitTransitionFinish","useDOM","getNavId","Platform","warnOnce","useConfigProvider","FocusTrap","ModalRootContext","useModalManager","warn","ModalRootDesktop","activeModal","activeModalProp","children","noFocusToDialog","onOpen","onOpened","onClose","onClosed","maskElementRef","useRef","maskAnimationFrame","undefined","restoreFocusTo","document","hasCustomPanelHeaderAfter","platform","exitingModal","onExit","getModalState","enteringModal","onEnter","onEntered","onEnteredProp","onExited","history","delayEnter","waitTransitionFinish","prevProps","modalRootContext","updateModalHeight","registerModal","id","data","Object","assign","isInsideModal","timeout","IOS","modals","Children","toArray","animateModalOpacity","modalState","display","innerElement","style","transition","transitionDelay","opacity","setMaskOpacity","forceOpacity","current","cancelAnimationFrame","requestAnimationFrame","translateY","translateYCurrent","toString","modalElement","contains","activeElement","focus","openModal","enteringState","closeModal","prevModalState","useEffect","Provider","value","div","className","ref","onClick","map","Modal","modalId","props","key","restoreFocus"],"mappings":"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"}
@@ -81,6 +81,10 @@ export interface ModalRootProps {
81
81
  * Будет вызвано при окончательном закрытии активной модалки с её id
82
82
  */
83
83
  onClosed?(modalId: string): void;
84
+ /**
85
+ * Отключает фокус на контейнер диалогового окна при открытии.
86
+ */
87
+ noFocusToDialog?: boolean;
84
88
  }
85
89
  export interface ModalRootWithDOMProps extends HasPlatform, ModalRootProps, DOMContextInterface {
86
90
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ModalRoot/types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAEzF,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAEzD,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE5D;;OAEG;IACH,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;OAEG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW,EAAE,cAAc,EAAE,mBAAmB;IAC7F;;OAEG;IACH,cAAc,CAAC,EAAE,8BAA8B,CAAC;CACjD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ModalRoot/types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAEzF,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAEzD,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE5D;;OAEG;IACH,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;OAEG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW,EAAE,cAAc,EAAE,mBAAmB;IAC7F;;OAEG;IACH,cAAc,CAAC,EAAE,8BAA8B,CAAC;CACjD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ModalRoot/types.ts"],"sourcesContent":["import { DOMContextInterface } from '../../lib/dom';\nimport { HasPlatform } from '../../types';\nimport { ConfigProviderContextInterface } from '../ConfigProvider/ConfigProviderContext';\n\nexport enum ModalType {\n PAGE = 'page',\n CARD = 'card',\n}\n\nexport type TranslateRange = [number, number];\n\nexport type ModalsState = { [index: string]: ModalsStateEntry };\n\nexport interface ModalElements {\n modalElement?: HTMLElement | null;\n innerElement?: HTMLElement | null;\n headerElement?: HTMLElement | null;\n contentElement?: HTMLElement | null;\n bottomInset?: HTMLElement | null;\n}\n\nexport interface ModalsStateEntry extends ModalElements {\n id: string | null;\n /**\n * Событие начала открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Событие открытия модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Событие начала закрытия модалки.\n */\n onClose?: VoidFunction;\n /**\n * Событие закрытия модалки.\n */\n onClosed?: VoidFunction;\n type?: ModalType;\n\n settlingHeight?: number;\n expandable?: boolean;\n\n /**\n * Процент текущего сдвига модалки\n */\n translateY?: number;\n /**\n * Процент сдвига модалки в изначальном состоянии\n */\n translateYFrom?: number;\n /**\n * Процент сдвига модалки во время взаимодействия с ней (потянуть, чтобы открыть или закрыть)\n */\n translateYCurrent?: number;\n\n touchStartContentScrollTop?: number;\n touchMovePositive?: boolean | null;\n touchShiftYPercent?: number;\n\n expanded?: boolean;\n collapsed?: boolean;\n hidden?: boolean;\n\n contentScrolled?: boolean;\n contentScrollStopTimeout?: ReturnType<typeof setTimeout>;\n\n expandedRange?: TranslateRange;\n collapsedRange?: TranslateRange;\n hiddenRange?: TranslateRange;\n}\n\nexport interface ModalRootProps {\n activeModal?: string | null;\n children: React.ReactElement | Iterable<React.ReactElement>;\n\n /**\n * Будет вызвано при начале открытия активной модалки с её id\n */\n onOpen?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном открытии активной модалки с её id\n */\n onOpened?(modalId: string): void;\n\n /**\n * Будет вызвано при начале закрытия активной модалки с её id\n */\n onClose?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном закрытии активной модалки с её id\n */\n onClosed?(modalId: string): void;\n}\n\nexport interface ModalRootWithDOMProps extends HasPlatform, ModalRootProps, DOMContextInterface {\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface;\n}\n"],"names":["ModalType"],"mappings":";UAIYA;;;GAAAA,cAAAA"}
1
+ {"version":3,"sources":["../../../src/components/ModalRoot/types.ts"],"sourcesContent":["import { DOMContextInterface } from '../../lib/dom';\nimport { HasPlatform } from '../../types';\nimport { ConfigProviderContextInterface } from '../ConfigProvider/ConfigProviderContext';\n\nexport enum ModalType {\n PAGE = 'page',\n CARD = 'card',\n}\n\nexport type TranslateRange = [number, number];\n\nexport type ModalsState = { [index: string]: ModalsStateEntry };\n\nexport interface ModalElements {\n modalElement?: HTMLElement | null;\n innerElement?: HTMLElement | null;\n headerElement?: HTMLElement | null;\n contentElement?: HTMLElement | null;\n bottomInset?: HTMLElement | null;\n}\n\nexport interface ModalsStateEntry extends ModalElements {\n id: string | null;\n /**\n * Событие начала открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Событие открытия модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Событие начала закрытия модалки.\n */\n onClose?: VoidFunction;\n /**\n * Событие закрытия модалки.\n */\n onClosed?: VoidFunction;\n type?: ModalType;\n\n settlingHeight?: number;\n expandable?: boolean;\n\n /**\n * Процент текущего сдвига модалки\n */\n translateY?: number;\n /**\n * Процент сдвига модалки в изначальном состоянии\n */\n translateYFrom?: number;\n /**\n * Процент сдвига модалки во время взаимодействия с ней (потянуть, чтобы открыть или закрыть)\n */\n translateYCurrent?: number;\n\n touchStartContentScrollTop?: number;\n touchMovePositive?: boolean | null;\n touchShiftYPercent?: number;\n\n expanded?: boolean;\n collapsed?: boolean;\n hidden?: boolean;\n\n contentScrolled?: boolean;\n contentScrollStopTimeout?: ReturnType<typeof setTimeout>;\n\n expandedRange?: TranslateRange;\n collapsedRange?: TranslateRange;\n hiddenRange?: TranslateRange;\n}\n\nexport interface ModalRootProps {\n activeModal?: string | null;\n children: React.ReactElement | Iterable<React.ReactElement>;\n\n /**\n * Будет вызвано при начале открытия активной модалки с её id\n */\n onOpen?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном открытии активной модалки с её id\n */\n onOpened?(modalId: string): void;\n\n /**\n * Будет вызвано при начале закрытия активной модалки с её id\n */\n onClose?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном закрытии активной модалки с её id\n */\n onClosed?(modalId: string): void;\n /**\n * Отключает фокус на контейнер диалогового окна при открытии.\n */\n noFocusToDialog?: boolean;\n}\n\nexport interface ModalRootWithDOMProps extends HasPlatform, ModalRootProps, DOMContextInterface {\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface;\n}\n"],"names":["ModalType"],"mappings":";UAIYA;;;GAAAA,cAAAA"}
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import { SelectProps } from '../CustomSelect/CustomSelect';
2
+ import { type CustomSelectOptionInterface, type SelectProps } from '../CustomSelect/CustomSelect';
3
3
  export type SelectType = 'default' | 'plain' | 'accent';
4
4
  /**
5
5
  * @see https://vkcom.github.io/VKUI/#/Select
6
6
  */
7
- export declare const Select: ({ children, ...props }: SelectProps) => React.JSX.Element;
7
+ export declare const Select: <OptionT extends CustomSelectOptionInterface>({ children, ...props }: SelectProps<OptionT>) => React.JSX.Element;
8
8
  //# sourceMappingURL=Select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAgB,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGzE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,MAAM,2BAA4B,WAAW,sBAyCzD,CAAC"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAC;AAGtC,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,MAAM,kHA4ClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { CustomSelect, SelectProps } from '../CustomSelect/CustomSelect';\nimport { NativeSelect } from '../NativeSelect/NativeSelect';\n\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Select\n */\nexport const Select = ({ children, ...props }: SelectProps) => {\n const {\n options = [],\n searchable,\n emptyText,\n onInputChange,\n filterFn,\n popupDirection,\n renderOption,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n icon,\n ClearButton,\n allowClearButton,\n dropdownOffsetDistance,\n fixDropdownWidth,\n forceDropdownPortal,\n selectType,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n ...nativeProps // TODO: https://github.com/Microsoft/TypeScript/issues/12936\n } = props;\n\n const hasPointer = useAdaptivityHasPointer();\n\n return (\n <React.Fragment>\n {(hasPointer === undefined || hasPointer) && <CustomSelect {...props} />}\n {(hasPointer === undefined || !hasPointer) && (\n <NativeSelect {...nativeProps}>\n {options.map(({ label, value }) => (\n <option value={value} key={`${value}`}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","useAdaptivityHasPointer","CustomSelect","NativeSelect","Select","children","props","options","searchable","emptyText","onInputChange","filterFn","popupDirection","renderOption","renderDropdown","fetching","onClose","onOpen","icon","ClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","nativeProps","hasPointer","Fragment","undefined","map","label","value","option","key"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,uBAAuB,QAAQ,sCAAsC;AAC9E,SAASC,YAAY,QAAqB,+BAA+B;AACzE,SAASC,YAAY,QAAQ,+BAA+B;AAI5D;;CAEC,GACD,OAAO,IAAMC,SAAS;QAAGC,kBAAAA,UAAaC;QAAbD;;IACvB,qBAsBIC,MArBFC,SAAAA,sCAAU,EAAE,mBACZC,aAoBEF,MApBFE,YACAC,YAmBEH,MAnBFG,WACAC,gBAkBEJ,MAlBFI,eACAC,WAiBEL,MAjBFK,UACAC,iBAgBEN,MAhBFM,gBACAC,eAeEP,MAfFO,cACAC,iBAcER,MAdFQ,gBACAC,WAaET,MAbFS,UACAC,UAYEV,MAZFU,SACAC,SAWEX,MAXFW,QACAC,OAUEZ,MAVFY,MACAC,cASEb,MATFa,aACAC,mBAQEd,MARFc,kBACAC,yBAOEf,MAPFe,wBACAC,mBAMEhB,MANFgB,kBACAC,sBAKEjB,MALFiB,qBACAC,aAIElB,MAJFkB,YACAC,oBAGEnB,MAHFmB,mBACAC,yBAEEpB,MAFFoB,wBACGC,YAAY,6DAA6D;kCAC1ErB;QArBFC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAIF,IAAME,aAAa3B;IAEnB,qBACE,oBAACD,MAAM6B,QAAQ,QACZ,AAACD,CAAAA,eAAeE,aAAaF,UAAS,mBAAM,oBAAC1B,cAAiBI,QAC9D,AAACsB,CAAAA,eAAeE,aAAa,CAACF,UAAS,mBACtC,oBAACzB,cAAiBwB,aACfpB,QAAQwB,GAAG,CAAC;YAAGC,cAAAA,OAAOC,cAAAA;6BACrB,oBAACC;YAAOD,OAAOA;YAAOE,KAAK,AAAC,GAAQ,OAANF;WAC3BD;;AAOf,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport {\n CustomSelect,\n type CustomSelectOptionInterface,\n type SelectProps,\n} from '../CustomSelect/CustomSelect';\nimport { NativeSelect } from '../NativeSelect/NativeSelect';\n\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Select\n */\nexport const Select = <OptionT extends CustomSelectOptionInterface>({\n children,\n ...props\n}: SelectProps<OptionT>) => {\n const {\n options = [],\n searchable,\n emptyText,\n onInputChange,\n filterFn,\n popupDirection,\n renderOption,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n icon,\n ClearButton,\n allowClearButton,\n dropdownOffsetDistance,\n fixDropdownWidth,\n forceDropdownPortal,\n selectType,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n ...nativeProps // TODO: https://github.com/Microsoft/TypeScript/issues/12936\n } = props;\n\n const hasPointer = useAdaptivityHasPointer();\n\n return (\n <React.Fragment>\n {(hasPointer === undefined || hasPointer) && <CustomSelect {...props} />}\n {(hasPointer === undefined || !hasPointer) && (\n <NativeSelect {...nativeProps}>\n {options.map(({ label, value }) => (\n <option value={value} key={`${value}`}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","useAdaptivityHasPointer","CustomSelect","NativeSelect","Select","children","props","options","searchable","emptyText","onInputChange","filterFn","popupDirection","renderOption","renderDropdown","fetching","onClose","onOpen","icon","ClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","nativeProps","hasPointer","Fragment","undefined","map","label","value","option","key"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,uBAAuB,QAAQ,sCAAsC;AAC9E,SACEC,YAAY,QAGP,+BAA+B;AACtC,SAASC,YAAY,QAAQ,+BAA+B;AAI5D;;CAEC,GACD,OAAO,IAAMC,SAAS;QACpBC,kBAAAA,UACGC;QADHD;;IAGA,qBAsBIC,MArBFC,SAAAA,sCAAU,EAAE,mBACZC,aAoBEF,MApBFE,YACAC,YAmBEH,MAnBFG,WACAC,gBAkBEJ,MAlBFI,eACAC,WAiBEL,MAjBFK,UACAC,iBAgBEN,MAhBFM,gBACAC,eAeEP,MAfFO,cACAC,iBAcER,MAdFQ,gBACAC,WAaET,MAbFS,UACAC,UAYEV,MAZFU,SACAC,SAWEX,MAXFW,QACAC,OAUEZ,MAVFY,MACAC,cASEb,MATFa,aACAC,mBAQEd,MARFc,kBACAC,yBAOEf,MAPFe,wBACAC,mBAMEhB,MANFgB,kBACAC,sBAKEjB,MALFiB,qBACAC,aAIElB,MAJFkB,YACAC,oBAGEnB,MAHFmB,mBACAC,yBAEEpB,MAFFoB,wBACGC,YAAY,6DAA6D;kCAC1ErB;QArBFC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAIF,IAAME,aAAa3B;IAEnB,qBACE,oBAACD,MAAM6B,QAAQ,QACZ,AAACD,CAAAA,eAAeE,aAAaF,UAAS,mBAAM,oBAAC1B,cAAiBI,QAC9D,AAACsB,CAAAA,eAAeE,aAAa,CAACF,UAAS,mBACtC,oBAACzB,cAAiBwB,aACfpB,QAAQwB,GAAG,CAAC;YAAGC,cAAAA,OAAOC,cAAAA;6BACrB,oBAACC;YAAOD,OAAOA;YAAOE,KAAK,AAAC,GAAQ,OAANF;WAC3BD;;AAOf,EAAE"}