@sima-land/moleculas 16.0.0-alpha.21 → 16.0.0-alpha.23

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 (141) hide show
  1. package/README.md +1 -1
  2. package/common/components/hover-slider/hover-slider-nav.d.ts +7 -0
  3. package/common/components/hover-slider/hover-slider-nav.js +21 -0
  4. package/common/components/hover-slider/hover-slider-nav.js.map +1 -0
  5. package/common/components/hover-slider/hover-slider-nav.m.scss +22 -0
  6. package/common/components/hover-slider/hover-slider.d.ts +9 -0
  7. package/common/components/hover-slider/hover-slider.js +88 -0
  8. package/common/components/hover-slider/hover-slider.js.map +1 -0
  9. package/common/components/hover-slider/hover-slider.m.scss +36 -0
  10. package/common/components/hover-slider/index.d.ts +3 -0
  11. package/common/components/hover-slider/index.js +9 -0
  12. package/common/components/hover-slider/index.js.map +1 -0
  13. package/common/components/hover-slider/types.d.ts +28 -0
  14. package/common/components/hover-slider/types.js.map +1 -0
  15. package/common/components/hover-slider/utils.d.ts +8 -0
  16. package/common/components/hover-slider/utils.js +23 -0
  17. package/common/components/hover-slider/utils.js.map +1 -0
  18. package/common/components/media-gallery/utils.d.ts +1 -1
  19. package/common/components/media-gallery/utils.js +1 -1
  20. package/common/components/product-image/index.d.ts +3 -0
  21. package/common/components/product-image/index.js +8 -0
  22. package/common/components/product-image/index.js.map +1 -0
  23. package/common/components/product-image/product-image.d.ts +10 -0
  24. package/common/components/product-image/product-image.js +33 -0
  25. package/common/components/product-image/product-image.js.map +1 -0
  26. package/common/components/product-image/product-image.m.scss +62 -0
  27. package/common/components/product-image/types.d.ts +30 -0
  28. package/common/components/product-image/types.js +3 -0
  29. package/common/components/product-image/types.js.map +1 -0
  30. package/common/components/product-image/utils.d.ts +3 -0
  31. package/common/components/product-image/utils.js +6 -0
  32. package/common/components/product-image/utils.js.map +1 -0
  33. package/common/components/product-info/index.d.ts +4 -1
  34. package/common/components/product-info/index.js +5 -2
  35. package/common/components/product-info/index.js.map +1 -1
  36. package/common/components/product-info/parts/adult-confirm-button.d.ts +7 -0
  37. package/common/components/product-info/parts/adult-confirm-button.js +20 -0
  38. package/common/components/product-info/parts/adult-confirm-button.js.map +1 -0
  39. package/common/components/product-info/parts/badges.d.ts +7 -0
  40. package/common/components/product-info/parts/badges.js +20 -0
  41. package/common/components/product-info/parts/badges.js.map +1 -0
  42. package/common/components/product-info/parts/badges.m.scss +3 -0
  43. package/common/components/product-info/parts/cart-control.d.ts +7 -0
  44. package/common/components/product-info/parts/cart-control.js +19 -0
  45. package/common/components/product-info/parts/cart-control.js.map +1 -0
  46. package/common/components/product-info/parts/cart-control.m.scss +41 -0
  47. package/common/components/product-info/parts/footer.d.ts +7 -0
  48. package/common/components/product-info/parts/footer.js +22 -0
  49. package/common/components/product-info/parts/footer.js.map +1 -0
  50. package/common/components/product-info/parts/footer.m.scss +3 -0
  51. package/common/components/product-info/parts/image-button.d.ts +7 -0
  52. package/common/components/product-info/parts/image-button.js +39 -0
  53. package/common/components/product-info/parts/image-button.js.map +1 -0
  54. package/common/components/product-info/parts/image-button.m.scss +40 -0
  55. package/common/components/product-info/parts/image.d.ts +7 -0
  56. package/common/components/product-info/parts/image.js +27 -0
  57. package/common/components/product-info/parts/image.js.map +1 -0
  58. package/common/components/product-info/parts/image.m.scss +24 -0
  59. package/common/components/product-info/parts/index.d.ts +34 -0
  60. package/common/components/product-info/parts/index.js +38 -0
  61. package/common/components/product-info/parts/index.js.map +1 -0
  62. package/common/components/product-info/parts/media.d.ts +7 -0
  63. package/common/components/product-info/parts/media.js +19 -0
  64. package/common/components/product-info/parts/media.js.map +1 -0
  65. package/common/components/product-info/parts/media.m.scss +10 -0
  66. package/common/components/product-info/parts/parts.m.scss +15 -0
  67. package/common/components/product-info/parts/prices.d.ts +7 -0
  68. package/common/components/product-info/parts/prices.js +26 -0
  69. package/common/components/product-info/parts/prices.js.map +1 -0
  70. package/common/components/product-info/parts/prices.m.scss +28 -0
  71. package/common/components/product-info/parts/rating-counter.m.scss +12 -0
  72. package/common/components/product-info/parts/rating-couter.d.ts +7 -0
  73. package/common/components/product-info/parts/rating-couter.js +20 -0
  74. package/common/components/product-info/parts/rating-couter.js.map +1 -0
  75. package/common/components/product-info/parts/secondary-info.d.ts +7 -0
  76. package/common/components/product-info/parts/secondary-info.js +19 -0
  77. package/common/components/product-info/parts/secondary-info.js.map +1 -0
  78. package/common/components/product-info/parts/secondary-info.m.scss +8 -0
  79. package/common/components/product-info/parts/title.d.ts +7 -0
  80. package/common/components/product-info/parts/title.js +24 -0
  81. package/common/components/product-info/parts/title.js.map +1 -0
  82. package/common/components/product-info/parts/title.m.scss +23 -0
  83. package/common/components/product-info/parts/trademark-link.d.ts +7 -0
  84. package/common/components/product-info/parts/trademark-link.js +20 -0
  85. package/common/components/product-info/parts/trademark-link.js.map +1 -0
  86. package/common/components/product-info/parts/trademark-link.m.scss +9 -0
  87. package/common/components/product-info/parts/wait-list-add-link.d.ts +7 -0
  88. package/common/components/product-info/parts/wait-list-add-link.js +20 -0
  89. package/common/components/product-info/parts/wait-list-add-link.js.map +1 -0
  90. package/common/components/product-info/parts/wait-list-added-link.d.ts +7 -0
  91. package/common/components/product-info/parts/wait-list-added-link.js +22 -0
  92. package/common/components/product-info/parts/wait-list-added-link.js.map +1 -0
  93. package/common/components/product-info/parts/wait-list-added-link.m.scss +13 -0
  94. package/common/components/product-info/product-info.d.ts +3 -6
  95. package/common/components/product-info/product-info.js +15 -10
  96. package/common/components/product-info/product-info.js.map +1 -1
  97. package/common/components/product-info/types.d.ts +59 -2
  98. package/common/components/product-info/utils.d.ts +3 -0
  99. package/common/components/product-info/utils.js +7 -2
  100. package/common/components/product-info/utils.js.map +1 -1
  101. package/common/components/rating-counter/rating-counter.js +1 -1
  102. package/common/components/rating-counter/rating-counter.js.map +1 -1
  103. package/common/hooks/index.d.ts +3 -19
  104. package/common/hooks/index.js +7 -36
  105. package/common/hooks/index.js.map +1 -1
  106. package/common/hooks/use-client-width.d.ts +8 -0
  107. package/common/hooks/use-client-width.js +28 -0
  108. package/common/hooks/use-client-width.js.map +1 -0
  109. package/common/hooks/use-image-stub.d.ts +14 -0
  110. package/common/hooks/use-image-stub.js +26 -0
  111. package/common/hooks/use-image-stub.js.map +1 -0
  112. package/common/hooks/use-mounted.d.ts +5 -0
  113. package/common/hooks/use-mounted.js +19 -0
  114. package/common/hooks/use-mounted.js.map +1 -0
  115. package/desktop/components/product-carousel/product-carousel.d.ts +1 -1
  116. package/desktop/components/product-carousel/product-carousel.js +20 -40
  117. package/desktop/components/product-carousel/product-carousel.js.map +1 -1
  118. package/desktop/components/product-carousel/product-carousel.m.scss +0 -6
  119. package/desktop/components/product-carousel/types.d.ts +1 -4
  120. package/package.json +2 -2
  121. package/common/components/product-info/parts.d.ts +0 -69
  122. package/common/components/product-info/parts.js +0 -160
  123. package/common/components/product-info/parts.js.map +0 -1
  124. package/common/components/product-info/product-info.m.scss +0 -280
  125. package/desktop/components/product-card/index.d.ts +0 -2
  126. package/desktop/components/product-card/index.js +0 -9
  127. package/desktop/components/product-card/index.js.map +0 -1
  128. package/desktop/components/product-card/product-card.d.ts +0 -23
  129. package/desktop/components/product-card/product-card.js +0 -94
  130. package/desktop/components/product-card/product-card.js.map +0 -1
  131. package/desktop/components/product-card/product-card.m.scss +0 -12
  132. package/desktop/components/product-card/types.d.ts +0 -19
  133. package/desktop/components/product-card/types.js.map +0 -1
  134. package/desktop/components/product-carousel/hover-card.d.ts +0 -7
  135. package/desktop/components/product-carousel/hover-card.js +0 -40
  136. package/desktop/components/product-carousel/hover-card.js.map +0 -1
  137. package/desktop/components/product-carousel/hover-card.m.scss +0 -14
  138. package/desktop/components/product-carousel/utils.d.ts +0 -16
  139. package/desktop/components/product-carousel/utils.js +0 -45
  140. package/desktop/components/product-carousel/utils.js.map +0 -1
  141. /package/{desktop/components/product-card → common/components/hover-slider}/types.js +0 -0
