@trafilea/afrodita-components 2.2.0 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/build/dts/components/collection/index.d.ts +5 -0
  2. package/build/dts/components/collection/product/mobile/ProductItemMobile.d.ts +1 -1
  3. package/build/dts/components/collection/product/mobile/ProductItemMobile.stories.d.ts +1 -1
  4. package/build/dts/components/collection/product/types.d.ts +1 -0
  5. package/build/dts/components/color/selector/PatternSelector.d.ts +8 -0
  6. package/build/dts/components/color/selector/PatternSelector.test.d.ts +1 -0
  7. package/build/dts/components/filtering/Accordion.d.ts +8 -0
  8. package/build/dts/components/filtering/Filters.d.ts +15 -0
  9. package/build/dts/components/filtering/Filters.stories.d.ts +9 -0
  10. package/build/dts/components/filtering/Filters.test.d.ts +1 -0
  11. package/build/dts/components/filtering/FiltersStyled.d.ts +59 -0
  12. package/build/dts/components/icons/Actions/Close.d.ts +3 -0
  13. package/build/dts/components/icons/Actions/Trash.d.ts +3 -0
  14. package/build/dts/components/icons/Actions/index.d.ts +2 -0
  15. package/build/dts/components/icons/Arrows/ChevronRightVariant.d.ts +3 -0
  16. package/build/dts/components/icons/Arrows/index.d.ts +1 -0
  17. package/build/dts/components/index.d.ts +3 -1
  18. package/build/dts/components/slider/StyledSlider.d.ts +4 -4
  19. package/build/dts/types/types.d.ts +16 -1
  20. package/build/dts/utils/index.d.ts +1 -0
  21. package/build/dts/utils/simulateClick/simulateClick.d.ts +1 -0
  22. package/build/dts/utils/simulateClick/simulateClick.test.d.ts +1 -0
  23. package/build/index.css +170 -225
  24. package/build/index.d.ts +64 -2
  25. package/build/index.esm.css +170 -225
  26. package/build/index.esm.js +1089 -1392
  27. package/build/index.esm.js.map +1 -1
  28. package/build/index.js +1090 -1391
  29. package/build/index.js.map +1 -1
  30. package/package.json +2 -3
package/build/index.css CHANGED
@@ -1,324 +1,269 @@
1
1
  /* Slider */
