@vkontakte/vkui 7.11.2 → 7.11.4

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 (64) hide show
  1. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  2. package/dist/components/ContentCard/ContentCard.js +4 -1
  3. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  4. package/dist/components/Flex/Flex.js.map +1 -1
  5. package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
  6. package/dist/components/ImageBase/ImageBase.js +4 -1
  7. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  8. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts +1 -1
  9. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
  10. package/dist/components/PanelHeaderButton/PanelHeaderButton.js +18 -20
  11. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  12. package/dist/components/SimpleGrid/SimpleGrid.js +1 -1
  13. package/dist/components/SimpleGrid/SimpleGrid.js.map +1 -1
  14. package/dist/components/Tooltip/useTooltip.d.ts.map +1 -1
  15. package/dist/components/Tooltip/useTooltip.js +2 -13
  16. package/dist/components/Tooltip/useTooltip.js.map +1 -1
  17. package/dist/components/Touch/Touch.d.ts.map +1 -1
  18. package/dist/components/Touch/Touch.js +6 -1
  19. package/dist/components/Touch/Touch.js.map +1 -1
  20. package/dist/components.css +1 -1
  21. package/dist/components.css.map +1 -1
  22. package/dist/cssm/components/CalendarHeader/CalendarHeader.module.css +4 -0
  23. package/dist/cssm/components/ContentCard/ContentCard.js +4 -1
  24. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  25. package/dist/cssm/components/Flex/Flex.js.map +1 -1
  26. package/dist/cssm/components/ImageBase/ImageBase.js +4 -1
  27. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  28. package/dist/cssm/components/ModalCard/ModalCard.module.css +8 -7
  29. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +14 -19
  30. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  31. package/dist/cssm/components/SimpleGrid/SimpleGrid.js +1 -1
  32. package/dist/cssm/components/SimpleGrid/SimpleGrid.js.map +1 -1
  33. package/dist/cssm/components/Tooltip/useTooltip.js +2 -13
  34. package/dist/cssm/components/Tooltip/useTooltip.js.map +1 -1
  35. package/dist/cssm/components/Touch/Touch.js +6 -1
  36. package/dist/cssm/components/Touch/Touch.js.map +1 -1
  37. package/dist/cssm/hooks/useAdaptivityWithJSMediaQueries.js +5 -4
  38. package/dist/cssm/hooks/useAdaptivityWithJSMediaQueries.js.map +1 -1
  39. package/dist/cssm/lib/layouts/gaps.js +0 -6
  40. package/dist/cssm/lib/layouts/gaps.js.map +1 -1
  41. package/dist/hooks/useAdaptivityWithJSMediaQueries.d.ts +0 -13
  42. package/dist/hooks/useAdaptivityWithJSMediaQueries.d.ts.map +1 -1
  43. package/dist/hooks/useAdaptivityWithJSMediaQueries.js +5 -4
  44. package/dist/hooks/useAdaptivityWithJSMediaQueries.js.map +1 -1
  45. package/dist/lib/layouts/gaps.d.ts +1 -1
  46. package/dist/lib/layouts/gaps.d.ts.map +1 -1
  47. package/dist/lib/layouts/gaps.js +0 -6
  48. package/dist/lib/layouts/gaps.js.map +1 -1
  49. package/dist/vkui.css +1 -1
  50. package/dist/vkui.css.map +1 -1
  51. package/package.json +1 -1
  52. package/src/components/CalendarHeader/CalendarHeader.module.css +4 -0
  53. package/src/components/CalendarHeader/CalendarHeader.module.css.d.ts.map +1 -1
  54. package/src/components/ContentCard/ContentCard.tsx +4 -1
  55. package/src/components/Flex/Flex.tsx +2 -2
  56. package/src/components/ImageBase/ImageBase.tsx +4 -1
  57. package/src/components/ModalCard/ModalCard.module.css +8 -7
  58. package/src/components/ModalCard/ModalCard.module.css.d.ts.map +1 -1
  59. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +18 -20
  60. package/src/components/SimpleGrid/SimpleGrid.tsx +1 -1
  61. package/src/components/Tooltip/useTooltip.tsx +1 -13
  62. package/src/components/Touch/Touch.tsx +5 -0
  63. package/src/hooks/useAdaptivityWithJSMediaQueries.ts +8 -3
  64. package/src/lib/layouts/gaps.ts +1 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "module",
