@vkontakte/vkui 4.33.2 → 4.33.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +8 -6
  4. package/.cache/ts/src/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  5. package/.cache/ts/src/components/Popper/Popper.d.ts +5 -0
  6. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  7. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js +25 -3
  8. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  9. package/dist/cjs/components/File/File.js +5 -1
  10. package/dist/cjs/components/File/File.js.map +1 -1
  11. package/dist/cjs/components/Popper/Popper.d.ts +5 -0
  12. package/dist/cjs/components/Popper/Popper.js +7 -2
  13. package/dist/cjs/components/Popper/Popper.js.map +1 -1
  14. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  15. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +25 -3
  16. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  17. package/dist/components/File/File.js +5 -1
  18. package/dist/components/File/File.js.map +1 -1
  19. package/dist/components/Popper/Popper.d.ts +5 -0
  20. package/dist/components/Popper/Popper.js +6 -2
  21. package/dist/components/Popper/Popper.js.map +1 -1
  22. package/dist/components.css +20 -2
  23. package/dist/components.css.map +1 -1
  24. package/dist/cssm/components/Button/Button.css +20 -2
  25. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  26. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +25 -3
  27. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  28. package/dist/cssm/components/File/File.js +5 -1
  29. package/dist/cssm/components/File/File.js.map +1 -1
  30. package/dist/cssm/components/FixedLayout/FixedLayout.css +1 -1
  31. package/dist/cssm/components/Popper/Popper.d.ts +5 -0
  32. package/dist/cssm/components/Popper/Popper.js +6 -2
  33. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  34. package/dist/cssm/styles/components.css +20 -2
  35. package/dist/vkui.css +20 -2
  36. package/dist/vkui.css.map +1 -1
  37. package/package.json +1 -1
  38. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +29 -1
  39. package/src/components/File/File.tsx +4 -0
  40. package/src/components/FixedLayout/FixedLayout.css +10 -0
  41. package/src/components/Popper/Popper.tsx +7 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/vkui",
3
- "version": "4.33.2",
3
+ "version": "4.33.3",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -1,4 +1,5 @@
1
1
  import * as React from "react";
2
+ import { Modifier } from "react-popper";
2
3
  import { CustomScrollView } from "../CustomScrollView/CustomScrollView";
3
4
  import { classNames } from "../../lib/classNames";
4
5
  import { Popper, Placement } from "../Popper/Popper";
@@ -11,7 +12,7 @@ export interface CustomSelectDropdownProps
11
12
  HasRef<HTMLDivElement> {
12
13
  targetRef: React.RefObject<HTMLElement>;
13
14
  placement?: Placement;
14
- scrollBoxRef?: React.Ref<HTMLDivElement>;
15
+ scrollBoxRef?: React.RefObject<HTMLDivElement>;
15
16
  fetching?: boolean;
16
17
  offsetDistance?: number;
17
18
  sameWidth?: boolean;
@@ -35,6 +36,32 @@ export const CustomSelectDropdown: React.FC<CustomSelectDropdownProps> = ({
35
36
  }) => {
36
37
  const [isTop, setIsTop] = React.useState(() => calcIsTop(placement));
37
38
 
39
+ const customModifiers = React.useMemo<Array<Modifier<string>>>(() => {
40
+ if (!scrollBoxRef?.current) {
41
+ return [];
42
+ }
43
+
44
+ return [
45
+ {
46
+ name: "customSelectChildrenChange",
47
+ enabled: true,
48
+ phase: "main",
49
+ effect: ({ instance }) => {
50
+ const observer = new MutationObserver(instance.forceUpdate);
51
+
52
+ observer.observe(scrollBoxRef.current as Element, {
53
+ childList: true,
54
+ });
55
+
56
+ return () => {
57
+ observer.disconnect();
58
+ };
59
+ },
60
+ },
61
+ ];
62
+ // eslint-disable-next-line react-hooks/exhaustive-deps
63
+ }, [scrollBoxRef?.current]);
64
+
38
65
  const onPlacementChange = React.useCallback(
39
66
  ({ placement }: { placement?: Placement }) => {
40
67
  setIsTop(calcIsTop(placement));
@@ -59,6 +86,7 @@ export const CustomSelectDropdown: React.FC<CustomSelectDropdownProps> = ({
59
86
  sameWidth && "CustomSelectDropdown--wide"
60
87
  )}
61
88
  forcePortal={forcePortal}
89
+ customModifiers={customModifiers}
62
90
  {...restProps}
63
91
  >
64
92
  <CustomScrollView
@@ -28,6 +28,8 @@ export const File: React.FC<FileProps> = ({
28
28
  mode,
29
29
  stretched,
30
30
  before,
31
+ after,
32
+ loading,
31
33
  className,
32
34
  style,
33
35
  getRef,
@@ -49,6 +51,8 @@ export const File: React.FC<FileProps> = ({
49
51
  // TODO: v5.0.0 удалить controlSize
50
52
  size={size ?? controlSize}
51
53
  before={before}
54
+ after={after}
55
+ loading={loading}
52
56
  style={style}
53
57
  getRootRef={getRootRef}
54
58
  disabled={restProps.disabled}
@@ -48,3 +48,13 @@
48
48
  .PanelHeader ~ * .FixedLayout--top:not(.PanelHeader__fixed) {
49
49
  top: calc(var(--panelheader_height) + var(--safe-area-inset-top));
50
50
  }
51
+
52
+ .PanelHeader--ios ~ .FixedLayout--top,
53
+ .PanelHeader--ios ~ * .FixedLayout--top:not(.PanelHeader__fixed) {
54
+ top: calc(var(--panelheader_height_ios) + var(--safe-area-inset-top));
55
+ }
56
+
57
+ .PanelHeader--vkcom ~ .FixedLayout--top,
58
+ .PanelHeader--vkcom ~ * .FixedLayout--top:not(.PanelHeader__fixed) {
59
+ top: calc(var(--panelheader_height_vkcom) + var(--safe-area-inset-top));
60
+ }
@@ -48,6 +48,10 @@ export interface PopperCommonProps
48
48
  sameWidth?: boolean;
49
49
  forcePortal?: boolean;
50
50
  onPlacementChange?: (data: { placement?: Placement }) => void;
51
+ /**
52
+ * Массив кастомных модификаторов для Popper (необходимо мемоизировать)
53
+ */
54
+ customModifiers?: Array<Modifier<string>>;
51
55
  }
52
56
 
53
57
  export interface PopperProps extends PopperCommonProps {
@@ -74,6 +78,7 @@ export const Popper: React.FC<PopperProps> = ({
74
78
  offsetSkidding = 0,
75
79
  forcePortal = true,
76
80
  style: compStyles,
81
+ customModifiers = [],
77
82
  ...restProps
78
83
  }: PopperProps) => {
79
84
  const [popperNode, setPopperNode] = React.useState<HTMLDivElement | null>(
@@ -135,6 +140,7 @@ export const Popper: React.FC<PopperProps> = ({
135
140
  modifiers.push(sameWidth);
136
141
  }
137
142
 
143
+ modifiers.push(...customModifiers);
138
144
  return modifiers;
139
145
  }, [
140
146
  arrow,
@@ -142,6 +148,7 @@ export const Popper: React.FC<PopperProps> = ({
142
148
  smallTargetOffsetSkidding,
143
149
  offsetSkidding,
144
150
  offsetDistance,
151
+ customModifiers,
145
152
  ]);
146
153
 
147
154
  const { styles, state, attributes } = usePopper(