@vkontakte/vkui 7.0.0-dev-efd91c.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  2. package/dist/components/ActionSheet/ActionSheet.js +1 -3
  3. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/components/AppRoot/AppRoot.d.ts +1 -1
  5. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  6. package/dist/components/AppRoot/AppRoot.js +16 -10
  7. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  8. package/dist/components/AppRoot/AppRootPortal.js +1 -1
  9. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  10. package/dist/components/AppRoot/{AppRootStyleContainer.d.ts → AppRootStyleContainer/AppRootStyleContainer.d.ts} +3 -3
  11. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.d.ts.map +1 -0
  12. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js +45 -0
  13. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
  14. package/dist/components/AppRoot/helpers.d.ts +7 -0
  15. package/dist/components/AppRoot/helpers.d.ts.map +1 -1
  16. package/dist/components/AppRoot/helpers.js +20 -4
  17. package/dist/components/AppRoot/helpers.js.map +1 -1
  18. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  19. package/dist/components/Clickable/Clickable.js +2 -83
  20. package/dist/components/Clickable/Clickable.js.map +1 -1
  21. package/dist/components/Clickable/RealClickable.d.ts +6 -0
  22. package/dist/components/Clickable/RealClickable.d.ts.map +1 -0
  23. package/dist/components/Clickable/RealClickable.js +90 -0
  24. package/dist/components/Clickable/RealClickable.js.map +1 -0
  25. package/dist/components/HorizontalCell/HorizontalCell.d.ts +6 -1
  26. package/dist/components/HorizontalCell/HorizontalCell.d.ts.map +1 -1
  27. package/dist/components/HorizontalCell/HorizontalCell.js +4 -15
  28. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  29. package/dist/components/ModalCard/ModalCardInternal.js +1 -1
  30. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  31. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  32. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  33. package/dist/components/ModalPage/ModalPage.js +53 -5
  34. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  35. package/dist/components/ModalPage/ModalPageInternal.d.ts +5 -2
  36. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  37. package/dist/components/ModalPage/ModalPageInternal.js +5 -4
  38. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  39. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  40. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  41. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  42. package/dist/components/ModalRoot/types.js.map +1 -1
  43. package/dist/components/ModalRoot/useModalManager.d.ts +2 -0
  44. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  45. package/dist/components/ModalRoot/useModalManager.js +4 -1
  46. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  47. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  48. package/dist/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
  49. package/dist/components/PopoutWrapper/PopoutWrapper.js +2 -2
  50. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  51. package/dist/components/Spinner/Spinner.d.ts.map +1 -1
  52. package/dist/components/Spinner/Spinner.js +11 -43
  53. package/dist/components/Spinner/Spinner.js.map +1 -1
  54. package/dist/components/Spinner/SpinnerAnimation.d.ts +7 -0
  55. package/dist/components/Spinner/SpinnerAnimation.d.ts.map +1 -0
  56. package/dist/components/Spinner/SpinnerAnimation.js +36 -0
  57. package/dist/components/Spinner/SpinnerAnimation.js.map +1 -0
  58. package/dist/components/SplitLayout/SplitLayout.d.ts +4 -4
  59. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  60. package/dist/components.css +1 -1
  61. package/dist/components.css.map +1 -1
  62. package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -3
  63. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  64. package/dist/cssm/components/AppRoot/AppRoot.js +14 -9
  65. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  66. package/dist/cssm/components/AppRoot/AppRoot.module.css +17 -0
  67. package/dist/cssm/components/AppRoot/AppRootPortal.js +1 -1
  68. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  69. package/dist/cssm/components/AppRoot/{AppRootStyleContainer.js → AppRootStyleContainer/AppRootStyleContainer.js} +12 -23
  70. package/dist/cssm/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
  71. package/dist/cssm/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -31
  72. package/dist/cssm/components/AppRoot/helpers.js +17 -1
  73. package/dist/cssm/components/AppRoot/helpers.js.map +1 -1
  74. package/dist/cssm/components/Button/Button.module.css +6 -6
  75. package/dist/cssm/components/Card/Card.module.css +12 -6
  76. package/dist/cssm/components/Clickable/Clickable.js +2 -55
  77. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  78. package/dist/cssm/components/Clickable/RealClickable.js +61 -0
  79. package/dist/cssm/components/Clickable/RealClickable.js.map +1 -0
  80. package/dist/cssm/components/FormField/FormField.module.css +2 -0
  81. package/dist/cssm/components/FormItem/FormItem.module.css +6 -6
  82. package/dist/cssm/components/Group/Group.module.css +1 -0
  83. package/dist/cssm/components/Header/Header.module.css +10 -4
  84. package/dist/cssm/components/HorizontalCell/HorizontalCell.js +2 -12
  85. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  86. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
  87. package/dist/cssm/components/IconButton/IconButton.module.css +12 -3
  88. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  89. package/dist/cssm/components/ModalCard/ModalCardInternal.js +1 -1
  90. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  91. package/dist/cssm/components/ModalPage/ModalPage.js +50 -4
  92. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  93. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  94. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  95. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
  96. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  97. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  98. package/dist/cssm/components/ModalRoot/useModalManager.js +4 -1
  99. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  100. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +10 -4
  101. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  102. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
  103. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +2 -3
  104. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  105. package/dist/cssm/components/Removable/Removable.module.css +7 -2
  106. package/dist/cssm/components/Spinner/Spinner.js +11 -43
  107. package/dist/cssm/components/Spinner/Spinner.js.map +1 -1
  108. package/dist/cssm/components/Spinner/SpinnerAnimation.js +36 -0
  109. package/dist/cssm/components/Spinner/SpinnerAnimation.js.map +1 -0
  110. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  111. package/dist/cssm/components/View/View.module.css +2 -2
  112. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
  113. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  114. package/dist/cssm/index.js.map +1 -1
  115. package/dist/cssm/lib/adaptivity/functions.js +1 -7
  116. package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
  117. package/dist/cssm/lib/animation/useReducedMotion.js +4 -7
  118. package/dist/cssm/lib/animation/useReducedMotion.js.map +1 -1
  119. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +22 -37
  120. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  121. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js +1 -9
  122. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  123. package/dist/cssm/lib/sheet/index.js +1 -1
  124. package/dist/cssm/lib/sheet/index.js.map +1 -1
  125. package/dist/cssm/lib/sheet/useBottomSheet.js +12 -15
  126. package/dist/cssm/lib/sheet/useBottomSheet.js.map +1 -1
  127. package/dist/cssm/styles/common.css +10 -4
  128. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +3 -2
  129. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
  130. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
  131. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js.map +1 -1
  135. package/dist/lib/adaptivity/functions.d.ts +0 -1
  136. package/dist/lib/adaptivity/functions.d.ts.map +1 -1
  137. package/dist/lib/adaptivity/functions.js +1 -7
  138. package/dist/lib/adaptivity/functions.js.map +1 -1
  139. package/dist/lib/animation/useReducedMotion.d.ts +1 -1
  140. package/dist/lib/animation/useReducedMotion.d.ts.map +1 -1
  141. package/dist/lib/animation/useReducedMotion.js +4 -7
  142. package/dist/lib/animation/useReducedMotion.js.map +1 -1
  143. package/dist/lib/sheet/controllers/BottomSheetController.d.ts +8 -8
  144. package/dist/lib/sheet/controllers/BottomSheetController.d.ts.map +1 -1
  145. package/dist/lib/sheet/controllers/BottomSheetController.js +22 -37
  146. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  147. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts +1 -1
  148. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts.map +1 -1
  149. package/dist/lib/sheet/controllers/CSSTransitionController.js +1 -9
  150. package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  151. package/dist/lib/sheet/index.d.ts +2 -1
  152. package/dist/lib/sheet/index.d.ts.map +1 -1
  153. package/dist/lib/sheet/index.js +1 -1
  154. package/dist/lib/sheet/index.js.map +1 -1
  155. package/dist/lib/sheet/useBottomSheet.d.ts +6 -5
  156. package/dist/lib/sheet/useBottomSheet.d.ts.map +1 -1
  157. package/dist/lib/sheet/useBottomSheet.js +12 -15
  158. package/dist/lib/sheet/useBottomSheet.js.map +1 -1
  159. package/dist/vkui.css +1 -1
  160. package/dist/vkui.css.map +1 -1
  161. package/package.json +2 -2
  162. package/src/components/ActionSheet/ActionSheet.tsx +1 -4
  163. package/src/components/AppRoot/AppRoot.module.css +17 -0
  164. package/src/components/AppRoot/AppRoot.tsx +24 -11
  165. package/src/components/AppRoot/AppRootPortal.tsx +1 -1
  166. package/src/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -24
  167. package/src/components/AppRoot/{AppRootStyleContainer.tsx → AppRootStyleContainer/AppRootStyleContainer.tsx} +11 -29
  168. package/src/components/AppRoot/helpers.ts +17 -1
  169. package/src/components/Button/Button.module.css +6 -6
  170. package/src/components/Card/Card.module.css +8 -6
  171. package/src/components/Clickable/Clickable.tsx +4 -103
  172. package/src/components/Clickable/RealClickable.tsx +99 -0
  173. package/src/components/FormField/FormField.module.css +2 -0
  174. package/src/components/FormItem/FormItem.module.css +6 -6
  175. package/src/components/Group/Group.module.css +1 -0
  176. package/src/components/Header/Header.module.css +8 -4
  177. package/src/components/HorizontalCell/HorizontalCell.tsx +8 -20
  178. package/src/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
  179. package/src/components/IconButton/IconButton.module.css +10 -3
  180. package/src/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  181. package/src/components/ModalCard/ModalCardInternal.tsx +1 -1
  182. package/src/components/ModalPage/ModalPage.tsx +57 -3
  183. package/src/components/ModalPage/ModalPageInternal.tsx +14 -5
  184. package/src/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
  185. package/src/components/ModalRoot/ModalRoot.tsx +0 -1
  186. package/src/components/ModalRoot/types.ts +0 -1
  187. package/src/components/ModalRoot/useModalManager.tsx +5 -3
  188. package/src/components/PanelHeader/PanelHeader.module.css +8 -4
  189. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
  190. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +1 -1
  191. package/src/components/PopoutWrapper/PopoutWrapper.tsx +1 -4
  192. package/src/components/Removable/Removable.module.css +6 -2
  193. package/src/components/Spinner/Spinner.tsx +10 -48
  194. package/src/components/Spinner/SpinnerAnimation.tsx +42 -0
  195. package/src/components/SplitLayout/SplitLayout.tsx +4 -4
  196. package/src/components/View/View.module.css +2 -2
  197. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +13 -4
  198. package/src/index.ts +2 -2
  199. package/src/lib/adaptivity/functions.ts +1 -8
  200. package/src/lib/animation/useReducedMotion.ts +6 -13
  201. package/src/lib/sheet/controllers/BottomSheetController.ts +32 -50
  202. package/src/lib/sheet/controllers/CSSTransitionController.ts +1 -8
  203. package/src/lib/sheet/index.ts +3 -0
  204. package/src/lib/sheet/useBottomSheet.ts +21 -17
  205. package/src/styles/common.css +12 -4
  206. package/dist/components/AppRoot/AppRootStyleContainer.d.ts.map +0 -1
  207. package/dist/components/AppRoot/AppRootStyleContainer.js +0 -57
  208. package/dist/components/AppRoot/AppRootStyleContainer.js.map +0 -1
  209. package/dist/cssm/components/AppRoot/AppRootStyleContainer.js.map +0 -1
