@vkontakte/vkui 4.25.2 → 4.26.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 (192) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +89 -55
  4. package/.cache/ts/src/components/ActionSheetItem/ActionSheetItem.d.ts +2 -2
  5. package/.cache/ts/src/components/AdaptivityProvider/AdaptivityProvider.d.ts +1 -1
  6. package/.cache/ts/src/components/Alert/Alert.d.ts +2 -2
  7. package/.cache/ts/src/components/AppRoot/AppRoot.d.ts +0 -1
  8. package/.cache/ts/src/components/CardScroll/CardScroll.d.ts +9 -2
  9. package/.cache/ts/src/components/ConfigProvider/ConfigProviderContext.d.ts +1 -1
  10. package/.cache/ts/src/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  11. package/.cache/ts/src/index.d.ts +3 -3
  12. package/.cache/ts/src/lib/platform.d.ts +1 -1
  13. package/.cache/ts/src/tokenized/{tokenized.d.ts → index.d.ts} +0 -0
  14. package/VKUI_TOKENS_MIGRATION_GUIDE.md +76 -0
  15. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.d.ts +2 -2
  16. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +5 -9
  17. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  18. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.d.ts +1 -1
  19. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js +4 -6
  20. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  21. package/dist/cjs/components/Alert/Alert.d.ts +2 -2
  22. package/dist/cjs/components/Alert/Alert.js +4 -7
  23. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  24. package/dist/cjs/components/AppRoot/AppRoot.d.ts +0 -1
  25. package/dist/cjs/components/AppRoot/AppRoot.js +2 -5
  26. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  27. package/dist/cjs/components/AppearanceProvider/AppearanceProvider.js +1 -1
  28. package/dist/cjs/components/AppearanceProvider/AppearanceProvider.js.map +1 -1
  29. package/dist/cjs/components/Button/Button.js +1 -3
  30. package/dist/cjs/components/Button/Button.js.map +1 -1
  31. package/dist/cjs/components/CardScroll/CardScroll.d.ts +9 -2
  32. package/dist/cjs/components/CardScroll/CardScroll.js +10 -4
  33. package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
  34. package/dist/cjs/components/ConfigProvider/ConfigProvider.js +40 -6
  35. package/dist/cjs/components/ConfigProvider/ConfigProvider.js.map +1 -1
  36. package/dist/cjs/components/ConfigProvider/ConfigProviderContext.d.ts +1 -1
  37. package/dist/cjs/components/ContentCard/ContentCard.js +8 -0
  38. package/dist/cjs/components/ContentCard/ContentCard.js.map +1 -1
  39. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +1 -1
  40. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  41. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  42. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +5 -1
  43. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  44. package/dist/cjs/components/IconButton/IconButton.js +8 -0
  45. package/dist/cjs/components/IconButton/IconButton.js.map +1 -1
  46. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +14 -5
  47. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  48. package/dist/cjs/components/PromoBanner/PromoBanner.js +7 -0
  49. package/dist/cjs/components/PromoBanner/PromoBanner.js.map +1 -1
  50. package/dist/cjs/components/Root/Root.js +5 -0
  51. package/dist/cjs/components/Root/Root.js.map +1 -1
  52. package/dist/cjs/components/TabbarItem/TabbarItem.js +8 -1
  53. package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
  54. package/dist/cjs/components/View/View.js +29 -18
  55. package/dist/cjs/components/View/View.js.map +1 -1
  56. package/dist/cjs/index.d.ts +3 -3
  57. package/dist/cjs/index.js +6 -6
  58. package/dist/cjs/index.js.map +1 -1
  59. package/dist/cjs/lib/platform.d.ts +1 -1
  60. package/dist/cjs/lib/platform.js.map +1 -1
  61. package/dist/cjs/tokenized/{tokenized.d.ts → index.d.ts} +0 -0
  62. package/dist/cjs/tokenized/{tokenized.js → index.js} +1 -1
  63. package/dist/cjs/tokenized/index.js.map +1 -0
  64. package/dist/components/ActionSheetItem/ActionSheetItem.d.ts +2 -2
  65. package/dist/components/ActionSheetItem/ActionSheetItem.js +4 -6
  66. package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  67. package/dist/components/AdaptivityProvider/AdaptivityProvider.d.ts +1 -1
  68. package/dist/components/AdaptivityProvider/AdaptivityProvider.js +2 -3
  69. package/dist/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  70. package/dist/components/Alert/Alert.d.ts +2 -2
  71. package/dist/components/Alert/Alert.js +3 -3
  72. package/dist/components/Alert/Alert.js.map +1 -1
  73. package/dist/components/AppRoot/AppRoot.d.ts +0 -1
  74. package/dist/components/AppRoot/AppRoot.js +1 -3
  75. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  76. package/dist/components/AppearanceProvider/AppearanceProvider.js +2 -2
  77. package/dist/components/AppearanceProvider/AppearanceProvider.js.map +1 -1
  78. package/dist/components/Button/Button.js +1 -2
  79. package/dist/components/Button/Button.js.map +1 -1
  80. package/dist/components/CardScroll/CardScroll.d.ts +9 -2
  81. package/dist/components/CardScroll/CardScroll.js +8 -3
  82. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  83. package/dist/components/ConfigProvider/ConfigProvider.js +39 -6
  84. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  85. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -1
  86. package/dist/components/ContentCard/ContentCard.js +7 -0
  87. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  88. package/dist/components/CustomSelectOption/CustomSelectOption.js +1 -1
  89. package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  90. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  91. package/dist/components/HorizontalScroll/HorizontalScroll.js +3 -1
  92. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  93. package/dist/components/IconButton/IconButton.js +7 -0
  94. package/dist/components/IconButton/IconButton.js.map +1 -1
  95. package/dist/components/PanelHeaderButton/PanelHeaderButton.js +13 -6
  96. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  97. package/dist/components/PromoBanner/PromoBanner.js +6 -0
  98. package/dist/components/PromoBanner/PromoBanner.js.map +1 -1
  99. package/dist/components/Root/Root.js +5 -0
  100. package/dist/components/Root/Root.js.map +1 -1
  101. package/dist/components/TabbarItem/TabbarItem.js +7 -1
  102. package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
  103. package/dist/components/View/View.js +29 -18
  104. package/dist/components/View/View.js.map +1 -1
  105. package/dist/components.css +14 -11
  106. package/dist/components.css.map +1 -1
  107. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +4 -6
  108. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  109. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js +2 -3
  110. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  111. package/dist/cssm/components/Alert/Alert.js +3 -3
  112. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  113. package/dist/cssm/components/AppRoot/AppRoot.js +1 -3
  114. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  115. package/dist/cssm/components/AppearanceProvider/AppearanceProvider.js +2 -2
  116. package/dist/cssm/components/AppearanceProvider/AppearanceProvider.js.map +1 -1
  117. package/dist/cssm/components/Button/Button.css +9 -11
  118. package/dist/cssm/components/Button/Button.js +1 -2
  119. package/dist/cssm/components/Button/Button.js.map +1 -1
  120. package/dist/cssm/components/Card/Card.css +6 -1
  121. package/dist/cssm/components/CardScroll/CardScroll.css +1 -1
  122. package/dist/cssm/components/CardScroll/CardScroll.js +8 -3
  123. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  124. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +39 -6
  125. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  126. package/dist/cssm/components/ContentCard/ContentCard.js +7 -0
  127. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  128. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +1 -1
  129. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  130. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +3 -1
  131. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  132. package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.css +1 -1
  133. package/dist/cssm/components/IconButton/IconButton.js +7 -0
  134. package/dist/cssm/components/IconButton/IconButton.js.map +1 -1
  135. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +13 -6
  136. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  137. package/dist/cssm/components/PromoBanner/PromoBanner.js +6 -0
  138. package/dist/cssm/components/PromoBanner/PromoBanner.js.map +1 -1
  139. package/dist/cssm/components/Root/Root.js +5 -0
  140. package/dist/cssm/components/Root/Root.js.map +1 -1
  141. package/dist/cssm/components/TabbarItem/TabbarItem.js +7 -1
  142. package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
  143. package/dist/cssm/components/View/View.js +29 -18
  144. package/dist/cssm/components/View/View.js.map +1 -1
  145. package/dist/cssm/index.js +3 -3
  146. package/dist/cssm/index.js.map +1 -1
  147. package/dist/cssm/lib/platform.js.map +1 -1
  148. package/dist/cssm/styles/components.css +14 -11
  149. package/dist/cssm/styles/themes.css +1 -1
  150. package/dist/{tokenized/tokenized.js → cssm/tokenized/index.js} +1 -1
  151. package/dist/cssm/tokenized/index.js.map +1 -0
  152. package/dist/index.d.ts +3 -3
  153. package/dist/index.js +3 -3
  154. package/dist/index.js.map +1 -1
  155. package/dist/lib/platform.d.ts +1 -1
  156. package/dist/lib/platform.js.map +1 -1
  157. package/dist/tokenized/{tokenized.d.ts → index.d.ts} +0 -0
  158. package/dist/{cssm/tokenized/tokenized.js → tokenized/index.js} +1 -1
  159. package/dist/tokenized/index.js.map +1 -0
  160. package/dist/vkui.css +15 -12
  161. package/dist/vkui.css.map +1 -1
  162. package/package.json +3 -3
  163. package/postcss.config.js +10 -1
  164. package/src/components/ActionSheetItem/ActionSheetItem.tsx +5 -6
  165. package/src/components/AdaptivityProvider/AdaptivityProvider.tsx +1 -2
  166. package/src/components/Alert/Alert.tsx +3 -2
  167. package/src/components/AppRoot/AppRoot.tsx +0 -3
  168. package/src/components/AppearanceProvider/AppearanceProvider.tsx +2 -2
  169. package/src/components/Button/Button.css +9 -39
  170. package/src/components/Button/Button.tsx +3 -4
  171. package/src/components/Card/Card.css +14 -22
  172. package/src/components/CardScroll/CardScroll.css +10 -23
  173. package/src/components/CardScroll/CardScroll.tsx +15 -4
  174. package/src/components/ConfigProvider/ConfigProvider.tsx +43 -7
  175. package/src/components/ContentCard/ContentCard.tsx +6 -0
  176. package/src/components/CustomSelectOption/CustomSelectOption.tsx +1 -1
  177. package/src/components/HorizontalScroll/HorizontalScroll.tsx +8 -2
  178. package/src/components/HorizontalScroll/HorizontalScrollArrow.css +3 -1
  179. package/src/components/IconButton/IconButton.tsx +8 -0
  180. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +19 -7
  181. package/src/components/PromoBanner/PromoBanner.tsx +8 -0
  182. package/src/components/Root/Root.tsx +12 -2
  183. package/src/components/TabbarItem/TabbarItem.tsx +8 -1
  184. package/src/components/View/View.tsx +15 -2
  185. package/src/index.ts +3 -3
  186. package/src/lib/platform.ts +5 -1
  187. package/src/styles/themes.css +6 -0
  188. package/src/testing/utils.tsx +1 -1
  189. package/src/tokenized/{tokenized.ts → index.ts} +0 -0
  190. package/dist/cjs/tokenized/tokenized.js.map +0 -1
  191. package/dist/cssm/tokenized/tokenized.js.map +0 -1
  192. package/dist/tokenized/tokenized.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/vkui",
