mimir-ui-kit 1.39.4 → 1.41.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 (34) hide show
  1. package/dist/assets/CardTrail.css +1 -0
  2. package/dist/assets/PromoSlider.css +1 -0
  3. package/dist/assets/Tag.css +1 -1
  4. package/dist/components/CardTrail/CardTrail.d.ts +46 -0
  5. package/dist/components/CardTrail/CardTrail.js +133 -0
  6. package/dist/components/CardTrail/constants.d.ts +2 -0
  7. package/dist/components/CardTrail/constants.js +5 -0
  8. package/dist/components/CardTrail/index.d.ts +1 -0
  9. package/dist/components/CardTrail/index.js +4 -0
  10. package/dist/components/CardTrail/types.d.ts +1 -0
  11. package/dist/components/CardTrail/utils.d.ts +9 -0
  12. package/dist/components/CardTrail/utils.js +9 -0
  13. package/dist/components/Chip/Chip.d.ts +5 -1
  14. package/dist/components/Chip/index.d.ts +1 -1
  15. package/dist/components/PromoSlider/PromoSlider.d.ts +59 -0
  16. package/dist/components/PromoSlider/PromoSlider.js +320 -0
  17. package/dist/components/PromoSlider/index.d.ts +1 -0
  18. package/dist/components/PromoSlider/index.js +4 -0
  19. package/dist/components/Slider/Slider.js +113 -2993
  20. package/dist/components/Tag/Tag.d.ts +1 -1
  21. package/dist/components/Tag/Tag.js +29 -28
  22. package/dist/components/Tag/constants.d.ts +1 -0
  23. package/dist/components/Tag/constants.js +2 -2
  24. package/dist/components/index.d.ts +2 -0
  25. package/dist/components/index.js +14 -10
  26. package/dist/hooks/index.d.ts +2 -0
  27. package/dist/hooks/index.js +17 -13
  28. package/dist/hooks/useCallbackRef/index.d.ts +1 -0
  29. package/dist/hooks/useCallbackRef/index.js +13 -0
  30. package/dist/hooks/useThrottledCallback/index.d.ts +2 -0
  31. package/dist/hooks/useThrottledCallback/index.js +27 -0
  32. package/dist/index.js +158 -150
  33. package/dist/swiper-react-BvAw14a4.js +2901 -0
  34. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ ._card-trail_13qtm_3{display:flex;flex-direction:column}._card-trail-header_13qtm_7{display:flex;align-items:flex-end;justify-content:space-between}._card-trail-header_13qtm_7:not(:last-child){margin-bottom:var(--mimir-space-xs)}._card-trail-header-title_13qtm_15{font-weight:var(--mimir-font-weight-text-medium);font-size:var(--mimir-size-text-l);font-family:var(--mimir-font-montserrat);line-height:var(--mimir-line-height-text-s1);letter-spacing:calc(var(--mimir-size-text-l) * -.02)}@media (max-width: 600px){._card-trail-header-title_13qtm_15{font-size:var(--mimir-size-text-m);letter-spacing:calc(var(--mimir-size-text-m) * -.02)}}._card-trail-list_13qtm_28{display:flex;padding:0;overflow:auto;white-space:nowrap;scroll-behavior:smooth;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}._card-trail-list_13qtm_28::-webkit-scrollbar{display:none}._card-trail-list-item_13qtm_40{scroll-snap-align:start;white-space:normal;white-space:initial}._card-trail-list-item_13qtm_40._pointer_13qtm_44{cursor:pointer}