3
- "version": "7.11.2",
3
+ "version": "7.11.4",
4
4
  "name": "@vkontakte/vkui",
5
5
  "description": "VKUI library",
6
6
  "module": "./dist/index.js",
@@ -24,6 +24,10 @@
24
24
  padding: 3px;
25
25
  }
26
26
 
27
+ .navIcon.navIcon {
28
+ border-radius: var(--vkui--size_border_radius--regular);
29
+ }
30
+
27
31
  .navIconAccent {
28
32
  color: var(--vkui--color_icon_accent);
29
33
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["./CalendarHeader.module.css"],"names":["host","pickers","picker","navIcon","navIconAccent","navIconNext","navIconPrev","month"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAQAC,S,WARA;AAAA,E,aAcAC,Q,WAdA;AAAA,E,aAcUA,Q,WAdV;AAAA,E,aAkBAC,S,WAlBA;AAAA,E,aA0BAC,e,WA1BA;AAAA,E,aA8BAC,a,WA9BA;AAAA,E,aAkCAC,a,WAlCA;AAAA,E,aAsCAC,O,WAtCA;AAAA;AAAA","file":"CalendarHeader.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./CalendarHeader.module.css"],"names":["host","pickers","picker","navIcon","navIconAccent","navIconNext","navIconPrev","month"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAQAC,S,WARA;AAAA,E,aAcAC,Q,WAdA;AAAA,E,aAcUA,Q,WAdV;AAAA,E,aAkBAC,S,WAlBA;AAAA,E,aA0BAA,S,WA1BA;AAAA,E,aA0BQA,S,WA1BR;AAAA,E,aA8BAC,e,WA9BA;AAAA,E,aAkCAC,a,WAlCA;AAAA,E,aAsCAC,a,WAtCA;AAAA,E,aA0CAC,O,WA1CA;AAAA;AAAA","file":"CalendarHeader.module.css.d.ts","sourceRoot":""}
@@ -102,6 +102,10 @@ export const ContentCard = ({
102
102
  >
103
103
  {(src || srcSet) && (
104
104
  <img
105
+ // safari и firefox нужно чтобы атрибут `loading` был до `src`
106
+ //
107
+ // https://mihaly4.ru/image-loading-lazy-bug
108
+ loading={loading}
105
109
  ref={getRef}
106
110
  className={styles.img}
107
111
  src={src}
@@ -109,7 +113,6 @@ export const ContentCard = ({
109
113
  alt={alt}
110
114
  crossOrigin={crossOrigin}
111
115
  decoding={decoding}
112
- loading={loading}
113
116
  referrerPolicy={referrerPolicy}
114
117
  sizes={sizes}
115
118
  useMap={useMap}
@@ -145,14 +145,14 @@ export const Flex: React.FC<FlexProps> & {
145
145
  );
146
146
  };
147
147
 
148
- function getGapsPresets(rowGap?: GapProp, columnGap?: GapProp) {
148
+ function getGapsPresets(rowGap: GapProp, columnGap: GapProp) {
149
149
  return classNames(
150
150
  typeof rowGap === 'string' && rowGapClassNames[rowGap],
151
151
  typeof columnGap === 'string' && columnGapClassNames[columnGap],
152
152
  );
153
153
  }
154
154
 
155
- function getGapsByUser(rowGap?: GapProp, columnGap?: GapProp) {
155
+ function getGapsByUser(rowGap: GapProp, columnGap: GapProp) {
156
156
  const style: CSSCustomProperties = {};
157
157
 
158
158
  if (typeof rowGap === 'number') {
@@ -257,6 +257,10 @@ export const ImageBase: React.FC<ImageBaseProps> & {
257
257
  } = useMergeProps<React.ComponentProps<'img'> & HasRootRef<HTMLImageElement> & HasDataAttribute>(
258
258
  hasSrc
259
259
  ? {
260
+ // safari и firefox нужно чтобы атрибут `loading` был до `src`
261
+ //
262
+ // https://mihaly4.ru/image-loading-lazy-bug
263
+ loading,
260
264
  getRootRef: getRef,
261
265
  alt,
262
266
  className: classNames(
@@ -269,7 +273,6 @@ export const ImageBase: React.FC<ImageBaseProps> & {
269
273
  ),
270
274
  crossOrigin,
271
275
  decoding,
272
- loading,
273
276
  referrerPolicy,
274
277
  style: mergeStyle(
275
278
  keepAspectRatio
@@ -22,16 +22,17 @@
22
22
  .hostMobile {
23
23
  --vkui_internal_ModalCard--translateY: 100%;
24
24
  --vkui_internal_ModalCard--safeAreaInsetBottom: var(--vkui_internal--safe_area_inset_bottom);
25
+ --vkui_internal_ModalCard--insetBlockEnd: calc(
26
+ var(--vkui--spacing_size_m) +
27
+ var(--vkui_internal_ModalCard--safeAreaInsetBottom)
28
+ );
25
29
 
26
30
  position: absolute;
27
31
  /*
28
32
  * Используем inset вместо padding, чтобы срабатывала логика с закрытие с Click Outside.
29
33
  * Для этого также нужны `inline-size: auto` и `margin-inline: auto`.
30
34
  */
31
- inset-block-end: calc(
32
- var(--vkui--spacing_size_m) +
33
- var(--vkui_internal_ModalCard--safeAreaInsetBottom)
34
- );
35
+ inset-block-end: var(--vkui_internal_ModalCard--insetBlockEnd);
35
36
  inset-inline: var(--vkui--spacing_size_m);
36
37
  box-sizing: border-box;
37
38
  inline-size: auto;
@@ -40,7 +41,7 @@
40
41
  }
41
42
 
42
43
  .hostMobile.hostStateEnter {
43
- transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--safeAreaInsetBottom)), 0);
44
+ transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--insetBlockEnd)), 0);
44
45
  transition: none;
45
46
  }
46
47
 
@@ -49,12 +50,12 @@
49
50
  }
50
51
 
51
52
  .hostMobile.hostStateExiting {
52
- transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--safeAreaInsetBottom)), 0);
53
+ transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--insetBlockEnd)), 0);
53
54
  transition: transform 0.2s ease;
54
55
  }
55
56
 
56
57
  .hostMobile.hostStateExited {
57
- transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--safeAreaInsetBottom)), 0);
58
+ transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--insetBlockEnd)), 0);
58
59
  transition: none;
