@vkontakte/vkui 5.7.0 → 5.7.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/Banner/Banner.js +1 -1
- package/dist/cjs/components/Banner/Banner.js.map +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.js +3 -1
- package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +4 -2
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/Group/Group.js +2 -3
- package/dist/cjs/components/Group/Group.js.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +13 -11
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cjs/components/Image/Image.js +52 -37
- package/dist/cjs/components/Image/Image.js.map +1 -1
- package/dist/cjs/components/ImageBase/ImageBase.js +20 -1
- package/dist/cjs/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js +1 -1
- package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/cjs/components/PopoutRoot/PopoutRoot.js +1 -3
- package/dist/cjs/components/PopoutRoot/PopoutRoot.js.map +1 -1
- package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js +1 -1
- package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.d.ts +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js +8 -3
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cjs/components/SimpleCell/SimpleCell.js +0 -1
- package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cjs/components/View/View.js +4 -4
- package/dist/cjs/components/View/View.js.map +1 -1
- package/dist/cjs/components/View/ViewInfinite.js +4 -4
- package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
- package/dist/cjs/hooks/useAdaptivityHasHover.js +4 -3
- package/dist/cjs/hooks/useAdaptivityHasHover.js.map +1 -1
- package/dist/cjs/hooks/useAdaptivityHasPointer.js +5 -5
- package/dist/cjs/hooks/useAdaptivityHasPointer.js.map +1 -1
- package/dist/cjs/hooks/useAutoFocus.d.ts +2 -0
- package/dist/cjs/hooks/useAutoFocus.js +23 -0
- package/dist/cjs/hooks/useAutoFocus.js.map +1 -0
- package/dist/cjs/hooks/useChipsSelect.js +5 -4
- package/dist/cjs/hooks/useChipsSelect.js.map +1 -1
- package/dist/cjs/hooks/useFocusWithin.js +3 -0
- package/dist/cjs/hooks/useFocusWithin.js.map +1 -1
- package/dist/cjs/hooks/useIsClient.js +2 -1
- package/dist/cjs/hooks/useIsClient.js.map +1 -1
- package/dist/components/Banner/Banner.js +2 -2
- package/dist/components/Banner/Banner.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +3 -1
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +4 -2
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/Group/Group.js +2 -3
- package/dist/components/Group/Group.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.js +13 -11
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/Image/Image.js +54 -39
- package/dist/components/Image/Image.js.map +1 -1
- package/dist/components/ImageBase/ImageBase.js +20 -1
- package/dist/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/components/MiniInfoCell/MiniInfoCell.js +1 -1
- package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/components/PopoutRoot/PopoutRoot.js +1 -3
- package/dist/components/PopoutRoot/PopoutRoot.js.map +1 -1
- package/dist/components/PopoutWrapper/PopoutWrapper.js +1 -1
- package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.d.ts +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.js +8 -3
- package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.js +0 -1
- package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/components/View/View.js +4 -4
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.js +4 -4
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components.css +22 -22
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +757 -698
- package/dist/cssm/components/ActionSheet/ActionSheet.module.css +3 -3
- package/dist/cssm/components/Alert/Alert.module.css +4 -4
- package/dist/cssm/components/Banner/Banner.js +2 -2
- package/dist/cssm/components/Banner/Banner.js.map +1 -1
- package/dist/cssm/components/Banner/Banner.module.css +2 -2
- package/dist/cssm/components/Checkbox/Checkbox.js +3 -1
- package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.module.css +6 -0
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +3 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/FocusVisible/FocusVisible.module.css +4 -4
- package/dist/cssm/components/Group/Group.js +2 -3
- package/dist/cssm/components/Group/Group.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +13 -11
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/Image/Image.js +46 -33
- package/dist/cssm/components/Image/Image.js.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBase.js +20 -1
- package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.module.css +0 -4
- package/dist/cssm/components/ModalRoot/ModalRoot.module.css +2 -2
- package/dist/cssm/components/PanelHeader/PanelHeader.module.css +4 -2
- package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.module.css +8 -8
- package/dist/cssm/components/Placeholder/Placeholder.module.css +1 -0
- package/dist/cssm/components/PopoutRoot/PopoutRoot.js +1 -3
- package/dist/cssm/components/PopoutRoot/PopoutRoot.js.map +1 -1
- package/dist/cssm/components/PopoutRoot/PopoutRoot.module.css +0 -4
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +1 -1
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +2 -2
- package/dist/cssm/components/Popover/Popover.module.css +2 -2
- package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +4 -4
- package/dist/cssm/components/RichTooltip/RichTooltip.module.css +2 -2
- package/dist/cssm/components/Root/Root.module.css +12 -13
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.module.css +5 -5
- package/dist/cssm/components/SelectMimicry/SelectMimicry.d.ts +1 -1
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js +6 -2
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.js +0 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.module.css +4 -4
- package/dist/cssm/components/Tappable/Tappable.module.css +2 -2
- package/dist/cssm/components/TextTooltip/TextTooltip.module.css +2 -2
- package/dist/cssm/components/View/View.js +4 -4
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/View.module.css +16 -16
- package/dist/cssm/components/View/ViewInfinite.js +4 -4
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/hooks/useAdaptivityHasHover.js +4 -3
- package/dist/cssm/hooks/useAdaptivityHasHover.js.map +1 -1
- package/dist/cssm/hooks/useAdaptivityHasPointer.js +5 -5
- package/dist/cssm/hooks/useAdaptivityHasPointer.js.map +1 -1
- package/dist/cssm/hooks/useAutoFocus.d.ts +2 -0
- package/dist/cssm/hooks/useAutoFocus.js +12 -0
- package/dist/cssm/hooks/useAutoFocus.js.map +1 -0
- package/dist/cssm/hooks/useChipsSelect.js +5 -4
- package/dist/cssm/hooks/useChipsSelect.js.map +1 -1
- package/dist/cssm/hooks/useFocusWithin.js +3 -0
- package/dist/cssm/hooks/useFocusWithin.js.map +1 -1
- package/dist/cssm/hooks/useIsClient.js +2 -1
- package/dist/cssm/hooks/useIsClient.js.map +1 -1
- package/dist/cssm/styles/constants.css +1 -1
- package/dist/hooks/useAdaptivityHasHover.js +4 -3
- package/dist/hooks/useAdaptivityHasHover.js.map +1 -1
- package/dist/hooks/useAdaptivityHasPointer.js +5 -5
- package/dist/hooks/useAdaptivityHasPointer.js.map +1 -1
- package/dist/hooks/useAutoFocus.d.ts +2 -0
- package/dist/hooks/useAutoFocus.js +12 -0
- package/dist/hooks/useAutoFocus.js.map +1 -0
- package/dist/hooks/useChipsSelect.js +5 -4
- package/dist/hooks/useChipsSelect.js.map +1 -1
- package/dist/hooks/useFocusWithin.js +3 -0
- package/dist/hooks/useFocusWithin.js.map +1 -1
- package/dist/hooks/useIsClient.js +2 -1
- package/dist/hooks/useIsClient.js.map +1 -1
- package/dist/vkui.css +22 -22
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +757 -698
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Image/Image.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ImageBase, type ImageBaseOverlayProps, type ImageBaseProps } from '../ImageBase/ImageBase';\nimport { ImageBadge, type ImageBadgeProps } from './ImageBadge/ImageBadge';\n\nexport type { ImageBadgeProps, ImageBaseOverlayProps as ImageOverlayProps };\n\nexport const IMAGE_DEFAULT_SIZE = 48;\n\nexport interface ImageProps extends Omit<ImageBaseProps, 'badge'> {\n /**\n * Размер закругления.\n */\n borderRadius?: 's' | 'l' | 'm';\n}\n\
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Image/Image.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ImageBase, type ImageBaseOverlayProps, type ImageBaseProps } from '../ImageBase/ImageBase';\nimport { ImageBadge, type ImageBadgeProps } from './ImageBadge/ImageBadge';\n\nexport type { ImageBadgeProps, ImageBaseOverlayProps as ImageOverlayProps };\n\nexport const IMAGE_DEFAULT_SIZE = 48;\n\nexport interface ImageProps extends Omit<ImageBaseProps, 'badge'> {\n /**\n * Размер закругления.\n */\n borderRadius?: 's' | 'l' | 'm';\n}\n\nconst getBorderRadiusBySize = (\n size: Exclude<ImageBaseProps['size'], undefined>,\n borderRadius: Exclude<ImageProps['borderRadius'], undefined>,\n) => {\n switch (borderRadius) {\n case 's': {\n if (size <= 32) {\n return 2;\n }\n if (size <= 56) {\n return 3;\n }\n return 4;\n }\n case 'm': {\n if (size <= 32) {\n return 3;\n }\n if (size <= 48) {\n return 4;\n }\n if (size <= 72) {\n return 6;\n }\n if (size <= 80) {\n return 8;\n }\n return 10;\n }\n case 'l': {\n if (size <= 16) {\n return 4;\n }\n if (size <= 20) {\n return 5;\n }\n if (size <= 32) {\n return 6;\n }\n if (size <= 40) {\n return 8;\n }\n if (size <= 48) {\n return 10;\n }\n if (size <= 56) {\n return 12;\n }\n if (size <= 64) {\n return 14;\n }\n return 16;\n }\n }\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Image\n */\nexport const Image = ({\n size = IMAGE_DEFAULT_SIZE,\n borderRadius: borderRadiusProp = 'm',\n style,\n className,\n ...restProps\n}: ImageProps) => {\n const borderRadius = React.useMemo(\n () => getBorderRadiusBySize(size, borderRadiusProp),\n [size, borderRadiusProp],\n );\n\n return (\n <ImageBase\n {...restProps}\n size={size}\n style={{ ...style, borderRadius }}\n className={className}\n />\n );\n};\n\nImage.Badge = ImageBadge;\n\nImage.Overlay = ImageBase.Overlay;\n"],"names":["IMAGE_DEFAULT_SIZE","Image","getBorderRadiusBySize","size","borderRadius","borderRadiusProp","style","className","restProps","React","useMemo","ImageBase","Badge","ImageBadge","Overlay"],"mappings":";;;;;;;;;;;IAMaA,kBAAkB;eAAlBA;;IAoEAC,KAAK;eAALA;;;;;;;+DA1EU;yBACoD;0BAC1B;AAI1C,IAAMD,qBAAqB;AASlC,IAAME,wBAAwB,SAC5BC,MACAC;IAEA,OAAQA;QACN,KAAK;YAAK;gBACR,IAAID,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;QACA,KAAK;YAAK;gBACR,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;QACA,KAAK;YAAK;gBACR,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;IACF;AACF;AAKO,IAAMF,QAAQ;6BACnBE,MAAAA,gCAAOH,kCACOK,aAAdD,cAAcC,mBAAAA,iBAAmB,MAAnBA,KACdC,eAAAA,OACAC,mBAAAA,WACGC;QAJHL;QACAC;QACAE;QACAC;;IAGA,IAAMH,eAAeK,OAAMC,OAAO,CAChC;eAAMR,sBAAsBC,MAAME;OAClC;QAACF;QAAME;KAAiB;IAG1B,qBACE,qBAACM,oBAAS,8CACJH;QACJL,MAAMA;QACNG,OAAO,4CAAKA;YAAOF,cAAAA;;QACnBG,WAAWA;;AAGjB;AAEAN,MAAMW,KAAK,GAAGC,sBAAU;AAExBZ,MAAMa,OAAO,GAAGH,oBAAS,CAACG,OAAO"}
|
|
@@ -32,6 +32,7 @@ var _object_without_properties = require("@swc/helpers/_/_object_without_propert
|
|
|
32
32
|
var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
|
|
33
33
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
34
34
|
var _vkjs = require("@vkontakte/vkjs");
|
|
35
|
+
var _useExternRef = require("../../hooks/useExternRef");
|
|
35
36
|
var _ImageBaseBadge = require("./ImageBaseBadge/ImageBaseBadge");
|
|
36
37
|
var _ImageBaseOverlay = require("./ImageBaseOverlay/ImageBaseOverlay");
|
|
37
38
|
var _context = require("./context");
|
|
@@ -79,6 +80,9 @@ var ImageBase = function(_param) {
|
|
|
79
80
|
}
|
|
80
81
|
var handleImageLoad = function(event) {
|
|
81
82
|
var _onLoad;
|
|
83
|
+
if (loaded) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
82
86
|
setLoaded(true);
|
|
83
87
|
setFailed(false);
|
|
84
88
|
(_onLoad = onLoad) === null || _onLoad === void 0 ? void 0 : _onLoad(event);
|
|
@@ -89,6 +93,21 @@ var ImageBase = function(_param) {
|
|
|
89
93
|
setFailed(true);
|
|
90
94
|
(_onError = onError) === null || _onError === void 0 ? void 0 : _onError(event);
|
|
91
95
|
};
|
|
96
|
+
var imgRef = (0, _useExternRef.useExternRef)(getRef);
|
|
97
|
+
var isOnLoadStatusCheckedRef = _react.useRef(false);
|
|
98
|
+
_react.useEffect(function dispatchLoadEventForAlreadyLoadedResourceIfReactInitializedLater() {
|
|
99
|
+
if (isOnLoadStatusCheckedRef.current) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
isOnLoadStatusCheckedRef.current = true;
|
|
103
|
+
if (imgRef.current && imgRef.current.complete && !loaded) {
|
|
104
|
+
var event = new Event("load");
|
|
105
|
+
imgRef.current.dispatchEvent(event);
|
|
106
|
+
}
|
|
107
|
+
}, [
|
|
108
|
+
imgRef,
|
|
109
|
+
loaded
|
|
110
|
+
]);
|
|
92
111
|
var sizeClassName = function() {
|
|
93
112
|
switch(size){
|
|
94
113
|
case 28:
|
|
@@ -119,7 +138,7 @@ var ImageBase = function(_param) {
|
|
|
119
138
|
"aria-label": ariaLabel,
|
|
120
139
|
onClick: onClick
|
|
121
140
|
}), hasSrc && /*#__PURE__*/ _react.createElement("img", {
|
|
122
|
-
ref:
|
|
141
|
+
ref: imgRef,
|
|
123
142
|
alt: alt,
|
|
124
143
|
className: "vkuiImageBase__img",
|
|
125
144
|
crossOrigin: crossOrigin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ImageBase/ImageBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HasRef, HasRootRef, LiteralUnion } from '../../types';\nimport { ImageBaseBadge, type ImageBaseBadgeProps } from './ImageBaseBadge/ImageBaseBadge';\nimport { ImageBaseOverlay, type ImageBaseOverlayProps } from './ImageBaseOverlay/ImageBaseOverlay';\nimport { ImageBaseContext } from './context';\nimport type { ImageBaseContextProps, ImageBaseExpectedIconProps, ImageBaseSize } from './types';\nimport { validateFallbackIcon, validateSize } from './validators';\nimport styles from './ImageBase.module.css';\n\nexport type {\n ImageBaseSize,\n ImageBaseExpectedIconProps,\n ImageBaseBadgeProps,\n ImageBaseOverlayProps,\n ImageBaseContextProps,\n};\n\nexport {\n getBadgeIconSizeByImageBaseSize,\n getFallbackIconSizeByImageBaseSize,\n getOverlayIconSizeByImageBaseSize,\n} from './helpers';\n\nexport { ImageBaseContext };\n\nexport interface ImageBaseProps\n extends React.ImgHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLImageElement> {\n /**\n * Задаёт размер картинки.\n *\n * Используйте размеры заданные дизайн-системой `16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 56 | 64 | 72 | 80 | 88 | 96`.\n *\n * > ⚠️ Использование кастомного размера – это пограничный кейс.\n */\n size?: LiteralUnion<ImageBaseSize, number>;\n /**\n * Включает или отключает обводку.\n */\n withBorder?: boolean;\n /**\n * Фолбек на случай, если картинка не прогрузилась.\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getFallbackIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n *\n * > ⚠️ Может перекрывать `children`.\n */\n fallbackIcon?: React.ReactElement<ImageBaseExpectedIconProps>;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ImageBase\n */\nexport const ImageBase = ({\n alt,\n crossOrigin,\n decoding,\n loading,\n referrerPolicy,\n sizes,\n src,\n srcSet,\n useMap,\n getRef,\n size = 24,\n width,\n height,\n style,\n className,\n getRootRef,\n withBorder = true,\n 'fallbackIcon': fallbackIconProp,\n children,\n 'aria-label': ariaLabel,\n onClick,\n onLoad,\n onError,\n ...restProps\n}: ImageBaseProps) => {\n const [loaded, setLoaded] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n\n const hasSrc = src || srcSet;\n const needShowFallbackIcon = (failed || !hasSrc) && React.isValidElement(fallbackIconProp);\n\n const fallbackIcon = needShowFallbackIcon ? fallbackIconProp : null;\n\n if (process.env.NODE_ENV === 'development') {\n validateSize(size);\n if (fallbackIcon) {\n validateFallbackIcon(size, { name: 'fallbackIcon', value: fallbackIcon });\n }\n }\n\n const handleImageLoad = (event: React.SyntheticEvent<HTMLImageElement>) => {\n setLoaded(true);\n setFailed(false);\n onLoad?.(event);\n };\n\n const handleImageError = (event: React.SyntheticEvent<HTMLImageElement>) => {\n setLoaded(false);\n setFailed(true);\n onError?.(event);\n };\n\n const sizeClassName = (() => {\n switch (size) {\n case 28:\n return styles['ImageBase--size-28'];\n case 32:\n return styles['ImageBase--size-32'];\n case 40:\n return styles['ImageBase--size-40'];\n case 48:\n return styles['ImageBase--size-48'];\n case 72:\n return styles['ImageBase--size-72'];\n }\n\n return null;\n })();\n\n return (\n <ImageBaseContext.Provider value={{ size }}>\n <div\n {...restProps}\n ref={getRootRef}\n style={{ ...style, width: size, height: size }}\n className={classNames(\n className,\n styles['ImageBase'],\n sizeClassName,\n loaded && styles['ImageBase--loaded'],\n )}\n role={hasSrc ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n onClick={onClick}\n >\n {hasSrc && (\n <img\n ref={
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ImageBase/ImageBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport type { HasRef, HasRootRef, LiteralUnion } from '../../types';\nimport { ImageBaseBadge, type ImageBaseBadgeProps } from './ImageBaseBadge/ImageBaseBadge';\nimport { ImageBaseOverlay, type ImageBaseOverlayProps } from './ImageBaseOverlay/ImageBaseOverlay';\nimport { ImageBaseContext } from './context';\nimport type { ImageBaseContextProps, ImageBaseExpectedIconProps, ImageBaseSize } from './types';\nimport { validateFallbackIcon, validateSize } from './validators';\nimport styles from './ImageBase.module.css';\n\nexport type {\n ImageBaseSize,\n ImageBaseExpectedIconProps,\n ImageBaseBadgeProps,\n ImageBaseOverlayProps,\n ImageBaseContextProps,\n};\n\nexport {\n getBadgeIconSizeByImageBaseSize,\n getFallbackIconSizeByImageBaseSize,\n getOverlayIconSizeByImageBaseSize,\n} from './helpers';\n\nexport { ImageBaseContext };\n\nexport interface ImageBaseProps\n extends React.ImgHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLImageElement> {\n /**\n * Задаёт размер картинки.\n *\n * Используйте размеры заданные дизайн-системой `16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 56 | 64 | 72 | 80 | 88 | 96`.\n *\n * > ⚠️ Использование кастомного размера – это пограничный кейс.\n */\n size?: LiteralUnion<ImageBaseSize, number>;\n /**\n * Включает или отключает обводку.\n */\n withBorder?: boolean;\n /**\n * Фолбек на случай, если картинка не прогрузилась.\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getFallbackIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n *\n * > ⚠️ Может перекрывать `children`.\n */\n fallbackIcon?: React.ReactElement<ImageBaseExpectedIconProps>;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ImageBase\n */\nexport const ImageBase = ({\n alt,\n crossOrigin,\n decoding,\n loading,\n referrerPolicy,\n sizes,\n src,\n srcSet,\n useMap,\n getRef,\n size = 24,\n width,\n height,\n style,\n className,\n getRootRef,\n withBorder = true,\n 'fallbackIcon': fallbackIconProp,\n children,\n 'aria-label': ariaLabel,\n onClick,\n onLoad,\n onError,\n ...restProps\n}: ImageBaseProps) => {\n const [loaded, setLoaded] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n\n const hasSrc = src || srcSet;\n const needShowFallbackIcon = (failed || !hasSrc) && React.isValidElement(fallbackIconProp);\n\n const fallbackIcon = needShowFallbackIcon ? fallbackIconProp : null;\n\n if (process.env.NODE_ENV === 'development') {\n validateSize(size);\n if (fallbackIcon) {\n validateFallbackIcon(size, { name: 'fallbackIcon', value: fallbackIcon });\n }\n }\n\n const handleImageLoad = (event: React.SyntheticEvent<HTMLImageElement>) => {\n if (loaded) {\n return;\n }\n\n setLoaded(true);\n setFailed(false);\n onLoad?.(event);\n };\n\n const handleImageError = (event: React.SyntheticEvent<HTMLImageElement>) => {\n setLoaded(false);\n setFailed(true);\n onError?.(event);\n };\n\n const imgRef = useExternRef(getRef);\n const isOnLoadStatusCheckedRef = React.useRef(false);\n React.useEffect(\n function dispatchLoadEventForAlreadyLoadedResourceIfReactInitializedLater() {\n if (isOnLoadStatusCheckedRef.current) {\n return;\n }\n isOnLoadStatusCheckedRef.current = true;\n\n if (imgRef.current && imgRef.current.complete && !loaded) {\n const event = new Event('load');\n imgRef.current.dispatchEvent(event);\n }\n },\n [imgRef, loaded],\n );\n\n const sizeClassName = (() => {\n switch (size) {\n case 28:\n return styles['ImageBase--size-28'];\n case 32:\n return styles['ImageBase--size-32'];\n case 40:\n return styles['ImageBase--size-40'];\n case 48:\n return styles['ImageBase--size-48'];\n case 72:\n return styles['ImageBase--size-72'];\n }\n\n return null;\n })();\n\n return (\n <ImageBaseContext.Provider value={{ size }}>\n <div\n {...restProps}\n ref={getRootRef}\n style={{ ...style, width: size, height: size }}\n className={classNames(\n className,\n styles['ImageBase'],\n sizeClassName,\n loaded && styles['ImageBase--loaded'],\n )}\n role={hasSrc ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n onClick={onClick}\n >\n {hasSrc && (\n <img\n ref={imgRef}\n alt={alt}\n className={styles['ImageBase__img']}\n crossOrigin={crossOrigin}\n decoding={decoding}\n loading={loading}\n referrerPolicy={referrerPolicy}\n sizes={sizes}\n src={src}\n srcSet={srcSet}\n useMap={useMap}\n width={width}\n height={height}\n onLoad={handleImageLoad}\n onError={handleImageError}\n />\n )}\n {fallbackIcon && (\n <div className={classNames(styles['ImageBase__fallback'])}>{fallbackIcon}</div>\n )}\n {children}\n {withBorder && <div aria-hidden className={styles['ImageBase__border']} />}\n </div>\n </ImageBaseContext.Provider>\n );\n};\n\nImageBase.Badge = ImageBaseBadge;\n\nImageBase.Overlay = ImageBaseOverlay;\n"],"names":["getBadgeIconSizeByImageBaseSize","getFallbackIconSizeByImageBaseSize","getOverlayIconSizeByImageBaseSize","ImageBaseContext","ImageBase","alt","crossOrigin","decoding","loading","referrerPolicy","sizes","src","srcSet","useMap","getRef","size","width","height","style","className","getRootRef","withBorder","fallbackIconProp","children","ariaLabel","onClick","onLoad","onError","restProps","React","useState","loaded","setLoaded","failed","setFailed","hasSrc","needShowFallbackIcon","isValidElement","fallbackIcon","process","env","NODE_ENV","validateSize","validateFallbackIcon","name","value","handleImageLoad","event","handleImageError","imgRef","useExternRef","isOnLoadStatusCheckedRef","useRef","useEffect","dispatchLoadEventForAlreadyLoadedResourceIfReactInitializedLater","current","complete","Event","dispatchEvent","sizeClassName","Provider","div","ref","classNames","role","aria-label","img","aria-hidden","Badge","ImageBaseBadge","Overlay","ImageBaseOverlay"],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ var MiniInfoCell = function(_param) {
|
|
|
36
36
|
accent: "vkuiMiniInfoCell--mode-accent",
|
|
37
37
|
more: "vkuiMiniInfoCell--mode-more"
|
|
38
38
|
})[mode], className);
|
|
39
|
-
var cellContent = /*#__PURE__*/ _react.createElement(_react.Fragment, null, /*#__PURE__*/ _react.createElement("span", {
|
|
39
|
+
var cellContent = /*#__PURE__*/ _react.createElement(_react.Fragment, null, (0, _vkjs.hasReactNode)(before) && /*#__PURE__*/ _react.createElement("span", {
|
|
40
40
|
className: "vkuiMiniInfoCell__before"
|
|
41
41
|
}, before), /*#__PURE__*/ _react.createElement("div", {
|
|
42
42
|
className: "vkuiMiniInfoCell__middle"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/MiniInfoCell/MiniInfoCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Chevron } from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport styles from './MiniInfoCell.module.css';\n\nexport interface MiniInfoCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Иконка слева.<br />\n * Рекомендуется использовать иконки размера 20.\n */\n before: React.ReactNode;\n\n /**\n * Содержимое справа.<br />\n * `<UsersStack size=\"s\" />` или `<Avatar size={24} />`\n */\n after?: React.ReactNode;\n\n /**\n * Тип ячейки:\n *\n * - `base` – базовая ячейка с серой иконкой и серым текстом.<br />\n * В компонент можно передать `Link`, чтобы визуально сделать часть текста ссылкой.\n * - `add` – тип ячейки, который показывает, что взаимодействие с ней должно вызывать действие добавления чего-то.\n * - `more` – взаимодействие с такой ячейкой должно открывать какую-то подробную информацию.\n */\n mode?: 'base' | 'accent' | 'add' | 'more';\n\n /**\n * Тип отображения текста:\n *\n * - `nowrap` – в одну строку, текст не переносится и обрезается.\n * - `short` – максимально отображается 3 строки, остальное обрезается.\n * - `full` – текст отображается полностью.\n */\n textWrap?: 'nowrap' | 'short' | 'full';\n\n /**\n * Передавать `true`, если предполагается переход при клике по ячейке.\n */\n expandable?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/MiniInfoCell\n */\nexport const MiniInfoCell = ({\n before,\n after,\n children,\n mode = 'base',\n textWrap = 'nowrap',\n expandable = false,\n className,\n ...restProps\n}: MiniInfoCellProps) => {\n const cellClasses = classNames(\n styles['MiniInfoCell'],\n {\n nowrap: styles['MiniInfoCell--textWrap-nowrap'],\n full: styles['MiniInfoCell--textWrap-full'],\n short: styles['MiniInfoCell--textWrap-short'],\n }[textWrap],\n mode !== 'base' &&\n {\n add: styles['MiniInfoCell--mode-add'],\n accent: styles['MiniInfoCell--mode-accent'],\n more: styles['MiniInfoCell--mode-more'],\n }[mode],\n className,\n );\n\n const cellContent = (\n <React.Fragment>\n <span className={styles['MiniInfoCell__before']}>{before}</span
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/MiniInfoCell/MiniInfoCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Chevron } from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport styles from './MiniInfoCell.module.css';\n\nexport interface MiniInfoCellProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Иконка слева.<br />\n * Рекомендуется использовать иконки размера 20.\n */\n before: React.ReactNode;\n\n /**\n * Содержимое справа.<br />\n * `<UsersStack size=\"s\" />` или `<Avatar size={24} />`\n */\n after?: React.ReactNode;\n\n /**\n * Тип ячейки:\n *\n * - `base` – базовая ячейка с серой иконкой и серым текстом.<br />\n * В компонент можно передать `Link`, чтобы визуально сделать часть текста ссылкой.\n * - `add` – тип ячейки, который показывает, что взаимодействие с ней должно вызывать действие добавления чего-то.\n * - `more` – взаимодействие с такой ячейкой должно открывать какую-то подробную информацию.\n */\n mode?: 'base' | 'accent' | 'add' | 'more';\n\n /**\n * Тип отображения текста:\n *\n * - `nowrap` – в одну строку, текст не переносится и обрезается.\n * - `short` – максимально отображается 3 строки, остальное обрезается.\n * - `full` – текст отображается полностью.\n */\n textWrap?: 'nowrap' | 'short' | 'full';\n\n /**\n * Передавать `true`, если предполагается переход при клике по ячейке.\n */\n expandable?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/MiniInfoCell\n */\nexport const MiniInfoCell = ({\n before,\n after,\n children,\n mode = 'base',\n textWrap = 'nowrap',\n expandable = false,\n className,\n ...restProps\n}: MiniInfoCellProps) => {\n const cellClasses = classNames(\n styles['MiniInfoCell'],\n {\n nowrap: styles['MiniInfoCell--textWrap-nowrap'],\n full: styles['MiniInfoCell--textWrap-full'],\n short: styles['MiniInfoCell--textWrap-short'],\n }[textWrap],\n mode !== 'base' &&\n {\n add: styles['MiniInfoCell--mode-add'],\n accent: styles['MiniInfoCell--mode-accent'],\n more: styles['MiniInfoCell--mode-more'],\n }[mode],\n className,\n );\n\n const cellContent = (\n <React.Fragment>\n {hasReactNode(before) && <span className={styles['MiniInfoCell__before']}>{before}</span>}\n <div className={styles['MiniInfoCell__middle']}>\n <Paragraph\n className={styles['MiniInfoCell__content']}\n weight={mode === 'more' ? '2' : undefined}\n >\n {children}\n </Paragraph>\n {expandable && <Icon16Chevron />}\n </div>\n {hasReactNode(after) && <span className={styles['MiniInfoCell__after']}>{after}</span>}\n </React.Fragment>\n );\n\n return restProps.onClick ? (\n <Tappable Component=\"div\" role=\"button\" {...restProps} className={cellClasses}>\n {cellContent}\n </Tappable>\n ) : (\n <div {...restProps} className={cellClasses}>\n {cellContent}\n </div>\n );\n};\n"],"names":["MiniInfoCell","before","after","children","mode","textWrap","expandable","className","restProps","cellClasses","classNames","nowrap","full","short","add","accent","more","cellContent","React","Fragment","hasReactNode","span","div","Paragraph","weight","undefined","Icon16Chevron","onClick","Tappable","Component","role"],"mappings":";;;;+BAgDaA;;;eAAAA;;;;;;;+DAhDU;qBACO;oBACW;wBAChB;yBACC;AA4CnB,IAAMA,eAAe;QAC1BC,gBAAAA,QACAC,eAAAA,OACAC,kBAAAA,+BACAC,MAAAA,gCAAO,+CACPC,UAAAA,wCAAW,uDACXC,YAAAA,4CAAa,2BACbC,mBAAAA,WACGC;QAPHP;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,cAAcC,IAAAA,gBAAU,sBAE5B;QACEC,MAAM;QACNC,IAAI;QACJC,KAAK;IACP,CAAC,CAACR,SAAS,EACXD,SAAS,UACP,CAAA;QACEU,GAAG;QACHC,MAAM;QACNC,IAAI;IACN,CAAA,CAAC,CAACZ,KAAK,EACTG;IAGF,IAAMU,4BACJ,qBAACC,OAAMC,QAAQ,QACZC,IAAAA,kBAAY,EAACnB,yBAAW,qBAACoB;QAAKd,SAAS;OAAmCN,uBAC3E,qBAACqB;QAAIf,SAAS;qBACZ,qBAACgB,oBAAS;QACRhB,SAAS;QACTiB,QAAQpB,SAAS,SAAS,MAAMqB;OAE/BtB,WAEFG,4BAAc,qBAACoB,oBAAa,UAE9BN,IAAAA,kBAAY,EAAClB,wBAAU,qBAACmB;QAAKd,SAAS;OAAkCL;IAI7E,OAAOM,UAAUmB,OAAO,iBACtB,qBAACC,kBAAQ;QAACC,WAAU;QAAMC,MAAK;OAAatB;QAAWD,WAAWE;QAC/DQ,6BAGH,qBAACK,mDAAQd;QAAWD,WAAWE;QAC5BQ;AAGP"}
|
|
@@ -14,14 +14,12 @@ var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
|
|
|
14
14
|
var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
|
|
15
15
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
16
16
|
var _vkjs = require("@vkontakte/vkjs");
|
|
17
|
-
var _useAdaptivityWithJSMediaQueries = require("../../hooks/useAdaptivityWithJSMediaQueries");
|
|
18
17
|
var _dom = require("../../lib/dom");
|
|
19
18
|
var _AppRootPortal = require("../AppRoot/AppRootPortal");
|
|
20
19
|
var PopoutRootPopout = function(param) {
|
|
21
20
|
var children = param.children;
|
|
22
|
-
var isDesktop = (0, _useAdaptivityWithJSMediaQueries.useAdaptivityWithJSMediaQueries)().isDesktop;
|
|
23
21
|
return /*#__PURE__*/ _react.createElement("div", {
|
|
24
|
-
className: (0, _vkjs.classNames)("vkuiPopoutRoot__popout"
|
|
22
|
+
className: (0, _vkjs.classNames)("vkuiPopoutRoot__popout")
|
|
25
23
|
}, children);
|
|
26
24
|
};
|
|
27
25
|
var PopoutRootModal = function(param) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/PopoutRoot/PopoutRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/PopoutRoot/PopoutRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { blurActiveElement, useDOM } from '../../lib/dom';\nimport { HasRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport styles from './PopoutRoot.module.css';\n\ninterface PopoutRootPopoutProps {\n children: React.ReactNode;\n}\n\nconst PopoutRootPopout = ({ children }: PopoutRootPopoutProps) => {\n return <div className={classNames(styles['PopoutRoot__popout'])}>{children}</div>;\n};\n\ninterface PopoutRootModalProps {\n children: React.ReactNode;\n}\n\nconst PopoutRootModal = ({ children }: PopoutRootModalProps) => {\n return <div className={styles['PopoutRoot__modal']}>{children}</div>;\n};\n\nexport interface PopoutRootProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n popout?: React.ReactNode;\n modal?: React.ReactNode;\n}\n\nexport const PopoutRoot = ({\n popout,\n modal,\n children,\n getRootRef,\n className,\n ...restProps\n}: PopoutRootProps) => {\n const { document } = useDOM();\n\n React.useEffect(() => {\n popout && blurActiveElement(document);\n }, [document, popout]);\n\n return (\n <div {...restProps} className={classNames(styles['PopoutRoot'], className)} ref={getRootRef}>\n {children}\n <AppRootPortal>\n {!!popout && <PopoutRootPopout>{popout}</PopoutRootPopout>}\n {!!modal && <PopoutRootModal>{modal}</PopoutRootModal>}\n </AppRootPortal>\n </div>\n );\n};\n"],"names":["PopoutRoot","PopoutRootPopout","children","div","className","classNames","PopoutRootModal","popout","modal","getRootRef","restProps","document","useDOM","React","useEffect","blurActiveElement","ref","AppRootPortal"],"mappings":";;;;+BA8BaA;;;eAAAA;;;;;;;+DA9BU;oBACI;mBACe;6BAEZ;AAO9B,IAAMC,mBAAmB;QAAGC,iBAAAA;IAC1B,qBAAO,qBAACC;QAAIC,WAAWC,IAAAA,gBAAU;OAAiCH;AACpE;AAMA,IAAMI,kBAAkB;QAAGJ,iBAAAA;IACzB,qBAAO,qBAACC;QAAIC,SAAS;OAAgCF;AACvD;AASO,IAAMF,aAAa;QACxBO,gBAAAA,QACAC,eAAAA,OACAN,kBAAAA,UACAO,oBAAAA,YACAL,mBAAAA,WACGM;QALHH;QACAC;QACAN;QACAO;QACAL;;IAGA,IAAM,AAAEO,WAAaC,IAAAA,WAAM,IAAnBD;IAERE,OAAMC,SAAS,CAAC;QACdP,UAAUQ,IAAAA,sBAAiB,EAACJ;IAC9B,GAAG;QAACA;QAAUJ;KAAO;IAErB,qBACE,qBAACJ,mDAAQO;QAAWN,WAAWC,IAAAA,gBAAU,oBAAuBD;QAAYY,KAAKP;QAC9EP,wBACD,qBAACe,4BAAa,QACX,CAAC,CAACV,wBAAU,qBAACN,wBAAkBM,SAC/B,CAAC,CAACC,uBAAS,qBAACF,uBAAiBE;AAItC"}
|
|
@@ -35,7 +35,7 @@ var PopoutWrapper = function(_param) {
|
|
|
35
35
|
var _React_useState = _sliced_to_array._(_react.useState(!hasMask), 2), opened = _React_useState[0], setOpened = _React_useState[1];
|
|
36
36
|
var elRef = _react.useRef(null);
|
|
37
37
|
var onFadeInEnd = function(e) {
|
|
38
|
-
if (!e || e.animationName === "
|
|
38
|
+
if (!e || e.animationName === "vkuianimation-full-fade-in") {
|
|
39
39
|
setOpened(true);
|
|
40
40
|
}
|
|
41
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/PopoutWrapper/PopoutWrapper.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useDOM } from '../../lib/dom';\nimport { Platform } from '../../lib/platform';\nimport styles from './PopoutWrapper.module.css';\n\nexport interface PopoutWrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n hasMask?: boolean;\n fixed?: boolean;\n alignY?: 'top' | 'center' | 'bottom';\n alignX?: 'left' | 'center' | 'right';\n closing?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PopoutWrapper\n */\nexport const PopoutWrapper = ({\n alignY = 'center',\n alignX = 'center',\n closing = false,\n hasMask = true,\n fixed = true,\n children,\n onClick,\n className,\n ...restProps\n}: PopoutWrapperProps) => {\n const platform = usePlatform();\n const [opened, setOpened] = React.useState(!hasMask);\n const elRef = React.useRef<HTMLDivElement>(null);\n\n const onFadeInEnd = (e?: React.AnimationEvent) => {\n if (!e || e.animationName === styles['
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/PopoutWrapper/PopoutWrapper.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useDOM } from '../../lib/dom';\nimport { Platform } from '../../lib/platform';\nimport styles from './PopoutWrapper.module.css';\n\nexport interface PopoutWrapperProps extends React.HTMLAttributes<HTMLDivElement> {\n hasMask?: boolean;\n fixed?: boolean;\n alignY?: 'top' | 'center' | 'bottom';\n alignX?: 'left' | 'center' | 'right';\n closing?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PopoutWrapper\n */\nexport const PopoutWrapper = ({\n alignY = 'center',\n alignX = 'center',\n closing = false,\n hasMask = true,\n fixed = true,\n children,\n onClick,\n className,\n ...restProps\n}: PopoutWrapperProps) => {\n const platform = usePlatform();\n const [opened, setOpened] = React.useState(!hasMask);\n const elRef = React.useRef<HTMLDivElement>(null);\n\n const onFadeInEnd = (e?: React.AnimationEvent) => {\n if (!e || e.animationName === styles['animation-full-fade-in']) {\n setOpened(true);\n }\n };\n const animationFinishFallback = useTimeout(onFadeInEnd, platform === Platform.IOS ? 300 : 200);\n React.useEffect(() => {\n !opened && animationFinishFallback.set();\n }, [animationFinishFallback, opened]);\n\n const { window } = useDOM();\n useGlobalEventListener(window, 'touchmove', (e) => e.preventDefault(), {\n passive: false,\n });\n\n return (\n <div\n {...restProps}\n className={classNames(\n styles['PopoutWrapper'],\n {\n center: styles['PopoutWrapper--alignY-center'],\n top: styles['PopoutWrapper--alignY-top'],\n bottom: styles['PopoutWrapper--alignY-bottom'],\n }[alignY],\n {\n center: styles['PopoutWrapper--alignX-center'],\n left: styles['PopoutWrapper--alignX-left'],\n right: styles['PopoutWrapper--alignX-right'],\n }[alignX],\n closing && styles['PopoutWrapper--closing'],\n opened && styles['PopoutWrapper--opened'],\n fixed && styles['PopoutWrapper--fixed'],\n hasMask && styles['PopoutWrapper--masked'],\n className,\n )}\n onAnimationEnd={opened ? undefined : onFadeInEnd}\n ref={elRef}\n >\n <div className={styles['PopoutWrapper__container']}>\n <div className={styles['PopoutWrapper__overlay']} onClick={onClick} />\n <div className={styles['PopoutWrapper__content']}>{children}</div>\n </div>\n </div>\n );\n};\n"],"names":["PopoutWrapper","alignY","alignX","closing","hasMask","fixed","children","onClick","className","restProps","platform","usePlatform","React","useState","opened","setOpened","elRef","useRef","onFadeInEnd","e","animationName","animationFinishFallback","useTimeout","Platform","IOS","useEffect","set","window","useDOM","useGlobalEventListener","preventDefault","passive","div","classNames","center","top","bottom","left","right","onAnimationEnd","undefined","ref"],"mappings":";;;;+BAoBaA;;;eAAAA;;;;;;;;+DApBU;oBACI;sCACY;2BACX;0BACD;mBACJ;wBACE;AAclB,IAAMA,gBAAgB;+BAC3BC,QAAAA,oCAAS,iDACTC,QAAAA,oCAAS,kDACTC,SAAAA,sCAAU,gDACVC,SAAAA,sCAAU,6CACVC,OAAAA,kCAAQ,qBACRC,kBAAAA,UACAC,iBAAAA,SACAC,mBAAAA,WACGC;QARHR;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAC5B,IAA4BC,qCAAAA,OAAMC,QAAQ,CAAC,CAACT,cAArCU,SAAqBF,oBAAbG,YAAaH;IAC5B,IAAMI,QAAQJ,OAAMK,MAAM,CAAiB;IAE3C,IAAMC,cAAc,SAACC;QACnB,IAAI,CAACA,KAAKA,EAAEC,aAAa,mCAAuC;YAC9DL,UAAU;QACZ;IACF;IACA,IAAMM,0BAA0BC,IAAAA,sBAAU,EAACJ,aAAaR,aAAaa,kBAAQ,CAACC,GAAG,GAAG,MAAM;IAC1FZ,OAAMa,SAAS,CAAC;QACd,CAACX,UAAUO,wBAAwBK,GAAG;IACxC,GAAG;QAACL;QAAyBP;KAAO;IAEpC,IAAM,AAAEa,SAAWC,IAAAA,WAAM,IAAjBD;IACRE,IAAAA,8CAAsB,EAACF,QAAQ,aAAa,SAACR;eAAMA,EAAEW,cAAc;OAAI;QACrEC,SAAS;IACX;IAEA,qBACE,qBAACC,mDACKvB;QACJD,WAAWyB,IAAAA,gBAAU,uBAEnB;YACEC,MAAM;YACNC,GAAG;YACHC,MAAM;QACR,CAAC,CAACnC,OAAO,EACT;YACEiC,MAAM;YACNG,IAAI;YACJC,KAAK;QACP,CAAC,CAACpC,OAAO,EACTC,yCACAW,uCACAT,qCACAD,wCACAI;QAEF+B,gBAAgBzB,SAAS0B,YAAYtB;QACrCuB,KAAKzB;sBAEL,qBAACgB;QAAIxB,SAAS;qBACZ,qBAACwB;QAAIxB,SAAS;QAAoCD,SAASA;sBAC3D,qBAACyB;QAAIxB,SAAS;OAAqCF;AAI3D"}
|
|
@@ -10,4 +10,4 @@ export interface SelectMimicryProps extends React.HTMLAttributes<HTMLElement>, H
|
|
|
10
10
|
/**
|
|
11
11
|
* @see https://vkcom.github.io/VKUI/#/SelectMimicry
|
|
12
12
|
*/
|
|
13
|
-
export declare const SelectMimicry: ({ tabIndex, placeholder, children, align, getRootRef, multiline, disabled, onClick, before, after, selectType, status, className, ...restProps }: SelectMimicryProps) => React.JSX.Element;
|
|
13
|
+
export declare const SelectMimicry: ({ tabIndex, placeholder, children, align, getRootRef, multiline, disabled, onClick, before, after, selectType, status, className, autoFocus, ...restProps }: SelectMimicryProps) => React.JSX.Element;
|
|
@@ -16,6 +16,8 @@ var _object_without_properties = require("@swc/helpers/_/_object_without_propert
|
|
|
16
16
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
17
17
|
var _vkjs = require("@vkontakte/vkjs");
|
|
18
18
|
var _useAdaptivity = require("../../hooks/useAdaptivity");
|
|
19
|
+
var _useAutoFocus = require("../../hooks/useAutoFocus");
|
|
20
|
+
var _useExternRef = require("../../hooks/useExternRef");
|
|
19
21
|
var _adaptivity = require("../../lib/adaptivity");
|
|
20
22
|
var _select = require("../../lib/select");
|
|
21
23
|
var _DropdownIcon = require("../DropdownIcon/DropdownIcon");
|
|
@@ -25,7 +27,7 @@ var sizeYClassNames = _define_property._({
|
|
|
25
27
|
none: "vkuiSelect--sizeY-none"
|
|
26
28
|
}, _adaptivity.SizeType.COMPACT, "vkuiSelect--sizeY-compact");
|
|
27
29
|
var SelectMimicry = function(_param) {
|
|
28
|
-
var _param_tabIndex = _param.tabIndex, tabIndex = _param_tabIndex === void 0 ? 0 : _param_tabIndex, placeholder = _param.placeholder, children = _param.children, align = _param.align, getRootRef = _param.getRootRef, multiline = _param.multiline, disabled = _param.disabled, onClick = _param.onClick, before = _param.before, _param_after = _param.after, after = _param_after === void 0 ? /*#__PURE__*/ _react.createElement(_DropdownIcon.DropdownIcon, null) : _param_after, _param_selectType = _param.selectType, selectType = _param_selectType === void 0 ? "default" : _param_selectType, status = _param.status, className = _param.className, restProps = _object_without_properties._(_param, [
|
|
30
|
+
var _param_tabIndex = _param.tabIndex, tabIndex = _param_tabIndex === void 0 ? 0 : _param_tabIndex, placeholder = _param.placeholder, children = _param.children, align = _param.align, getRootRef = _param.getRootRef, multiline = _param.multiline, disabled = _param.disabled, onClick = _param.onClick, before = _param.before, _param_after = _param.after, after = _param_after === void 0 ? /*#__PURE__*/ _react.createElement(_DropdownIcon.DropdownIcon, null) : _param_after, _param_selectType = _param.selectType, selectType = _param_selectType === void 0 ? "default" : _param_selectType, status = _param.status, className = _param.className, autoFocus = _param.autoFocus, restProps = _object_without_properties._(_param, [
|
|
29
31
|
"tabIndex",
|
|
30
32
|
"placeholder",
|
|
31
33
|
"children",
|
|
@@ -38,14 +40,17 @@ var SelectMimicry = function(_param) {
|
|
|
38
40
|
"after",
|
|
39
41
|
"selectType",
|
|
40
42
|
"status",
|
|
41
|
-
"className"
|
|
43
|
+
"className",
|
|
44
|
+
"autoFocus"
|
|
42
45
|
]);
|
|
46
|
+
var rootRef = (0, _useExternRef.useExternRef)(getRootRef);
|
|
43
47
|
var _useAdaptivity1 = (0, _useAdaptivity.useAdaptivity)(), _useAdaptivity_sizeY = _useAdaptivity1.sizeY, sizeY = _useAdaptivity_sizeY === void 0 ? "none" : _useAdaptivity_sizeY;
|
|
44
48
|
var title = children || placeholder;
|
|
49
|
+
(0, _useAutoFocus.useAutoFocus)(rootRef, autoFocus);
|
|
45
50
|
return /*#__PURE__*/ _react.createElement(_FormField.FormField, _object_spread_props._(_object_spread._({}, restProps), {
|
|
46
51
|
tabIndex: disabled ? undefined : tabIndex,
|
|
47
52
|
className: (0, _vkjs.classNames)("vkuiSelect", sizeY !== _adaptivity.SizeType.REGULAR && sizeYClassNames[sizeY], !children && "vkuiSelect--empty", multiline && "vkuiSelect--multiline", align === "center" && "vkuiSelect--align-center", align === "right" && "vkuiSelect--align-right", before && "vkuiSelect--hasBefore", className),
|
|
48
|
-
getRootRef:
|
|
53
|
+
getRootRef: rootRef,
|
|
49
54
|
onClick: disabled ? undefined : onClick,
|
|
50
55
|
disabled: disabled,
|
|
51
56
|
before: before,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/SelectMimicry/SelectMimicry.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { SizeType } from '../../lib/adaptivity';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { HasAlign, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles['Select--sizeY-none'],\n [SizeType.COMPACT]: styles['Select--sizeY-compact'],\n};\n\nexport interface SelectMimicryProps\n extends React.HTMLAttributes<HTMLElement>,\n HasAlign,\n HasRootRef<HTMLElement>,\n Pick<FormFieldProps, 'before' | 'after' | 'status'> {\n multiline?: boolean;\n disabled?: boolean;\n selectType?: SelectType;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SelectMimicry\n */\nexport const SelectMimicry = ({\n tabIndex = 0,\n placeholder,\n children,\n align,\n getRootRef,\n multiline,\n disabled,\n onClick,\n before,\n after = <DropdownIcon />,\n selectType = 'default',\n status,\n className,\n ...restProps\n}: SelectMimicryProps) => {\n const { sizeY = 'none' } = useAdaptivity();\n const title = children || placeholder;\n\n return (\n <FormField\n {...restProps}\n tabIndex={disabled ? undefined : tabIndex}\n className={classNames(\n styles['Select'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n !children && styles['Select--empty'],\n multiline && styles['Select--multiline'],\n align === 'center' && styles['Select--align-center'],\n align === 'right' && styles['Select--align-right'],\n before && styles['Select--hasBefore'],\n className,\n )}\n getRootRef={
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/SelectMimicry/SelectMimicry.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAutoFocus } from '../../hooks/useAutoFocus';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { HasAlign, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles['Select--sizeY-none'],\n [SizeType.COMPACT]: styles['Select--sizeY-compact'],\n};\n\nexport interface SelectMimicryProps\n extends React.HTMLAttributes<HTMLElement>,\n HasAlign,\n HasRootRef<HTMLElement>,\n Pick<FormFieldProps, 'before' | 'after' | 'status'> {\n multiline?: boolean;\n disabled?: boolean;\n selectType?: SelectType;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SelectMimicry\n */\nexport const SelectMimicry = ({\n tabIndex = 0,\n placeholder,\n children,\n align,\n getRootRef,\n multiline,\n disabled,\n onClick,\n before,\n after = <DropdownIcon />,\n selectType = 'default',\n status,\n className,\n autoFocus,\n ...restProps\n}: SelectMimicryProps) => {\n const rootRef = useExternRef(getRootRef);\n\n const { sizeY = 'none' } = useAdaptivity();\n const title = children || placeholder;\n\n useAutoFocus(rootRef, autoFocus);\n\n return (\n <FormField\n {...restProps}\n tabIndex={disabled ? undefined : tabIndex}\n className={classNames(\n styles['Select'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n !children && styles['Select--empty'],\n multiline && styles['Select--multiline'],\n align === 'center' && styles['Select--align-center'],\n align === 'right' && styles['Select--align-right'],\n before && styles['Select--hasBefore'],\n className,\n )}\n getRootRef={rootRef}\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n before={before}\n after={after}\n mode={getFormFieldModeFromSelectType(selectType)}\n status={status}\n >\n <div className={styles['Select__container']}>\n <SelectTypography selectType={selectType} className={styles['Select__title']}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n"],"names":["SelectMimicry","sizeYClassNames","none","SizeType","COMPACT","tabIndex","placeholder","children","align","getRootRef","multiline","disabled","onClick","before","after","DropdownIcon","selectType","status","className","autoFocus","restProps","rootRef","useExternRef","useAdaptivity","sizeY","title","useAutoFocus","FormField","undefined","classNames","REGULAR","mode","getFormFieldModeFromSelectType","div","SelectTypography"],"mappings":";;;;+BAgCaA;;;eAAAA;;;;;;;;+DAhCU;oBACI;6BACG;4BACD;4BACA;0BACJ;sBACsB;4BAElB;yBACa;gCAET;AAGjC,IAAMC;IACJC,IAAI;GACHC,oBAAQ,CAACC,OAAO;AAgBZ,IAAMJ,gBAAgB;iCAC3BK,UAAAA,wCAAW,qBACXC,qBAAAA,aACAC,kBAAAA,UACAC,eAAAA,OACAC,oBAAAA,YACAC,mBAAAA,WACAC,kBAAAA,UACAC,iBAAAA,SACAC,gBAAAA,8BACAC,OAAAA,gDAAQ,qBAACC,0BAAY,mDACrBC,YAAAA,4CAAa,+BACbC,gBAAAA,QACAC,mBAAAA,WACAC,mBAAAA,WACGC;QAdHf;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;;IAGA,IAAME,UAAUC,IAAAA,0BAAY,EAACb;IAE7B,IAA2Bc,kBAAAA,IAAAA,4BAAa,4BAAbA,gBAAnBC,OAAAA,0CAAQ;IAChB,IAAMC,QAAQlB,YAAYD;IAE1BoB,IAAAA,0BAAY,EAACL,SAASF;IAEtB,qBACE,qBAACQ,oBAAS,8CACJP;QACJf,UAAUM,WAAWiB,YAAYvB;QACjCa,WAAWW,IAAAA,gBAAU,gBAEnBL,UAAUrB,oBAAQ,CAAC2B,OAAO,IAAI7B,eAAe,CAACuB,MAAM,EACpD,CAACjB,iCACDG,sCACAF,UAAU,wCACVA,UAAU,sCACVK,mCACAK;QAEFT,YAAYY;QACZT,SAASD,WAAWiB,YAAYhB;QAChCD,UAAUA;QACVE,QAAQA;QACRC,OAAOA;QACPiB,MAAMC,IAAAA,sCAA8B,EAAChB;QACrCC,QAAQA;sBAER,qBAACgB;QAAIf,SAAS;qBACZ,qBAACgB,kCAAgB;QAAClB,YAAYA;QAAYE,SAAS;OAChDO;AAKX"}
|
|
@@ -88,7 +88,6 @@ var SimpleCell = function(_param) {
|
|
|
88
88
|
}, subtitle), badgeAfterSubtitle && /*#__PURE__*/ _react.createElement("span", {
|
|
89
89
|
className: "vkuiSimpleCell__badge"
|
|
90
90
|
}, badgeAfterSubtitle)), extraSubtitle && /*#__PURE__*/ _react.createElement(_Footnote.Footnote, {
|
|
91
|
-
normalize: false,
|
|
92
91
|
className: (0, _vkjs.classNames)("vkuiSimpleCell__text", "vkuiSimpleCell__extraSubtitle")
|
|
93
92
|
}, extraSubtitle)), (0, _vkjs.hasReactNode)(indicator) && /*#__PURE__*/ _react.createElement(_Headline.Headline, {
|
|
94
93
|
Component: "span",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/SimpleCell/SimpleCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasComponent } from '../../types';\nimport { Tappable, TappableProps } from '../Tappable/Tappable';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { Chevron } from './Chevron/Chevron';\nimport styles from './SimpleCell.module.css';\n\nconst warn = warnOnce('SimpleCell');\n\nconst platformClassNames = {\n ios: classNames(styles['SimpleCell--ios'], 'vkuiInternalSimpleCell--ios'),\n android: styles['SimpleCell--android'],\n vkcom: styles['SimpleCell--vkcom'],\n};\n\nconst sizeYClassNames = {\n none: classNames(styles['SimpleCell--sizeY-none'], 'vkuiInternalSimpleCell--sizeY-none'),\n [SizeType.COMPACT]: classNames(\n styles['SimpleCell--sizeY-compact'],\n 'vkuiInternalSimpleCell--sizeY-compact',\n ),\n [SizeType.REGULAR]: styles['SimpleCell--sizeY-regular'],\n};\n\nexport interface SimpleCellOwnProps extends HasComponent {\n /**\n * Иконка 28 или `<Avatar size={28|32|40|48|72} />`\n */\n before?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится слева от текста `children`.\n */\n badgeBeforeTitle?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится справа от текста `children`.\n */\n badgeAfterTitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится слева от текста `subtitle`.\n */\n badgeBeforeSubtitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится справа от текста `subtitle`.\n */\n badgeAfterSubtitle?: React.ReactNode;\n /**\n * Контейнер для текста справа от `children`.\n */\n indicator?: React.ReactNode;\n /**\n * Дополнительная строка текста над `children`.\n */\n subhead?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children` и `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Иконка 24|28 или `<Switch />`. Располагается справа от `indicator`.\n */\n after?: React.ReactNode;\n /**\n * Убирает анимацию нажатия\n */\n disabled?: boolean;\n /**\n * В iOS добавляет chevron справа. Передавать `true`, если предполагается переход при клике по ячейке.\n */\n expandable?: boolean | 'auto' | 'always';\n /**\n * Размер chevron\n */\n chevronSize?: 's' | 'm';\n /**\n * Включает многострочный режим для отображения текста\n */\n multiline?: boolean;\n}\n\nexport interface SimpleCellProps extends SimpleCellOwnProps, TappableProps {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SimpleCell\n */\nexport const SimpleCell = ({\n badgeBeforeTitle,\n badgeAfterTitle,\n badgeBeforeSubtitle,\n badgeAfterSubtitle,\n before,\n indicator,\n children,\n after,\n expandable,\n multiline,\n subhead,\n subtitle,\n extraSubtitle,\n className,\n chevronSize = 'm',\n ...restProps\n}: SimpleCellProps) => {\n const platform = usePlatform();\n\n if (process.env.NODE_ENV === 'development' && expandable === true) {\n // TODO [>=6]: Обновить типизацию для expandable свойства\n warn(\n 'Значение true свойства expandable устарело и будет удалено в v6. Используйте expandable=\"auto\"',\n );\n }\n\n const hasChevron =\n expandable === 'always' ||\n ((expandable === true || expandable === 'auto') && platform === Platform.IOS);\n\n const hasAfter = hasReactNode(after) || hasChevron;\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n {...restProps}\n className={classNames(\n styles['SimpleCell'],\n 'vkuiInternalSimpleCell',\n platformClassNames.hasOwnProperty(platform)\n ? platformClassNames[platform]\n : platformClassNames.android,\n sizeYClassNames[sizeY],\n multiline && styles['SimpleCell--mult'],\n className,\n )}\n >\n {before}\n <div className={classNames(styles['SimpleCell__main'], 'vkuiInternalSimpleCell__main')}>\n {subhead && (\n <Subhead\n Component=\"span\"\n className={classNames(styles['SimpleCell__text'], styles['SimpleCell__subhead'])}\n >\n {subhead}\n </Subhead>\n )}\n <div className={styles['SimpleCell__content']}>\n {badgeBeforeTitle && (\n <span className={styles['SimpleCell__badge']}>{badgeBeforeTitle}</span>\n )}\n <Headline Component=\"span\" className={styles['SimpleCell__children']} weight=\"3\">\n {children}\n </Headline>\n {hasReactNode(badgeAfterTitle) && (\n <span className={styles['SimpleCell__badge']}>{badgeAfterTitle}</span>\n )}\n </div>\n {subtitle && (\n <div className={styles['SimpleCell__content']}>\n {badgeBeforeSubtitle && (\n <span className={styles['SimpleCell__badge']}>{badgeBeforeSubtitle}</span>\n )}\n <Footnote\n normalize={false}\n className={classNames(styles['SimpleCell__text'], styles['SimpleCell__subtitle'])}\n >\n {subtitle}\n </Footnote>\n {badgeAfterSubtitle && (\n <span className={styles['SimpleCell__badge']}>{badgeAfterSubtitle}</span>\n )}\n </div>\n )}\n {extraSubtitle && (\n <Footnote\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/SimpleCell/SimpleCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasComponent } from '../../types';\nimport { Tappable, TappableProps } from '../Tappable/Tappable';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { Chevron } from './Chevron/Chevron';\nimport styles from './SimpleCell.module.css';\n\nconst warn = warnOnce('SimpleCell');\n\nconst platformClassNames = {\n ios: classNames(styles['SimpleCell--ios'], 'vkuiInternalSimpleCell--ios'),\n android: styles['SimpleCell--android'],\n vkcom: styles['SimpleCell--vkcom'],\n};\n\nconst sizeYClassNames = {\n none: classNames(styles['SimpleCell--sizeY-none'], 'vkuiInternalSimpleCell--sizeY-none'),\n [SizeType.COMPACT]: classNames(\n styles['SimpleCell--sizeY-compact'],\n 'vkuiInternalSimpleCell--sizeY-compact',\n ),\n [SizeType.REGULAR]: styles['SimpleCell--sizeY-regular'],\n};\n\nexport interface SimpleCellOwnProps extends HasComponent {\n /**\n * Иконка 28 или `<Avatar size={28|32|40|48|72} />`\n */\n before?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится слева от текста `children`.\n */\n badgeBeforeTitle?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится справа от текста `children`.\n */\n badgeAfterTitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится слева от текста `subtitle`.\n */\n badgeBeforeSubtitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится справа от текста `subtitle`.\n */\n badgeAfterSubtitle?: React.ReactNode;\n /**\n * Контейнер для текста справа от `children`.\n */\n indicator?: React.ReactNode;\n /**\n * Дополнительная строка текста над `children`.\n */\n subhead?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children` и `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Иконка 24|28 или `<Switch />`. Располагается справа от `indicator`.\n */\n after?: React.ReactNode;\n /**\n * Убирает анимацию нажатия\n */\n disabled?: boolean;\n /**\n * В iOS добавляет chevron справа. Передавать `true`, если предполагается переход при клике по ячейке.\n */\n expandable?: boolean | 'auto' | 'always';\n /**\n * Размер chevron\n */\n chevronSize?: 's' | 'm';\n /**\n * Включает многострочный режим для отображения текста\n */\n multiline?: boolean;\n}\n\nexport interface SimpleCellProps extends SimpleCellOwnProps, TappableProps {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SimpleCell\n */\nexport const SimpleCell = ({\n badgeBeforeTitle,\n badgeAfterTitle,\n badgeBeforeSubtitle,\n badgeAfterSubtitle,\n before,\n indicator,\n children,\n after,\n expandable,\n multiline,\n subhead,\n subtitle,\n extraSubtitle,\n className,\n chevronSize = 'm',\n ...restProps\n}: SimpleCellProps) => {\n const platform = usePlatform();\n\n if (process.env.NODE_ENV === 'development' && expandable === true) {\n // TODO [>=6]: Обновить типизацию для expandable свойства\n warn(\n 'Значение true свойства expandable устарело и будет удалено в v6. Используйте expandable=\"auto\"',\n );\n }\n\n const hasChevron =\n expandable === 'always' ||\n ((expandable === true || expandable === 'auto') && platform === Platform.IOS);\n\n const hasAfter = hasReactNode(after) || hasChevron;\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n {...restProps}\n className={classNames(\n styles['SimpleCell'],\n 'vkuiInternalSimpleCell',\n platformClassNames.hasOwnProperty(platform)\n ? platformClassNames[platform]\n : platformClassNames.android,\n sizeYClassNames[sizeY],\n multiline && styles['SimpleCell--mult'],\n className,\n )}\n >\n {before}\n <div className={classNames(styles['SimpleCell__main'], 'vkuiInternalSimpleCell__main')}>\n {subhead && (\n <Subhead\n Component=\"span\"\n className={classNames(styles['SimpleCell__text'], styles['SimpleCell__subhead'])}\n >\n {subhead}\n </Subhead>\n )}\n <div className={styles['SimpleCell__content']}>\n {badgeBeforeTitle && (\n <span className={styles['SimpleCell__badge']}>{badgeBeforeTitle}</span>\n )}\n <Headline Component=\"span\" className={styles['SimpleCell__children']} weight=\"3\">\n {children}\n </Headline>\n {hasReactNode(badgeAfterTitle) && (\n <span className={styles['SimpleCell__badge']}>{badgeAfterTitle}</span>\n )}\n </div>\n {subtitle && (\n <div className={styles['SimpleCell__content']}>\n {badgeBeforeSubtitle && (\n <span className={styles['SimpleCell__badge']}>{badgeBeforeSubtitle}</span>\n )}\n <Footnote\n normalize={false}\n className={classNames(styles['SimpleCell__text'], styles['SimpleCell__subtitle'])}\n >\n {subtitle}\n </Footnote>\n {badgeAfterSubtitle && (\n <span className={styles['SimpleCell__badge']}>{badgeAfterSubtitle}</span>\n )}\n </div>\n )}\n {extraSubtitle && (\n <Footnote\n className={classNames(styles['SimpleCell__text'], styles['SimpleCell__extraSubtitle'])}\n >\n {extraSubtitle}\n </Footnote>\n )}\n </div>\n {hasReactNode(indicator) && (\n <Headline Component=\"span\" weight=\"3\" className={styles['SimpleCell__indicator']}>\n {indicator}\n </Headline>\n )}\n {hasAfter && (\n <div className={classNames(styles['SimpleCell__after'], 'vkuiInternalSimpleCell__after')}>\n {after}\n {hasChevron && (\n <Chevron size={chevronSize} className={styles['SimpleCell__chevronIcon']} />\n )}\n </div>\n )}\n </Tappable>\n );\n};\n"],"names":["SimpleCell","warn","warnOnce","platformClassNames","ios","classNames","android","vkcom","sizeYClassNames","none","SizeType","COMPACT","REGULAR","badgeBeforeTitle","badgeAfterTitle","badgeBeforeSubtitle","badgeAfterSubtitle","before","indicator","children","after","expandable","multiline","subhead","subtitle","extraSubtitle","className","chevronSize","restProps","platform","usePlatform","process","env","NODE_ENV","hasChevron","Platform","IOS","hasAfter","hasReactNode","useAdaptivity","sizeY","Tappable","hasOwnProperty","div","Subhead","Component","span","Headline","weight","Footnote","normalize","Chevron","size"],"mappings":";;;;+BAgGaA;;;eAAAA;;;;;;;;+DAhGU;oBACkB;6BACX;2BACF;0BACH;wBACA;wBACA;wBAEe;wBACf;wBACA;uBACD;uBACA;AAGxB,IAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAEtB,IAAMC,qBAAqB;IACzBC,KAAKC,IAAAA,gBAAU,yBAA4B;IAC3CC,OAAO;IACPC,KAAK;AACP;IAEwB;AAAxB,IAAMC,mBAAkB;IACtBC,MAAMJ,IAAAA,gBAAU,gCAAmC;GACnD,mBAFsB,MAErBK,oBAAQ,CAACC,OAAO,EAAGN,IAAAA,gBAAU,mCAE5B,8DAJoB,MAMrBK,oBAAQ,CAACE,OAAO,oCANK;AAyEjB,IAAMZ,aAAa;QACxBa,0BAAAA,kBACAC,yBAAAA,iBACAC,6BAAAA,qBACAC,4BAAAA,oBACAC,gBAAAA,QACAC,mBAAAA,WACAC,kBAAAA,UACAC,eAAAA,OACAC,oBAAAA,YACAC,mBAAAA,WACAC,iBAAAA,SACAC,kBAAAA,UACAC,uBAAAA,eACAC,mBAAAA,uCACAC,aAAAA,8CAAc,0BACXC;QAfHf;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAE5B,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiBZ,eAAe,MAAM;QACjE,yDAAyD;QACzDpB,KACE;IAEJ;IAEA,IAAMiC,aACJb,eAAe,YACd,AAACA,CAAAA,eAAe,QAAQA,eAAe,MAAK,KAAMQ,aAAaM,kBAAQ,CAACC,GAAG;IAE9E,IAAMC,WAAWC,IAAAA,kBAAY,EAAClB,UAAUc;IACxC,IAA2BK,kBAAAA,IAAAA,4BAAa,4BAAbA,gBAAnBC,OAAAA,0CAAQ;IAEhB,qBACE,qBAACC,kBAAQ,8CACHb;QACJF,WAAWrB,IAAAA,gBAAU,oBAEnB,0BACAF,mBAAmBuC,cAAc,CAACb,YAC9B1B,kBAAkB,CAAC0B,SAAS,GAC5B1B,mBAAmBG,OAAO,EAC9BE,eAAe,CAACgC,MAAM,EACtBlB,qCACAI;QAGDT,sBACD,qBAAC0B;QAAIjB,WAAWrB,IAAAA,gBAAU,0BAA6B;OACpDkB,yBACC,qBAACqB,gBAAO;QACNC,WAAU;QACVnB,WAAWrB,IAAAA,gBAAU;OAEpBkB,wBAGL,qBAACoB;QAAIjB,SAAS;OACXb,kCACC,qBAACiC;QAAKpB,SAAS;OAAgCb,iCAEjD,qBAACkC,kBAAQ;QAACF,WAAU;QAAOnB,SAAS;QAAkCsB,QAAO;OAC1E7B,WAEFmB,IAAAA,kBAAY,EAACxB,kCACZ,qBAACgC;QAAKpB,SAAS;OAAgCZ,mBAGlDU,0BACC,qBAACmB;QAAIjB,SAAS;OACXX,qCACC,qBAAC+B;QAAKpB,SAAS;OAAgCX,oCAEjD,qBAACkC,kBAAQ;QACPC,WAAW;QACXxB,WAAWrB,IAAAA,gBAAU;OAEpBmB,WAEFR,oCACC,qBAAC8B;QAAKpB,SAAS;OAAgCV,sBAIpDS,+BACC,qBAACwB,kBAAQ;QACPvB,WAAWrB,IAAAA,gBAAU;OAEpBoB,iBAINa,IAAAA,kBAAY,EAACpB,4BACZ,qBAAC6B,kBAAQ;QAACF,WAAU;QAAOG,QAAO;QAAItB,SAAS;OAC5CR,YAGJmB,0BACC,qBAACM;QAAIjB,WAAWrB,IAAAA,gBAAU,2BAA8B;OACrDe,OACAc,4BACC,qBAACiB,gBAAO;QAACC,MAAMzB;QAAaD,SAAS;;AAMjD"}
|
|
@@ -149,10 +149,10 @@ var View = function(_param) {
|
|
|
149
149
|
]);
|
|
150
150
|
var transitionEndHandler = _react.useCallback(function(e) {
|
|
151
151
|
if ((!e || [
|
|
152
|
-
"
|
|
153
|
-
"
|
|
154
|
-
"
|
|
155
|
-
"
|
|
152
|
+
"vkuianimation-ios-next-forward",
|
|
153
|
+
"vkuianimation-ios-prev-back",
|
|
154
|
+
"vkuianimation-view-next-forward",
|
|
155
|
+
"vkuianimation-view-prev-back"
|
|
156
156
|
].includes(e.animationName)) && prevPanel !== null) {
|
|
157
157
|
flushTransition(prevPanel, Boolean(isBack));
|
|
158
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/View/View.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { blurActiveElement, canUseDOM, useDOM } from '../../lib/dom';\nimport { getNavId, NavIdProps } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { animationEvent } from '../../lib/supportEvents';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useScroll } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { useSplitCol } from '../SplitCol/SplitColContext';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport { swipeBackExcluded } from './utils';\nimport styles from './View.module.css';\n\nconst SWIPE_BACK_AREA = 70;\n\nenum SwipeBackResults {\n fail = 1,\n success,\n}\n\ninterface Scrolls {\n [index: string]: number | undefined;\n}\n\ninterface ViewsScrolls {\n [index: string]: Scrolls;\n}\n\nexport let scrollsCache: ViewsScrolls = {};\n\nexport interface ViewProps extends React.HTMLAttributes<HTMLElement>, NavIdProps {\n activePanel: string;\n onTransition?(params: { isBack: boolean; from: string; to: string }): void;\n /**\n * callback свайпа назад\n */\n onSwipeBack?(): void;\n /**\n * callback начала анимации свайпа назад.\n *\n * Чтобы остановить свайп назад, возвращайте `\"prevent\"`.\n */\n onSwipeBackStart?(activePanel: string | null): void | 'prevent';\n /**\n * callback завершения анимации отмененного пользователем свайпа\n */\n onSwipeBackCancel?(): void;\n history?: string[];\n\n children: React.ReactElement | Iterable<React.ReactElement>;\n}\n\nexport interface ViewState {\n animated: boolean;\n\n visiblePanels: string[];\n activePanel: string | null;\n isBack: boolean | undefined;\n prevPanel: string | null;\n nextPanel: string | null;\n\n swipingBack: boolean;\n swipeBackStartX: number;\n swipeBackShift: number;\n swipeBackNextPanel: string | null;\n swipeBackPrevPanel: string | null;\n swipeBackResult: SwipeBackResults | null;\n\n browserSwipe: boolean;\n}\n\nconst warn = warnOnce('View');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/View\n */\nexport const View = ({\n activePanel: activePanelProp,\n history,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel: onSwipeBackCancelProp,\n children,\n className,\n ...restProps\n}: ViewProps) => {\n const scrolls = React.useRef(scrollsCache[getNavId({ nav, id: restProps.id }) as string] || {});\n const afterTransition = React.useRef(noop);\n\n React.useEffect(() => () => {\n const id = getNavId({ nav, id: restProps.id });\n if (id) {\n scrollsCache[id] = scrolls.current;\n }\n });\n\n const panelNodes = React.useRef<{ [id: string]: HTMLDivElement | null }>({});\n\n const { window, document } = useDOM();\n const scroll = useScroll();\n const configProvider = useConfigProvider();\n const splitCol = useSplitCol();\n const platform = usePlatform();\n\n const [animated, setAnimated] = React.useState(false);\n\n const [visiblePanels, setVisiblePanels] = React.useState([activePanelProp]);\n const [activePanel, setActivePanel] = React.useState<string | null>(activePanelProp);\n const [isBack, setIsBack] = React.useState<boolean | undefined>(undefined);\n const [prevPanel, setPrevPanel] = React.useState<string | null>(null);\n const [nextPanel, setNextPanel] = React.useState<string | null>(null);\n\n const [swipingBack, setSwipingBack] = React.useState<boolean>(false);\n const [swipeBackPrevented, setSwipeBackPrevented] = React.useState<boolean>(false);\n const [swipeBackStartX, setSwipeBackStartX] = React.useState<number>(0);\n const [swipeBackShift, setSwipeBackShift] = React.useState<number>(0);\n const [swipeBackNextPanel, setSwipeBackNextPanel] = React.useState<string | null>(null);\n const [swipeBackPrevPanel, setSwipeBackPrevPanel] = React.useState<string | null>(null);\n const [swipeBackResult, setSwipeBackResult] = React.useState<SwipeBackResults | null>(null);\n\n const [browserSwipe, setBrowserSwipe] = React.useState(false);\n\n const prevActivePanel = usePrevious(activePanelProp);\n const prevSwipingBack = usePrevious(swipingBack);\n const prevBrowserSwipe = usePrevious(browserSwipe);\n const prevSwipeBackResult = usePrevious(swipeBackResult);\n const prevSwipeBackPrevPanel = usePrevious(swipeBackPrevPanel);\n const prevOnTransition = usePrevious(onTransition);\n\n const panels = (React.Children.toArray(children) as React.ReactElement[]).filter(\n (panel: React.ReactElement) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n },\n );\n\n const disableAnimation =\n configProvider?.transitionMotionEnabled === false ||\n !splitCol?.animate ||\n platform === Platform.VKCOM;\n\n const pickPanel = (id: string | null) => {\n if (id === null) {\n return null;\n }\n return panelNodes.current[id];\n };\n\n const flushTransition = React.useCallback(\n (prevPanel: string, isBackTransition: boolean) => {\n if (isBackTransition) {\n scrolls.current[prevPanel] = 0;\n }\n setPrevPanel(null);\n setNextPanel(null);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n setAnimated(false);\n setIsBack(undefined);\n\n afterTransition.current = () => {\n scroll?.scrollTo(0, isBackTransition ? scrolls.current[activePanelProp] : 0);\n onTransition &&\n onTransition({\n isBack: isBackTransition,\n from: prevPanel,\n to: activePanelProp,\n });\n };\n },\n [activePanelProp, onTransition, scroll],\n );\n\n useIsomorphicLayoutEffect(() => {\n afterTransition.current();\n afterTransition.current = noop;\n }, [afterTransition.current]);\n\n const transitionEndHandler = React.useCallback(\n (e?: React.AnimationEvent): void => {\n if (\n (!e ||\n [\n styles['vkui-animation-ios-next-forward'],\n styles['vkui-animation-ios-prev-back'],\n styles['vkui-animation-view-next-forward'],\n styles['vkui-animation-view-prev-back'],\n ].includes(e.animationName)) &&\n prevPanel !== null\n ) {\n flushTransition(prevPanel, Boolean(isBack));\n }\n },\n [flushTransition, isBack, prevPanel],\n );\n\n const { waitTransitionFinish } = useWaitTransitionFinish();\n const animationFinishTimeout = useTimeout(\n transitionEndHandler,\n platform === Platform.IOS ? 600 : 300,\n );\n\n const onSwipeBackSuccess = React.useCallback(() => {\n onSwipeBack && onSwipeBack();\n }, [onSwipeBack]);\n\n const onSwipeBackCancel = React.useCallback(() => {\n onSwipeBackCancelProp && onSwipeBackCancelProp();\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n }, [onSwipeBackCancelProp]);\n\n const swipingBackTransitionEndHandler = React.useCallback(\n (e?: TransitionEvent): void => {\n // indexOf because of vendor prefixes in old browsers\n if (\n !e ||\n (e?.propertyName.includes('transform') && e?.target === pickPanel(swipeBackNextPanel))\n ) {\n switch (swipeBackResult) {\n case SwipeBackResults.fail:\n onSwipeBackCancel();\n break;\n case SwipeBackResults.success:\n onSwipeBackSuccess();\n }\n }\n },\n [onSwipeBackCancel, onSwipeBackSuccess, swipeBackNextPanel, swipeBackResult],\n );\n\n const onMoveX = (event: TouchEvent): void => {\n if (\n platform !== Platform.IOS ||\n swipeBackPrevented ||\n swipeBackExcluded(event) ||\n disableAnimation\n ) {\n return;\n }\n\n if (!configProvider?.isWebView) {\n if (\n (event.startX <= SWIPE_BACK_AREA || event.startX >= window!.innerWidth - SWIPE_BACK_AREA) &&\n !browserSwipe\n ) {\n setBrowserSwipe(true);\n }\n\n return;\n }\n\n if (!onSwipeBack || (animated && event.startX <= SWIPE_BACK_AREA)) {\n return;\n }\n\n if (!swipingBack && event.startX <= SWIPE_BACK_AREA && history && history.length > 1) {\n // Начался свайп назад\n if (onSwipeBackStart) {\n const payload = onSwipeBackStart(activePanel);\n if (payload === 'prevent') {\n setSwipeBackPrevented(true);\n return;\n }\n }\n\n if (activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n blurActiveElement(document);\n scrolls.current[activePanel] = scroll?.getScroll().y;\n }\n\n setSwipingBack(true);\n setSwipeBackStartX(event.startX);\n setSwipeBackPrevPanel(activePanel);\n setSwipeBackNextPanel(history.slice(-2)[0]);\n }\n\n if (swipingBack) {\n let swipeBackShift = 0;\n if (event.shiftX < 0) {\n swipeBackShift = 0;\n } else if (event.shiftX > window!.innerWidth - swipeBackStartX) {\n swipeBackShift = window!.innerWidth;\n } else {\n swipeBackShift = event.shiftX;\n }\n setSwipeBackShift(swipeBackShift);\n }\n };\n\n const onEnd = React.useCallback(\n (event: TouchEvent): void => {\n if (swipingBack) {\n const speed = (swipeBackShift / event.duration) * 1000;\n if (swipeBackShift === 0) {\n onSwipeBackCancel();\n } else if (swipeBackShift >= (window!.innerWidth ?? 0)) {\n onSwipeBackSuccess();\n } else if (speed > 250 || swipeBackStartX + swipeBackShift > window!.innerWidth / 2) {\n setSwipeBackResult(SwipeBackResults.success);\n } else {\n setSwipeBackResult(SwipeBackResults.fail);\n }\n }\n if (swipeBackPrevented) {\n setSwipeBackPrevented(false);\n }\n },\n [\n onSwipeBackCancel,\n onSwipeBackSuccess,\n swipeBackShift,\n swipeBackStartX,\n swipingBack,\n swipeBackPrevented,\n window,\n ],\n );\n\n const calcPanelSwipeStyles = (panelId: string | undefined): React.CSSProperties => {\n if (!canUseDOM || !window) {\n return {};\n }\n\n const isPrev = panelId === swipeBackPrevPanel;\n const isNext = panelId === swipeBackNextPanel;\n\n if ((!isPrev && !isNext) || swipeBackResult) {\n return {};\n }\n\n let prevPanelTranslate = `${swipeBackShift}px`;\n let nextPanelTranslate = `${-50 + (swipeBackShift * 100) / window.innerWidth / 2}%`;\n let prevPanelShadow = (0.3 * (window.innerWidth - swipeBackShift)) / window.innerWidth;\n\n if (swipeBackResult) {\n return isPrev ? { boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})` } : {};\n }\n\n if (isNext) {\n return {\n transform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n WebkitTransform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n };\n }\n if (isPrev) {\n return {\n transform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n WebkitTransform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})`,\n };\n }\n\n return {};\n };\n\n React.useEffect(() => {\n // Нужен переход\n if (\n prevActivePanel &&\n prevActivePanel !== activePanelProp &&\n !prevSwipingBack &&\n !prevBrowserSwipe\n ) {\n const firstLayerId = (React.Children.toArray(children) as React.ReactElement[])\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevActivePanel || id === activePanelProp);\n\n const isBackTransition = firstLayerId === activePanelProp;\n scrolls.current[prevActivePanel] = scroll?.getScroll().y;\n\n if (disableAnimation) {\n flushTransition(prevActivePanel, isBackTransition);\n } else {\n blurActiveElement(document);\n\n setVisiblePanels([prevActivePanel, activePanelProp]);\n setPrevPanel(prevActivePanel);\n setNextPanel(activePanelProp);\n setActivePanel(null);\n setAnimated(true);\n setIsBack(isBackTransition);\n\n // Фолбек анимации перехода\n if (!animationEvent.supported) {\n animationFinishTimeout.set();\n }\n }\n }\n\n // Закончилась анимация свайпа назад\n if (prevActivePanel && prevActivePanel !== activePanelProp && prevSwipingBack) {\n const nextPanel = activePanelProp;\n const prevPanel = prevActivePanel;\n if (prevSwipeBackPrevPanel) {\n scrolls.current[prevSwipeBackPrevPanel] = 0;\n }\n\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n setActivePanel(nextPanel);\n setVisiblePanels([nextPanel]);\n\n afterTransition.current = () => {\n if (nextPanel !== null) {\n scroll?.scrollTo(0, scrolls.current[nextPanel]);\n }\n prevOnTransition &&\n prevOnTransition({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n };\n }\n\n // Началась анимация завершения свайпа назад.\n if (!prevSwipeBackResult && swipeBackResult) {\n waitTransitionFinish(\n pickPanel(swipeBackNextPanel),\n swipingBackTransitionEndHandler,\n platform === Platform.IOS ? 600 : 300,\n );\n }\n\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n if (prevSwipeBackResult === SwipeBackResults.fail && !swipeBackResult && activePanel !== null) {\n scroll?.scrollTo(0, scrolls.current[activePanel]);\n }\n\n // Закончился Safari свайп\n if (prevActivePanel !== activePanelProp && browserSwipe) {\n setBrowserSwipe(false);\n setNextPanel(null);\n setPrevPanel(null);\n setAnimated(false);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n }\n }, [\n activePanelProp,\n activePanel,\n animationFinishTimeout,\n browserSwipe,\n children,\n disableAnimation,\n document,\n flushTransition,\n onSwipeBackStart,\n panels,\n platform,\n prevActivePanel,\n prevBrowserSwipe,\n prevOnTransition,\n prevSwipeBackPrevPanel,\n prevSwipeBackResult,\n prevSwipingBack,\n scroll,\n swipeBackNextPanel,\n swipeBackResult,\n swipingBack,\n swipingBackTransitionEndHandler,\n waitTransitionFinish,\n ]);\n\n return (\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles['View'],\n platform === Platform.IOS && classNames(styles['View--ios'], 'vkuiInternalView--ios'),\n !disableAnimation && animated && styles['View--animated'],\n !disableAnimation && swipingBack && styles['View--swiping-back'],\n disableAnimation && styles['View--no-motion'],\n className,\n )}\n onMoveX={onMoveX}\n onEnd={onEnd}\n >\n <div className={styles['View__panels']}>\n {panels.map((panel: React.ReactElement) => {\n const panelId = getNavId(panel.props, warn);\n const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);\n const compensateScroll =\n isPrev || panelId === swipeBackNextPanel || (panelId === nextPanel && isBack);\n\n return (\n <div\n className={classNames(\n styles['View__panel'],\n panelId === activePanel && styles['View__panel--active'],\n panelId === prevPanel && styles['View__panel--prev'],\n panelId === nextPanel && styles['View__panel--next'],\n panelId === swipeBackPrevPanel && styles['View__panel--swipe-back-prev'],\n panelId === swipeBackNextPanel && styles['View__panel--swipe-back-next'],\n swipeBackResult === SwipeBackResults.success &&\n styles['View__panel--swipe-back-success'],\n swipeBackResult === SwipeBackResults.fail &&\n styles['View__panel--swipe-back-failed'],\n )}\n onAnimationEnd={isTransitionTarget ? transitionEndHandler : undefined}\n ref={(el) => panelId !== undefined && (panelNodes.current[panelId] = el)}\n style={calcPanelSwipeStyles(panelId)}\n key={panelId}\n >\n <div\n className={styles['View__panel-in']}\n style={{\n marginTop: compensateScroll ? -(scrolls.current[panelId] ?? 0) : undefined,\n }}\n >\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n >\n {panel}\n </NavTransitionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n );\n};\n"],"names":["scrollsCache","View","SWIPE_BACK_AREA","SwipeBackResults","fail","success","warn","warnOnce","activePanel","activePanelProp","history","nav","onTransition","onSwipeBack","onSwipeBackStart","onSwipeBackCancel","onSwipeBackCancelProp","children","className","restProps","configProvider","splitCol","scrolls","React","useRef","getNavId","id","afterTransition","noop","useEffect","current","panelNodes","useDOM","window","document","scroll","useScroll","useConfigProvider","useSplitCol","platform","usePlatform","useState","animated","setAnimated","visiblePanels","setVisiblePanels","setActivePanel","undefined","isBack","setIsBack","prevPanel","setPrevPanel","nextPanel","setNextPanel","swipingBack","setSwipingBack","swipeBackPrevented","setSwipeBackPrevented","swipeBackStartX","setSwipeBackStartX","swipeBackShift","setSwipeBackShift","swipeBackNextPanel","setSwipeBackNextPanel","swipeBackPrevPanel","setSwipeBackPrevPanel","swipeBackResult","setSwipeBackResult","browserSwipe","setBrowserSwipe","prevActivePanel","usePrevious","prevSwipingBack","prevBrowserSwipe","prevSwipeBackResult","prevSwipeBackPrevPanel","prevOnTransition","panels","Children","toArray","filter","panel","panelId","props","includes","disableAnimation","transitionMotionEnabled","animate","Platform","VKCOM","pickPanel","flushTransition","useCallback","isBackTransition","scrollTo","from","to","useIsomorphicLayoutEffect","transitionEndHandler","e","animationName","Boolean","waitTransitionFinish","useWaitTransitionFinish","animationFinishTimeout","useTimeout","IOS","onSwipeBackSuccess","swipingBackTransitionEndHandler","propertyName","target","onMoveX","event","swipeBackExcluded","isWebView","startX","innerWidth","length","payload","blurActiveElement","getScroll","y","slice","shiftX","onEnd","speed","duration","calcPanelSwipeStyles","canUseDOM","isPrev","isNext","prevPanelTranslate","nextPanelTranslate","prevPanelShadow","boxShadow","transform","WebkitTransform","firstLayerId","map","find","animationEvent","supported","set","Touch","Component","classNames","div","isTransitionTarget","compensateScroll","onAnimationEnd","ref","el","style","key","marginTop","NavTransitionProvider","entering"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/View/View.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { blurActiveElement, canUseDOM, useDOM } from '../../lib/dom';\nimport { getNavId, NavIdProps } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { animationEvent } from '../../lib/supportEvents';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useScroll } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { useSplitCol } from '../SplitCol/SplitColContext';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport { swipeBackExcluded } from './utils';\nimport styles from './View.module.css';\n\nconst SWIPE_BACK_AREA = 70;\n\nenum SwipeBackResults {\n fail = 1,\n success,\n}\n\ninterface Scrolls {\n [index: string]: number | undefined;\n}\n\ninterface ViewsScrolls {\n [index: string]: Scrolls;\n}\n\nexport let scrollsCache: ViewsScrolls = {};\n\nexport interface ViewProps extends React.HTMLAttributes<HTMLElement>, NavIdProps {\n activePanel: string;\n onTransition?(params: { isBack: boolean; from: string; to: string }): void;\n /**\n * callback свайпа назад\n */\n onSwipeBack?(): void;\n /**\n * callback начала анимации свайпа назад.\n *\n * Чтобы остановить свайп назад, возвращайте `\"prevent\"`.\n */\n onSwipeBackStart?(activePanel: string | null): void | 'prevent';\n /**\n * callback завершения анимации отмененного пользователем свайпа\n */\n onSwipeBackCancel?(): void;\n history?: string[];\n\n children: React.ReactElement | Iterable<React.ReactElement>;\n}\n\nexport interface ViewState {\n animated: boolean;\n\n visiblePanels: string[];\n activePanel: string | null;\n isBack: boolean | undefined;\n prevPanel: string | null;\n nextPanel: string | null;\n\n swipingBack: boolean;\n swipeBackStartX: number;\n swipeBackShift: number;\n swipeBackNextPanel: string | null;\n swipeBackPrevPanel: string | null;\n swipeBackResult: SwipeBackResults | null;\n\n browserSwipe: boolean;\n}\n\nconst warn = warnOnce('View');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/View\n */\nexport const View = ({\n activePanel: activePanelProp,\n history,\n nav,\n onTransition,\n onSwipeBack,\n onSwipeBackStart,\n onSwipeBackCancel: onSwipeBackCancelProp,\n children,\n className,\n ...restProps\n}: ViewProps) => {\n const scrolls = React.useRef(scrollsCache[getNavId({ nav, id: restProps.id }) as string] || {});\n const afterTransition = React.useRef(noop);\n\n React.useEffect(() => () => {\n const id = getNavId({ nav, id: restProps.id });\n if (id) {\n scrollsCache[id] = scrolls.current;\n }\n });\n\n const panelNodes = React.useRef<{ [id: string]: HTMLDivElement | null }>({});\n\n const { window, document } = useDOM();\n const scroll = useScroll();\n const configProvider = useConfigProvider();\n const splitCol = useSplitCol();\n const platform = usePlatform();\n\n const [animated, setAnimated] = React.useState(false);\n\n const [visiblePanels, setVisiblePanels] = React.useState([activePanelProp]);\n const [activePanel, setActivePanel] = React.useState<string | null>(activePanelProp);\n const [isBack, setIsBack] = React.useState<boolean | undefined>(undefined);\n const [prevPanel, setPrevPanel] = React.useState<string | null>(null);\n const [nextPanel, setNextPanel] = React.useState<string | null>(null);\n\n const [swipingBack, setSwipingBack] = React.useState<boolean>(false);\n const [swipeBackPrevented, setSwipeBackPrevented] = React.useState<boolean>(false);\n const [swipeBackStartX, setSwipeBackStartX] = React.useState<number>(0);\n const [swipeBackShift, setSwipeBackShift] = React.useState<number>(0);\n const [swipeBackNextPanel, setSwipeBackNextPanel] = React.useState<string | null>(null);\n const [swipeBackPrevPanel, setSwipeBackPrevPanel] = React.useState<string | null>(null);\n const [swipeBackResult, setSwipeBackResult] = React.useState<SwipeBackResults | null>(null);\n\n const [browserSwipe, setBrowserSwipe] = React.useState(false);\n\n const prevActivePanel = usePrevious(activePanelProp);\n const prevSwipingBack = usePrevious(swipingBack);\n const prevBrowserSwipe = usePrevious(browserSwipe);\n const prevSwipeBackResult = usePrevious(swipeBackResult);\n const prevSwipeBackPrevPanel = usePrevious(swipeBackPrevPanel);\n const prevOnTransition = usePrevious(onTransition);\n\n const panels = (React.Children.toArray(children) as React.ReactElement[]).filter(\n (panel: React.ReactElement) => {\n const panelId = getNavId(panel.props, warn);\n\n return (\n (panelId !== undefined && visiblePanels.includes(panelId)) ||\n panelId === swipeBackPrevPanel ||\n panelId === swipeBackNextPanel\n );\n },\n );\n\n const disableAnimation =\n configProvider?.transitionMotionEnabled === false ||\n !splitCol?.animate ||\n platform === Platform.VKCOM;\n\n const pickPanel = (id: string | null) => {\n if (id === null) {\n return null;\n }\n return panelNodes.current[id];\n };\n\n const flushTransition = React.useCallback(\n (prevPanel: string, isBackTransition: boolean) => {\n if (isBackTransition) {\n scrolls.current[prevPanel] = 0;\n }\n setPrevPanel(null);\n setNextPanel(null);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n setAnimated(false);\n setIsBack(undefined);\n\n afterTransition.current = () => {\n scroll?.scrollTo(0, isBackTransition ? scrolls.current[activePanelProp] : 0);\n onTransition &&\n onTransition({\n isBack: isBackTransition,\n from: prevPanel,\n to: activePanelProp,\n });\n };\n },\n [activePanelProp, onTransition, scroll],\n );\n\n useIsomorphicLayoutEffect(() => {\n afterTransition.current();\n afterTransition.current = noop;\n }, [afterTransition.current]);\n\n const transitionEndHandler = React.useCallback(\n (e?: React.AnimationEvent): void => {\n if (\n (!e ||\n [\n styles['animation-ios-next-forward'],\n styles['animation-ios-prev-back'],\n styles['animation-view-next-forward'],\n styles['animation-view-prev-back'],\n ].includes(e.animationName)) &&\n prevPanel !== null\n ) {\n flushTransition(prevPanel, Boolean(isBack));\n }\n },\n [flushTransition, isBack, prevPanel],\n );\n\n const { waitTransitionFinish } = useWaitTransitionFinish();\n const animationFinishTimeout = useTimeout(\n transitionEndHandler,\n platform === Platform.IOS ? 600 : 300,\n );\n\n const onSwipeBackSuccess = React.useCallback(() => {\n onSwipeBack && onSwipeBack();\n }, [onSwipeBack]);\n\n const onSwipeBackCancel = React.useCallback(() => {\n onSwipeBackCancelProp && onSwipeBackCancelProp();\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n }, [onSwipeBackCancelProp]);\n\n const swipingBackTransitionEndHandler = React.useCallback(\n (e?: TransitionEvent): void => {\n // indexOf because of vendor prefixes in old browsers\n if (\n !e ||\n (e?.propertyName.includes('transform') && e?.target === pickPanel(swipeBackNextPanel))\n ) {\n switch (swipeBackResult) {\n case SwipeBackResults.fail:\n onSwipeBackCancel();\n break;\n case SwipeBackResults.success:\n onSwipeBackSuccess();\n }\n }\n },\n [onSwipeBackCancel, onSwipeBackSuccess, swipeBackNextPanel, swipeBackResult],\n );\n\n const onMoveX = (event: TouchEvent): void => {\n if (\n platform !== Platform.IOS ||\n swipeBackPrevented ||\n swipeBackExcluded(event) ||\n disableAnimation\n ) {\n return;\n }\n\n if (!configProvider?.isWebView) {\n if (\n (event.startX <= SWIPE_BACK_AREA || event.startX >= window!.innerWidth - SWIPE_BACK_AREA) &&\n !browserSwipe\n ) {\n setBrowserSwipe(true);\n }\n\n return;\n }\n\n if (!onSwipeBack || (animated && event.startX <= SWIPE_BACK_AREA)) {\n return;\n }\n\n if (!swipingBack && event.startX <= SWIPE_BACK_AREA && history && history.length > 1) {\n // Начался свайп назад\n if (onSwipeBackStart) {\n const payload = onSwipeBackStart(activePanel);\n if (payload === 'prevent') {\n setSwipeBackPrevented(true);\n return;\n }\n }\n\n if (activePanel !== null) {\n // Note: вызываем закрытие клавиатуры. В iOS это нативное поведение при свайпе.\n blurActiveElement(document);\n scrolls.current[activePanel] = scroll?.getScroll().y;\n }\n\n setSwipingBack(true);\n setSwipeBackStartX(event.startX);\n setSwipeBackPrevPanel(activePanel);\n setSwipeBackNextPanel(history.slice(-2)[0]);\n }\n\n if (swipingBack) {\n let swipeBackShift = 0;\n if (event.shiftX < 0) {\n swipeBackShift = 0;\n } else if (event.shiftX > window!.innerWidth - swipeBackStartX) {\n swipeBackShift = window!.innerWidth;\n } else {\n swipeBackShift = event.shiftX;\n }\n setSwipeBackShift(swipeBackShift);\n }\n };\n\n const onEnd = React.useCallback(\n (event: TouchEvent): void => {\n if (swipingBack) {\n const speed = (swipeBackShift / event.duration) * 1000;\n if (swipeBackShift === 0) {\n onSwipeBackCancel();\n } else if (swipeBackShift >= (window!.innerWidth ?? 0)) {\n onSwipeBackSuccess();\n } else if (speed > 250 || swipeBackStartX + swipeBackShift > window!.innerWidth / 2) {\n setSwipeBackResult(SwipeBackResults.success);\n } else {\n setSwipeBackResult(SwipeBackResults.fail);\n }\n }\n if (swipeBackPrevented) {\n setSwipeBackPrevented(false);\n }\n },\n [\n onSwipeBackCancel,\n onSwipeBackSuccess,\n swipeBackShift,\n swipeBackStartX,\n swipingBack,\n swipeBackPrevented,\n window,\n ],\n );\n\n const calcPanelSwipeStyles = (panelId: string | undefined): React.CSSProperties => {\n if (!canUseDOM || !window) {\n return {};\n }\n\n const isPrev = panelId === swipeBackPrevPanel;\n const isNext = panelId === swipeBackNextPanel;\n\n if ((!isPrev && !isNext) || swipeBackResult) {\n return {};\n }\n\n let prevPanelTranslate = `${swipeBackShift}px`;\n let nextPanelTranslate = `${-50 + (swipeBackShift * 100) / window.innerWidth / 2}%`;\n let prevPanelShadow = (0.3 * (window.innerWidth - swipeBackShift)) / window.innerWidth;\n\n if (swipeBackResult) {\n return isPrev ? { boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})` } : {};\n }\n\n if (isNext) {\n return {\n transform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n WebkitTransform: `translate3d(${nextPanelTranslate}, 0, 0)`,\n };\n }\n if (isPrev) {\n return {\n transform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n WebkitTransform: `translate3d(${prevPanelTranslate}, 0, 0)`,\n boxShadow: `-2px 0 12px rgba(0, 0, 0, ${prevPanelShadow})`,\n };\n }\n\n return {};\n };\n\n React.useEffect(() => {\n // Нужен переход\n if (\n prevActivePanel &&\n prevActivePanel !== activePanelProp &&\n !prevSwipingBack &&\n !prevBrowserSwipe\n ) {\n const firstLayerId = (React.Children.toArray(children) as React.ReactElement[])\n .map((panel) => getNavId(panel.props, warn))\n .find((id) => id === prevActivePanel || id === activePanelProp);\n\n const isBackTransition = firstLayerId === activePanelProp;\n scrolls.current[prevActivePanel] = scroll?.getScroll().y;\n\n if (disableAnimation) {\n flushTransition(prevActivePanel, isBackTransition);\n } else {\n blurActiveElement(document);\n\n setVisiblePanels([prevActivePanel, activePanelProp]);\n setPrevPanel(prevActivePanel);\n setNextPanel(activePanelProp);\n setActivePanel(null);\n setAnimated(true);\n setIsBack(isBackTransition);\n\n // Фолбек анимации перехода\n if (!animationEvent.supported) {\n animationFinishTimeout.set();\n }\n }\n }\n\n // Закончилась анимация свайпа назад\n if (prevActivePanel && prevActivePanel !== activePanelProp && prevSwipingBack) {\n const nextPanel = activePanelProp;\n const prevPanel = prevActivePanel;\n if (prevSwipeBackPrevPanel) {\n scrolls.current[prevSwipeBackPrevPanel] = 0;\n }\n\n setSwipeBackPrevPanel(null);\n setSwipeBackNextPanel(null);\n setSwipingBack(false);\n setSwipeBackResult(null);\n setSwipeBackStartX(0);\n setSwipeBackShift(0);\n setActivePanel(nextPanel);\n setVisiblePanels([nextPanel]);\n\n afterTransition.current = () => {\n if (nextPanel !== null) {\n scroll?.scrollTo(0, scrolls.current[nextPanel]);\n }\n prevOnTransition &&\n prevOnTransition({\n isBack: true,\n from: prevPanel,\n to: nextPanel,\n });\n };\n }\n\n // Началась анимация завершения свайпа назад.\n if (!prevSwipeBackResult && swipeBackResult) {\n waitTransitionFinish(\n pickPanel(swipeBackNextPanel),\n swipingBackTransitionEndHandler,\n platform === Platform.IOS ? 600 : 300,\n );\n }\n\n // Если свайп назад отменился (когда пользователь недостаточно сильно свайпнул)\n if (prevSwipeBackResult === SwipeBackResults.fail && !swipeBackResult && activePanel !== null) {\n scroll?.scrollTo(0, scrolls.current[activePanel]);\n }\n\n // Закончился Safari свайп\n if (prevActivePanel !== activePanelProp && browserSwipe) {\n setBrowserSwipe(false);\n setNextPanel(null);\n setPrevPanel(null);\n setAnimated(false);\n setVisiblePanels([activePanelProp]);\n setActivePanel(activePanelProp);\n }\n }, [\n activePanelProp,\n activePanel,\n animationFinishTimeout,\n browserSwipe,\n children,\n disableAnimation,\n document,\n flushTransition,\n onSwipeBackStart,\n panels,\n platform,\n prevActivePanel,\n prevBrowserSwipe,\n prevOnTransition,\n prevSwipeBackPrevPanel,\n prevSwipeBackResult,\n prevSwipingBack,\n scroll,\n swipeBackNextPanel,\n swipeBackResult,\n swipingBack,\n swipingBackTransitionEndHandler,\n waitTransitionFinish,\n ]);\n\n return (\n <Touch\n Component=\"section\"\n {...restProps}\n className={classNames(\n styles['View'],\n platform === Platform.IOS && classNames(styles['View--ios'], 'vkuiInternalView--ios'),\n !disableAnimation && animated && styles['View--animated'],\n !disableAnimation && swipingBack && styles['View--swiping-back'],\n disableAnimation && styles['View--no-motion'],\n className,\n )}\n onMoveX={onMoveX}\n onEnd={onEnd}\n >\n <div className={styles['View__panels']}>\n {panels.map((panel: React.ReactElement) => {\n const panelId = getNavId(panel.props, warn);\n const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;\n const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);\n const compensateScroll =\n isPrev || panelId === swipeBackNextPanel || (panelId === nextPanel && isBack);\n\n return (\n <div\n className={classNames(\n styles['View__panel'],\n panelId === activePanel && styles['View__panel--active'],\n panelId === prevPanel && styles['View__panel--prev'],\n panelId === nextPanel && styles['View__panel--next'],\n panelId === swipeBackPrevPanel && styles['View__panel--swipe-back-prev'],\n panelId === swipeBackNextPanel && styles['View__panel--swipe-back-next'],\n swipeBackResult === SwipeBackResults.success &&\n styles['View__panel--swipe-back-success'],\n swipeBackResult === SwipeBackResults.fail &&\n styles['View__panel--swipe-back-failed'],\n )}\n onAnimationEnd={isTransitionTarget ? transitionEndHandler : undefined}\n ref={(el) => panelId !== undefined && (panelNodes.current[panelId] = el)}\n style={calcPanelSwipeStyles(panelId)}\n key={panelId}\n >\n <div\n className={styles['View__panel-in']}\n style={{\n marginTop: compensateScroll ? -(scrolls.current[panelId] ?? 0) : undefined,\n }}\n >\n <NavTransitionProvider\n entering={panelId === nextPanel || panelId === swipeBackNextPanel}\n >\n {panel}\n </NavTransitionProvider>\n </div>\n </div>\n );\n })}\n </div>\n </Touch>\n );\n};\n"],"names":["scrollsCache","View","SWIPE_BACK_AREA","SwipeBackResults","fail","success","warn","warnOnce","activePanel","activePanelProp","history","nav","onTransition","onSwipeBack","onSwipeBackStart","onSwipeBackCancel","onSwipeBackCancelProp","children","className","restProps","configProvider","splitCol","scrolls","React","useRef","getNavId","id","afterTransition","noop","useEffect","current","panelNodes","useDOM","window","document","scroll","useScroll","useConfigProvider","useSplitCol","platform","usePlatform","useState","animated","setAnimated","visiblePanels","setVisiblePanels","setActivePanel","undefined","isBack","setIsBack","prevPanel","setPrevPanel","nextPanel","setNextPanel","swipingBack","setSwipingBack","swipeBackPrevented","setSwipeBackPrevented","swipeBackStartX","setSwipeBackStartX","swipeBackShift","setSwipeBackShift","swipeBackNextPanel","setSwipeBackNextPanel","swipeBackPrevPanel","setSwipeBackPrevPanel","swipeBackResult","setSwipeBackResult","browserSwipe","setBrowserSwipe","prevActivePanel","usePrevious","prevSwipingBack","prevBrowserSwipe","prevSwipeBackResult","prevSwipeBackPrevPanel","prevOnTransition","panels","Children","toArray","filter","panel","panelId","props","includes","disableAnimation","transitionMotionEnabled","animate","Platform","VKCOM","pickPanel","flushTransition","useCallback","isBackTransition","scrollTo","from","to","useIsomorphicLayoutEffect","transitionEndHandler","e","animationName","Boolean","waitTransitionFinish","useWaitTransitionFinish","animationFinishTimeout","useTimeout","IOS","onSwipeBackSuccess","swipingBackTransitionEndHandler","propertyName","target","onMoveX","event","swipeBackExcluded","isWebView","startX","innerWidth","length","payload","blurActiveElement","getScroll","y","slice","shiftX","onEnd","speed","duration","calcPanelSwipeStyles","canUseDOM","isPrev","isNext","prevPanelTranslate","nextPanelTranslate","prevPanelShadow","boxShadow","transform","WebkitTransform","firstLayerId","map","find","animationEvent","supported","set","Touch","Component","classNames","div","isTransitionTarget","compensateScroll","onAnimationEnd","ref","el","style","key","marginTop","NavTransitionProvider","entering"],"mappings":"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"}
|
|
@@ -56,10 +56,10 @@ var ViewInfiniteComponent = /*#__PURE__*/ function(_superClass) {
|
|
|
56
56
|
_define_property._(_assert_this_initialized._(_this), "panelNodes", {});
|
|
57
57
|
_define_property._(_assert_this_initialized._(_this), "transitionEndHandler", function(e) {
|
|
58
58
|
if ((!e || [
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
59
|
+
"vkuianimation-ios-next-forward",
|
|
60
|
+
"vkuianimation-ios-prev-back",
|
|
61
|
+
"vkuianimation-view-next-forward",
|
|
62
|
+
"vkuianimation-view-prev-back"
|
|
63
63
|
].includes(e.animationName)) && _this.state.prevPanel !== null) {
|
|
64
64
|
_this.flushTransition(_this.state.prevPanel, Boolean(_this.state.isBack));
|
|
65
65
|
}
|