From 317dff6302bf2bb5616987127fea96b27c524223 Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Thu, 21 Nov 2024 17:20:33 +0100 Subject: [PATCH 01/18] chore: Initial commit --- pages/carousel/basic.page.tsx | 44 +++++++++++++ src/carousel/index.tsx | 23 +++++++ src/carousel/interfaces.tsx | 24 ++++++++ src/carousel/internal.tsx | 113 ++++++++++++++++++++++++++++++++++ src/carousel/styles.scss | 52 ++++++++++++++++ 5 files changed, 256 insertions(+) create mode 100644 pages/carousel/basic.page.tsx create mode 100644 src/carousel/index.tsx create mode 100644 src/carousel/interfaces.tsx create mode 100644 src/carousel/internal.tsx create mode 100644 src/carousel/styles.scss diff --git a/pages/carousel/basic.page.tsx b/pages/carousel/basic.page.tsx new file mode 100644 index 0000000000..8155e05e0b --- /dev/null +++ b/pages/carousel/basic.page.tsx @@ -0,0 +1,44 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import React from 'react'; + +import Button from '~components/button'; +import Carousel from '~components/carousel/index'; +import Link from '~components/link'; + +export default function () { + return ( + <> +

Basic Carousel

+ + + Amazon Aurora MySQL zero-ETL integration with Amazon Redshift +
+ Test link +
+

Some text

+ +

Some more text

+ + ), + backgroundStyle: + 'linear-gradient(135deg, rgb(71, 17, 118) 3%, rgb(131, 57, 157) 44%, rgb(149, 85, 182) 69%, rgb(145, 134, 215) 94%)', + }, + { + content:
2. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, + }, + { + content:
3. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, + }, + ]} + /> + + ); +} diff --git a/src/carousel/index.tsx b/src/carousel/index.tsx new file mode 100644 index 0000000000..c699b9662c --- /dev/null +++ b/src/carousel/index.tsx @@ -0,0 +1,23 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import React from 'react'; + +import { getBaseProps } from '../internal/base-component'; +import useBaseComponent from '../internal/hooks/use-base-component'; +import { applyDisplayName } from '../internal/utils/apply-display-name'; +import { getExternalProps } from '../internal/utils/external-props'; +import { CarouselProps } from './interfaces'; +import InternalCarousel from './internal'; + +export { CarouselProps }; + +const Carousel = ({ variant = 'single', ...props }: CarouselProps) => { + const baseProps = getBaseProps(props); + const baseComponentProps = useBaseComponent('Steps'); + const externalProps = getExternalProps(props); + + return ; +}; + +applyDisplayName(Carousel, 'Carousel'); +export default Carousel; diff --git a/src/carousel/interfaces.tsx b/src/carousel/interfaces.tsx new file mode 100644 index 0000000000..b31a9551dd --- /dev/null +++ b/src/carousel/interfaces.tsx @@ -0,0 +1,24 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import { BaseComponentProps } from '../internal/base-component'; + +export interface CarouselProps extends BaseComponentProps { + variant?: CarouselProps.Variant; + + items: ReadonlyArray; + + height?: number; + + ariaLabel: string; + ariaLabelNext: string; + ariaLabelPrevious: string; +} + +export namespace CarouselProps { + export type Variant = 'single' | 'multiple'; + + export interface Item { + content: React.ReactNode; + backgroundStyle?: string | ((mode: 'light' | 'dark') => string); + } +} diff --git a/src/carousel/internal.tsx b/src/carousel/internal.tsx new file mode 100644 index 0000000000..c00b6714f1 --- /dev/null +++ b/src/carousel/internal.tsx @@ -0,0 +1,113 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import React, { useRef, useState } from 'react'; +import clsx from 'clsx'; + +import { useCurrentMode } from '@cloudscape-design/component-toolkit/internal'; + +import Button from '../button/internal'; +import { InternalBaseComponentProps } from '../internal/hooks/use-base-component'; +import { useMergeRefs } from '../internal/hooks/use-merge-refs'; +import { KeyCode } from '../internal/keycode'; +import SpaceBetween from '../space-between/internal'; +import { CarouselProps } from './interfaces'; + +import styles from './styles.css.js'; + +export interface InternalCarouselProps extends CarouselProps, InternalBaseComponentProps {} + +export const InternalCarousel = ({ + __internalRootRef, + items, + // variant, + height, + ariaLabel, + ariaLabelNext, + ariaLabelPrevious, + ...props +}: InternalCarouselProps) => { + const carouselWrapperRef = useRef(null); + const [activeItem, setActiveItem] = useState(0); + const mainRef = useRef(null); + const mode = useCurrentMode(mainRef); + const mergedRef = useMergeRefs(mainRef, __internalRootRef); + + const goPrev = () => { + if (activeItem === 0) { + setActiveItem(items.length - 1); + } else { + setActiveItem((activeItem - 1) % items.length); + } + }; + + const goNext = () => setActiveItem((activeItem + 1) % items.length); + + const onKeyDown = (event: React.KeyboardEvent) => { + if (!carouselWrapperRef.current) { + return; + } + + const allItems = Array.from(carouselWrapperRef.current.querySelectorAll('li')); + + let newActiveItem: HTMLLIElement | null = null; + + if (event.keyCode === KeyCode.left) { + if (activeItem === 0) { + newActiveItem = allItems[items.length - 1]; + } else { + newActiveItem = allItems[activeItem - 1]; + } + goPrev(); + } else if (event.keyCode === KeyCode.right) { + newActiveItem = allItems[(activeItem + 1) % items.length]; + goNext(); + } + + requestAnimationFrame(() => { + newActiveItem?.focus(); + }); + }; + + return ( +
+
    + {items.map(({ content, backgroundStyle }, index) => { + const isActiveItem = activeItem === index; + + return ( +
  • +
    {content}
    +
  • + ); + })} +
+ +
+ +
+
+ ); +}; + +export default InternalCarousel; diff --git a/src/carousel/styles.scss b/src/carousel/styles.scss new file mode 100644 index 0000000000..85dedc3509 --- /dev/null +++ b/src/carousel/styles.scss @@ -0,0 +1,52 @@ +/* + Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + SPDX-License-Identifier: Apache-2.0 +*/ + +@use '../internal/styles/tokens' as awsui; +@use '../internal/styles' as styles; +@use '@cloudscape-design/component-toolkit/internal/focus-visible' as focus-visible; + +.root { + @include styles.styles-reset; +} + +.hide { + opacity: 0; + visibility: none; + display: none; +} + +.content-wrapper { + padding-block: 30px; + padding-inline: 30px; +} + +.pagination { + display: flex; + justify-content: center; + align-items: center; + flex-direction: row; +} + +.carousel-wrapper { + list-style-type: none; + padding-inline-start: 0; +} + +.carousel-item { + block-size: 100%; + margin-inline: 20px; + + border-start-start-radius: 16px; + border-start-end-radius: 16px; + border-end-start-radius: 16px; + border-end-end-radius: 16px; + + &:focus { + outline: none; + } + @include focus-visible.when-visible { + @include styles.focus-highlight(awsui.$space-button-focus-outline-gutter); + } +} From 5aa85453a50d3f3b25e5858872bb6eb556cae004 Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Thu, 21 Nov 2024 17:41:01 +0100 Subject: [PATCH 02/18] chore: Intro variant --- pages/carousel/basic.page.tsx | 64 ++++++++++++++++++++++++++++++++++- src/carousel/interfaces.tsx | 3 ++ src/carousel/internal.tsx | 5 +-- src/carousel/styles.scss | 14 ++++---- 4 files changed, 77 insertions(+), 9 deletions(-) diff --git a/pages/carousel/basic.page.tsx b/pages/carousel/basic.page.tsx index 8155e05e0b..5a0d7d943e 100644 --- a/pages/carousel/basic.page.tsx +++ b/pages/carousel/basic.page.tsx @@ -15,6 +15,8 @@ export default function () { ariaLabel="Test carousel" ariaLabelNext="Next item" ariaLabelPrevious="Previous item" + variant="multiple" + visibleItemNumber={3} items={[ { content: ( @@ -32,7 +34,67 @@ export default function () { 'linear-gradient(135deg, rgb(71, 17, 118) 3%, rgb(131, 57, 157) 44%, rgb(149, 85, 182) 69%, rgb(145, 134, 215) 94%)', }, { - content:
2. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, + content: ( +
+ Amazon Aurora MySQL zero-ETL integration with Amazon Redshift +
+ Test link +
+

Some text

+ +

Some more text

+
+ ), + backgroundStyle: + 'linear-gradient(135deg, rgb(71, 17, 118) 3%, rgb(131, 57, 157) 44%, rgb(149, 85, 182) 69%, rgb(145, 134, 215) 94%)', + }, + { + content: ( +
+ Amazon Aurora MySQL zero-ETL integration with Amazon Redshift +
+ Test link +
+

Some text

+ +

Some more text

+
+ ), + backgroundStyle: + 'linear-gradient(135deg, rgb(71, 17, 118) 3%, rgb(131, 57, 157) 44%, rgb(149, 85, 182) 69%, rgb(145, 134, 215) 94%)', + }, + { + content: ( +
+ Amazon Aurora MySQL zero-ETL integration with Amazon Redshift +
+ Test link +
+

Some text

+ +

Some more text

+
+ ), + backgroundStyle: + 'linear-gradient(135deg, rgb(71, 17, 118) 3%, rgb(131, 57, 157) 44%, rgb(149, 85, 182) 69%, rgb(145, 134, 215) 94%)', + }, + { + content: ( +
+ Amazon Aurora MySQL zero-ETL integration with Amazon Redshift +
+ Test link +
+

Some text

+ +

Some more text

+
+ ), + backgroundStyle: + 'linear-gradient(135deg, rgb(71, 17, 118) 3%, rgb(131, 57, 157) 44%, rgb(149, 85, 182) 69%, rgb(145, 134, 215) 94%)', + }, + { + content:
3. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, }, { content:
3. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, diff --git a/src/carousel/interfaces.tsx b/src/carousel/interfaces.tsx index b31a9551dd..b47113934a 100644 --- a/src/carousel/interfaces.tsx +++ b/src/carousel/interfaces.tsx @@ -9,6 +9,9 @@ export interface CarouselProps extends BaseComponentProps { height?: number; + // Only applicable with multiple variant + visibleItemNumber?: number; + ariaLabel: string; ariaLabelNext: string; ariaLabelPrevious: string; diff --git a/src/carousel/internal.tsx b/src/carousel/internal.tsx index c00b6714f1..4c69c4cb35 100644 --- a/src/carousel/internal.tsx +++ b/src/carousel/internal.tsx @@ -19,7 +19,8 @@ export interface InternalCarouselProps extends CarouselProps, InternalBaseCompon export const InternalCarousel = ({ __internalRootRef, items, - // variant, + variant, + // visibleItemNumber, height, ariaLabel, ariaLabelNext, @@ -72,7 +73,7 @@ export const InternalCarousel = ({
diff --git a/pages/carousel/custom-height.page.tsx b/pages/carousel/custom-height.page.tsx index d887ee4031..4217fdb757 100644 --- a/pages/carousel/custom-height.page.tsx +++ b/pages/carousel/custom-height.page.tsx @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 import React from 'react'; -import Button from '~components/button'; import Carousel from '~components/carousel/index'; -import Link from '~components/link'; + +import { generateCarousels } from './utils'; export default function () { return ( @@ -22,101 +22,7 @@ export default function () { ariaLabelPrevious="Previous item" variant="single" visibleItemNumber={2} - items={[ - { - content: ( -
- AWS Lambda Function Development -
- Learn more -
-

Build serverless applications

- -

Deploy in minutes

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(0, 76, 153) 0%, rgb(0, 119, 204) 50%, rgb(51, 153, 255) 100%)', - }, - { - content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon S3 Storage Solutions -
- Explore features -
-

Scalable cloud storage

- -

Secure and durable

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(153, 51, 0) 0%, rgb(204, 85, 0) 50%, rgb(255, 128, 0) 100%)', - }, - { - content: ( -
- Amazon EC2 Computing -
- View pricing -
-

Virtual servers in the cloud

- -

Flexible compute capacity

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(0, 102, 51) 0%, rgb(0, 153, 76) 50%, rgb(51, 204, 102) 100%)', - }, - { - content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon DynamoDB -
- Test link - Documentation -
-

Some text

- -

Some more text

-

Managed NoSQL database

- -

Millisecond latency

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(102, 0, 102) 0%, rgb(153, 51, 153) 50%, rgb(204, 102, 204) 100%)', - }, - { - content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon CloudFront CDN -
- Test link - Features -
-

Some text

- -

Some more text

-

Global content delivery

- -

Low latency access

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(51, 51, 51) 0%, rgb(102, 102, 102) 50%, rgb(153, 153, 153) 100%)', - }, - { - content:
3. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, - backgroundStyle: - 'linear-gradient(135deg, rgb(0, 51, 102) 0%, rgb(0, 102, 153) 50%, rgb(51, 153, 204) 100%)', - }, - { - content:
3. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, - backgroundStyle: - 'linear-gradient(135deg, rgb(102, 51, 0) 0%, rgb(153, 102, 0) 50%, rgb(204, 153, 0) 100%)', - }, - ]} + items={generateCarousels()} /> diff --git a/pages/carousel/pexels-codioful-7130560.jpg b/pages/carousel/pexels-codioful-7130560.jpg new file mode 100644 index 0000000000000000000000000000000000000000..baca6cb36d6c81c9253f27f5e87ae4badbb1b9a5 GIT binary patch literal 186056 zcmbTf3t${qbvJ%zJY%nB<7Bm2Er|)qNU@UDW*uHhaCnY3Qjk}nSuN|ZPI;^yi^PG1 zkO$#axKgDc%d|M|TD(#i37N=t8rEtOAf|3_d9oH zB{_kw|L@qEIrrRi@7#Otx#ynynAs=3@x)^)Rl0P`rOL7`HH3faiGMz+w&jvbUQ@1I ze(9FW29;$gb<)sfyRLtOol@$$>u+-huPNlD)K@kQm3@Di{=dRHue#yJo0YQ4;C}AT(VMOUJ^}pox88gM z>5l`??06k<+aZ1<3JCl(;#V8IAUp;Si0{1a`kmlmnQz#6-A>}ifls~ZmQmnqE(3ns zn|6)f3j9&v8()9Rb-RH73V7za(d{=W<(x$N&7)Uc1N>RQPr9*MxdiwNl}em+^$L8) z3jF5LH=~?NUGjz--g4uvtFO7)&t28$Kl|c~H~T}Qx4wS#=9@Q_w_o+T?Kkf9FL}dt zH*CNDElQa>GnGnHwmyV>(X%hU=%P)}IUnM0!yk-nbNyk2ZEHAwHX?0iWxu#gTTZ)7 zd&8Vkn|}`3>|Lhqc)wB~pH%9!Z!Xg|hDx0>q11g}T2Y@Y_2rtIZ@%IA&wS>sx88dG zuFa(H;q`C0Tfzx ziT|Gyt|-=uauh0~uN}Q{^m;t%3TWA`>#s(0U%zwL&AZ-ky}#@F-`B$bkI7b)fvC}I zAg9j%PGw$mzDj*5qt^V}7nO5rQmuLAhY(}6+wHQBD-?U)E6)19(R<*Cm+PvF{T>AE zn|598lYB{~>R)xsjc+23KEaEtJavl7sMFP%>TH!$o78jE^VADepaxY*U9PHXn|ign zN?oI_Q#Yzx)!WsWx=rm-d)0pR0rg=uuMVoa)uQ^i`jk4VKC2#7538@LZ>h)B_tcNo zoTiiZL{ju)zYRG zv(`cDi1kV9sPzTw5$hkU?^r*y{?q!ky~aMt&e+ee&#|9rZ?^mGVY_O-%D&ouqy1KU z!v1snefFGvmwlgo)PB(Zs{NS#WBcc8)SBd)?3(U1o7QYzbIF>^*Ic>gwQFu%^Nuys zYi8EWt+{*6{cAqA<|}I+Tl14O|Lv@GPIY`|lk);+$l2;#<-E~(hx2ad1I~hTpL5*# zit`=kap!mLdiM^U3cd|NEr$ zN%@m5Iq8)r-Ez{OpLFL*t&{%Yq@S%{zy6%{!TKxL-@N|M*B@N}nf3p){#PfTdh+=v zZ#jAA$?rV*gD2m2@|REk_ftAf={=?Ylvkhf)>CFq`Rh}@bjnXs9jS9tm!!6*-jVuX z>XWIjr+(gfYUi^%FYmmr^WB|?I=|5QgY>%eIqAXl&h$k3Bk9kizkBMMQ_nv2l2flb z^-oWoKlOoAzn58?IXANj|X}><*KYj4@*PVX* z=^sD+A2&D~@*74r+`8dI8y?v3lc#5%{(`4p_4MhdFFyU7XV_=t�X7wlh9*#uv}{ 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 z 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 HbM*fQ*g53M literal 0 HcmV?d00001 diff --git a/pages/carousel/utils.tsx b/pages/carousel/utils.tsx new file mode 100644 index 0000000000..bc0ac97e9e --- /dev/null +++ b/pages/carousel/utils.tsx @@ -0,0 +1,95 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import React from 'react'; + +import { Button, Link } from '~components'; + +import logo1 from './1.png'; +import logo2 from './2.png'; +import logo3 from './3.png'; +import logo4 from './4.png'; +import logo5 from './5.png'; + +export function generateCarousels() { + // generate + return [ + { + content: ( +
+ AWS Lambda Function Development +
+ Learn more +
+

Build serverless applications

+ +

Deploy in minutes

+
+ ), + backgroundStyle: `url(${logo1})`, + }, + { + content: ( +
+ Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon S3 Storage Solutions +
+ Explore features +
+

Scalable cloud storage

+ +

Secure and durable

+
+ ), + backgroundStyle: `url(${logo2})`, + }, + { + content: ( +
+ Amazon EC2 Computing +
+ View pricing +
+

Virtual servers in the cloud

+ +

Flexible compute capacity

+
+ ), + backgroundStyle: `url(${logo3})`, + }, + { + content: ( +
+ Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon DynamoDB +
+ Test link + Documentation +
+

Some text

+ +

Some more text

+

Managed NoSQL database

+ +

Millisecond latency

+
+ ), + backgroundStyle: `url(${logo4})`, + }, + { + content: ( +
+ Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon CloudFront CDN +
+ Test link + Features +
+

Some text

+ +

Some more text

+

Global content delivery

+ +

Low latency access

+
+ ), + backgroundStyle: `url(${logo5})`, + }, + ]; +} diff --git a/pages/carousel/visible-items.page.tsx b/pages/carousel/visible-items.page.tsx index 933b9a0986..d7962c8eb9 100644 --- a/pages/carousel/visible-items.page.tsx +++ b/pages/carousel/visible-items.page.tsx @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 import React from 'react'; -import Button from '~components/button'; import Carousel from '~components/carousel/index'; -import Link from '~components/link'; + +import { generateCarousels } from './utils'; export default function () { return ( @@ -22,101 +22,7 @@ export default function () { ariaLabelPrevious="Previous item" variant="single" visibleItemNumber={3} - items={[ - { - content: ( -
- AWS Lambda Function Development -
- Learn more -
-

Build serverless applications

- -

Deploy in minutes

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(0, 76, 153) 0%, rgb(0, 119, 204) 50%, rgb(51, 153, 255) 100%)', - }, - { - content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon S3 Storage Solutions -
- Explore features -
-

Scalable cloud storage

- -

Secure and durable

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(153, 51, 0) 0%, rgb(204, 85, 0) 50%, rgb(255, 128, 0) 100%)', - }, - { - content: ( -
- Amazon EC2 Computing -
- View pricing -
-

Virtual servers in the cloud

- -

Flexible compute capacity

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(0, 102, 51) 0%, rgb(0, 153, 76) 50%, rgb(51, 204, 102) 100%)', - }, - { - content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon DynamoDB -
- Test link - Documentation -
-

Some text

- -

Some more text

-

Managed NoSQL database

- -

Millisecond latency

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(102, 0, 102) 0%, rgb(153, 51, 153) 50%, rgb(204, 102, 204) 100%)', - }, - { - content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon CloudFront CDN -
- Test link - Features -
-

Some text

- -

Some more text

-

Global content delivery

- -

Low latency access

-
- ), - backgroundStyle: - 'linear-gradient(135deg, rgb(51, 51, 51) 0%, rgb(102, 102, 102) 50%, rgb(153, 153, 153) 100%)', - }, - { - content:
3. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, - backgroundStyle: - 'linear-gradient(135deg, rgb(0, 51, 102) 0%, rgb(0, 102, 153) 50%, rgb(51, 153, 204) 100%)', - }, - { - content:
3. Amazon Aurora MySQL zero-ETL integration with Amazon Redshift
, - backgroundStyle: - 'linear-gradient(135deg, rgb(102, 51, 0) 0%, rgb(153, 102, 0) 50%, rgb(204, 153, 0) 100%)', - }, - ]} + items={generateCarousels()} /> From a0e94cf30bedf68485eea9823c7ed9bc83067152 Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Fri, 22 Nov 2024 13:46:14 +0100 Subject: [PATCH 10/18] chore: Screen reader functionality --- src/carousel/internal.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/carousel/internal.tsx b/src/carousel/internal.tsx index eef7ef9a21..7a78338469 100644 --- a/src/carousel/internal.tsx +++ b/src/carousel/internal.tsx @@ -9,6 +9,7 @@ import Button from '../button/internal'; import { InternalBaseComponentProps } from '../internal/hooks/use-base-component'; import { useMergeRefs } from '../internal/hooks/use-merge-refs'; import { KeyCode } from '../internal/keycode'; +import InternalLiveRegion from '../live-region/internal'; import SpaceBetween from '../space-between/internal'; import { CAROUSEL_HEIGHT, CAROUSEL_ITEM_MARGIN } from './config'; import { CarouselProps } from './interfaces'; @@ -117,6 +118,7 @@ export const InternalCarousel = ({ }} key={index} aria-hidden={!isActiveItem} + aria-label={`List item ${index + 1} of ${items.length} items`} className={clsx(styles['carousel-item'])} style={{ background: typeof backgroundStyle === 'function' ? backgroundStyle(mode) : backgroundStyle, @@ -133,13 +135,17 @@ export const InternalCarousel = ({ -

Deploy in minutes

+
+ + + Dec. 2–6 | Tune in for free to get all the biggest AWS updates this year + +
+ + Find out more + +
+
), backgroundStyle: `url(${logo1})`, }, { content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon S3 Storage Solutions -
- Explore features -
-

Scalable cloud storage

- -

Secure and durable

+
+ + + Become a cloud app developer in 9 months with AWS Cloud Institute + +
+ + Enroll today + +
+
), backgroundStyle: `url(${logo2})`, }, { content: ( -
- Amazon EC2 Computing -
- View pricing -
-

Virtual servers in the cloud

- -

Flexible compute capacity

+
+ + + Amazon Q Business: Your generative AI–powered assistant + +
+ + Explore more + +
+
), backgroundStyle: `url(${logo3})`, }, { content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon DynamoDB -
- Test link - Documentation -
-

Some text

- -

Some more text

-

Managed NoSQL database

- -

Millisecond latency

+
+ + + Amazon Aurora MySQL zero-ETL integration with Amazon Redshift + +
+ + Learn more + +
+
), backgroundStyle: `url(${logo4})`, }, { content: ( -
- Amazon Aurora MySQL zero-ETL integration with Amazon Redshift Amazon CloudFront CDN -
- Test link - Features -
-

Some text

- -

Some more text

-

Global content delivery

- -

Low latency access

+
+ + + AWS is a Leader in the Gartner Magic Quadrant + +
+ + Read the report + +
+
), backgroundStyle: `url(${logo5})`, }, ]; } + +function ProductCard({ + title, + vendor, + logo, + category, + description, + isNew = false, +}: { + title: string; + vendor: string; + logo: string; + category: string; + description: string; + isNew?: boolean; +}) { + return ( + + {`${title} + + + + + {title} + + + By {vendor} + + {category} + + {isNew && New} + + + {description} + + + + + ); +} + +export function generateCardCarousels() { + return [ + { + content: ( + + ), + }, + { + content: ( + + ), + }, + { + content: ( + + ), + }, + { + content: ( + + ), + }, + { + content: ( + + ), + }, + ]; +} diff --git a/pages/carousel/visible-items.page.tsx b/pages/carousel/visible-items.page.tsx index d7962c8eb9..9d2c435de0 100644 --- a/pages/carousel/visible-items.page.tsx +++ b/pages/carousel/visible-items.page.tsx @@ -20,7 +20,6 @@ export default function () { ariaLabel="Test carousel" ariaLabelNext="Next item" ariaLabelPrevious="Previous item" - variant="single" visibleItemNumber={3} items={generateCarousels()} /> diff --git a/src/carousel/index.tsx b/src/carousel/index.tsx index e91ba320ac..53b2f661a5 100644 --- a/src/carousel/index.tsx +++ b/src/carousel/index.tsx @@ -11,12 +11,12 @@ import InternalCarousel from './internal'; export { CarouselProps }; -const Carousel = ({ variant = 'single', size = 'large', ...props }: CarouselProps) => { +const Carousel = ({ size = 'large', ...props }: CarouselProps) => { const baseProps = getBaseProps(props); const baseComponentProps = useBaseComponent('Carousel'); const externalProps = getExternalProps(props); - return ; + return ; }; applyDisplayName(Carousel, 'Carousel'); diff --git a/src/carousel/interfaces.tsx b/src/carousel/interfaces.tsx index dae0c7e59f..14fe159978 100644 --- a/src/carousel/interfaces.tsx +++ b/src/carousel/interfaces.tsx @@ -3,8 +3,6 @@ import { BaseComponentProps } from '../internal/base-component'; export interface CarouselProps extends BaseComponentProps { - variant?: CarouselProps.Variant; - items: ReadonlyArray; height?: number; @@ -23,8 +21,6 @@ export interface CarouselProps extends BaseComponentProps { } export namespace CarouselProps { - export type Variant = 'single' | 'multiple'; - export interface Item { content: React.ReactNode; backgroundStyle?: string | ((mode: 'light' | 'dark') => string); diff --git a/src/carousel/internal.tsx b/src/carousel/internal.tsx index 7a78338469..acead5d23d 100644 --- a/src/carousel/internal.tsx +++ b/src/carousel/internal.tsx @@ -21,7 +21,6 @@ export interface InternalCarouselProps extends CarouselProps, InternalBaseCompon export const InternalCarousel = ({ __internalRootRef, items, - variant, size, ariaLabel, ariaLabelNext, @@ -104,7 +103,7 @@ export const InternalCarousel = ({
    {items.map(({ content, backgroundStyle }, index) => { diff --git a/src/carousel/styles.scss b/src/carousel/styles.scss index 91ce0947f7..c879a95b49 100644 --- a/src/carousel/styles.scss +++ b/src/carousel/styles.scss @@ -11,11 +11,11 @@ @include styles.styles-reset; overflow: hidden; position: relative; + padding-inline: 7px; } .content-wrapper { - padding-block: 30px; - padding-inline: 30px; + block-size: 100%; } .pagination { @@ -35,6 +35,7 @@ z-index: 1; display: flex; box-sizing: content-box; + @include styles.with-motion { transition: transform 0.2s cubic-bezier(0.075, 0.82, 0.165, 1); } @@ -55,6 +56,6 @@ outline: none; } @include focus-visible.when-visible { - @include styles.focus-highlight(awsui.$space-button-focus-outline-gutter); + @include styles.focus-highlight('4px'); } } From d328838f58bd75cabedbe09e4daa4b255fe5d6cd Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Fri, 22 Nov 2024 15:44:12 +0100 Subject: [PATCH 12/18] chore: Documenter and other snapshots --- build-tools/utils/pluralize.js | 1 + pages/carousel/utils.tsx | 12 ++-- .../functional-tests/test-utils.test.tsx | 2 +- .../__snapshots__/documenter.test.ts.snap | 62 +++++++++++++++++ .../test-utils-selectors.test.tsx.snap | 5 ++ .../test-utils-wrappers.test.tsx.snap | 68 +++++++++++++++++++ src/carousel/interfaces.tsx | 1 - src/test-utils/dom/carousel/index.ts | 22 ++++++ 8 files changed, 165 insertions(+), 8 deletions(-) create mode 100644 src/test-utils/dom/carousel/index.ts diff --git a/build-tools/utils/pluralize.js b/build-tools/utils/pluralize.js index 36b3aedea0..56da93690d 100644 --- a/build-tools/utils/pluralize.js +++ b/build-tools/utils/pluralize.js @@ -17,6 +17,7 @@ const pluralizationMap = { ButtonGroup: 'ButtonGroups', Calendar: 'Calendars', Cards: 'Cards', + Carousel: 'Carousels', Checkbox: 'Checkboxes', CodeEditor: 'CodeEditors', CollectionPreferences: 'CollectionPreferences', diff --git a/pages/carousel/utils.tsx b/pages/carousel/utils.tsx index 63f5d96970..6fd7e2684e 100644 --- a/pages/carousel/utils.tsx +++ b/pages/carousel/utils.tsx @@ -16,7 +16,7 @@ export function generateCarousels() { color: 'white', display: 'grid', gridTemplateColumns: '50% 50%', - height: 'calc(100% - 30px)', + height: 'calc(100% - 60px)', alignItems: 'end', padding: '30px', }; @@ -155,7 +155,7 @@ export function generateCardCarousels() { { content: ( !componentsWithExceptions.includes(component)); const RENDER_COMPONENTS_DEFAULT_PROPS: Record[] = [ diff --git a/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap b/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap index e430ebeea2..e90ae02620 100644 --- a/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap +++ b/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap @@ -4522,6 +4522,68 @@ The order of \`id\`s doesn't influence the order of display of sections, which i } `; +exports[`Documenter definition for carousel matches the snapshot: carousel 1`] = ` +{ + "events": [], + "functions": [], + "name": "Carousel", + "properties": [ + { + "name": "ariaLabel", + "optional": false, + "type": "string", + }, + { + "name": "ariaLabelNext", + "optional": false, + "type": "string", + }, + { + "name": "ariaLabelPrevious", + "optional": false, + "type": "string", + }, + { + "deprecatedTag": "Custom CSS is not supported. For testing and other use cases, use [data attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes).", + "description": "Adds the specified classes to the root element of the component.", + "name": "className", + "optional": true, + "type": "string", + }, + { + "deprecatedTag": "The usage of the \`id\` attribute is reserved for internal use cases. For testing and other use cases, +use [data attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes). If you must +use the \`id\` attribute, consider setting it on a parent element instead.", + "description": "Adds the specified ID to the root element of the component.", + "name": "id", + "optional": true, + "type": "string", + }, + { + "name": "items", + "optional": false, + "type": "ReadonlyArray", + }, + { + "defaultValue": ""large"", + "description": "size +default to a predefined sizes of the carousel. User can also control the carousel height by using a number +that represents pixels.", + "name": "size", + "optional": true, + "type": ""large" | "medium" | "small" | number", + }, + { + "name": "visibleItemNumber", + "optional": true, + "type": "number", + }, + ], + "regions": [], + "releaseStatus": "stable", +} +`; + exports[`Documenter definition for checkbox matches the snapshot: checkbox 1`] = ` { "events": [ diff --git a/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap b/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap index f38ff89487..40ed0e05b8 100644 --- a/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap +++ b/src/__tests__/snapshot-tests/__snapshots__/test-utils-selectors.test.tsx.snap @@ -127,6 +127,11 @@ exports[`test-utils selectors 1`] = ` "awsui_section_p8a6i", "awsui_selection-control_p8a6i", ], + "carousel": [ + "awsui_carousel-item_16n63", + "awsui_content-wrapper_16n63", + "awsui_root_16n63", + ], "checkbox": [ "awsui_root_k2y2q", ], diff --git a/src/__tests__/snapshot-tests/__snapshots__/test-utils-wrappers.test.tsx.snap b/src/__tests__/snapshot-tests/__snapshots__/test-utils-wrappers.test.tsx.snap index 025369b022..5c11e371ae 100644 --- a/src/__tests__/snapshot-tests/__snapshots__/test-utils-wrappers.test.tsx.snap +++ b/src/__tests__/snapshot-tests/__snapshots__/test-utils-wrappers.test.tsx.snap @@ -69,6 +69,10 @@ export { ElementWrapper }; export { CardsWrapper }; + import CarouselWrapper from './carousel'; + export { CarouselWrapper }; + + import CheckboxWrapper from './checkbox'; export { CheckboxWrapper }; @@ -643,6 +647,26 @@ declare module '@cloudscape-design/test-utils-core/dist/dom' { */ findAllCards(selector?: string): Array; + /** + * Returns the wrapper of the first Carousel that matches the specified CSS selector. + * If no CSS selector is specified, returns the wrapper of the first Carousel. + * If no matching Carousel is found, returns \`null\`. + * + * @param {string} [selector] CSS Selector + * @returns {CarouselWrapper | null} + */ + findCarousel(selector?: string): CarouselWrapper | null; + + /** + * Returns an array of Carousel wrapper that matches the specified CSS selector. + * If no CSS selector is specified, returns all of the Carousels inside the current wrapper. + * If no matching Carousel is found, returns an empty array. + * + * @param {string} [selector] CSS Selector + * @returns {Array} + */ + findAllCarousels(selector?: string): Array; + /** * Returns the wrapper of the first Checkbox that matches the specified CSS selector. * If no CSS selector is specified, returns the wrapper of the first Checkbox. @@ -2081,6 +2105,17 @@ declare module '@cloudscape-design/test-utils-core/dist/dom' { return this.findAllComponents(CardsWrapper, selector); }; + ElementWrapper.prototype.findCarousel = function(selector) { + const rootSelector = \`.\${CarouselWrapper.rootSelector}\`; + // casting to 'any' is needed to avoid this issue with generics + // https://github.com/microsoft/TypeScript/issues/29132 + return (this as any).findComponent(selector ? appendSelector(selector, rootSelector) : rootSelector, CarouselWrapper); + }; + + ElementWrapper.prototype.findAllCarousels = function(selector) { + return this.findAllComponents(CarouselWrapper, selector); + }; + ElementWrapper.prototype.findCheckbox = function(selector) { const rootSelector = \`.\${CheckboxWrapper.rootSelector}\`; // casting to 'any' is needed to avoid this issue with generics @@ -2845,6 +2880,10 @@ export { ElementWrapper }; export { CardsWrapper }; + import CarouselWrapper from './carousel'; + export { CarouselWrapper }; + + import CheckboxWrapper from './checkbox'; export { CheckboxWrapper }; @@ -3387,6 +3426,24 @@ declare module '@cloudscape-design/test-utils-core/dist/selectors' { */ findAllCards(selector?: string): MultiElementWrapper; + /** + * Returns a wrapper that matches the Carousels with the specified CSS selector. + * If no CSS selector is specified, returns a wrapper that matches Carousels. + * + * @param {string} [selector] CSS Selector + * @returns {CarouselWrapper} + */ + findCarousel(selector?: string): CarouselWrapper; + + /** + * Returns a multi-element wrapper that matches Carousels with the specified CSS selector. + * If no CSS selector is specified, returns a multi-element wrapper that matches Carousels. + * + * @param {string} [selector] CSS Selector + * @returns {MultiElementWrapper} + */ + findAllCarousels(selector?: string): MultiElementWrapper; + /** * Returns a wrapper that matches the Checkboxes with the specified CSS selector. * If no CSS selector is specified, returns a wrapper that matches Checkboxes. @@ -4699,6 +4756,17 @@ declare module '@cloudscape-design/test-utils-core/dist/selectors' { return this.findAllComponents(CardsWrapper, selector); }; + ElementWrapper.prototype.findCarousel = function(selector) { + const rootSelector = \`.\${CarouselWrapper.rootSelector}\`; + // casting to 'any' is needed to avoid this issue with generics + // https://github.com/microsoft/TypeScript/issues/29132 + return (this as any).findComponent(selector ? appendSelector(selector, rootSelector) : rootSelector, CarouselWrapper); + }; + + ElementWrapper.prototype.findAllCarousels = function(selector) { + return this.findAllComponents(CarouselWrapper, selector); + }; + ElementWrapper.prototype.findCheckbox = function(selector) { const rootSelector = \`.\${CheckboxWrapper.rootSelector}\`; // casting to 'any' is needed to avoid this issue with generics diff --git a/src/carousel/interfaces.tsx b/src/carousel/interfaces.tsx index 14fe159978..25b72c6a02 100644 --- a/src/carousel/interfaces.tsx +++ b/src/carousel/interfaces.tsx @@ -5,7 +5,6 @@ import { BaseComponentProps } from '../internal/base-component'; export interface CarouselProps extends BaseComponentProps { items: ReadonlyArray; - height?: number; /** * size * default to a predefined sizes of the carousel. User can also control the carousel height by using a number diff --git a/src/test-utils/dom/carousel/index.ts b/src/test-utils/dom/carousel/index.ts new file mode 100644 index 0000000000..27a023d4db --- /dev/null +++ b/src/test-utils/dom/carousel/index.ts @@ -0,0 +1,22 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import { ComponentWrapper, ElementWrapper } from '@cloudscape-design/test-utils-core/dom'; + +import styles from '../../../carousel/styles.selectors.js'; + +export class CarouselItemWrapper extends ComponentWrapper { + /** + * Finds the content of a carousel + */ + findContent(): ElementWrapper | null { + return this.findByClassName(styles['content-wrapper']); + } +} + +export default class CarouselWrapper extends ComponentWrapper { + static rootSelector: string = styles.root; + + findItems(): Array { + return this.findAllByClassName(styles['carousel-item']).map(item => new CarouselItemWrapper(item.getElement())); + } +} From 994435aa3796e75b8bbc5ca4561d1e107ae2ae9c Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Fri, 22 Nov 2024 15:55:23 +0100 Subject: [PATCH 13/18] fix: Default value for items --- src/carousel/internal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/carousel/internal.tsx b/src/carousel/internal.tsx index acead5d23d..901027ad31 100644 --- a/src/carousel/internal.tsx +++ b/src/carousel/internal.tsx @@ -20,7 +20,7 @@ export interface InternalCarouselProps extends CarouselProps, InternalBaseCompon export const InternalCarousel = ({ __internalRootRef, - items, + items = [], size, ariaLabel, ariaLabelNext, From c345b870874bb1fb16205ee4d88e8f9bbf8dda57 Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Fri, 22 Nov 2024 16:05:12 +0100 Subject: [PATCH 14/18] fix: Test --- src/__tests__/functional-tests/outer-form-submit.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/functional-tests/outer-form-submit.test.tsx b/src/__tests__/functional-tests/outer-form-submit.test.tsx index 24303041ca..6bc76591d7 100644 --- a/src/__tests__/functional-tests/outer-form-submit.test.tsx +++ b/src/__tests__/functional-tests/outer-form-submit.test.tsx @@ -6,7 +6,7 @@ import { render } from '@testing-library/react'; import { getRequiredPropsForComponent } from '../required-props-for-components'; import { getAllComponents, requireComponent } from '../utils'; -const skippedComponents = ['button']; +const skippedComponents = ['button', 'carousel']; describe('Check outer form submission', () => { getAllComponents() From 3052b0c2770cee0b2896bc8a24fca8a0647ddc10 Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Fri, 22 Nov 2024 16:24:16 +0100 Subject: [PATCH 15/18] fix: Background cover --- pages/carousel/utils.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pages/carousel/utils.tsx b/pages/carousel/utils.tsx index 6fd7e2684e..1067768481 100644 --- a/pages/carousel/utils.tsx +++ b/pages/carousel/utils.tsx @@ -37,7 +37,7 @@ export function generateCarousels() {
), - backgroundStyle: `url(${logo1})`, + backgroundStyle: `center / cover url(${logo1})`, }, { content: ( @@ -54,7 +54,7 @@ export function generateCarousels() {
), - backgroundStyle: `url(${logo2})`, + backgroundStyle: `center / cover url(${logo2})`, }, { content: ( @@ -71,7 +71,7 @@ export function generateCarousels() {
), - backgroundStyle: `url(${logo3})`, + backgroundStyle: `center / cover url(${logo3})`, }, { content: ( @@ -88,7 +88,7 @@ export function generateCarousels() {
), - backgroundStyle: `url(${logo4})`, + backgroundStyle: `center / cover url(${logo4})`, }, { content: ( @@ -105,7 +105,7 @@ export function generateCarousels() {
), - backgroundStyle: `url(${logo5})`, + backgroundStyle: `center / cover url(${logo5})`, }, ]; } From 0a7c226004338739fb28bcf232d68bb7f1f3cc1a Mon Sep 17 00:00:00 2001 From: Cansu Aksu Date: Fri, 22 Nov 2024 16:52:24 +0100 Subject: [PATCH 16/18] chore: Preferences --- pages/carousel/basic.page.tsx | 38 ++++++++++++++++++++++--- pages/carousel/card-carousel.page.tsx | 40 +++++++++++++++++++++++---- 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/pages/carousel/basic.page.tsx b/pages/carousel/basic.page.tsx index 712db418bd..d5479d2d7c 100644 --- a/pages/carousel/basic.page.tsx +++ b/pages/carousel/basic.page.tsx @@ -1,29 +1,59 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import React from 'react'; +import React, { useState } from 'react'; -import Box from '~components/box/index'; +import { Box, FormField, Input, Select, SelectProps } from '~components'; import Carousel from '~components/carousel/index'; import { generateCarousels } from './utils'; export default function () { + const [size, setSize] = useState({ label: 'Large', value: 'large' }); + const [sizeNumber, setSizeNumber] = useState(600); + const [visibleItemNumber, setVisibleItemNumber] = useState(1); + return ( <> Image Carousel + + + + setSizeNumber(Number(detail.value))} /> + + )} + + + setVisibleItemNumber(Number(detail.value))} /> + + +
diff --git a/pages/carousel/card-carousel.page.tsx b/pages/carousel/card-carousel.page.tsx index ebeaa6224c..46ebf7cba6 100644 --- a/pages/carousel/card-carousel.page.tsx +++ b/pages/carousel/card-carousel.page.tsx @@ -1,29 +1,59 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import React from 'react'; +import React, { useState } from 'react'; -import Box from '~components/box/index'; -import Carousel from '~components/carousel/index'; +import { Box, FormField, Input, Select, SelectProps } from '~components'; +import Carousel from '~components/carousel'; import { generateCardCarousels } from './utils'; export default function () { + const [size, setSize] = useState({ label: 'Number', value: 'number' }); + const [sizeNumber, setSizeNumber] = useState(350); + const [visibleItemNumber, setVisibleItemNumber] = useState(3); + return ( <> Cards Carousel + + + + setSizeNumber(Number(detail.value))} /> + + )} + + + setVisibleItemNumber(Number(detail.value))} /> + + +
From 2694c7d5ae4d07d7aa736dc943fa7c6df55693c5 Mon Sep 17 00:00:00 2001 From: Amr Mohamed Date: Fri, 22 Nov 2024 16:50:48 +0100 Subject: [PATCH 17/18] feat: Added keydown logic --- src/carousel/internal.tsx | 71 ++++++++++++++++++++++++++------------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/src/carousel/internal.tsx b/src/carousel/internal.tsx index 901027ad31..480b9d6cb2 100644 --- a/src/carousel/internal.tsx +++ b/src/carousel/internal.tsx @@ -33,18 +33,14 @@ export const InternalCarousel = ({ const carouselWrapperRef = useRef(null); const [activeItem, setActiveItem] = useState(0); - const activeItemIndexEnd = useMemo(() => { - return activeItem + visibleItemNumber - 1; - }, [activeItem, visibleItemNumber]); - const mainRef = useRef(null); const mode = useCurrentMode(mainRef); const mergedRef = useMergeRefs(mainRef, __internalRootRef); const transformX = useMemo(() => { const itemWidth = carouselWrapperRef.current?.querySelector('li')?.clientWidth ?? 0; - return itemWidth * activeItem + CAROUSEL_ITEM_MARGIN * activeItem; - }, [activeItem]); + return (itemWidth * activeItem + CAROUSEL_ITEM_MARGIN * activeItem) * visibleItemNumber; + }, [activeItem, visibleItemNumber]); const [isMeasured, setIsMeasured] = useState(false); @@ -70,33 +66,57 @@ export const InternalCarousel = ({ const goPrev = () => { if (activeItem === 0) { - setActiveItem(items.length - 1); + setActiveItem(Math.ceil(items.length / visibleItemNumber - 1)); } else { - setActiveItem((activeItem - 1) % items.length); + setActiveItem(activeItem - 1); } }; - const goNext = () => setActiveItem((activeItem + 1) % items.length); + const goNext = () => setActiveItem((activeItem + 1) % Math.ceil(items.length / visibleItemNumber)); const onKeyDown = (event: React.KeyboardEvent) => { if (!carouselWrapperRef.current) { return; } - // focus the correct li based on the direction. - const target = event.target as HTMLElement; - let newFocusTarget: HTMLLIElement; - if (event.keyCode === KeyCode.left) { - newFocusTarget = target.previousSibling as HTMLLIElement; - goPrev(); - } else if (event.keyCode === KeyCode.right) { - goNext(); - newFocusTarget = target.nextSibling as HTMLLIElement; + if (event.keyCode !== KeyCode.left && event.keyCode !== KeyCode.right) { + return; } - requestAnimationFrame(() => { - newFocusTarget?.focus(); - }); + event.preventDefault(); + const items = carouselWrapperRef.current.querySelectorAll('li'); + const currentIndex = Array.from(items).findIndex(item => item === event.target); + + if (currentIndex === -1) { + return; + } + + if (event.keyCode === KeyCode.left) { + const newIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1; + if (newIndex !== 0 && newIndex % Math.ceil(items.length / visibleItemNumber) === 0) { + goPrev(); + } + requestAnimationFrame(() => { + const newTarget = items[newIndex] as HTMLElement; + if (newTarget) { + newTarget.focus(); + } + }); + } else if (event.keyCode === KeyCode.right) { + const newIndex = currentIndex === items.length - 1 ? 0 : currentIndex + 1; + + if (newIndex % Math.ceil(items.length / visibleItemNumber + 1) === 0) { + goNext(); + } + setTimeout(() => { + requestAnimationFrame(() => { + const newTarget = items[newIndex] as HTMLElement; + if (newTarget) { + newTarget.focus(); + } + }); + }, 0); + } }; return ( @@ -107,7 +127,10 @@ export const InternalCarousel = ({ style={{ height: `${height}px`, transform: `translateX(-${transformX}px)` }} > {items.map(({ content, backgroundStyle }, index) => { - const isActiveItem = index >= activeItem && index <= activeItemIndexEnd; + // Calculate start and end indices for current page + const start = activeItem * visibleItemNumber; + const end = Math.min(start + visibleItemNumber - 1, items.length - 1); + const isActiveItem = index >= start && index <= end; return (
  • - {activeItem + 1} / {items.length} + {activeItem + 1} / {Math.ceil(items.length / visibleItemNumber)}