@vkontakte/vkui 7.9.2 → 7.10.1

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 (215) hide show
  1. package/README.md +1 -0
  2. package/dist/components/Button/Button.js +6 -4
  3. package/dist/components/Button/Button.js.map +1 -1
  4. package/dist/components/CarouselBase/CarouselBase.d.ts +1 -1
  5. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
  6. package/dist/components/CarouselBase/CarouselBase.js +14 -6
  7. package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
  8. package/dist/components/CarouselBase/ScrollArrows.d.ts +1 -2
  9. package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -1
  10. package/dist/components/CarouselBase/ScrollArrows.js +2 -2
  11. package/dist/components/CarouselBase/ScrollArrows.js.map +1 -1
  12. package/dist/components/Clickable/useState.d.ts +15 -0
  13. package/dist/components/Clickable/useState.d.ts.map +1 -1
  14. package/dist/components/Clickable/useState.js +1 -1
  15. package/dist/components/Clickable/useState.js.map +1 -1
  16. package/dist/components/CustomSelect/CustomSelect.js +1 -1
  17. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  18. package/dist/components/Footer/Footer.d.ts.map +1 -1
  19. package/dist/components/Footer/Footer.js +2 -1
  20. package/dist/components/Footer/Footer.js.map +1 -1
  21. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  22. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  23. package/dist/components/HorizontalScroll/HorizontalScroll.js +20 -10
  24. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  25. package/dist/components/SubnavigationBar/SubnavigationBar.d.ts +6 -2
  26. package/dist/components/SubnavigationBar/SubnavigationBar.d.ts.map +1 -1
  27. package/dist/components/SubnavigationBar/SubnavigationBar.js +6 -3
  28. package/dist/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  29. package/dist/components/Typography/Typography.d.ts +5 -1
  30. package/dist/components/Typography/Typography.d.ts.map +1 -1
  31. package/dist/components/Typography/Typography.js +9 -3
  32. package/dist/components/Typography/Typography.js.map +1 -1
  33. package/dist/components.css +1 -1
  34. package/dist/components.css.map +1 -1
  35. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +4 -4
  36. package/dist/cssm/components/Alert/Alert.module.css +4 -4
  37. package/dist/cssm/components/Button/Button.js +3 -1
  38. package/dist/cssm/components/Button/Button.js.map +1 -1
  39. package/dist/cssm/components/CarouselBase/CarouselBase.js +10 -5
  40. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
  41. package/dist/cssm/components/CarouselBase/CarouselBase.module.css +1 -1
  42. package/dist/cssm/components/CarouselBase/ScrollArrows.js +2 -2
  43. package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -1
  44. package/dist/cssm/components/CellButton/CellButton.module.css +4 -2
  45. package/dist/cssm/components/Clickable/useState.js +1 -1
  46. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  47. package/dist/cssm/components/CustomSelect/CustomSelect.js +1 -1
  48. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  49. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +2 -2
  50. package/dist/cssm/components/DateInput/DateInput.module.css +3 -2
  51. package/dist/cssm/components/Epic/Epic.module.css +2 -1
  52. package/dist/cssm/components/FixedLayout/FixedLayout.module.css +6 -3
  53. package/dist/cssm/components/Flex/Flex.module.css +12 -4
  54. package/dist/cssm/components/Footer/Footer.js +1 -0
  55. package/dist/cssm/components/Footer/Footer.js.map +1 -1
  56. package/dist/cssm/components/Footer/Footer.module.css +0 -1
  57. package/dist/cssm/components/FormField/FormField.module.css +10 -6
  58. package/dist/cssm/components/FormItem/FormItem.module.css +24 -12
  59. package/dist/cssm/components/GridAvatar/GridAvatar.module.css +1 -1
  60. package/dist/cssm/components/Group/Group.module.css +5 -2
  61. package/dist/cssm/components/HorizontalCell/HorizontalCell.module.css +4 -2
  62. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +14 -8
  63. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  64. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +3 -3
  65. package/dist/cssm/components/IconButton/IconButton.module.css +6 -2
  66. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +4 -2
  67. package/dist/cssm/components/ModalCard/ModalCard.module.css +2 -1
  68. package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +14 -10
  69. package/dist/cssm/components/ModalPage/ModalPage.module.css +2 -1
  70. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +5 -3
  71. package/dist/cssm/components/Panel/Panel.module.css +4 -2
  72. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
  73. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +2 -2
  74. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +2 -2
  75. package/dist/cssm/components/Removable/Removable.module.css +9 -4
  76. package/dist/cssm/components/Root/Root.module.css +8 -8
  77. package/dist/cssm/components/Search/Search.module.css +2 -3
  78. package/dist/cssm/components/Snackbar/Snackbar.module.css +4 -2
  79. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +15 -15
  80. package/dist/cssm/components/SplitLayout/SplitLayout.module.css +8 -4
  81. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js +4 -3
  82. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  83. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.module.css +9 -0
  84. package/dist/cssm/components/Switch/Switch.module.css +32 -20
  85. package/dist/cssm/components/Typography/Typography.js +7 -2
  86. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  87. package/dist/cssm/components/Typography/Typography.module.css +12 -0
  88. package/dist/cssm/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js +1 -1
  89. package/dist/cssm/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js.map +1 -1
  90. package/dist/cssm/hooks/useKeyboardInputTracker.js +4 -4
  91. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  92. package/dist/cssm/index.js +1 -0
  93. package/dist/cssm/index.js.map +1 -1
  94. package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
  95. package/dist/cssm/lib/animation/useReducedMotion.js +7 -2
  96. package/dist/cssm/lib/animation/useReducedMotion.js.map +1 -1
  97. package/dist/cssm/lib/dom.js +2 -2
  98. package/dist/cssm/lib/dom.js.map +1 -1
  99. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  100. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +1 -1
  101. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  102. package/dist/cssm/styles/constants.css +2 -1
  103. package/dist/cssm/styles/customMedias.generated.css +21 -21
  104. package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.d.ts.map +1 -1
  105. package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js +1 -1
  106. package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js.map +1 -1
  107. package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
  108. package/dist/hooks/useKeyboardInputTracker.js +4 -4
  109. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  110. package/dist/index.d.ts +1 -0
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +1 -0
  113. package/dist/index.js.map +1 -1
  114. package/dist/lib/adaptivity/functions.d.ts.map +1 -1
  115. package/dist/lib/adaptivity/functions.js.map +1 -1
  116. package/dist/lib/animation/useReducedMotion.d.ts +6 -0
  117. package/dist/lib/animation/useReducedMotion.d.ts.map +1 -1
  118. package/dist/lib/animation/useReducedMotion.js +7 -2
  119. package/dist/lib/animation/useReducedMotion.js.map +1 -1
  120. package/dist/lib/dom.d.ts.map +1 -1
  121. package/dist/lib/dom.js +2 -2
  122. package/dist/lib/dom.js.map +1 -1
  123. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +1 -1
  124. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  125. package/dist/lib/sheet/controllers/BottomSheetController.js +1 -1
  126. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  127. package/dist/vkui.css +1 -1
  128. package/dist/vkui.css.map +1 -1
  129. package/package.json +2 -1
  130. package/src/components/ActionSheet/ActionSheet.module.css +4 -4
  131. package/src/components/Alert/Alert.module.css +4 -4
  132. package/src/components/Button/Button.tsx +1 -1
  133. package/src/components/CarouselBase/CarouselBase.module.css +1 -1
  134. package/src/components/CarouselBase/CarouselBase.module.css.d.ts.map +1 -1
  135. package/src/components/CarouselBase/CarouselBase.tsx +10 -4
  136. package/src/components/CarouselBase/ScrollArrows.tsx +1 -3
  137. package/src/components/CellButton/CellButton.module.css +2 -1
  138. package/src/components/CellButton/CellButton.module.css.d.ts.map +1 -1
  139. package/src/components/Clickable/useState.tsx +8 -3
  140. package/src/components/CustomSelect/CustomSelect.tsx +1 -1
  141. package/src/components/CustomSelectOption/CustomSelectOption.module.css +1 -1
  142. package/src/components/DateInput/DateInput.module.css +3 -2
  143. package/src/components/DateInput/DateInput.module.css.d.ts.map +1 -1
  144. package/src/components/Epic/Epic.module.css +2 -1
  145. package/src/components/FixedLayout/FixedLayout.module.css +4 -2
  146. package/src/components/FixedLayout/FixedLayout.module.css.d.ts.map +1 -1
  147. package/src/components/Flex/Flex.module.css +6 -2
  148. package/src/components/Flex/Flex.module.css.d.ts.map +1 -1
  149. package/src/components/Footer/Footer.module.css +0 -1
  150. package/src/components/Footer/Footer.tsx +1 -0
  151. package/src/components/FormField/FormField.module.css +10 -6
  152. package/src/components/FormField/FormField.module.css.d.ts.map +1 -1
  153. package/src/components/FormItem/FormItem.module.css +12 -6
  154. package/src/components/FormItem/FormItem.module.css.d.ts.map +1 -1
  155. package/src/components/GridAvatar/GridAvatar.module.css +1 -1
  156. package/src/components/GridAvatar/GridAvatar.module.css.d.ts.map +1 -1
  157. package/src/components/Group/Group.module.css +5 -2
  158. package/src/components/Group/Group.module.css.d.ts.map +1 -1
  159. package/src/components/HorizontalCell/HorizontalCell.module.css +4 -2
  160. package/src/components/HorizontalCell/HorizontalCell.module.css.d.ts.map +1 -1
  161. package/src/components/HorizontalScroll/HorizontalScroll.module.css +3 -3
  162. package/src/components/HorizontalScroll/HorizontalScroll.module.css.d.ts.map +1 -1
  163. package/src/components/HorizontalScroll/HorizontalScroll.tsx +15 -7
  164. package/src/components/IconButton/IconButton.module.css +6 -2
  165. package/src/components/IconButton/IconButton.module.css.d.ts.map +1 -1
  166. package/src/components/MiniInfoCell/MiniInfoCell.module.css +4 -2
  167. package/src/components/MiniInfoCell/MiniInfoCell.module.css.d.ts.map +1 -1
  168. package/src/components/ModalCard/ModalCard.module.css +2 -1
  169. package/src/components/ModalCard/ModalCard.module.css.d.ts.map +1 -1
  170. package/src/components/ModalCardBase/ModalCardBase.module.css +7 -5
  171. package/src/components/ModalCardBase/ModalCardBase.module.css.d.ts.map +1 -1
  172. package/src/components/ModalPage/ModalPage.module.css +2 -1
  173. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  174. package/src/components/ModalPageHeader/ModalPageHeader.module.css +5 -2
  175. package/src/components/ModalPageHeader/ModalPageHeader.module.css.d.ts.map +1 -1
  176. package/src/components/Panel/Panel.module.css +2 -1
  177. package/src/components/Panel/Panel.module.css.d.ts.map +1 -1
  178. package/src/components/PanelHeader/PanelHeader.module.css +1 -1
  179. package/src/components/PanelHeader/PanelHeader.module.css.d.ts.map +1 -1
  180. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +2 -2
  181. package/src/components/PopoutWrapper/PopoutWrapper.module.css +2 -2
  182. package/src/components/Removable/Removable.module.css +9 -4
  183. package/src/components/Removable/Removable.module.css.d.ts.map +1 -1
  184. package/src/components/Root/Root.module.css +8 -8
  185. package/src/components/Search/Search.module.css +2 -2
  186. package/src/components/Snackbar/Snackbar.module.css +4 -2
  187. package/src/components/Snackbar/Snackbar.module.css.d.ts.map +1 -1
  188. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +15 -15
  189. package/src/components/SplitLayout/SplitLayout.module.css +4 -2
  190. package/src/components/SplitLayout/SplitLayout.module.css.d.ts.map +1 -1
  191. package/src/components/SubnavigationBar/SubnavigationBar.module.css +9 -0
  192. package/src/components/SubnavigationBar/SubnavigationBar.module.css.d.ts.map +1 -1
  193. package/src/components/SubnavigationBar/SubnavigationBar.tsx +14 -3
  194. package/src/components/Switch/Switch.module.css +32 -20
  195. package/src/components/Switch/Switch.module.css.d.ts.map +1 -1
  196. package/src/components/Typography/Typography.module.css +12 -0
  197. package/src/components/Typography/Typography.module.css.d.ts.map +1 -1
  198. package/src/components/Typography/Typography.tsx +12 -0
  199. package/src/hooks/useDraggableWithDomApi/useDraggableWithDomApi.ts +7 -1
  200. package/src/hooks/useKeyboardInputTracker.ts +20 -4
  201. package/src/index.ts +1 -0
  202. package/src/lib/adaptivity/functions.ts +36 -6
  203. package/src/lib/animation/useReducedMotion.ts +7 -1
  204. package/src/lib/dom.tsx +11 -2
  205. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +1 -1
  206. package/src/lib/sheet/controllers/BottomSheetController.ts +1 -1
  207. package/src/styles/constants.css +2 -1
  208. package/src/styles/customMedias.generated.css +21 -21
  209. package/dist/cssm/hooks/useAdaptivityHasPointer.js +0 -15
  210. package/dist/cssm/hooks/useAdaptivityHasPointer.js.map +0 -1
  211. package/dist/hooks/useAdaptivityHasPointer.d.ts +0 -9
  212. package/dist/hooks/useAdaptivityHasPointer.d.ts.map +0 -1
  213. package/dist/hooks/useAdaptivityHasPointer.js +0 -15
  214. package/dist/hooks/useAdaptivityHasPointer.js.map +0 -1
  215. package/src/hooks/useAdaptivityHasPointer.ts +0 -25
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { easeInOutSine } from '../../lib/fx';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow, type ScrollArrowProps } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate.\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при нажатии на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при нажатии на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n /**\n * Размер стрелок.\n */\n arrowSize?: ScrollArrowProps['size'];\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n /**\n * Показывать ли стрелки.\n */\n showArrows?: boolean | 'always';\n /**\n * Длительность анимации скролла.\n */\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n /**\n * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении предыдущего элемента.\n */\n prevButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении следующего элемента.\n */\n nextButtonTestId?: string;\n /**\n * Позволяет поменять тег используемый для обертки над контентом, прокинутым в `children`.\n */\n ContentWrapperComponent?: React.ElementType;\n /**\n * `ref` для обертки над контентом, прокинутым в `children`.\n */\n contentWrapperRef?: React.Ref<HTMLElement>;\n /**\n * Специфичный `className` для обертки над контентом, прокинутым в `children`.\n */\n contentWrapperClassName?: string;\n}\n\n/**\n * Timing method.\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю.\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445.\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250.\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * Крайнее значение сдвига.\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n const startScrollLeft = roundUpElementScrollLeft(scrollElement);\n const remappedStartScrollLeft = startScrollLeft * (textDirection === 'rtl' ? -1 : 1);\n\n let endScrollLeft = getScrollPosition(remappedStartScrollLeft);\n\n const diff = endScrollLeft - remappedStartScrollLeft;\n if (textDirection === 'rtl') {\n endScrollLeft = startScrollLeft - diff;\n }\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль.\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkui.io/components/horizontal-scroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'm',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n prevButtonTestId,\n nextButtonTestId,\n // ContentWrapper\n ContentWrapperComponent = 'div',\n contentWrapperRef,\n contentWrapperClassName,\n ...restProps\n}: HorizontalScrollProps): React.ReactNode => {\n const [canScrollStart, setCanScrollStart] = React.useState(false);\n const [canScrollEnd, setCanScrollEnd] = React.useState(false);\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({\n focusVisible,\n });\n\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection: direction,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, direction, setCanScrollEnd],\n );\n\n const scrollToStart = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToEnd = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n const scrollLeft = scrollElement.scrollLeft;\n\n setCanScrollStart(isRtl ? scrollLeft < 0 : scrollLeft > 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, hasPointer, scrollerRef, isRtl]);\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n useIsomorphicLayoutEffect(\n function addWheelEventHandler() {\n const scrollEl = scrollerRef.current;\n if (!scrollEl) {\n return noop;\n }\n /**\n * Прокрутка с помощью любого колеса мыши.\n */\n const onWheel = (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n };\n\n const listenerOptions = { passive: false };\n\n if (scrollOnAnyWheel) {\n scrollEl.addEventListener('wheel', onWheel, listenerOptions);\n }\n scrollEl.addEventListener('scroll', calculateArrowsVisibility, listenerOptions);\n\n return () => {\n if (scrollOnAnyWheel) {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions для wheel нет passive свойства\n scrollEl.removeEventListener('wheel', onWheel, listenerOptions);\n }\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions для scroll нет passive свойства\n scrollEl.removeEventListener('scroll', calculateArrowsVisibility, listenerOptions);\n };\n },\n [scrollOnAnyWheel, calculateArrowsVisibility, scrollerRef],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles.withConstArrows,\n isRtl && styles.rtl,\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollStart && (\n <ScrollArrow\n data-testid={prevButtonTestId}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowLeft)}\n onClick={scrollToStart}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollEnd && (\n <ScrollArrow\n data-testid={nextButtonTestId}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowRight)}\n onClick={scrollToEnd}\n />\n )}\n <div\n className={classNames(styles.in, focusVisibleClassNames)}\n ref={scrollerRef}\n tabIndex={0}\n {...focusEvents}\n >\n <ContentWrapperComponent\n className={classNames(styles.inWrapper, contentWrapperClassName)}\n ref={contentWrapperRef}\n >\n {children}\n </ContentWrapperComponent>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","noop","useAdaptivityHasPointer","useConfigDirection","useExternRef","useFocusVisible","useFocusVisibleClassName","easeInOutSine","useIsomorphicLayoutEffect","RootComponent","ScrollArrow","styles","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","remappedStartScrollLeft","endScrollLeft","diff","abs","startTime","scroll","time","elapsed","min","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","HorizontalScroll","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","prevButtonTestId","nextButtonTestId","ContentWrapperComponent","contentWrapperRef","contentWrapperClassName","restProps","canScrollStart","setCanScrollStart","useState","canScrollEnd","setCanScrollEnd","focusVisible","focusEvents","focusVisibleClassNames","direction","isRtl","isCustomScrollingRef","useRef","scrollerRef","hasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToStart","i","scrollToEnd","calculateArrowsVisibility","useEffect","addWheelEventHandler","scrollEl","onWheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","listenerOptions","passive","addEventListener","removeEventListener","baseClassName","host","withConstArrows","rtl","onMouseEnter","undefined","data-testid","size","offsetY","aria-hidden","tabIndex","className","arrow","arrowLeft","onClick","arrowRight","div","in","ref","inWrapper"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { easeInOutSine } from '../../lib/fx';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { useHover } from '../Clickable/useState';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow, type ScrollArrowProps } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate.\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при нажатии на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при нажатии на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n /**\n * Размер стрелок.\n */\n arrowSize?: ScrollArrowProps['size'];\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n /**\n * Показывать ли стрелки.\n */\n showArrows?: boolean | 'always';\n /**\n * Длительность анимации скролла.\n */\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n /**\n * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении предыдущего элемента.\n */\n prevButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении следующего элемента.\n */\n nextButtonTestId?: string;\n /**\n * Позволяет поменять тег используемый для обертки над контентом, прокинутым в `children`.\n */\n ContentWrapperComponent?: React.ElementType;\n /**\n * `ref` для обертки над контентом, прокинутым в `children`.\n */\n contentWrapperRef?: React.Ref<HTMLElement>;\n /**\n * Специфичный `className` для обертки над контентом, прокинутым в `children`.\n */\n contentWrapperClassName?: string;\n}\n\n/**\n * Timing method.\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю.\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445.\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250.\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * Крайнее значение сдвига.\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n const startScrollLeft = roundUpElementScrollLeft(scrollElement);\n const remappedStartScrollLeft = startScrollLeft * (textDirection === 'rtl' ? -1 : 1);\n\n let endScrollLeft = getScrollPosition(remappedStartScrollLeft);\n\n const diff = endScrollLeft - remappedStartScrollLeft;\n if (textDirection === 'rtl') {\n endScrollLeft = startScrollLeft - diff;\n }\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль.\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkui.io/components/horizontal-scroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'm',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n prevButtonTestId,\n nextButtonTestId,\n // ContentWrapper\n ContentWrapperComponent = 'div',\n contentWrapperRef,\n contentWrapperClassName,\n onPointerEnter,\n onPointerLeave,\n onMouseEnter,\n ...restProps\n}: HorizontalScrollProps): React.ReactNode => {\n const [canScrollStart, setCanScrollStart] = React.useState(false);\n const [canScrollEnd, setCanScrollEnd] = React.useState(false);\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({\n focusVisible,\n });\n\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const { isHovered, ...hoverHandlers } = useHover();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection: direction,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, direction, setCanScrollEnd],\n );\n\n const scrollToStart = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToEnd = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n const scrollLeft = scrollElement.scrollLeft;\n\n setCanScrollStart(isRtl ? scrollLeft < 0 : scrollLeft > 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, scrollerRef, isRtl]);\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n useIsomorphicLayoutEffect(\n function addWheelEventHandler() {\n const scrollEl = scrollerRef.current;\n if (!scrollEl) {\n return noop;\n }\n /**\n * Прокрутка с помощью любого колеса мыши.\n */\n const onWheel = (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n };\n\n const listenerOptions = { passive: false };\n\n if (scrollOnAnyWheel) {\n scrollEl.addEventListener('wheel', onWheel, listenerOptions);\n }\n scrollEl.addEventListener('scroll', calculateArrowsVisibility, listenerOptions);\n\n return () => {\n if (scrollOnAnyWheel) {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions для wheel нет passive свойства\n scrollEl.removeEventListener('wheel', onWheel, listenerOptions);\n }\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions для scroll нет passive свойства\n scrollEl.removeEventListener('scroll', calculateArrowsVisibility, listenerOptions);\n };\n },\n [scrollOnAnyWheel, calculateArrowsVisibility, scrollerRef],\n );\n\n const handlers = mergeCalls(hoverHandlers, { onPointerEnter, onPointerLeave });\n\n return (\n <RootComponent\n {...restProps}\n {...handlers}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalHorizontalScroll',\n (showArrows === 'always' || isHovered) && styles.showArrows,\n isRtl && styles.rtl,\n )}\n // FIXME: onMouseEnter из restProps затирается, а при callMultiply орет линтер на рефы.\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && canScrollStart && (\n <ScrollArrow\n data-testid={prevButtonTestId}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowLeft)}\n onClick={scrollToStart}\n />\n )}\n {showArrows && canScrollEnd && (\n <ScrollArrow\n data-testid={nextButtonTestId}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowRight)}\n onClick={scrollToEnd}\n />\n )}\n <div\n className={classNames(styles.in, focusVisibleClassNames)}\n ref={scrollerRef}\n tabIndex={0}\n {...focusEvents}\n >\n <ContentWrapperComponent\n className={classNames(styles.inWrapper, contentWrapperClassName)}\n ref={contentWrapperRef}\n >\n {children}\n </ContentWrapperComponent>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","noop","useConfigDirection","useExternRef","useFocusVisible","useFocusVisibleClassName","easeInOutSine","mergeCalls","useIsomorphicLayoutEffect","useHover","RootComponent","ScrollArrow","styles","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","remappedStartScrollLeft","endScrollLeft","diff","abs","startTime","scroll","time","elapsed","min","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","HorizontalScroll","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","prevButtonTestId","nextButtonTestId","ContentWrapperComponent","contentWrapperRef","contentWrapperClassName","onPointerEnter","onPointerLeave","onMouseEnter","restProps","canScrollStart","setCanScrollStart","useState","canScrollEnd","setCanScrollEnd","focusVisible","focusEvents","focusVisibleClassNames","direction","isRtl","isCustomScrollingRef","useRef","scrollerRef","isHovered","hoverHandlers","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToStart","i","scrollToEnd","calculateArrowsVisibility","useEffect","addWheelEventHandler","scrollEl","onWheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","listenerOptions","passive","addEventListener","removeEventListener","handlers","baseClassName","host","rtl","data-testid","size","offsetY","aria-hidden","tabIndex","className","arrow","arrowLeft","onClick","arrowRight","div","in","ref","inWrapper"],"mappings":"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"}
@@ -43,8 +43,7 @@
43
43
  opacity: 0;