@@ -1,280 +0,0 @@
1
- @use 'node_modules/@sima-land/ui-nucleons/colors';
2
- @use 'node_modules/@sima-land/ui-nucleons/breakpoints';
3
- @use '../rating-counter/rating-counter-util';
4
-
5
- .image-overlay {
6
- position: relative;
7
- max-width: 100%;
8
- margin-bottom: 8px;
9
- overflow: hidden;
10
-
11
- // формируем соотношение сторон 1 / 1
12
- &::before {
13
- content: '';
14
- display: block;
15
- padding-top: 100%;
16
- pointer-events: none;
17
- }
18
- }
19
-
20
- .image-link {
21
- position: absolute;
22
- top: 0;
23
- left: 0;
24
- display: block;
25
- width: 100%;
26
- height: 100%;
27
- }
28
-
29
- .image {
30
- display: block;
31
- object-fit: contain;
32
- width: 100%;
33
- height: 100%;
34
- &.broken {
35
- display: none;
36
- }
37
- &.adult {
38
- position: absolute;
39
- top: 0;
40
- left: 0;
41
- opacity: 0.2;
42
- filter: blur(24px);
43
- pointer-events: none;
44
- }
45
- }
46
-
47
- .adult-icon {
48
- position: absolute;
49
- width: 40%;
50
- height: 40%;
51
- top: 50%;
52
- left: 50%;
53
- transform: translate(-50%, -50%);
54
- fill: colors.$basic-gray38;
55
- }
56
-
57
- .broken-icon {
58
- position: absolute;
59
- width: 100%;
60
- height: 100%;
61
- }
62
-
63
- .image-buttons {
64
- position: absolute;
65
- top: 0;
66
- left: 0;
67
- width: 100%;
68
- height: 100%;
69
- pointer-events: none;
70
- > * {
71
- pointer-events: all;
72
- }
73
- }
74
-
75
- .image-button {
76
- width: 24px;
77
- height: 24px;
78
- display: block;
79
- border: 0;
80
- outline: 0;
81
- background: transparent;
82
- position: absolute;
83
- --gutter: 8px;
84
- right: var(--gutter);
85
- cursor: pointer;
86
- &:not(.positioned) {
87
- &:nth-child(1) {
88
- top: var(--gutter);
89
- }
90
- &:nth-child(2) {
91
- bottom: var(--gutter);
92
- }
93
- &:nth-child(3) {
94
- top: var(--gutter);
95
- left: var(--gutter);
96
- }
97
- &:nth-child(3) {
98
- top: var(--gutter);
99
- left: var(--gutter);
100
- }
101
- }
102
- &.left-top {
103
- left: var(--gutter);
104
- top: var(--gutter);
105
- }
106
- &.left-bottom {
107
- left: var(--gutter);
108
- bottom: var(--gutter);
109
- }
110
- &.right-top {
111
- right: var(--gutter);
112
- top: var(--gutter);
113
- }
114
- &.right-bottom {
115
- right: var(--gutter);
116
- bottom: var(--gutter);
117
- }
118
- &:nth-child(n + 5) {
119
- display: none;
120
- }
121
- &:hover {
122
- fill: colors.$basic-gray54;
123
- }
124
- @include breakpoints.down('ml') {
125
- --gutter: 4px;
126
- }
127
- }
128
-
129
- .badges {
130
- margin-bottom: 8px;
131
- }
132
-
133
- .prices {
134
- margin-bottom: 8px;
135
- display: flex;
136
- align-items: center;
137
-
138
- font-size: 16px;
139
- font-weight: 700;
140
- line-height: 24px;
141
-
142
- // чтобы старая цена скрывалась если не влазит
143
- &.height-limit {
144
- height: 24px;
145
- overflow: hidden;
146
- flex-wrap: wrap;
147
- }
148
- }
149
-
150
- .price {
151
- font-size: inherit;
152
- line-height: inherit;
153
- margin-right: 8px;
154
- }
155
-
156
- .old-price {
157
- font-size: 12px;
158
- line-height: 16px;
159
- font-weight: 400;
160
- }
161
-
162
- .link {
163
- max-width: 100%;
164
- font-size: 14px;
165
- line-height: 20px;
166
- &.line-clamp {
167
- overflow: hidden;
168
- word-break: break-word;
169
- max-height: 40px;
170
- display: -webkit-box;
171
- -webkit-line-clamp: 2;
172
- -webkit-box-orient: vertical;
173
- }
174
- }
175
-
176
- .adult-info {
177
- display: block;
178
- max-width: 100%;
179
- font-size: 14px;
180
- line-height: 20px;
181
- color: colors.$basic-gray87;
182
- }
183
-
184
- .secondary-info {
185
- margin-top: 8px;
186
- font-size: 14px;
187
- line-height: 20px;
188
- color: colors.$basic-gray38;
189
- }
190
-
191
- .trademark-link {
192
- display: block;
193
- margin-top: 8px;
194
- font-size: 14px;
195
- line-height: 20px;
196
- white-space: nowrap;
197
- overflow: hidden;
198
- text-overflow: ellipsis;
199
- }
200
-
201
- .rating {
202
- margin-top: 8px;
203
- @include breakpoints.down('mm') {
204
- @include rating-counter-util.size-s;
205
- }
206
- @include breakpoints.up('mm') {
207
- @include rating-counter-util.size-m;
208
- }
209
- }
210
-
211
- // футер
212
- .footer {
213
- margin-top: 16px;
214
- }
215
-
216
- .text-button {
217
- font-size: 16px;
218
- line-height: 24px;
219
- font-weight: 600;
220
- &:hover,
221
- &:active {
222
- font-weight: 600;
223
- }
224
- @include breakpoints.down('ml') {
225
- font-size: 14px;
226
- line-height: 20px;
227
- }
228
- }
229
-
230
- .wait-list-added-text {
231
- font-size: 16px;
232
- line-height: 24px;
233
- font-weight: 600;
234
- color: colors.$basic-gray24;
235
- @include breakpoints.down('ml') {
236
- font-size: 14px;
237
- line-height: 20px;
238
- }
239
- }
240
-
241
- // блок корзины
242
- .control-wrapper {
243
- display: flex;
244
- flex-wrap: wrap;
245
- margin-top: 16px;
246
- &.loading {
247
- .control {
248
- background: colors.$basic-gray4;
249
- border-radius: 4px;
250
- }
251
- .unit-text::before {
252
- content: '';
253
- display: block;
254
- background: colors.$basic-gray4;
255
- border-radius: 4px;
256
- width: 48px;
257
- height: 16px;
258
- }
259
- }
260
- }
261
-
262
- .control {
263
- width: 122px;
264
- height: 40px;
265
- margin-right: 16px;
266
- }
267
-
268
- .unit-text {
269
- padding-top: 12px; // чтобы при переносе на следующую строку правильно отступил от кнопки
270
- font-size: 12px;
271
- line-height: 16px;
272
- color: colors.$basic-gray38;
273
- }
274
-
275
- .bottom-text {
276
- margin-top: 12px;
277
- font-size: 12px;
278
- line-height: 16px;
279
- color: colors.$basic-gray38;
280
- }
@@ -1,2 +0,0 @@
1
- export type { ProductCardProps } from './types';
2
- export { ProductCard, HoverCard, reduceBaseInfo, reduceHoverInfo } from './product-card';
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reduceHoverInfo = exports.reduceBaseInfo = exports.HoverCard = exports.ProductCard = void 0;
4
- var product_card_1 = require("./product-card");
5
- Object.defineProperty(exports, "ProductCard", { enumerable: true, get: function () { return product_card_1.ProductCard; } });
6
- Object.defineProperty(exports, "HoverCard", { enumerable: true, get: function () { return product_card_1.HoverCard; } });
7
- Object.defineProperty(exports, "reduceBaseInfo", { enumerable: true, get: function () { return product_card_1.reduceBaseInfo; } });
8
- Object.defineProperty(exports, "reduceHoverInfo", { enumerable: true, get: function () { return product_card_1.reduceHoverInfo; } });
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/desktop/components/product-card/index.ts"],"names":[],"mappings":";;;AACA,+CAAyF;AAAhF,2GAAA,WAAW,OAAA;AAAE,yGAAA,SAAS,OAAA;AAAE,8GAAA,cAAc,OAAA;AAAE,+GAAA,eAAe,OAAA"}
@@ -1,23 +0,0 @@
1
- /// <reference types="react" />
2
- import { ProductCardChildren, ProductCardProps, ReduceBaseInfoOptions } from './types';
3
- import { PlateProps } from '@sima-land/ui-nucleons/plate';
4
- /**
5
- * Карточка данных товара с расширенной инф-ой при наведении.
6
- * @param props Свойства.
7
- * @return Элемент.
8
- */
9
- export declare function ProductCard({ reduceBaseInfo: reduceBaseInfoProp, reduceHoverInfo: reduceHoverInfoProp, children, className, ...props }: ProductCardProps): import("react/jsx-runtime").JSX.Element;
10
- export declare const HoverCard: import("react").ForwardRefExoticComponent<PlateProps & import("react").RefAttributes<HTMLDivElement | null>>;
11
- /**
12
- * Фильтрует содержимое карточки для вывода состояния без наведения.
13
- * @param element Элемент.
14
- * @param options Опции.
15
- * @return Элемент.
16
- */
17
- export declare function reduceBaseInfo(element: ProductCardChildren, { hideImageButtons, hideFooter }?: ReduceBaseInfoOptions): import("react").FunctionComponentElement<import("../../../common/components/product-info").ProductInfoProps>;
18
- /**
19
- * Получив содержимое карточки фильтрует/меняет его для вывода в карточке при наведении.
20
- * @param element Содержимое.
21
- * @return Элемент.
22
- */
23
- export declare function reduceHoverInfo(element: ProductCardChildren): import("react").FunctionComponentElement<import("../../../common/components/product-info").ProductInfoProps>;
@@ -1,94 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.reduceHoverInfo = exports.reduceBaseInfo = exports.HoverCard = exports.ProductCard = void 0;
7
- const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = require("react");
9
- const product_info_1 = require("../../../common/components/product-info");
10
- const plate_1 = require("@sima-land/ui-nucleons/plate");
11
- const helpers_1 = require("@sima-land/ui-nucleons/helpers");
12
- const bind_1 = __importDefault(require("classnames/bind"));
13
- const product_card_m_scss_1 = __importDefault(require("./product-card.m.scss"));
14
- const cx = bind_1.default.bind(product_card_m_scss_1.default);
15
- /**
16
- * Карточка данных товара с расширенной инф-ой при наведении.
17
- * @param props Свойства.
18
- * @return Элемент.
19
- */
20
- function ProductCard({
21
- // @todo не совсем правильно заставлять работать с внутренностями реакта - надо придумать что-то более простое
22
- reduceBaseInfo: reduceBaseInfoProp = reduceBaseInfo, reduceHoverInfo: reduceHoverInfoProp = reduceHoverInfo, children, className, ...props }) {
23
- const [hovered, toggle] = (0, react_1.useState)(false);
24
- return ((0, jsx_runtime_1.jsxs)("div", { ...props, "data-testid": 'product-card', className: cx('root', className), onMouseEnter: () => toggle(true),
25
- // ВАЖНО: вешаем onMouseLeave на корневой элемент так как в Chrome проблемы если вешать на "product-card:info"
26
- onMouseLeave: () => toggle(false), children: [(0, jsx_runtime_1.jsx)("div", { "data-testid": 'product-card:info', children: reduceBaseInfoProp(children) }), hovered && (0, jsx_runtime_1.jsx)(exports.HoverCard, { children: reduceHoverInfoProp(children) })] }));
27
- }
28
- exports.ProductCard = ProductCard;
29
- exports.HoverCard = (0, react_1.forwardRef)((props, ref) => {
30
- const layer = (0, helpers_1.useLayer)() + 1;
31
- return ((0, jsx_runtime_1.jsx)(plate_1.Plate, { ...props, style: { ...props.style, zIndex: layer }, ref: ref, rounds: 'm', shadow: 'z4', className: cx('card', props.className), "data-testid": 'product-card:hover-card' }));
32
- });
33
- /**
34
- * Фильтрует содержимое карточки для вывода состояния без наведения.
35
- * @param element Элемент.
36
- * @param options Опции.
37
- * @return Элемент.
38
- */
39
- function reduceBaseInfo(element, { hideImageButtons = true, hideFooter = true } = {}) {
40
- return (0, react_1.cloneElement)(element, {
41
- children: react_1.Children.map(element.props.children, child => {
42
- let result;
43
- if ((0, react_1.isValidElement)(child)) {
44
- switch (true) {
45
- // игнорируем или фильтруем кнопки-иконки на изображении
46
- case Boolean(child.type === product_info_1.Parts.Image && hideImageButtons):
47
- result = (0, react_1.cloneElement)(child, {
48
- children: typeof hideImageButtons === 'function'
49
- ? react_1.Children.toArray(child.props.children).filter(hideImageButtons)
50
- : undefined,
51
- });
52
- break;
53
- // игнорируем футер
54
- case Boolean(child.type === product_info_1.Parts.Footer && hideFooter):
55
- result = null;
56
- break;
57
- // остальное оставляем без изменений
58
- default:
59
- result = child;
60
- break;
61
- }
62
- }
63
- return result;
64
- }),
65
- });
66
- }
67
- exports.reduceBaseInfo = reduceBaseInfo;
68
- /**
69
- * Получив содержимое карточки фильтрует/меняет его для вывода в карточке при наведении.
70
- * @param element Содержимое.
71
- * @return Элемент.
72
- */
73
- function reduceHoverInfo(element) {
74
- return (0, react_1.cloneElement)(element, {
75
- children: react_1.Children.map(element.props.children, child => {
76
- let result;
77
- if ((0, react_1.isValidElement)(child)) {
78
- switch (child.type) {
79
- // при наведении у изображения строго непрозрачность = 1
80
- case product_info_1.Parts.Image:
81
- result = (0, react_1.cloneElement)(child, { opacity: 1 });
82
- break;
83
- // остальное оставляем без изменений
84
- default:
85
- result = child;
86
- break;
87
- }
88
- }
89
- return result;
90
- }),
91
- });
92
- }
93
- exports.reduceHoverInfo = reduceHoverInfo;
94
- //# sourceMappingURL=product-card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"product-card.js","sourceRoot":"","sources":["../../../../src/desktop/components/product-card/product-card.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- .root {
2
- position: relative;
3
- max-width: 400px;
4
- }
5
-
6
- .card {
7
- position: absolute;
8
- top: -16px;
9
- left: -16px;
10
- padding: 16px 16px 24px;
11
- width: calc(100% + 32px);
12
- }
@@ -1,19 +0,0 @@
1
- import type { HTMLAttributes, ReactElement, ReactNode } from 'react';
2
- import type { ProductInfo, ProductInfoProps } from '../../../common/components/product-info';
3
- /** Допустимое содержимое компонента ProductCard. */
4
- export type ProductCardChildren = ReactElement<ProductInfoProps, typeof ProductInfo>;
5
- export interface ProductCardProps extends HTMLAttributes<HTMLDivElement> {
6
- /** Содержимое. */
7
- children: ProductCardChildren;
8
- /** Получив содержимое должен вернуть то что будет выведено без наведения. */
9
- reduceBaseInfo?: (children: ProductCardChildren) => ReactNode;
10
- /** Получив содержимое должен вернуть то что будет выведено во всплывающей карточке. */
11
- reduceHoverInfo?: (children: ProductCardChildren) => ReactNode;
12
- }
13
- /** Опции фильтрации содержимого карточки без наведения. */
14
- export interface ReduceBaseInfoOptions {
15
- /** Надо ли скрыть кнопки на картинке. При передаче функции она будет применена для каждого дочернего элемента внутри картинки как фильтр. */
16
- hideImageButtons?: boolean | ((element: ReactNode) => boolean);
17
- /** Надо ли скрыть футер. */
18
- hideFooter?: boolean;
19
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/desktop/components/product-card/types.ts"],"names":[],"mappings":""}
@@ -1,7 +0,0 @@
1
- import { HoverCardProps } from './types';
2
- /**
3
- * Карточка товара, появляющаяся над элементом карусели.
4
- * @param props Свойства компонента.
5
- * @return Элемент.
6
- */
7
- export declare function HoverCard({ targetRef, onMouseLeave, children }: HoverCardProps): import("react/jsx-runtime").JSX.Element;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.HoverCard = void 0;
7
- const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = require("react");
9
- const styling_1 = require("@sima-land/ui-nucleons/styling");
10
- const product_card_1 = require("../product-card");
11
- const bind_1 = __importDefault(require("classnames/bind"));
12
- const hover_card_m_scss_1 = __importDefault(require("./hover-card.m.scss"));
13
- const helpers_1 = require("@sima-land/ui-nucleons/helpers");
14
- const cx = bind_1.default.bind(hover_card_m_scss_1.default);
15
- /**
16
- * Карточка товара, появляющаяся над элементом карусели.
17
- * @param props Свойства компонента.
18
- * @return Элемент.
19
- */
20
- function HoverCard({ targetRef, onMouseLeave, children }) {
21
- const rootRef = (0, react_1.useRef)(null);
22
- const [ready, setReady] = (0, react_1.useState)(false);
23
- (0, react_1.useLayoutEffect)(() => {
24
- if (targetRef.current && rootRef.current) {
25
- const element = rootRef.current;
26
- const rect = targetRef.current.getBoundingClientRect();
27
- const correction = (0, helpers_1.getPositionedParentOffset)(rootRef.current);
28
- element.style.left = `${correction.x + rect.left - 16}px`;
29
- element.style.top = `${correction.y + rect.top - 16}px`;
30
- element.style.width = `${rect.width + 32}px`;
31
- setReady(true);
32
- }
33
- });
34
- return ((0, jsx_runtime_1.jsx)(product_card_1.HoverCard, { ref: rootRef, style: { padding: '16px 16px 24px 16px' }, className: cx('root', !ready && 'hidden', styling_1.SmallRounds.all, styling_1.BoxShadow.z4), onMouseLeave: () => {
35
- setReady(false);
36
- onMouseLeave && onMouseLeave();
37
- }, children: children }));
38
- }
39
- exports.HoverCard = HoverCard;
40
- //# sourceMappingURL=hover-card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hover-card.js","sourceRoot":"","sources":["../../../../src/desktop/components/product-carousel/hover-card.tsx"],"names":[],"mappings":";;;;;;;AAAA,iCAA0D;AAE1D,4DAAwE;AACxE,kDAA6D;AAC7D,2DAAyC;AACzC,4EAAyC;AACzC,4DAA2E;AAE3E,MAAM,EAAE,GAAG,cAAU,CAAC,IAAI,CAAC,2BAAM,CAAC,CAAC;AAEnC;;;;GAIG;AACH,SAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAkB;IAC7E,MAAM,OAAO,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IAEnD,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,IAAI,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACvD,MAAM,UAAU,GAAG,IAAA,mCAAyB,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE9D,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC;YAE7C,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,uBAAC,wBAAa,IACZ,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EACzC,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,QAAQ,EAAE,qBAAW,CAAC,GAAG,EAAE,mBAAS,CAAC,EAAE,CAAC,EACxE,YAAY,EAAE,GAAG,EAAE;YACjB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,YAAY,IAAI,YAAY,EAAE,CAAC;QACjC,CAAC,YAEA,QAAQ,GACK,CACjB,CAAC;AACJ,CAAC;AA/BD,8BA+BC"}
@@ -1,14 +0,0 @@
1
- @use 'node_modules/@sima-land/ui-nucleons/colors';
2
-
3
- .root {
4
- position: absolute;
5
- top: -9999px;
6
- left: -9999px;
7
- opacity: 1;
8
- visibility: visible;
9
- &.hidden {
10
- opacity: 0;
11
- visibility: hidden;
12
- pointer-events: none;
13
- }
14
- }
@@ -1,16 +0,0 @@
1
- import { RefObject, DependencyList } from 'react';
2
- /**
3
- * Возвращает объект работы с флагом, который автоматически возвращается в true через заданный промежуток времени.
4
- * @return Объект работы с флагом.
5
- */
6
- export declare function useAllowFlag(): {
7
- allowed: () => boolean;
8
- disallowFor: (timeout: number) => void;
9
- };
10
- /**
11
- * Возвращает ширину дочернего элемента.
12
- * @param ref Ref дочернего элемента.
13
- * @param deps Массив зависимостей от которых зависит пересчет.
14
- * @return Ширина.
15
- */
16
- export declare function useClientWidth(ref: RefObject<HTMLElement | null>, deps?: DependencyList): number | null;
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useClientWidth = exports.useAllowFlag = void 0;
4
- const react_1 = require("react");
5
- /**
6
- * Возвращает объект работы с флагом, который автоматически возвращается в true через заданный промежуток времени.
7
- * @return Объект работы с флагом.
8
- */
9
- function useAllowFlag() {
10
- const ref = (0, react_1.useRef)(true);
11
- const timerIdRef = (0, react_1.useRef)();
12
- const allowed = (0, react_1.useCallback)(() => ref.current, []);
13
- const disallowFor = (0, react_1.useCallback)((timeout) => {
14
- window.clearTimeout(timerIdRef.current);
15
- ref.current = false;
16
- timerIdRef.current = window.setTimeout(() => (ref.current = true), timeout);
17
- }, []);
18
- const controlRef = (0, react_1.useRef)({ allowed, disallowFor });
19
- return controlRef.current;
20
- }
21
- exports.useAllowFlag = useAllowFlag;
22
- /**
23
- * Возвращает ширину дочернего элемента.
24
- * @param ref Ref дочернего элемента.
25
- * @param deps Массив зависимостей от которых зависит пересчет.
26
- * @return Ширина.
27
- */
28
- function useClientWidth(ref, deps = []) {
29
- const [width, setWidth] = (0, react_1.useState)(null);
30
- (0, react_1.useEffect)(() => {
31
- if (!ref.current) {
32
- return;
33
- }
34
- const element = ref.current;
35
- const observer = new ResizeObserver(() => {
36
- setWidth(element.clientWidth);
37
- });
38
- observer.observe(element);
39
- setWidth(element.clientWidth);
40
- return () => observer.disconnect();
41
- }, [ref, ...deps]);
42
- return width;
43
- }
44
- exports.useClientWidth = useClientWidth;
45
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/desktop/components/product-carousel/utils.ts"],"names":[],"mappings":";;;AAAA,iCAA4F;AAE5F;;;GAGG;AACH,SAAgB,YAAY;IAC1B,MAAM,GAAG,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACzB,MAAM,UAAU,GAAG,IAAA,cAAM,GAAU,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,CAAC,OAAe,EAAE,EAAE;QAClD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;QACpB,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAEpD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,CAAC;AAfD,oCAeC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,GAAkC,EAAE,OAAuB,EAAE;IAC1F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAE5B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YACvC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1B,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE9B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAEnB,OAAO,KAAK,CAAC;AACf,CAAC;AAtBD,wCAsBC"}