@transferwise/components 0.0.0-experimental-5ff6475 → 0.0.0-experimental-f16de49
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.
- package/build/Calendar/Calendar.js +9 -3
- package/build/Calendar/Calendar.js.map +1 -1
- package/build/Calendar/Calendar.mjs +9 -3
- package/build/Calendar/Calendar.mjs.map +1 -1
- package/build/Carousel/Carousel.js +17 -10
- package/build/Carousel/Carousel.js.map +1 -1
- package/build/Carousel/Carousel.mjs +17 -10
- package/build/Carousel/Carousel.mjs.map +1 -1
- package/build/SegmentedControl/SegmentedControl.js +2 -9
- package/build/SegmentedControl/SegmentedControl.js.map +1 -1
- package/build/SegmentedControl/SegmentedControl.mjs +2 -9
- package/build/SegmentedControl/SegmentedControl.mjs.map +1 -1
- package/build/Tooltip/Tooltip.js +6 -1
- package/build/Tooltip/Tooltip.js.map +1 -1
- package/build/Tooltip/Tooltip.mjs +6 -1
- package/build/Tooltip/Tooltip.mjs.map +1 -1
- package/build/main.css +10 -28
- package/build/styles/AvatarLayout/AvatarLayout.css +9 -26
- package/build/styles/SegmentedControl/SegmentedControl.css +1 -2
- package/build/styles/main.css +10 -28
- package/build/types/Calendar/Calendar.d.ts.map +1 -1
- package/build/types/Carousel/Carousel.d.ts.map +1 -1
- package/build/types/Carousel/_stories/constants.d.ts +3 -0
- package/build/types/Carousel/_stories/constants.d.ts.map +1 -0
- package/build/types/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/build/types/Tooltip/Tooltip.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/AvatarLayout/AvatarLayout.css +9 -26
- package/src/AvatarLayout/AvatarLayout.less +22 -46
- package/src/AvatarLayout/_stories/AvatarLayout.test.story.tsx +42 -17
- package/src/Calendar/Calendar.test.tsx +82 -0
- package/src/Calendar/Calendar.tsx +6 -3
- package/src/Carousel/Carousel.tsx +13 -10
- package/src/Carousel/_stories/Carousel.story.tsx +12 -52
- package/src/Carousel/_stories/Carousel.test.story.tsx +7 -43
- package/src/Carousel/_stories/constants.tsx +46 -0
- package/src/DateLookup/_stories/DateLookup.rtl.test.story.tsx +48 -59
- package/src/Field/_stories/Field.test.story.tsx +37 -48
- package/src/FlowNavigation/_stories/FlowNavigation.test.story.tsx +44 -0
- package/src/Label/_stories/Label.test.story.tsx +22 -35
- package/src/Popover/_stories/Popover.rtl.test.story.tsx +50 -40
- package/src/SegmentedControl/SegmentedControl.css +1 -2
- package/src/SegmentedControl/SegmentedControl.less +2 -4
- package/src/SegmentedControl/SegmentedControl.tsx +2 -8
- package/src/SegmentedControl/_stories/SegmentedControl.test.story.tsx +8 -16
- package/src/Tooltip/Tooltip.test.tsx +51 -0
- package/src/Tooltip/Tooltip.tsx +6 -1
- package/src/Tooltip/_stories/Tooltip.rtl.test.story.tsx +16 -34
- package/src/main.css +10 -28
- package/src/FlowNavigation/_stories/FlowNavigation.rtl.test.story.tsx +0 -78
package/build/styles/main.css
CHANGED
|
@@ -20354,53 +20354,36 @@ a[data-toggle="tooltip"] {
|
|
|
20354
20354
|
block-size: var(--np-avatar-layout-size);
|
|
20355
20355
|
}
|
|
20356
20356
|
.np-avatar-layout-diagonal-mask {
|
|
20357
|
-
--np-avatar-layout-mask-direction: right;
|
|
20358
20357
|
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) right calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20359
20358
|
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) right calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20360
|
-
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) var(--np-avatar-layout-mask-direction) calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20361
|
-
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) var(--np-avatar-layout-mask-direction) calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20362
20359
|
}
|
|
20363
20360
|
[dir="rtl"] .np-avatar-layout-diagonal-mask {
|
|
20364
|
-
--np-avatar-
|
|
20365
|
-
|
|
20366
|
-
margin-inline-end: unset;
|
|
20361
|
+
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) left calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20362
|
+
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) left calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20367
20363
|
}
|
|
20368
20364
|
.np-avatar-layout-diagonal-child {
|
|
20369
20365
|
margin-inline-start: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
20370
20366
|
margin-block-start: calc(var(--np-avatar-layout-size) - var(--np-avatar-size));
|
|
20371
20367
|
}
|
|
20372
20368
|
[dir="rtl"] .np-avatar-layout-diagonal-child {
|
|
20373
|
-
-
|
|
20374
|
-
|
|
20369
|
+
margin-inline-start: 0;
|
|
20370
|
+
margin-inline-end: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
20375
20371
|
}
|
|
20376
20372
|
.np-avatar-layout-horizontal {
|
|
20377
|
-
--np-avatar-layout-mask-direction: left;
|
|
20378
20373
|
inline-size: calc(var(--np-avatar-size) * var(--np-avatar-avatars-count) - (var(--np-avatar-offset) * (var(--np-avatar-avatars-count) - 1)));
|
|
20379
20374
|
inline-size: calc(var(--np-avatar-size) * var(--np-avatar-avatars-count) - calc(var(--np-avatar-offset) * calc(var(--np-avatar-avatars-count) - 1)));
|
|
20380
20375
|
block-size: var(--np-avatar-layout-size);
|
|
20381
20376
|
}
|
|
20382
|
-
|
|
20383
|
-
--np-avatar-
|
|
20384
|
-
|
|
20385
|
-
|
|
20386
|
-
|
|
20387
|
-
-webkit-mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20388
|
-
mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20389
|
-
-webkit-mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20390
|
-
mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20391
|
-
}
|
|
20392
|
-
[dir="rtl"] .np-avatar-layout-horizontal-mask {
|
|
20393
|
-
margin-inline-end: calc(var(--np-avatar-offset) * -1);
|
|
20394
|
-
}
|
|
20395
|
-
[dir="rtl"] .np-avatar-layout-horizontal-mask:last-child {
|
|
20396
|
-
-webkit-mask-image: initial;
|
|
20397
|
-
mask-image: initial;
|
|
20377
|
+
.np-avatar-layout-horizontal-mask {
|
|
20378
|
+
-webkit-mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) left calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20379
|
+
mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) left calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20380
|
+
-webkit-mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) left calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20381
|
+
mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) left calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20398
20382
|
}
|
|
20399
20383
|
.np-avatar-layout-horizontal-child {
|
|
20400
20384
|
margin-inline-start: calc(var(--np-avatar-offset) * -1);
|
|
20401
20385
|
}
|
|
20402
20386
|
[dir="rtl"] .np-avatar-layout-horizontal-child {
|
|
20403
|
-
margin-inline-start: unset;
|
|
20404
20387
|
margin-inline-end: calc(var(--np-avatar-offset) * -1);
|
|
20405
20388
|
}
|
|
20406
20389
|
.np-icon-button {
|
|
@@ -25818,8 +25801,7 @@ button.np-link {
|
|
|
25818
25801
|
background: var(--color-background-screen);
|
|
25819
25802
|
border-radius: 24px;
|
|
25820
25803
|
border-radius: var(--size-24);
|
|
25821
|
-
transition: left 300ms
|
|
25822
|
-
right 300ms;
|
|
25804
|
+
transition: left 300ms;
|
|
25823
25805
|
}
|
|
25824
25806
|
.segmented-control__segments--no-animate::after {
|
|
25825
25807
|
transition: none !important;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/Calendar/Calendar.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/Calendar/Calendar.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAMxC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtE,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,8HAA8H;IAC9H,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,2HAA2H;IAC3H,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC;IAC/B,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uNAAuN;IACvN,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yJAAyJ;IACzJ,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAChE,sFAAsF;IACtF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAQD;;GAEG;AACH,QAAA,MAAM,QAAQ,GAAI,wGASf,aAAa,gCAqQf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../src/Carousel/Carousel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../src/Carousel/Carousel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAKxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG;IACrD,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,OAAO,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG;IACnD,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAErC,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AACnE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAUD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAqSrC,CAAC;AAYF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/Carousel/_stories/constants.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,oBAAoB,EAAE,YAAY,EAyC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../src/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../src/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"AAMA,KAAK,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,KAAK,OAAO,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAClD,KAAK,mBAAmB,GAAG,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,QAAQ,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,mBAAmB,EAAE,CAAC;AAE3E,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC1C,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,GAC3D,CAAC,yBAAyB,GAAG,0BAA0B,CAAC,CAAC;AAE3D,QAAA,MAAM,gBAAgB,GAAI,4CAMvB,qBAAqB,gCAgIvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AAQA,OAAO,EAGL,iBAAiB,EAEjB,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAY,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AAQA,OAAO,EAGL,iBAAiB,EAEjB,SAAS,EAKV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAY,MAAM,WAAW,CAAC;AAElD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACZ,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;IACvE,KAAK,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC,GACA,WAAW,CAAC;AAEd,QAAA,MAAM,OAAO,GAAI,+CAMd,YAAY,gCAiEd,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@transferwise/components",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-f16de49",
|
|
4
4
|
"description": "Neptune React components",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
"storybook": "^10.5.4",
|
|
92
92
|
"storybook-addon-tag-badges": "^3.1.0",
|
|
93
93
|
"storybook-addon-test-codegen": "^3.0.4",
|
|
94
|
-
"@transferwise/less-config": "0.0.0-experimental-
|
|
95
|
-
"@wise/
|
|
96
|
-
"@wise/
|
|
94
|
+
"@transferwise/less-config": "0.0.0-experimental-f16de49",
|
|
95
|
+
"@wise/components-theming": "1.10.3",
|
|
96
|
+
"@wise/wds-configs": "0.0.0"
|
|
97
97
|
},
|
|
98
98
|
"peerDependencies": {
|
|
99
99
|
"@transferwise/icons": "^3 || ^4",
|
|
@@ -8,52 +8,35 @@
|
|
|
8
8
|
block-size: var(--np-avatar-layout-size);
|
|
9
9
|
}
|
|
10
10
|
.np-avatar-layout-diagonal-mask {
|
|
11
|
-
--np-avatar-layout-mask-direction: right;
|
|
12
11
|
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) right calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
13
12
|
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) right calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
14
|
-
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) var(--np-avatar-layout-mask-direction) calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
15
|
-
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) var(--np-avatar-layout-mask-direction) calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
16
13
|
}
|
|
17
14
|
[dir="rtl"] .np-avatar-layout-diagonal-mask {
|
|
18
|
-
--np-avatar-
|
|
19
|
-
|
|
20
|
-
margin-inline-end: unset;
|
|
15
|
+
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) left calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
16
|
+
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) left calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
21
17
|
}
|
|
22
18
|
.np-avatar-layout-diagonal-child {
|
|
23
19
|
margin-inline-start: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
24
20
|
margin-block-start: calc(var(--np-avatar-layout-size) - var(--np-avatar-size));
|
|
25
21
|
}
|
|
26
22
|
[dir="rtl"] .np-avatar-layout-diagonal-child {
|
|
27
|
-
-
|
|
28
|
-
|
|
23
|
+
margin-inline-start: 0;
|
|
24
|
+
margin-inline-end: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
29
25
|
}
|
|
30
26
|
.np-avatar-layout-horizontal {
|
|
31
|
-
--np-avatar-layout-mask-direction: left;
|
|
32
27
|
inline-size: calc(var(--np-avatar-size) * var(--np-avatar-avatars-count) - (var(--np-avatar-offset) * (var(--np-avatar-avatars-count) - 1)));
|
|
33
28
|
inline-size: calc(var(--np-avatar-size) * var(--np-avatar-avatars-count) - calc(var(--np-avatar-offset) * calc(var(--np-avatar-avatars-count) - 1)));
|
|
34
29
|
block-size: var(--np-avatar-layout-size);
|
|
35
30
|
}
|
|
36
|
-
|
|
37
|
-
--np-avatar-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-webkit-mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
42
|
-
mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
43
|
-
-webkit-mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
44
|
-
mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
45
|
-
}
|
|
46
|
-
[dir="rtl"] .np-avatar-layout-horizontal-mask {
|
|
47
|
-
margin-inline-end: calc(var(--np-avatar-offset) * -1);
|
|
48
|
-
}
|
|
49
|
-
[dir="rtl"] .np-avatar-layout-horizontal-mask:last-child {
|
|
50
|
-
-webkit-mask-image: initial;
|
|
51
|
-
mask-image: initial;
|
|
31
|
+
.np-avatar-layout-horizontal-mask {
|
|
32
|
+
-webkit-mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) left calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
33
|
+
mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) left calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
34
|
+
-webkit-mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) left calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
35
|
+
mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) left calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
52
36
|
}
|
|
53
37
|
.np-avatar-layout-horizontal-child {
|
|
54
38
|
margin-inline-start: calc(var(--np-avatar-offset) * -1);
|
|
55
39
|
}
|
|
56
40
|
[dir="rtl"] .np-avatar-layout-horizontal-child {
|
|
57
|
-
margin-inline-start: unset;
|
|
58
41
|
margin-inline-end: calc(var(--np-avatar-offset) * -1);
|
|
59
42
|
}
|
|
@@ -8,20 +8,18 @@
|
|
|
8
8
|
height: var(--np-avatar-layout-size);
|
|
9
9
|
|
|
10
10
|
&-mask {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var(--np-avatar-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
margin-left: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
24
|
-
margin-right: unset;
|
|
11
|
+
mask-image:
|
|
12
|
+
radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) right calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)),
|
|
13
|
+
transparent 0,
|
|
14
|
+
transparent calc(var(--np-avatar-size) / 2 + 2px),
|
|
15
|
+
black 0);
|
|
16
|
+
|
|
17
|
+
:dir(rtl) & {
|
|
18
|
+
mask-image:
|
|
19
|
+
radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) left calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)),
|
|
20
|
+
transparent 0,
|
|
21
|
+
transparent calc(var(--np-avatar-size) / 2 + 2px),
|
|
22
|
+
black 0);
|
|
25
23
|
}
|
|
26
24
|
}
|
|
27
25
|
|
|
@@ -29,52 +27,30 @@
|
|
|
29
27
|
margin-left: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
30
28
|
margin-top: calc(var(--np-avatar-layout-size) - var(--np-avatar-size));
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
:dir(rtl) & {
|
|
31
|
+
margin-left: 0;
|
|
32
|
+
margin-right: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
&-horizontal {
|
|
39
|
-
--np-avatar-
|
|
40
|
-
width: calc(
|
|
41
|
-
var(--np-avatar-size) * var(--np-avatar-avatars-count) -
|
|
42
|
-
calc(var(--np-avatar-offset) * calc(var(--np-avatar-avatars-count) - 1))
|
|
43
|
-
);
|
|
38
|
+
width: calc(var(--np-avatar-size) * var(--np-avatar-avatars-count) - calc(var(--np-avatar-offset) * calc(var(--np-avatar-avatars-count) - 1)));
|
|
44
39
|
height: var(--np-avatar-layout-size);
|
|
45
40
|
|
|
46
|
-
[dir="rtl"] & {
|
|
47
|
-
--np-avatar-layout-mask-direction: right;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
&-mask,
|
|
51
|
-
[dir="rtl"] &-child {
|
|
52
|
-
mask-image: radial-gradient(
|
|
53
|
-
circle at top calc(100% - calc(var(--np-avatar-size) / 2))
|
|
54
|
-
var(--np-avatar-layout-mask-direction)
|
|
55
|
-
calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)),
|
|
56
|
-
transparent,
|
|
57
|
-
transparent calc(var(--np-avatar-size) / 2 + 2px),
|
|
58
|
-
black 0
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
41
|
&-mask {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
margin-right: calc(var(--np-avatar-offset) * -1);
|
|
68
|
-
}
|
|
42
|
+
mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) left calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)),
|
|
43
|
+
transparent,
|
|
44
|
+
transparent calc(var(--np-avatar-size) / 2 + 2px),
|
|
45
|
+
black 0);
|
|
69
46
|
}
|
|
70
47
|
|
|
71
48
|
&-child {
|
|
72
49
|
margin-left: calc(var(--np-avatar-offset) * -1);
|
|
73
50
|
|
|
74
|
-
|
|
75
|
-
margin-left: unset;
|
|
51
|
+
:dir(rtl) & {
|
|
76
52
|
margin-right: calc(var(--np-avatar-offset) * -1);
|
|
77
53
|
}
|
|
78
54
|
}
|
|
79
55
|
}
|
|
80
|
-
}
|
|
56
|
+
}
|
|
@@ -117,26 +117,27 @@ export const EdgeInstances: Story = {
|
|
|
117
117
|
),
|
|
118
118
|
};
|
|
119
119
|
|
|
120
|
-
const horizontalSizes = [16, 24, 32, 40, 48, 56, 72, 88, 96] as const;
|
|
121
|
-
const diagonalSizes = [24, 32, 40, 48, 56, 72, 88, 96] as const;
|
|
122
|
-
|
|
123
|
-
const rowStyle = { display: 'flex', alignItems: 'center', gap: '16px', flexWrap: 'wrap' } as const;
|
|
124
|
-
const twoAvatars = [{ asset: <Plane /> }, { asset: <Plane /> }] as const;
|
|
125
|
-
|
|
126
120
|
export const RTLDiff: Story = {
|
|
127
121
|
render: () => (
|
|
128
122
|
<>
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
123
|
+
<AvatarLayout
|
|
124
|
+
orientation="horizontal"
|
|
125
|
+
size={48}
|
|
126
|
+
avatars={[{ asset: <Flag code="br" /> }, { asset: <Flag code="jp" /> }]}
|
|
127
|
+
/>
|
|
128
|
+
|
|
129
|
+
<AvatarLayout
|
|
130
|
+
orientation="horizontal"
|
|
131
|
+
size={48}
|
|
132
|
+
interactive
|
|
133
|
+
avatars={[{ asset: <Freeze /> }, { asset: <Freeze /> }]}
|
|
134
|
+
/>
|
|
134
135
|
|
|
135
|
-
<
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
<AvatarLayout
|
|
137
|
+
orientation="horizontal"
|
|
138
|
+
size={48}
|
|
139
|
+
avatars={[{ profileName: 'Jay Jay' }, { profileName: 'Amy Amy' }]}
|
|
140
|
+
/>
|
|
140
141
|
|
|
141
142
|
<AvatarLayout
|
|
142
143
|
orientation="horizontal"
|
|
@@ -147,8 +148,32 @@ export const RTLDiff: Story = {
|
|
|
147
148
|
|
|
148
149
|
<AvatarLayout
|
|
149
150
|
orientation="horizontal"
|
|
151
|
+
size={32}
|
|
152
|
+
avatars={[{ asset: <Flag code="eu" /> }, { asset: <Flag code="gb" /> }]}
|
|
153
|
+
/>
|
|
154
|
+
|
|
155
|
+
<AvatarLayout
|
|
156
|
+
orientation="horizontal"
|
|
157
|
+
size={72}
|
|
158
|
+
avatars={[{ asset: <Freeze /> }, { asset: <Freeze /> }, { asset: <Freeze /> }]}
|
|
159
|
+
/>
|
|
160
|
+
|
|
161
|
+
<AvatarLayout
|
|
162
|
+
orientation="diagonal"
|
|
163
|
+
size={48}
|
|
164
|
+
avatars={[{ asset: <Flag code="br" /> }, { asset: <Flag code="jp" /> }]}
|
|
165
|
+
/>
|
|
166
|
+
|
|
167
|
+
<AvatarLayout
|
|
168
|
+
orientation="diagonal"
|
|
169
|
+
size={48}
|
|
170
|
+
avatars={[{ profileName: 'Jay Jay' }, { profileName: 'Amy Amy' }]}
|
|
171
|
+
/>
|
|
172
|
+
|
|
173
|
+
<AvatarLayout
|
|
174
|
+
orientation="diagonal"
|
|
150
175
|
size={72}
|
|
151
|
-
avatars={[{ asset: <
|
|
176
|
+
avatars={[{ asset: <Freeze /> }, { asset: <Freeze /> }]}
|
|
152
177
|
/>
|
|
153
178
|
</>
|
|
154
179
|
),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { fireEvent, mockMatchMedia, render, screen, userEvent } from '../test-utils';
|
|
2
|
+
import { DirectionProvider } from '../Provider/Direction/DirectionProvider';
|
|
2
3
|
import Calendar from './Calendar';
|
|
3
4
|
import type { DisabledRules } from './Calendar.types';
|
|
4
5
|
|
|
@@ -445,4 +446,85 @@ describe('Calendar', () => {
|
|
|
445
446
|
expect(handleChange).not.toHaveBeenCalled();
|
|
446
447
|
});
|
|
447
448
|
});
|
|
449
|
+
|
|
450
|
+
describe('RTL keyboard navigation', () => {
|
|
451
|
+
describe('in day view', () => {
|
|
452
|
+
it.each([
|
|
453
|
+
['{ArrowLeft}', +1],
|
|
454
|
+
['{ArrowRight}', -1],
|
|
455
|
+
['{ArrowUp}', -7],
|
|
456
|
+
['{ArrowDown}', +7],
|
|
457
|
+
])(
|
|
458
|
+
"handles '%s' to step %d day(s) — horizontal arrows are reversed",
|
|
459
|
+
async (text: string, step: number) => {
|
|
460
|
+
const handleDateFocus = jest.fn();
|
|
461
|
+
render(
|
|
462
|
+
<DirectionProvider direction="rtl">
|
|
463
|
+
<Calendar value={initialValue} onDateFocus={handleDateFocus} />
|
|
464
|
+
</DirectionProvider>,
|
|
465
|
+
);
|
|
466
|
+
|
|
467
|
+
await user.click(screen.getByRole('button', { name: /selected day/iu }));
|
|
468
|
+
await user.keyboard(text);
|
|
469
|
+
|
|
470
|
+
const expected = new Date(initialValue);
|
|
471
|
+
expected.setDate(initialValue.getDate() + step);
|
|
472
|
+
expect(handleDateFocus).toHaveBeenCalledWith(expected, { isEnabled: true });
|
|
473
|
+
},
|
|
474
|
+
);
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
describe('in year view', () => {
|
|
478
|
+
it.each([
|
|
479
|
+
['{ArrowLeft}', +1],
|
|
480
|
+
['{ArrowRight}', -1],
|
|
481
|
+
['{ArrowUp}', -4],
|
|
482
|
+
['{ArrowDown}', +4],
|
|
483
|
+
])(
|
|
484
|
+
"handles '%s' to step %d year(s) — horizontal arrows are reversed",
|
|
485
|
+
async (text: string, step: number) => {
|
|
486
|
+
const handleDateFocus = jest.fn();
|
|
487
|
+
render(
|
|
488
|
+
<DirectionProvider direction="rtl">
|
|
489
|
+
<Calendar value={initialValue} onDateFocus={handleDateFocus} />
|
|
490
|
+
</DirectionProvider>,
|
|
491
|
+
);
|
|
492
|
+
|
|
493
|
+
await user.click(screen.getByRole('button', { name: /year view/iu }));
|
|
494
|
+
await user.keyboard(text);
|
|
495
|
+
|
|
496
|
+
const expected = new Date(initialValue);
|
|
497
|
+
expected.setFullYear(initialValue.getFullYear() + step);
|
|
498
|
+
expect(handleDateFocus).toHaveBeenCalledWith(expected, { isEnabled: true });
|
|
499
|
+
},
|
|
500
|
+
);
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
describe('in month view', () => {
|
|
504
|
+
it.each([
|
|
505
|
+
['{ArrowLeft}', +1],
|
|
506
|
+
['{ArrowRight}', -1],
|
|
507
|
+
['{ArrowUp}', -4],
|
|
508
|
+
['{ArrowDown}', +4],
|
|
509
|
+
])(
|
|
510
|
+
"handles '%s' to step %d month(s) — horizontal arrows are reversed",
|
|
511
|
+
async (text: string, step: number) => {
|
|
512
|
+
const handleDateFocus = jest.fn();
|
|
513
|
+
render(
|
|
514
|
+
<DirectionProvider direction="rtl">
|
|
515
|
+
<Calendar value={initialValue} onDateFocus={handleDateFocus} />
|
|
516
|
+
</DirectionProvider>,
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
await user.click(screen.getByRole('button', { name: /year view/iu }));
|
|
520
|
+
await user.keyboard(' ');
|
|
521
|
+
await user.keyboard(text);
|
|
522
|
+
|
|
523
|
+
const expected = new Date(initialValue);
|
|
524
|
+
expected.setMonth(initialValue.getMonth() + step);
|
|
525
|
+
expect(handleDateFocus).toHaveBeenCalledWith(expected, { isEnabled: true });
|
|
526
|
+
},
|
|
527
|
+
);
|
|
528
|
+
});
|
|
529
|
+
});
|
|
448
530
|
});
|
|
@@ -3,6 +3,7 @@ import { useIntl } from 'react-intl';
|
|
|
3
3
|
import { formatDate } from '@transferwise/formatting';
|
|
4
4
|
|
|
5
5
|
import { MonthFormat } from '../common';
|
|
6
|
+
import { useDirection } from '../common/hooks';
|
|
6
7
|
import { isWithinRange, moveToWithinRange, returnDateView } from '../common/DateUtils';
|
|
7
8
|
import { clampToDayViewBoundary, isDateDisabled, hasDisabledDatesInMonth } from './_helpers';
|
|
8
9
|
import { LONG_DAY_FORMAT } from './Calendar.constants';
|
|
@@ -53,6 +54,7 @@ const Calendar = ({
|
|
|
53
54
|
onChange,
|
|
54
55
|
}: CalendarProps) => {
|
|
55
56
|
const intl = useIntl();
|
|
57
|
+
const { isRTL } = useDirection();
|
|
56
58
|
const selectedDate = getStartOfDay(value);
|
|
57
59
|
const min = getStartOfDay(minProp);
|
|
58
60
|
const max = getStartOfDay(maxProp);
|
|
@@ -185,9 +187,10 @@ const Calendar = ({
|
|
|
185
187
|
|
|
186
188
|
const handleKeyDown = useCallback(
|
|
187
189
|
(event: KeyboardEvent<HTMLDivElement>) => {
|
|
190
|
+
const orientationSign = isRTL ? -1 : 1;
|
|
188
191
|
switch (event.key) {
|
|
189
192
|
case 'ArrowLeft':
|
|
190
|
-
adjustDate(-1, -1, -1);
|
|
193
|
+
adjustDate(-1 * orientationSign, -1 * orientationSign, -1 * orientationSign);
|
|
191
194
|
event.preventDefault();
|
|
192
195
|
break;
|
|
193
196
|
case 'ArrowUp':
|
|
@@ -195,7 +198,7 @@ const Calendar = ({
|
|
|
195
198
|
event.preventDefault();
|
|
196
199
|
break;
|
|
197
200
|
case 'ArrowRight':
|
|
198
|
-
adjustDate(1, 1, 1);
|
|
201
|
+
adjustDate(1 * orientationSign, 1 * orientationSign, 1 * orientationSign);
|
|
199
202
|
event.preventDefault();
|
|
200
203
|
break;
|
|
201
204
|
case 'ArrowDown':
|
|
@@ -217,7 +220,7 @@ const Calendar = ({
|
|
|
217
220
|
break;
|
|
218
221
|
}
|
|
219
222
|
},
|
|
220
|
-
[adjustDate, focusedDate, mode, handleSelectedDateUpdate],
|
|
223
|
+
[adjustDate, focusedDate, mode, handleSelectedDateUpdate, isRTL],
|
|
221
224
|
);
|
|
222
225
|
|
|
223
226
|
const focusedDateOutOfRange = focusedDate ? !isWithinRange(focusedDate, min, max) : false;
|
|
@@ -2,6 +2,7 @@ import { ChevronLeft, ChevronRight } from '@transferwise/icons';
|
|
|
2
2
|
import { clsx } from 'clsx';
|
|
3
3
|
import { type CSSProperties, type ReactNode, useEffect, useRef, useState } from 'react';
|
|
4
4
|
|
|
5
|
+
import { useDirection } from '../common/hooks';
|
|
5
6
|
import IconButton from '../IconButton';
|
|
6
7
|
import Title from '../Title';
|
|
7
8
|
import type { PromoCardLinkProps } from '../PromoCard/PromoCard';
|
|
@@ -48,10 +49,11 @@ const Carousel: React.FC<CarouselProps> = ({ header, className, cards, onClick }
|
|
|
48
49
|
const [visibleCardOnMobileView, setVisibleCardOnMobileView] = useState<string>('');
|
|
49
50
|
const carouselElementRef = useRef<HTMLDivElement>(null);
|
|
50
51
|
const carouselCardsRef = useRef<CardsReference[]>([]);
|
|
52
|
+
const { isRTL } = useDirection();
|
|
51
53
|
|
|
52
|
-
const
|
|
54
|
+
const isPrevButtonEnabled = scrollPosition > LEFT_SCROLL_OFFSET;
|
|
53
55
|
|
|
54
|
-
const areActionButtonsEnabled =
|
|
56
|
+
const areActionButtonsEnabled = isPrevButtonEnabled || !scrollIsAtEnd;
|
|
55
57
|
|
|
56
58
|
const [focusedCard, setFocusedCard] = useState(cards?.[0]?.id);
|
|
57
59
|
|
|
@@ -83,16 +85,17 @@ const Carousel: React.FC<CarouselProps> = ({ header, className, cards, onClick }
|
|
|
83
85
|
setPreviousScrollPosition(scrollPosition);
|
|
84
86
|
};
|
|
85
87
|
|
|
86
|
-
const scrollCarousel = (direction: '
|
|
88
|
+
const scrollCarousel = (direction: 'forward' | 'backward') => {
|
|
87
89
|
if (carouselElementRef.current) {
|
|
88
90
|
const { scrollWidth } = carouselElementRef.current;
|
|
89
91
|
|
|
90
92
|
const cardWidth = scrollWidth / carouselCardsRef.current.length;
|
|
91
93
|
|
|
92
|
-
const
|
|
94
|
+
const distance = Math.floor(cardWidth - cardWidth * 0.05);
|
|
95
|
+
const sign = direction === 'forward' ? 1 : -1;
|
|
93
96
|
|
|
94
97
|
carouselElementRef.current.scrollBy({
|
|
95
|
-
left:
|
|
98
|
+
left: isRTL ? -sign * distance : sign * distance,
|
|
96
99
|
behavior: 'smooth',
|
|
97
100
|
});
|
|
98
101
|
}
|
|
@@ -174,10 +177,10 @@ const Carousel: React.FC<CarouselProps> = ({ header, className, cards, onClick }
|
|
|
174
177
|
size={32}
|
|
175
178
|
tabIndex={-1}
|
|
176
179
|
priority="tertiary"
|
|
177
|
-
disabled={!
|
|
180
|
+
disabled={!isPrevButtonEnabled}
|
|
178
181
|
aria-hidden="true"
|
|
179
182
|
data-testid="scroll-carousel-left"
|
|
180
|
-
onClick={() => scrollCarousel('
|
|
183
|
+
onClick={() => scrollCarousel('backward')}
|
|
181
184
|
>
|
|
182
185
|
<ChevronLeft />
|
|
183
186
|
</IconButton>
|
|
@@ -189,7 +192,7 @@ const Carousel: React.FC<CarouselProps> = ({ header, className, cards, onClick }
|
|
|
189
192
|
aria-hidden="true"
|
|
190
193
|
data-testid="scroll-carousel-right"
|
|
191
194
|
disabled={scrollIsAtEnd}
|
|
192
|
-
onClick={() => scrollCarousel()}
|
|
195
|
+
onClick={() => scrollCarousel('forward')}
|
|
193
196
|
>
|
|
194
197
|
<ChevronRight />
|
|
195
198
|
</IconButton>
|
|
@@ -203,7 +206,7 @@ const Carousel: React.FC<CarouselProps> = ({ header, className, cards, onClick }
|
|
|
203
206
|
className="carousel"
|
|
204
207
|
onScroll={(event) => {
|
|
205
208
|
const target = event.target as HTMLElement;
|
|
206
|
-
setScrollPosition(target.scrollLeft);
|
|
209
|
+
setScrollPosition(Math.abs(target.scrollLeft));
|
|
207
210
|
}}
|
|
208
211
|
>
|
|
209
212
|
{cards?.map((card, index) => {
|
|
@@ -336,7 +339,7 @@ const Carousel: React.FC<CarouselProps> = ({ header, className, cards, onClick }
|
|
|
336
339
|
|
|
337
340
|
const isVisible = (container: HTMLElement, el: HTMLElement) => {
|
|
338
341
|
const cWidth = container.offsetWidth;
|
|
339
|
-
const cScrollOffset = container.scrollLeft;
|
|
342
|
+
const cScrollOffset = Math.abs(container.scrollLeft);
|
|
340
343
|
|
|
341
344
|
const elemLeft = el.offsetLeft - container.offsetLeft;
|
|
342
345
|
const elemRight = elemLeft + el.offsetWidth;
|