2
- .slick-slider
3
- {
4
- position: relative;
2
+ .slick-slider {
3
+ position: relative;
5
4
 
6
- display: block;
7
- box-sizing: border-box;
5
+ display: block;
6
+ box-sizing: border-box;
8
7
 
9
- -webkit-user-select: none;
10
- -moz-user-select: none;
11
- -ms-user-select: none;
12
- user-select: none;
8
+ -webkit-user-select: none;
9
+ -moz-user-select: none;
10
+ -ms-user-select: none;
11
+ user-select: none;
13
12
 
14
- -webkit-touch-callout: none;
15
- -khtml-user-select: none;
16
- -ms-touch-action: pan-y;
17
- touch-action: pan-y;
18
- -webkit-tap-highlight-color: transparent;
13
+ -webkit-touch-callout: none;
14
+ -khtml-user-select: none;
15
+ -ms-touch-action: pan-y;
16
+ touch-action: pan-y;
17
+ -webkit-tap-highlight-color: transparent;
19
18
  }
20
19
 
21
- .slick-list
22
- {
23
- position: relative;
20
+ .slick-list {
21
+ position: relative;
24
22
 
25
- display: block;
26
- overflow: hidden;
23
+ display: block;
24
+ overflow: hidden;
27
25
 
28
- margin: 0;
29
- padding: 0;
26
+ margin: 0;
27
+ padding: 0;
30
28
  }
31
- .slick-list:focus
32
- {
33
- outline: none;
29
+ .slick-list:focus {
30
+ outline: none;
34
31
  }
35
- .slick-list.dragging
36
- {
37
- cursor: pointer;
38
- cursor: hand;
32
+ .slick-list.dragging {
33
+ cursor: pointer;
34
+ cursor: hand;
39
35
  }
40
36
 
41
37
  .slick-slider .slick-track,
42
- .slick-slider .slick-list
43
- {
44
- -webkit-transform: translate3d(0, 0, 0);
45
- -moz-transform: translate3d(0, 0, 0);
46
- -ms-transform: translate3d(0, 0, 0);
47
- -o-transform: translate3d(0, 0, 0);
48
- transform: translate3d(0, 0, 0);
38
+ .slick-slider .slick-list {
39
+ -webkit-transform: translate3d(0, 0, 0);
40
+ -moz-transform: translate3d(0, 0, 0);
41
+ -ms-transform: translate3d(0, 0, 0);
42
+ -o-transform: translate3d(0, 0, 0);
43
+ transform: translate3d(0, 0, 0);
49
44
  }
50
45
 
51
- .slick-track
52
- {
53
- position: relative;
54
- top: 0;
55
- left: 0;
46
+ .slick-track {
47
+ position: relative;
48
+ top: 0;
49
+ left: 0;
56
50
 
57
- display: block;
58
- margin-left: auto;
59
- margin-right: auto;
51
+ display: block;
52
+ margin-left: auto;
53
+ margin-right: auto;
60
54
  }
61
55
  .slick-track:before,
62
- .slick-track:after
63
- {
64
- display: table;
56
+ .slick-track:after {
57
+ display: table;
65
58
 
66
- content: '';
59
+ content: '';
67
60
  }
68
- .slick-track:after
69
- {
70
- clear: both;
61
+ .slick-track:after {
62
+ clear: both;
71
63
  }
72
- .slick-loading .slick-track
73
- {
74
- visibility: hidden;
64
+ .slick-loading .slick-track {
65
+ visibility: hidden;
75
66
  }
76
67
 
77
- .slick-slide
78
- {
79
- display: none;
80
- float: left;
68
+ .slick-slide {
69
+ display: none;
70
+ float: left;
81
71
 
82
- height: 100%;
83
- min-height: 1px;
72
+ height: 100%;
73
+ min-height: 0.063rem;
84
74
  }
85
- [dir='rtl'] .slick-slide
86
- {
87
- float: right;
75
+ [dir='rtl'] .slick-slide {
76
+ float: right;
88
77
  }
89
- .slick-slide img
90
- {
91
- display: block;
78
+ .slick-slide img {
79
+ display: block;
92
80
  }
93
- .slick-slide.slick-loading img
94
- {
95
- display: none;
81
+ .slick-slide.slick-loading img {
82
+ display: none;
96
83
  }
97
- .slick-slide.dragging img
98
- {
99
- pointer-events: none;
84
+ .slick-slide.dragging img {
85
+ pointer-events: none;
100
86
  }
101
- .slick-initialized .slick-slide
102
- {
103
- display: block;
87
+ .slick-initialized .slick-slide {
88
+ display: block;
104
89
  }
105
- .slick-loading .slick-slide
106
- {
107
- visibility: hidden;
90
+ .slick-loading .slick-slide {
91
+ visibility: hidden;
108
92
  }
109
- .slick-vertical .slick-slide
110
- {
111
- display: block;
93
+ .slick-vertical .slick-slide {
94
+ display: block;
112
95
 
113
- height: auto;
96
+ height: auto;
114
97
 
115
- border: 1px solid transparent;
98
+ border: 0.063rem solid transparent;
116
99
  }
117
100
  .slick-arrow.slick-hidden {
118
- display: none;
101
+ display: none;
119
102
  }
120
103
 
121
- @charset 'UTF-8';
122
- /* Slider */
123
- .slick-loading .slick-list
124
- {
125
- background: #fff url('./ajax-loader.gif') center center no-repeat;
126
- }
127
-
128
- /* Icons */
129
- @font-face
130
- {
131
- font-family: 'slick';
132
- font-weight: normal;
133
- font-style: normal;
134
-
135
- src: url('./fonts/slick.eot');
136
- src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
137
- }
138
104
  /* Arrows */
139
105
  .slick-prev,
140
- .slick-next
141
- {
142
- font-size: 0;
143
- line-height: 0;
106
+ .slick-next {
107
+ font-size: 0;
108
+ line-height: 0;
144
109
 
145
- position: absolute;
146
- top: 50%;
110
+ position: absolute;
111
+ top: 50%;
147
112
 
148
- display: block;
113
+ display: block;
149
114
 
150
- width: 20px;
151
- height: 20px;
152
- padding: 0;
153
- -webkit-transform: translate(0, -50%);
154
- -ms-transform: translate(0, -50%);
155
- transform: translate(0, -50%);
115
+ width: 1.25rem;
116
+ height: 1.25rem;
117
+ padding: 0;
118
+ -webkit-transform: translate(0, -50%);
119
+ -ms-transform: translate(0, -50%);
120
+ transform: translate(0, -50%);
156
121
 
157
- cursor: pointer;
122
+ cursor: pointer;
158
123
 
159
- color: transparent;
160
- border: none;
161
- outline: none;
162
- background: transparent;
124
+ color: transparent;
125
+ border: none;
126
+ outline: none;
127
+ background: transparent;
163
128
  }
164
129
  .slick-prev:hover,
165
130
  .slick-prev:focus,
166
131
  .slick-next:hover,
167
- .slick-next:focus
168
- {
169
- color: transparent;
170
- outline: none;
171
- background: transparent;
132
+ .slick-next:focus {
133
+ color: transparent;
134
+ outline: none;
135
+ background: transparent;
172
136
  }
173
137
  .slick-prev:hover:before,
174
138
  .slick-prev:focus:before,
175
139
  .slick-next:hover:before,
176
- .slick-next:focus:before
177
- {
178
- opacity: 1;
140
+ .slick-next:focus:before {
141
+ opacity: 1;
179
142
  }
180
143
  .slick-prev.slick-disabled:before,
181
- .slick-next.slick-disabled:before
182
- {
183
- opacity: .25;
144
+ .slick-next.slick-disabled:before {
145
+ opacity: 0.25;
184
146
  }
185
147
 
186
148
  .slick-prev:before,
187
- .slick-next:before
188
- {
189
- font-family: 'slick';
190
- font-size: 20px;
191
- line-height: 1;
149
+ .slick-next:before {
150
+ font-family: 'slick';
151
+ font-size: 1.25rem;
152
+ line-height: 1;
192
153
 
193
- opacity: .75;
194
- color: white;
154
+ opacity: 0.75;
155
+ color: white;
195
156
 
196
- -webkit-font-smoothing: antialiased;
197
- -moz-osx-font-smoothing: grayscale;
157
+ -webkit-font-smoothing: antialiased;
158
+ -moz-osx-font-smoothing: grayscale;
198
159
  }
199
160
 
200
- .slick-prev
201
- {
202
- left: -25px;
161
+ .slick-prev {
162
+ left: -1.5rem;
203
163
  }
204
- [dir='rtl'] .slick-prev
205
- {
206
- right: -25px;
207
- left: auto;
164
+ [dir='rtl'] .slick-prev {
165
+ right: -1.5rem;
166
+ left: auto;
208
167
  }
209
- .slick-prev:before
210
- {
211
- content: '←';
168
+ .slick-prev:before {
169
+ content: '←';
212
170
  }
213
- [dir='rtl'] .slick-prev:before
214
- {
215
- content: '→';
171
+ [dir='rtl'] .slick-prev:before {
172
+ content: '→';
216
173
  }
217
174
 
218
- .slick-next
219
- {
220
- right: -25px;
175
+ .slick-next {
176
+ right: -1.5rem;
221
177
  }
222
- [dir='rtl'] .slick-next
223
- {
224
- right: auto;
225
- left: -25px;
178
+ [dir='rtl'] .slick-next {
179
+ right: auto;
180
+ left: -1.5rem;
226
181
  }
227
- .slick-next:before
228
- {
229
- content: '→';
182
+ .slick-next:before {
183
+ content: '→';
230
184
  }
231
- [dir='rtl'] .slick-next:before
232
- {
233
- content: '←';
185
+ [dir='rtl'] .slick-next:before {
186
+ content: '←';
234
187
  }
235
188
 
236
189
  /* Dots */
237
- .slick-dotted.slick-slider
238
- {
239
- margin-bottom: 30px;
190
+ .slick-dotted.slick-slider {
191
+ margin-bottom: 1.875rem;
240
192
  }
241
193
 
242
- .slick-dots
243
- {
244
- position: absolute;
245
- bottom: -25px;
194
+ .slick-dots {
195
+ position: absolute;
196
+ bottom: -1.5rem;
246
197
 
247
- display: block;
198
+ display: block;
248
199
 
249
- width: 100%;
250
- padding: 0;
251
- margin: 0;
200
+ width: 100%;
201
+ padding: 0;
202
+ margin: 0;
252
203
 
253
- list-style: none;
204
+ list-style: none;
254
205
 
255
- text-align: center;
206
+ text-align: center;
256
207
  }
257
- .slick-dots li
258
- {
259
- position: relative;
208
+ .slick-dots li {
209
+ position: relative;
260
210
 
261
- display: inline-block;
211
+ display: inline-block;
262
212
 
263
- width: 20px;
264
- height: 20px;
265
- margin: 0 5px;
266
- padding: 0;
213
+ width: 1.25rem;
214
+ height: 1.25rem;
215
+ margin: 0 0.313rem;
216
+ padding: 0;
267
217
 
268
- cursor: pointer;
218
+ cursor: pointer;
269
219
  }
270
- .slick-dots li button
271
- {
272
- font-size: 0;
273
- line-height: 0;
220
+ .slick-dots li button {
221
+ font-size: 0;
222
+ line-height: 0;
274
223
 
275
- display: block;
224
+ display: block;
276
225
 
277
- width: 20px;
278
- height: 20px;
279
- padding: 5px;
226
+ width: 1.25rem;
227
+ height: 1.25rem;
228
+ padding: 0.313rem;
280
229
 
281
- cursor: pointer;
230
+ cursor: pointer;
282
231
 
283
- color: transparent;
284
- border: 0;
285
- outline: none;
286
- background: transparent;
232
+ color: transparent;
233
+ border: 0;
234
+ outline: none;
235
+ background: transparent;
287
236
  }
288
237
  .slick-dots li button:hover,
289
- .slick-dots li button:focus
290
- {
291
- outline: none;
238
+ .slick-dots li button:focus {
239
+ outline: none;
292
240
  }
293
241
  .slick-dots li button:hover:before,
294
- .slick-dots li button:focus:before
295
- {
296
- opacity: 1;
242
+ .slick-dots li button:focus:before {
243
+ opacity: 1;
297
244
  }
298
- .slick-dots li button:before
299
- {
300
- font-family: 'slick';
301
- font-size: 6px;
302
- line-height: 20px;
245
+ .slick-dots li button:before {
246
+ font-family: 'slick';
247
+ font-size: 0.375rem;
248
+ line-height: 1.25rem;
303
249
 
304
- position: absolute;
305
- top: 0;
306
- left: 0;
250
+ position: absolute;
251
+ top: 0;
252
+ left: 0;
307
253
 
308
- width: 20px;
309
- height: 20px;
254
+ width: 1.25rem;
255
+ height: 1.25rem;
310
256
 
311
- content: '•';
312
- text-align: center;
257
+ content: '•';
258
+ text-align: center;
313
259
 
314
- opacity: .25;
315
- color: black;
260
+ opacity: 0.25;
261
+ color: black;
316
262
 
317
- -webkit-font-smoothing: antialiased;
318
- -moz-osx-font-smoothing: grayscale;
263
+ -webkit-font-smoothing: antialiased;
264
+ -moz-osx-font-smoothing: grayscale;
319
265
  }
320
- .slick-dots li.slick-active button:before
321
- {
322
- opacity: .75;
323
- color: black;
266
+ .slick-dots li.slick-active button:before {
267
+ opacity: 0.75;
268
+ color: black;
324
269
  }
package/build/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import React, { ReactNode, ElementType } from 'react';
3
3
  import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
4
+ import * as _emotion_react_types_jsx_namespace from '@emotion/react/types/jsx-namespace';
4
5
 
5
6
  declare const SixtyDaysGuarantee: ({ height, width, fill, title }: IconProps) => JSX.Element;
6
7
 
@@ -24,12 +25,18 @@ declare const LightCheck: ({ height, width, fill, strokeWidth }: LightCheckProps
24
25
 
25
26
  declare const Question: ({ height, width, fill }: IconProps) => JSX.Element;
26
27
 
28
+ declare const Close: ({ height, width, fill }: IconProps) => JSX.Element;
29
+
30
+ declare const Trash: ({ height, width, fill }: IconProps) => JSX.Element;
31
+
27
32
  declare const Actions_Check: typeof Check;
28
33
  declare const Actions_ClearLight: typeof ClearLight;
29
34
  declare const Actions_LightExclamation: typeof LightExclamation;
30
35
  type Actions_LightCheckProps = LightCheckProps;
31
36
  declare const Actions_LightCheck: typeof LightCheck;
32
37
  declare const Actions_Question: typeof Question;
38
+ declare const Actions_Close: typeof Close;
39
+ declare const Actions_Trash: typeof Trash;
33
40
  declare namespace Actions {
34
41
  export {
35
42
  Actions_Check as Check,
@@ -38,6 +45,8 @@ declare namespace Actions {
38
45
  Actions_LightCheckProps as LightCheckProps,
39
46
  Actions_LightCheck as LightCheck,
40
47
  Actions_Question as Question,
48
+ Actions_Close as Close,
49
+ Actions_Trash as Trash,
41
50
  };
42
51
  }
43
52
 
@@ -68,6 +77,8 @@ declare const ChevronLeft: ({ height, width, fill, opacity }: IconWithOpacityPro
68
77
 
69
78
  declare const ChevronRight: ({ height, width, fill, opacity }: IconWithOpacityProps) => JSX.Element;
70
79
 
80
+ declare const ChevronRightVariant: ({ height, width, fill }: IconProps) => JSX.Element;
81
+
71
82
  declare const ChevronUp: ({ height, width, fill }: IconProps) => JSX.Element;
72
83
 
73
84
  declare const ChevronUpSolid: ({ height, width, fill }: IconProps) => JSX.Element;
@@ -77,6 +88,7 @@ declare const CircleUp: ({ width, height, fill }: IconProps) => JSX.Element;
77
88
  declare const Arrows_ChevronDown: typeof ChevronDown;
78
89
  declare const Arrows_ChevronLeft: typeof ChevronLeft;
79
90
  declare const Arrows_ChevronRight: typeof ChevronRight;
91
+ declare const Arrows_ChevronRightVariant: typeof ChevronRightVariant;
80
92
  declare const Arrows_ChevronUp: typeof ChevronUp;
81
93
  declare const Arrows_ChevronUpSolid: typeof ChevronUpSolid;
82
94
  declare const Arrows_CircleUp: typeof CircleUp;
@@ -85,6 +97,7 @@ declare namespace Arrows {
85
97
  Arrows_ChevronDown as ChevronDown,
86
98
  Arrows_ChevronLeft as ChevronLeft,
87
99
  Arrows_ChevronRight as ChevronRight,
100
+ Arrows_ChevronRightVariant as ChevronRightVariant,
88
101
  Arrows_ChevronUp as ChevronUp,
89
102
  Arrows_ChevronUpSolid as ChevronUpSolid,
90
103
  Arrows_CircleUp as CircleUp,
@@ -374,9 +387,13 @@ declare type Color = {
374
387
  secondaryColor?: string;
375
388
  tertiaryColor?: string;
376
389
  };
390
+ declare type Pattern = {
391
+ url: string;
392
+ };
377
393
  declare type ColorPickerOption = {
378
394
  label: string;
379
- color: Color;
395
+ color?: Color;
396
+ pattern?: Pattern;
380
397
  };
381
398
  declare type RadioGroupOption = {
382
399
  value: string;
@@ -400,6 +417,17 @@ declare type DropdownListIconsItem = {
400
417
  declare type DropdownListIconsSubItem = {
401
418
  description: string;
402
419
  callback: () => void;
420
+ };
421
+ declare type Filter = {
422
+ title: string;
423
+ columns: number;
424
+ isOpenByDefault?: boolean;
425
+ items: Array<string>;
426
+ };
427
+ declare type FilterChange = {
428
+ sectionIndex: number;
429
+ itemIndex: number;
430
+ checked?: boolean;
403
431
  };
404
432
 
405
433
  interface ThemeProviderProps {
@@ -955,4 +983,38 @@ declare namespace index_d {
955
983
  };
956
984
  }
957
985
 
958
- export { _default as Accordion, AccordionBox, AccordionIcon, AmazonPaypalButtons_d as AmazonAndPaypalButtons, Bundle, ButtonPrimary, ButtonSecondary, ButtonSecondaryOutline, ButtonType, CTAProps, _default$1 as Card, CardSectionType, CategoryTag, Checkbox, Color, ColorPickerOption, ComponentPosition, ComponentSize, index_d as CrossSell, DeliveryDetails, DiscountTag, DropdownListIcons, DropdownListIconsItem, DropdownListIconsSubItem, DropdownOption, FitPredictor, Icon, IconButton, IconProps, IconWithOpacityProps, Image, ImageType, index_d$1 as Input, InputValidationType, MultiColorPicker, OfferBanner, OrderBar, PaymentMethod, PriceLabel, ProductGallery, ProgressBar, RadioGroupInput, RadioGroupOption, Rating, Review, ScrollToTop, SeasonOfferTag, SimpleDropdown, SimpleOrderItem, SingleColorPicker, SizeFitGuide, SizeOption, SizeSelector, SizeTable, SliderNavigation, TextButton, Theme, ThemeProvider, Timer, Tooltip, Totals, WithTestId };
986
+ interface ProductItemProps {
987
+ title: string;
988
+ image: ImageProps;
989
+ price: Pick<PriceLabelProps, 'finalPrice' | 'originalPrice' | 'color'>;
990
+ rating: Pick<RatingProps, 'rating' | 'reviews'>;
991
+ tags?: {
992
+ categoryTagText: string;
993
+ seasonOfferTagText: string;
994
+ };
995
+ alignName?: 'left' | 'center';
996
+ }
997
+
998
+ interface ProductItemSmallMobileProps extends ProductItemProps {
999
+ size: ComponentSize.Medium | ComponentSize.Small;
1000
+ }
1001
+
1002
+ declare function withProductGrid<P extends ProductItemProps>(ProductItemComponent: React.FC<P>, data: ProductItemProps[]): {
1003
+ (props: Omit<P, 'title' | 'image' | 'price' | 'rating'>): JSX.Element;
1004
+ displayName: string;
1005
+ };
1006
+
1007
+ declare const Collection: {
1008
+ ProductItemMobile: ({ title, image, price, rating, size, tags, alignName, }: ProductItemSmallMobileProps) => _emotion_react_types_jsx_namespace.EmotionJSX.Element;
1009
+ withProductGrid: typeof withProductGrid;
1010
+ };
1011
+
1012
+ interface StarListProps {
1013
+ rating: number;
1014
+ size?: ComponentSize;
1015
+ starsNumber: number;
1016
+ fill: string;
1017
+ }
1018
+ declare const StarList: ({ rating, starsNumber, fill, size, }: StarListProps) => _emotion_react_jsx_runtime.JSX.Element;
1019
+
1020
+ export { _default as Accordion, AccordionBox, AccordionIcon, AmazonPaypalButtons_d as AmazonAndPaypalButtons, Bundle, ButtonPrimary, ButtonSecondary, ButtonSecondaryOutline, ButtonType, CTAProps, _default$1 as Card, CardSectionType, CategoryTag, Checkbox, Collection, Color, ColorPickerOption, ComponentPosition, ComponentSize, index_d as CrossSell, DeliveryDetails, DiscountTag, DropdownListIcons, DropdownListIconsItem, DropdownListIconsSubItem, DropdownOption, Filter, FilterChange, FitPredictor, Icon, IconButton, IconProps, IconWithOpacityProps, Image, ImageType, index_d$1 as Input, InputValidationType, MultiColorPicker, OfferBanner, OrderBar, Pattern, PaymentMethod, PriceLabel, ProductGallery, ProgressBar, RadioGroupInput, RadioGroupOption, Rating, Review, ScrollToTop, SeasonOfferTag, SimpleDropdown, SimpleOrderItem, SingleColorPicker, SizeFitGuide, SizeOption, SizeSelector, SizeTable, SliderNavigation, StarList, TextButton, Theme, ThemeProvider, Timer, Tooltip, Totals, WithTestId };