3
- "version": "4.25.2",
3
+ "version": "4.26.0",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -47,7 +47,7 @@
47
47
  "@vkontakte/eslint-config": "2.5.0",
48
48
  "@vkontakte/icons": "^1.136.0",
49
49
  "@vkontakte/vk-bridge": "^2.1.3",
50
- "@vkontakte/vkui-tokens": "4.0.0-rc.71",
50
+ "@vkontakte/vkui-tokens": "4.2.0",
51
51
  "autoprefixer": "^10.4.2",
52
52
  "babel-jest": "^26.6.3",
53
53
  "babel-loader": "^8.2.3",
@@ -147,7 +147,7 @@
147
147
  "size": "yarn clear && concurrently 'yarn:babel' 'yarn:postcss' && size-limit",
148
148
  "size:ci": "yarn install --frozen-lockfile --ignore-scripts && yarn build:no-types",
149
149
  "styleguide": "cross-env NODE_ENV=development styleguidist server --config=styleguide/config.js",
150
- "styleguide:props": "cross-env NODE_ENV=development VKUI_STYLEGUIDE_PROPSPARSER=1 styleguidist server --config=styleguide/config.js",
150
+ "styleguide:props": "VKUI_STYLEGUIDE_PROPSPARSER=1 yarn styleguide",
151
151
  "styleguide:build": "cross-env NODE_ENV=production styleguidist build --config=styleguide/config.js",