@@ -174,16 +174,17 @@
174
174
  *
175
175
  * TODO: Переделать отрицательные отступы https://github.com/VKCOM/VKUI/issues/3508
176
176
  */
177
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
177
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
178
178
  :global(.vkuiInternalGroup--mode-plain):not(:first-of-type) > .host:first-child,
179
179
  :global(.vkuiInternalGroup--mode-plain):not(:first-of-type)
180
180
  > :global(.vkuiInternalTappable):first-child
181
181
  > .host {
182
182
  margin-block-start: -16px;
183
183
  }
184
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
184
185
 
185
186
  @media (--sizeX-compact) {
186
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
187
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
187
188
  :global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none):not(:first-of-type)
188
189
  > .host:first-child,
189
190
  :global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none):not(:first-of-type)
@@ -191,18 +192,20 @@
191
192
  > .host {
192
193
  margin-block-start: -16px;
193
194
  }
195
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
194
196
  }
195
197
 
196
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
198
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
197
199
  :global(.vkuiInternalGroup--mode-card) > .host:not(.sizeM):first-child,
198
200
  :global(.vkuiInternalGroup--mode-card)
199
201
  > :global(.vkuiInternalTappable):first-child
200
202
  > .host:not(.sizeM) {
201
203
  margin-block-start: calc(-1 * var(--vkui--spacing_size_xs));
202
204
  }
