@vkontakte/vkui 7.5.0 → 7.5.2

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 (39) hide show
  1. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  2. package/dist/components/Clickable/Clickable.js +110 -18
  3. package/dist/components/Clickable/Clickable.js.map +1 -1
  4. package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
  5. package/dist/components/ImageBase/ImageBase.js +3 -4
  6. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  7. package/dist/components/ModalPage/ModalPageBase.d.ts.map +1 -1
  8. package/dist/components/ModalPage/ModalPageBase.js +2 -2
  9. package/dist/components/ModalPage/ModalPageBase.js.map +1 -1
  10. package/dist/components.css +1 -1
  11. package/dist/components.css.map +1 -1
  12. package/dist/cssm/components/Clickable/Clickable.js +77 -14
  13. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  14. package/dist/cssm/components/ImageBase/ImageBase.js +3 -4
  15. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  16. package/dist/cssm/components/ImageBase/ImageBase.module.css +9 -2
  17. package/dist/cssm/components/ModalCard/ModalCard.module.css +14 -9
  18. package/dist/cssm/components/ModalPage/ModalPage.module.css +6 -2
  19. package/dist/cssm/components/ModalPage/ModalPageBase.js +2 -2
  20. package/dist/cssm/components/ModalPage/ModalPageBase.js.map +1 -1
  21. package/dist/vkui.css +1 -1
  22. package/dist/vkui.css.map +1 -1
  23. package/package.json +1 -1
  24. package/src/components/Clickable/Clickable.tsx +141 -32
  25. package/src/components/ImageBase/ImageBase.module.css +9 -2
  26. package/src/components/ImageBase/ImageBase.module.css.d.ts.map +1 -1
  27. package/src/components/ImageBase/ImageBase.tsx +3 -4
  28. package/src/components/ModalCard/ModalCard.module.css +14 -8
  29. package/src/components/ModalCard/ModalCard.module.css.d.ts.map +1 -1
  30. package/src/components/ModalPage/ModalPage.module.css +5 -1
  31. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  32. package/src/components/ModalPage/ModalPageBase.tsx +7 -2
  33. package/dist/components/Clickable/RealClickable.d.ts +0 -6
  34. package/dist/components/Clickable/RealClickable.d.ts.map +0 -1
  35. package/dist/components/Clickable/RealClickable.js +0 -91
  36. package/dist/components/Clickable/RealClickable.js.map +0 -1
  37. package/dist/cssm/components/Clickable/RealClickable.js +0 -61
  38. package/dist/cssm/components/Clickable/RealClickable.js.map +0 -1
  39. package/src/components/Clickable/RealClickable.tsx +0 -100
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "module",
3
- "version": "7.5.0",
3
+ "version": "7.5.2",
4
4
  "name": "@vkontakte/vkui",
5
5
  "description": "VKUI library",
6
6
  "module": "./dist/index.js",
@@ -1,25 +1,18 @@
1
+ 'use client';
2
+
1
3
  import * as React from 'react';
2
- import { classNames } from '@vkontakte/vkjs';
4
+ import { classNames, noop } from '@vkontakte/vkjs';
5
+ import { useFocusVisible } from '../../hooks/useFocusVisible';
3
6
  import { type FocusVisibleModeProps } from '../../hooks/useFocusVisibleClassName';