@@ -0,0 +1 @@
1
+ @font-face{font-family:swiper-icons;src:url(data:application/font-woff;charset=utf-8;base64,\ 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) format("woff");font-weight:400;font-style:normal}:root{--swiper-theme-color: #007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:ease;transition-timing-function:initial;transition-timing-function:var(--swiper-wrapper-transition-timing-function, initial);box-sizing:content-box}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-slide,.swiper-3d .swiper-cube-shadow{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper:before{content:"";flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-left:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-top:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper:before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:#00000026}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,#00000080,#0000)}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid #007aff;border:4px solid var(--swiper-preloader-color, var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader,.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color: #fff}.swiper-lazy-preloader-black{--swiper-preloader-color: #000}@keyframes swiper-preloader-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._promo-slider-wrapper_1sy27_2{position:relative}._swiper_1sy27_6{width:100%}._slide_1sy27_10{position:relative;overflow:hidden;border-radius:var(--mimir-control-radius);cursor:pointer}._chip_1sy27_17{position:absolute;top:var(--mimir-space-m);left:var(--mimir-space-m)}._content_1sy27_23{position:absolute;bottom:var(--mimir-space-2xxl);left:var(--mimir-space-m);color:var(--white)}._custom-pagination_1sy27_30{position:absolute;bottom:var(--mimir-space-2m);left:50%;z-index:100;display:flex;gap:var(--mimir-space-2xs);align-items:center;justify-content:center;transform:translate(-50%)}._bullet_1sy27_42,._bullet-active_1sy27_43,._bullet-s_1sy27_44,._bullet-xs_1sy27_45{transition:all .3s ease}._bullet_1sy27_42,._bullet-active_1sy27_43,._bullet-s_1sy27_44,._bullet-xs_1sy27_45{width:6px;height:6px;background-color:var(--black-15);border-radius:50%}._bullet-xs_1sy27_45{scale:.5}._bullet-s_1sy27_44{scale:.75}._bullet-active_1sy27_43{scale:1.333;background-color:var(--black-60)}
@@ -1 +1 @@
1
- ._container_pnj33_2{display:flex;align-items:center;justify-content:center;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;color:var(--sapphire-normal);border:none;border:1px solid var(--sapphire-normal);border-top-left-radius:var(--mimir-control-radius-s);border-bottom-right-radius:var(--mimir-control-radius-s);transform:skew(-23.48deg)}._container_pnj33_2:hover{color:var(--sapphire-hover);border-color:var(--sapphire-hover)}._container_pnj33_2:active{color:var(--white);background-color:var(--sapphire-normal)}._container_pnj33_2:focus{box-shadow:0 0 4px 0 var(--mimir-box-shadow-focus)}._container_pnj33_2._disabled_pnj33_25{color:var(--white);background-color:var(--disabled);border-color:var(--disabled)}._container_pnj33_2 ._inner_pnj33_30{display:inline-block;font-weight:var(--mimir-font-weight-text-regular);font-size:var(--mimir-size-text-l);font-family:var(--inter-font-family);line-height:var(--mimir-line-height-text-s1);transform:skew(23.48deg)}._container_pnj33_2._M_pnj33_38{height:40px;padding:0 15px}._container_pnj33_2._S_pnj33_42{height:32px;padding:0 11px}._container_pnj33_2._S_pnj33_42 ._inner_pnj33_30{font-size:var(--mimir-size-text-m);line-height:16px}._container_pnj33_2._XS_pnj33_50{height:26px;padding:0 8px}._container_pnj33_2._XS_pnj33_50 ._inner_pnj33_30{font-size:var(--mimir-size-text-s);line-height:20px}
1
+ ._container_zmbqd_2{display:flex;align-items:center;justify-content:center;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;color:var(--sapphire-normal);border:none;border:1px solid var(--sapphire-normal);border-top-left-radius:var(--mimir-control-radius-s);border-bottom-right-radius:var(--mimir-control-radius-s);transform:skew(-23.48deg)}._container_zmbqd_2:hover{color:var(--sapphire-hover);border-color:var(--sapphire-hover)}._container_zmbqd_2:active{color:var(--white);background-color:var(--sapphire-normal)}._container_zmbqd_2:focus{box-shadow:0 0 4px 0 var(--mimir-box-shadow-focus)}._container_zmbqd_2._disabled_zmbqd_25{color:var(--white);background-color:var(--disabled);border-color:var(--disabled)}._container_zmbqd_2 ._inner_zmbqd_30{display:inline-block;font-weight:var(--mimir-font-weight-text-regular);font-size:var(--mimir-size-text-l);font-family:var(--inter-font-family);line-height:var(--mimir-line-height-text-s1);transform:skew(23.48deg)}._container_zmbqd_2._M_zmbqd_38{height:40px;padding:0 var(--mimir-space-m)}._container_zmbqd_2._S_zmbqd_42{height:32px;padding:0 var(--mimir-space-xss)}._container_zmbqd_2._S_zmbqd_42 ._inner_zmbqd_30{font-size:var(--mimir-size-text-m);line-height:16px}._container_zmbqd_2._XS_zmbqd_50{height:26px;padding:0 var(--mimir-space-xs)}._container_zmbqd_2._XS_zmbqd_50 ._inner_zmbqd_30{font-size:var(--mimir-size-text-s);line-height:20px}._container_zmbqd_2._XSS_zmbqd_58{height:18px;padding:0 var(--mimir-space-xs)}._container_zmbqd_2._XSS_zmbqd_58 ._inner_zmbqd_30{font-size:var(--mimir-size-text-s);line-height:20px}
@@ -0,0 +1,46 @@
1
+ import { TButtonPropsWithoutStyles } from '../MergedButton';
2
+
3
+ export type TProps = {
4
+ /**
5
+ * Заголовок списка.
6
+ */
7
+ title?: string;
8
+ /**
9
+ * Расстояние между карточками.
10
+ */
11
+ spaceBetween?: number;
12
+ /**
13
+ * Количество карточек для перелистывания.
14
+ */
15
+ scrollStep?: number;
16
+ /**
17
+ * Флаг, определяющий, нужно ли при клике на карточку скроллиться до нее.
18
+ */
19
+ scrollToCard?: boolean;
20
+ /**
21
+ * Дополнительные пропсы для кнопок переключения.
22
+ */
23
+ mergedButtonProps?: {
24
+ leftButton?: TButtonPropsWithoutStyles;
25
+ rightButton?: TButtonPropsWithoutStyles;
26
+ };
27
+ /**
28
+ * Класс, применяемый к обертке списка (section).
29
+ */
30
+ cardTrailClassName?: string;
31
+ /**
32
+ * Класс, применяемый к заголовку списка (header).
33
+ */
34
+ cardTrailHeaderClassName?: string;
35
+ /**
36
+ * Класс, применяемый к списку карточек (ul).
37
+ */
38
+ cardTrailListClassName?: string;
39
+ /**
40
+ * Класс, применяемый к карточке.
41
+ */
42
+ cardClassName?: string;
43
+ };
44
+ export declare const CardTrail: import('react').ForwardRefExoticComponent<TProps & {
45
+ children?: import('react').ReactNode | undefined;
46
+ } & import('react').RefAttributes<HTMLUListElement>>;
@@ -0,0 +1,133 @@
1
+ import { jsxs as f, jsx as o } from "react/jsx-runtime";
2
+ import { c as n } from "../../index-DIxK0V-G.js";
3
+ import { forwardRef as W, useRef as D, useState as _, useEffect as I, Children as M } from "react";
4
+ import { DEFAULT_SPACE_BETWEEN as x, DEFAULT_SCROLL_STEP as H } from "./constants.js";
5
+ import { hasHorizontalScroll as p, isScrollAtEdge as B } from "./utils.js";
6
+ import { useMergeRefs as R } from "../../hooks/useMergeRefs/useMergeRefs.js";
7
+ import { useThrottledCallback as j } from "../../hooks/useThrottledCallback/index.js";
8
+ import { MergedButton as F } from "../MergedButton/MergedButton.js";
9
+ import '../../assets/CardTrail.css';const U = "_pointer_13qtm_44", c = {
10
+ "card-trail": "_card-trail_13qtm_3",
11
+ "card-trail-header": "_card-trail-header_13qtm_7",
12
+ "card-trail-header-title": "_card-trail-header-title_13qtm_15",
13
+ "card-trail-list": "_card-trail-list_13qtm_28",
14
+ "card-trail-list-item": "_card-trail-list-item_13qtm_40",
15
+ pointer: U
16
+ }, X = W((C, S) => {
17
+ const {
18
+ cardClassName: g,
19
+ cardTrailClassName: N,
20
+ cardTrailHeaderClassName: E,
21
+ cardTrailListClassName: b,
22
+ children: d,
23
+ title: h,
24
+ spaceBetween: s = x,
25
+ scrollStep: m = H,
26
+ mergedButtonProps: l,
27
+ scrollToCard: u = !1
28
+ } = C, t = D(null), [i, T] = _({
29
+ leftButton: !0,
30
+ rightButton: !1
31
+ }), [k, L] = _(
32
+ () => p(t == null ? void 0 : t.current)
33
+ ), q = R(t, S), v = j(() => {
34
+ const e = !B(t.current, "left"), r = !B(t.current, "right");
35
+ T({
36
+ leftButton: !e,
37
+ rightButton: !r
38
+ });
39
+ }, 300), y = (e) => () => {
40
+ var a;
41
+ if (!u)
42
+ return;
43
+ const r = (a = t == null ? void 0 : t.current) == null ? void 0 : a.querySelector(
44
+ `[data-active-card='${e}']`
45
+ );
46
+ r && (r == null || r.scrollIntoView({
47
+ behavior: "smooth",
48
+ block: "nearest",
49
+ inline: "center"
50
+ }));
51
+ }, A = () => {
52
+ var a;
53
+ if (!t.current || i.leftButton) return;
54
+ const e = t.current, r = ((a = e.children[0]) == null ? void 0 : a.clientWidth) ?? 0;
55
+ e.scrollBy({
56
+ left: -(r + s) * m,
57
+ behavior: "smooth"
58
+ });
59
+ }, w = () => {
60
+ var a;
61
+ if (!t.current || i.rightButton) return;
62
+ const e = t.current, r = ((a = e.children[0]) == null ? void 0 : a.clientWidth) ?? 0;
63
+ e.scrollBy({
64
+ left: (r + s) * m,
65
+ behavior: "smooth"
66
+ });
67
+ };
68
+ return I(() => {
69
+ L(p(t == null ? void 0 : t.current));
70
+ }, [d]), /* @__PURE__ */ f("section", { className: n(c["card-trail"], N), children: [
71
+ /* @__PURE__ */ f(
72
+ "header",
73
+ {
74
+ className: n(
75
+ c["card-trail-header"],
76
+ E
77
+ ),
78
+ children: [
79
+ h && /* @__PURE__ */ o("h3", { className: c["card-trail-header-title"], children: h }),
80
+ k && /* @__PURE__ */ o(
81
+ F,
82
+ {
83
+ buttons: [
84
+ {
85
+ isIconButton: !0,
86
+ iconName: "ArrowLeft16px",
87
+ variant: "gray",
88
+ onClick: A,
89
+ disabled: i.leftButton,
90
+ ...l == null ? void 0 : l.leftButton
91
+ },
92
+ {
93
+ isIconButton: !0,
94
+ iconName: "ArrowRight16px",
95
+ variant: "gray",
96
+ onClick: w,
97
+ disabled: i.rightButton,
98
+ ...l == null ? void 0 : l.rightButton
99
+ }
100
+ ]
101
+ }
102
+ )
103
+ ]
104
+ }
105
+ ),
106
+ /* @__PURE__ */ o(
107
+ "ul",
108
+ {
109
+ onScroll: v,
110
+ style: { gap: s },
111
+ className: n(c["card-trail-list"], b),
112
+ ref: q,
113
+ children: M.map(d, (e, r) => /* @__PURE__ */ o(
114
+ "li",
115
+ {
116
+ onClick: y(r),
117
+ "data-active-card": r,
118
+ "data-testid": `card-trail-item-${r}`,
119
+ className: n(
120
+ c["card-trail-list-item"],
121
+ { [c.pointer]: u },
122
+ g
123
+ ),
124
+ children: e
125
+ }
126
+ ))
127
+ }
128
+ )
129
+ ] });
130
+ });
131
+ export {
132
+ X as CardTrail
133
+ };
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_SPACE_BETWEEN = 10;
2
+ export declare const DEFAULT_SCROLL_STEP = 1;
@@ -0,0 +1,5 @@
1
+ const E = 10, L = 1;
2
+ export {
3
+ L as DEFAULT_SCROLL_STEP,
4
+ E as DEFAULT_SPACE_BETWEEN
5
+ };
@@ -0,0 +1 @@
1
+ export { CardTrail } from './CardTrail';
@@ -0,0 +1,4 @@
1
+ import { CardTrail as o } from "./CardTrail.js";
2
+ export {
3
+ o as CardTrail
4
+ };
@@ -0,0 +1 @@
1
+ export type TSpaceBetween = '3xs' | '2xs' | '1xs' | 'xs' | 'xss' | 's' | '2s' | 'm' | '2m' | 'l' | '2l' | 'xl' | '1xl' | '2xl' | '2xxl' | 'xxl' | '3xl' | '4xl' | '5xl' | '4xxl' | '5xxl' | '6xl';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Проверяет, достигнут ли край скролла в контейнере
3
+ * @param container Элемент контейнера
4
+ * @param direction Направление проверки ('left' или 'right')
5
+ * @param tolerance Допустимая погрешность в пикселях (по умолчанию 1)
6
+ * @returns true, если скроллить дальше некуда
7
+ */
8
+ export declare const isScrollAtEdge: (container: HTMLElement | null, direction: "left" | "right", tolerance?: number) => boolean;
9
+ export declare const hasHorizontalScroll: (element: HTMLElement | null) => boolean;
@@ -0,0 +1,9 @@
1
+ const c = (r, i, t = 1) => {
2
+ if (!r) return !0;
3
+ const { scrollLeft: l, scrollWidth: s, clientWidth: o } = r;
4
+ return i === "left" ? l <= t : l >= s - o - t;
5
+ }, e = (r) => r ? r.scrollWidth > r.clientWidth : !1;
6
+ export {
7
+ e as hasHorizontalScroll,
8
+ c as isScrollAtEdge
9
+ };
@@ -1,4 +1,4 @@
1
- import { PropsWithChildren } from 'react';
1
+ import { PropsWithChildren, ReactNode } from 'react';
2
2
  import { EChipSize, EChipVariant } from './constants';
3
3
 
4
4
  export type TProps = {
@@ -26,5 +26,9 @@ export type TProps = {
26
26
  * Обработчик для кнопки закрытия
27
27
  */
28
28
  onClose?: VoidFunction;
29
+ /**
30
+ * Обработчик для кнопки закрытия
31
+ */
32
+ children?: ReactNode;
29
33
  };
30
34
  export declare const Chip: ({ size, variant, className, disabled, withAction, children, onClose }: PropsWithChildren<TProps>) => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
- export { Chip } from './Chip';
1
+ export { Chip, type TProps as TChipProps } from './Chip';
2
2
  export { EChipSize, EChipVariant } from './constants';
@@ -0,0 +1,59 @@
1
+ import { ReactNode } from 'react';
2
+ import { TChipProps } from '../Chip';
3
+
4
+ export type TPromoSlide = {
5
+ id?: number | string;
6
+ title?: string;
7
+ subtitle?: string;
8
+ url?: string;
9
+ imageUrl?: string;
10
+ imageDesktop?: string;
11
+ imageMobile?: string;
12
+ content?: ReactNode;
13
+ } & ({
14
+ isPromotion: true;
15
+ promotionProps: TChipProps;
16
+ } | {
17
+ isPromotion?: false;
18
+ promotionProps?: never;
19
+ });
20
+ type TProps = {
21
+ /**
22
+ * Задержка перехода между слайдами.
23
+ */
24
+ delay?: number;
25
+ /**
26
+ * Массив слайдов.
27
+ */
28
+ slides: TPromoSlide[];
29
+ /**
30
+ * Дополнительные классы для враппера слайдера.
31
+ */
32
+ promoSliderWrapperClassName?: string;
33
+ /**
34
+ * Дополнительные классы для слайдов.
35
+ */
36
+ slideClassName?: string;
37
+ /**
38
+ * Дополнительные классы для слайдера.
39
+ */
40
+ swiperClassName?: string;
41
+ /**
42
+ * Дополнительные классы для картинок.
43
+ */
44
+ imageClassName?: string;
45
+ /**
46
+ * Дополнительные классы для контента.
47
+ */
48
+ contentClassName?: string;
49
+ /**
50
+ * Дополнительные классы для пагинации.
51
+ */
52
+ paginationClassName?: string;
53
+ /**
54
+ * Расстояние между слайдами.
55
+ */
56
+ spaceBetween?: number;
57
+ };
58
+ export declare const PromoSlider: ({ slides, delay, spaceBetween, imageClassName, slideClassName, swiperClassName, contentClassName, promoSliderWrapperClassName }: TProps) => import("react/jsx-runtime").JSX.Element;
59
+ export {};
@@ -0,0 +1,320 @@
1
+ import { jsxs as U, jsx as P, Fragment as K } from "react/jsx-runtime";
2
+ import { c as L } from "../../index-DIxK0V-G.js";
3
+ import { useState as j } from "react";
4
+ import { g as R, b as V, e as B, c as $, n as G, d as C, S as q, A as Z, a as J } from "../../swiper-react-BvAw14a4.js";
5
+ import { Chip as Q } from "../Chip/Chip.js";
6
+ import { AppImage as ee } from "../Image/Image.js";
7
+ import '../../assets/PromoSlider.css';function te(S) {
8
+ let {
9
+ swiper: e,
10
+ extendParams: k,
11
+ on: v,
12
+ emit: _
13
+ } = S;
14
+ const m = R(), T = V();
15
+ e.keyboard = {
16
+ enabled: !1
17
+ }, k({
18
+ keyboard: {
19
+ enabled: !1,
20
+ onlyInViewport: !0,
21
+ pageUpDown: !0
22
+ }
23
+ });
24
+ function I(n) {
25
+ if (!e.enabled) return;
26
+ const {
27
+ rtlTranslate: d
28
+ } = e;
29
+ let o = n;
30
+ o.originalEvent && (o = o.originalEvent);
31
+ const w = o.keyCode || o.charCode, H = e.params.keyboard.pageUpDown, E = H && w === 33, y = H && w === 34, x = w === 37, M = w === 39, t = w === 38, s = w === 40;
32
+ if (!e.allowSlideNext && (e.isHorizontal() && M || e.isVertical() && s || y) || !e.allowSlidePrev && (e.isHorizontal() && x || e.isVertical() && t || E))
33
+ return !1;
34
+ if (!(o.shiftKey || o.altKey || o.ctrlKey || o.metaKey) && !(m.activeElement && m.activeElement.nodeName && (m.activeElement.nodeName.toLowerCase() === "input" || m.activeElement.nodeName.toLowerCase() === "textarea"))) {
35
+ if (e.params.keyboard.onlyInViewport && (E || y || x || M || t || s)) {
36
+ let A = !1;
37
+ if (B(e.el, `.${e.params.slideClass}, swiper-slide`).length > 0 && B(e.el, `.${e.params.slideActiveClass}`).length === 0)
38
+ return;
39
+ const g = e.el, p = g.clientWidth, f = g.clientHeight, a = T.innerWidth, u = T.innerHeight, l = $(g);
40
+ d && (l.left -= g.scrollLeft);
41
+ const D = [[l.left, l.top], [l.left + p, l.top], [l.left, l.top + f], [l.left + p, l.top + f]];
42
+ for (let r = 0; r < D.length; r += 1) {
43
+ const c = D[r];
44
+ if (c[0] >= 0 && c[0] <= a && c[1] >= 0 && c[1] <= u) {
45
+ if (c[0] === 0 && c[1] === 0) continue;
46
+ A = !0;
47
+ }
48
+ }
49
+ if (!A) return;
50
+ }
51
+ e.isHorizontal() ? ((E || y || x || M) && (o.preventDefault ? o.preventDefault() : o.returnValue = !1), ((y || M) && !d || (E || x) && d) && e.slideNext(), ((E || x) && !d || (y || M) && d) && e.slidePrev()) : ((E || y || t || s) && (o.preventDefault ? o.preventDefault() : o.returnValue = !1), (y || s) && e.slideNext(), (E || t) && e.slidePrev()), _("keyPress", w);
52
+ }
53
+ }
54
+ function h() {
55
+ e.keyboard.enabled || (m.addEventListener("keydown", I), e.keyboard.enabled = !0);
56
+ }
57
+ function i() {
58
+ e.keyboard.enabled && (m.removeEventListener("keydown", I), e.keyboard.enabled = !1);
59
+ }
60
+ v("init", () => {
61
+ e.params.keyboard.enabled && h();
62
+ }), v("destroy", () => {
63
+ e.keyboard.enabled && i();
64
+ }), Object.assign(e.keyboard, {
65
+ enable: h,
66
+ disable: i
67
+ });
68
+ }
69
+ function ne(S) {
70
+ let {
71
+ swiper: e,
72
+ extendParams: k,
73
+ on: v,
74
+ emit: _
75
+ } = S;
76
+ const m = V();
77
+ k({
78
+ mousewheel: {
79
+ enabled: !1,
80
+ releaseOnEdges: !1,
81
+ invert: !1,
82
+ forceToAxis: !1,
83
+ sensitivity: 1,
84
+ eventsTarget: "container",
85
+ thresholdDelta: null,
86
+ thresholdTime: null,
87
+ noMousewheelClass: "swiper-no-mousewheel"
88
+ }
89
+ }), e.mousewheel = {
90
+ enabled: !1
91
+ };
92
+ let T, I = C(), h;
93
+ const i = [];
94
+ function n(t) {
95
+ let p = 0, f = 0, a = 0, u = 0;
96
+ return "detail" in t && (f = t.detail), "wheelDelta" in t && (f = -t.wheelDelta / 120), "wheelDeltaY" in t && (f = -t.wheelDeltaY / 120), "wheelDeltaX" in t && (p = -t.wheelDeltaX / 120), "axis" in t && t.axis === t.HORIZONTAL_AXIS && (p = f, f = 0), a = p * 10, u = f * 10, "deltaY" in t && (u = t.deltaY), "deltaX" in t && (a = t.deltaX), t.shiftKey && !a && (a = u, u = 0), (a || u) && t.deltaMode && (t.deltaMode === 1 ? (a *= 40, u *= 40) : (a *= 800, u *= 800)), a && !p && (p = a < 1 ? -1 : 1), u && !f && (f = u < 1 ? -1 : 1), {
97
+ spinX: p,
98
+ spinY: f,
99
+ pixelX: a,
100
+ pixelY: u
101
+ };
102
+ }
103
+ function d() {
104
+ e.enabled && (e.mouseEntered = !0);
105
+ }
106
+ function o() {
107
+ e.enabled && (e.mouseEntered = !1);
108
+ }
109
+ function w(t) {
110
+ return e.params.mousewheel.thresholdDelta && t.delta < e.params.mousewheel.thresholdDelta || e.params.mousewheel.thresholdTime && C() - I < e.params.mousewheel.thresholdTime ? !1 : t.delta >= 6 && C() - I < 60 ? !0 : (t.direction < 0 ? (!e.isEnd || e.params.loop) && !e.animating && (e.slideNext(), _("scroll", t.raw)) : (!e.isBeginning || e.params.loop) && !e.animating && (e.slidePrev(), _("scroll", t.raw)), I = new m.Date().getTime(), !1);
111
+ }
112
+ function H(t) {
113
+ const s = e.params.mousewheel;
114
+ if (t.direction < 0) {
115
+ if (e.isEnd && !e.params.loop && s.releaseOnEdges)
116
+ return !0;
117
+ } else if (e.isBeginning && !e.params.loop && s.releaseOnEdges)
118
+ return !0;
119
+ return !1;
120
+ }
121
+ function E(t) {
122
+ let s = t, A = !0;
123
+ if (!e.enabled || t.target.closest(`.${e.params.mousewheel.noMousewheelClass}`)) return;
124
+ const g = e.params.mousewheel;
125
+ e.params.cssMode && s.preventDefault();
126
+ let p = e.el;
127
+ e.params.mousewheel.eventsTarget !== "container" && (p = document.querySelector(e.params.mousewheel.eventsTarget));
128
+ const f = p && p.contains(s.target);
129
+ if (!e.mouseEntered && !f && !g.releaseOnEdges) return !0;
130
+ s.originalEvent && (s = s.originalEvent);
131
+ let a = 0;
132
+ const u = e.rtlTranslate ? -1 : 1, l = n(s);
133
+ if (g.forceToAxis)
134
+ if (e.isHorizontal())
135
+ if (Math.abs(l.pixelX) > Math.abs(l.pixelY)) a = -l.pixelX * u;
136
+ else return !0;
137
+ else if (Math.abs(l.pixelY) > Math.abs(l.pixelX)) a = -l.pixelY;
138
+ else return !0;
139
+ else
140
+ a = Math.abs(l.pixelX) > Math.abs(l.pixelY) ? -l.pixelX * u : -l.pixelY;
141
+ if (a === 0) return !0;
142
+ g.invert && (a = -a);
143
+ let D = e.getTranslate() + a * g.sensitivity;
144
+ if (D >= e.minTranslate() && (D = e.minTranslate()), D <= e.maxTranslate() && (D = e.maxTranslate()), A = e.params.loop ? !0 : !(D === e.minTranslate() || D === e.maxTranslate()), A && e.params.nested && s.stopPropagation(), !e.params.freeMode || !e.params.freeMode.enabled) {
145
+ const r = {
146
+ time: C(),
147
+ delta: Math.abs(a),
148
+ direction: Math.sign(a),
149
+ raw: t
150
+ };
151
+ i.length >= 2 && i.shift();
152
+ const c = i.length ? i[i.length - 1] : void 0;
153
+ if (i.push(r), c ? (r.direction !== c.direction || r.delta > c.delta || r.time > c.time + 150) && w(r) : w(r), H(r))
154
+ return !0;
155
+ } else {
156
+ const r = {
157
+ time: C(),
158
+ delta: Math.abs(a),
159
+ direction: Math.sign(a)
160
+ }, c = h && r.time < h.time + 500 && r.delta <= h.delta && r.direction === h.direction;
161
+ if (!c) {
162
+ h = void 0;
163
+ let N = e.getTranslate() + a * g.sensitivity;
164
+ const z = e.isBeginning, F = e.isEnd;
165
+ if (N >= e.minTranslate() && (N = e.minTranslate()), N <= e.maxTranslate() && (N = e.maxTranslate()), e.setTransition(0), e.setTranslate(N), e.updateProgress(), e.updateActiveIndex(), e.updateSlidesClasses(), (!z && e.isBeginning || !F && e.isEnd) && e.updateSlidesClasses(), e.params.loop && e.loopFix({
166
+ direction: r.direction < 0 ? "next" : "prev",
167
+ byMousewheel: !0
168
+ }), e.params.freeMode.sticky) {
169
+ clearTimeout(T), T = void 0, i.length >= 15 && i.shift();
170
+ const X = i.length ? i[i.length - 1] : void 0, O = i[0];
171
+ if (i.push(r), X && (r.delta > X.delta || r.direction !== X.direction))
172
+ i.splice(0);
173
+ else if (i.length >= 15 && r.time - O.time < 500 && O.delta - r.delta >= 1 && r.delta <= 6) {
174
+ const Y = a > 0 ? 0.8 : 0.2;
175
+ h = r, i.splice(0), T = G(() => {
176
+ e.slideToClosest(e.params.speed, !0, void 0, Y);
177
+ }, 0);
178
+ }
179
+ T || (T = G(() => {
180
+ h = r, i.splice(0), e.slideToClosest(e.params.speed, !0, void 0, 0.5);
181
+ }, 500));
182
+ }
183
+ if (c || _("scroll", s), e.params.autoplay && e.params.autoplayDisableOnInteraction && e.autoplay.stop(), g.releaseOnEdges && (N === e.minTranslate() || N === e.maxTranslate()))
184
+ return !0;
185
+ }
186
+ }
187
+ return s.preventDefault ? s.preventDefault() : s.returnValue = !1, !1;
188
+ }
189
+ function y(t) {
190
+ let s = e.el;
191
+ e.params.mousewheel.eventsTarget !== "container" && (s = document.querySelector(e.params.mousewheel.eventsTarget)), s[t]("mouseenter", d), s[t]("mouseleave", o), s[t]("wheel", E);
192
+ }
193
+ function x() {
194
+ return e.params.cssMode ? (e.wrapperEl.removeEventListener("wheel", E), !0) : e.mousewheel.enabled ? !1 : (y("addEventListener"), e.mousewheel.enabled = !0, !0);
195
+ }
196
+ function M() {
197
+ return e.params.cssMode ? (e.wrapperEl.addEventListener(event, E), !0) : e.mousewheel.enabled ? (y("removeEventListener"), e.mousewheel.enabled = !1, !0) : !1;
198
+ }
199
+ v("init", () => {
200
+ !e.params.mousewheel.enabled && e.params.cssMode && M(), e.params.mousewheel.enabled && x();
201
+ }), v("destroy", () => {
202
+ e.params.cssMode && x(), e.mousewheel.enabled && M();
203
+ }), Object.assign(e.mousewheel, {
204
+ enable: x,
205
+ disable: M
206
+ });
207
+ }
208
+ const ae = "_swiper_1sy27_6", se = "_slide_1sy27_10", re = "_chip_1sy27_17", ie = "_content_1sy27_23", le = "_bullet_1sy27_42", b = {
209
+ "promo-slider-wrapper": "_promo-slider-wrapper_1sy27_2",
210
+ swiper: ae,
211
+ slide: se,
212
+ chip: re,
213
+ content: ie,
214
+ "custom-pagination": "_custom-pagination_1sy27_30",
215
+ bullet: le,
216
+ "bullet-active": "_bullet-active_1sy27_43",
217
+ "bullet-s": "_bullet-s_1sy27_44",
218
+ "bullet-xs": "_bullet-xs_1sy27_45"
219
+ }, W = 5, oe = 5e3, ue = 8, de = (S, e) => {
220
+ const k = e % W, v = Math.abs(S - k), _ = 0, m = 1;
221
+ return v === _ ? b["bullet-active"] : v === m ? b["bullet-s"] : b["bullet-xs"];
222
+ }, ge = ({
223
+ slides: S,
224
+ delay: e = oe,
225
+ spaceBetween: k = ue,
226
+ imageClassName: v,
227
+ slideClassName: _,
228
+ swiperClassName: m,
229
+ contentClassName: T,
230
+ promoSliderWrapperClassName: I
231
+ }) => {
232
+ const [h, i] = j(0);
233
+ return /* @__PURE__ */ U(
234
+ "div",
235
+ {
236
+ className: L(
237
+ b["promo-slider-wrapper"],
238
+ I
239
+ ),
240
+ children: [
241
+ /* @__PURE__ */ P(
242
+ q,
243
+ {
244
+ direction: "horizontal",
245
+ spaceBetween: k,
246
+ modules: [Z, te, ne],
247
+ onSlideChange: (n) => i(n.realIndex),
248
+ loop: !0,
249
+ mousewheel: !0,
250
+ keyboard: {
251
+ enabled: !0,
252
+ onlyInViewport: !0
253
+ },
254
+ autoplay: {
255
+ delay: e,
256
+ disableOnInteraction: !1,
257
+ pauseOnMouseEnter: !0
258
+ },
259
+ className: L(b.swiper, m),
260
+ children: S.map((n) => {
261
+ if (!n) return null;
262
+ const d = n != null && n.imageUrl ? /* @__PURE__ */ P(
263
+ ee,
264
+ {
265
+ className: L(b.image, v),
266
+ src: n.imageUrl,
267
+ desktopImage: n.imageDesktop,
268
+ mobileImage: n.imageMobile,
269
+ alt: n.title
270
+ }
271
+ ) : null, o = /* @__PURE__ */ P(
272
+ "a",
273
+ {
274
+ className: b.link,
275
+ href: n.url,
276
+ rel: "noopener noreferrer",
277
+ target: "_blank",
278
+ children: d
279
+ }
280
+ ), w = () => n.url ? o : d;
281
+ return /* @__PURE__ */ P(
282
+ J,
283
+ {
284
+ className: L(b.slide, _),
285
+ children: /* @__PURE__ */ U(K, { children: [
286
+ n.isPromotion && /* @__PURE__ */ P(
287
+ Q,
288
+ {
289
+ ...n.promotionProps,
290
+ className: L(
291
+ n.promotionProps.className,
292
+ b.chip
293
+ )
294
+ }
295
+ ),
296
+ w(),
297
+ (n == null ? void 0 : n.content) && /* @__PURE__ */ P("div", { className: L(b.content, T), children: n == null ? void 0 : n.content })
298
+ ] })
299
+ },
300
+ n.id
301
+ );
302
+ })
303
+ }
304
+ ),
305
+ /* @__PURE__ */ P("div", { className: b["custom-pagination"], children: Array.from({ length: W }).map((n, d) => /* @__PURE__ */ P(
306
+ "button",
307
+ {
308
+ type: "button",
309
+ autoFocus: d === 0,
310
+ className: L(b.bullet, de(d, h))
311
+ },
312
+ d
313
+ )) })
314
+ ]
315
+ }
316
+ );
317
+ };
318
+ export {
319
+ ge as PromoSlider
320
+ };
@@ -0,0 +1 @@
1
+ export { PromoSlider } from './PromoSlider';
@@ -0,0 +1,4 @@
1
+ import { PromoSlider as e } from "./PromoSlider.js";
2
+ export {
3
+ e as PromoSlider
4
+ };