205
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
203
206
 
204
207
  @media (--sizeX-regular) {
205
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
208
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
206
209
  :global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none)
207
210
  > .host:not(.sizeM):first-child,
208
211
  :global(.vkuiInternalGroup--sizeX-none.vkuiInternalGroup--mode-none)
@@ -210,6 +213,7 @@
210
213
  > .host:not(.sizeM) {
211
214
  margin-block-start: calc(-1 * var(--vkui--spacing_size_xs));
212
215
  }
216
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
213
217
  }
214
218
 
215
219
  /**
@@ -1,13 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { classNames, hasReactNode } from '@vkontakte/vkjs';
3
3
  import { mergeStyle } from '../../helpers/mergeStyle';
4
- import type {
5
- CSSCustomProperties,
6
- HasRef,
7
- HasRootRef,
8
- HTMLAttributesWithRootRef,
9
- LiteralUnion,
10
- } from '../../types';
4
+ import type { CSSCustomProperties, HasRef, HasRootRef, LiteralUnion } from '../../types';
11
5
  import { Avatar } from '../Avatar/Avatar';
12
6
  import { Tappable, type TappableProps } from '../Tappable/Tappable';
13
7
  import { Caption } from '../Typography/Caption/Caption';
@@ -32,18 +26,6 @@ const textAlignClassNames = {
32
26
 
33
27
  type HorizontalCellSizes = 's' | 'm' | 'l' | 'xl' | 'auto';
34
28
 
35
- interface CellTypographyProps extends HTMLAttributesWithRootRef<HTMLDivElement> {
36
- size: HorizontalCellProps['size'];
37
- }
38
-
39
- const CellTypography = ({ size, children, ...restProps }: CellTypographyProps) => {
40
- return size === 's' ? (
41
- <Caption {...restProps}>{children}</Caption>
42
- ) : (
43
- <Subhead {...restProps}>{children}</Subhead>
44
- );
45
- };
46
-
47
29
  export interface HorizontalCellProps
48
30
  extends Omit<TappableProps, 'size' | 'getRootRef' | 'title' | 'borderRadiusMode'>,
49
31
  HasRootRef<HTMLDivElement>,
@@ -78,6 +60,11 @@ export interface HorizontalCellProps
78
60
  * Актуально для использования в многострочных списках
79
61
  */
