@vkontakte/vkui 5.4.1 → 5.4.3

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 (179) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
  3. package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
  4. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +7 -3
  5. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  6. package/dist/cjs/components/Banner/Banner.js +3 -3
  7. package/dist/cjs/components/Banner/Banner.js.map +1 -1
  8. package/dist/cjs/components/Cell/CellDragger/CellDragger.d.ts +2 -2
  9. package/dist/cjs/components/Cell/CellDragger/CellDragger.js +9 -5
  10. package/dist/cjs/components/Cell/CellDragger/CellDragger.js.map +1 -1
  11. package/dist/cjs/components/Cell/useDraggable.d.ts +3 -3
  12. package/dist/cjs/components/Cell/useDraggable.js +12 -7
  13. package/dist/cjs/components/Cell/useDraggable.js.map +1 -1
  14. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +3 -20
  15. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  16. package/dist/cjs/components/CustomSelect/CustomSelect.js +16 -2
  17. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  18. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.d.ts +1 -1
  19. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +4 -2
  20. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  21. package/dist/cjs/components/HorizontalCell/HorizontalCell.d.ts +11 -1
  22. package/dist/cjs/components/HorizontalCell/HorizontalCell.js +6 -3
  23. package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
  24. package/dist/cjs/components/ImageBase/ImageBase.js +5 -2
  25. package/dist/cjs/components/ImageBase/ImageBase.js.map +1 -1
  26. package/dist/cjs/components/InfoRow/InfoRow.js +3 -2
  27. package/dist/cjs/components/InfoRow/InfoRow.js.map +1 -1
  28. package/dist/cjs/components/ModalPage/ModalPage.js +6 -1
  29. package/dist/cjs/components/ModalPage/ModalPage.js.map +1 -1
  30. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +6 -5
  31. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  32. package/dist/cjs/components/ModalRoot/ModalRoot.js +30 -12
  33. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  34. package/dist/cjs/components/ModalRoot/types.d.ts +0 -1
  35. package/dist/cjs/components/ModalRoot/types.js.map +1 -1
  36. package/dist/cjs/components/ModalRoot/useModalManager.js +0 -1
  37. package/dist/cjs/components/ModalRoot/useModalManager.js.map +1 -1
  38. package/dist/cjs/components/NativeSelect/NativeSelect.js +2 -1
  39. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  40. package/dist/cjs/components/Panel/Panel.js +4 -4
  41. package/dist/cjs/components/Panel/Panel.js.map +1 -1
  42. package/dist/cjs/components/PanelHeader/PanelHeader.d.ts +8 -4
  43. package/dist/cjs/components/PanelHeader/PanelHeader.js +48 -21
  44. package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
  45. package/dist/cjs/components/TabsItem/TabsItem.js +3 -2
  46. package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
  47. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
  48. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  49. package/dist/cjs/components/WriteBar/WriteBar.js +14 -2
  50. package/dist/cjs/components/WriteBar/WriteBar.js.map +1 -1
  51. package/dist/cjs/hooks/useTodayDate.js +30 -7
  52. package/dist/cjs/hooks/useTodayDate.js.map +1 -1
  53. package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
  54. package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
  55. package/dist/components/ActionSheetItem/ActionSheetItem.js +7 -3
  56. package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  57. package/dist/components/Banner/Banner.js +3 -3
  58. package/dist/components/Banner/Banner.js.map +1 -1
  59. package/dist/components/Cell/CellDragger/CellDragger.d.ts +2 -2
  60. package/dist/components/Cell/CellDragger/CellDragger.js +9 -5
  61. package/dist/components/Cell/CellDragger/CellDragger.js.map +1 -1
  62. package/dist/components/Cell/useDraggable.d.ts +3 -3
  63. package/dist/components/Cell/useDraggable.js +12 -7
  64. package/dist/components/Cell/useDraggable.js.map +1 -1
  65. package/dist/components/ChipsSelect/ChipsSelect.js +3 -20
  66. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  67. package/dist/components/CustomSelect/CustomSelect.js +16 -2
  68. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  69. package/dist/components/CustomSelectOption/CustomSelectOption.d.ts +1 -1
  70. package/dist/components/CustomSelectOption/CustomSelectOption.js +4 -2
  71. package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  72. package/dist/components/HorizontalCell/HorizontalCell.d.ts +11 -1
  73. package/dist/components/HorizontalCell/HorizontalCell.js +6 -3
  74. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  75. package/dist/components/ImageBase/ImageBase.js +5 -2
  76. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  77. package/dist/components/InfoRow/InfoRow.js +3 -2
  78. package/dist/components/InfoRow/InfoRow.js.map +1 -1
  79. package/dist/components/ModalPage/ModalPage.js +6 -1
  80. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  81. package/dist/components/ModalPageHeader/ModalPageHeader.js +6 -5
  82. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  83. package/dist/components/ModalRoot/ModalRoot.js +30 -12
  84. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  85. package/dist/components/ModalRoot/types.d.ts +0 -1
  86. package/dist/components/ModalRoot/types.js.map +1 -1
  87. package/dist/components/ModalRoot/useModalManager.js +0 -1
  88. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  89. package/dist/components/NativeSelect/NativeSelect.js +2 -1
  90. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  91. package/dist/components/Panel/Panel.js +4 -4
  92. package/dist/components/Panel/Panel.js.map +1 -1
  93. package/dist/components/PanelHeader/PanelHeader.d.ts +8 -4
  94. package/dist/components/PanelHeader/PanelHeader.js +48 -21
  95. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  96. package/dist/components/TabsItem/TabsItem.js +3 -2
  97. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  98. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
  99. package/dist/components/VisuallyHidden/VisuallyHidden.js +3 -4
  100. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  101. package/dist/components/WriteBar/WriteBar.js +14 -2
  102. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  103. package/dist/components.css +15 -15
  104. package/dist/components.css.map +1 -1
  105. package/dist/components.js.tmp +275 -140
  106. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +1 -5
  107. package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +1 -1
  108. package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -1
  109. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +7 -3
  110. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  111. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.module.css +7 -6
  112. package/dist/cssm/components/Banner/Banner.js +3 -3
  113. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  114. package/dist/cssm/components/Banner/Banner.module.css +1 -9
  115. package/dist/cssm/components/Cell/CellDragger/CellDragger.d.ts +2 -2
  116. package/dist/cssm/components/Cell/CellDragger/CellDragger.js +8 -5
  117. package/dist/cssm/components/Cell/CellDragger/CellDragger.js.map +1 -1
  118. package/dist/cssm/components/Cell/useDraggable.d.ts +3 -3
  119. package/dist/cssm/components/Cell/useDraggable.js +12 -7
  120. package/dist/cssm/components/Cell/useDraggable.js.map +1 -1
  121. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +3 -17
  122. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  123. package/dist/cssm/components/CustomSelect/CustomSelect.js +15 -2
  124. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  125. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.d.ts +1 -1
  126. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +2 -1
  127. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  128. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.module.css +0 -1
  129. package/dist/cssm/components/HorizontalCell/HorizontalCell.d.ts +11 -1
  130. package/dist/cssm/components/HorizontalCell/HorizontalCell.js +4 -2
  131. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  132. package/dist/cssm/components/HorizontalCell/HorizontalCell.module.css +23 -11
  133. package/dist/cssm/components/ImageBase/ImageBase.js +5 -2
  134. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  135. package/dist/cssm/components/ImageBase/ImageBase.module.css +13 -2
  136. package/dist/cssm/components/InfoRow/InfoRow.js +3 -2
  137. package/dist/cssm/components/InfoRow/InfoRow.js.map +1 -1
  138. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  139. package/dist/cssm/components/ModalPage/ModalPage.js +6 -1
  140. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  141. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +6 -5
  142. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  143. package/dist/cssm/components/ModalRoot/ModalRoot.js +26 -11
  144. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  145. package/dist/cssm/components/ModalRoot/types.d.ts +0 -1
  146. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  147. package/dist/cssm/components/ModalRoot/useModalManager.js +0 -1
  148. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  149. package/dist/cssm/components/NativeSelect/NativeSelect.js +2 -1
  150. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  151. package/dist/cssm/components/Panel/Panel.js +4 -4
  152. package/dist/cssm/components/Panel/Panel.js.map +1 -1
  153. package/dist/cssm/components/PanelHeader/PanelHeader.d.ts +8 -4
  154. package/dist/cssm/components/PanelHeader/PanelHeader.js +45 -19
  155. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  156. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.module.css +1 -1
  157. package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +3 -0
  158. package/dist/cssm/components/TabsItem/TabsItem.js +3 -2
  159. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  160. package/dist/cssm/components/Typography/Typography.module.css +2 -1
  161. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.d.ts +3 -4
  162. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js +3 -4
  163. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  164. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +9 -5
  165. package/dist/cssm/components/WriteBar/WriteBar.js +15 -2
  166. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  167. package/dist/cssm/components/WriteBar/WriteBar.module.css +13 -7
  168. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.module.css +9 -1
  169. package/dist/cssm/hooks/useTodayDate.js +31 -8
  170. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  171. package/dist/cssm/styles/constants.css +3 -2
  172. package/dist/hooks/useTodayDate.js +31 -8
  173. package/dist/hooks/useTodayDate.js.map +1 -1
  174. package/dist/vkui.css +15 -15
  175. package/dist/vkui.css.map +1 -1
  176. package/dist/vkui.js.tmp +275 -140
  177. package/package.json +3 -5
  178. package/docs/assets/assets/vkui-logo-dark.svg +0 -5
  179. package/docs/assets/assets/vkui-logo-light.svg +0 -5