152
152
  "dev": "yarn clear && concurrently \"yarn:tsc-dev\" \"yarn:babel-dev\" \"yarn:postcss-dev\"",
153
153
  "dev-cjs": "yarn clear && concurrently \"yarn:tsc-cjs-dev\" \"yarn:babel-cjs-dev\" \"yarn:postcss-dev\"",
package/postcss.config.js CHANGED
@@ -10,6 +10,10 @@ const { defaultSchemeId } = require("./package.json");
10
10
 
11
11
  const animationsSource = path.join(__dirname, "src/styles/animations.css");
12
12
  const cssPropSources = [
13
+ path.join(
14
+ __dirname,
15
+ "node_modules/@vkontakte/vkui-tokens/themes/vkBase/cssVars/declarations/onlyVariables.css"
16
+ ),
13
17
  path.join(__dirname, "src/styles/bright_light.css"),
14
18
  path.join(__dirname, "src/styles/constants.css"),
15
19
  animationsSource,
@@ -27,7 +31,12 @@ let plugins = [
27
31
  // postcss-custom-properties only works with :root
28
32
  scopeRoot({
29
33
  customPropRoot: ".vkui__root, .vkui__portal-root",
30
- except: path.resolve(`./src/styles/${defaultSchemeId}.css`),
34
+ except: [
35
+ path.resolve(`./src/styles/${defaultSchemeId}.css`),
36
+ path.resolve(
37
+ "./node_modules/@vkontakte/vkui-tokens/themes/vkBase/cssVars/declarations/onlyVariables.css"
38
+ ),
39
+ ],
31
40
  }),
32
41
  autoprefixer(),
33
42
  cssModules({
@@ -48,7 +48,7 @@ export interface ActionSheetItemProps
48
48
  const ActionSheetItem: React.FC<ActionSheetItemProps> = ({
49
49
  children,
50
50
  autoclose,
51
- mode,
51
+ mode = "default",
52
52
  meta,
53
53
  subtitle,
54
54
  before,
@@ -181,9 +181,8 @@ const ActionSheetItem: React.FC<ActionSheetItemProps> = ({
181
181
  );
182
182
  };
183
183
 
184
- ActionSheetItem.defaultProps = {
185
- mode: "default",
186
- };
184
+ const ActionSheetItemWithAdaptivity = withAdaptivity(ActionSheetItem, {
185
+ sizeY: true,
186
+ });
187
187
 
188
- // eslint-disable-next-line import/no-default-export
189
- export default withAdaptivity(ActionSheetItem, { sizeY: true });
188
+ export { ActionSheetItemWithAdaptivity as ActionSheetItem };
@@ -135,5 +135,4 @@ function calculateAdaptivity(
135
135
  return { viewWidth, viewHeight, sizeX, sizeY, hasMouse, deviceHasHover };
136
136
  }
137
137
 
138
- // eslint-disable-next-line import/no-default-export
139
- export default AdaptivityProvider;
138
+ export { AdaptivityProvider };
@@ -285,9 +285,10 @@ class Alert extends React.Component<TAlertProps, AlertState> {
285
285
  }
286
286
  }
287
287
 
288
- // eslint-disable-next-line import/no-default-export
289
- export default withPlatform(
288
+ const AlertWithPlatformAndAdaptivity = withPlatform(
290
289
  withAdaptivity(Alert, {
291
290
  viewWidth: true,
292
291
  })
293
292
  );
293
+
294
+ export { AlertWithPlatformAndAdaptivity as Alert };
@@ -209,6 +209,3 @@ export const AppRoot = withAdaptivity<AppRootProps>(
209
209
  hasMouse: true,
210
210
  }
211
211
  );
212
-
213
- // eslint-disable-next-line import/no-default-export
214
- export default AppRoot;
@@ -2,7 +2,7 @@ import * as React from "react";
2
2
  import { AppearanceType } from "@vkontakte/vk-bridge";
3
3
  import { AppearanceProviderContext } from "./AppearanceProviderContext";
4
4
  import { getScheme } from "../../helpers/getScheme";
5
- import { classNames } from "../../lib/classNames";
5
+ import { classNamesString } from "../../lib/classNames";
6
6
  import { usePlatform } from "../../hooks/usePlatform";
7
7
 
8
8
  export interface AppearanceProviderProps {
@@ -31,7 +31,7 @@ export const AppearanceProvider: React.FC<AppearanceProviderProps> = ({
31
31
  {React.Children.map(children, (child) => {
32
32
  if (React.isValidElement(child)) {
33
33
  return React.cloneElement(child, {
34
- className: classNames(
34
+ className: classNamesString(
35
35
  child.props.className,
36
36
  `vkui${appearanceContext.scheme}`
37
37
  ),
@@ -4,11 +4,11 @@
4
4
  box-sizing: border-box;
5
5
  text-decoration: none;
6
6
  border: none;
7
- min-height: var(--vkui--size_button_small_height--regular, 28px);
7
+ min-height: var(--vkui--size_button_small_height--compact);
8
8
  margin: 0;
9
9
  padding: 0;
10
10
  user-select: none;
11
- border-radius: var(--vkui--size_border_radius--regular, 8px);
11
+ border-radius: var(--vkui--size_border_radius--regular);
12
12
  max-width: 100%;
13
13
  }
14
14
 
@@ -41,7 +41,7 @@
41
41
  }
42
42
 
43
43
  .Button[disabled] {
44
- opacity: var(--vkui--opacity_disable, 0.4);
44
+ opacity: var(--vkui--opacity_disable);
45
45
  }
46
46
 
47
47
  .Button--lvl-primary[disabled]:not(.Button--clr-overlay):not(.Button--clr-negative):not(.Button--clr-positive),
@@ -163,15 +163,7 @@
163
163
  /* Mode = Secondary */
164
164
  .Button--lvl-secondary {
165
165
  background-color: var(
166
- --content_tint_background,
167
- var(--vkui--color_background_secondary)
168
- );
169
- }
170
-
171
- /* Only for VKCOM */
172
- .Button--vkcom.Button--lvl-secondary {
173
- background-color: var(
174
- --control_background,
166
+ --button_secondary_background,
175
167
  var(--vkui--color_background_secondary)
176
168
  );
177
169
  }
@@ -490,52 +482,30 @@
490
482
  transform: translateY(-1px);
491
483
  }
492
484
 
493
- /**
494
- * iOS
495
- */
496
- .Button--ios {
497
- min-height: 26px;
498
- border-radius: 10px;
499
- }
500
-
501
- /**
502
- * VKCOM
503
- */
504
- .Button--vkcom {
505
- min-height: 26px;
506
- border-radius: 4px;
507
- }
508
-
509
- .Button--vkcom.Button--lvl-secondary .Icon,
510
- .Button--vkcom.Button--lvl-tertiary .Icon,
511
- .Button--vkcom.Button--lvl-outline .Icon {
512
- opacity: 0.72;
513
- }
514
-
515
485
  /**
516
486
  * sizeY COMPACT
517
487
  */
518
488
  .Button--sz-m {
519
- min-height: var(--vkui--size_button_medium_height--compact, 32px);
489
+ min-height: var(--vkui--size_button_medium_height--compact);
520
490
  }
521
491
 
522
492
  .Button--sz-l {
523
- min-height: var(--vkui--size_button_large_height--compact, 36px);
493
+ min-height: var(--vkui--size_button_large_height--compact);
524
494
  }
525
495
 
526
496
  /**
527
497
  * sizeY REGULAR
528
498
  */
529
499
  .Button--sizeY-regular {
530
- min-height: var(--vkui--size_button_small_height--regular, 30px);
500
+ min-height: var(--vkui--size_button_small_height--regular);
531
501
  }
532
502
 
533
503
  .Button--sizeY-regular.Button--sz-m {
534
- min-height: var(--vkui--size_button_medium_height--regular, 36px);
504
+ min-height: var(--vkui--size_button_medium_height--regular);
535
505
  }
536
506
 
537
507
  .Button--sizeY-regular.Button--sz-l {
538
- min-height: var(--vkui--size_button_large_height--regular, 44px);
508
+ min-height: var(--vkui--size_button_large_height--regular);
539
509
  }
540
510
 
541
511
  /**
@@ -1,5 +1,4 @@
1
1
  import * as React from "react";
2
- import { getClassName } from "../../helpers/getClassName";
3
2
  import { classNames } from "../../lib/classNames";
4
3
  import { ConfigProviderContext } from "../ConfigProvider/ConfigProviderContext";
5
4
  import Tappable, { TappableProps } from "../Tappable/Tappable";
@@ -14,7 +13,7 @@ import {
14
13
  SizeType,
15
14
  withAdaptivity,
16
15
  } from "../../hoc/withAdaptivity";
17
- import { Platform, IOS, VKCOM } from "../../lib/platform";
16
+ import { IOS, VKCOM, PlatformType } from "../../lib/platform";
18
17
  import Spinner from "../Spinner/Spinner";
19
18
  import "./Button.css";
20
19
 
@@ -46,7 +45,7 @@ export interface ButtonProps
46
45
 
47
46
  interface ButtonTypographyProps extends HasComponent {
48
47
  size: ButtonProps["size"];
49
- platform: Platform | undefined;
48
+ platform: PlatformType | undefined;
50
49
  sizeY: AdaptivityProps["sizeY"];
51
50
  children?: ButtonProps["children"];
52
51
  }
@@ -174,7 +173,7 @@ const Button: React.FC<ButtonProps> = (props: ButtonProps) => {
174
173
  onClick={loading ? undefined : onClick}
175
174
  focusVisibleMode="outside"
176
175
  vkuiClass={classNames(
177
- getClassName("Button", platform),
176
+ "Button",
178
177
  `Button--sz-${size}`,
179
178
  `Button--lvl-${resolvedMode}`,
180
179
  `Button--clr-${resolvedAppearance}`,
@@ -1,6 +1,10 @@
1
1
  .Card {
2
2
  position: relative;
3
- background: var(--content_tint_background);
3
+ background: var(
4
+ --content_tint_background,
5
+ var(--vkui--color_background_secondary)
6
+ );
7
+ border-radius: var(--vkui--size_card_border_radius--regular);
4
8
  }
5
9
 
6
10
  .Card__in {
@@ -10,12 +14,16 @@
10
14
  }
11
15
 
12
16
  .Card--md-shadow {
13
- box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0.08), 0 0 2px 0 rgba(0, 0, 0, 0.08);
14
- background: var(--modal_card_background);
17
+ box-shadow: var(
18
+ --vkui--elevation3,
19
+ 0 2px 24px 0 rgba(0, 0, 0, 0.08),
20
+ 0 0 2px 0 rgba(0, 0, 0, 0.08)
21
+ );
22
+ background: var(--modal_card_background, var(--vkui--color_background_modal));
15
23
  }
16
24
 
17
25
  .Card--md-outline {
18
- background: var(--modal_card_background);
26
+ background: var(--modal_card_background, var(--vkui--color_background_modal));
19
27
  }
20
28
 
21
29
  .Card--md-outline::before {
@@ -26,25 +34,9 @@
26
34
  height: 100%;
27
35
  content: "";
28
36
  display: block;
29
- border: var(--thin-border) solid var(--input_border);
37
+ border: var(--thin-border) solid
38
+ var(--input_border, var(--vkui--color_image_border_alpha));
30
39
  z-index: 1;
31
40
  box-sizing: border-box;
32
41
  border-radius: inherit;
33
42
  }
34
-
35
- /**
36
- * iOS
37
- */
38
-
39
- .Card--ios {
40
- border-radius: 10px;
41
- }
42
-
43
- /**
44
- * Android, VKCOM
45
- */
46
-
47
- .Card--android,
48
- .Card--vkcom {
49
- border-radius: 8px;
50
- }
@@ -4,7 +4,7 @@
4
4
  }
5
5
 
6
6
  .CardScroll .Card {
7
- margin-right: 8px;
7
+ margin-right: var(--vkui--size_cardgrid_padding--regular);
8
8
  flex-shrink: 0;
9
9
  }
10
10
 
@@ -33,33 +33,20 @@
33
33
  width: 100%;
34
34
  }
35
35
 
36
- /**
37
- * iOS
38
- */
39
-
40
- .CardScroll--ios .CardScroll__gap {
41
- width: 12px;
42
- }
43
-
44
- /**
45
- * Android & VKCOM
46
- */
47
-
48
- .CardScroll--android .CardScroll__gap,
49
- .CardScroll--vkcom .CardScroll__gap {
50
- width: 16px;
36
+ .CardScroll--withSpaces .CardScroll__gap {
37
+ width: var(--vkui--size_base_padding_horizontal--regular);
51
38
  }
52
39
 
53
40
  /**
54
41
  * SplitCol
55
42
  */
56
43
 
57
- .SplitCol--spaced .CardScroll {
44
+ .SplitCol--spaced .CardScroll--withSpaces .CardScroll {
58
45
  margin-left: -16px;
59
46
  margin-right: -16px;
60
47
  }
61
48
 
62
- .SplitCol--spaced .CardScroll__gap {
49
+ .SplitCol--spaced .CardScroll--withSpaces .CardScroll__gap {
63
50
  width: 16px;
64
51
  }
65
52
 
@@ -75,7 +62,7 @@
75
62
  * Group
76
63
  */
77
64
 
78
- .Group--card .CardScroll {
65
+ .Group--card .CardScroll--withSpaces {
79
66
  margin-left: -8px;
80
67
  margin-right: -8px;
81
68
  }
@@ -88,10 +75,10 @@
88
75
  margin-right: 16px;
89
76
  }
90
77
 
91
- .Group--card .CardScroll:first-child {
92
- padding-top: 8px;
78
+ .Group--card .CardScroll--withSpaces:first-child {
79
+ padding-top: var(--vkui--size_cardgrid_padding_vertical--regular);
93
80
  }
94
81
 
95
- .Group--card .CardScroll:last-child {
96
- padding-bottom: 8px;
82
+ .Group--card .CardScroll--withSpaces:last-child {
83
+ padding-bottom: var(--vkui--size_cardgrid_padding_vertical--regular);
97
84
  }
@@ -2,7 +2,9 @@ import * as React from "react";
2
2
  import { classNames } from "../../lib/classNames";
3
3
  import { getClassName } from "../../helpers/getClassName";
4
4
  import { usePlatform } from "../../hooks/usePlatform";
5
- import HorizontalScroll from "../HorizontalScroll/HorizontalScroll";
5
+ import HorizontalScroll, {
6
+ HorizontalScrollProps,
7
+ } from "../HorizontalScroll/HorizontalScroll";
6
8
  import { withAdaptivity, AdaptivityProps } from "../../hoc/withAdaptivity";
7
9
  import { useDOM } from "../../lib/dom";
8
10
  import "./CardScroll.css";
@@ -10,13 +12,21 @@ import "./CardScroll.css";
10
12
  export interface CardScrollProps
11
13
  extends React.HTMLAttributes<HTMLDivElement>,
12
14
  AdaptivityProps {
13
- size?: "s" | "m" | "l";
15
+ /**
16
+ * При size = "s", "m", "l" у Card будет явно задана ширина в %
17
+ * При size = false ширина Card будет регулироваться контентом внутри
18
+ */
19
+ size?: "s" | "m" | "l" | false;
20
+ showArrows?: HorizontalScrollProps["showArrows"];
21
+ withSpaces: boolean;
14
22
  }
15
23
 
16
24
  const CardScroll: React.FC<CardScrollProps> = ({
17
25
  children,
18
26
  size,
27
+ showArrows = true,
19
28
  sizeX,
29
+ withSpaces = true,
20
30
  ...restProps
21
31
  }: CardScrollProps) => {
22
32
  const platform = usePlatform();
@@ -88,14 +98,15 @@ const CardScroll: React.FC<CardScrollProps> = ({
88
98
  {...restProps}
89
99
  vkuiClass={classNames(
90
100
  getClassName("CardScroll", platform),
101
+ `CardScroll--sizeX-${sizeX}`,
91
102
  `CardScroll--${size}`,
92
- `CardScroll--sizeX-${sizeX}`
103
+ { ["CardScroll--withSpaces"]: withSpaces }
93
104
  )}
94
105
  >
95
106
  <HorizontalScroll
96
107
  getScrollToLeft={getScrollToLeft}
97
108
  getScrollToRight={getScrollToRight}
98
- showArrows={true}
109
+ showArrows={showArrows}
99
110
  >
100
111
  <div vkuiClass="CardScroll__in" ref={refContainer}>
101
112
  <span vkuiClass="CardScroll__gap" ref={gapRef} />
@@ -16,6 +16,7 @@ import {
16
16
  Scheme,
17
17
  } from "../../helpers/scheme";
18
18
  import { AppearanceProvider } from "../AppearanceProvider/AppearanceProvider";
19
+ import { Platform } from "../../lib/platform";
19
20
 
20
21
  export interface ConfigProviderProps extends ConfigProviderContextInterface {
21
22
  /**
@@ -58,21 +59,41 @@ const deriveAppearance = (scheme: Scheme | undefined): AppearanceType =>
58
59
  ? "dark"
59
60
  : "light";
60
61
 
62
+ const generateVKUITokensClassName = (
63
+ platform: string,
64
+ appearance: string
65
+ ): string => {
66
+ let tokensPlatform;
67
+ switch (platform) {
68
+ case Platform.ANDROID:
69
+ tokensPlatform = "vkBase";
70
+ break;
71
+ case Platform.IOS:
72
+ tokensPlatform = "vkIOS";
73
+ break;
74
+ case Platform.VKCOM:
75
+ tokensPlatform = "vkCom";
76
+ break;
77
+ default:
78
+ tokensPlatform = platform;
79
+ }
80
+
81
+ return `vkui--${tokensPlatform}--${appearance}`;
82
+ };
83
+
61
84
  const ConfigProvider: React.FC<ConfigProviderProps> = ({
62
85
  children,
63
- schemeTarget,
64
86
  ...props
65
- }: React.PropsWithChildren<ConfigProviderProps> & {
66
- schemeTarget?: HTMLElement;
67
87
  }) => {
68
88
  const config = { ...defaultConfigProviderProps, ...props };
89
+ const { platform, appearance } = config;
69
90
  const scheme = normalizeScheme({
70
91
  scheme: config.scheme,
71
- platform: config.platform,
72
- appearance: config.appearance,
92
+ platform: platform,
93
+ appearance: appearance,
73
94
  });
74
95
  const { document } = useDOM();
75
- const target = schemeTarget || document?.body;
96
+ const target = document?.body;
76
97
 
77
98
  useIsomorphicLayoutEffect(() => {
78
99
  if (scheme === "inherit") {
@@ -91,8 +112,23 @@ const ConfigProvider: React.FC<ConfigProviderProps> = ({
91
112
  }, [scheme]);
92
113
 
93
114
  const realScheme = useSchemeDetector(target, scheme);
115
+ const derivedAppearance = deriveAppearance(realScheme);
116
+
117
+ useIsomorphicLayoutEffect(() => {
118
+ const VKUITokensClassName = generateVKUITokensClassName(
119
+ platform,
120
+ derivedAppearance
121
+ );
122
+
123
+ target?.classList.add(VKUITokensClassName);
124
+
125
+ return () => {
126
+ target?.classList.remove(VKUITokensClassName);
127
+ };
128
+ }, [platform, derivedAppearance]);
129
+
94
130
  const configContext = useObjectMemo({
95
- appearance: deriveAppearance(realScheme),
131
+ appearance: derivedAppearance,
96
132
  ...config,
97
133
  });
98
134
 
@@ -7,6 +7,7 @@ import Tappable, { TappableProps } from "../Tappable/Tappable";
7
7
  import { getClassName } from "../../helpers/getClassName";
8
8
  import { usePlatform } from "../../hooks/usePlatform";
9
9
  import { hasReactNode } from "../../lib/utils";
10
+ import { warnOnce } from "../../lib/warnOnce";
10
11
  import { HasRef, HasRootRef } from "../../types";
11
12
  import { classNames } from "../../lib/classNames";
12
13
  import "./ContentCard.css";
@@ -46,6 +47,7 @@ export interface ContentCardProps
46
47
  mode?: CardProps["mode"];
47
48
  }
48
49
 
50
+ const warn = warnOnce("ContentCard");
49
51
  const ContentCard: React.FC<ContentCardProps> = (props: ContentCardProps) => {
50
52
  const {
51
53
  subtitle,
@@ -78,6 +80,10 @@ const ContentCard: React.FC<ContentCardProps> = (props: ContentCardProps) => {
78
80
 
79
81
  const source = image || src;
80
82
 
83
+ if (image && process.env.NODE_ENV === "development") {
84
+ warn("Свойство image устарело и будет удалено в 5.0.0. Используйте src");
85
+ }
86
+
81
87
  return (
82
88
  <Card
83
89
  mode={mode}
@@ -39,7 +39,7 @@ const CustomSelectOption: React.FC<CustomSelectOptionProps> = ({
39
39
  const { sizeY } = useAdaptivity();
40
40
 
41
41
  if (!!option && process.env.NODE_ENV === "development") {
42
- warn("Свойство option было добавлено по ошибке будет и удалено в 5.0.0");
42
+ warn("Свойство option было добавлено по ошибке и будет удалено в 5.0.0.");
43
43
  }
44
44
 
45
45
  return (
@@ -7,6 +7,7 @@ import { easeInOutSine } from "../../lib/fx";
7
7
  import { useEventListener } from "../../hooks/useEventListener";
8
8
  import { useExternRef } from "../../hooks/useExternRef";
9
9
  import { HasRef } from "../../types";
10
+ import { classNames } from "../../lib/classNames";
10
11
  import "./HorizontalScroll.css";
11
12
 
12
13
  interface ScrollContext {
@@ -38,7 +39,7 @@ export interface HorizontalScrollProps
38
39
  * Функция для расчета величины прокрутки при клике на правую стрелку.
39
40
  */
40
41
  getScrollToRight?: ScrollPositionHandler;
41
- showArrows?: boolean;
42
+ showArrows?: boolean | "always";
42
43
  scrollAnimationDuration?: number;
43
44
  }
44
45
 
@@ -181,7 +182,12 @@ const HorizontalScroll: React.FC<HorizontalScrollProps> = ({
181
182
  React.useEffect(onscroll, [scrollerRef, children, onscroll]);
182
183
 
183
184
  return (
184
- <div {...restProps} vkuiClass={getClassName("HorizontalScroll", platform)}>
185
+ <div
186
+ {...restProps}
187
+ vkuiClass={classNames(getClassName("HorizontalScroll", platform), {
188
+ ["HorizontalScroll--withConstArrows"]: showArrows === "always",
189
+ })}
190
+ >
185
191
  {showArrows && hasMouse && canScrollLeft && (
186
192
  <HorizontalScrollArrow
187
193
  direction="left"
@@ -22,7 +22,9 @@
22
22
  }
23
23
 
24
24
  .HorizontalScroll:hover .HorizontalScrollArrow:hover,
25
- .Gallery:hover .HorizontalScrollArrow:hover {
25
+ .Gallery:hover .HorizontalScrollArrow:hover,
26
+ .HorizontalScroll--withConstArrows .HorizontalScrollArrow,
27
+ .HorizontalScroll--withConstArrows:hover .HorizontalScrollArrow {
26
28
  opacity: 1;
27
29
  }
28
30
 
@@ -5,6 +5,7 @@ import { classNames } from "../../lib/classNames";
5
5
  import { usePlatform } from "../../hooks/usePlatform";
6
6
  import { withAdaptivity } from "../../hoc/withAdaptivity";
7
7
  import { IOS } from "../../lib/platform";
8
+ import { warnOnce } from "../../lib/warnOnce";
8
9
  import "./IconButton.css";
9
10
 
10
11
  export interface IconButtonProps extends TappableProps {
@@ -14,6 +15,7 @@ export interface IconButtonProps extends TappableProps {
14
15
  icon?: React.ReactNode;
15
16
  }
16
17
 
18
+ const warn = warnOnce("IconButton");
17
19
  const IconButton: React.FC<IconButtonProps> = ({
18
20
  icon,
19
21
  sizeY,
@@ -23,6 +25,12 @@ const IconButton: React.FC<IconButtonProps> = ({
23
25
  }: IconButtonProps) => {
24
26
  const platform = usePlatform();
25
27
 
28
+ if (icon && process.env.NODE_ENV === "development") {
29
+ warn(
30
+ "Свойство icon устарело и будет удалено в 5.0.0. Используйте children"
31
+ );
32
+ }
33
+
26
34
  return (
27
35
  <Tappable
28
36
  {...restProps}
@@ -2,8 +2,9 @@ import * as React from "react";
2
2
  import Tappable, { TappableProps } from "../Tappable/Tappable";
3
3
  import { getClassName } from "../../helpers/getClassName";
4
4
  import { classNames } from "../../lib/classNames";
5
+ import { warnOnce } from "../../lib/warnOnce";
5
6
  import { usePlatform } from "../../hooks/usePlatform";
6
- import { isPrimitiveReactNode } from "../../lib/utils";
7
+ import { getTitleFromChildren, isPrimitiveReactNode } from "../../lib/utils";
7
8
  import { IOS, VKCOM, ANDROID } from "../../lib/platform";
8
9
  import Text from "../Typography/Text/Text";
9
10
  import Title from "../Typography/Title/Title";
@@ -41,9 +42,10 @@ const ButtonTypography: React.FC<ButtonTypographyProps> = ({
41
42
  );
42
43
  };
43
44
 
45
+ const warn = warnOnce("PanelHeaderButton");
44
46
  export const PanelHeaderButton: React.FC<PanelHeaderButtonProps> = ({
45
47
  children,
46
- primary,
48
+ primary = false,
47
49
  label,
48
50
  ...restProps
49
51
  }: PanelHeaderButtonProps) => {
@@ -68,6 +70,21 @@ export const PanelHeaderButton: React.FC<PanelHeaderButtonProps> = ({
68
70
  activeMode = "PanelHeaderButton--active";
69
71
  }
70
72
 
73
+ if (process.env.NODE_ENV === "development") {
74
+ const hasAccessibleName = Boolean(
75
+ getTitleFromChildren(children) ||
76
+ getTitleFromChildren(label) ||
77
+ restProps["aria-label"] ||
78
+ restProps["aria-labelledby"]
79
+ );
80
+
81
+ if (!hasAccessibleName) {
82
+ warn(
83
+ "a11y: У кнопки нет названия, которое может прочитать скринридер, и она недоступна для части пользователей. Замените содержимое на текст или добавьте описание действия с помощью пропа aria-label."
84
+ );
85
+ }
86
+ }
87
+
71
88
  return (
72
89
  <Tappable
73
90
  {...restProps}
@@ -94,8 +111,3 @@ export const PanelHeaderButton: React.FC<PanelHeaderButtonProps> = ({
94
111
  </Tappable>
95
112
  );
96
113
  };
97
-
98
- PanelHeaderButton.defaultProps = {
99
- primary: false,
100
- "aria-label": "Закрыть",
101
- };