44
44
  }
45
45
 
46
- .host:hover .arrow,
47
- .withConstArrows .arrow {
46
+ .showArrows .arrow {
48
47
  opacity: var(--vkui--opacity_disable_accessibility);
49
48
  }
50
49
 
@@ -75,7 +74,8 @@
75
74
 
76
75
  :global(.vkuiInternalTabs--withGaps) .inWrapper::after,
77
76
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
78
- :global(.vkuiInternalTabs--withGaps) .inWrapper::before {
77
+ :global(.vkuiInternalTabs--withGaps)
78
+ .inWrapper::before {
79
79
  display: block;
80
80
  flex-shrink: 0;
81
81
  inline-size: var(--vkui--size_base_padding_horizontal--regular);
@@ -119,9 +119,13 @@
119
119
 
120
120
  :global(.vkuiInternalFormItem--removable) :global(.vkuiInternalRemovable__content) > .host,
121
121
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
122
- :global(.vkuiInternalFormLayoutGroup--removable) :global(.vkuiInternalRemovable__content) > .host,
122
+ :global(.vkuiInternalFormLayoutGroup--removable)
123
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
124
+ :global(.vkuiInternalRemovable__content)
125
+ > .host,
123
126
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
124
- :global(.vkuiInternalFormField__after) .host {
127
+ :global(.vkuiInternalFormField__after)
128
+ .host {
125
129
  display: flex;
126
130
  align-content: center;
127
131
  align-items: center;
@@ -80,7 +80,9 @@
80
80
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
81
81
 
82
82
  .modeAdd .middle :global(.vkuiIcon),
83
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
84
- .modeMore .middle :global(.vkuiIcon) {
83
+ .modeMore
84
+ .middle
85
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
86
+ :global(.vkuiIcon) {
85
87
  color: var(--vkui--color_icon_accent_themed);
86
88
  }
@@ -30,7 +30,8 @@
30
30
  * Для этого также нужны `inline-size: auto` и `margin-inline: auto`.
31
31
  */
32
32
  inset-block-end: calc(
33
- var(--vkui--spacing_size_m) + var(--vkui_internal_ModalCard--safeAreaInsetBottom)
33
+ var(--vkui--spacing_size_m) +
34
+ var(--vkui_internal_ModalCard--safeAreaInsetBottom)
34
35
  );
35
36
  inset-inline: var(--vkui--spacing_size_m);
36
37
  box-sizing: border-box;
@@ -19,12 +19,14 @@
19
19
 
20
20
  .withSafeZone .container {
21
21
  -webkit-padding-before: calc(
22
- var(--vkui_internal--dismiss_icon_height) + var(--vkui_internal--dismiss_icon_padding) +
23
- var(--vkui_internal--dismiss_icon_safe_offset)
22
+ var(--vkui_internal--dismiss_icon_height) +
23
+ var(--vkui_internal--dismiss_icon_padding) +
24
+ var(--vkui_internal--dismiss_icon_safe_offset)
24
25
  );
25
26
  padding-block-start: calc(
26
- var(--vkui_internal--dismiss_icon_height) + var(--vkui_internal--dismiss_icon_padding) +
27
- var(--vkui_internal--dismiss_icon_safe_offset)
27
+ var(--vkui_internal--dismiss_icon_height) +
28
+ var(--vkui_internal--dismiss_icon_padding) +
29
+ var(--vkui_internal--dismiss_icon_safe_offset)
28
30
  );
29
31
  }
30
32
 
@@ -103,13 +105,15 @@
103
105
 
104
106
  .withSafeZone.desktop .container {
105
107
  -webkit-padding-before: calc(
106
- var(--vkui_internal--dismiss_icon_height) + var(--vkui_internal--dismiss_icon_padding) +
107
- var(--vkui_internal--dismiss_icon_safe_offset) +
108
- var(--vkui_internal--dismiss_icon_desktop_offset)
108
+ var(--vkui_internal--dismiss_icon_height) +
109
+ var(--vkui_internal--dismiss_icon_padding) +
110
+ var(--vkui_internal--dismiss_icon_safe_offset) +
111
+ var(--vkui_internal--dismiss_icon_desktop_offset)
109
112
  );
110
113
  padding-block-start: calc(
111
- var(--vkui_internal--dismiss_icon_height) + var(--vkui_internal--dismiss_icon_padding) +
112
- var(--vkui_internal--dismiss_icon_safe_offset) +
113
- var(--vkui_internal--dismiss_icon_desktop_offset)
114
+ var(--vkui_internal--dismiss_icon_height) +
115
+ var(--vkui_internal--dismiss_icon_padding) +
116
+ var(--vkui_internal--dismiss_icon_safe_offset) +
117
+ var(--vkui_internal--dismiss_icon_desktop_offset)
114
118
  );
115
119
  }
@@ -26,7 +26,8 @@
26
26
 
27
27
  .hostMobileSafeAreaInsetTopWithCustomOffset {
28
28
  max-block-size: calc(
29
- 100% - (var(--vkui_internal--safe_area_inset_top) + var(--vkui_internal--panel_header_height))
29
+ 100% -
30
+ (var(--vkui_internal--safe_area_inset_top) + var(--vkui_internal--panel_header_height))
30
31
  );
31
32
  }
32
33
 
@@ -15,9 +15,11 @@
15
15
  padding-inline: 8px;
16
16
  }
17
17
 
18
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
19
-
20
- .host :global(.vkuiIcon--dismiss_24), /* Note: <Icon24Dismiss /> по документации используется только для iOS */
18
+ .host
19
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
20
+ :global(
21
+ .vkuiIcon--dismiss_24
22
+ ) /* Note: <Icon24Dismiss /> по документации используется только для iOS */,
21
23
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
22
24
  .host :global(.vkuiIcon--cancel_24) {
23
25
  color: var(--vkui--color_icon_secondary);
@@ -87,10 +87,12 @@
87
87
  -webkit-padding-after: var(--vkui_internal--tabbar_height);
88
88
  padding-block-end: var(--vkui_internal--tabbar_height);
89
89
  -webkit-padding-after: calc(
90
- var(--vkui_internal--safe_area_inset_bottom) + var(--vkui_internal--tabbar_height)
90
+ var(--vkui_internal--safe_area_inset_bottom) +
91
+ var(--vkui_internal--tabbar_height)
91
92
  );
92
93
  padding-block-end: calc(
93
- var(--vkui_internal--safe_area_inset_bottom) + var(--vkui_internal--tabbar_height)
94
+ var(--vkui_internal--safe_area_inset_bottom) +
95
+ var(--vkui_internal--tabbar_height)
94
96
  );
95
97
  }
96
98
 
@@ -281,7 +281,7 @@
281
281
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
282
282
 
283
283
  .vkcom.sizeXRegular:not(:global(.vkuiInternalModalPageHeader__in)):not(.sep):not(.trnsp)
284
- .in::after {
284
+ .in::after {
285
285
  position: absolute;
286
286
  inset-block-end: 0;
287
287
  inset-inline: var(--vkui--size_border--regular);
@@ -89,8 +89,8 @@
89
89
  }
90
90
 
91
91
  /**
92
- * VKCOM
93
- */
92
+ * VKCOM
93
+ */
94
94
 
95
95
  .vkcom {
96
96
  color: var(--vkui--color_text_secondary);
@@ -38,8 +38,8 @@
38
38
 
39
39
  .closing .overlay {
40
40
  opacity: 0;
41
- /* prettier-ignore */
42
- animation: animation-full-fade-out var(--vkui--animation_duration_m) var(--vkui--animation_easing_default) both;
41
+ animation: animation-full-fade-out var(--vkui--animation_duration_m)
42
+ var(--vkui--animation_easing_default) both;
43
43
  }
44
44
 
45
45
  .masked .overlay {
@@ -4,8 +4,9 @@
4
4
  align-items: center;
5
5
  transform: translateX(
6
6
  calc(
7
- -1px * var(--vkui_internal_Removable_remove_offset) *
8
- var(--vkui_internal_Removable_remove_offset_direction)
7
+ -1px *
8
+ var(--vkui_internal_Removable_remove_offset) *
9
+ var(--vkui_internal_Removable_remove_offset_direction)
9
10
  )
10
11
  );
11
12
 
@@ -135,7 +136,8 @@
135
136
 
136
137
  :global(.vkuiInternalFormItem--removable) .content,
137
138
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
138
- :global(.vkuiInternalFormLayoutGroup--removable) .content {
139
+ :global(.vkuiInternalFormLayoutGroup--removable)
140
+ .content {
139
141
  flex-wrap: wrap;
140
142
  align-items: flex-start;
141
143
  }
@@ -148,7 +150,10 @@
148
150
 
149
151
  :global(.vkuiInternalFormItem--withTop) :global(.vkuiInternalFormItem__removable) ~ .offset,
150
152
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
151
- :global(.vkuiInternalFormLayoutGroup--removable) :global(.vkuiInternalFormItem--withTop) ~ .offset {
153
+ :global(.vkuiInternalFormLayoutGroup--removable)
154
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
155
+ :global(.vkuiInternalFormItem--withTop)
156
+ ~ .offset {
152
157
  display: block;
153
158
  order: -1;
154
159
  inline-size: 100%;
@@ -25,13 +25,13 @@
25
25
  }
26
26
 
27
27
  .viewShowForward {
28
- /* prettier-ignore */
29
- animation: root-animation-show-forward var(--vkui_internal--root_animation_duration) var(--vkui--animation_easing_platform);
28
+ animation: root-animation-show-forward var(--vkui_internal--root_animation_duration)
29
+ var(--vkui--animation_easing_platform);
30
30
  }
31
31
 
32
32
  .viewHideBack {
33
- /* prettier-ignore */
34
- animation: root-animation-hide-back var(--vkui_internal--root_animation_duration) var(--vkui--animation_easing_platform) forwards;
33
+ animation: root-animation-hide-back var(--vkui_internal--root_animation_duration)
34
+ var(--vkui--animation_easing_platform) forwards;
35
35
  }
36
36
 
37
37
  .transition .view {
@@ -63,13 +63,13 @@
63
63
  }
64
64
 
65
65
  .ios .viewShowBack::after {
66
- /* prettier-ignore */
67
- animation: root-ios-overlay-animation-show-back var(--vkui_internal--root_animation_duration) var(--vkui--animation_easing_platform) forwards;
66
+ animation: root-ios-overlay-animation-show-back var(--vkui_internal--root_animation_duration)
67
+ var(--vkui--animation_easing_platform) forwards;
68
68
  }
69
69
 
70
70
  .ios .viewHideForward::after {
71
- /* prettier-ignore */
72
- animation: root-ios-overlay-animation-hide-forward var(--vkui_internal--root_animation_duration) var(--vkui--animation_easing_platform);
71
+ animation: root-ios-overlay-animation-hide-forward var(--vkui_internal--root_animation_duration)
72
+ var(--vkui--animation_easing_platform);
73
73
  }
74
74
 
75
75
  @media screen and (prefers-reduced-motion: reduce) {
@@ -38,7 +38,7 @@
38
38
  flex-basis: 0%;
39
39
  /**
40
40
  * Костыль для PanelHeader. Необходимо для растягивания на всю ширину.
41
- */
41
+ */
42
42
  inline-size: 10000px;
43
43
  block-size: var(--vkui_internal--search_height);
44
44
  overflow: hidden;
@@ -80,7 +80,6 @@
80
80
  box-sizing: border-box;
81
81
  flex-grow: 1;
82
82
  inline-size: -webkit-fill-available;
83
- inline-size: -moz-available;
84
83
  inline-size: stretch; /* автопрефиксер добавит фолбеки https://caniuse.com/mdn-css_properties_width_stretch */
85
84
  min-inline-size: 0;
86
85
  max-inline-size: 100%;
@@ -152,7 +151,7 @@
152
151
  transform: translate3d(
153
152
  calc(
154
153
  var(--vkui_internal--search_shift_direction) *
155
- calc(100% - var(--vkui_internal--search_icon_size))
154
+ calc(100% - var(--vkui_internal--search_icon_size))
156
155
  ),
157
156
  0,
158
157
  0
@@ -37,13 +37,15 @@
37
37
 
38
38
  .placementBottomStart {
39
39
  --vkui_internal--snackbar_direction: calc(
40
- -1 * var(--vkui_internal--snackbar_animation_text_direction)
40
+ -1 *
41
+ var(--vkui_internal--snackbar_animation_text_direction)
41
42
  );
42
43
  }
43
44
 
44
45
  .placementBottomEnd {
45
46
  --vkui_internal--snackbar_direction: calc(
46
- 1 * var(--vkui_internal--snackbar_animation_text_direction)
47
+ 1 *
48
+ var(--vkui_internal--snackbar_animation_text_direction)
47
49
  );
48
50
  }
49
51
 
@@ -1,11 +1,11 @@
1
1
  .body {
2
2
  --vkui_internal--snackbar-body_layout_vertical_action_shift: calc(
3
3
  -1 *
4
- (
5
- var(--vkui--size_button_small_height--compact) -
6
- var(--vkui--font_subhead--line_height--compact)
7
- ) /
8
- 2
4
+ (
5
+ var(--vkui--size_button_small_height--compact) -
6
+ var(--vkui--font_subhead--line_height--compact)
7
+ ) /
8
+ 2
9
9
  );
10
10
 
11
11
  box-sizing: border-box;
@@ -21,11 +21,11 @@
21
21
  .sizeYRegular {
22
22
  --vkui_internal--snackbar-body_layout_vertical_action_shift: calc(
23
23
  -1 *
24
- (
25
- var(--vkui--size_button_small_height--regular) -
26
- var(--vkui--font_subhead--line_height--regular)
27
- ) /
28
- 2
24
+ (
25
+ var(--vkui--size_button_small_height--regular) -
26
+ var(--vkui--font_subhead--line_height--regular)
27
+ ) /
28
+ 2
29
29
  );
30
30
  }
31
31
 
@@ -33,11 +33,11 @@
33
33
  .sizeYNone {
34
34
  --vkui_internal--snackbar-body_layout_vertical_action_shift: calc(
35
35
  -1 *
36
- (
37
- var(--vkui--size_button_small_height--regular) -
38
- var(--vkui--font_subhead--line_height--regular)
39
- ) /
40
- 2
36
+ (
37
+ var(--vkui--size_button_small_height--regular) -
38
+ var(--vkui--font_subhead--line_height--regular)
39
+ ) /
40
+ 2
41
41
  );
42
42
  }
43
43
  }
@@ -18,19 +18,23 @@
18
18
  position: relative;
19
19
  z-index: var(--vkui_internal--z_index_split_layout_panel_header);
20
20
  -webkit-margin-before: calc(
21
- -1 * (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
21
+ -1 *
22
+ (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
22
23
  );
23
24
  margin-block-start: calc(
24
- -1 * (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
25
+ -1 *
26
+ (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
25
27
  );
26
28
  }
27
29
 
28
30
  .ios .innerHeader {
29
31
  -webkit-margin-before: calc(
30
- -1 * (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
32
+ -1 *
33
+ (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
31
34
  );
32
35
  margin-block-start: calc(
33
- -1 * (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
36
+ -1 *
37
+ (var(--vkui_internal--panel_header_height) + var(--vkui_internal--safe_area_inset_top))
34
38
  );
35
39
  }
36
40
 
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
- import { hasReactNode } from "@vkontakte/vkjs";
3
+ import { classNames, hasReactNode } from "@vkontakte/vkjs";
4
4
  import { HorizontalScroll } from "../HorizontalScroll/HorizontalScroll.js";
5
5
  import { RootComponent } from "../RootComponent/RootComponent.js";
6
6
  import styles from "./SubnavigationBar.module.css";
@@ -8,7 +8,7 @@ const defaultScrollToLeft = (x)=>x - 240;
8
8
  const defaultScrollToRight = (x)=>x + 240;
9
9
  /**
10
10
  * @see https://vkui.io/components/subnavigation-bar
11
- */ export const SubnavigationBar = ({ fixed = false, children, showArrows = true, getScrollToLeft = defaultScrollToLeft, getScrollToRight = defaultScrollToRight, scrollAnimationDuration, ...restProps })=>{
11
+ */ export const SubnavigationBar = ({ fixed = false, children, showArrows = true, noPadding = false, arrowSize = 's', getScrollToLeft = defaultScrollToLeft, getScrollToRight = defaultScrollToRight, scrollAnimationDuration, ...restProps })=>{
12
12
  let ScrollWrapper;
13
13
  let scrollWrapperProps = {};
14
14
  if (fixed) {
@@ -17,6 +17,7 @@ const defaultScrollToRight = (x)=>x + 240;
17
17
  ScrollWrapper = HorizontalScroll;
18
18
  scrollWrapperProps = {
19
19
  showArrows,
20
+ arrowSize,
20
21
  getScrollToLeft,
21
22
  getScrollToRight,
22
23
  scrollAnimationDuration
@@ -29,7 +30,7 @@ const defaultScrollToRight = (x)=>x + 240;
29
30
  className: styles.in,
30
31
  ...scrollWrapperProps,
31
32
  children: /*#__PURE__*/ _jsx("ul", {
32
- className: styles.scrollIn,
33
+ className: classNames(styles.scrollIn, noPadding && styles.noPadding),
33
34
  children: React.Children.map(children, (child, idx)=>hasReactNode(child) ? /*#__PURE__*/ _jsx("li", {
34
35
  className: styles.item,
35
36
  children: child
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SubnavigationBar/SubnavigationBar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { hasReactNode } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n HorizontalScroll,\n type HorizontalScrollProps,\n type ScrollPositionHandler,\n} from '../HorizontalScroll/HorizontalScroll';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './SubnavigationBar.module.css';\n\nexport interface SubnavigationBarProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n Pick<\n HorizontalScrollProps,\n 'showArrows' | 'getScrollToLeft' | 'getScrollToRight' | 'scrollAnimationDuration'\n > {\n /**\n * Отключение возможности прокручивания компонента по горизонтали.\n */\n fixed?: boolean;\n}\n\nconst defaultScrollToLeft: ScrollPositionHandler = (x) => x - 240;\n\nconst defaultScrollToRight: ScrollPositionHandler = (x) => x + 240;\n\n/**\n * @see https://vkui.io/components/subnavigation-bar\n */\nexport const SubnavigationBar = ({\n fixed = false,\n children,\n showArrows = true,\n getScrollToLeft = defaultScrollToLeft,\n getScrollToRight = defaultScrollToRight,\n scrollAnimationDuration,\n ...restProps\n}: SubnavigationBarProps): React.ReactNode => {\n let ScrollWrapper: React.ElementType;\n let scrollWrapperProps = {};\n\n if (fixed) {\n ScrollWrapper = 'div';\n } else {\n ScrollWrapper = HorizontalScroll;\n scrollWrapperProps = {\n showArrows,\n getScrollToLeft,\n getScrollToRight,\n scrollAnimationDuration,\n };\n }\n\n return (\n <RootComponent baseClassName={fixed && styles.modeFixed} {...restProps}>\n <ScrollWrapper className={styles.in} {...scrollWrapperProps}>\n <ul className={styles.scrollIn}>\n {React.Children.map(children, (child, idx) =>\n hasReactNode(child) ? (\n <li key={idx} className={styles.item}>\n {child}\n </li>\n ) : null,\n )}\n </ul>\n </ScrollWrapper>\n </RootComponent>\n );\n};\n"],"names":["React","hasReactNode","HorizontalScroll","RootComponent","styles","defaultScrollToLeft","x","defaultScrollToRight","SubnavigationBar","fixed","children","showArrows","getScrollToLeft","getScrollToRight","scrollAnimationDuration","restProps","ScrollWrapper","scrollWrapperProps","baseClassName","modeFixed","className","in","ul","scrollIn","Children","map","child","idx","li","item"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,YAAY,QAAQ,kBAAkB;AAE/C,SACEC,gBAAgB,QAGX,0CAAuC;AAC9C,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,OAAOC,YAAY,gCAAgC;AAcnD,MAAMC,sBAA6C,CAACC,IAAMA,IAAI;AAE9D,MAAMC,uBAA8C,CAACD,IAAMA,IAAI;AAE/D;;CAEC,GACD,OAAO,MAAME,mBAAmB,CAAC,EAC/BC,QAAQ,KAAK,EACbC,QAAQ,EACRC,aAAa,IAAI,EACjBC,kBAAkBP,mBAAmB,EACrCQ,mBAAmBN,oBAAoB,EACvCO,uBAAuB,EACvB,GAAGC,WACmB;IACtB,IAAIC;IACJ,IAAIC,qBAAqB,CAAC;IAE1B,IAAIR,OAAO;QACTO,gBAAgB;IAClB,OAAO;QACLA,gBAAgBd;QAChBe,qBAAqB;YACnBN;YACAC;YACAC;YACAC;QACF;IACF;IAEA,qBACE,KAACX;QAAce,eAAeT,SAASL,OAAOe,SAAS;QAAG,GAAGJ,SAAS;kBACpE,cAAA,KAACC;YAAcI,WAAWhB,OAAOiB,EAAE;YAAG,GAAGJ,kBAAkB;sBACzD,cAAA,KAACK;gBAAGF,WAAWhB,OAAOmB,QAAQ;0BAC3BvB,MAAMwB,QAAQ,CAACC,GAAG,CAACf,UAAU,CAACgB,OAAOC,MACpC1B,aAAayB,uBACX,KAACE;wBAAaR,WAAWhB,OAAOyB,IAAI;kCACjCH;uBADMC,OAGP;;;;AAMhB,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/SubnavigationBar/SubnavigationBar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n HorizontalScroll,\n type HorizontalScrollProps,\n type ScrollPositionHandler,\n} from '../HorizontalScroll/HorizontalScroll';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './SubnavigationBar.module.css';\n\nexport interface SubnavigationBarProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n Pick<\n HorizontalScrollProps,\n | 'showArrows'\n | 'arrowSize'\n | 'getScrollToLeft'\n | 'getScrollToRight'\n | 'scrollAnimationDuration'\n > {\n /**\n * Отключение возможности прокручивания компонента по горизонтали.\n */\n fixed?: boolean;\n /**\n * Отключает отступы. Рекомендуется использовать с `mode=\"outline\"` у [`SubnavigationButton`](https://vkui.io/components/subnavigation-button).\n */\n noPadding?: boolean;\n}\n\nconst defaultScrollToLeft: ScrollPositionHandler = (x) => x - 240;\n\nconst defaultScrollToRight: ScrollPositionHandler = (x) => x + 240;\n\n/**\n * @see https://vkui.io/components/subnavigation-bar\n */\nexport const SubnavigationBar = ({\n fixed = false,\n children,\n showArrows = true,\n noPadding = false,\n arrowSize = 's',\n getScrollToLeft = defaultScrollToLeft,\n getScrollToRight = defaultScrollToRight,\n scrollAnimationDuration,\n ...restProps\n}: SubnavigationBarProps): React.ReactNode => {\n let ScrollWrapper: React.ElementType;\n let scrollWrapperProps = {};\n\n if (fixed) {\n ScrollWrapper = 'div';\n } else {\n ScrollWrapper = HorizontalScroll;\n scrollWrapperProps = {\n showArrows,\n arrowSize,\n getScrollToLeft,\n getScrollToRight,\n scrollAnimationDuration,\n };\n }\n\n return (\n <RootComponent baseClassName={fixed && styles.modeFixed} {...restProps}>\n <ScrollWrapper className={styles.in} {...scrollWrapperProps}>\n <ul className={classNames(styles.scrollIn, noPadding && styles.noPadding)}>\n {React.Children.map(children, (child, idx) =>\n hasReactNode(child) ? (\n <li key={idx} className={styles.item}>\n {child}\n </li>\n ) : null,\n )}\n </ul>\n </ScrollWrapper>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","hasReactNode","HorizontalScroll","RootComponent","styles","defaultScrollToLeft","x","defaultScrollToRight","SubnavigationBar","fixed","children","showArrows","noPadding","arrowSize","getScrollToLeft","getScrollToRight","scrollAnimationDuration","restProps","ScrollWrapper","scrollWrapperProps","baseClassName","modeFixed","className","in","ul","scrollIn","Children","map","child","idx","li","item"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAE3D,SACEC,gBAAgB,QAGX,0CAAuC;AAC9C,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,OAAOC,YAAY,gCAAgC;AAsBnD,MAAMC,sBAA6C,CAACC,IAAMA,IAAI;AAE9D,MAAMC,uBAA8C,CAACD,IAAMA,IAAI;AAE/D;;CAEC,GACD,OAAO,MAAME,mBAAmB,CAAC,EAC/BC,QAAQ,KAAK,EACbC,QAAQ,EACRC,aAAa,IAAI,EACjBC,YAAY,KAAK,EACjBC,YAAY,GAAG,EACfC,kBAAkBT,mBAAmB,EACrCU,mBAAmBR,oBAAoB,EACvCS,uBAAuB,EACvB,GAAGC,WACmB;IACtB,IAAIC;IACJ,IAAIC,qBAAqB,CAAC;IAE1B,IAAIV,OAAO;QACTS,gBAAgB;IAClB,OAAO;QACLA,gBAAgBhB;QAChBiB,qBAAqB;YACnBR;YACAE;YACAC;YACAC;YACAC;QACF;IACF;IAEA,qBACE,KAACb;QAAciB,eAAeX,SAASL,OAAOiB,SAAS;QAAG,GAAGJ,SAAS;kBACpE,cAAA,KAACC;YAAcI,WAAWlB,OAAOmB,EAAE;YAAG,GAAGJ,kBAAkB;sBACzD,cAAA,KAACK;gBAAGF,WAAWtB,WAAWI,OAAOqB,QAAQ,EAAEb,aAAaR,OAAOQ,SAAS;0BACrEb,MAAM2B,QAAQ,CAACC,GAAG,CAACjB,UAAU,CAACkB,OAAOC,MACpC5B,aAAa2B,uBACX,KAACE;wBAAaR,WAAWlB,OAAO2B,IAAI;kCACjCH;uBADMC,OAGP;;;;AAMhB,EAAE"}
@@ -17,6 +17,15 @@
17
17
  content: '';
18
18
  }
19
19
 
20
+ .noPadding {
21
+ padding: 0;
22
+ }
23
+
24
+ .noPadding::before,
25
+ .noPadding::after {
26
+ display: none;
27
+ }
28
+
20
29
  .item {
21
30
  display: flex;
22
31
  list-style-type: none;