7
+ import { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';
8
+ import { mergeCalls } from '../../lib/mergeCalls';
9
+ import { clickByKeyboardHandler } from '../../lib/utils';
4
10
  import { RootComponent, type RootComponentProps } from '../RootComponent/RootComponent';
5
- import { RealClickable } from './RealClickable';
6
11
  import { type StateProps } from './useState';
12
+ import { ClickableLockStateContext, DEFAULT_ACTIVE_EFFECT_DELAY, useState } from './useState';
7
13
  import styles from './Clickable.module.css';
8
14
 
9
- export interface ClickableProps<T = HTMLElement>
10
- extends RootComponentProps<T>,
11
- FocusVisibleModeProps,
12
- StateProps {
13
- /**
14
- * Компонент который будет при передаче `onClick`. По умолчанию `"div"`.
15
- */
16
- DefaultComponent?: React.ElementType;
17
- }
18
-
19
- /**
20
- * Некликабельный компонент. Отключаем возможность нажимать на компонент.
21
- */
22
- const NonClickable = <T,>({
15
+ function nonClickableProps<T>({
23
16
  href,
24
17
  onClick,
25
18
  onClickCapture,
@@ -35,7 +28,132 @@ const NonClickable = <T,>({
35
28
  DefaultComponent,
36
29
  Component,
37
30
  ...restProps
38
- }: ClickableProps<T>) => <RootComponent Component={Component || DefaultComponent} {...restProps} />;
31
+ }: ClickableProps<T>) {
32
+ return {
33
+ Component: Component || DefaultComponent,
34
+ ...restProps,
35
+ lockStateContextValue: {
36
+ lockHoverStateBubbling: undefined,
37
+ lockActiveStateBubbling: undefined,
38
+ },
39
+ };
40
+ }
41
+
42
+ function useClickableProps<T>({
43
+ baseClassName,
44
+ focusVisibleMode = 'inside',
45
+ activeClassName,
46
+ hoverClassName,
47
+ activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY,
48
+ hasHover = true,
49
+ hasActive = true,
50
+ hovered,
51
+ activated,
52
+ hasHoverWithChildren,
53
+ unlockParentHover,
54
+ onPointerEnter,
55
+ onPointerLeave,
56
+ onPointerDown,
57
+ onPointerCancel,
58
+ onPointerUp,
59
+ onBlur,
60
+ onFocus,
61
+ onKeyDown,
62
+ DefaultComponent,
63
+ ...restProps
64
+ }: ClickableProps<T>) {
65
+ const { focusVisible, ...focusEvents } = useFocusVisible();
66
+ const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: focusVisibleMode });
67
+
68
+ const {
69
+ stateClassName,
70
+ setLockHoverBubblingImmediate,
71
+ setLockActiveBubblingImmediate,
72
+ ...stateEvents
73
+ } = useState({
74
+ activeClassName,
75
+ hoverClassName,
76
+ activeEffectDelay,
77
+ hasHover,
78
+ hasActive,
79
+ hovered,
80
+ activated,
81
+ unlockParentHover,
82
+ });
83
+
84
+ const handlers = mergeCalls(
85
+ focusEvents,
86
+ stateEvents,
87
+ { onKeyDown: clickByKeyboardHandler },
88
+ {
89
+ onPointerEnter,
90
+ onPointerLeave,
91
+ onPointerDown,
92
+ onPointerCancel,
93
+ onPointerUp,
94
+ onBlur,
95
+ onFocus,
96
+ onKeyDown,
97
+ },
98
+ );
99
+
100
+ const lockStateContextValue = React.useMemo(
101
+ () => ({
102
+ lockHoverStateBubbling: hasHoverWithChildren ? noop : setLockHoverBubblingImmediate,
103
+ lockActiveStateBubbling: setLockActiveBubblingImmediate,
104
+ }),
105
+ [setLockHoverBubblingImmediate, setLockActiveBubblingImmediate, hasHoverWithChildren],
106
+ );
107
+
108
+ return {
109
+ baseClassName: classNames(
110
+ baseClassName,
111
+ styles.realClickable,
112
+ focusVisibleClassNames,
113
+ stateClassName,
114
+ ),
115
+ ...handlers,
116
+ ...restProps,
117
+ lockStateContextValue,
118
+ };
119
+ }
120
+
121
+ function useProps<T>(props: ClickableProps<T>): RootComponentProps<T> & {
122
+ lockStateContextValue: {
123
+ lockHoverStateBubbling: undefined | ((...args: any[]) => void);
124
+ lockActiveStateBubbling: undefined | ((...args: any[]) => void);
125
+ };
126
+ } {
127
+ const commonProps = component(props);
128
+ const isClickable = checkClickable(props);
129
+
130
+ const {
131
+ baseClassName,
132
+ disabled, // Игнорируем disabled из пропсов, т.к. он обрабатывается в commonProps
133
+ Component,
134
+ ...restProps
135
+ } = props;
136
+
137
+ const nextProps = {
138
+ baseClassName: classNames(baseClassName, styles.host),
139
+ ...commonProps,
140
+ ...restProps,
141
+ };
142
+
143
+ const clickableProps = useClickableProps(nextProps);
144
+
145
+ return isClickable ? clickableProps : nonClickableProps(nextProps);
146
+ }
147
+
148
+ export interface ClickableProps<T = HTMLElement>
149
+ extends RootComponentProps<T>,
150
+ FocusVisibleModeProps,
151
+ StateProps {
152
+ /**
153
+ * Компонент который будет при передаче `onClick`. По умолчанию `"div"`.
154
+ */
155
+ DefaultComponent?: React.ElementType;
156
+ }
39
157
 
40
158
  /**
41
159
  * Проверяем, является ли компонент кликабельным.
@@ -113,22 +231,13 @@ function component<T>({
113
231
  * - a11y компонентов.
114
232
  */
115
233
  export const Clickable = <T,>(props: ClickableProps<T>): React.ReactNode => {
116
- const commonProps = component(props);
117
- const isClickable = checkClickable(props);
118
- const Component = isClickable ? RealClickable : NonClickable;
119
-
120
- const {
121
- baseClassName,
122
- disabled, // Игнорируем disabled из пропсов, т.к. он обрабатывается в commonProps
123
- Component: ignore,
124
- ...restProps
125
- } = props;
234
+ const { lockStateContextValue, children, ...restProps } = useProps(props);
126
235
 
127
236
  return (
128
- <Component
129
- baseClassName={classNames(baseClassName, styles.host)}
130
- {...commonProps}
131
- {...restProps}
132
- />
237
+ <RootComponent {...restProps}>
238
+ <ClickableLockStateContext.Provider value={lockStateContextValue}>
239
+ {children}
240
+ </ClickableLockStateContext.Provider>
241
+ </RootComponent>
133
242
  );
134
243
  };
@@ -45,6 +45,13 @@
45
45
  display: block;
46
46
  inline-size: 100%;
47
47
  block-size: 100%;
48
+ /* Скрывает текст из атрибута alt. */
49
+ color: transparent;
50
+ /*
51
+ Скрывает альтернативную иконку, которая появляется когда нет атрибута alt.
52
+ Работает только в Chromium. В остальных ситуациях сработает `.imgHiddenAlt`, который добавляется на `onError`.
53
+ */
54
+ text-indent: 10000px;
48
55
  border: 0;
49
56
  border-radius: inherit;
50
57
  }
@@ -88,8 +95,8 @@
88
95
  );
89
96
  }
90
97
 