59
60
  }
60
61
 
@@ -1 +1 @@
1
- {"version":3,"sources":["./ModalCard.module.css"],"names":["host","hostMaxWidthS","hostMaxWidthM","hostMaxWidthL","hostMobile","hostStateEnter","hostStateEntering","hostStateExiting","hostStateExited","hostDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAIAA,M,WAJA;AAAA,E,aAQAC,e,WARA;AAAA,E,aAYAC,e,WAZA;AAAA,E,aAgBAC,e,WAhBA;AAAA,E,aAqBAC,Y,WArBA;AAAA,E,aAyCAA,Y,WAzCA;AAAA,E,aAyCWC,gB,WAzCX;AAAA,E,aA8CAD,Y,WA9CA;AAAA,E,aA8CWE,mB,WA9CX;AAAA,E,aAkDAF,Y,WAlDA;AAAA,E,aAkDWG,kB,WAlDX;AAAA,E,aAuDAH,Y,WAvDA;AAAA,E,aAuDWI,iB,WAvDX;AAAA,E,aA6DAC,a,WA7DA;AAAA,E,aAqEAA,a,WArEA;AAAA,E,aAqEYJ,gB,WArEZ;AAAA,E,aA0EAI,a,WA1EA;AAAA,E,aA0EYH,mB,WA1EZ;AAAA,E,aA8EAG,a,WA9EA;AAAA,E,aA8EYF,kB,WA9EZ;AAAA,E,aAkFAE,a,WAlFA;AAAA,E,aAkFYD,iB,WAlFZ;AAAA;AAAA","file":"ModalCard.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./ModalCard.module.css"],"names":["host","hostMaxWidthS","hostMaxWidthM","hostMaxWidthL","hostMobile","hostStateEnter","hostStateEntering","hostStateExiting","hostStateExited","hostDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAIAA,M,WAJA;AAAA,E,aAQAC,e,WARA;AAAA,E,aAYAC,e,WAZA;AAAA,E,aAgBAC,e,WAhBA;AAAA,E,aAqBAC,Y,WArBA;AAAA,E,aA0CAA,Y,WA1CA;AAAA,E,aA0CWC,gB,WA1CX;AAAA,E,aA+CAD,Y,WA/CA;AAAA,E,aA+CWE,mB,WA/CX;AAAA,E,aAmDAF,Y,WAnDA;AAAA,E,aAmDWG,kB,WAnDX;AAAA,E,aAwDAH,Y,WAxDA;AAAA,E,aAwDWI,iB,WAxDX;AAAA,E,aA8DAC,a,WA9DA;AAAA,E,aAsEAA,a,WAtEA;AAAA,E,aAsEYJ,gB,WAtEZ;AAAA,E,aA2EAI,a,WA3EA;AAAA,E,aA2EYH,mB,WA3EZ;AAAA,E,aA+EAG,a,WA/EA;AAAA,E,aA+EYF,kB,WA/EZ;AAAA,E,aAmFAE,a,WAnFA;AAAA,E,aAmFYD,iB,WAnFZ;AAAA;AAAA","file":"ModalCard.module.css.d.ts","sourceRoot":""}
@@ -16,6 +16,18 @@ const platformClassNames = {
16
16
  vkcom: styles.vkcom,
17
17
  };
18
18
 
19
+ const defaultHoverMode = {
20
+ ios: 'background',
21
+ android: 'background',
22
+ vkcom: styles.hover,
23
+ };
24
+
25
+ const defaultActiveMode = {
26
+ ios: 'opacity',
27
+ android: 'background',
28
+ vkcom: styles.active,
29
+ };
30
+
19
31
  export interface PanelHeaderButtonProps extends Omit<TappableOmitProps, 'label'> {
20
32
  /**
21
33
  * Флаг для обозначения первичной кнопки
@@ -59,29 +71,15 @@ export const PanelHeaderButton = ({
59
71
  children,
60
72
  primary = false,
61
73
  label,
74
+ activeEffectDelay = 200,
75
+ hoverMode,
76
+ activeMode,
62
77
  ...restProps
63
78
  }: PanelHeaderButtonProps): React.ReactNode => {
64
79
  const isPrimitive = isPrimitiveReactNode(children);
65
80
  const isPrimitiveLabel = isPrimitiveReactNode(label);
66
81
  const platform = usePlatform();
67
82
 
68
- let hoverMode;
69
- let activeMode;
70
-
71
- switch (platform) {
72
- case 'ios':
73
- hoverMode = 'background';
74
- activeMode = 'opacity';
75
- break;
76
- case 'vkcom':
77
- hoverMode = styles.hover;
78
- activeMode = styles.active;
79
- break;
80
- default:
81
- hoverMode = 'background';
82
- activeMode = 'background';
83
- }
84
-
85
83
  if (process.env.NODE_ENV === 'development') {
86
84
  /* istanbul ignore next: проверка в dev mode, тест на hasAccessibleName() есть в lib/accessibility.test.tsx */
87
85
  const isAccessible = hasAccessibleName({
@@ -100,9 +98,9 @@ export const PanelHeaderButton = ({
100
98
  return (
101
99
  <Tappable
102
100
  Component={restProps.href ? 'a' : 'button'}
103
- hoverMode={hoverMode}
104
- activeEffectDelay={200}
105
- activeMode={activeMode}
101
+ activeEffectDelay={activeEffectDelay}
102
+ hoverMode={hoverMode ? hoverMode : defaultHoverMode[platform]}
103
+ activeMode={activeMode ? activeMode : defaultActiveMode[platform]}
106
104
  {...restProps}
107
105
  baseClassName={classNames(
108
106
  styles.host,
@@ -71,7 +71,7 @@ export interface SimpleGridProps
71
71
  */
72
72
  export const SimpleGrid = ({
73
73
  columns = 1,
74
- gap,
74
+ gap = 0,
75
75
  margin = 'none',
76
76
  minColWidth,
77
77
  align = 'stretch',
@@ -9,7 +9,7 @@ import {
9
9
  type UseFloatingElementProps,
10
10
  } from '../../hooks/useFloatingElement';
11
11
  import { animationFadeClassNames } from '../../lib/animation';
12
- import { getArrowCoordsByMiddlewareData, sizeMiddleware } from '../../lib/floating';
12
+ import { getArrowCoordsByMiddlewareData } from '../../lib/floating';
13
13
  import { type ReferenceProps } from '../../lib/floating/useFloatingWithInteractions/types';
14
14
  import { AppRootPortal } from '../AppRoot/AppRootPortal';
15
15
  import { TooltipBase } from '../TooltipBase/TooltipBase';
@@ -171,18 +171,6 @@ export const useTooltip = ({
171
171
  renderFloatingComponent,
172
172
  externalFloatingElementRef: getRootRef,
173
173
  remapReferenceProps,
174
-
175
- customMiddlewares: [
176
- sizeMiddleware({
177
- apply({ rects, elements, availableWidth }) {
178
- const width = Math.min(Math.ceil(rects.floating.width), Math.floor(availableWidth));
179
- Object.assign(elements.floating.style, {
180
- width: `${width}px`,
181
- });
182
- },
183
- padding: overflowPadding,
184
- }),
185
- ],
186
174
  });
187
175
 
188
176
  return {
@@ -465,6 +465,11 @@ export const Touch = ({
465
465
  // handlePointerDown(onTouchStart устанавливается отдельно через initializeNativeTouchEventStartWithPassiveFalse)
466
466
  onMouseDownCapture={useCapture ? handlePointerDown : undefined}
467
467
  onMouseDown={!useCapture ? handlePointerDown : undefined}
468
+ onPointerDown={(event: PointerEvent) => {
469
+ if (event.pointerType === 'touch' || event.pointerType === 'pen') {
470
+ event.preventDefault();
471
+ }
472
+ }}
468
473
  />
469
474
  );
470
475
  };
@@ -13,6 +13,7 @@ import {
13
13
  tryToCheckIsDesktop,
14
14
  } from '../lib/adaptivity';
15
15
  import { matchMediaListAddListener, matchMediaListRemoveListener } from '../lib/matchMedia';
16
+ import { warnOnce } from '../lib/warnOnce';
16
17
  import { useMediaQueries } from './useMediaQueries';
17
18
  import { usePlatform } from './usePlatform';
18
19
 
@@ -33,14 +34,18 @@ export interface UseAdaptivityWithJSMediaQueries extends Required<BaseAdaptivity
33
34
  * > Лучше всего использовать для всплывающих окон, т.к. они вызываются только после загрузки
34
35
  * > страницы либо пользователем, либо программно.
35
36
  */
37
+ const warn = warnOnce('useAdaptivityWithJSMediaQueries');
38
+
36
39
  export const useAdaptivityWithJSMediaQueries = (): UseAdaptivityWithJSMediaQueries => {
37
40
  if (!canUseDOM) {
38
- // eslint-disable-next-line no-console
39
- console.error(`[useAdaptivityWithJSMediaQueries] Похоже, вы пытаетесь использовать хук вне браузера.
41
+ warn(
42
+ `Похоже, вы пытаетесь использовать хук вне браузера.
40
43
 
41
44
  Постарайтесь этого избегать, чтобы не было ошибок при гидратации: при SSR нет информации о размерах экрана.
42
45
 
43
- Используйте CSS Media Query или библиотеку по типу https://github.com/artsy/fresnel.`);
46
+ Используйте CSS Media Query или библиотеку по типу https://github.com/artsy/fresnel.`,
47
+ 'error',
48
+ );
44
49
  }
45
50
 
46
51
  const {
@@ -33,12 +33,7 @@ export type GapsProp = GapProp | [GapProp, GapProp];
33
33
  /**
34
34
  * Возвращает массив отступов [rowGap, columnGap]
35
35
  */
36
- export function calculateGap(
37
- gap: GapsProp | undefined,
38
- ): [GapProp, GapProp] | [undefined, undefined] {
39
- if (gap === undefined) {
40
- return [undefined, undefined];
41
- }
36
+ export function calculateGap(gap: GapsProp): [GapProp, GapProp] {
42
37
  if (typeof gap === 'number' || typeof gap === 'string') {
43
38
  return [gap, gap];
44
39
  }