@vkontakte/vkui 5.4.1 → 5.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
- package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
- package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +7 -3
- package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
- package/dist/cjs/components/Banner/Banner.js +3 -3
- package/dist/cjs/components/Banner/Banner.js.map +1 -1
- package/dist/cjs/components/Cell/CellDragger/CellDragger.d.ts +2 -2
- package/dist/cjs/components/Cell/CellDragger/CellDragger.js +9 -5
- package/dist/cjs/components/Cell/CellDragger/CellDragger.js.map +1 -1
- package/dist/cjs/components/Cell/useDraggable.d.ts +3 -3
- package/dist/cjs/components/Cell/useDraggable.js +12 -7
- package/dist/cjs/components/Cell/useDraggable.js.map +1 -1
- package/dist/cjs/components/HorizontalCell/HorizontalCell.d.ts +11 -1
- package/dist/cjs/components/HorizontalCell/HorizontalCell.js +6 -3
- package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cjs/components/ImageBase/ImageBase.js +5 -2
- package/dist/cjs/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/cjs/components/InfoRow/InfoRow.js +3 -2
- package/dist/cjs/components/InfoRow/InfoRow.js.map +1 -1
- package/dist/cjs/components/ModalPage/ModalPage.js +6 -1
- package/dist/cjs/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +6 -5
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js +5 -11
- package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cjs/components/ModalRoot/types.d.ts +0 -1
- package/dist/cjs/components/ModalRoot/types.js.map +1 -1
- package/dist/cjs/components/ModalRoot/useModalManager.js +0 -1
- package/dist/cjs/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/cjs/components/PanelHeader/PanelHeader.d.ts +8 -4
- package/dist/cjs/components/PanelHeader/PanelHeader.js +47 -20
- package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cjs/components/TabsItem/TabsItem.js +3 -2
- package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cjs/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
- package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
- package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
- package/dist/components/ActionSheetItem/ActionSheetItem.js +7 -3
- package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
- package/dist/components/Banner/Banner.js +3 -3
- package/dist/components/Banner/Banner.js.map +1 -1
- package/dist/components/Cell/CellDragger/CellDragger.d.ts +2 -2
- package/dist/components/Cell/CellDragger/CellDragger.js +9 -5
- package/dist/components/Cell/CellDragger/CellDragger.js.map +1 -1
- package/dist/components/Cell/useDraggable.d.ts +3 -3
- package/dist/components/Cell/useDraggable.js +12 -7
- package/dist/components/Cell/useDraggable.js.map +1 -1
- package/dist/components/HorizontalCell/HorizontalCell.d.ts +11 -1
- package/dist/components/HorizontalCell/HorizontalCell.js +6 -3
- package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/components/ImageBase/ImageBase.js +5 -2
- package/dist/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/components/InfoRow/InfoRow.js +3 -2
- package/dist/components/InfoRow/InfoRow.js.map +1 -1
- package/dist/components/ModalPage/ModalPage.js +6 -1
- package/dist/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/components/ModalPageHeader/ModalPageHeader.js +6 -5
- package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +5 -11
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/ModalRoot/types.d.ts +0 -1
- package/dist/components/ModalRoot/types.js.map +1 -1
- package/dist/components/ModalRoot/useModalManager.js +0 -1
- package/dist/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.d.ts +8 -4
- package/dist/components/PanelHeader/PanelHeader.js +47 -20
- package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/components/TabsItem/TabsItem.js +3 -2
- package/dist/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
- package/dist/components/VisuallyHidden/VisuallyHidden.js +3 -4
- package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/components.css +12 -12
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +143 -93
- package/dist/cssm/components/ActionSheet/ActionSheet.module.css +1 -5
- package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +7 -3
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.module.css +7 -6
- package/dist/cssm/components/Banner/Banner.js +3 -3
- package/dist/cssm/components/Banner/Banner.js.map +1 -1
- package/dist/cssm/components/Banner/Banner.module.css +1 -9
- package/dist/cssm/components/Cell/CellDragger/CellDragger.d.ts +2 -2
- package/dist/cssm/components/Cell/CellDragger/CellDragger.js +8 -5
- package/dist/cssm/components/Cell/CellDragger/CellDragger.js.map +1 -1
- package/dist/cssm/components/Cell/useDraggable.d.ts +3 -3
- package/dist/cssm/components/Cell/useDraggable.js +12 -7
- package/dist/cssm/components/Cell/useDraggable.js.map +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.module.css +0 -1
- package/dist/cssm/components/HorizontalCell/HorizontalCell.d.ts +11 -1
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js +4 -2
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cssm/components/HorizontalCell/HorizontalCell.module.css +23 -11
- package/dist/cssm/components/ImageBase/ImageBase.js +5 -2
- package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBase.module.css +13 -2
- package/dist/cssm/components/InfoRow/InfoRow.js +3 -2
- package/dist/cssm/components/InfoRow/InfoRow.js.map +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
- package/dist/cssm/components/ModalPage/ModalPage.js +6 -1
- package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +6 -5
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -10
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/ModalRoot/types.d.ts +0 -1
- package/dist/cssm/components/ModalRoot/types.js.map +1 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js +0 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.d.ts +8 -4
- package/dist/cssm/components/PanelHeader/PanelHeader.js +44 -18
- package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +3 -0
- package/dist/cssm/components/TabsItem/TabsItem.js +3 -2
- package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cssm/components/Typography/Typography.module.css +2 -1
- package/dist/cssm/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
- package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js +3 -4
- package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +9 -5
- package/dist/cssm/styles/constants.css +3 -2
- package/dist/vkui.css +12 -12
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +143 -93
- package/package.json +1 -1
|
@@ -39,11 +39,12 @@ var ModalPageHeader = function(_param) {
|
|
|
39
39
|
}, restProps), {
|
|
40
40
|
fixed: false,
|
|
41
41
|
separator: false,
|
|
42
|
-
transparent: true
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
transparent: true,
|
|
43
|
+
typographyProps: {
|
|
44
|
+
Component: "h2",
|
|
45
|
+
id: labelId
|
|
46
|
+
}
|
|
47
|
+
}), children), hasSeparator && /*#__PURE__*/ _react.createElement(_separator.Separator, {
|
|
47
48
|
wide: true
|
|
48
49
|
}));
|
|
49
50
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef,\n className,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={getRef}\n >\n <PanelHeader\n className={classNames('vkuiInternalModalPageHeader__in', className)}\n {...restProps}\n fixed={false}\n separator={false}\n transparent\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef,\n className,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={getRef}\n >\n <PanelHeader\n className={classNames('vkuiInternalModalPageHeader__in', className)}\n {...restProps}\n fixed={false}\n separator={false}\n transparent\n typographyProps={{\n Component: 'h2',\n id: labelId,\n }}\n >\n {children}\n </PanelHeader>\n {hasSeparator && <Separator wide />}\n </div>\n );\n};\n"],"names":["ModalPageHeader","children","separator","getRef","className","restProps","platform","usePlatform","hasSeparator","Platform","VKCOM","isDesktop","useAdaptivityWithJSMediaQueries","labelId","React","useContext","ModalPageContext","div","classNames","ref","PanelHeader","fixed","transparent","typographyProps","Component","id","Separator","wide"],"mappings":";;;;+BAmBaA;;;eAAAA;;;;;;;2DAnBU;oBACI;+CACqB;2BACpB;wBACH;gCAEQ;2BACa;yBACpB;AAWnB,IAAMA,kBAAkB,iBAMH;QAL1BC,kBAAAA,oCACAC,WAAAA,0CAAY,IAAI,qBAChBC,gBAAAA,QACAC,mBAAAA,WACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAC5B,IAAMC,eAAeN,aAAaI,aAAaG,kBAAQ,CAACC,KAAK;IAC7D,IAAM,AAAEC,YAAcC,IAAAA,gEAA+B,IAA7CD;IACR,IAAM,AAAEE,UAAYC,OAAMC,UAAU,CAACC,kCAAgB,EAA7CH;IAER,qBACE,qBAACI;QACCb,WAAWc,IAAAA,gBAAU,yBAEnBZ,aAAaG,kBAAQ,CAACC,KAAK,qCAC3BC;QAEFQ,KAAKhB;qBAEL,qBAACiB,wBAAW;QACVhB,WAAWc,IAAAA,gBAAU,EAAC,mCAAmCd;OACrDC;QACJgB,OAAO,KAAK;QACZnB,WAAW,KAAK;QAChBoB,aAAAA,IAAW;QACXC,iBAAiB;YACfC,WAAW;YACXC,IAAIZ;QACN;QAECZ,WAEFO,8BAAgB,qBAACkB,oBAAS;QAACC,MAAAA,IAAI;;AAGtC"}
|
|
@@ -75,13 +75,9 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
|
|
|
75
75
|
}
|
|
76
76
|
return false;
|
|
77
77
|
});
|
|
78
|
-
_defineProperty(_assertThisInitialized(_this), "updateModalTranslate", function() {
|
|
79
|
-
var modalState = _this.props.getModalState(_this.props.activeModal);
|
|
80
|
-
modalState && _this.animateTranslate(modalState, modalState.translateY);
|
|
81
|
-
});
|
|
82
78
|
_defineProperty(_assertThisInitialized(_this), "updateModalHeight", function() {
|
|
83
79
|
var modalState = _this.props.getModalState(_this.props.activeModal);
|
|
84
|
-
if (modalState && modalState.type === _types.ModalType.PAGE
|
|
80
|
+
if (modalState && modalState.type === _types.ModalType.PAGE) {
|
|
85
81
|
if (_this.props.enteringModal) {
|
|
86
82
|
_this.waitTransitionFinish(modalState, function() {
|
|
87
83
|
requestAnimationFrame(function() {
|
|
@@ -189,18 +185,16 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
|
|
|
189
185
|
{
|
|
190
186
|
key: "componentDidMount",
|
|
191
187
|
value: function componentDidMount() {
|
|
192
|
-
// Отслеживаем изменение размеров viewport
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
(_this_window = this.window) === null || _this_window === void 0 ? void 0 : _this_window.addEventListener("resize", this.updateModalTranslate, false);
|
|
196
|
-
}
|
|
188
|
+
var // Отслеживаем изменение размеров viewport
|
|
189
|
+
_this_window;
|
|
190
|
+
(_this_window = this.window) === null || _this_window === void 0 ? void 0 : _this_window.addEventListener("resize", this.updateModalHeight, false);
|
|
197
191
|
}
|
|
198
192
|
},
|
|
199
193
|
{
|
|
200
194
|
key: "componentWillUnmount",
|
|
201
195
|
value: function componentWillUnmount() {
|
|
202
196
|
this.toggleDocumentScrolling(true);
|
|
203
|
-
this.window.removeEventListener("resize", this.
|
|
197
|
+
this.window.removeEventListener("resize", this.updateModalHeight, false);
|
|
204
198
|
}
|
|
205
199
|
},
|
|
206
200
|
{
|
|
@@ -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, WebviewType } 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}\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 };\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 (Необходимо для iOS)\n if (this.props.platform === Platform.IOS) {\n this.window?.addEventListener('resize', this.updateModalTranslate, false);\n }\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalTranslate, 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 }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n updateModalTranslate = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n modalState && this.animateTranslate(modalState, modalState.translateY);\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 && modalState.dynamicContentHeight) {\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\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 }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\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?.webviewType === WebviewType.VKAPPS &&\n styles['ModalRoot--vkapps'],\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 } = modalState;\n const contentHeight = (contentElement?.firstElementChild as HTMLElement).offsetHeight;\n\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange;\n let hiddenRange: TranslateRange;\n\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = [shiftHalf, translateYFrom + visiblePart / 4];\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = [translateY + 25, translateY + 25];\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","React","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalTranslate","modalState","getModalState","activeModal","animateTranslate","translateY","updateModalHeight","type","ModalType","PAGE","dynamicContentHeight","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","registerModal","Object","id","data","assign","onClose","onExit","isInsideModal","timeout","platform","Platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","setMaskOpacity","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","transitionEvent","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","setTransformStyle","forceOpacity","history","opacity","toString","render","TouchRootContext","Provider","value","ModalRootContext","Touch","className","classNames","configProvider","webviewType","WebviewType","VKAPPS","onMove","onEnd","div","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","getRootRef","restoreFocus","Component","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","contentHeight","firstElementChild","prevTranslateY","clientHeight","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext, WebviewType } 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}\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 };\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 }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n\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 }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\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?.webviewType === WebviewType.VKAPPS &&\n styles['ModalRoot--vkapps'],\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 } = modalState;\n const contentHeight = (contentElement?.firstElementChild as HTMLElement).offsetHeight;\n\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange;\n let hiddenRange: TranslateRange;\n\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = [shiftHalf, translateYFrom + visiblePart / 4];\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = [translateY + 25, translateY + 25];\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","React","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","ModalType","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","registerModal","Object","id","data","assign","onClose","onExit","isInsideModal","timeout","platform","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","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","setMaskOpacity","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","transitionEvent","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","setTransformStyle","forceOpacity","history","opacity","toString","render","TouchRootContext","Provider","value","ModalRootContext","Touch","className","classNames","configProvider","webviewType","WebviewType","VKAPPS","onMove","onEnd","div","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","getRootRef","restoreFocus","Component","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","contentHeight","firstElementChild","prevTranslateY","clientHeight","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalRoot/types.ts"],"sourcesContent":["import { DOMContextInterface } from '../../lib/dom';\nimport { HasChildren, 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}\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
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalRoot/types.ts"],"sourcesContent":["import { DOMContextInterface } from '../../lib/dom';\nimport { HasChildren, 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}\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 extends HasChildren {\n activeModal?: string | null;\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","PAGE","CARD"],"mappings":";;;;;;;;;;IAIO;UAAKA,SAAS;IAATA,UACVC,UAAO;IADGD,UAEVE,UAAO;GAFGF,cAAAA"}
|
|
@@ -107,7 +107,6 @@ function useModalManager(activeModal, children) {
|
|
|
107
107
|
state.onOpened = Modal.props.onOpened;
|
|
108
108
|
state.onClose = Modal.props.onClose;
|
|
109
109
|
state.onClosed = Modal.props.onClosed;
|
|
110
|
-
state.dynamicContentHeight = !!modalProps.dynamicContentHeight;
|
|
111
110
|
// ModalPage props
|
|
112
111
|
if (typeof modalProps.settlingHeight === "number") {
|
|
113
112
|
state.settlingHeight = modalProps.settlingHeight;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalRoot/useModalManager.tsx"],"sourcesContent":["import * as React from 'react';\nimport { isFunction, noop } from '@vkontakte/vkjs';\nimport { getNavId } from '../../lib/getNavId';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasChildren } from '../../types';\nimport { ModalsState, ModalsStateEntry, ModalType } from './types';\n\ninterface ModalTransitionState {\n activeModal?: string | null;\n enteringModal?: string | null;\n exitingModal?: string | null;\n history?: string[];\n isBack?: boolean | null;\n}\n\nexport interface ModalTransitionProps extends ModalTransitionState {\n onEnter: VoidFunction;\n onEntered: (id: string | null) => void;\n onExit: VoidFunction;\n onExited: (id: string | null) => void;\n getModalState: (id: string | undefined | null) => ModalsStateEntry | undefined;\n delayEnter: boolean;\n}\n\nfunction getModals(children: React.ReactNode | React.ReactNode[]) {\n return React.Children.toArray(children) as React.ReactElement[];\n}\n\nconst warn = warnOnce('ModalRoot');\n\nexport function modalTransitionReducer(\n state: ModalTransitionState,\n action: {\n type: 'setActive' | 'entered' | 'exited' | 'inited';\n id: string | null;\n },\n): ModalTransitionState {\n if (action.type === 'setActive' && action.id !== state.activeModal) {\n const nextModal = action.id;\n // preserve exiting modal if switching mid-transition\n const prevModal = state.exitingModal || state.activeModal;\n let history = state.history ? [...state.history] : [];\n const isBack = Boolean(nextModal && history.includes(nextModal));\n\n if (nextModal === null) {\n history = [];\n } else if (isBack) {\n history = history.splice(0, history.indexOf(nextModal) + 1);\n } else {\n history.push(nextModal);\n }\n\n return {\n activeModal: nextModal,\n // not entering yet\n enteringModal: null,\n exitingModal: prevModal,\n history,\n isBack,\n };\n }\n if (action.type === 'entered' && action.id === state.enteringModal) {\n return { ...state, enteringModal: null };\n }\n if (action.type === 'exited' && action.id === state.exitingModal) {\n return { ...state, exitingModal: null };\n }\n if (action.type === 'inited' && action.id === state.activeModal) {\n return { ...state, enteringModal: action.id };\n }\n return state;\n}\n\n/**\n * Реализует переход модалок. При смене activeModal m1 -> m2:\n * 1. activeModal: m1, exitingModal: null, enteringModal: null, триггер перехода\n * 2. activeModal: m2, exitingModal: m1, enteringModal: null, рендерим m2 чтобы прошел init, начинаем анимацию выхода\n * одновременный переход между ModalPage:\n * 3a. activeModal: m2, exitingModal: m1, enteringModal: m2\n * 4a. exitingModal и enteringModal переходят в null в порядке завершения анимации\n * ИЛИ дожидаемся скрытия ModalCard\n * 3b. activeModal: m2, exitingModal: null, enteringModal: m2\n * 4b. enteringModal переходит в null после завершения анимации\n * 5. activeModal: m2, exitingModal: null, enteringModal: null, переход закончен\n */\nexport function useModalManager(\n activeModal: string | null | undefined,\n children: React.ReactNode | React.ReactNode[],\n onOpen: (id: string) => void = noop,\n onOpened: (id: string) => void = noop,\n onClose: (id: string) => void = noop,\n onClosed: (id: string) => void = noop,\n initModal: (state: ModalsStateEntry) => void = noop,\n): ModalTransitionProps {\n const modalsState = React.useRef<ModalsState>({}).current;\n getModals(children).forEach((Modal) => {\n const modalProps = Modal.props;\n const id = getNavId(modalProps, warn);\n const state: ModalsStateEntry = (id !== undefined && modalsState[id]) || {\n id: id ?? null,\n };\n\n state.onOpen = Modal.props.onOpen;\n state.onOpened = Modal.props.onOpened;\n state.onClose = Modal.props.onClose;\n state.onClosed = Modal.props.onClosed;\n state.dynamicContentHeight = !!modalProps.dynamicContentHeight;\n // ModalPage props\n if (typeof modalProps.settlingHeight === 'number') {\n state.settlingHeight = modalProps.settlingHeight;\n }\n\n if (state.id !== null) {\n modalsState[state.id] = state;\n }\n });\n\n const isMissing = activeModal && !modalsState[activeModal];\n const safeActiveModal = isMissing ? null : activeModal;\n const [transitionState, dispatchTransition] = React.useReducer(modalTransitionReducer, {\n activeModal: safeActiveModal,\n enteringModal: null,\n exitingModal: null,\n history: safeActiveModal ? [safeActiveModal] : [],\n isBack: false,\n });\n\n // Map props to state, render activeModal for init\n useIsomorphicLayoutEffect(() => {\n // ignore non-existent activeModal\n if (process.env.NODE_ENV === 'development' && isMissing) {\n warn(`Переход невозможен - модальное окно (страница) ${activeModal} не существует`, 'error');\n }\n dispatchTransition({ type: 'setActive', id: safeActiveModal ?? null });\n }, [activeModal]);\n\n // Init activeModal & set enteringModal\n useIsomorphicLayoutEffect(() => {\n if (transitionState.activeModal) {\n initModal(modalsState[transitionState.activeModal]);\n dispatchTransition({ type: 'inited', id: transitionState.activeModal });\n }\n }, [transitionState.activeModal]);\n\n const isCard = (id: string | null | undefined) =>\n id != null && modalsState[id]?.type === ModalType.CARD;\n const onEntered = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onOpened)) {\n modalState.onOpened();\n } else if (isFunction(onOpened)) {\n onOpened(id);\n }\n }\n\n dispatchTransition({ type: 'entered', id });\n },\n [modalsState, onOpened],\n );\n const onExited = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onClosed)) {\n modalState.onClosed();\n } else if (isFunction(onClosed)) {\n onClosed(id);\n }\n }\n\n dispatchTransition({ type: 'exited', id });\n },\n [modalsState, onClosed],\n );\n const delayEnter = Boolean(\n transitionState.exitingModal && (isCard(activeModal) || isCard(transitionState.exitingModal)),\n );\n const getModalState = React.useCallback(\n (id: string | undefined | null) => (id ? modalsState[id] : undefined),\n [modalsState],\n );\n\n function onEnter() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onOpen)) {\n modalState.onOpen();\n } else if (isFunction(onOpen) && modalState.id) {\n onOpen(modalState.id);\n }\n }\n }\n\n function onExit() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onClose)) {\n modalState.onClose();\n } else if (isFunction(onClose) && modalState.id) {\n onClose(modalState.id);\n }\n }\n }\n\n return {\n onEnter,\n onEntered,\n onExit,\n onExited,\n ...transitionState,\n delayEnter,\n getModalState,\n };\n}\n\ntype WithModalManager<Props extends ModalTransitionProps> = HasChildren &\n Omit<Props, keyof ModalTransitionProps> & {\n activeModal?: string | null;\n };\n\nexport function withModalManager(initModal: (a: ModalsStateEntry) => void = noop) {\n return function <Props extends ModalTransitionProps>(\n Wrapped: React.ComponentType<Props>,\n ): React.ComponentType<WithModalManager<Props>> {\n return function WithModalManager(props) {\n const transitionManager = useModalManager(\n props.activeModal,\n props.children,\n (props as any).onOpen,\n (props as any).onOpened,\n (props as any).onClose,\n (props as any).onClosed,\n initModal,\n );\n return <Wrapped {...(props as any)} {...transitionManager} />;\n };\n };\n}\n"],"names":["modalTransitionReducer","useModalManager","withModalManager","getModals","children","React","Children","toArray","warn","warnOnce","state","action","type","id","activeModal","nextModal","prevModal","exitingModal","history","isBack","Boolean","includes","splice","indexOf","push","enteringModal","onOpen","noop","onOpened","onClose","onClosed","initModal","onEnter","modalState","transitionState","modalsState","isFunction","onExit","useRef","current","forEach","Modal","modalProps","props","getNavId","undefined","dynamicContentHeight","settlingHeight","isMissing","safeActiveModal","useReducer","dispatchTransition","useIsomorphicLayoutEffect","process","env","NODE_ENV","isCard","ModalType","CARD","onEntered","useCallback","onExited","delayEnter","getModalState","Wrapped","WithModalManager","transitionManager"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalRoot/useModalManager.tsx"],"sourcesContent":["import * as React from 'react';\nimport { isFunction, noop } from '@vkontakte/vkjs';\nimport { getNavId } from '../../lib/getNavId';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasChildren } from '../../types';\nimport { ModalsState, ModalsStateEntry, ModalType } from './types';\n\ninterface ModalTransitionState {\n activeModal?: string | null;\n enteringModal?: string | null;\n exitingModal?: string | null;\n history?: string[];\n isBack?: boolean | null;\n}\n\nexport interface ModalTransitionProps extends ModalTransitionState {\n onEnter: VoidFunction;\n onEntered: (id: string | null) => void;\n onExit: VoidFunction;\n onExited: (id: string | null) => void;\n getModalState: (id: string | undefined | null) => ModalsStateEntry | undefined;\n delayEnter: boolean;\n}\n\nfunction getModals(children: React.ReactNode | React.ReactNode[]) {\n return React.Children.toArray(children) as React.ReactElement[];\n}\n\nconst warn = warnOnce('ModalRoot');\n\nexport function modalTransitionReducer(\n state: ModalTransitionState,\n action: {\n type: 'setActive' | 'entered' | 'exited' | 'inited';\n id: string | null;\n },\n): ModalTransitionState {\n if (action.type === 'setActive' && action.id !== state.activeModal) {\n const nextModal = action.id;\n // preserve exiting modal if switching mid-transition\n const prevModal = state.exitingModal || state.activeModal;\n let history = state.history ? [...state.history] : [];\n const isBack = Boolean(nextModal && history.includes(nextModal));\n\n if (nextModal === null) {\n history = [];\n } else if (isBack) {\n history = history.splice(0, history.indexOf(nextModal) + 1);\n } else {\n history.push(nextModal);\n }\n\n return {\n activeModal: nextModal,\n // not entering yet\n enteringModal: null,\n exitingModal: prevModal,\n history,\n isBack,\n };\n }\n if (action.type === 'entered' && action.id === state.enteringModal) {\n return { ...state, enteringModal: null };\n }\n if (action.type === 'exited' && action.id === state.exitingModal) {\n return { ...state, exitingModal: null };\n }\n if (action.type === 'inited' && action.id === state.activeModal) {\n return { ...state, enteringModal: action.id };\n }\n return state;\n}\n\n/**\n * Реализует переход модалок. При смене activeModal m1 -> m2:\n * 1. activeModal: m1, exitingModal: null, enteringModal: null, триггер перехода\n * 2. activeModal: m2, exitingModal: m1, enteringModal: null, рендерим m2 чтобы прошел init, начинаем анимацию выхода\n * одновременный переход между ModalPage:\n * 3a. activeModal: m2, exitingModal: m1, enteringModal: m2\n * 4a. exitingModal и enteringModal переходят в null в порядке завершения анимации\n * ИЛИ дожидаемся скрытия ModalCard\n * 3b. activeModal: m2, exitingModal: null, enteringModal: m2\n * 4b. enteringModal переходит в null после завершения анимации\n * 5. activeModal: m2, exitingModal: null, enteringModal: null, переход закончен\n */\nexport function useModalManager(\n activeModal: string | null | undefined,\n children: React.ReactNode | React.ReactNode[],\n onOpen: (id: string) => void = noop,\n onOpened: (id: string) => void = noop,\n onClose: (id: string) => void = noop,\n onClosed: (id: string) => void = noop,\n initModal: (state: ModalsStateEntry) => void = noop,\n): ModalTransitionProps {\n const modalsState = React.useRef<ModalsState>({}).current;\n getModals(children).forEach((Modal) => {\n const modalProps = Modal.props;\n const id = getNavId(modalProps, warn);\n const state: ModalsStateEntry = (id !== undefined && modalsState[id]) || {\n id: id ?? null,\n };\n\n state.onOpen = Modal.props.onOpen;\n state.onOpened = Modal.props.onOpened;\n state.onClose = Modal.props.onClose;\n state.onClosed = Modal.props.onClosed;\n // ModalPage props\n if (typeof modalProps.settlingHeight === 'number') {\n state.settlingHeight = modalProps.settlingHeight;\n }\n\n if (state.id !== null) {\n modalsState[state.id] = state;\n }\n });\n\n const isMissing = activeModal && !modalsState[activeModal];\n const safeActiveModal = isMissing ? null : activeModal;\n const [transitionState, dispatchTransition] = React.useReducer(modalTransitionReducer, {\n activeModal: safeActiveModal,\n enteringModal: null,\n exitingModal: null,\n history: safeActiveModal ? [safeActiveModal] : [],\n isBack: false,\n });\n\n // Map props to state, render activeModal for init\n useIsomorphicLayoutEffect(() => {\n // ignore non-existent activeModal\n if (process.env.NODE_ENV === 'development' && isMissing) {\n warn(`Переход невозможен - модальное окно (страница) ${activeModal} не существует`, 'error');\n }\n dispatchTransition({ type: 'setActive', id: safeActiveModal ?? null });\n }, [activeModal]);\n\n // Init activeModal & set enteringModal\n useIsomorphicLayoutEffect(() => {\n if (transitionState.activeModal) {\n initModal(modalsState[transitionState.activeModal]);\n dispatchTransition({ type: 'inited', id: transitionState.activeModal });\n }\n }, [transitionState.activeModal]);\n\n const isCard = (id: string | null | undefined) =>\n id != null && modalsState[id]?.type === ModalType.CARD;\n const onEntered = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onOpened)) {\n modalState.onOpened();\n } else if (isFunction(onOpened)) {\n onOpened(id);\n }\n }\n\n dispatchTransition({ type: 'entered', id });\n },\n [modalsState, onOpened],\n );\n const onExited = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onClosed)) {\n modalState.onClosed();\n } else if (isFunction(onClosed)) {\n onClosed(id);\n }\n }\n\n dispatchTransition({ type: 'exited', id });\n },\n [modalsState, onClosed],\n );\n const delayEnter = Boolean(\n transitionState.exitingModal && (isCard(activeModal) || isCard(transitionState.exitingModal)),\n );\n const getModalState = React.useCallback(\n (id: string | undefined | null) => (id ? modalsState[id] : undefined),\n [modalsState],\n );\n\n function onEnter() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onOpen)) {\n modalState.onOpen();\n } else if (isFunction(onOpen) && modalState.id) {\n onOpen(modalState.id);\n }\n }\n }\n\n function onExit() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onClose)) {\n modalState.onClose();\n } else if (isFunction(onClose) && modalState.id) {\n onClose(modalState.id);\n }\n }\n }\n\n return {\n onEnter,\n onEntered,\n onExit,\n onExited,\n ...transitionState,\n delayEnter,\n getModalState,\n };\n}\n\ntype WithModalManager<Props extends ModalTransitionProps> = HasChildren &\n Omit<Props, keyof ModalTransitionProps> & {\n activeModal?: string | null;\n };\n\nexport function withModalManager(initModal: (a: ModalsStateEntry) => void = noop) {\n return function <Props extends ModalTransitionProps>(\n Wrapped: React.ComponentType<Props>,\n ): React.ComponentType<WithModalManager<Props>> {\n return function WithModalManager(props) {\n const transitionManager = useModalManager(\n props.activeModal,\n props.children,\n (props as any).onOpen,\n (props as any).onOpened,\n (props as any).onClose,\n (props as any).onClosed,\n initModal,\n );\n return <Wrapped {...(props as any)} {...transitionManager} />;\n };\n };\n}\n"],"names":["modalTransitionReducer","useModalManager","withModalManager","getModals","children","React","Children","toArray","warn","warnOnce","state","action","type","id","activeModal","nextModal","prevModal","exitingModal","history","isBack","Boolean","includes","splice","indexOf","push","enteringModal","onOpen","noop","onOpened","onClose","onClosed","initModal","onEnter","modalState","transitionState","modalsState","isFunction","onExit","useRef","current","forEach","Modal","modalProps","props","getNavId","undefined","settlingHeight","isMissing","safeActiveModal","useReducer","dispatchTransition","useIsomorphicLayoutEffect","process","env","NODE_ENV","isCard","ModalType","CARD","onEntered","useCallback","onExited","delayEnter","getModalState","Wrapped","WithModalManager","transitionManager"],"mappings":"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"}
|
|
@@ -14,17 +14,21 @@ export interface PanelHeaderProps extends React.HTMLAttributes<HTMLDivElement>,
|
|
|
14
14
|
* Если `false`, то шапка будет в потоке. По умолчанию `true`, но если платформа vkcom, то по умолчанию `false`.
|
|
15
15
|
*/
|
|
16
16
|
fixed?: boolean;
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* По умолчанию как `Component` используется `span`.
|
|
19
|
+
*/
|
|
20
|
+
typographyProps?: HasComponent & React.HTMLAttributes<HTMLElement>;
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* @see https://vkcom.github.io/VKUI/#/PanelHeader
|
|
22
24
|
*/
|
|
23
25
|
export declare const PanelHeader: {
|
|
24
|
-
({ before, children, after, separator, visor, transparent, shadow, getRef, getRootRef, fixed, className, ...restProps }: PanelHeaderProps): JSX.Element;
|
|
26
|
+
({ before, children, after, separator, visor, transparent, shadow, getRef, getRootRef, fixed, className, typographyProps, ...restProps }: PanelHeaderProps): JSX.Element;
|
|
25
27
|
Content: {
|
|
26
|
-
({ children, Component, id }:
|
|
28
|
+
({ children, Component, id, }: LegacyPanelHeaderContentProps): JSX.Element;
|
|
27
29
|
displayName: string;
|
|
28
30
|
};
|
|
29
31
|
};
|
|
32
|
+
interface LegacyPanelHeaderContentProps extends React.HTMLAttributes<HTMLElement>, HasComponent {
|
|
33
|
+
}
|
|
30
34
|
export {};
|
|
@@ -19,6 +19,7 @@ var _useAdaptivityConditionalRender = require("../../hooks/useAdaptivityConditio
|
|
|
19
19
|
var _usePlatform = require("../../hooks/usePlatform");
|
|
20
20
|
var _adaptivity = require("../../lib/adaptivity");
|
|
21
21
|
var _platform = require("../../lib/platform");
|
|
22
|
+
var _warnOnce = require("../../lib/warnOnce");
|
|
22
23
|
var _configProviderContext = require("../ConfigProvider/ConfigProviderContext");
|
|
23
24
|
var _fixedLayout = require("../FixedLayout/FixedLayout");
|
|
24
25
|
var _modalRootContext = require("../ModalRoot/ModalRootContext");
|
|
@@ -35,24 +36,27 @@ var sizeXClassNames = {
|
|
|
35
36
|
none: "vkuiPanelHeader--sizeX-none",
|
|
36
37
|
regular: "vkuiPanelHeader--sizeX-regular"
|
|
37
38
|
};
|
|
38
|
-
var PanelHeaderContent = function(param) {
|
|
39
|
-
var children = param.children, _param_Component = param.Component, Component = _param_Component === void 0 ? "span" : _param_Component, id = param.id;
|
|
40
|
-
var platform = (0, _usePlatform.usePlatform)();
|
|
41
|
-
return platform === _platform.Platform.VKCOM ? /*#__PURE__*/ _react.createElement(_text.Text, {
|
|
42
|
-
weight: "2",
|
|
43
|
-
Component: Component,
|
|
44
|
-
id: id
|
|
45
|
-
}, children) : /*#__PURE__*/ _react.createElement(Component, {
|
|
46
|
-
className: "vkuiPanelHeader__content-in",
|
|
47
|
-
id: id
|
|
48
|
-
}, children);
|
|
49
|
-
};
|
|
50
|
-
PanelHeaderContent.displayName = "PanelHeaderContent";
|
|
51
39
|
var PanelHeaderIn = function(param) {
|
|
52
|
-
var before = param.before, after = param.after, separator = param.separator, children = param.children;
|
|
40
|
+
var before = param.before, after = param.after, separator = param.separator, children = param.children, _param_typographyProps = param.typographyProps, typographyProps = _param_typographyProps === void 0 ? {} : _param_typographyProps;
|
|
41
|
+
var _typographyProps_Component = typographyProps.Component, Component = _typographyProps_Component === void 0 ? "span" : _typographyProps_Component, restProps = _objectWithoutProperties(typographyProps, [
|
|
42
|
+
"Component"
|
|
43
|
+
]);
|
|
53
44
|
var webviewType = (0, _configProviderContext.useConfigProvider)().webviewType;
|
|
54
45
|
var isInsideModal = _react.useContext(_modalRootContext.ModalRootContext).isInsideModal;
|
|
55
46
|
var platform = (0, _usePlatform.usePlatform)();
|
|
47
|
+
var typographyNode;
|
|
48
|
+
// TODO [>=6]: Удалить условие
|
|
49
|
+
if (/*#__PURE__*/ _react.isValidElement(children) && // eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
50
|
+
children.type.displayName === LegacyPanelHeaderContent.displayName) {
|
|
51
|
+
typographyNode = children;
|
|
52
|
+
} else {
|
|
53
|
+
typographyNode = platform === _platform.Platform.VKCOM ? /*#__PURE__*/ _react.createElement(_text.Text, _objectSpread({
|
|
54
|
+
weight: "2",
|
|
55
|
+
Component: Component
|
|
56
|
+
}, restProps), children) : /*#__PURE__*/ _react.createElement(Component, _objectSpread({
|
|
57
|
+
className: "vkuiPanelHeader__content-in"
|
|
58
|
+
}, restProps), children);
|
|
59
|
+
}
|
|
56
60
|
return /*#__PURE__*/ _react.createElement(_react.Fragment, null, /*#__PURE__*/ _react.createElement(_tooltipContainer.TooltipContainer, {
|
|
57
61
|
fixed: true,
|
|
58
62
|
className: "vkuiPanelHeader__in"
|
|
@@ -60,7 +64,7 @@ var PanelHeaderIn = function(param) {
|
|
|
60
64
|
className: (0, _vkjs.classNames)("vkuiPanelHeader__before", "vkuiInternalPanelHeader__before")
|
|
61
65
|
}, before), /*#__PURE__*/ _react.createElement("div", {
|
|
62
66
|
className: "vkuiPanelHeader__content"
|
|
63
|
-
},
|
|
67
|
+
}, typographyNode), /*#__PURE__*/ _react.createElement("div", {
|
|
64
68
|
className: (0, _vkjs.classNames)("vkuiPanelHeader__after", "vkuiInternalPanelHeader__after")
|
|
65
69
|
}, (webviewType === _configProviderContext.WebviewType.INTERNAL || isInsideModal) && after)), separator && platform === _platform.Platform.VKCOM && /*#__PURE__*/ _react.createElement(_separator.Separator, {
|
|
66
70
|
className: "vkuiPanelHeader__separator",
|
|
@@ -68,7 +72,7 @@ var PanelHeaderIn = function(param) {
|
|
|
68
72
|
}));
|
|
69
73
|
};
|
|
70
74
|
var PanelHeader = function(_param) {
|
|
71
|
-
var before = _param.before, children = _param.children, after = _param.after, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, _param_visor = _param.visor, visor = _param_visor === void 0 ? true : _param_visor, _param_transparent = _param.transparent, transparent = _param_transparent === void 0 ? false : _param_transparent, shadow = _param.shadow, getRef = _param.getRef, getRootRef = _param.getRootRef, fixed = _param.fixed, className = _param.className, restProps = _objectWithoutProperties(_param, [
|
|
75
|
+
var before = _param.before, children = _param.children, after = _param.after, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, _param_visor = _param.visor, visor = _param_visor === void 0 ? true : _param_visor, _param_transparent = _param.transparent, transparent = _param_transparent === void 0 ? false : _param_transparent, shadow = _param.shadow, getRef = _param.getRef, getRootRef = _param.getRootRef, fixed = _param.fixed, className = _param.className, typographyProps = _param.typographyProps, restProps = _objectWithoutProperties(_param, [
|
|
72
76
|
"before",
|
|
73
77
|
"children",
|
|
74
78
|
"after",
|
|
@@ -79,7 +83,8 @@ var PanelHeader = function(_param) {
|
|
|
79
83
|
"getRef",
|
|
80
84
|
"getRootRef",
|
|
81
85
|
"fixed",
|
|
82
|
-
"className"
|
|
86
|
+
"className",
|
|
87
|
+
"typographyProps"
|
|
83
88
|
]);
|
|
84
89
|
var platform = (0, _usePlatform.usePlatform)();
|
|
85
90
|
var webviewType = (0, _configProviderContext.useConfigProvider)().webviewType;
|
|
@@ -97,11 +102,13 @@ var PanelHeader = function(_param) {
|
|
|
97
102
|
}, /*#__PURE__*/ _react.createElement(PanelHeaderIn, {
|
|
98
103
|
before: before,
|
|
99
104
|
after: after,
|
|
100
|
-
separator: separator
|
|
105
|
+
separator: separator,
|
|
106
|
+
typographyProps: typographyProps
|
|
101
107
|
}, children)) : /*#__PURE__*/ _react.createElement(PanelHeaderIn, {
|
|
102
108
|
before: before,
|
|
103
109
|
after: after,
|
|
104
|
-
separator: separator
|
|
110
|
+
separator: separator,
|
|
111
|
+
typographyProps: typographyProps
|
|
105
112
|
}, children), separator && visor && platform !== _platform.Platform.VKCOM && /*#__PURE__*/ _react.createElement(_react.Fragment, null, adaptiveSizeX.compact && /*#__PURE__*/ _react.createElement(_separator.Separator, {
|
|
106
113
|
className: adaptiveSizeX.compact.className
|
|
107
114
|
}), adaptiveSizeX.regular && /*#__PURE__*/ _react.createElement(_spacing.Spacing, {
|
|
@@ -109,6 +116,26 @@ var PanelHeader = function(_param) {
|
|
|
109
116
|
size: 16
|
|
110
117
|
})));
|
|
111
118
|
};
|
|
112
|
-
|
|
119
|
+
var warn = (0, _warnOnce.warnOnce)("PanelHeader");
|
|
120
|
+
/**
|
|
121
|
+
* TODO [>=6]: Удалить подкомпонент
|
|
122
|
+
* @deprecated
|
|
123
|
+
*/ var LegacyPanelHeaderContent = function(param) {
|
|
124
|
+
var children = param.children, _param_Component = param.Component, Component = _param_Component === void 0 ? "span" : _param_Component, id = param.id;
|
|
125
|
+
if (process.env.NODE_ENV === "development") {
|
|
126
|
+
warn("Подкомпонент PanelHeader.Content устарел и будет удалён в v6. Используйте параметр typographyProps.");
|
|
127
|
+
}
|
|
128
|
+
var platform = (0, _usePlatform.usePlatform)();
|
|
129
|
+
return platform === _platform.Platform.VKCOM ? /*#__PURE__*/ _react.createElement(_text.Text, {
|
|
130
|
+
weight: "2",
|
|
131
|
+
Component: Component,
|
|
132
|
+
id: id
|
|
133
|
+
}, children) : /*#__PURE__*/ _react.createElement(Component, {
|
|
134
|
+
className: "vkuiPanelHeader__content-in",
|
|
135
|
+
id: id
|
|
136
|
+
}, children);
|
|
137
|
+
};
|
|
138
|
+
LegacyPanelHeaderContent.displayName = "LegacyPanelHeaderContent";
|
|
139
|
+
PanelHeader.Content = LegacyPanelHeaderContent;
|
|
113
140
|
|
|
114
141
|
//# sourceMappingURL=PanelHeader.js.map
|