@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.
Files changed (209) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  2. package/dist/components/ActionSheet/ActionSheet.js +1 -3
  3. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/components/AppRoot/AppRoot.d.ts +1 -1
  5. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  6. package/dist/components/AppRoot/AppRoot.js +16 -10
  7. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  8. package/dist/components/AppRoot/AppRootPortal.js +1 -1
  9. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  10. package/dist/components/AppRoot/{AppRootStyleContainer.d.ts → AppRootStyleContainer/AppRootStyleContainer.d.ts} +3 -3
  11. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.d.ts.map +1 -0
  12. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js +45 -0
  13. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
  14. package/dist/components/AppRoot/helpers.d.ts +7 -0
  15. package/dist/components/AppRoot/helpers.d.ts.map +1 -1
  16. package/dist/components/AppRoot/helpers.js +20 -4
  17. package/dist/components/AppRoot/helpers.js.map +1 -1
  18. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  19. package/dist/components/Clickable/Clickable.js +2 -83
  20. package/dist/components/Clickable/Clickable.js.map +1 -1
  21. package/dist/components/Clickable/RealClickable.d.ts +6 -0
  22. package/dist/components/Clickable/RealClickable.d.ts.map +1 -0
  23. package/dist/components/Clickable/RealClickable.js +90 -0
  24. package/dist/components/Clickable/RealClickable.js.map +1 -0
  25. package/dist/components/HorizontalCell/HorizontalCell.d.ts +6 -1
  26. package/dist/components/HorizontalCell/HorizontalCell.d.ts.map +1 -1
  27. package/dist/components/HorizontalCell/HorizontalCell.js +4 -15
  28. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  29. package/dist/components/ModalCard/ModalCardInternal.js +1 -1
  30. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  31. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  32. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  33. package/dist/components/ModalPage/ModalPage.js +53 -5
  34. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  35. package/dist/components/ModalPage/ModalPageInternal.d.ts +5 -2
  36. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  37. package/dist/components/ModalPage/ModalPageInternal.js +5 -4
  38. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  39. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  40. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  41. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  42. package/dist/components/ModalRoot/types.js.map +1 -1
  43. package/dist/components/ModalRoot/useModalManager.d.ts +2 -0
  44. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  45. package/dist/components/ModalRoot/useModalManager.js +4 -1
  46. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  47. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  48. package/dist/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
  49. package/dist/components/PopoutWrapper/PopoutWrapper.js +2 -2
  50. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  51. package/dist/components/Spinner/Spinner.d.ts.map +1 -1
  52. package/dist/components/Spinner/Spinner.js +11 -43
  53. package/dist/components/Spinner/Spinner.js.map +1 -1
  54. package/dist/components/Spinner/SpinnerAnimation.d.ts +7 -0
  55. package/dist/components/Spinner/SpinnerAnimation.d.ts.map +1 -0
  56. package/dist/components/Spinner/SpinnerAnimation.js +36 -0
  57. package/dist/components/Spinner/SpinnerAnimation.js.map +1 -0
  58. package/dist/components/SplitLayout/SplitLayout.d.ts +4 -4
  59. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  60. package/dist/components.css +1 -1
  61. package/dist/components.css.map +1 -1
  62. package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -3
  63. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  64. package/dist/cssm/components/AppRoot/AppRoot.js +14 -9
  65. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  66. package/dist/cssm/components/AppRoot/AppRoot.module.css +17 -0
  67. package/dist/cssm/components/AppRoot/AppRootPortal.js +1 -1
  68. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  69. package/dist/cssm/components/AppRoot/{AppRootStyleContainer.js → AppRootStyleContainer/AppRootStyleContainer.js} +12 -23
  70. package/dist/cssm/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
  71. package/dist/cssm/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -31
  72. package/dist/cssm/components/AppRoot/helpers.js +17 -1
  73. package/dist/cssm/components/AppRoot/helpers.js.map +1 -1
  74. package/dist/cssm/components/Button/Button.module.css +6 -6
  75. package/dist/cssm/components/Card/Card.module.css +12 -6
  76. package/dist/cssm/components/Clickable/Clickable.js +2 -55
  77. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  78. package/dist/cssm/components/Clickable/RealClickable.js +61 -0
  79. package/dist/cssm/components/Clickable/RealClickable.js.map +1 -0
  80. package/dist/cssm/components/FormField/FormField.module.css +2 -0
  81. package/dist/cssm/components/FormItem/FormItem.module.css +6 -6
  82. package/dist/cssm/components/Group/Group.module.css +1 -0
  83. package/dist/cssm/components/Header/Header.module.css +10 -4
  84. package/dist/cssm/components/HorizontalCell/HorizontalCell.js +2 -12
  85. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  86. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
  87. package/dist/cssm/components/IconButton/IconButton.module.css +12 -3
  88. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  89. package/dist/cssm/components/ModalCard/ModalCardInternal.js +1 -1
  90. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  91. package/dist/cssm/components/ModalPage/ModalPage.js +50 -4
  92. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  93. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  94. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  95. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
  96. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  97. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  98. package/dist/cssm/components/ModalRoot/useModalManager.js +4 -1
  99. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  100. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +10 -4
  101. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  102. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
  103. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +2 -3
  104. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  105. package/dist/cssm/components/Removable/Removable.module.css +7 -2
  106. package/dist/cssm/components/Spinner/Spinner.js +11 -43
  107. package/dist/cssm/components/Spinner/Spinner.js.map +1 -1
  108. package/dist/cssm/components/Spinner/SpinnerAnimation.js +36 -0
  109. package/dist/cssm/components/Spinner/SpinnerAnimation.js.map +1 -0
  110. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  111. package/dist/cssm/components/View/View.module.css +2 -2
  112. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
  113. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  114. package/dist/cssm/index.js.map +1 -1
  115. package/dist/cssm/lib/adaptivity/functions.js +1 -7
  116. package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
  117. package/dist/cssm/lib/animation/useReducedMotion.js +4 -7
  118. package/dist/cssm/lib/animation/useReducedMotion.js.map +1 -1
  119. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +22 -37
  120. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  121. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js +1 -9
  122. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  123. package/dist/cssm/lib/sheet/index.js +1 -1
  124. package/dist/cssm/lib/sheet/index.js.map +1 -1
  125. package/dist/cssm/lib/sheet/useBottomSheet.js +12 -15
  126. package/dist/cssm/lib/sheet/useBottomSheet.js.map +1 -1
  127. package/dist/cssm/styles/common.css +10 -4
  128. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +3 -2
  129. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
  130. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
  131. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js.map +1 -1
  135. package/dist/lib/adaptivity/functions.d.ts +0 -1
  136. package/dist/lib/adaptivity/functions.d.ts.map +1 -1
  137. package/dist/lib/adaptivity/functions.js +1 -7
  138. package/dist/lib/adaptivity/functions.js.map +1 -1
  139. package/dist/lib/animation/useReducedMotion.d.ts +1 -1
  140. package/dist/lib/animation/useReducedMotion.d.ts.map +1 -1
  141. package/dist/lib/animation/useReducedMotion.js +4 -7
  142. package/dist/lib/animation/useReducedMotion.js.map +1 -1
  143. package/dist/lib/sheet/controllers/BottomSheetController.d.ts +8 -8
  144. package/dist/lib/sheet/controllers/BottomSheetController.d.ts.map +1 -1
  145. package/dist/lib/sheet/controllers/BottomSheetController.js +22 -37
  146. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  147. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts +1 -1
  148. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts.map +1 -1
  149. package/dist/lib/sheet/controllers/CSSTransitionController.js +1 -9
  150. package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  151. package/dist/lib/sheet/index.d.ts +2 -1
  152. package/dist/lib/sheet/index.d.ts.map +1 -1
  153. package/dist/lib/sheet/index.js +1 -1
  154. package/dist/lib/sheet/index.js.map +1 -1
  155. package/dist/lib/sheet/useBottomSheet.d.ts +6 -5
  156. package/dist/lib/sheet/useBottomSheet.d.ts.map +1 -1
  157. package/dist/lib/sheet/useBottomSheet.js +12 -15
  158. package/dist/lib/sheet/useBottomSheet.js.map +1 -1
  159. package/dist/vkui.css +1 -1
  160. package/dist/vkui.css.map +1 -1
  161. package/package.json +2 -2
  162. package/src/components/ActionSheet/ActionSheet.tsx +1 -4
  163. package/src/components/AppRoot/AppRoot.module.css +17 -0
  164. package/src/components/AppRoot/AppRoot.tsx +24 -11
  165. package/src/components/AppRoot/AppRootPortal.tsx +1 -1
  166. package/src/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -24
  167. package/src/components/AppRoot/{AppRootStyleContainer.tsx → AppRootStyleContainer/AppRootStyleContainer.tsx} +11 -29
  168. package/src/components/AppRoot/helpers.ts +17 -1
  169. package/src/components/Button/Button.module.css +6 -6
  170. package/src/components/Card/Card.module.css +8 -6
  171. package/src/components/Clickable/Clickable.tsx +4 -103
  172. package/src/components/Clickable/RealClickable.tsx +99 -0
  173. package/src/components/FormField/FormField.module.css +2 -0
  174. package/src/components/FormItem/FormItem.module.css +6 -6
  175. package/src/components/Group/Group.module.css +1 -0
  176. package/src/components/Header/Header.module.css +8 -4
  177. package/src/components/HorizontalCell/HorizontalCell.tsx +8 -20
  178. package/src/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
  179. package/src/components/IconButton/IconButton.module.css +10 -3
  180. package/src/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  181. package/src/components/ModalCard/ModalCardInternal.tsx +1 -1
  182. package/src/components/ModalPage/ModalPage.tsx +57 -3
  183. package/src/components/ModalPage/ModalPageInternal.tsx +14 -5
  184. package/src/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
  185. package/src/components/ModalRoot/ModalRoot.tsx +0 -1
  186. package/src/components/ModalRoot/types.ts +0 -1
  187. package/src/components/ModalRoot/useModalManager.tsx +5 -3
  188. package/src/components/PanelHeader/PanelHeader.module.css +8 -4
  189. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
  190. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +1 -1
  191. package/src/components/PopoutWrapper/PopoutWrapper.tsx +1 -4
  192. package/src/components/Removable/Removable.module.css +6 -2
  193. package/src/components/Spinner/Spinner.tsx +10 -48
  194. package/src/components/Spinner/SpinnerAnimation.tsx +42 -0
  195. package/src/components/SplitLayout/SplitLayout.tsx +4 -4
  196. package/src/components/View/View.module.css +2 -2
  197. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +13 -4
  198. package/src/index.ts +2 -2
  199. package/src/lib/adaptivity/functions.ts +1 -8
  200. package/src/lib/animation/useReducedMotion.ts +6 -13
  201. package/src/lib/sheet/controllers/BottomSheetController.ts +32 -50
  202. package/src/lib/sheet/controllers/CSSTransitionController.ts +1 -8
  203. package/src/lib/sheet/index.ts +3 -0
  204. package/src/lib/sheet/useBottomSheet.ts +21 -17
  205. package/src/styles/common.css +12 -4
  206. package/dist/components/AppRoot/AppRootStyleContainer.d.ts.map +0 -1
  207. package/dist/components/AppRoot/AppRootStyleContainer.js +0 -57
  208. package/dist/components/AppRoot/AppRootStyleContainer.js.map +0 -1
  209. package/dist/cssm/components/AppRoot/AppRootStyleContainer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Clickable/Clickable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport {\n type FocusVisibleModeProps,\n useFocusVisibleClassName,\n} from '../../hooks/useFocusVisibleClassName';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { clickByKeyboardHandler } from '../../lib/utils';\nimport { RootComponent, type RootComponentProps } from '../RootComponent/RootComponent';\nimport {\n ClickableLockStateContext,\n DEFAULT_ACTIVE_EFFECT_DELAY,\n type StateProps,\n useState,\n} 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 */\nconst 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\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","noop","useFocusVisible","useFocusVisibleClassName","mergeCalls","clickByKeyboardHandler","RootComponent","ClickableLockStateContext","DEFAULT_ACTIVE_EFFECT_DELAY","useState","styles","NonClickable","href","onClick","onClickCapture","activeClassName","hoverClassName","hasActive","hasHover","hovered","unlockParentHover","activated","activeEffectDelay","restProps","RealClickable","baseClassName","children","focusVisibleMode","hasHoverWithChildren","onPointerEnter","onPointerLeave","onPointerDown","onPointerCancel","onPointerUp","onBlur","onFocus","onKeyDown","focusVisible","focusEvents","focusVisibleClassNames","mode","stateClassName","setLockHoverBubblingImmediate","setLockActiveBubblingImmediate","stateEvents","handlers","lockStateContextValue","useMemo","lockHoverStateBubbling","lockActiveStateBubbling","realClickable","Provider","value","checkClickable","props","undefined","Component","disabled","component","Clickable","baseClassNameProp","commonProps","isClickable","host"],"mappings":"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"}
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
- .withTop .removable,
160
- :global(.vkuiInternalFormLayoutGroup--mode-horizontal) .withTop {
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 .removable,
168
- :global(.vkuiInternalFormLayoutGroup--mode-horizontal) .sizeYCompact.withTop {
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 .removable,
176
- :global(.vkuiInternalFormLayoutGroup--mode-horizontal) .sizeYNone.withTop {
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-next-line selector-pseudo-class-disallowed-list */
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-next-line selector-pseudo-class-disallowed-list */
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-next-line selector-pseudo-class-disallowed-list */
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-next-line selector-pseudo-class-disallowed-list */
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(CellTypography, {
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 {\n CSSCustomProperties,\n HasRef,\n HasRootRef,\n HTMLAttributesWithRootRef,\n LiteralUnion,\n} 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\ninterface CellTypographyProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n size: HorizontalCellProps['size'];\n}\n\nconst CellTypography = ({ size, children, ...restProps }: CellTypographyProps) => {\n return size === 's' ? (\n <Caption {...restProps}>{children}</Caption>\n ) : (\n <Subhead {...restProps}>{children}</Subhead>\n );\n};\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\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 ...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) && <CellTypography size={size}>{title}</CellTypography>}\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","CellTypography","size","children","restProps","HorizontalCell","className","title","style","subtitle","getRootRef","getRef","extraSubtitle","textAlign","noPadding","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;AAQtD,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;AAQA,MAAMC,iBAAiB,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAGC,WAAgC;IAC3E,OAAOF,SAAS,oBACd,KAACtB;QAAS,GAAGwB,SAAS;kBAAGD;uBAEzB,KAACrB;QAAS,GAAGsB,SAAS;kBAAGD;;AAE7B;AAsCA;;CAEC,GACD,OAAO,MAAME,iBAAiB,CAAC,EAC7BC,SAAS,EACTC,KAAK,EACLC,KAAK,EACLC,QAAQ,EACRP,OAAO,GAAG,EACVC,yBAAW,KAACzB;IAAOwB,MAAM;EAAM,EAC/BQ,UAAU,EACVC,MAAM,EACNC,aAAa,EACbC,YAAYX,SAAS,MAAM,WAAW,OAAO,EAC7CY,YAAY,KAAK,EACjB,GAAGV,WACiB;IACpB,MAAMW,gBACJvC,aAAa+B,UAAU/B,aAAaiC,aAAajC,aAAaoC;IAEhE,MAAMI,mBACJ,OAAOd,SAAS,WAAW;QAAE,CAAClB,gCAAgC,EAAE,GAAGkB,KAAK,EAAE,CAAC;IAAC,IAAIe;IAElF,qBACE,KAACC;QACCC,KAAKT;QACLF,OAAO/B,WAAWuC,kBAAkBR;QACpCF,WAAW/B,WACTQ,OAAOqC,IAAI,EACX,OAAOlB,SAAS,YAAYjB,UAAU,CAACiB,KAAK,EAC5CA,SAAS,UAAUnB,OAAOsC,KAAK,EAC/B,OAAOnB,SAAS,YAAYnB,OAAOuC,UAAU,EAC7CR,aAAa/B,OAAO+B,SAAS,EAC7BR;kBAGF,cAAA,MAAC3B;YAAS2B,WAAWvB,OAAOwC,IAAI;YAAEb,YAAYC;YAAS,GAAGP,SAAS;;gBAChE5B,aAAa2B,2BAAa,KAACe;oBAAIZ,WAAWvB,OAAOyC,KAAK;8BAAGrB;;gBACzDY,+BACC,MAACG;oBACCZ,WAAW/B,WACTQ,OAAO0C,OAAO,EACdZ,cAAc,WAAWjB,mBAAmB,CAACiB,UAAU;;wBAGxDrC,aAAa+B,wBAAU,KAACN;4BAAeC,MAAMA;sCAAOK;;wBACpD/B,aAAaiC,2BAAa,KAAC5B;4BAASyB,WAAWvB,OAAO0B,QAAQ;sCAAGA;;wBACjEjC,aAAaoC,gCACZ,KAAC/B;4BAASyB,WAAWvB,OAAO0B,QAAQ;sCAAGG;;;;;;;AAOrD,EAAE"}
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-next-line selector-pseudo-class-disallowed-list */
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-next-line selector-pseudo-class-disallowed-list */
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-next-line selector-pseudo-class-disallowed-list */
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
- initialSnapPoint: 'auto',
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 initialSnapPoint: '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","initialSnapPoint","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,kBAAkB;QAClBC,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
+ {"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":"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"}
@@ -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
- settlingHeight: settlingHeight,
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 settlingHeight={settlingHeight}\n {...resolvedProps}\n {...restProps}\n />\n </ModalContext.Provider>\n );\n};\n"],"names":["useId","ModalContext","getNavId","warnOnce","useModalManager","ModalPageInternal","warn","ModalPage","id","idProp","nav","open","modalOverlayTestId","noFocusToDialog","onOpen","onOpened","onClose","onClosed","size","settlingHeight","keepMounted","restProps","generatingId","mounted","resolvedProps","Provider","value","aria-labelledby"],"mappings":"AAAA;;AAEA,SAASA,KAAK,QAAQ,QAAQ;AAC9B,SAASC,YAAY,QAAQ,gCAA6B;AAC1D,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,iBAAiB,QAAQ,yBAAsB;AAGxD,MAAMC,OAAOH,SAAS;AAEtB;;CAEC,GACD,OAAO,MAAMI,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,cAAc,KAAK,EACnB,GAAGC,WACY;IACf,MAAMC,eAAetB;IACrB,MAAMQ,KAAKN,SAAS;QAAEQ;QAAKF,IAAIC;IAAO,GAAGH,SAASgB;IAElD,MAAM,EAAEC,OAAO,EAAE,GAAGC,eAAe,GAAGpB,gBAAgB;QACpDI;QACAG;QACAS;QACAR;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,IAAI,CAACM,SAAS;QACZ,OAAO;IACT;IAEA,qBACE,KAACtB,aAAawB,QAAQ;QAACC,OAAOlB;kBAC5B,cAAA,KAACH;YACCG,IAAIA;YACJU,MAAMA;YACNS,mBAAiB,GAAGnB,GAAG,MAAM,CAAC;YAC9BW,gBAAgBA;YACf,GAAGK,aAAa;YAChB,GAAGH,SAAS;;;AAIrB,EAAE"}
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, dynamicContentHeight, settlingHeight, getModalContentRef, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, onOpen, onOpened, onClose = noop, onClosed, ...restProps })=>{
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
- initialSnapPoint: dynamicContentHeight ? 'auto' : settlingHeight,
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
  }