91
- .host:not(.loaded) .img {
92
- visibility: hidden;
98
+ .imgHiddenAlt {
99
+ opacity: 0;
93
100
  }
94
101
 
95
102
  .fallback {
@@ -1 +1 @@
1
- {"version":3,"sources":["./ImageBase.module.css"],"names":["host","loaded","transparentBackground","children","border","img","imgKeepRatio","imgObjectFitContain","imgObjectFitCover","imgObjectFitNone","imgObjectFitScaleDown","withObjectPosition","withFilter","fallback"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAaAC,Q,WAbA;AAAA,E,aAcAC,uB,WAdA;AAAA,E,aAkBAC,U,WAlBA;AAAA,E,aAmBAC,Q,WAnBA;AAAA,E,aA2BAD,U,WA3BA;AAAA,E,aAkCAC,Q,WAlCA;AAAA,E,aA2CAC,K,WA3CA;AAAA,E,aAmDAC,c,WAnDA;AAAA,E,aAwDAC,qB,WAxDA;AAAA,E,aA4DAC,mB,WA5DA;AAAA,E,aAgEAC,kB,WAhEA;AAAA,E,aAoEAC,uB,WApEA;AAAA,E,aAwEAC,oB,WAxEA;AAAA,E,aAiFAC,Y,WAjFA;AAAA,E,aA0FAZ,M,WA1FA;AAAA,E,aA0FUC,Q,WA1FV;AAAA,E,aA0FmBI,K,WA1FnB;AAAA,E,aA8FAQ,U,WA9FA;AAAA,E,aA2G4Cb,M,WA3G5C;AAAA,E,aAgH2CA,M,WAhH3C;AAAA;AAAA","file":"ImageBase.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./ImageBase.module.css"],"names":["host","loaded","transparentBackground","children","border","img","imgKeepRatio","imgObjectFitContain","imgObjectFitCover","imgObjectFitNone","imgObjectFitScaleDown","withObjectPosition","withFilter","imgHiddenAlt","fallback"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAaAC,Q,WAbA;AAAA,E,aAcAC,uB,WAdA;AAAA,E,aAkBAC,U,WAlBA;AAAA,E,aAmBAC,Q,WAnBA;AAAA,E,aA2BAD,U,WA3BA;AAAA,E,aAkCAC,Q,WAlCA;AAAA,E,aA2CAC,K,WA3CA;AAAA,E,aA0DAC,c,WA1DA;AAAA,E,aA+DAC,qB,WA/DA;AAAA,E,aAmEAC,mB,WAnEA;AAAA,E,aAuEAC,kB,WAvEA;AAAA,E,aA2EAC,uB,WA3EA;AAAA,E,aA+EAC,oB,WA/EA;AAAA,E,aAwFAC,Y,WAxFA;AAAA,E,aAiGAC,c,WAjGA;AAAA,E,aAqGAC,U,WArGA;AAAA,E,aAkH4Cd,M,WAlH5C;AAAA,E,aAuH2CA,M,WAvH3C;AAAA;AAAA","file":"ImageBase.module.css.d.ts","sourceRoot":""}
@@ -202,13 +202,11 @@ export const ImageBase: React.FC<ImageBaseProps> & {
202
202
  const mouseOutHandlersRef = useRef<VoidFunction[]>([]);
203
203
 
204
204
  const hasSrc = src || srcSet;
205
- const needShowFallbackIcon = (failed || !hasSrc) && React.isValidElement(fallbackIconProp);
206
-
207
- const fallbackIcon = needShowFallbackIcon ? fallbackIconProp : null;
205
+ const fallbackIcon = failed || !hasSrc ? fallbackIconProp : null;
208
206
 
209
207
  if (process.env.NODE_ENV === 'development') {
210
208
  validateSize(size);
211
- if (fallbackIcon) {
209
+ if (React.isValidElement(fallbackIcon)) {
212
210
  validateFallbackIcon(size, { name: 'fallbackIcon', value: fallbackIcon });
213
211
  }
214
212
  }
@@ -304,6 +302,7 @@ export const ImageBase: React.FC<ImageBaseProps> & {
304
302
  objectPosition && styles.withObjectPosition,
305
303
  filter && styles.withFilter,
306
304
  keepAspectRatio && styles.imgKeepRatio,
305
+ failed && styles.imgHiddenAlt,
307
306
  )}
308
307
  crossOrigin={crossOrigin}
309
308
  decoding={decoding}
@@ -1,6 +1,4 @@
1
1
  .host {
2
- inline-size: 100%;
3
- padding: var(--vkui--spacing_size_m);
4
2
  margin-inline: auto;
5
3
  }
6
4
 
@@ -26,16 +24,22 @@
26
24
  --vkui_internal_ModalCard--safeAreaInsetBottom: var(--vkui_internal--safe_area_inset_bottom);
27
25
 
28
26
  position: absolute;
29
- inset-block-end: 0;
30
- inset-inline: 0;
27
+ /*
28
+ * Используем inset вместо padding, чтобы срабатывала логика с закрытие с Click Outside.
29
+ * Для этого также нужны `inline-size: auto` и `margin-inline: auto`.
30
+ */
31
+ inset-block-end: calc(
32
+ var(--vkui--spacing_size_m) + var(--vkui_internal_ModalCard--safeAreaInsetBottom)
33
+ );
34
+ inset-inline: var(--vkui--spacing_size_m);
31
35
  box-sizing: border-box;
32
- margin-block-end: var(--vkui_internal_ModalCard--safeAreaInsetBottom);
36
+ inline-size: auto;
33
37
  transform: translate3d(0, calc(100% - var(--vkui_internal_ModalCard--translateY)), 0);
34
38
  transition: transform 0.4s var(--vkui_internal--spring-easing);
35
39
  }
36
40
 
37
41
  .hostMobile.hostStateEnter {
38
- transform: translate3d(0, 100%, 0);
42
+ transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--safeAreaInsetBottom)), 0);
39
43
  transition: none;
40
44
  }