80
62
  noPadding?: boolean;
63
+ /**
64
+ * Позволяет передать типографический компонент, используемый для `title`.
65
+ * По умолчанию `Caption` для `size=s`, иначе `Subhead`.
66
+ */
67
+ TitleComponent?: React.ElementType;
81
68
  }
82
69
 
83
70
  /**
@@ -95,6 +82,7 @@ export const HorizontalCell = ({
95
82
  extraSubtitle,
96
83
  textAlign = size === 's' ? 'center' : 'start',
97
84
  noPadding = false,
85
+ TitleComponent = size === 's' ? Caption : Subhead,
98
86
  ...restProps
99
87
  }: HorizontalCellProps): React.ReactNode => {
100
88
  const hasTypography =
@@ -125,7 +113,7 @@ export const HorizontalCell = ({
125
113
  textAlign !== 'start' && textAlignClassNames[textAlign],
126
114
  )}
127
115
  >
128
- {hasReactNode(title) && <CellTypography size={size}>{title}</CellTypography>}
116
+ {hasReactNode(title) && <TitleComponent>{title}</TitleComponent>}
129
117
  {hasReactNode(subtitle) && <Footnote className={styles.subtitle}>{subtitle}</Footnote>}
130
118
  {hasReactNode(extraSubtitle) && (
131
119
  <Footnote className={styles.subtitle}>{extraSubtitle}</Footnote>
@@ -66,6 +66,7 @@
66
66
 
67
67
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
68
68
  :global(.vkuiInternalTabs--withGaps) .inWrapper::after,
69
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
69
70
  :global(.vkuiInternalTabs--withGaps) .inWrapper::before {
70
71
  display: block;
71
72
  inline-size: var(--vkui--size_base_padding_horizontal--regular);
@@ -43,6 +43,7 @@
43
43
 
44
44
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
45
45
  .sizeYCompact :global(.vkuiIcon--16),
46
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
46
47
  .sizeYCompact :global(.vkuiIcon--16.vkuiIcon--w-8) {
47
48
  padding: 14px;
48
49
  }
@@ -74,6 +75,7 @@
74
75
 
75
76
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
76
77
  .sizeYNone :global(.vkuiIcon--16),
78
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
77
79
  .sizeYNone :global(.vkuiIcon--16.vkuiIcon--w-8) {
78
80
  padding: 14px;
79
81
  }
@@ -97,7 +99,9 @@
97
99
  */
98
100
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
99
101
  :global(.vkuiInternalFormItem--removable) :global(.vkuiInternalRemovable__content) > .host,
102
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
100
103
  :global(.vkuiInternalFormLayoutGroup--removable) :global(.vkuiInternalRemovable__content) > .host,
104
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
101
105
  :global(.vkuiInternalFormField__after) .host {
102
106
  display: flex;
103
107
  align-items: center;
@@ -108,12 +112,13 @@
108
112
  border-radius: var(--vkui--size_border_radius--regular);
109
113
  }
110
114
 
111
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
115
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
112
116
  :global(.vkuiInternalFormField__after)
113
117
  .host
114
118
  :global(.vkuiIcon):global(.vkuiIcon):global(.vkuiIcon) {
115
119
  padding: 0;
116
120
  }
121
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
117
122
 
118
123
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
119
124
  :global(.vkuiInternalFormField__after) .sizeYCompact {
@@ -121,13 +126,14 @@
121
126
  block-size: var(--vkui--size_field_height--compact);
122
127
  }
123
128
 
124
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
129
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
125
130
  :global(.vkuiInternalFormItem--removable) :global(.vkuiInternalRemovable__content) > .sizeYCompact,
126
131
  :global(.vkuiInternalFormLayoutGroup--removable)
127
132
  :global(.vkuiInternalRemovable__content)
128
133
  > .sizeYCompact {
129
134
  block-size: var(--vkui--size_field_height--compact);
130
135
  }
136
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
131
137
 
132
138
  @media (--sizeY-compact) {
133
139
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
@@ -136,13 +142,14 @@
136
142
  block-size: var(--vkui--size_field_height--compact);
137
143
  }
138
144
 
139
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
145
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
140
146
  :global(.vkuiInternalFormItem--removable) :global(.vkuiInternalRemovable__content) > .sizeYNone,
141
147
  :global(.vkuiInternalFormLayoutGroup--removable)
142
148
  :global(.vkuiInternalRemovable__content)
143
149
  > .sizeYNone {
144
150
  block-size: var(--vkui--size_field_height--compact);
145
151
  }
152
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
146
153
  }
147
154
 
