@vkontakte/vkui 7.0.0-dev-efd91c.3 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.js +1 -3
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/components/AppRoot/AppRoot.d.ts +1 -1
- package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRoot.js +16 -10
- package/dist/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/components/AppRoot/AppRootPortal.js +1 -1
- package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
- package/dist/components/AppRoot/{AppRootStyleContainer.d.ts → AppRootStyleContainer/AppRootStyleContainer.d.ts} +3 -3
- package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.d.ts.map +1 -0
- package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js +45 -0
- package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
- package/dist/components/AppRoot/helpers.d.ts +7 -0
- package/dist/components/AppRoot/helpers.d.ts.map +1 -1
- package/dist/components/AppRoot/helpers.js +20 -4
- package/dist/components/AppRoot/helpers.js.map +1 -1
- package/dist/components/Clickable/Clickable.d.ts.map +1 -1
- package/dist/components/Clickable/Clickable.js +2 -83
- package/dist/components/Clickable/Clickable.js.map +1 -1
- package/dist/components/Clickable/RealClickable.d.ts +6 -0
- package/dist/components/Clickable/RealClickable.d.ts.map +1 -0
- package/dist/components/Clickable/RealClickable.js +90 -0
- package/dist/components/Clickable/RealClickable.js.map +1 -0
- package/dist/components/HorizontalCell/HorizontalCell.d.ts +6 -1
- package/dist/components/HorizontalCell/HorizontalCell.d.ts.map +1 -1
- package/dist/components/HorizontalCell/HorizontalCell.js +4 -15
- package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/components/ModalCard/ModalCardInternal.js +1 -1
- package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
- package/dist/components/ModalPage/ModalPage.d.ts +1 -1
- package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
- package/dist/components/ModalPage/ModalPage.js +53 -5
- package/dist/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/components/ModalPage/ModalPageInternal.d.ts +5 -2
- package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
- package/dist/components/ModalPage/ModalPageInternal.js +5 -4
- package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/ModalRoot/types.d.ts.map +1 -1
- package/dist/components/ModalRoot/types.js.map +1 -1
- package/dist/components/ModalRoot/useModalManager.d.ts +2 -0
- package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
- package/dist/components/ModalRoot/useModalManager.js +4 -1
- package/dist/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
- package/dist/components/PopoutWrapper/PopoutWrapper.js +2 -2
- package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
- package/dist/components/Spinner/Spinner.d.ts.map +1 -1
- package/dist/components/Spinner/Spinner.js +11 -43
- package/dist/components/Spinner/Spinner.js.map +1 -1
- package/dist/components/Spinner/SpinnerAnimation.d.ts +7 -0
- package/dist/components/Spinner/SpinnerAnimation.d.ts.map +1 -0
- package/dist/components/Spinner/SpinnerAnimation.js +36 -0
- package/dist/components/Spinner/SpinnerAnimation.js.map +1 -0
- package/dist/components/SplitLayout/SplitLayout.d.ts +4 -4
- package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -3
- package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.js +14 -9
- package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.module.css +17 -0
- package/dist/cssm/components/AppRoot/AppRootPortal.js +1 -1
- package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
- package/dist/cssm/components/AppRoot/{AppRootStyleContainer.js → AppRootStyleContainer/AppRootStyleContainer.js} +12 -23
- package/dist/cssm/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
- package/dist/cssm/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -31
- package/dist/cssm/components/AppRoot/helpers.js +17 -1
- package/dist/cssm/components/AppRoot/helpers.js.map +1 -1
- package/dist/cssm/components/Button/Button.module.css +6 -6
- package/dist/cssm/components/Card/Card.module.css +12 -6
- package/dist/cssm/components/Clickable/Clickable.js +2 -55
- package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
- package/dist/cssm/components/Clickable/RealClickable.js +61 -0
- package/dist/cssm/components/Clickable/RealClickable.js.map +1 -0
- package/dist/cssm/components/FormField/FormField.module.css +2 -0
- package/dist/cssm/components/FormItem/FormItem.module.css +6 -6
- package/dist/cssm/components/Group/Group.module.css +1 -0
- package/dist/cssm/components/Header/Header.module.css +10 -4
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js +2 -12
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
- package/dist/cssm/components/IconButton/IconButton.module.css +12 -3
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
- package/dist/cssm/components/ModalCard/ModalCardInternal.js +1 -1
- package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.js +50 -4
- package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
- package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/ModalRoot/types.js.map +1 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js +4 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.module.css +10 -4
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +2 -3
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
- package/dist/cssm/components/Removable/Removable.module.css +7 -2
- package/dist/cssm/components/Spinner/Spinner.js +11 -43
- package/dist/cssm/components/Spinner/Spinner.js.map +1 -1
- package/dist/cssm/components/Spinner/SpinnerAnimation.js +36 -0
- package/dist/cssm/components/Spinner/SpinnerAnimation.js.map +1 -0
- package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/cssm/components/View/View.module.css +2 -2
- package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
- package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/adaptivity/functions.js +1 -7
- package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
- package/dist/cssm/lib/animation/useReducedMotion.js +4 -7
- package/dist/cssm/lib/animation/useReducedMotion.js.map +1 -1
- package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +22 -37
- package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
- package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js +1 -9
- package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
- package/dist/cssm/lib/sheet/index.js +1 -1
- package/dist/cssm/lib/sheet/index.js.map +1 -1
- package/dist/cssm/lib/sheet/useBottomSheet.js +12 -15
- package/dist/cssm/lib/sheet/useBottomSheet.js.map +1 -1
- package/dist/cssm/styles/common.css +10 -4
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +3 -2
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/adaptivity/functions.d.ts +0 -1
- package/dist/lib/adaptivity/functions.d.ts.map +1 -1
- package/dist/lib/adaptivity/functions.js +1 -7
- package/dist/lib/adaptivity/functions.js.map +1 -1
- package/dist/lib/animation/useReducedMotion.d.ts +1 -1
- package/dist/lib/animation/useReducedMotion.d.ts.map +1 -1
- package/dist/lib/animation/useReducedMotion.js +4 -7
- package/dist/lib/animation/useReducedMotion.js.map +1 -1
- package/dist/lib/sheet/controllers/BottomSheetController.d.ts +8 -8
- package/dist/lib/sheet/controllers/BottomSheetController.d.ts.map +1 -1
- package/dist/lib/sheet/controllers/BottomSheetController.js +22 -37
- package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
- package/dist/lib/sheet/controllers/CSSTransitionController.d.ts +1 -1
- package/dist/lib/sheet/controllers/CSSTransitionController.d.ts.map +1 -1
- package/dist/lib/sheet/controllers/CSSTransitionController.js +1 -9
- package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
- package/dist/lib/sheet/index.d.ts +2 -1
- package/dist/lib/sheet/index.d.ts.map +1 -1
- package/dist/lib/sheet/index.js +1 -1
- package/dist/lib/sheet/index.js.map +1 -1
- package/dist/lib/sheet/useBottomSheet.d.ts +6 -5
- package/dist/lib/sheet/useBottomSheet.d.ts.map +1 -1
- package/dist/lib/sheet/useBottomSheet.js +12 -15
- package/dist/lib/sheet/useBottomSheet.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +2 -2
- package/src/components/ActionSheet/ActionSheet.tsx +1 -4
- package/src/components/AppRoot/AppRoot.module.css +17 -0
- package/src/components/AppRoot/AppRoot.tsx +24 -11
- package/src/components/AppRoot/AppRootPortal.tsx +1 -1
- package/src/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -24
- package/src/components/AppRoot/{AppRootStyleContainer.tsx → AppRootStyleContainer/AppRootStyleContainer.tsx} +11 -29
- package/src/components/AppRoot/helpers.ts +17 -1
- package/src/components/Button/Button.module.css +6 -6
- package/src/components/Card/Card.module.css +8 -6
- package/src/components/Clickable/Clickable.tsx +4 -103
- package/src/components/Clickable/RealClickable.tsx +99 -0
- package/src/components/FormField/FormField.module.css +2 -0
- package/src/components/FormItem/FormItem.module.css +6 -6
- package/src/components/Group/Group.module.css +1 -0
- package/src/components/Header/Header.module.css +8 -4
- package/src/components/HorizontalCell/HorizontalCell.tsx +8 -20
- package/src/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
- package/src/components/IconButton/IconButton.module.css +10 -3
- package/src/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
- package/src/components/ModalCard/ModalCardInternal.tsx +1 -1
- package/src/components/ModalPage/ModalPage.tsx +57 -3
- package/src/components/ModalPage/ModalPageInternal.tsx +14 -5
- package/src/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
- package/src/components/ModalRoot/ModalRoot.tsx +0 -1
- package/src/components/ModalRoot/types.ts +0 -1
- package/src/components/ModalRoot/useModalManager.tsx +5 -3
- package/src/components/PanelHeader/PanelHeader.module.css +8 -4
- package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
- package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +1 -1
- package/src/components/PopoutWrapper/PopoutWrapper.tsx +1 -4
- package/src/components/Removable/Removable.module.css +6 -2
- package/src/components/Spinner/Spinner.tsx +10 -48
- package/src/components/Spinner/SpinnerAnimation.tsx +42 -0
- package/src/components/SplitLayout/SplitLayout.tsx +4 -4
- package/src/components/View/View.module.css +2 -2
- package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +13 -4
- package/src/index.ts +2 -2
- package/src/lib/adaptivity/functions.ts +1 -8
- package/src/lib/animation/useReducedMotion.ts +6 -13
- package/src/lib/sheet/controllers/BottomSheetController.ts +32 -50
- package/src/lib/sheet/controllers/CSSTransitionController.ts +1 -8
- package/src/lib/sheet/index.ts +3 -0
- package/src/lib/sheet/useBottomSheet.ts +21 -17
- package/src/styles/common.css +12 -4
- package/dist/components/AppRoot/AppRootStyleContainer.d.ts.map +0 -1
- package/dist/components/AppRoot/AppRootStyleContainer.js +0 -57
- package/dist/components/AppRoot/AppRootStyleContainer.js.map +0 -1
- package/dist/cssm/components/AppRoot/AppRootStyleContainer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Clickable/Clickable.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Clickable/Clickable.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { type FocusVisibleModeProps } from '../../hooks/useFocusVisibleClassName';\nimport { RootComponent, type RootComponentProps } from '../RootComponent/RootComponent';\nimport { RealClickable } from './RealClickable';\nimport { type StateProps } from './useState';\nimport styles from './Clickable.module.css';\n\nexport interface ClickableProps<T = HTMLElement>\n extends RootComponentProps<T>,\n FocusVisibleModeProps,\n StateProps {}\n\n/**\n * Некликабельный компонент. Отключаем возможность нажимать на компонент.\n */\nconst NonClickable = <T,>({\n href,\n onClick,\n onClickCapture,\n activeClassName,\n hoverClassName,\n hasActive,\n hasHover,\n hovered,\n unlockParentHover,\n activated,\n activeEffectDelay,\n ...restProps\n}: ClickableProps<T>) => <RootComponent {...restProps} />;\n\n/**\n * Проверяем, является ли компонент кликабельным\n */\nexport function checkClickable<T>(props: ClickableProps<T>): boolean {\n return (\n (props.href !== undefined ||\n props.onClick !== undefined ||\n props.onClickCapture !== undefined ||\n props.Component === 'a' ||\n props.Component === 'button' ||\n props.Component === 'label' ||\n props.Component === 'input') &&\n !props.disabled\n );\n}\n\n/**\n * Определяет правильный компонент и его свойства\n *\n * - если передан Component, используем его\n * - при передаче `href` превратится в `a`,\n * - при передаче `onClick` превратится в `div` c `role=\"button\"` и `tabIndex=\"0\"`.\n * - иначе используется `div`.\n */\nfunction component<T>({\n Component,\n onClick,\n onClickCapture,\n href,\n disabled,\n}: RootComponentProps<T>): RootComponentProps<T> {\n if (Component !== undefined) {\n return { Component };\n } else if (href !== undefined) {\n return { 'Component': 'a', 'aria-disabled': disabled };\n } else if (onClick !== undefined || onClickCapture !== undefined) {\n return {\n 'Component': 'div',\n 'role': 'button',\n 'tabIndex': disabled ? undefined : 0,\n 'aria-disabled': disabled,\n };\n }\n\n return {};\n}\n\n/**\n * Базовый кликабельный корневой компонент.\n *\n * - при передаче `href` превратится в `a`,\n * - при передаче `onClick` превратится в `div` c `role=\"button\"` и `tabIndex=\"0\"`.\n * - иначе используется `div`.\n *\n * Отвечает за:\n *\n * - стейты наведения и нажатия\n * - a11y компонентов\n */\nexport const Clickable = <T,>({\n focusVisibleMode = 'inside',\n baseClassName: baseClassNameProp,\n ...restProps\n}: ClickableProps<T>): React.ReactNode => {\n const commonProps = component(restProps);\n const isClickable = checkClickable(restProps);\n const baseClassName = classNames(baseClassNameProp, styles.host);\n\n if (isClickable) {\n return (\n <RealClickable\n baseClassName={baseClassName}\n focusVisibleMode={focusVisibleMode}\n {...commonProps}\n {...restProps}\n />\n );\n }\n\n return <NonClickable baseClassName={baseClassName} {...commonProps} {...restProps} />;\n};\n"],"names":["React","classNames","RootComponent","RealClickable","styles","NonClickable","href","onClick","onClickCapture","activeClassName","hoverClassName","hasActive","hasHover","hovered","unlockParentHover","activated","activeEffectDelay","restProps","checkClickable","props","undefined","Component","disabled","component","Clickable","focusVisibleMode","baseClassName","baseClassNameProp","commonProps","isClickable","host"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,aAAa,QAAiC,oCAAiC;AACxF,SAASC,aAAa,QAAQ,qBAAkB;AAEhD,OAAOC,YAAY,yBAAyB;AAO5C;;CAEC,GACD,MAAMC,eAAe,CAAK,EACxBC,IAAI,EACJC,OAAO,EACPC,cAAc,EACdC,eAAe,EACfC,cAAc,EACdC,SAAS,EACTC,QAAQ,EACRC,OAAO,EACPC,iBAAiB,EACjBC,SAAS,EACTC,iBAAiB,EACjB,GAAGC,WACe,iBAAK,KAACf;QAAe,GAAGe,SAAS;;AAErD;;CAEC,GACD,OAAO,SAASC,eAAkBC,KAAwB;IACxD,OACE,AAACA,CAAAA,MAAMb,IAAI,KAAKc,aACdD,MAAMZ,OAAO,KAAKa,aAClBD,MAAMX,cAAc,KAAKY,aACzBD,MAAME,SAAS,KAAK,OACpBF,MAAME,SAAS,KAAK,YACpBF,MAAME,SAAS,KAAK,WACpBF,MAAME,SAAS,KAAK,OAAM,KAC5B,CAACF,MAAMG,QAAQ;AAEnB;AAEA;;;;;;;CAOC,GACD,SAASC,UAAa,EACpBF,SAAS,EACTd,OAAO,EACPC,cAAc,EACdF,IAAI,EACJgB,QAAQ,EACc;IACtB,IAAID,cAAcD,WAAW;QAC3B,OAAO;YAAEC;QAAU;IACrB,OAAO,IAAIf,SAASc,WAAW;QAC7B,OAAO;YAAE,aAAa;YAAK,iBAAiBE;QAAS;IACvD,OAAO,IAAIf,YAAYa,aAAaZ,mBAAmBY,WAAW;QAChE,OAAO;YACL,aAAa;YACb,QAAQ;YACR,YAAYE,WAAWF,YAAY;YACnC,iBAAiBE;QACnB;IACF;IAEA,OAAO,CAAC;AACV;AAEA;;;;;;;;;;;CAWC,GACD,OAAO,MAAME,YAAY,CAAK,EAC5BC,mBAAmB,QAAQ,EAC3BC,eAAeC,iBAAiB,EAChC,GAAGV,WACe;IAClB,MAAMW,cAAcL,UAAUN;IAC9B,MAAMY,cAAcX,eAAeD;IACnC,MAAMS,gBAAgBzB,WAAW0B,mBAAmBvB,OAAO0B,IAAI;IAE/D,IAAID,aAAa;QACf,qBACE,KAAC1B;YACCuB,eAAeA;YACfD,kBAAkBA;YACjB,GAAGG,WAAW;YACd,GAAGX,SAAS;;IAGnB;IAEA,qBAAO,KAACZ;QAAaqB,eAAeA;QAAgB,GAAGE,WAAW;QAAG,GAAGX,SAAS;;AACnF,EAAE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { classNames, noop } from "@vkontakte/vkjs";
|
|
5
|
+
import { useFocusVisible } from "../../hooks/useFocusVisible.js";
|
|
6
|
+
import { useFocusVisibleClassName } from "../../hooks/useFocusVisibleClassName.js";
|
|
7
|
+
import { mergeCalls } from "../../lib/mergeCalls.js";
|
|
8
|
+
import { clickByKeyboardHandler } from "../../lib/utils.js";
|
|
9
|
+
import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
10
|
+
import { ClickableLockStateContext, DEFAULT_ACTIVE_EFFECT_DELAY, useState } from "./useState.js";
|
|
11
|
+
import styles from "./Clickable.module.css";
|
|
12
|
+
/**
|
|
13
|
+
* Кликабельный компонент. Добавляем кучу обвесов
|
|
14
|
+
*/ export const RealClickable = ({ baseClassName, children, focusVisibleMode = 'inside', activeClassName, hoverClassName, activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY, hasHover = true, hasActive = true, hovered, activated, hasHoverWithChildren, unlockParentHover, onPointerEnter, onPointerLeave, onPointerDown, onPointerCancel, onPointerUp, onBlur, onFocus, onKeyDown, ...restProps })=>{
|
|
15
|
+
const { focusVisible, ...focusEvents } = useFocusVisible();
|
|
16
|
+
const focusVisibleClassNames = useFocusVisibleClassName({
|
|
17
|
+
focusVisible,
|
|
18
|
+
mode: focusVisibleMode
|
|
19
|
+
});
|
|
20
|
+
const { stateClassName, setLockHoverBubblingImmediate, setLockActiveBubblingImmediate, ...stateEvents } = useState({
|
|
21
|
+
activeClassName,
|
|
22
|
+
hoverClassName,
|
|
23
|
+
activeEffectDelay,
|
|
24
|
+
hasHover,
|
|
25
|
+
hasActive,
|
|
26
|
+
hovered,
|
|
27
|
+
activated,
|
|
28
|
+
unlockParentHover
|
|
29
|
+
});
|
|
30
|
+
const handlers = mergeCalls(focusEvents, stateEvents, {
|
|
31
|
+
onKeyDown: clickByKeyboardHandler
|
|
32
|
+
}, {
|
|
33
|
+
onPointerEnter,
|
|
34
|
+
onPointerLeave,
|
|
35
|
+
onPointerDown,
|
|
36
|
+
onPointerCancel,
|
|
37
|
+
onPointerUp,
|
|
38
|
+
onBlur,
|
|
39
|
+
onFocus,
|
|
40
|
+
onKeyDown
|
|
41
|
+
});
|
|
42
|
+
const lockStateContextValue = React.useMemo(()=>({
|
|
43
|
+
lockHoverStateBubbling: hasHoverWithChildren ? noop : setLockHoverBubblingImmediate,
|
|
44
|
+
lockActiveStateBubbling: setLockActiveBubblingImmediate
|
|
45
|
+
}), [
|
|
46
|
+
setLockHoverBubblingImmediate,
|
|
47
|
+
setLockActiveBubblingImmediate,
|
|
48
|
+
hasHoverWithChildren
|
|
49
|
+
]);
|
|
50
|
+
return /*#__PURE__*/ _jsx(RootComponent, {
|
|
51
|
+
baseClassName: classNames(baseClassName, styles.realClickable, focusVisibleClassNames, stateClassName),
|
|
52
|
+
...handlers,
|
|
53
|
+
...restProps,
|
|
54
|
+
children: /*#__PURE__*/ _jsx(ClickableLockStateContext.Provider, {
|
|
55
|
+
value: lockStateContextValue,
|
|
56
|
+
children: children
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=RealClickable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Clickable/RealClickable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { clickByKeyboardHandler } from '../../lib/utils';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { type ClickableProps } from './Clickable';\nimport { ClickableLockStateContext, DEFAULT_ACTIVE_EFFECT_DELAY, useState } from './useState';\nimport styles from './Clickable.module.css';\n\n/**\n * Кликабельный компонент. Добавляем кучу обвесов\n */\nexport const RealClickable = <T,>({\n baseClassName,\n children,\n focusVisibleMode = 'inside',\n activeClassName,\n hoverClassName,\n activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY,\n hasHover = true,\n hasActive = true,\n hovered,\n activated,\n hasHoverWithChildren,\n unlockParentHover,\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n ...restProps\n}: ClickableProps<T>) => {\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: focusVisibleMode });\n\n const {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...stateEvents\n } = useState({\n activeClassName,\n hoverClassName,\n activeEffectDelay,\n hasHover,\n hasActive,\n hovered,\n activated,\n unlockParentHover,\n });\n\n const handlers = mergeCalls(\n focusEvents,\n stateEvents,\n { onKeyDown: clickByKeyboardHandler },\n {\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n },\n );\n\n const lockStateContextValue = React.useMemo(\n () => ({\n lockHoverStateBubbling: hasHoverWithChildren ? noop : setLockHoverBubblingImmediate,\n lockActiveStateBubbling: setLockActiveBubblingImmediate,\n }),\n [setLockHoverBubblingImmediate, setLockActiveBubblingImmediate, hasHoverWithChildren],\n );\n\n return (\n <RootComponent\n baseClassName={classNames(\n baseClassName,\n styles.realClickable,\n focusVisibleClassNames,\n stateClassName,\n )}\n {...handlers}\n {...restProps}\n >\n <ClickableLockStateContext.Provider value={lockStateContextValue}>\n {children}\n </ClickableLockStateContext.Provider>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","noop","useFocusVisible","useFocusVisibleClassName","mergeCalls","clickByKeyboardHandler","RootComponent","ClickableLockStateContext","DEFAULT_ACTIVE_EFFECT_DELAY","useState","styles","RealClickable","baseClassName","children","focusVisibleMode","activeClassName","hoverClassName","activeEffectDelay","hasHover","hasActive","hovered","activated","hasHoverWithChildren","unlockParentHover","onPointerEnter","onPointerLeave","onPointerDown","onPointerCancel","onPointerUp","onBlur","onFocus","onKeyDown","restProps","focusVisible","focusEvents","focusVisibleClassNames","mode","stateClassName","setLockHoverBubblingImmediate","setLockActiveBubblingImmediate","stateEvents","handlers","lockStateContextValue","useMemo","lockHoverStateBubbling","lockActiveStateBubbling","realClickable","Provider","value"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,eAAe,QAAQ,iCAA8B;AAC9D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,sBAAsB,QAAQ,qBAAkB;AACzD,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,yBAAyB,EAAEC,2BAA2B,EAAEC,QAAQ,QAAQ,gBAAa;AAC9F,OAAOC,YAAY,yBAAyB;AAE5C;;CAEC,GACD,OAAO,MAAMC,gBAAgB,CAAK,EAChCC,aAAa,EACbC,QAAQ,EACRC,mBAAmB,QAAQ,EAC3BC,eAAe,EACfC,cAAc,EACdC,oBAAoBT,2BAA2B,EAC/CU,WAAW,IAAI,EACfC,YAAY,IAAI,EAChBC,OAAO,EACPC,SAAS,EACTC,oBAAoB,EACpBC,iBAAiB,EACjBC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,eAAe,EACfC,WAAW,EACXC,MAAM,EACNC,OAAO,EACPC,SAAS,EACT,GAAGC,WACe;IAClB,MAAM,EAAEC,YAAY,EAAE,GAAGC,aAAa,GAAGhC;IACzC,MAAMiC,yBAAyBhC,yBAAyB;QAAE8B;QAAcG,MAAMtB;IAAiB;IAE/F,MAAM,EACJuB,cAAc,EACdC,6BAA6B,EAC7BC,8BAA8B,EAC9B,GAAGC,aACJ,GAAG/B,SAAS;QACXM;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;IACF;IAEA,MAAMkB,WAAWrC,WACf8B,aACAM,aACA;QAAET,WAAW1B;IAAuB,GACpC;QACEmB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAGF,MAAMW,wBAAwB3C,MAAM4C,OAAO,CACzC,IAAO,CAAA;YACLC,wBAAwBtB,uBAAuBrB,OAAOqC;YACtDO,yBAAyBN;QAC3B,CAAA,GACA;QAACD;QAA+BC;QAAgCjB;KAAqB;IAGvF,qBACE,KAAChB;QACCM,eAAeZ,WACbY,eACAF,OAAOoC,aAAa,EACpBX,wBACAE;QAED,GAAGI,QAAQ;QACX,GAAGT,SAAS;kBAEb,cAAA,KAACzB,0BAA0BwC,QAAQ;YAACC,OAAON;sBACxC7B;;;AAIT,EAAE"}
|
|
@@ -141,6 +141,7 @@
|
|
|
141
141
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
142
142
|
|
|
143
143
|
:global(.vkuiInternalFormItem--status-error) .modeDefault .border,
|
|
144
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
144
145
|
:global(.vkuiInternalFormItem--status-error) .focusVisible .border,
|
|
145
146
|
.statusError.modeDefault .border,
|
|
146
147
|
.statusError.focusVisible .border {
|
|
@@ -160,6 +161,7 @@
|
|
|
160
161
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
161
162
|
|
|
162
163
|
:global(.vkuiInternalFormItem--status-valid) .modeDefault .border,
|
|
164
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
163
165
|
:global(.vkuiInternalFormItem--status-valid) .focusVisible .border,
|
|
164
166
|
.statusValid.modeDefault .border,
|
|
165
167
|
.statusValid.focusVisible .border {
|
|
@@ -156,24 +156,24 @@
|
|
|
156
156
|
|
|
157
157
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
158
158
|
|
|
159
|
-
.
|
|
160
|
-
|
|
159
|
+
:global(.vkuiInternalFormLayoutGroup--mode-horizontal) .withTop,
|
|
160
|
+
.withTop .removable {
|
|
161
161
|
-webkit-margin-before: calc(-2px - var(--vkui--font_subhead--line_height--regular) - 8px);
|
|
162
162
|
margin-block-start: calc(-2px - var(--vkui--font_subhead--line_height--regular) - 8px);
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
166
166
|
|
|
167
|
-
.sizeYCompact.withTop
|
|
168
|
-
|
|
167
|
+
:global(.vkuiInternalFormLayoutGroup--mode-horizontal) .sizeYCompact.withTop,
|
|
168
|
+
.sizeYCompact.withTop .removable {
|
|
169
169
|
-webkit-margin-before: calc(-2px - var(--vkui--font_subhead--line_height--compact) - 6px);
|
|
170
170
|
margin-block-start: calc(-2px - var(--vkui--font_subhead--line_height--compact) - 6px);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
@media (pointer: fine) and (min-width: 768px),(max-height: 414.9px) {
|
|
174
174
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
175
|
-
.sizeYNone.withTop
|
|
176
|
-
|
|
175
|
+
:global(.vkuiInternalFormLayoutGroup--mode-horizontal) .sizeYNone.withTop,
|
|
176
|
+
.sizeYNone.withTop .removable {
|
|
177
177
|
-webkit-margin-before: calc(-2px - var(--vkui--font_subhead--line_height--compact) - 6px);
|
|
178
178
|
margin-block-start: calc(-2px - var(--vkui--font_subhead--line_height--compact) - 6px);
|
|
179
179
|
}
|
|
@@ -319,6 +319,7 @@
|
|
|
319
319
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
320
320
|
|
|
321
321
|
:global(.vkuiInternalPanelHeader--vkcom) ~ .host:first-of-type,
|
|
322
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
322
323
|
:global(.vkuiInternalPanelHeader--vkcom) + * .host:first-of-type {
|
|
323
324
|
position: relative;
|
|
324
325
|
inset-block-start: -1px;
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
* TODO: Переделать отрицательные отступы https://github.com/VKCOM/VKUI/issues/3508
|
|
208
208
|
*/
|
|
209
209
|
|
|
210
|
-
/* stylelint-disable
|
|
210
|
+
/* stylelint-disable selector-pseudo-class-disallowed-list */
|
|
211
211
|
|
|
212
212
|
:global(.vkuiInternalGroup--mode-plain):not(:first-of-type) > .host:first-child,
|
|
213
213
|
:global(.vkuiInternalGroup--mode-plain):not(:first-of-type)
|
|
@@ -217,8 +217,10 @@
|
|
|
217
217
|
margin-block-start: -16px;
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
+
/* stylelint-enable selector-pseudo-class-disallowed-list */
|
|
221
|
+
|
|
220
222
|
@media (max-width: 767.9px) {
|
|
221
|
-
/* stylelint-disable
|
|
223
|
+
/* stylelint-disable selector-pseudo-class-disallowed-list */
|
|
222
224
|
:global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none):not(:first-of-type)
|
|
223
225
|
> .host:first-child,
|
|
224
226
|
:global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none):not(:first-of-type)
|
|
@@ -227,9 +229,10 @@
|
|
|
227
229
|
-webkit-margin-before: -16px;
|
|
228
230
|
margin-block-start: -16px;
|
|
229
231
|
}
|
|
232
|
+
/* stylelint-enable selector-pseudo-class-disallowed-list */
|
|
230
233
|
}
|
|
231
234
|
|
|
232
|
-
/* stylelint-disable
|
|
235
|
+
/* stylelint-disable selector-pseudo-class-disallowed-list */
|
|
233
236
|
|
|
234
237
|
:global(.vkuiInternalGroup--mode-card) > .host:not(.sizeM):first-child,
|
|
235
238
|
:global(.vkuiInternalGroup--mode-card)
|
|
@@ -239,8 +242,10 @@
|
|
|
239
242
|
margin-block-start: calc(-1 * var(--vkui--spacing_size_xs));
|
|
240
243
|
}
|
|
241
244
|
|
|
245
|
+
/* stylelint-enable selector-pseudo-class-disallowed-list */
|
|
246
|
+
|
|
242
247
|
@media (min-width: 768px) {
|
|
243
|
-
/* stylelint-disable
|
|
248
|
+
/* stylelint-disable selector-pseudo-class-disallowed-list */
|
|
244
249
|
:global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none)
|
|
245
250
|
> .host:not(.sizeM):first-child,
|
|
246
251
|
:global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none)
|
|
@@ -249,6 +254,7 @@
|
|
|
249
254
|
-webkit-margin-before: calc(-1 * var(--vkui--spacing_size_xs));
|
|
250
255
|
margin-block-start: calc(-1 * var(--vkui--spacing_size_xs));
|
|
251
256
|
}
|
|
257
|
+
/* stylelint-enable selector-pseudo-class-disallowed-list */
|
|
252
258
|
}
|
|
253
259
|
|
|
254
260
|
/**
|
|
@@ -20,20 +20,11 @@ const textAlignClassNames = {
|
|
|
20
20
|
center: styles.textAlignCenter,
|
|
21
21
|
end: styles.textAlignEnd
|
|
22
22
|
};
|
|
23
|
-
const CellTypography = ({ size, children, ...restProps })=>{
|
|
24
|
-
return size === 's' ? /*#__PURE__*/ _jsx(Caption, {
|
|
25
|
-
...restProps,
|
|
26
|
-
children: children
|
|
27
|
-
}) : /*#__PURE__*/ _jsx(Subhead, {
|
|
28
|
-
...restProps,
|
|
29
|
-
children: children
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
23
|
/**
|
|
33
24
|
* @see https://vkcom.github.io/VKUI/#/HorizontalCell
|
|
34
25
|
*/ export const HorizontalCell = ({ className, title, style, subtitle, size = 's', children = /*#__PURE__*/ _jsx(Avatar, {
|
|
35
26
|
size: 56
|
|
36
|
-
}), getRootRef, getRef, extraSubtitle, textAlign = size === 's' ? 'center' : 'start', noPadding = false, ...restProps })=>{
|
|
27
|
+
}), getRootRef, getRef, extraSubtitle, textAlign = size === 's' ? 'center' : 'start', noPadding = false, TitleComponent = size === 's' ? Caption : Subhead, ...restProps })=>{
|
|
37
28
|
const hasTypography = hasReactNode(title) || hasReactNode(subtitle) || hasReactNode(extraSubtitle);
|
|
38
29
|
const customProperties = typeof size === 'number' ? {
|
|
39
30
|
[CUSTOM_CSS_TOKEN_FOR_CELL_WIDTH]: `${size}px`
|
|
@@ -54,8 +45,7 @@ const CellTypography = ({ size, children, ...restProps })=>{
|
|
|
54
45
|
hasTypography && /*#__PURE__*/ _jsxs("div", {
|
|
55
46
|
className: classNames(styles.content, textAlign !== 'start' && textAlignClassNames[textAlign]),
|
|
56
47
|
children: [
|
|
57
|
-
hasReactNode(title) && /*#__PURE__*/ _jsx(
|
|
58
|
-
size: size,
|
|
48
|
+
hasReactNode(title) && /*#__PURE__*/ _jsx(TitleComponent, {
|
|
59
49
|
children: title
|
|
60
50
|
}),
|
|
61
51
|
hasReactNode(subtitle) && /*#__PURE__*/ _jsx(Footnote, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/HorizontalCell/HorizontalCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport type {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/HorizontalCell/HorizontalCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport type { CSSCustomProperties, HasRef, HasRootRef, LiteralUnion } from '../../types';\nimport { Avatar } from '../Avatar/Avatar';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport styles from './HorizontalCell.module.css';\n\nexport const CUSTOM_CSS_TOKEN_FOR_CELL_WIDTH = '--vkui_internal--cell_width';\n\nconst stylesSize = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n xl: styles.sizeXL,\n auto: styles.sizeAuto,\n};\n\nconst textAlignClassNames = {\n center: styles.textAlignCenter,\n end: styles.textAlignEnd,\n};\n\ntype HorizontalCellSizes = 's' | 'm' | 'l' | 'xl' | 'auto';\n\nexport interface HorizontalCellProps\n extends Omit<TappableProps, 'size' | 'getRootRef' | 'title' | 'borderRadiusMode'>,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Ширина компонента\n *\n * Значения `'s' | 'm' | 'l' | 'xl'` определяются дизайн-системой.\n * Значение `auto` позволяет задать динамическую ширину, определяемую контентом.\n * Пользовательскую ширину можно задать через числовое значение.\n */\n size?: LiteralUnion<HorizontalCellSizes, number>;\n /**\n * Заголовок\n */\n title?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children` и `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Задает выравнивание типографики. По умолчанию `center` для `size=s`, иначе `start`\n */\n textAlign?: 'start' | 'center' | 'end';\n /**\n * Отключает формирование отступов у крайних элементов\n *\n * Актуально для использования в многострочных списках\n */\n noPadding?: boolean;\n /**\n * Позволяет передать типографический компонент, используемый для `title`.\n * По умолчанию `Caption` для `size=s`, иначе `Subhead`.\n */\n TitleComponent?: React.ElementType;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalCell\n */\nexport const HorizontalCell = ({\n className,\n title,\n style,\n subtitle,\n size = 's',\n children = <Avatar size={56} />,\n getRootRef,\n getRef,\n extraSubtitle,\n textAlign = size === 's' ? 'center' : 'start',\n noPadding = false,\n TitleComponent = size === 's' ? Caption : Subhead,\n ...restProps\n}: HorizontalCellProps): React.ReactNode => {\n const hasTypography =\n hasReactNode(title) || hasReactNode(subtitle) || hasReactNode(extraSubtitle);\n\n const customProperties: CSSCustomProperties | undefined =\n typeof size === 'number' ? { [CUSTOM_CSS_TOKEN_FOR_CELL_WIDTH]: `${size}px` } : undefined;\n\n return (\n <div\n ref={getRootRef}\n style={mergeStyle(customProperties, style)}\n className={classNames(\n styles.host,\n typeof size === 'string' && stylesSize[size],\n size !== 'auto' && styles.sized,\n typeof size === 'number' && styles.customSize,\n noPadding && styles.noPadding,\n className,\n )}\n >\n <Tappable className={styles.body} getRootRef={getRef} {...restProps}>\n {hasReactNode(children) && <div className={styles.image}>{children}</div>}\n {hasTypography && (\n <div\n className={classNames(\n styles.content,\n textAlign !== 'start' && textAlignClassNames[textAlign],\n )}\n >\n {hasReactNode(title) && <TitleComponent>{title}</TitleComponent>}\n {hasReactNode(subtitle) && <Footnote className={styles.subtitle}>{subtitle}</Footnote>}\n {hasReactNode(extraSubtitle) && (\n <Footnote className={styles.subtitle}>{extraSubtitle}</Footnote>\n )}\n </div>\n )}\n </Tappable>\n </div>\n );\n};\n"],"names":["React","classNames","hasReactNode","mergeStyle","Avatar","Tappable","Caption","Footnote","Subhead","styles","CUSTOM_CSS_TOKEN_FOR_CELL_WIDTH","stylesSize","s","sizeS","m","sizeM","l","sizeL","xl","sizeXL","auto","sizeAuto","textAlignClassNames","center","textAlignCenter","end","textAlignEnd","HorizontalCell","className","title","style","subtitle","size","children","getRootRef","getRef","extraSubtitle","textAlign","noPadding","TitleComponent","restProps","hasTypography","customProperties","undefined","div","ref","host","sized","customSize","body","image","content"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,UAAU,QAAQ,8BAA2B;AAEtD,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,SAASC,QAAQ,QAA4B,0BAAuB;AACpE,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,OAAO,QAAQ,mCAAgC;AACxD,OAAOC,YAAY,8BAA8B;AAEjD,OAAO,MAAMC,kCAAkC,8BAA8B;AAE7E,MAAMC,aAAa;IACjBC,GAAGH,OAAOI,KAAK;IACfC,GAAGL,OAAOM,KAAK;IACfC,GAAGP,OAAOQ,KAAK;IACfC,IAAIT,OAAOU,MAAM;IACjBC,MAAMX,OAAOY,QAAQ;AACvB;AAEA,MAAMC,sBAAsB;IAC1BC,QAAQd,OAAOe,eAAe;IAC9BC,KAAKhB,OAAOiB,YAAY;AAC1B;AA6CA;;CAEC,GACD,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,SAAS,EACTC,KAAK,EACLC,KAAK,EACLC,QAAQ,EACRC,OAAO,GAAG,EACVC,yBAAW,KAAC7B;IAAO4B,MAAM;EAAM,EAC/BE,UAAU,EACVC,MAAM,EACNC,aAAa,EACbC,YAAYL,SAAS,MAAM,WAAW,OAAO,EAC7CM,YAAY,KAAK,EACjBC,iBAAiBP,SAAS,MAAM1B,UAAUE,OAAO,EACjD,GAAGgC,WACiB;IACpB,MAAMC,gBACJvC,aAAa2B,UAAU3B,aAAa6B,aAAa7B,aAAakC;IAEhE,MAAMM,mBACJ,OAAOV,SAAS,WAAW;QAAE,CAACtB,gCAAgC,EAAE,GAAGsB,KAAK,EAAE,CAAC;IAAC,IAAIW;IAElF,qBACE,KAACC;QACCC,KAAKX;QACLJ,OAAO3B,WAAWuC,kBAAkBZ;QACpCF,WAAW3B,WACTQ,OAAOqC,IAAI,EACX,OAAOd,SAAS,YAAYrB,UAAU,CAACqB,KAAK,EAC5CA,SAAS,UAAUvB,OAAOsC,KAAK,EAC/B,OAAOf,SAAS,YAAYvB,OAAOuC,UAAU,EAC7CV,aAAa7B,OAAO6B,SAAS,EAC7BV;kBAGF,cAAA,MAACvB;YAASuB,WAAWnB,OAAOwC,IAAI;YAAEf,YAAYC;YAAS,GAAGK,SAAS;;gBAChEtC,aAAa+B,2BAAa,KAACW;oBAAIhB,WAAWnB,OAAOyC,KAAK;8BAAGjB;;gBACzDQ,+BACC,MAACG;oBACChB,WAAW3B,WACTQ,OAAO0C,OAAO,EACdd,cAAc,WAAWf,mBAAmB,CAACe,UAAU;;wBAGxDnC,aAAa2B,wBAAU,KAACU;sCAAgBV;;wBACxC3B,aAAa6B,2BAAa,KAACxB;4BAASqB,WAAWnB,OAAOsB,QAAQ;sCAAGA;;wBACjE7B,aAAakC,gCACZ,KAAC7B;4BAASqB,WAAWnB,OAAOsB,QAAQ;sCAAGK;;;;;;;AAOrD,EAAE"}
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
70
70
|
|
|
71
71
|
:global(.vkuiInternalTabs--withGaps) .inWrapper::after,
|
|
72
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
72
73
|
:global(.vkuiInternalTabs--withGaps) .inWrapper::before {
|
|
73
74
|
display: block;
|
|
74
75
|
inline-size: var(--vkui--size_base_padding_horizontal--regular);
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
51
51
|
|
|
52
52
|
.sizeYCompact :global(.vkuiIcon--16),
|
|
53
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
53
54
|
.sizeYCompact :global(.vkuiIcon--16.vkuiIcon--w-8) {
|
|
54
55
|
padding: 14px;
|
|
55
56
|
}
|
|
@@ -85,6 +86,7 @@
|
|
|
85
86
|
|
|
86
87
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
87
88
|
.sizeYNone :global(.vkuiIcon--16),
|
|
89
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
88
90
|
.sizeYNone :global(.vkuiIcon--16.vkuiIcon--w-8) {
|
|
89
91
|
padding: 14px;
|
|
90
92
|
}
|
|
@@ -110,7 +112,9 @@
|
|
|
110
112
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
111
113
|
|
|
112
114
|
:global(.vkuiInternalFormItem--removable) :global(.vkuiInternalRemovable__content) > .host,
|
|
115
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
113
116
|
:global(.vkuiInternalFormLayoutGroup--removable) :global(.vkuiInternalRemovable__content) > .host,
|
|
117
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
114
118
|
:global(.vkuiInternalFormField__after) .host {
|
|
115
119
|
display: flex;
|
|
116
120
|
align-items: center;
|
|
@@ -121,7 +125,7 @@
|
|
|
121
125
|
border-radius: var(--vkui--size_border_radius--regular);
|
|
122
126
|
}
|
|
123
127
|
|
|
124
|
-
/* stylelint-disable
|
|
128
|
+
/* stylelint-disable selector-pseudo-class-disallowed-list */
|
|
125
129
|
|
|
126
130
|
:global(.vkuiInternalFormField__after)
|
|
127
131
|
.host
|
|
@@ -129,6 +133,8 @@
|
|
|
129
133
|
padding: 0;
|
|
130
134
|
}
|
|
131
135
|
|
|
136
|
+
/* stylelint-enable selector-pseudo-class-disallowed-list */
|
|
137
|
+
|
|
132
138
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
133
139
|
|
|
134
140
|
:global(.vkuiInternalFormField__after) .sizeYCompact {
|
|
@@ -136,7 +142,7 @@
|
|
|
136
142
|
block-size: var(--vkui--size_field_height--compact);
|
|
137
143
|
}
|
|
138
144
|
|
|
139
|
-
/* stylelint-disable
|
|
145
|
+
/* stylelint-disable selector-pseudo-class-disallowed-list */
|
|
140
146
|
|
|
141
147
|
:global(.vkuiInternalFormItem--removable) :global(.vkuiInternalRemovable__content) > .sizeYCompact,
|
|
142
148
|
:global(.vkuiInternalFormLayoutGroup--removable)
|
|
@@ -145,6 +151,8 @@
|
|
|
145
151
|
block-size: var(--vkui--size_field_height--compact);
|
|
146
152
|
}
|
|
147
153
|
|
|
154
|
+
/* stylelint-enable selector-pseudo-class-disallowed-list */
|
|
155
|
+
|
|
148
156
|
@media (pointer: fine) and (min-width: 768px),(max-height: 414.9px) {
|
|
149
157
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
150
158
|
:global(.vkuiInternalFormField__after) .sizeYNone {
|
|
@@ -152,13 +160,14 @@
|
|
|
152
160
|
block-size: var(--vkui--size_field_height--compact);
|
|
153
161
|
}
|
|
154
162
|
|
|
155
|
-
/* stylelint-disable
|
|
163
|
+
/* stylelint-disable selector-pseudo-class-disallowed-list */
|
|
156
164
|
:global(.vkuiInternalFormItem--removable) :global(.vkuiInternalRemovable__content) > .sizeYNone,
|
|
157
165
|
:global(.vkuiInternalFormLayoutGroup--removable)
|
|
158
166
|
:global(.vkuiInternalRemovable__content)
|
|
159
167
|
> .sizeYNone {
|
|
160
168
|
block-size: var(--vkui--size_field_height--compact);
|
|
161
169
|
}
|
|
170
|
+
/* stylelint-enable selector-pseudo-class-disallowed-list */
|
|
162
171
|
}
|
|
163
172
|
|
|
164
173
|
/**
|
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
81
81
|
|
|
82
82
|
.modeAdd .middle :global(.vkuiIcon),
|
|
83
|
+
/* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
|
|
83
84
|
.modeMore .middle :global(.vkuiIcon) {
|
|
84
85
|
color: var(--vkui--color_icon_accent_themed);
|
|
85
86
|
}
|
|
@@ -54,7 +54,7 @@ const transitionStateClassNames = {
|
|
|
54
54
|
const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);
|
|
55
55
|
const [{ setSheetEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(bottomSheetEnabled, {
|
|
56
56
|
blocked: keyboardOpened,
|
|
57
|
-
|
|
57
|
+
snapPoint: 'auto',
|
|
58
58
|
sheetCSSProperty: '--vkui_internal_ModalCard--translateY',
|
|
59
59
|
backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',
|
|
60
60
|
onDismiss () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalCard/ModalCardInternal.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentType, type KeyboardEvent, type ReactNode, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { useBottomSheet } from '../../lib/sheet';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { ModalCardBase } from '../ModalCardBase/ModalCardBase';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport type { ModalCardProps } from './types';\nimport styles from './ModalCard.module.css';\n\nconst sizeByPlatformClassNames = {\n vkcom: styles['hostMaxWidthS'],\n ios: styles['hostMaxWidthM'],\n android: styles['hostMaxWidthL'],\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalCardInternalProps extends Omit<ModalCardProps, 'nav' | 'keepMounted'> {\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalCardInternal = ({\n icon,\n title,\n titleComponent,\n description,\n descriptionComponent,\n children,\n actions,\n size,\n open,\n style: styleProp,\n className,\n preventClose,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalDismissButtonTestId,\n getRootRef,\n dismissButtonMode,\n dismissLabel,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n ...restProps\n}: ModalCardInternalProps): ReactNode => {\n const platform = usePlatform();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: true,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n const [{ setSheetEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(\n bottomSheetEnabled,\n {\n blocked: keyboardOpened,\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalCard/ModalCardInternal.tsx"],"sourcesContent":["'use client';\n\nimport { type ComponentType, type KeyboardEvent, type ReactNode, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { useBottomSheet } from '../../lib/sheet';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { ModalCardBase } from '../ModalCardBase/ModalCardBase';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport type { ModalCardProps } from './types';\nimport styles from './ModalCard.module.css';\n\nconst sizeByPlatformClassNames = {\n vkcom: styles['hostMaxWidthS'],\n ios: styles['hostMaxWidthM'],\n android: styles['hostMaxWidthL'],\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalCardInternalProps extends Omit<ModalCardProps, 'nav' | 'keepMounted'> {\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalCardInternal = ({\n icon,\n title,\n titleComponent,\n description,\n descriptionComponent,\n children,\n actions,\n size,\n open,\n style: styleProp,\n className,\n preventClose,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalDismissButtonTestId,\n getRootRef,\n dismissButtonMode,\n dismissLabel,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n ...restProps\n}: ModalCardInternalProps): ReactNode => {\n const platform = usePlatform();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: true,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n const [{ setSheetEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(\n bottomSheetEnabled,\n {\n blocked: keyboardOpened,\n snapPoint: 'auto',\n sheetCSSProperty: '--vkui_internal_ModalCard--translateY',\n backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',\n onDismiss() {\n onClose?.('swipe-down');\n },\n },\n );\n const handleRef = useExternRef<HTMLDivElement>(setSheetEl, ref, getRootRef);\n const style = keyboardOpened\n ? {\n ...styleProp,\n '--vkui_internal_ModalCard--safeAreaInsetBottom': '0px',\n }\n : styleProp;\n const modalOverlay = (\n <ModalOverlay\n getRootRef={setBackdropEl}\n data-testid={modalOverlayTestId}\n visible={open}\n onClick={\n closable\n ? function handleBackdropClick(event) {\n onClose('click-overlay', event);\n }\n : undefined\n }\n />\n );\n const handleEscKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (closable && pressedKey(event) === Keys.ESCAPE) {\n onClose('escape-key');\n }\n },\n [closable, onClose],\n );\n\n useScrollLock(!hidden);\n useFocusTrap(ref, { autoFocus: !noFocusToDialog, disabled: !opened || hidden });\n\n return (\n <ModalOutlet hidden={hidden} onKeyDown={handleEscKeyDown}>\n {modalOverlay}\n <ModalCardBase\n {...restProps}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n getRootRef={handleRef}\n style={style}\n className={classNames(\n styles.host,\n sizeByPlatformClassNames[platform],\n transitionStateClassNames[transitionState],\n className,\n )}\n onTransitionEnd={onTransitionEnd}\n {...bottomSheetEventHandlers}\n icon={icon}\n title={title}\n titleComponent={titleComponent}\n description={description}\n descriptionComponent={descriptionComponent}\n actions={actions}\n onClose={() => onClose('click-close-button')}\n size={size}\n modalDismissButtonTestId={modalDismissButtonTestId}\n dismissButtonMode={dismissButtonMode}\n dismissLabel={dismissLabel}\n >\n {children}\n </ModalCardBase>\n </ModalOutlet>\n );\n};\n"],"names":["useCallback","classNames","noop","useAdaptivityWithJSMediaQueries","useExternRef","useFocusTrap","usePlatform","useVirtualKeyboardState","Keys","pressedKey","useCSSTransition","useBottomSheet","useScrollLock","ModalCardBase","ModalOutlet","ModalOverlay","ModalOverlayDefault","styles","sizeByPlatformClassNames","vkcom","ios","android","transitionStateClassNames","appear","appearing","enter","entering","exiting","exited","ModalCardInternal","icon","title","titleComponent","description","descriptionComponent","children","actions","size","open","style","styleProp","className","preventClose","modalOverlayTestId","modalDismissButtonTestId","getRootRef","dismissButtonMode","dismissLabel","noFocusToDialog","onOpen","onOpened","onClose","onClosed","restProps","platform","transitionState","ref","onTransitionEnd","enableAppear","onEnter","onEntered","onExited","opened","hidden","closable","isDesktop","bottomSheetEnabled","keyboardOpened","setSheetEl","setBackdropEl","bottomSheetEventHandlers","blocked","snapPoint","sheetCSSProperty","backdropCSSProperty","onDismiss","handleRef","modalOverlay","data-testid","visible","onClick","handleBackdropClick","event","undefined","handleEscKeyDown","ESCAPE","autoFocus","disabled","onKeyDown","tabIndex","role","aria-modal","host"],"mappings":"AAAA;;AAEA,SAAiEA,WAAW,QAAQ,QAAQ;AAC5F,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,+BAA+B,QAAQ,iDAA8C;AAC9F,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,uBAAuB,QAAQ,yCAAsC;AAC9E,SAASC,IAAI,EAAEC,UAAU,QAAQ,6BAA0B;AAC3D,SAASC,gBAAgB,QAAoC,+BAAsB;AACnF,SAASC,cAAc,QAAQ,2BAAkB;AACjD,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,WAAW,QAAQ,gCAA6B;AACzD,SACEC,gBAAgBC,mBAAmB,QAE9B,kCAA+B;AAEtC,OAAOC,YAAY,yBAAyB;AAE5C,MAAMC,2BAA2B;IAC/BC,OAAOF,MAAM,CAAC,gBAAgB;IAC9BG,KAAKH,MAAM,CAAC,gBAAgB;IAC5BI,SAASJ,MAAM,CAAC,gBAAgB;AAClC;AAEA,MAAMK,4BAA4E;IAChFC,QAAQN,MAAM,CAAC,iBAAiB;IAChCO,WAAWP,MAAM,CAAC,oBAAoB;IAEtCQ,OAAOR,MAAM,CAAC,iBAAiB;IAC/BS,UAAUT,MAAM,CAAC,oBAAoB;IAErCU,SAASV,MAAM,CAAC,mBAAmB;IACnCW,QAAQX,MAAM,CAAC,kBAAkB;AACnC;AAMA;;;;CAIC,GACD,OAAO,MAAMY,oBAAoB,CAAC,EAChCC,IAAI,EACJC,KAAK,EACLC,cAAc,EACdC,WAAW,EACXC,oBAAoB,EACpBC,QAAQ,EACRC,OAAO,EACPC,IAAI,EACJC,IAAI,EACJC,OAAOC,SAAS,EAChBC,SAAS,EACTC,YAAY,EACZ3B,eAAeC,mBAAmB,EAClC2B,kBAAkB,EAClBC,wBAAwB,EACxBC,UAAU,EACVC,iBAAiB,EACjBC,YAAY,EACZC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,UAAUjD,IAAI,EACdkD,QAAQ,EACR,GAAGC,WACoB;IACvB,MAAMC,WAAWhD;IACjB,MAAM,CAACiD,iBAAiB,EAAEC,GAAG,EAAEC,eAAe,EAAE,CAAC,GAAG/C,iBAAiC4B,MAAM;QACzFoB,cAAc;QACdC;YACEV;QACF;QACAW;YACEV;QACF;QACAW;YACET;QACF;IACF;IACA,MAAMU,SAASP,oBAAoB,cAAcA,oBAAoB;IACrE,MAAMQ,SAASR,oBAAoB;IACnC,MAAMS,WAAW,CAACtB,gBAAgBoB;IAElC,MAAM,EAAEG,SAAS,EAAE,GAAG9D;IACtB,MAAM+D,qBAAqB,CAACD,aAAa,CAACvB,gBAAgBa,oBAAoB;IAE9E,MAAM,EAAEO,QAAQK,cAAc,EAAE,GAAG5D,wBAAwB2D;IAC3D,MAAM,CAAC,EAAEE,UAAU,EAAEC,aAAa,EAAE,EAAEC,yBAAyB,GAAG3D,eAChEuD,oBACA;QACEK,SAASJ;QACTK,WAAW;QACXC,kBAAkB;QAClBC,qBAAqB;QACrBC;YACExB,UAAU;QACZ;IACF;IAEF,MAAMyB,YAAYxE,aAA6BgE,YAAYZ,KAAKX;IAChE,MAAMN,QAAQ4B,iBACV;QACE,GAAG3B,SAAS;QACZ,kDAAkD;IACpD,IACAA;IACJ,MAAMqC,6BACJ,KAAC9D;QACC8B,YAAYwB;QACZS,eAAanC;QACboC,SAASzC;QACT0C,SACEhB,WACI,SAASiB,oBAAoBC,KAAK;YAChC/B,QAAQ,iBAAiB+B;QAC3B,IACAC;;IAIV,MAAMC,mBAAmBpF,YACvB,CAACkF;QACC,IAAIlB,YAAYvD,WAAWyE,WAAW1E,KAAK6E,MAAM,EAAE;YACjDlC,QAAQ;QACV;IACF,GACA;QAACa;QAAUb;KAAQ;IAGrBvC,cAAc,CAACmD;IACf1D,aAAamD,KAAK;QAAE8B,WAAW,CAACtC;QAAiBuC,UAAU,CAACzB,UAAUC;IAAO;IAE7E,qBACE,MAACjD;QAAYiD,QAAQA;QAAQyB,WAAWJ;;YACrCP;0BACD,KAAChE;gBACE,GAAGwC,SAAS;gBACboC,UAAU,CAAC;gBACXC,MAAK;gBACLC,cAAW;gBACX9C,YAAY+B;gBACZrC,OAAOA;gBACPE,WAAWxC,WACTgB,OAAO2E,IAAI,EACX1E,wBAAwB,CAACoC,SAAS,EAClChC,yBAAyB,CAACiC,gBAAgB,EAC1Cd;gBAEFgB,iBAAiBA;gBAChB,GAAGa,wBAAwB;gBAC5BxC,MAAMA;gBACNC,OAAOA;gBACPC,gBAAgBA;gBAChBC,aAAaA;gBACbC,sBAAsBA;gBACtBE,SAASA;gBACTe,SAAS,IAAMA,QAAQ;gBACvBd,MAAMA;gBACNO,0BAA0BA;gBAC1BE,mBAAmBA;gBACnBC,cAAcA;0BAEbZ;;;;AAIT,EAAE"}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useId } from "react";
|
|
3
|
+
import { useId, useMemo } from "react";
|
|
4
4
|
import { ModalContext } from "../../context/ModalContext.js";
|
|
5
|
+
import { inRange } from "../../helpers/range.js";
|
|
5
6
|
import { getNavId } from "../../lib/getNavId.js";
|
|
7
|
+
import { SNAP_POINT_DETENTS, SNAP_POINT_SAFE_RANGE } from "../../lib/sheet/index.js";
|
|
6
8
|
import { warnOnce } from "../../lib/warnOnce.js";
|
|
7
9
|
import { useModalManager } from "../ModalRoot/useModalManager.js";
|
|
8
10
|
import { ModalPageInternal } from "./ModalPageInternal.js";
|
|
9
11
|
const warn = warnOnce('ModalPage');
|
|
12
|
+
const snapPointCache = new Map();
|
|
10
13
|
/**
|
|
11
14
|
* @see https://vkcom.github.io/VKUI/#/ModalPage
|
|
12
|
-
*/ export const ModalPage = ({ id: idProp, nav, open = false, modalOverlayTestId, noFocusToDialog, onOpen, onOpened, onClose, onClosed, size = 's', settlingHeight = 50, keepMounted = false, ...restProps })=>{
|
|
15
|
+
*/ export const ModalPage = ({ id: idProp, nav, open = false, modalOverlayTestId, noFocusToDialog, onOpen, onOpened, onClose, onClosed, size = 's', settlingHeight = 50, dynamicContentHeight, keepMounted = false, ...restProps })=>{
|
|
13
16
|
const generatingId = useId();
|
|
14
17
|
const id = getNavId({
|
|
15
18
|
nav,
|
|
16
19
|
id: idProp
|
|
17
20
|
}, warn) || generatingId;
|
|
18
|
-
const { mounted, ...resolvedProps } = useModalManager({
|
|
21
|
+
const { mounted, shouldPreserveSnapPoint, ...resolvedProps } = useModalManager({
|
|
19
22
|
id,
|
|
20
23
|
open,
|
|
21
24
|
keepMounted,
|
|
@@ -26,6 +29,28 @@ const warn = warnOnce('ModalPage');
|
|
|
26
29
|
onClose,
|
|
27
30
|
onClosed
|
|
28
31
|
});
|
|
32
|
+
const snapPoint = useMemo(()=>{
|
|
33
|
+
if (dynamicContentHeight) {
|
|
34
|
+
return 'auto';
|
|
35
|
+
}
|
|
36
|
+
if (shouldPreserveSnapPoint) {
|
|
37
|
+
const snapPointCached = snapPointCache.get(id);
|
|
38
|
+
if (snapPointCached) {
|
|
39
|
+
return snapPointCached;
|
|
40
|
+
}
|
|
41
|
+
const nextSnapPoint = transformSettlingHeightToSnapPoint(settlingHeight);
|
|
42
|
+
snapPointCache.set(id, nextSnapPoint);
|
|
43
|
+
return nextSnapPoint;
|
|
44
|
+
} else {
|
|
45
|
+
snapPointCache.delete(id);
|
|
46
|
+
}
|
|
47
|
+
return transformSettlingHeightToSnapPoint(settlingHeight);
|
|
48
|
+
}, [
|
|
49
|
+
id,
|
|
50
|
+
shouldPreserveSnapPoint,
|
|
51
|
+
dynamicContentHeight,
|
|
52
|
+
settlingHeight
|
|
53
|
+
]);
|
|
29
54
|
if (!mounted) {
|
|
30
55
|
return null;
|
|
31
56
|
}
|
|
@@ -35,11 +60,32 @@ const warn = warnOnce('ModalPage');
|
|
|
35
60
|
id: id,
|
|
36
61
|
size: size,
|
|
37
62
|
"aria-labelledby": `${id}-label`,
|
|
38
|
-
|
|
63
|
+
snapPoint: snapPoint,
|
|
64
|
+
onSnapPointChange: snapPoint !== 'auto' && shouldPreserveSnapPoint ? (snapPoint)=>{
|
|
65
|
+
const snapPointCached = snapPointCache.get(id);
|
|
66
|
+
if (snapPointCached) {
|
|
67
|
+
snapPointCached.initial = snapPoint;
|
|
68
|
+
snapPointCache.set(id, snapPointCached);
|
|
69
|
+
}
|
|
70
|
+
} : undefined,
|
|
39
71
|
...resolvedProps,
|
|
40
72
|
...restProps
|
|
41
73
|
})
|
|
42
74
|
});
|
|
43
75
|
};
|
|
76
|
+
function transformSettlingHeightToSnapPoint(settlingHeight) {
|
|
77
|
+
const currentSnapPoint = Math.min(Math.max(settlingHeight, SNAP_POINT_SAFE_RANGE.LOWER), SNAP_POINT_DETENTS.LARGE);
|
|
78
|
+
return {
|
|
79
|
+
initial: currentSnapPoint,
|
|
80
|
+
detents: inRange(currentSnapPoint, SNAP_POINT_SAFE_RANGE.LOWER, SNAP_POINT_SAFE_RANGE.HIGHEST) ? [
|
|
81
|
+
SNAP_POINT_DETENTS.MIN,
|
|
82
|
+
currentSnapPoint,
|
|
83
|
+
SNAP_POINT_DETENTS.LARGE
|
|
84
|
+
] : [
|
|
85
|
+
SNAP_POINT_DETENTS.MIN,
|
|
86
|
+
currentSnapPoint
|
|
87
|
+
]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
44
90
|
|
|
45
91
|
//# sourceMappingURL=ModalPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalPage/ModalPage.tsx"],"sourcesContent":["'use client';\n\nimport { useId } from 'react';\nimport { ModalContext } from '../../context/ModalContext';\nimport { getNavId } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useModalManager } from '../ModalRoot/useModalManager';\nimport { ModalPageInternal } from './ModalPageInternal';\nimport type { ModalPageProps } from './types';\n\nconst warn = warnOnce('ModalPage');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPage\n */\nexport const ModalPage = ({\n id: idProp,\n nav,\n open = false,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n size = 's',\n settlingHeight = 50,\n keepMounted = false,\n ...restProps\n}: ModalPageProps) => {\n const generatingId = useId();\n const id = getNavId({ nav, id: idProp }, warn) || generatingId;\n\n const { mounted, ...resolvedProps } = useModalManager({\n id,\n open,\n keepMounted,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n });\n\n if (!mounted) {\n return null;\n }\n\n return (\n <ModalContext.Provider value={id}>\n <ModalPageInternal\n id={id}\n size={size}\n aria-labelledby={`${id}-label`}\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalPage/ModalPage.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useMemo } from 'react';\nimport { ModalContext } from '../../context/ModalContext';\nimport { inRange } from '../../helpers/range';\nimport { getNavId } from '../../lib/getNavId';\nimport { SNAP_POINT_DETENTS, SNAP_POINT_SAFE_RANGE, type SnapPoint } from '../../lib/sheet';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useModalManager } from '../ModalRoot/useModalManager';\nimport { ModalPageInternal } from './ModalPageInternal';\nimport type { ModalPageProps } from './types';\n\nconst warn = warnOnce('ModalPage');\n\nconst snapPointCache = new Map<string, Exclude<SnapPoint, 'auto'>>();\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPage\n */\nexport const ModalPage = ({\n id: idProp,\n nav,\n open = false,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n size = 's',\n settlingHeight = 50,\n dynamicContentHeight,\n keepMounted = false,\n ...restProps\n}: ModalPageProps) => {\n const generatingId = useId();\n const id = getNavId({ nav, id: idProp }, warn) || generatingId;\n\n const { mounted, shouldPreserveSnapPoint, ...resolvedProps } = useModalManager({\n id,\n open,\n keepMounted,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n });\n\n const snapPoint = useMemo((): SnapPoint => {\n if (dynamicContentHeight) {\n return 'auto';\n }\n\n if (shouldPreserveSnapPoint) {\n const snapPointCached = snapPointCache.get(id);\n\n if (snapPointCached) {\n return snapPointCached;\n }\n\n const nextSnapPoint = transformSettlingHeightToSnapPoint(settlingHeight);\n snapPointCache.set(id, nextSnapPoint);\n\n return nextSnapPoint;\n } else {\n snapPointCache.delete(id);\n }\n\n return transformSettlingHeightToSnapPoint(settlingHeight);\n }, [id, shouldPreserveSnapPoint, dynamicContentHeight, settlingHeight]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <ModalContext.Provider value={id}>\n <ModalPageInternal\n id={id}\n size={size}\n aria-labelledby={`${id}-label`}\n snapPoint={snapPoint}\n onSnapPointChange={\n snapPoint !== 'auto' && shouldPreserveSnapPoint\n ? (snapPoint) => {\n const snapPointCached = snapPointCache.get(id);\n\n if (snapPointCached) {\n snapPointCached.initial = snapPoint;\n snapPointCache.set(id, snapPointCached);\n }\n }\n : undefined\n }\n {...resolvedProps}\n {...restProps}\n />\n </ModalContext.Provider>\n );\n};\n\nfunction transformSettlingHeightToSnapPoint(settlingHeight: number): Exclude<SnapPoint, 'auto'> {\n const currentSnapPoint = Math.min(\n Math.max(settlingHeight, SNAP_POINT_SAFE_RANGE.LOWER),\n SNAP_POINT_DETENTS.LARGE,\n );\n\n return {\n initial: currentSnapPoint,\n detents: inRange(currentSnapPoint, SNAP_POINT_SAFE_RANGE.LOWER, SNAP_POINT_SAFE_RANGE.HIGHEST)\n ? [SNAP_POINT_DETENTS.MIN, currentSnapPoint, SNAP_POINT_DETENTS.LARGE]\n : [SNAP_POINT_DETENTS.MIN, currentSnapPoint],\n };\n}\n"],"names":["useId","useMemo","ModalContext","inRange","getNavId","SNAP_POINT_DETENTS","SNAP_POINT_SAFE_RANGE","warnOnce","useModalManager","ModalPageInternal","warn","snapPointCache","Map","ModalPage","id","idProp","nav","open","modalOverlayTestId","noFocusToDialog","onOpen","onOpened","onClose","onClosed","size","settlingHeight","dynamicContentHeight","keepMounted","restProps","generatingId","mounted","shouldPreserveSnapPoint","resolvedProps","snapPoint","snapPointCached","get","nextSnapPoint","transformSettlingHeightToSnapPoint","set","delete","Provider","value","aria-labelledby","onSnapPointChange","initial","undefined","currentSnapPoint","Math","min","max","LOWER","LARGE","detents","HIGHEST","MIN"],"mappings":"AAAA;;AAEA,SAASA,KAAK,EAAEC,OAAO,QAAQ,QAAQ;AACvC,SAASC,YAAY,QAAQ,gCAA6B;AAC1D,SAASC,OAAO,QAAQ,yBAAsB;AAC9C,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,kBAAkB,EAAEC,qBAAqB,QAAwB,2BAAkB;AAC5F,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,iBAAiB,QAAQ,yBAAsB;AAGxD,MAAMC,OAAOH,SAAS;AAEtB,MAAMI,iBAAiB,IAAIC;AAE3B;;CAEC,GACD,OAAO,MAAMC,YAAY,CAAC,EACxBC,IAAIC,MAAM,EACVC,GAAG,EACHC,OAAO,KAAK,EACZC,kBAAkB,EAClBC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,OAAO,GAAG,EACVC,iBAAiB,EAAE,EACnBC,oBAAoB,EACpBC,cAAc,KAAK,EACnB,GAAGC,WACY;IACf,MAAMC,eAAe7B;IACrB,MAAMc,KAAKV,SAAS;QAAEY;QAAKF,IAAIC;IAAO,GAAGL,SAASmB;IAElD,MAAM,EAAEC,OAAO,EAAEC,uBAAuB,EAAE,GAAGC,eAAe,GAAGxB,gBAAgB;QAC7EM;QACAG;QACAU;QACAT;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,MAAMU,YAAYhC,QAAQ;QACxB,IAAIyB,sBAAsB;YACxB,OAAO;QACT;QAEA,IAAIK,yBAAyB;YAC3B,MAAMG,kBAAkBvB,eAAewB,GAAG,CAACrB;YAE3C,IAAIoB,iBAAiB;gBACnB,OAAOA;YACT;YAEA,MAAME,gBAAgBC,mCAAmCZ;YACzDd,eAAe2B,GAAG,CAACxB,IAAIsB;YAEvB,OAAOA;QACT,OAAO;YACLzB,eAAe4B,MAAM,CAACzB;QACxB;QAEA,OAAOuB,mCAAmCZ;IAC5C,GAAG;QAACX;QAAIiB;QAAyBL;QAAsBD;KAAe;IAEtE,IAAI,CAACK,SAAS;QACZ,OAAO;IACT;IAEA,qBACE,KAAC5B,aAAasC,QAAQ;QAACC,OAAO3B;kBAC5B,cAAA,KAACL;YACCK,IAAIA;YACJU,MAAMA;YACNkB,mBAAiB,GAAG5B,GAAG,MAAM,CAAC;YAC9BmB,WAAWA;YACXU,mBACEV,cAAc,UAAUF,0BACpB,CAACE;gBACC,MAAMC,kBAAkBvB,eAAewB,GAAG,CAACrB;gBAE3C,IAAIoB,iBAAiB;oBACnBA,gBAAgBU,OAAO,GAAGX;oBAC1BtB,eAAe2B,GAAG,CAACxB,IAAIoB;gBACzB;YACF,IACAW;YAEL,GAAGb,aAAa;YAChB,GAAGJ,SAAS;;;AAIrB,EAAE;AAEF,SAASS,mCAAmCZ,cAAsB;IAChE,MAAMqB,mBAAmBC,KAAKC,GAAG,CAC/BD,KAAKE,GAAG,CAACxB,gBAAgBnB,sBAAsB4C,KAAK,GACpD7C,mBAAmB8C,KAAK;IAG1B,OAAO;QACLP,SAASE;QACTM,SAASjD,QAAQ2C,kBAAkBxC,sBAAsB4C,KAAK,EAAE5C,sBAAsB+C,OAAO,IACzF;YAAChD,mBAAmBiD,GAAG;YAAER;YAAkBzC,mBAAmB8C,KAAK;SAAC,GACpE;YAAC9C,mBAAmBiD,GAAG;YAAER;SAAiB;IAChD;AACF"}
|
|
@@ -28,7 +28,7 @@ const transitionStateClassNames = {
|
|
|
28
28
|
* В компоненте заложена вся логика модального окна.
|
|
29
29
|
*
|
|
30
30
|
* @private
|
|
31
|
-
*/ export const ModalPageInternal = ({ open, header, footer, size: desktopMaxWidth, height, children, className, style,
|
|
31
|
+
*/ export const ModalPageInternal = ({ open, header, footer, size: desktopMaxWidth, height, children, className, style, snapPoint, onSnapPointChange, getModalContentRef, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, onOpen, onOpened, onClose = noop, onClosed, ...restProps })=>{
|
|
32
32
|
const { hasCustomPanelHeaderAfter } = useConfigProvider();
|
|
33
33
|
const [transitionState, { ref, onTransitionEnd }] = useCSSTransition(open, {
|
|
34
34
|
enableAppear: true,
|
|
@@ -50,9 +50,10 @@ const transitionStateClassNames = {
|
|
|
50
50
|
const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);
|
|
51
51
|
const [{ initialStyle, setSheetEl, setSheetScrollEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(bottomSheetEnabled, {
|
|
52
52
|
blocked: keyboardOpened,
|
|
53
|
-
|
|
53
|
+
snapPoint,
|
|
54
54
|
sheetCSSProperty: '--vkui_internal_ModalPageDocument--snapPoint',
|
|
55
55
|
backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',
|
|
56
|
+
onSnapPointChange,
|
|
56
57
|
onDismiss () {
|
|
57
58
|
onClose('swipe-down');
|
|
58
59
|
}
|