41
45
 
@@ -44,18 +48,20 @@
44
48
  }
45
49
 
46
50
  .hostMobile.hostStateExiting {
47
- transform: translate3d(0, 100%, 0);
51
+ transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--safeAreaInsetBottom)), 0);
48
52
  transition: transform 0.2s ease;
49
53
  }
50
54
 
51
55
  .hostMobile.hostStateExited {
52
- transform: translate3d(0, 100%, 0);
56
+ transform: translate3d(0, calc(100% + var(--vkui_internal_ModalCard--safeAreaInsetBottom)), 0);
53
57
  transition: none;
54
58
  }
55
59
 
56
60
  /* Desktop */
57
61
  .hostDesktop {
58
62
  box-sizing: content-box;
63
+ inline-size: 100%;
64
+ padding: var(--vkui--spacing_size_m);
59
65
  margin-block: auto;
60
66
  opacity: 1;
61
67
  transition: opacity 340ms var(--vkui--animation_easing_platform);
@@ -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,aAMAA,M,WANA;AAAA,E,aAUAC,e,WAVA;AAAA,E,aAcAC,e,WAdA;AAAA,E,aAkBAC,e,WAlBA;AAAA,E,aAuBAC,Y,WAvBA;AAAA,E,aAoCAA,Y,WApCA;AAAA,E,aAoCWC,gB,WApCX;AAAA,E,aAyCAD,Y,WAzCA;AAAA,E,aAyCWE,mB,WAzCX;AAAA,E,aA6CAF,Y,WA7CA;AAAA,E,aA6CWG,kB,WA7CX;AAAA,E,aAkDAH,Y,WAlDA;AAAA,E,aAkDWI,iB,WAlDX;AAAA,E,aAwDAC,a,WAxDA;AAAA,E,aA+DAA,a,WA/DA;AAAA,E,aA+DYJ,gB,WA/DZ;AAAA,E,aAoEAI,a,WApEA;AAAA,E,aAoEYH,mB,WApEZ;AAAA,E,aAwEAG,a,WAxEA;AAAA,E,aAwEYF,kB,WAxEZ;AAAA,E,aA4EAE,a,WA5EA;AAAA,E,aA4EYD,iB,WA5EZ;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,aAwCAA,Y,WAxCA;AAAA,E,aAwCWC,gB,WAxCX;AAAA,E,aA6CAD,Y,WA7CA;AAAA,E,aA6CWE,mB,WA7CX;AAAA,E,aAiDAF,Y,WAjDA;AAAA,E,aAiDWG,kB,WAjDX;AAAA,E,aAsDAH,Y,WAtDA;AAAA,E,aAsDWI,iB,WAtDX;AAAA,E,aA4DAC,a,WA5DA;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":""}
@@ -89,7 +89,6 @@
89
89
  inset-inline-start: 0;
90
90
  block-size: var(--vkui_internal_ModalPageDocument--snapPoint);
91
91
  max-block-size: 100%;
92
- padding-block-end: var(--vkui_internal_ModalPageDocument--safeAreaInsetBottom);
93
92
  pointer-events: auto;
94
93
  touch-action: pan-y;
95
94
  transform: translate3d(0, 0, 0);
@@ -139,6 +138,7 @@
139
138
  }
140
139
 