@@ -17,6 +17,7 @@ var _interopRequireDefault = require("@swc/helpers/lib/_interop_require_default.
17
17
  var _interopRequireWildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
18
18
  var _objectSpread = require("@swc/helpers/lib/_object_spread.js").default;
19
19
  var _objectWithoutProperties = require("@swc/helpers/lib/_object_without_properties.js").default;
20
+ var _toConsumableArray = require("@swc/helpers/lib/_to_consumable_array.js").default;
20
21
  var _createSuper = require("@swc/helpers/lib/_create_super.js").default;
21
22
  var _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
22
23
  var _vkjs = require("@vkontakte/vkjs");
@@ -75,13 +76,9 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
75
76
  }
76
77
  return false;
77
78
  });
78
- _defineProperty(_assertThisInitialized(_this), "updateModalTranslate", function() {
79
- var modalState = _this.props.getModalState(_this.props.activeModal);
80
- modalState && _this.animateTranslate(modalState, modalState.translateY);
81
- });
82
79
  _defineProperty(_assertThisInitialized(_this), "updateModalHeight", function() {
83
80
  var modalState = _this.props.getModalState(_this.props.activeModal);
84
- if (modalState && modalState.type === _types.ModalType.PAGE && modalState.dynamicContentHeight) {
81
+ if (modalState && modalState.type === _types.ModalType.PAGE) {
85
82
  if (_this.props.enteringModal) {
86
83
  _this.waitTransitionFinish(modalState, function() {
87
84
  requestAnimationFrame(function() {
@@ -141,7 +138,8 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
141
138
  });
142
139
  _this.state = {
143
140
  touchDown: false,
144
- dragging: false
141
+ dragging: false,
142
+ modalOpenedLog: []
145
143
  };
146
144
  _this.maskElementRef = /*#__PURE__*/ _react.createRef();
147
145
  var _this_props_getModalState;
@@ -189,18 +187,16 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
189
187
  {
190
188
  key: "componentDidMount",
191
189
  value: function componentDidMount() {
192
- // Отслеживаем изменение размеров viewport (Необходимо для iOS)
193
- if (this.props.platform === _platform.Platform.IOS) {
194
- var _this_window;
195
- (_this_window = this.window) === null || _this_window === void 0 ? void 0 : _this_window.addEventListener("resize", this.updateModalTranslate, false);
196
- }
190
+ var // Отслеживаем изменение размеров viewport
191
+ _this_window;
192
+ (_this_window = this.window) === null || _this_window === void 0 ? void 0 : _this_window.addEventListener("resize", this.updateModalHeight, false);
197
193
  }
198
194
  },
199
195
  {
200
196
  key: "componentWillUnmount",
201
197
  value: function componentWillUnmount() {
202
198
  this.toggleDocumentScrolling(true);
203
- this.window.removeEventListener("resize", this.updateModalTranslate, false);
199
+ this.window.removeEventListener("resize", this.updateModalHeight, false);
204
200
  }
205
201
  },
206
202
  {
@@ -295,6 +291,15 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
295
291
  id && warn("closeActiveModal: модальное окно (страница) ".concat(id, " не существует"), "error");
296
292
  return;
297
293
  }
294
+ if (!this.state.modalOpenedLog.length) {
295
+ this.setState(function(prevState) {
296
+ return {
297
+ modalOpenedLog: _toConsumableArray(prevState.modalOpenedLog).concat([
298
+ id
299
+ ])
300
+ };
301
+ });
302
+ }
298
303
  var nextModalState = this.props.getModalState(this.props.activeModal);
299
304
  var nextIsPage = !!nextModalState && nextModalState.type === _types.ModalType.PAGE;
300
305
  var prevIsPage = !!prevModalState && prevModalState.type === _types.ModalType.PAGE;
@@ -307,6 +312,19 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
307
312
  if (!nextModalState) {
308
313
  // NOTE: was only for clean exit
309
314
  this.setMaskOpacity(prevModalState, 0);
315
+ this.setState({
316
+ modalOpenedLog: []
317
+ });
318
+ prevModalState.translateY = undefined;
319
+ } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {
320
+ nextModalState.translateY = undefined;
321
+ this.setState(function(prevState) {
322
+ return {
323
+ modalOpenedLog: _toConsumableArray(prevState.modalOpenedLog).concat([
324
+ nextModalState.id
325
+ ])
326
+ };
327
+ });
310
328
  }
311
329
  }
312
330
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext, WebviewType } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport (Необходимо для iOS)\n if (this.props.platform === Platform.IOS) {\n this.window?.addEventListener('resize', this.updateModalTranslate, false);\n }\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalTranslate, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n updateModalTranslate = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n modalState && this.animateTranslate(modalState, modalState.translateY);\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE && modalState.dynamicContentHeight) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.webviewType === WebviewType.VKAPPS &&\n styles['ModalRoot--vkapps'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement } = modalState;\n const contentHeight = (contentElement?.firstElementChild as HTMLElement).offsetHeight;\n\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange;\n let hiddenRange: TranslateRange;\n\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = [shiftHalf, translateYFrom + visiblePart / 4];\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = [translateY + 25, translateY + 25];\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","React","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalTranslate","modalState","getModalState","activeModal","animateTranslate","translateY","updateModalHeight","type","ModalType","PAGE","dynamicContentHeight","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","registerModal","Object","id","data","assign","onClose","onExit","isInsideModal","timeout","platform","Platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","setMaskOpacity","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","transitionEvent","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","setTransformStyle","forceOpacity","history","opacity","toString","render","TouchRootContext","Provider","value","ModalRootContext","Touch","className","classNames","configProvider","webviewType","WebviewType","VKAPPS","onMove","onEnd","div","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","getRootRef","restoreFocus","Component","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","contentHeight","firstElementChild","prevTranslateY","clientHeight","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext, WebviewType } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.webviewType === WebviewType.VKAPPS &&\n styles['ModalRoot--vkapps'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement } = modalState;\n const contentHeight = (contentElement?.firstElementChild as HTMLElement).offsetHeight;\n\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange;\n let hiddenRange: TranslateRange;\n\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = [shiftHalf, translateYFrom + visiblePart / 4];\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = [translateY + 25, translateY + 25];\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","React","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","ModalType","PAGE","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","modalOpenedLog","registerModal","Object","id","data","assign","onClose","onExit","isInsideModal","timeout","platform","Platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","setMaskOpacity","includes","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","transitionEvent","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","setTransformStyle","forceOpacity","history","opacity","toString","render","TouchRootContext","Provider","value","ModalRootContext","Touch","className","classNames","configProvider","webviewType","WebviewType","VKAPPS","onMove","onEnd","div","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","getRootRef","restoreFocus","Component","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","contentHeight","firstElementChild","prevTranslateY","clientHeight","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
@@ -35,7 +35,6 @@ export interface ModalsStateEntry extends ModalElements {
35
35
  onClosed?: VoidFunction;
36
36
  type?: ModalType;
37
37
  settlingHeight?: number;
38
- dynamicContentHeight?: boolean;
39
38
  expandable?: boolean;
40
39
  /**
41
40
  * Процент текущего сдвига модалки
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/types.ts"],"sourcesContent":["import { DOMContextInterface } from '../../lib/dom';\nimport { HasChildren, HasPlatform } from '../../types';\nimport { ConfigProviderContextInterface } from '../ConfigProvider/ConfigProviderContext';\n\nexport enum ModalType {\n PAGE = 'page',\n CARD = 'card',\n}\n\nexport type TranslateRange = [number, number];\n\nexport type ModalsState = { [index: string]: ModalsStateEntry };\n\nexport interface ModalElements {\n modalElement?: HTMLElement | null;\n innerElement?: HTMLElement | null;\n headerElement?: HTMLElement | null;\n contentElement?: HTMLElement | null;\n}\n\nexport interface ModalsStateEntry extends ModalElements {\n id: string | null;\n /**\n * Событие начала открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Событие открытия модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Событие начала закрытия модалки.\n */\n onClose?: VoidFunction;\n /**\n * Событие закрытия модалки.\n */\n onClosed?: VoidFunction;\n type?: ModalType;\n\n settlingHeight?: number;\n dynamicContentHeight?: boolean;\n expandable?: boolean;\n\n /**\n * Процент текущего сдвига модалки\n */\n translateY?: number;\n /**\n * Процент сдвига модалки в изначальном состоянии\n */\n translateYFrom?: number;\n /**\n * Процент сдвига модалки во время взаимодействия с ней (потянуть, чтобы открыть или закрыть)\n */\n translateYCurrent?: number;\n\n touchStartContentScrollTop?: number;\n touchMovePositive?: boolean | null;\n touchShiftYPercent?: number;\n\n expanded?: boolean;\n collapsed?: boolean;\n hidden?: boolean;\n\n contentScrolled?: boolean;\n contentScrollStopTimeout?: ReturnType<typeof setTimeout>;\n\n expandedRange?: TranslateRange;\n collapsedRange?: TranslateRange;\n hiddenRange?: TranslateRange;\n}\n\nexport interface ModalRootProps extends HasChildren {\n activeModal?: string | null;\n\n /**\n * Будет вызвано при начале открытия активной модалки с её id\n */\n onOpen?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном открытии активной модалки с её id\n */\n onOpened?(modalId: string): void;\n\n /**\n * Будет вызвано при начале закрытия активной модалки с её id\n */\n onClose?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном закрытии активной модалки с её id\n */\n onClosed?(modalId: string): void;\n}\n\nexport interface ModalRootWithDOMProps extends HasPlatform, ModalRootProps, DOMContextInterface {\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface;\n}\n"],"names":["ModalType","PAGE","CARD"],"mappings":";;;;;;;;;;IAIO;UAAKA,SAAS;IAATA,UACVC,UAAO;IADGD,UAEVE,UAAO;GAFGF,cAAAA"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/types.ts"],"sourcesContent":["import { DOMContextInterface } from '../../lib/dom';\nimport { HasChildren, HasPlatform } from '../../types';\nimport { ConfigProviderContextInterface } from '../ConfigProvider/ConfigProviderContext';\n\nexport enum ModalType {\n PAGE = 'page',\n CARD = 'card',\n}\n\nexport type TranslateRange = [number, number];\n\nexport type ModalsState = { [index: string]: ModalsStateEntry };\n\nexport interface ModalElements {\n modalElement?: HTMLElement | null;\n innerElement?: HTMLElement | null;\n headerElement?: HTMLElement | null;\n contentElement?: HTMLElement | null;\n}\n\nexport interface ModalsStateEntry extends ModalElements {\n id: string | null;\n /**\n * Событие начала открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Событие открытия модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Событие начала закрытия модалки.\n */\n onClose?: VoidFunction;\n /**\n * Событие закрытия модалки.\n */\n onClosed?: VoidFunction;\n type?: ModalType;\n\n settlingHeight?: number;\n expandable?: boolean;\n\n /**\n * Процент текущего сдвига модалки\n */\n translateY?: number;\n /**\n * Процент сдвига модалки в изначальном состоянии\n */\n translateYFrom?: number;\n /**\n * Процент сдвига модалки во время взаимодействия с ней (потянуть, чтобы открыть или закрыть)\n */\n translateYCurrent?: number;\n\n touchStartContentScrollTop?: number;\n touchMovePositive?: boolean | null;\n touchShiftYPercent?: number;\n\n expanded?: boolean;\n collapsed?: boolean;\n hidden?: boolean;\n\n contentScrolled?: boolean;\n contentScrollStopTimeout?: ReturnType<typeof setTimeout>;\n\n expandedRange?: TranslateRange;\n collapsedRange?: TranslateRange;\n hiddenRange?: TranslateRange;\n}\n\nexport interface ModalRootProps extends HasChildren {\n activeModal?: string | null;\n\n /**\n * Будет вызвано при начале открытия активной модалки с её id\n */\n onOpen?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном открытии активной модалки с её id\n */\n onOpened?(modalId: string): void;\n\n /**\n * Будет вызвано при начале закрытия активной модалки с её id\n */\n onClose?(modalId: string): void;\n\n /**\n * Будет вызвано при окончательном закрытии активной модалки с её id\n */\n onClosed?(modalId: string): void;\n}\n\nexport interface ModalRootWithDOMProps extends HasPlatform, ModalRootProps, DOMContextInterface {\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface;\n}\n"],"names":["ModalType","PAGE","CARD"],"mappings":";;;;;;;;;;IAIO;UAAKA,SAAS;IAATA,UACVC,UAAO;IADGD,UAEVE,UAAO;GAFGF,cAAAA"}
@@ -107,7 +107,6 @@ function useModalManager(activeModal, children) {
107
107
  state.onOpened = Modal.props.onOpened;
108
108
  state.onClose = Modal.props.onClose;
109
109
  state.onClosed = Modal.props.onClosed;
110
- state.dynamicContentHeight = !!modalProps.dynamicContentHeight;
111
110
  // ModalPage props
112
111
  if (typeof modalProps.settlingHeight === "number") {
113
112
  state.settlingHeight = modalProps.settlingHeight;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/useModalManager.tsx"],"sourcesContent":["import * as React from 'react';\nimport { isFunction, noop } from '@vkontakte/vkjs';\nimport { getNavId } from '../../lib/getNavId';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasChildren } from '../../types';\nimport { ModalsState, ModalsStateEntry, ModalType } from './types';\n\ninterface ModalTransitionState {\n activeModal?: string | null;\n enteringModal?: string | null;\n exitingModal?: string | null;\n history?: string[];\n isBack?: boolean | null;\n}\n\nexport interface ModalTransitionProps extends ModalTransitionState {\n onEnter: VoidFunction;\n onEntered: (id: string | null) => void;\n onExit: VoidFunction;\n onExited: (id: string | null) => void;\n getModalState: (id: string | undefined | null) => ModalsStateEntry | undefined;\n delayEnter: boolean;\n}\n\nfunction getModals(children: React.ReactNode | React.ReactNode[]) {\n return React.Children.toArray(children) as React.ReactElement[];\n}\n\nconst warn = warnOnce('ModalRoot');\n\nexport function modalTransitionReducer(\n state: ModalTransitionState,\n action: {\n type: 'setActive' | 'entered' | 'exited' | 'inited';\n id: string | null;\n },\n): ModalTransitionState {\n if (action.type === 'setActive' && action.id !== state.activeModal) {\n const nextModal = action.id;\n // preserve exiting modal if switching mid-transition\n const prevModal = state.exitingModal || state.activeModal;\n let history = state.history ? [...state.history] : [];\n const isBack = Boolean(nextModal && history.includes(nextModal));\n\n if (nextModal === null) {\n history = [];\n } else if (isBack) {\n history = history.splice(0, history.indexOf(nextModal) + 1);\n } else {\n history.push(nextModal);\n }\n\n return {\n activeModal: nextModal,\n // not entering yet\n enteringModal: null,\n exitingModal: prevModal,\n history,\n isBack,\n };\n }\n if (action.type === 'entered' && action.id === state.enteringModal) {\n return { ...state, enteringModal: null };\n }\n if (action.type === 'exited' && action.id === state.exitingModal) {\n return { ...state, exitingModal: null };\n }\n if (action.type === 'inited' && action.id === state.activeModal) {\n return { ...state, enteringModal: action.id };\n }\n return state;\n}\n\n/**\n * Реализует переход модалок. При смене activeModal m1 -> m2:\n * 1. activeModal: m1, exitingModal: null, enteringModal: null, триггер перехода\n * 2. activeModal: m2, exitingModal: m1, enteringModal: null, рендерим m2 чтобы прошел init, начинаем анимацию выхода\n * одновременный переход между ModalPage:\n * 3a. activeModal: m2, exitingModal: m1, enteringModal: m2\n * 4a. exitingModal и enteringModal переходят в null в порядке завершения анимации\n * ИЛИ дожидаемся скрытия ModalCard\n * 3b. activeModal: m2, exitingModal: null, enteringModal: m2\n * 4b. enteringModal переходит в null после завершения анимации\n * 5. activeModal: m2, exitingModal: null, enteringModal: null, переход закончен\n */\nexport function useModalManager(\n activeModal: string | null | undefined,\n children: React.ReactNode | React.ReactNode[],\n onOpen: (id: string) => void = noop,\n onOpened: (id: string) => void = noop,\n onClose: (id: string) => void = noop,\n onClosed: (id: string) => void = noop,\n initModal: (state: ModalsStateEntry) => void = noop,\n): ModalTransitionProps {\n const modalsState = React.useRef<ModalsState>({}).current;\n getModals(children).forEach((Modal) => {\n const modalProps = Modal.props;\n const id = getNavId(modalProps, warn);\n const state: ModalsStateEntry = (id !== undefined && modalsState[id]) || {\n id: id ?? null,\n };\n\n state.onOpen = Modal.props.onOpen;\n state.onOpened = Modal.props.onOpened;\n state.onClose = Modal.props.onClose;\n state.onClosed = Modal.props.onClosed;\n state.dynamicContentHeight = !!modalProps.dynamicContentHeight;\n // ModalPage props\n if (typeof modalProps.settlingHeight === 'number') {\n state.settlingHeight = modalProps.settlingHeight;\n }\n\n if (state.id !== null) {\n modalsState[state.id] = state;\n }\n });\n\n const isMissing = activeModal && !modalsState[activeModal];\n const safeActiveModal = isMissing ? null : activeModal;\n const [transitionState, dispatchTransition] = React.useReducer(modalTransitionReducer, {\n activeModal: safeActiveModal,\n enteringModal: null,\n exitingModal: null,\n history: safeActiveModal ? [safeActiveModal] : [],\n isBack: false,\n });\n\n // Map props to state, render activeModal for init\n useIsomorphicLayoutEffect(() => {\n // ignore non-existent activeModal\n if (process.env.NODE_ENV === 'development' && isMissing) {\n warn(`Переход невозможен - модальное окно (страница) ${activeModal} не существует`, 'error');\n }\n dispatchTransition({ type: 'setActive', id: safeActiveModal ?? null });\n }, [activeModal]);\n\n // Init activeModal & set enteringModal\n useIsomorphicLayoutEffect(() => {\n if (transitionState.activeModal) {\n initModal(modalsState[transitionState.activeModal]);\n dispatchTransition({ type: 'inited', id: transitionState.activeModal });\n }\n }, [transitionState.activeModal]);\n\n const isCard = (id: string | null | undefined) =>\n id != null && modalsState[id]?.type === ModalType.CARD;\n const onEntered = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onOpened)) {\n modalState.onOpened();\n } else if (isFunction(onOpened)) {\n onOpened(id);\n }\n }\n\n dispatchTransition({ type: 'entered', id });\n },\n [modalsState, onOpened],\n );\n const onExited = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onClosed)) {\n modalState.onClosed();\n } else if (isFunction(onClosed)) {\n onClosed(id);\n }\n }\n\n dispatchTransition({ type: 'exited', id });\n },\n [modalsState, onClosed],\n );\n const delayEnter = Boolean(\n transitionState.exitingModal && (isCard(activeModal) || isCard(transitionState.exitingModal)),\n );\n const getModalState = React.useCallback(\n (id: string | undefined | null) => (id ? modalsState[id] : undefined),\n [modalsState],\n );\n\n function onEnter() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onOpen)) {\n modalState.onOpen();\n } else if (isFunction(onOpen) && modalState.id) {\n onOpen(modalState.id);\n }\n }\n }\n\n function onExit() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onClose)) {\n modalState.onClose();\n } else if (isFunction(onClose) && modalState.id) {\n onClose(modalState.id);\n }\n }\n }\n\n return {\n onEnter,\n onEntered,\n onExit,\n onExited,\n ...transitionState,\n delayEnter,\n getModalState,\n };\n}\n\ntype WithModalManager<Props extends ModalTransitionProps> = HasChildren &\n Omit<Props, keyof ModalTransitionProps> & {\n activeModal?: string | null;\n };\n\nexport function withModalManager(initModal: (a: ModalsStateEntry) => void = noop) {\n return function <Props extends ModalTransitionProps>(\n Wrapped: React.ComponentType<Props>,\n ): React.ComponentType<WithModalManager<Props>> {\n return function WithModalManager(props) {\n const transitionManager = useModalManager(\n props.activeModal,\n props.children,\n (props as any).onOpen,\n (props as any).onOpened,\n (props as any).onClose,\n (props as any).onClosed,\n initModal,\n );\n return <Wrapped {...(props as any)} {...transitionManager} />;\n };\n };\n}\n"],"names":["modalTransitionReducer","useModalManager","withModalManager","getModals","children","React","Children","toArray","warn","warnOnce","state","action","type","id","activeModal","nextModal","prevModal","exitingModal","history","isBack","Boolean","includes","splice","indexOf","push","enteringModal","onOpen","noop","onOpened","onClose","onClosed","initModal","onEnter","modalState","transitionState","modalsState","isFunction","onExit","useRef","current","forEach","Modal","modalProps","props","getNavId","undefined","dynamicContentHeight","settlingHeight","isMissing","safeActiveModal","useReducer","dispatchTransition","useIsomorphicLayoutEffect","process","env","NODE_ENV","isCard","ModalType","CARD","onEntered","useCallback","onExited","delayEnter","getModalState","Wrapped","WithModalManager","transitionManager"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/useModalManager.tsx"],"sourcesContent":["import * as React from 'react';\nimport { isFunction, noop } from '@vkontakte/vkjs';\nimport { getNavId } from '../../lib/getNavId';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasChildren } from '../../types';\nimport { ModalsState, ModalsStateEntry, ModalType } from './types';\n\ninterface ModalTransitionState {\n activeModal?: string | null;\n enteringModal?: string | null;\n exitingModal?: string | null;\n history?: string[];\n isBack?: boolean | null;\n}\n\nexport interface ModalTransitionProps extends ModalTransitionState {\n onEnter: VoidFunction;\n onEntered: (id: string | null) => void;\n onExit: VoidFunction;\n onExited: (id: string | null) => void;\n getModalState: (id: string | undefined | null) => ModalsStateEntry | undefined;\n delayEnter: boolean;\n}\n\nfunction getModals(children: React.ReactNode | React.ReactNode[]) {\n return React.Children.toArray(children) as React.ReactElement[];\n}\n\nconst warn = warnOnce('ModalRoot');\n\nexport function modalTransitionReducer(\n state: ModalTransitionState,\n action: {\n type: 'setActive' | 'entered' | 'exited' | 'inited';\n id: string | null;\n },\n): ModalTransitionState {\n if (action.type === 'setActive' && action.id !== state.activeModal) {\n const nextModal = action.id;\n // preserve exiting modal if switching mid-transition\n const prevModal = state.exitingModal || state.activeModal;\n let history = state.history ? [...state.history] : [];\n const isBack = Boolean(nextModal && history.includes(nextModal));\n\n if (nextModal === null) {\n history = [];\n } else if (isBack) {\n history = history.splice(0, history.indexOf(nextModal) + 1);\n } else {\n history.push(nextModal);\n }\n\n return {\n activeModal: nextModal,\n // not entering yet\n enteringModal: null,\n exitingModal: prevModal,\n history,\n isBack,\n };\n }\n if (action.type === 'entered' && action.id === state.enteringModal) {\n return { ...state, enteringModal: null };\n }\n if (action.type === 'exited' && action.id === state.exitingModal) {\n return { ...state, exitingModal: null };\n }\n if (action.type === 'inited' && action.id === state.activeModal) {\n return { ...state, enteringModal: action.id };\n }\n return state;\n}\n\n/**\n * Реализует переход модалок. При смене activeModal m1 -> m2:\n * 1. activeModal: m1, exitingModal: null, enteringModal: null, триггер перехода\n * 2. activeModal: m2, exitingModal: m1, enteringModal: null, рендерим m2 чтобы прошел init, начинаем анимацию выхода\n * одновременный переход между ModalPage:\n * 3a. activeModal: m2, exitingModal: m1, enteringModal: m2\n * 4a. exitingModal и enteringModal переходят в null в порядке завершения анимации\n * ИЛИ дожидаемся скрытия ModalCard\n * 3b. activeModal: m2, exitingModal: null, enteringModal: m2\n * 4b. enteringModal переходит в null после завершения анимации\n * 5. activeModal: m2, exitingModal: null, enteringModal: null, переход закончен\n */\nexport function useModalManager(\n activeModal: string | null | undefined,\n children: React.ReactNode | React.ReactNode[],\n onOpen: (id: string) => void = noop,\n onOpened: (id: string) => void = noop,\n onClose: (id: string) => void = noop,\n onClosed: (id: string) => void = noop,\n initModal: (state: ModalsStateEntry) => void = noop,\n): ModalTransitionProps {\n const modalsState = React.useRef<ModalsState>({}).current;\n getModals(children).forEach((Modal) => {\n const modalProps = Modal.props;\n const id = getNavId(modalProps, warn);\n const state: ModalsStateEntry = (id !== undefined && modalsState[id]) || {\n id: id ?? null,\n };\n\n state.onOpen = Modal.props.onOpen;\n state.onOpened = Modal.props.onOpened;\n state.onClose = Modal.props.onClose;\n state.onClosed = Modal.props.onClosed;\n // ModalPage props\n if (typeof modalProps.settlingHeight === 'number') {\n state.settlingHeight = modalProps.settlingHeight;\n }\n\n if (state.id !== null) {\n modalsState[state.id] = state;\n }\n });\n\n const isMissing = activeModal && !modalsState[activeModal];\n const safeActiveModal = isMissing ? null : activeModal;\n const [transitionState, dispatchTransition] = React.useReducer(modalTransitionReducer, {\n activeModal: safeActiveModal,\n enteringModal: null,\n exitingModal: null,\n history: safeActiveModal ? [safeActiveModal] : [],\n isBack: false,\n });\n\n // Map props to state, render activeModal for init\n useIsomorphicLayoutEffect(() => {\n // ignore non-existent activeModal\n if (process.env.NODE_ENV === 'development' && isMissing) {\n warn(`Переход невозможен - модальное окно (страница) ${activeModal} не существует`, 'error');\n }\n dispatchTransition({ type: 'setActive', id: safeActiveModal ?? null });\n }, [activeModal]);\n\n // Init activeModal & set enteringModal\n useIsomorphicLayoutEffect(() => {\n if (transitionState.activeModal) {\n initModal(modalsState[transitionState.activeModal]);\n dispatchTransition({ type: 'inited', id: transitionState.activeModal });\n }\n }, [transitionState.activeModal]);\n\n const isCard = (id: string | null | undefined) =>\n id != null && modalsState[id]?.type === ModalType.CARD;\n const onEntered = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onOpened)) {\n modalState.onOpened();\n } else if (isFunction(onOpened)) {\n onOpened(id);\n }\n }\n\n dispatchTransition({ type: 'entered', id });\n },\n [modalsState, onOpened],\n );\n const onExited = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onClosed)) {\n modalState.onClosed();\n } else if (isFunction(onClosed)) {\n onClosed(id);\n }\n }\n\n dispatchTransition({ type: 'exited', id });\n },\n [modalsState, onClosed],\n );\n const delayEnter = Boolean(\n transitionState.exitingModal && (isCard(activeModal) || isCard(transitionState.exitingModal)),\n );\n const getModalState = React.useCallback(\n (id: string | undefined | null) => (id ? modalsState[id] : undefined),\n [modalsState],\n );\n\n function onEnter() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onOpen)) {\n modalState.onOpen();\n } else if (isFunction(onOpen) && modalState.id) {\n onOpen(modalState.id);\n }\n }\n }\n\n function onExit() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onClose)) {\n modalState.onClose();\n } else if (isFunction(onClose) && modalState.id) {\n onClose(modalState.id);\n }\n }\n }\n\n return {\n onEnter,\n onEntered,\n onExit,\n onExited,\n ...transitionState,\n delayEnter,\n getModalState,\n };\n}\n\ntype WithModalManager<Props extends ModalTransitionProps> = HasChildren &\n Omit<Props, keyof ModalTransitionProps> & {\n activeModal?: string | null;\n };\n\nexport function withModalManager(initModal: (a: ModalsStateEntry) => void = noop) {\n return function <Props extends ModalTransitionProps>(\n Wrapped: React.ComponentType<Props>,\n ): React.ComponentType<WithModalManager<Props>> {\n return function WithModalManager(props) {\n const transitionManager = useModalManager(\n props.activeModal,\n props.children,\n (props as any).onOpen,\n (props as any).onOpened,\n (props as any).onClose,\n (props as any).onClosed,\n initModal,\n );\n return <Wrapped {...(props as any)} {...transitionManager} />;\n };\n };\n}\n"],"names":["modalTransitionReducer","useModalManager","withModalManager","getModals","children","React","Children","toArray","warn","warnOnce","state","action","type","id","activeModal","nextModal","prevModal","exitingModal","history","isBack","Boolean","includes","splice","indexOf","push","enteringModal","onOpen","noop","onOpened","onClose","onClosed","initModal","onEnter","modalState","transitionState","modalsState","isFunction","onExit","useRef","current","forEach","Modal","modalProps","props","getNavId","undefined","settlingHeight","isMissing","safeActiveModal","useReducer","dispatchTransition","useIsomorphicLayoutEffect","process","env","NODE_ENV","isCard","ModalType","CARD","onEntered","useCallback","onExited","delayEnter","getModalState","Wrapped","WithModalManager","transitionManager"],"mappings":"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"}
@@ -87,7 +87,8 @@ var sizeYClassNames = _defineProperty({
87
87
  }), placeholder && /*#__PURE__*/ _react.createElement("option", {
88
88
  value: ""
89
89
  }, placeholder), children), /*#__PURE__*/ _react.createElement("div", {
90
- className: "vkuiSelect__container"
90
+ className: "vkuiSelect__container",
91
+ "aria-hidden": true
91
92
  }, /*#__PURE__*/ _react.createElement(_selectTypography.SelectTypography, {
92
93
  className: "vkuiSelect__title",
93
94
  selectType: selectType
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles['Select--sizeY-none'],\n [SizeType.COMPACT]: styles['Select--sizeY-compact'],\n};\n\nexport interface NativeSelectProps\n extends React.SelectHTMLAttributes<HTMLSelectElement>,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLLabelElement>,\n HasAlign,\n Pick<FormFieldProps, 'before' | 'status'> {\n placeholder?: string;\n multiline?: boolean;\n selectType?: SelectType;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n}\n\nexport interface SelectState {\n value?: React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n title?: string;\n notSelected?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/NativeSelect\n */\nconst NativeSelect = ({\n style,\n defaultValue = '',\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n icon = <DropdownIcon />,\n before,\n onChange: onChangeProp,\n value: valueProp,\n ...restProps\n}: NativeSelectProps) => {\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const [value, onChange] = useEnsuredControl({\n defaultValue,\n disabled,\n onChange: onChangeProp,\n value: valueProp,\n });\n const selectRef = useExternRef(getRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n useIsomorphicLayoutEffect(() => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === '' && placeholder != null);\n }\n }, [value, children]);\n\n return (\n <FormField\n Component=\"label\"\n className={classNames(\n styles['Select'],\n 'vkuiInternalNativeSelect',\n before && styles['Select--hasBefore'],\n empty && styles['Select--empty'],\n multiline && styles['Select--multiline'],\n align === 'center' && styles['Select--align-center'],\n align === 'right' && styles['Select--align-right'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n before={before}\n after={icon}\n status={status}\n >\n <select\n {...restProps}\n disabled={disabled}\n className={styles['Select__el']}\n onChange={onChange}\n value={value}\n ref={selectRef}\n >\n {placeholder && <option value=\"\">{placeholder}</option>}\n {children}\n </select>\n <div className={styles['Select__container']}>\n <SelectTypography className={styles['Select__title']} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n\nexport { NativeSelect };\n"],"names":["NativeSelect","sizeYClassNames","none","SizeType","COMPACT","style","defaultValue","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","icon","DropdownIcon","before","onChange","onChangeProp","value","valueProp","restProps","React","useState","title","setTitle","empty","setEmpty","useEnsuredControl","selectRef","useExternRef","useAdaptivity","sizeY","useIsomorphicLayoutEffect","selectedOption","current","options","selectedIndex","text","FormField","Component","classNames","REGULAR","after","select","ref","option","div","SelectTypography"],"mappings":";;;;+BA0HSA;;;eAAAA;;;;;;;;;2DA1Hc;oBACI;6BACG;iCACI;4BACL;0BACJ;yCACiB;4BAEb;yBACa;gCAET;AAGjC,IAAMC;IACJC,IAAI;GACHC,oBAAQ,CAACC,OAAO;AAwBnB;;CAEC,GACD,IAAMJ,eAAe,iBAkBI;QAjBvBK,eAAAA,oCACAC,cAAAA,gDAAe,0BACfC,eAAAA,OACAC,qBAAAA,aACAC,kBAAAA,UACAC,mBAAAA,WACAC,gBAAAA,QACAC,oBAAAA,YACAC,kBAAAA,UACAC,mBAAAA,sCACAC,YAAAA,4CAAa,+BACbC,gBAAAA,6BACAC,MAAAA,8CAAO,qBAACC,0BAAY,uBACpBC,gBAAAA,QACAC,AAAUC,sBAAVD,UACAE,AAAOC,mBAAPD,OACGE;QAhBHnB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAE;;IAGA,IAA0BG,iCAAAA,OAAMC,QAAQ,CAAC,SAAlCC,QAAmBF,oBAAZG,WAAYH;IAC1B,IAA0BA,kCAAAA,OAAMC,QAAQ,CAAC,KAAK,OAAvCG,QAAmBJ,qBAAZK,WAAYL;IAC1B,IAA0BM,qCAAAA,IAAAA,oCAAiB,EAAC;QAC1CzB,cAAAA;QACAO,UAAAA;QACAO,UAAUC;QACVC,OAAOC;IACT,QALOD,QAAmBS,wBAAZX,WAAYW;IAM1B,IAAMC,YAAYC,IAAAA,0BAAY,EAACtB;IAC/B,IAA2BuB,kBAAAA,IAAAA,4BAAa,4BAAbA,gBAAnBC,OAAAA,0CAAQ;IAEhBC,IAAAA,oDAAyB,EAAC,WAAM;YACPJ;QAAvB,IAAMK,iBAAiBL,CAAAA,qBAAAA,UAAUM,OAAO,cAAjBN,gCAAAA,KAAAA,IAAAA,mBAAmBO,OAAO,CAACP,UAAUM,OAAO,CAACE,aAAa,CAAC;QAClF,IAAIH,gBAAgB;YAClBT,SAASS,eAAeI,IAAI;YAC5BX,SAASO,eAAef,KAAK,KAAK,MAAMd,eAAe,IAAI;QAC7D,CAAC;IACH,GAAG;QAACc;QAAOb;KAAS;IAEpB,qBACE,qBAACiC,oBAAS;QACRC,WAAU;QACVjC,WAAWkC,IAAAA,gBAAU,gBAEnB,4BACAzB,mCACAU,8BACAf,sCACAP,UAAU,wCACVA,UAAU,sCACV4B,UAAUhC,oBAAQ,CAAC0C,OAAO,IAAI5C,eAAe,CAACkC,MAAM,EACpDzB;QAEFL,OAAOA;QACPO,YAAYA;QACZC,UAAUA;QACVM,QAAQA;QACR2B,OAAO7B;QACPD,QAAQA;qBAER,qBAAC+B,+CACKvB;QACJX,UAAUA;QACVH,SAAS;QACTU,UAAUA;QACVE,OAAOA;QACP0B,KAAKhB;QAEJxB,6BAAe,qBAACyC;QAAO3B,OAAM;OAAId,cACjCC,yBAEH,qBAACyC;QAAIxC,SAAS;qBACZ,qBAACyC,kCAAgB;QAACzC,SAAS;QAA2BK,YAAYA;OAC/DY;AAKX"}
1
+ {"version":3,"sources":["../../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles['Select--sizeY-none'],\n [SizeType.COMPACT]: styles['Select--sizeY-compact'],\n};\n\nexport interface NativeSelectProps\n extends React.SelectHTMLAttributes<HTMLSelectElement>,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLLabelElement>,\n HasAlign,\n Pick<FormFieldProps, 'before' | 'status'> {\n placeholder?: string;\n multiline?: boolean;\n selectType?: SelectType;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n}\n\nexport interface SelectState {\n value?: React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n title?: string;\n notSelected?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/NativeSelect\n */\nconst NativeSelect = ({\n style,\n defaultValue = '',\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n icon = <DropdownIcon />,\n before,\n onChange: onChangeProp,\n value: valueProp,\n ...restProps\n}: NativeSelectProps) => {\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const [value, onChange] = useEnsuredControl({\n defaultValue,\n disabled,\n onChange: onChangeProp,\n value: valueProp,\n });\n const selectRef = useExternRef(getRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n useIsomorphicLayoutEffect(() => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === '' && placeholder != null);\n }\n }, [value, children]);\n\n return (\n <FormField\n Component=\"label\"\n className={classNames(\n styles['Select'],\n 'vkuiInternalNativeSelect',\n before && styles['Select--hasBefore'],\n empty && styles['Select--empty'],\n multiline && styles['Select--multiline'],\n align === 'center' && styles['Select--align-center'],\n align === 'right' && styles['Select--align-right'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n before={before}\n after={icon}\n status={status}\n >\n <select\n {...restProps}\n disabled={disabled}\n className={styles['Select__el']}\n onChange={onChange}\n value={value}\n ref={selectRef}\n >\n {placeholder && <option value=\"\">{placeholder}</option>}\n {children}\n </select>\n <div className={styles['Select__container']} aria-hidden>\n <SelectTypography className={styles['Select__title']} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n\nexport { NativeSelect };\n"],"names":["NativeSelect","sizeYClassNames","none","SizeType","COMPACT","style","defaultValue","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","icon","DropdownIcon","before","onChange","onChangeProp","value","valueProp","restProps","React","useState","title","setTitle","empty","setEmpty","useEnsuredControl","selectRef","useExternRef","useAdaptivity","sizeY","useIsomorphicLayoutEffect","selectedOption","current","options","selectedIndex","text","FormField","Component","classNames","REGULAR","after","select","ref","option","div","aria-hidden","SelectTypography"],"mappings":";;;;+BA0HSA;;;eAAAA;;;;;;;;;2DA1Hc;oBACI;6BACG;iCACI;4BACL;0BACJ;yCACiB;4BAEb;yBACa;gCAET;AAGjC,IAAMC;IACJC,IAAI;GACHC,oBAAQ,CAACC,OAAO;AAwBnB;;CAEC,GACD,IAAMJ,eAAe,iBAkBI;QAjBvBK,eAAAA,oCACAC,cAAAA,gDAAe,0BACfC,eAAAA,OACAC,qBAAAA,aACAC,kBAAAA,UACAC,mBAAAA,WACAC,gBAAAA,QACAC,oBAAAA,YACAC,kBAAAA,UACAC,mBAAAA,sCACAC,YAAAA,4CAAa,+BACbC,gBAAAA,6BACAC,MAAAA,8CAAO,qBAACC,0BAAY,uBACpBC,gBAAAA,QACAC,AAAUC,sBAAVD,UACAE,AAAOC,mBAAPD,OACGE;QAhBHnB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAE;;IAGA,IAA0BG,iCAAAA,OAAMC,QAAQ,CAAC,SAAlCC,QAAmBF,oBAAZG,WAAYH;IAC1B,IAA0BA,kCAAAA,OAAMC,QAAQ,CAAC,KAAK,OAAvCG,QAAmBJ,qBAAZK,WAAYL;IAC1B,IAA0BM,qCAAAA,IAAAA,oCAAiB,EAAC;QAC1CzB,cAAAA;QACAO,UAAAA;QACAO,UAAUC;QACVC,OAAOC;IACT,QALOD,QAAmBS,wBAAZX,WAAYW;IAM1B,IAAMC,YAAYC,IAAAA,0BAAY,EAACtB;IAC/B,IAA2BuB,kBAAAA,IAAAA,4BAAa,4BAAbA,gBAAnBC,OAAAA,0CAAQ;IAEhBC,IAAAA,oDAAyB,EAAC,WAAM;YACPJ;QAAvB,IAAMK,iBAAiBL,CAAAA,qBAAAA,UAAUM,OAAO,cAAjBN,gCAAAA,KAAAA,IAAAA,mBAAmBO,OAAO,CAACP,UAAUM,OAAO,CAACE,aAAa,CAAC;QAClF,IAAIH,gBAAgB;YAClBT,SAASS,eAAeI,IAAI;YAC5BX,SAASO,eAAef,KAAK,KAAK,MAAMd,eAAe,IAAI;QAC7D,CAAC;IACH,GAAG;QAACc;QAAOb;KAAS;IAEpB,qBACE,qBAACiC,oBAAS;QACRC,WAAU;QACVjC,WAAWkC,IAAAA,gBAAU,gBAEnB,4BACAzB,mCACAU,8BACAf,sCACAP,UAAU,wCACVA,UAAU,sCACV4B,UAAUhC,oBAAQ,CAAC0C,OAAO,IAAI5C,eAAe,CAACkC,MAAM,EACpDzB;QAEFL,OAAOA;QACPO,YAAYA;QACZC,UAAUA;QACVM,QAAQA;QACR2B,OAAO7B;QACPD,QAAQA;qBAER,qBAAC+B,+CACKvB;QACJX,UAAUA;QACVH,SAAS;QACTU,UAAUA;QACVE,OAAOA;QACP0B,KAAKhB;QAEJxB,6BAAe,qBAACyC;QAAO3B,OAAM;OAAId,cACjCC,yBAEH,qBAACyC;QAAIxC,SAAS;QAA+ByC,eAAAA,IAAW;qBACtD,qBAACC,kCAAgB;QAAC1C,SAAS;QAA2BK,YAAYA;OAC/DY;AAKX"}
@@ -41,13 +41,13 @@ var Panel = function(_param) {
41
41
  }), /*#__PURE__*/ _react.createElement(_touch.Touch, {
42
42
  Component: _tooltipContainer.TooltipContainer,
43
43
  className: (0, _vkjs.classNames)("vkuiPanel__in", "vkuiInternalPanel__in")
44
- }, platform === _platform.Platform.IOS && /*#__PURE__*/ _react.createElement("div", {
45
- className: "vkuiInternalPanel__fade"
46
- }), /*#__PURE__*/ _react.createElement("div", {
44
+ }, /*#__PURE__*/ _react.createElement("div", {
47
45
  className: "vkuiPanel__in-before"
48
46
  }), centered ? /*#__PURE__*/ _react.createElement("div", {
49
47
  className: "vkuiPanel__centered"
50
- }, children) : children, /*#__PURE__*/ _react.createElement("div", {
48
+ }, children) : children, platform === _platform.Platform.IOS && /*#__PURE__*/ _react.createElement("div", {
49
+ className: "vkuiInternalPanel__fade"
50
+ }), /*#__PURE__*/ _react.createElement("div", {
51
51
  className: "vkuiPanel__in-after"
52
52
  })));
53
53
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Panel/Panel.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { NavIdProps } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { HasRootRef } from '../../types';\nimport { TooltipContainer } from '../Tooltip/TooltipContainer';\nimport { Touch } from '../Touch/Touch';\nimport styles from './Panel.module.css';\n\nconst sizeXClassNames = {\n none: styles['Panel--sizeX-none'],\n [SizeType.COMPACT]: styles['Panel--sizeX-compact'],\n [SizeType.REGULAR]: styles['Panel--sizeX-regular'],\n};\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement>,\n NavIdProps {\n centered?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Panel\n */\nexport const Panel = ({\n centered = false,\n children,\n getRootRef,\n nav,\n className,\n ...restProps\n}: PanelProps) => {\n const platform = usePlatform();\n const { sizeX = 'none' } = useAdaptivity();\n\n return (\n <div\n {...restProps}\n ref={getRootRef}\n className={classNames(\n styles['Panel'],\n sizeXClassNames[sizeX],\n centered && 'vkuiInternalPanel--centered',\n className,\n )}\n >\n <Touch\n Component={TooltipContainer}\n className={classNames(styles['Panel__in'], 'vkuiInternalPanel__in')}\n >\n {platform === Platform.IOS && <div className=\"vkuiInternalPanel__fade\" />}\n <div className={styles['Panel__in-before']} />\n {centered ? <div className={styles['Panel__centered']}>{children}</div> : children}\n <div className={styles['Panel__in-after']} />\n </Touch>\n </div>\n );\n};\n"],"names":["Panel","sizeXClassNames","none","SizeType","COMPACT","REGULAR","centered","children","getRootRef","nav","className","restProps","platform","usePlatform","useAdaptivity","sizeX","div","ref","classNames","Touch","Component","TooltipContainer","Platform","IOS"],"mappings":";;;;+BA4BaA;;;eAAAA;;;;;;;;2DA5BU;oBACI;6BACG;2BACF;0BACH;wBAEA;gCAEQ;qBACX;IAGE;AAAxB,IAAMC,mBAAkB;IACtBC,IAAI;mBADkB,MAErBC,oBAAQ,CAACC,OAAO,+CAFK,MAGrBD,oBAAQ,CAACE,OAAO,+BAHK;AAgBjB,IAAML,QAAQ,iBAOH;iCANhBM,UAAAA,wCAAW,KAAK,oBAChBC,kBAAAA,UACAC,oBAAAA,YACAC,aAAAA,KACAC,mBAAAA,WACGC;QALHL;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAC5B,IAA2BC,kBAAAA,IAAAA,4BAAa,4BAAbA,gBAAnBC,OAAAA,0CAAQ;IAEhB,qBACE,qBAACC,4CACKL;QACJM,KAAKT;QACLE,WAAWQ,IAAAA,gBAAU,eAEnBjB,eAAe,CAACc,MAAM,EACtBT,YAAY,+BACZI;sBAGF,qBAACS,YAAK;QACJC,WAAWC,kCAAgB;QAC3BX,WAAWQ,IAAAA,gBAAU,mBAAsB;OAE1CN,aAAaU,kBAAQ,CAACC,GAAG,kBAAI,qBAACP;QAAIN,WAAU;sBAC7C,qBAACM;QAAIN,SAAS;QACbJ,yBAAW,qBAACU;QAAIN,SAAS;OAA8BH,YAAkBA,QAAQ,gBAClF,qBAACS;QAAIN,SAAS;;AAItB"}
1
+ {"version":3,"sources":["../../../../src/components/Panel/Panel.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { NavIdProps } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { HasRootRef } from '../../types';\nimport { TooltipContainer } from '../Tooltip/TooltipContainer';\nimport { Touch } from '../Touch/Touch';\nimport styles from './Panel.module.css';\n\nconst sizeXClassNames = {\n none: styles['Panel--sizeX-none'],\n [SizeType.COMPACT]: styles['Panel--sizeX-compact'],\n [SizeType.REGULAR]: styles['Panel--sizeX-regular'],\n};\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement>,\n NavIdProps {\n centered?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Panel\n */\nexport const Panel = ({\n centered = false,\n children,\n getRootRef,\n nav,\n className,\n ...restProps\n}: PanelProps) => {\n const platform = usePlatform();\n const { sizeX = 'none' } = useAdaptivity();\n\n return (\n <div\n {...restProps}\n ref={getRootRef}\n className={classNames(\n styles['Panel'],\n sizeXClassNames[sizeX],\n centered && 'vkuiInternalPanel--centered',\n className,\n )}\n >\n <Touch\n Component={TooltipContainer}\n className={classNames(styles['Panel__in'], 'vkuiInternalPanel__in')}\n >\n <div className={styles['Panel__in-before']} />\n {centered ? <div className={styles['Panel__centered']}>{children}</div> : children}\n {platform === Platform.IOS && <div className=\"vkuiInternalPanel__fade\" />}\n <div className={styles['Panel__in-after']} />\n </Touch>\n </div>\n );\n};\n"],"names":["Panel","sizeXClassNames","none","SizeType","COMPACT","REGULAR","centered","children","getRootRef","nav","className","restProps","platform","usePlatform","useAdaptivity","sizeX","div","ref","classNames","Touch","Component","TooltipContainer","Platform","IOS"],"mappings":";;;;+BA4BaA;;;eAAAA;;;;;;;;2DA5BU;oBACI;6BACG;2BACF;0BACH;wBAEA;gCAEQ;qBACX;IAGE;AAAxB,IAAMC,mBAAkB;IACtBC,IAAI;mBADkB,MAErBC,oBAAQ,CAACC,OAAO,+CAFK,MAGrBD,oBAAQ,CAACE,OAAO,+BAHK;AAgBjB,IAAML,QAAQ,iBAOH;iCANhBM,UAAAA,wCAAW,KAAK,oBAChBC,kBAAAA,UACAC,oBAAAA,YACAC,aAAAA,KACAC,mBAAAA,WACGC;QALHL;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAC5B,IAA2BC,kBAAAA,IAAAA,4BAAa,4BAAbA,gBAAnBC,OAAAA,0CAAQ;IAEhB,qBACE,qBAACC,4CACKL;QACJM,KAAKT;QACLE,WAAWQ,IAAAA,gBAAU,eAEnBjB,eAAe,CAACc,MAAM,EACtBT,YAAY,+BACZI;sBAGF,qBAACS,YAAK;QACJC,WAAWC,kCAAgB;QAC3BX,WAAWQ,IAAAA,gBAAU,mBAAsB;qBAE3C,qBAACF;QAAIN,SAAS;QACbJ,yBAAW,qBAACU;QAAIN,SAAS;OAA8BH,YAAkBA,QAAQ,EACjFK,aAAaU,kBAAQ,CAACC,GAAG,kBAAI,qBAACP;QAAIN,WAAU;sBAC7C,qBAACM;QAAIN,SAAS;;AAItB"}
@@ -14,17 +14,21 @@ export interface PanelHeaderProps extends React.HTMLAttributes<HTMLDivElement>,
14
14
  * Если `false`, то шапка будет в потоке. По умолчанию `true`, но если платформа vkcom, то по умолчанию `false`.
15
15
  */
16
16
  fixed?: boolean;
17
- }
18
- interface PanelHeaderContentProps extends React.HTMLAttributes<HTMLElement>, HasComponent {
17
+ /**
18
+ * По умолчанию как `Component` используется `span`.
19
+ */
20
+ typographyProps?: HasComponent & React.HTMLAttributes<HTMLElement>;
19
21
  }
20
22
  /**
21
23
  * @see https://vkcom.github.io/VKUI/#/PanelHeader
22
24
  */
23
25
  export declare const PanelHeader: {
24
- ({ before, children, after, separator, visor, transparent, shadow, getRef, getRootRef, fixed, className, ...restProps }: PanelHeaderProps): JSX.Element;
26
+ ({ before, children, after, separator, visor, transparent, shadow, getRef, getRootRef, fixed, className, typographyProps, ...restProps }: PanelHeaderProps): JSX.Element;
25
27
  Content: {
26
- ({ children, Component, id }: PanelHeaderContentProps): JSX.Element;
28
+ ({ children, Component, id, }: LegacyPanelHeaderContentProps): JSX.Element;
27
29
  displayName: string;
28
30
  };
29
31
  };
32
+ interface LegacyPanelHeaderContentProps extends React.HTMLAttributes<HTMLElement>, HasComponent {
33
+ }
30
34
  export {};