148
155
  /**
@@ -75,6 +75,7 @@
75
75
 
76
76
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
77
77
  .modeAdd .middle :global(.vkuiIcon),
78
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
78
79
  .modeMore .middle :global(.vkuiIcon) {
79
80
  color: var(--vkui--color_icon_accent_themed);
80
81
  }
@@ -97,7 +97,7 @@ export const ModalCardInternal = ({
97
97
  bottomSheetEnabled,
98
98
  {
99
99
  blocked: keyboardOpened,
100
- initialSnapPoint: 'auto',
100
+ snapPoint: 'auto',
101
101
  sheetCSSProperty: '--vkui_internal_ModalCard--translateY',
102
102
  backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',
103
103
  onDismiss() {
@@ -1,8 +1,10 @@
1
1
  'use client';
2
2
 
3
- import { useId } from 'react';
3
+ import { useId, useMemo } from 'react';
4
4
  import { ModalContext } from '../../context/ModalContext';
5
+ import { inRange } from '../../helpers/range';
5
6
  import { getNavId } from '../../lib/getNavId';
7
+ import { SNAP_POINT_DETENTS, SNAP_POINT_SAFE_RANGE, type SnapPoint } from '../../lib/sheet';
6
8
  import { warnOnce } from '../../lib/warnOnce';
7
9
  import { useModalManager } from '../ModalRoot/useModalManager';
8
10
  import { ModalPageInternal } from './ModalPageInternal';
@@ -10,6 +12,8 @@ import type { ModalPageProps } from './types';
10
12
 
11
13
  const warn = warnOnce('ModalPage');
12
14
 
15
+ const snapPointCache = new Map<string, Exclude<SnapPoint, 'auto'>>();
16
+
13
17
  /**
14
18
  * @see https://vkcom.github.io/VKUI/#/ModalPage
15
19
  */