141
140
  .children {
141
+ box-sizing: border-box;
142
142
  /*
143
143
  * Удерживает высоту в пределах 100% родителя при переполнении контента.
144
144
  *
@@ -157,6 +157,10 @@
157
157
  border-start-end-radius: var(--vkui--size_border_radius_paper--regular);
158
158
  }
159
159
 
160
+ .childrenMobile {
161
+ padding-block-end: var(--vkui_internal_ModalPageDocument--safeAreaInsetBottom);
162
+ }
163
+
160
164
  /* Desktop */
161
165
  .childrenDesktop {
162
166
  border-end-start-radius: var(--vkui--size_border_radius_paper--regular);
@@ -1 +1 @@
1
- {"version":3,"sources":["./ModalPage.module.css"],"names":["host","hostMobile","hostMobileSafeAreaInsetTop","hostMobileSafeAreaInsetTopWithCustomOffset","hostDesktop","hostDesktopMaxWidthS","hostDesktopMaxWidthM","hostDesktopMaxWidthL","document","documentMobile","documentStateEnter","documentStateEntering","documentStateExiting","documentStateExited","documentDesktop","children","childrenDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aASAC,Y,WATA;AAAA,E,aAoBAC,4B,WApBA;AAAA,E,aAwBAC,4C,WAxBA;AAAA,E,aA+BAC,a,WA/BA;AAAA,E,aAgDEA,a,WAhDF;AAAA,E,aAuDAC,sB,WAvDA;AAAA,E,aA2DAC,sB,WA3DA;AAAA,E,aA+DAC,sB,WA/DA;AAAA,E,aAmEAC,U,WAnEA;AAAA,E,aAgFAC,gB,WAhFA;AAAA,E,aAkGAA,gB,WAlGA;AAAA,E,aAkGeC,oB,WAlGf;AAAA,E,aAsGAD,gB,WAtGA;AAAA,E,aAsGeE,uB,WAtGf;AAAA,E,aA2GAF,gB,WA3GA;AAAA,E,aA2GeG,sB,WA3Gf;AAAA,E,aAgHAH,gB,WAhHA;AAAA,E,aAgHeI,qB,WAhHf;AAAA,E,aAqHAC,iB,WArHA;AAAA,E,aA0HAA,iB,WA1HA;AAAA,E,aA0HgBJ,oB,WA1HhB;AAAA,E,aA8HAI,iB,WA9HA;AAAA,E,aA8HgBH,uB,WA9HhB;AAAA,E,aAmIAG,iB,WAnIA;AAAA,E,aAmIgBF,sB,WAnIhB;AAAA,E,aAwIAE,iB,WAxIA;AAAA,E,aAwIgBD,qB,WAxIhB;AAAA,E,aA4IAE,U,WA5IA;AAAA,E,aAgKAC,iB,WAhKA;AAAA;AAAA","file":"ModalPage.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./ModalPage.module.css"],"names":["host","hostMobile","hostMobileSafeAreaInsetTop","hostMobileSafeAreaInsetTopWithCustomOffset","hostDesktop","hostDesktopMaxWidthS","hostDesktopMaxWidthM","hostDesktopMaxWidthL","document","documentMobile","documentStateEnter","documentStateEntering","documentStateExiting","documentStateExited","documentDesktop","children","childrenMobile","childrenDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aASAC,Y,WATA;AAAA,E,aAoBAC,4B,WApBA;AAAA,E,aAwBAC,4C,WAxBA;AAAA,E,aA+BAC,a,WA/BA;AAAA,E,aAgDEA,a,WAhDF;AAAA,E,aAuDAC,sB,WAvDA;AAAA,E,aA2DAC,sB,WA3DA;AAAA,E,aA+DAC,sB,WA/DA;AAAA,E,aAmEAC,U,WAnEA;AAAA,E,aAgFAC,gB,WAhFA;AAAA,E,aAiGAA,gB,WAjGA;AAAA,E,aAiGeC,oB,WAjGf;AAAA,E,aAqGAD,gB,WArGA;AAAA,E,aAqGeE,uB,WArGf;AAAA,E,aA0GAF,gB,WA1GA;AAAA,E,aA0GeG,sB,WA1Gf;AAAA,E,aA+GAH,gB,WA/GA;AAAA,E,aA+GeI,qB,WA/Gf;AAAA,E,aAoHAC,iB,WApHA;AAAA,E,aAyHAA,iB,WAzHA;AAAA,E,aAyHgBJ,oB,WAzHhB;AAAA,E,aA6HAI,iB,WA7HA;AAAA,E,aA6HgBH,uB,WA7HhB;AAAA,E,aAkIAG,iB,WAlIA;AAAA,E,aAkIgBF,sB,WAlIhB;AAAA,E,aAuIAE,iB,WAvIA;AAAA,E,aAuIgBD,qB,WAvIhB;AAAA,E,aA2IAE,U,WA3IA;AAAA,E,aA+JAC,gB,WA/JA;AAAA,E,aAoKAC,iB,WApKA;AAAA;AAAA","file":"ModalPage.module.css.d.ts","sourceRoot":""}
@@ -61,7 +61,7 @@ export const ModalPageBase = ({
61
61
  ? function handleDismissButtonClick(event) {
62
62
  onClose('click-close-button', event);
63
63
  }
64
- : undefined
64
+ : noop
65
65
  }
66
66
  aria-label={modalDismissButtonLabel}
67
67
  >
@@ -71,7 +71,12 @@ export const ModalPageBase = ({
71
71
 
72
72
  return (
73
73
  <RootComponent role="document" baseClassName={styles.document} {...restProps}>
74
- <div className={classNames(styles.children, isDesktop && styles.childrenDesktop)}>
74
+ <div
75
+ className={classNames(
76
+ styles.children,
77
+ isDesktop ? styles.childrenDesktop : styles.childrenMobile,
78
+ )}
79
+ >
75
80
  {hasReactNode(header) && header}
76
81
  <ModalPageContent
77
82
  getRootRef={getRef}
@@ -1,6 +0,0 @@
1
- import { type ClickableProps } from './Clickable';
2
- /**
3
- * Кликабельный компонент. Добавляем кучу обвесов.
4
- */
5
- export declare const RealClickable: <T>({ baseClassName, children, focusVisibleMode, activeClassName, hoverClassName, activeEffectDelay, hasHover, hasActive, hovered, activated, hasHoverWithChildren, unlockParentHover, onPointerEnter, onPointerLeave, onPointerDown, onPointerCancel, onPointerUp, onBlur, onFocus, onKeyDown, DefaultComponent, ...restProps }: ClickableProps<T>) => import("react/jsx-runtime").JSX.Element;
6
- //# sourceMappingURL=RealClickable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RealClickable.d.ts","sourceRoot":"","sources":["../../../src/components/Clickable/RealClickable.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAG,8TAuB/B,cAAc,CAAC,CAAC,CAAC,4CA4DnB,CAAC"}
@@ -1,91 +0,0 @@
1
- 'use client';
2
- import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
- import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
- import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
- import { jsx as _jsx } from "react/jsx-runtime";
6
- import * as React from "react";
7
- import { classNames, noop } from "@vkontakte/vkjs";
8
- import { useFocusVisible } from "../../hooks/useFocusVisible.js";
9
- import { useFocusVisibleClassName } from "../../hooks/useFocusVisibleClassName.js";
10
- import { mergeCalls } from "../../lib/mergeCalls.js";
11
- import { clickByKeyboardHandler } from "../../lib/utils.js";
12
- import { RootComponent } from "../RootComponent/RootComponent.js";
13
- import { ClickableLockStateContext, DEFAULT_ACTIVE_EFFECT_DELAY, useState } from "./useState.js";
14
- /**
15
- * Кликабельный компонент. Добавляем кучу обвесов.
16
- */ export const RealClickable = (_param)=>{
17
- var { baseClassName, children, focusVisibleMode = 'inside', activeClassName, hoverClassName, activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY, hasHover = true, hasActive = true, hovered, activated, hasHoverWithChildren, unlockParentHover, onPointerEnter, onPointerLeave, onPointerDown, onPointerCancel, onPointerUp, onBlur, onFocus, onKeyDown, DefaultComponent } = _param, restProps = _object_without_properties(_param, [
18
- "baseClassName",
19
- "children",
20
- "focusVisibleMode",
21
- "activeClassName",
22
- "hoverClassName",
23
- "activeEffectDelay",
24
- "hasHover",
25
- "hasActive",
26
- "hovered",
27
- "activated",
28
- "hasHoverWithChildren",
29
- "unlockParentHover",
30
- "onPointerEnter",
31
- "onPointerLeave",
32
- "onPointerDown",
33
- "onPointerCancel",
34
- "onPointerUp",
35
- "onBlur",
36
- "onFocus",
37
- "onKeyDown",
38
- "DefaultComponent"
39
- ]);
40
- const _useFocusVisible = useFocusVisible(), { focusVisible } = _useFocusVisible, focusEvents = _object_without_properties(_useFocusVisible, [
41
- "focusVisible"
42
- ]);
43
- const focusVisibleClassNames = useFocusVisibleClassName({
44
- focusVisible,
45
- mode: focusVisibleMode
46
- });
47
- const _useState = useState({
48
- activeClassName,
49
- hoverClassName,
50
- activeEffectDelay,
51
- hasHover,
52
- hasActive,
53
- hovered,
54
- activated,
55
- unlockParentHover
56
- }), { stateClassName, setLockHoverBubblingImmediate, setLockActiveBubblingImmediate } = _useState, stateEvents = _object_without_properties(_useState, [
57
- "stateClassName",
58
- "setLockHoverBubblingImmediate",
59
- "setLockActiveBubblingImmediate"
60
- ]);
61
- const handlers = mergeCalls(focusEvents, stateEvents, {
62
- onKeyDown: clickByKeyboardHandler
63
- }, {
64
- onPointerEnter,
65
- onPointerLeave,
66
- onPointerDown,
67
- onPointerCancel,
68
- onPointerUp,
69
- onBlur,
70
- onFocus,
71
- onKeyDown
72
- });
73
- const lockStateContextValue = React.useMemo(()=>({
74
- lockHoverStateBubbling: hasHoverWithChildren ? noop : setLockHoverBubblingImmediate,
75
- lockActiveStateBubbling: setLockActiveBubblingImmediate
76
- }), [
77
- setLockHoverBubblingImmediate,
78
- setLockActiveBubblingImmediate,
79
- hasHoverWithChildren
80
- ]);
81
- return /*#__PURE__*/ _jsx(RootComponent, _object_spread_props(_object_spread({
82
- baseClassName: classNames(baseClassName, "vkuiClickable__realClickable", focusVisibleClassNames, stateClassName)
83
- }, handlers, restProps), {
84
- children: /*#__PURE__*/ _jsx(ClickableLockStateContext.Provider, {
85
- value: lockStateContextValue,
86
- children: children
87
- })
88
- }));
89
- };
90
-
91
- //# sourceMappingURL=RealClickable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/Clickable/RealClickable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { clickByKeyboardHandler } from '../../lib/utils';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { type ClickableProps } from './Clickable';\nimport { ClickableLockStateContext, DEFAULT_ACTIVE_EFFECT_DELAY, useState } from './useState';\nimport styles from './Clickable.module.css';\n\n/**\n * Кликабельный компонент. Добавляем кучу обвесов.\n */\nexport const RealClickable = <T,>({\n baseClassName,\n children,\n focusVisibleMode = 'inside',\n activeClassName,\n hoverClassName,\n activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY,\n hasHover = true,\n hasActive = true,\n hovered,\n activated,\n hasHoverWithChildren,\n unlockParentHover,\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n DefaultComponent,\n ...restProps\n}: ClickableProps<T>) => {\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: focusVisibleMode });\n\n const {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...stateEvents\n } = useState({\n activeClassName,\n hoverClassName,\n activeEffectDelay,\n hasHover,\n hasActive,\n hovered,\n activated,\n unlockParentHover,\n });\n\n const handlers = mergeCalls(\n focusEvents,\n stateEvents,\n { onKeyDown: clickByKeyboardHandler },\n {\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n },\n );\n\n const lockStateContextValue = React.useMemo(\n () => ({\n lockHoverStateBubbling: hasHoverWithChildren ? noop : setLockHoverBubblingImmediate,\n lockActiveStateBubbling: setLockActiveBubblingImmediate,\n }),\n [setLockHoverBubblingImmediate, setLockActiveBubblingImmediate, hasHoverWithChildren],\n );\n\n return (\n <RootComponent\n baseClassName={classNames(\n baseClassName,\n styles.realClickable,\n focusVisibleClassNames,\n stateClassName,\n )}\n {...handlers}\n {...restProps}\n >\n <ClickableLockStateContext.Provider value={lockStateContextValue}>\n {children}\n </ClickableLockStateContext.Provider>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","noop","useFocusVisible","useFocusVisibleClassName","mergeCalls","clickByKeyboardHandler","RootComponent","ClickableLockStateContext","DEFAULT_ACTIVE_EFFECT_DELAY","useState","RealClickable","baseClassName","children","focusVisibleMode","activeClassName","hoverClassName","activeEffectDelay","hasHover","hasActive","hovered","activated","hasHoverWithChildren","unlockParentHover","onPointerEnter","onPointerLeave","onPointerDown","onPointerCancel","onPointerUp","onBlur","onFocus","onKeyDown","DefaultComponent","restProps","focusVisible","focusEvents","focusVisibleClassNames","mode","stateClassName","setLockHoverBubblingImmediate","setLockActiveBubblingImmediate","stateEvents","handlers","lockStateContextValue","useMemo","lockHoverStateBubbling","lockActiveStateBubbling","Provider","value"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,eAAe,QAAQ,iCAA8B;AAC9D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,sBAAsB,QAAQ,qBAAkB;AACzD,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,yBAAyB,EAAEC,2BAA2B,EAAEC,QAAQ,QAAQ,gBAAa;AAG9F;;CAEC,GACD,OAAO,MAAMC,gBAAgB;QAAK,EAChCC,aAAa,EACbC,QAAQ,EACRC,mBAAmB,QAAQ,EAC3BC,eAAe,EACfC,cAAc,EACdC,oBAAoBR,2BAA2B,EAC/CS,WAAW,IAAI,EACfC,YAAY,IAAI,EAChBC,OAAO,EACPC,SAAS,EACTC,oBAAoB,EACpBC,iBAAiB,EACjBC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,eAAe,EACfC,WAAW,EACXC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,gBAAgB,EAEE,WADfC;QArBHrB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAyC7B,mBAAAA,mBAAnC,EAAE+B,YAAY,EAAkB,GAAG/B,kBAAhBgC,yCAAgBhC;QAAjC+B;;IACR,MAAME,yBAAyBhC,yBAAyB;QAAE8B;QAAcG,MAAMvB;IAAiB;IAE/F,MAKIJ,YAAAA,SAAS;QACXK;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;IACF,IAdM,EACJe,cAAc,EACdC,6BAA6B,EAC7BC,8BAA8B,EAE/B,GAAG9B,WADC+B,yCACD/B;QAJF4B;QACAC;QACAC;;IAaF,MAAME,WAAWrC,WACf8B,aACAM,aACA;QAAEV,WAAWzB;IAAuB,GACpC;QACEkB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAGF,MAAMY,wBAAwB3C,MAAM4C,OAAO,CACzC,IAAO,CAAA;YACLC,wBAAwBvB,uBAAuBpB,OAAOqC;YACtDO,yBAAyBN;QAC3B,CAAA,GACA;QAACD;QAA+BC;QAAgClB;KAAqB;IAGvF,qBACE,KAACf;QACCK,eAAeX,WACbW,+CAEAwB,wBACAE;OAEEI,UACAT;kBAEJ,cAAA,KAACzB,0BAA0BuC,QAAQ;YAACC,OAAOL;sBACxC9B;;;AAIT,EAAE"}
@@ -1,61 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import { classNames, noop } from "@vkontakte/vkjs";
5
- import { useFocusVisible } from "../../hooks/useFocusVisible.js";
6
- import { useFocusVisibleClassName } from "../../hooks/useFocusVisibleClassName.js";
7
- import { mergeCalls } from "../../lib/mergeCalls.js";
8
- import { clickByKeyboardHandler } from "../../lib/utils.js";
9
- import { RootComponent } from "../RootComponent/RootComponent.js";
10
- import { ClickableLockStateContext, DEFAULT_ACTIVE_EFFECT_DELAY, useState } from "./useState.js";
11
- import styles from "./Clickable.module.css";
12
- /**
13
- * Кликабельный компонент. Добавляем кучу обвесов.
14
- */ export const RealClickable = ({ baseClassName, children, focusVisibleMode = 'inside', activeClassName, hoverClassName, activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY, hasHover = true, hasActive = true, hovered, activated, hasHoverWithChildren, unlockParentHover, onPointerEnter, onPointerLeave, onPointerDown, onPointerCancel, onPointerUp, onBlur, onFocus, onKeyDown, DefaultComponent, ...restProps })=>{
15
- const { focusVisible, ...focusEvents } = useFocusVisible();
16
- const focusVisibleClassNames = useFocusVisibleClassName({
17
- focusVisible,
18
- mode: focusVisibleMode
19
- });
20
- const { stateClassName, setLockHoverBubblingImmediate, setLockActiveBubblingImmediate, ...stateEvents } = useState({
21
- activeClassName,
22
- hoverClassName,
23
- activeEffectDelay,
24
- hasHover,
25
- hasActive,
26
- hovered,
27
- activated,
28
- unlockParentHover
29
- });
30
- const handlers = mergeCalls(focusEvents, stateEvents, {
31
- onKeyDown: clickByKeyboardHandler
32
- }, {
33
- onPointerEnter,
34
- onPointerLeave,
35
- onPointerDown,
36
- onPointerCancel,
37
- onPointerUp,
38
- onBlur,
39
- onFocus,
40
- onKeyDown
41
- });
42
- const lockStateContextValue = React.useMemo(()=>({
43
- lockHoverStateBubbling: hasHoverWithChildren ? noop : setLockHoverBubblingImmediate,
44
- lockActiveStateBubbling: setLockActiveBubblingImmediate
45
- }), [
46
- setLockHoverBubblingImmediate,
47
- setLockActiveBubblingImmediate,
48
- hasHoverWithChildren
49
- ]);
50
- return /*#__PURE__*/ _jsx(RootComponent, {
51
- baseClassName: classNames(baseClassName, styles.realClickable, focusVisibleClassNames, stateClassName),
52
- ...handlers,
53
- ...restProps,
54
- children: /*#__PURE__*/ _jsx(ClickableLockStateContext.Provider, {
55
- value: lockStateContextValue,
56
- children: children
57
- })
58
- });
59
- };
60
-
61
- //# sourceMappingURL=RealClickable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/Clickable/RealClickable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { clickByKeyboardHandler } from '../../lib/utils';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { type ClickableProps } from './Clickable';\nimport { ClickableLockStateContext, DEFAULT_ACTIVE_EFFECT_DELAY, useState } from './useState';\nimport styles from './Clickable.module.css';\n\n/**\n * Кликабельный компонент. Добавляем кучу обвесов.\n */\nexport const RealClickable = <T,>({\n baseClassName,\n children,\n focusVisibleMode = 'inside',\n activeClassName,\n hoverClassName,\n activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY,\n hasHover = true,\n hasActive = true,\n hovered,\n activated,\n hasHoverWithChildren,\n unlockParentHover,\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n DefaultComponent,\n ...restProps\n}: ClickableProps<T>) => {\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: focusVisibleMode });\n\n const {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...stateEvents\n } = useState({\n activeClassName,\n hoverClassName,\n activeEffectDelay,\n hasHover,\n hasActive,\n hovered,\n activated,\n unlockParentHover,\n });\n\n const handlers = mergeCalls(\n focusEvents,\n stateEvents,\n { onKeyDown: clickByKeyboardHandler },\n {\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n },\n );\n\n const lockStateContextValue = React.useMemo(\n () => ({\n lockHoverStateBubbling: hasHoverWithChildren ? noop : setLockHoverBubblingImmediate,\n lockActiveStateBubbling: setLockActiveBubblingImmediate,\n }),\n [setLockHoverBubblingImmediate, setLockActiveBubblingImmediate, hasHoverWithChildren],\n );\n\n return (\n <RootComponent\n baseClassName={classNames(\n baseClassName,\n styles.realClickable,\n focusVisibleClassNames,\n stateClassName,\n )}\n {...handlers}\n {...restProps}\n >\n <ClickableLockStateContext.Provider value={lockStateContextValue}>\n {children}\n </ClickableLockStateContext.Provider>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","noop","useFocusVisible","useFocusVisibleClassName","mergeCalls","clickByKeyboardHandler","RootComponent","ClickableLockStateContext","DEFAULT_ACTIVE_EFFECT_DELAY","useState","styles","RealClickable","baseClassName","children","focusVisibleMode","activeClassName","hoverClassName","activeEffectDelay","hasHover","hasActive","hovered","activated","hasHoverWithChildren","unlockParentHover","onPointerEnter","onPointerLeave","onPointerDown","onPointerCancel","onPointerUp","onBlur","onFocus","onKeyDown","DefaultComponent","restProps","focusVisible","focusEvents","focusVisibleClassNames","mode","stateClassName","setLockHoverBubblingImmediate","setLockActiveBubblingImmediate","stateEvents","handlers","lockStateContextValue","useMemo","lockHoverStateBubbling","lockActiveStateBubbling","realClickable","Provider","value"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,eAAe,QAAQ,iCAA8B;AAC9D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,sBAAsB,QAAQ,qBAAkB;AACzD,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,yBAAyB,EAAEC,2BAA2B,EAAEC,QAAQ,QAAQ,gBAAa;AAC9F,OAAOC,YAAY,yBAAyB;AAE5C;;CAEC,GACD,OAAO,MAAMC,gBAAgB,CAAK,EAChCC,aAAa,EACbC,QAAQ,EACRC,mBAAmB,QAAQ,EAC3BC,eAAe,EACfC,cAAc,EACdC,oBAAoBT,2BAA2B,EAC/CU,WAAW,IAAI,EACfC,YAAY,IAAI,EAChBC,OAAO,EACPC,SAAS,EACTC,oBAAoB,EACpBC,iBAAiB,EACjBC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,eAAe,EACfC,WAAW,EACXC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,gBAAgB,EAChB,GAAGC,WACe;IAClB,MAAM,EAAEC,YAAY,EAAE,GAAGC,aAAa,GAAGjC;IACzC,MAAMkC,yBAAyBjC,yBAAyB;QAAE+B;QAAcG,MAAMvB;IAAiB;IAE/F,MAAM,EACJwB,cAAc,EACdC,6BAA6B,EAC7BC,8BAA8B,EAC9B,GAAGC,aACJ,GAAGhC,SAAS;QACXM;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;IACF;IAEA,MAAMmB,WAAWtC,WACf+B,aACAM,aACA;QAAEV,WAAW1B;IAAuB,GACpC;QACEmB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAGF,MAAMY,wBAAwB5C,MAAM6C,OAAO,CACzC,IAAO,CAAA;YACLC,wBAAwBvB,uBAAuBrB,OAAOsC;YACtDO,yBAAyBN;QAC3B,CAAA,GACA;QAACD;QAA+BC;QAAgClB;KAAqB;IAGvF,qBACE,KAAChB;QACCM,eAAeZ,WACbY,eACAF,OAAOqC,aAAa,EACpBX,wBACAE;QAED,GAAGI,QAAQ;QACX,GAAGT,SAAS;kBAEb,cAAA,KAAC1B,0BAA0ByC,QAAQ;YAACC,OAAON;sBACxC9B;;;AAIT,EAAE"}