@@ -25,13 +29,14 @@ export const ModalPage = ({
25
29
  onClosed,
26
30
  size = 's',
27
31
  settlingHeight = 50,
32
+ dynamicContentHeight,
28
33
  keepMounted = false,
29
34
  ...restProps
30
35
  }: ModalPageProps) => {
31
36
  const generatingId = useId();
32
37
  const id = getNavId({ nav, id: idProp }, warn) || generatingId;
33
38
 
34
- const { mounted, ...resolvedProps } = useModalManager({
39
+ const { mounted, shouldPreserveSnapPoint, ...resolvedProps } = useModalManager({
35
40
  id,
36
41
  open,
37
42
  keepMounted,
@@ -43,6 +48,29 @@ export const ModalPage = ({
43
48
  onClosed,
44
49
  });
45
50
 
51
+ const snapPoint = useMemo((): SnapPoint => {
52
+ if (dynamicContentHeight) {
53
+ return 'auto';
54
+ }
55
+
56
+ if (shouldPreserveSnapPoint) {
57
+ const snapPointCached = snapPointCache.get(id);
58
+
59
+ if (snapPointCached) {
60
+ return snapPointCached;
61
+ }
62
+
63
+ const nextSnapPoint = transformSettlingHeightToSnapPoint(settlingHeight);
64
+ snapPointCache.set(id, nextSnapPoint);
65
+
66
+ return nextSnapPoint;
67
+ } else {
68
+ snapPointCache.delete(id);
69
+ }
70
+
71
+ return transformSettlingHeightToSnapPoint(settlingHeight);
72
+ }, [id, shouldPreserveSnapPoint, dynamicContentHeight, settlingHeight]);
73
+
46
74
  if (!mounted) {
47
75
  return null;
48
76
  }
@@ -53,10 +81,36 @@ export const ModalPage = ({
53
81
  id={id}
54
82
  size={size}
55
83
  aria-labelledby={`${id}-label`}
56
- settlingHeight={settlingHeight}
84
+ snapPoint={snapPoint}
85
+ onSnapPointChange={
86
+ snapPoint !== 'auto' && shouldPreserveSnapPoint
87
+ ? (snapPoint) => {
88
+ const snapPointCached = snapPointCache.get(id);
89
+
90
+ if (snapPointCached) {
91
+ snapPointCached.initial = snapPoint;
92
+ snapPointCache.set(id, snapPointCached);
93
+ }
94
+ }
95
+ : undefined
96
+ }
57
97
  {...resolvedProps}
58
98
  {...restProps}
59
99
  />
60
100
  </ModalContext.Provider>
61
101
  );
62
102
  };
103
+
104
+ function transformSettlingHeightToSnapPoint(settlingHeight: number): Exclude<SnapPoint, 'auto'> {
105
+ const currentSnapPoint = Math.min(
106
+ Math.max(settlingHeight, SNAP_POINT_SAFE_RANGE.LOWER),
107
+ SNAP_POINT_DETENTS.LARGE,
108
+ );
109
+
110
+ return {
111
+ initial: currentSnapPoint,
112
+ detents: inRange(currentSnapPoint, SNAP_POINT_SAFE_RANGE.LOWER, SNAP_POINT_SAFE_RANGE.HIGHEST)
113
+ ? [SNAP_POINT_DETENTS.MIN, currentSnapPoint, SNAP_POINT_DETENTS.LARGE]
114
+ : [SNAP_POINT_DETENTS.MIN, currentSnapPoint],
115
+ };
116
+ }
@@ -7,7 +7,12 @@ import { useExternRef } from '../../hooks/useExternRef';
7
7
  import { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';
8
8
  import { Keys, pressedKey } from '../../lib/accessibility';
9
9
  import { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';
10
- import { BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE, useBottomSheet } from '../../lib/sheet';
10
+ import {
11
+ BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE,
12
+ type SnapPoint,
13
+ type SnapPointChange,
14
+ useBottomSheet,
15
+ } from '../../lib/sheet';
11
16
  import type { CSSCustomProperties } from '../../types';
12
17
  import { useScrollLock } from '../AppRoot/ScrollContext';
13
18
  import { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';
@@ -33,8 +38,11 @@ const transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>>
33
38
  exited: styles['documentStateExited'],
34
39
  };
35
40
 
36
- export interface ModalPageInternalProps extends Omit<ModalPageProps, 'nav' | 'keepMounted'> {
41
+ export interface ModalPageInternalProps
42
+ extends Omit<ModalPageProps, 'nav' | 'keepMounted' | 'settlingHeight' | 'dynamicContentHeight'> {
43
+ snapPoint: SnapPoint;
37
44
  ModalOverlay?: ComponentType<ModalOverlayProps>;
45
+ onSnapPointChange?: SnapPointChange;
38
46
  }
39
47
 
40
48
  /**
@@ -51,8 +59,8 @@ export const ModalPageInternal = ({
51
59
  children,
52
60
  className,
53
61
  style,
54
- dynamicContentHeight,
55
- settlingHeight,
62
+ snapPoint,
63
+ onSnapPointChange,
56
64
  getModalContentRef,
57
65
  ModalOverlay = ModalOverlayDefault,
58
66
  modalOverlayTestId,
@@ -92,9 +100,10 @@ export const ModalPageInternal = ({
92
100
  const [{ initialStyle, setSheetEl, setSheetScrollEl, setBackdropEl }, bottomSheetEventHandlers] =
93
101
  useBottomSheet(bottomSheetEnabled, {
94
102
  blocked: keyboardOpened,
95
- initialSnapPoint: dynamicContentHeight ? 'auto' : settlingHeight,
103
+ snapPoint,
96
104
  sheetCSSProperty: '--vkui_internal_ModalPageDocument--snapPoint',
97
105
  backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',
106
+ onSnapPointChange,
98
107
  onDismiss() {
99
108
  onClose('swipe-down');
100
109
  },
@@ -18,6 +18,7 @@
18
18
 
19
19
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
20
20
  .host :global(.vkuiIcon--dismiss_24), /* Note: <Icon24Dismiss /> по документации используется только для iOS */
21
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
21
22
  .host :global(.vkuiIcon--cancel_24) {
22
23
  color: var(--vkui--color_icon_secondary);
23
24
  }
@@ -9,7 +9,6 @@ import { ModalRootContext, ModalRootOverlayContext } from './ModalRootContext';
9
9
  import type { ModalRootProps } from './types';
10
10
 
11
11
  const warn = warnOnce('ModalRoot');
12
-
13
12
  /**
14
13
  * @see https://vkcom.github.io/VKUI/#/ModalRoot
15
14
  */
@@ -100,7 +100,6 @@ type ModalRootBaseProps = {
100
100
  noFocusToDialog?: boolean;
101
101
 
102
102
  usePortal?: AppRootPortalProps['usePortal'];
103
-
104
103
  /**
105
104
  * Будет вызвано при начале открытия активной модалки с её id
106
105
  */
@@ -30,8 +30,8 @@ export interface UseModalManagerResolvedProps {
30
30
  }
31
31
 
32
32
  export type UseModalManagerResult =
33
- | { mounted: false }
34
- | ({ mounted: true } & UseModalManagerResolvedProps);
33
+ | { mounted: false; shouldPreserveSnapPoint: boolean }
34
+ | ({ mounted: true; shouldPreserveSnapPoint: boolean } & UseModalManagerResolvedProps);
35
35
 
36
36
  export const useModalManager = ({
37
37
  id,
@@ -46,6 +46,7 @@ export const useModalManager = ({
46
46
  }: UseModalManager): UseModalManagerResult => {
47
47
  const context = useContext(ModalRootContext);
48
48
  const opened = context.isInsideModal ? context.activeModal === id : open;
49
+ const shouldPreserveSnapPoint = context.isInsideModal ? context.activeModal !== null : false;
49
50
 
50
51
  const [unmounted, setUnmounted] = useState(keepMounted ? false : !opened);
51
52
 
@@ -59,12 +60,13 @@ export const useModalManager = ({
59
60
  );
60
61
 
61
62
  if (unmounted) {
62
- return { mounted: false };
63
+ return { mounted: false, shouldPreserveSnapPoint };
63
64
  }
64
65
 
65
66
  return {
66
67
  mounted: true,
67
68
  open: opened,
69
+ shouldPreserveSnapPoint,
68
70
  noFocusToDialog: noFocusToDialog || context.noFocusToDialog,
69
71
  modalOverlayTestId: modalOverlayTestId || context.modalOverlayTestId,
70
72
  ModalOverlay: context.isInsideModal ? VisuallyHiddenModalOverlay : ModalOverlay,
@@ -182,20 +182,22 @@
182
182
  * CMP:
183
183
  * SplitCol
184
184
  */
185
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
185
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
186
186
  :global(.vkuiInternalSplitCol--viewWidth-tabletPlus):global(.vkuiInternalSplitCol--spaced-auto)
187
187
  .android.noBefore:not(:global(.vkuiInternalModalPageHeader__in))
188
188
  .content {
189
189
  padding-inline-start: 0;
190
190
  }
191
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
191
192
 
192
193
  @media (--viewWidth-smallTabletPlus) {
193
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
194
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
194
195
  :global(.vkuiInternalSplitCol--viewWidth-none):global(.vkuiInternalSplitCol--spaced-auto)
195
196
  .android.noBefore:not(:global(.vkuiInternalModalPageHeader__in))
196
197
  .content {
197
198
  padding-inline-start: 0;
198
199
  }
200
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
199
201
  }
200
202
 
201
203
  /* stylelint-disable selector-max-universal */
@@ -213,20 +215,22 @@
213
215
  padding-inline-start: 16px;
214
216
  }
215
217
 
216
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
218
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
217
219
  :global(.vkuiInternalSplitCol--viewWidth-tabletPlus):global(.vkuiInternalSplitCol--spaced-auto)
218
220
  .android.noAfter:not(:global(.vkuiInternalModalPageHeader__in))
219
221
  .content {
220
222
  padding-inline-end: 0;
221
223
  }
224
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
222
225
 
223
226
  @media (--viewWidth-smallTabletPlus) {
224
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
227
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
225
228
  :global(.vkuiInternalSplitCol--viewWidth-none):global(.vkuiInternalSplitCol--spaced-auto)
226
229
  .android.noAfter:not(:global(.vkuiInternalModalPageHeader__in))
227
230
  .content {
228
231
  padding-inline-end: 0;
229
232
  }
233
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
230
234
  }
231
235
 
232
236
  .android .after:not(:empty),
@@ -62,6 +62,7 @@
62
62
 
63
63
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
64
64
  .android :global(.vkuiIcon--24),
65
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
65
66
  .android :global(.vkuiIcon--28) {
66
67
  padding: 10px;
67
68
  }
@@ -86,6 +87,7 @@
86
87
 
87
88
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
88
89
  .vkcom.hover > :not(:global(.vkuiInternalCounter)):not(:global(.vkuiInternalBadge)),
90
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
89
91
  .vkcom.active > :not(:global(.vkuiInternalCounter)):not(:global(.vkuiInternalBadge)) {
90
92
  opacity: 1;
91
93
  }
@@ -135,6 +137,7 @@
135
137
 
136
138
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
137
139
  .host :global(.vkuiIcon--24) ~ :global(.vkuiInternalCounter),
140
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
138
141
  .ios :global(.vkuiInternalCounter) {
139
142
  inset-block-start: 2px;
140
143
  inset-inline-end: 2px;
@@ -154,6 +157,7 @@
154
157
 
155
158
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
156
159
  .host :global(.vkuiIcon--24) ~ :global(.vkuiInternalBadge),
160
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
157
161
  .ios :global(.vkuiInternalBadge) {
158
162
  inset-block-start: 6px;
159
163
  inset-inline-end: 6px;
@@ -18,7 +18,7 @@ const platformClassNames = {
18
18
 
19
19
  export interface PanelHeaderButtonProps extends Omit<TappableProps, 'label'> {
20
20
  primary?: boolean;
21
- // TODO [>=7]: добавить св-во `indicator`, чтобы разграничить кейсы
21
+ // TODO [>=8]: добавить св-во `indicator`, чтобы разграничить кейсы
22
22
  label?: React.ReactNode;
23
23
  }
24
24
 
@@ -72,10 +72,7 @@ export const PopoutWrapper = ({
72
72
  fixed && styles.fixed,
73
73
  !noBackground && styles.masked,
74
74
  )}
75
- style={{
76
- zIndex,
77
- ...restProps.style,
78
- }}
75
+ baseStyle={{ zIndex }}
79
76
  >
80
77
  <div className={styles.container}>
81
78
  <div className={styles.overlay} onClick={onClick} />
@@ -105,6 +105,7 @@
105
105
  */
106
106
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
107
107
  :global(.vkuiInternalFormItem--removable) .content,
108
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
108
109
  :global(.vkuiInternalFormLayoutGroup--removable) .content {
109
110
  flex-wrap: wrap;
110
111
  align-items: flex-start;
@@ -116,6 +117,7 @@
116
117
 
117
118
  /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
118
119
  :global(.vkuiInternalFormItem--withTop) :global(.vkuiInternalFormItem__removable) ~ .offset,
120
+ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
119
121
  :global(.vkuiInternalFormLayoutGroup--removable) :global(.vkuiInternalFormItem--withTop) ~ .offset {
120
122
  order: -1;
121
123
  display: block;
@@ -123,7 +125,7 @@
123
125
  block-size: calc(2px + var(--vkui--font_subhead--line_height--regular) + 8px);
124
126
  }
125
127
 
126
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
128
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
127
129
  :global(.vkuiInternalFormItem--sizeY-compact):global(.vkuiInternalFormItem--withTop)
128
130
  :global(.vkuiInternalFormItem__removable)
129
131
  ~ .offset,
@@ -132,9 +134,10 @@
132
134
  ~ .offset {
133
135
  block-size: calc(2px + var(--vkui--font_subhead--line_height--compact) + 6px);
134
136
  }
137
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
135
138
 
136
139
  @media (--sizeY-compact) {
137
- /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */
140
+ /* stylelint-disable selector-pseudo-class-disallowed-list */
138
141
  :global(.vkuiInternalFormItem--sizeY-none):global(.vkuiInternalFormItem--withTop)
139
142
  :global(.vkuiInternalFormItem__removable)
140
143
  ~ .offset,
@@ -143,4 +146,5 @@
143
146
  ~ .offset {
144
147
  block-size: calc(2px + var(--vkui--font_subhead--line_height--compact) + 6px);
145
148
  }
149
+ /* stylelint-enable selector-pseudo-class-disallowed-list */
146
150
  }
@@ -1,14 +1,19 @@
1
- 'use client';
2
-
3
1
  import * as React from 'react';
4
2
  import { Icon16Spinner, Icon24Spinner, Icon32Spinner, Icon44Spinner } from '@vkontakte/icons';
5
3
  import { classNames, hasReactNode } from '@vkontakte/vkjs';
6
- import { useReducedMotion } from '../../lib/animation';
7
4
  import type { HTMLAttributesWithRootRef } from '../../types';
8
5
  import { RootComponent } from '../RootComponent/RootComponent';
9
6
  import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';
7
+ import { SpinnerAnimation } from './SpinnerAnimation';
10
8
  import styles from './Spinner.module.css';
11
9
 
10
+ const spinnerIconMap = {
11
+ s: Icon16Spinner,
12
+ m: Icon24Spinner,
13
+ l: Icon32Spinner,
14
+ xl: Icon44Spinner,
15
+ };
16
+
12
17
  export interface SpinnerProps extends HTMLAttributesWithRootRef<HTMLSpanElement> {
13
18
  size?: 's' | 'm' | 'l' | 'xl';
14
19
  disableAnimation?: boolean;
@@ -29,50 +34,7 @@ export const Spinner: React.FC<SpinnerProps> = React.memo(
29
34
  noColor = false,
30
35
  ...restProps
31
36
  }: SpinnerProps) => {
32
- const isReducedMotion = useReducedMotion();
33
- const SpinnerIcon = {
34
- s: Icon16Spinner,
35
- m: Icon24Spinner,
36
- l: Icon32Spinner,
37
- xl: Icon44Spinner,
38
- }[size];
39
- let svgAnimateElement: React.ReactNode = null;
40
-
41
- const [isReadyForSetSVGAnimateElement, setIsReadyForSetSVGAnimateElement] = React.useState(
42
- disableAnimation ? true : false,
43
- );
44
-
45
- React.useEffect(function waitReactHydrationBeforeSetSVGAnimateElement() {
46
- setIsReadyForSetSVGAnimateElement(true);
47
- }, []);
48
-
49
- if (isReadyForSetSVGAnimateElement && !disableAnimation) {
50
- if (isReducedMotion) {
51
- svgAnimateElement = (
52
- <animate
53
- attributeName="opacity"
54
- keyTimes="0; 0.5; 1"
55
- values="1; 0.1; 1"
56
- begin="0s"
57
- dur="2s"
58
- repeatCount="indefinite"
59
- />
60
- );
61
- } else {
62
- const center = { s: 8, m: 12, l: 16, xl: 22 }[size];
63
- svgAnimateElement = (
64
- <animateTransform
65
- attributeType="XML"
66
- attributeName="transform"
67
- type="rotate"
68
- from={`0 ${center} ${center}`}
69
- to={`360 ${center} ${center}`}
70
- dur="0.7s"
71
- repeatCount="indefinite"
72
- />
73
- );
74
- }
75
- }
37
+ const SpinnerIcon = spinnerIconMap[size];
76
38
 
77
39
  return (
78
40
  <RootComponent
@@ -81,7 +43,7 @@ export const Spinner: React.FC<SpinnerProps> = React.memo(
81
43
  {...restProps}
82
44
  baseClassName={classNames(styles.host, noColor && styles.noColor)}
83
45
  >
84
- <SpinnerIcon>{svgAnimateElement}</SpinnerIcon>
46
+ <SpinnerIcon>{disableAnimation ? null : <SpinnerAnimation size={size} />}</SpinnerIcon>
85
47
  {hasReactNode(children) && <VisuallyHidden>{children}</VisuallyHidden>}
86
48
  </RootComponent>
87
49
  );