From c34da3421d406369bc962dc886ac239f009ceef0 Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 19:25:28 +0000 Subject: [PATCH 01/13] feat(Pagination): add renderPage prop to Pagination --- .changeset/cyan-lights-try.md | 5 +++ e2e/components/Pagination.test.ts | 4 +++ .../Pagination.features.stories.tsx | 33 ++++++++++++++++++- packages/react/src/Pagination/Pagination.tsx | 19 +++++++++-- packages/react/src/Pagination/model.tsx | 18 +++++++++- .../__tests__/Pagination/Pagination.test.tsx | 17 ++++++++++ 6 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 .changeset/cyan-lights-try.md diff --git a/.changeset/cyan-lights-try.md b/.changeset/cyan-lights-try.md new file mode 100644 index 00000000000..4109eeaf9d6 --- /dev/null +++ b/.changeset/cyan-lights-try.md @@ -0,0 +1,5 @@ +--- +'@primer/react': minor +--- + +feat(Pagination): add renderPage prop to Pagination diff --git a/e2e/components/Pagination.test.ts b/e2e/components/Pagination.test.ts index 4c0d914228f..5249e102252 100644 --- a/e2e/components/Pagination.test.ts +++ b/e2e/components/Pagination.test.ts @@ -15,6 +15,10 @@ const stories = [ title: 'Hide Page Numbers', id: 'components-pagination-features--hide-page-numbers', }, + { + title: 'Render Links', + id: 'components-pagination-features--render-links', + }, ] as const test.describe('Pagination', () => { diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index 13256126a93..931a5fd9706 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, {useState} from 'react' import type {Meta} from '@storybook/react' import type {ComponentProps} from '../utils/types' import Pagination from './Pagination' @@ -32,3 +32,34 @@ HidePageNumbersByViewport.parameters = { export const HigherSurroundingPageCount = () => ( e.preventDefault()} /> ) + +type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode} +const ReactRouterLikeLink = React.forwardRef( + ({to, children, ...props}, ref) => { + return ( + + {children} + + ) + }, +) + +export const RenderLinks = () => { + const [page, setPage] = useState(2) + + return ( + { + e.preventDefault() + setPage(n) + }} + renderPage={({content, ...props}) => ( + + {content} + + )} + /> + ) +} diff --git a/packages/react/src/Pagination/Pagination.tsx b/packages/react/src/Pagination/Pagination.tsx index b52404b504f..112294ad901 100644 --- a/packages/react/src/Pagination/Pagination.tsx +++ b/packages/react/src/Pagination/Pagination.tsx @@ -4,7 +4,7 @@ import Box from '../Box' import {get} from '../constants' import type {SxProp} from '../sx' import sx from '../sx' -import {buildComponentData, buildPaginationModel} from './model' +import {buildComponentData, buildPaginationModel, type PageDataProps} from './model' import type {ResponsiveValue} from '../hooks/useResponsiveValue' import {viewportRanges} from '../hooks/useResponsiveValue' import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' @@ -146,6 +146,12 @@ const Page = toggleStyledComponent( `, ) +export type PageProps = { + key: string + content: string + className: string +} & PageDataProps['props'] + type UsePaginationPagesParameters = { theme?: Record // set to theme type once /src/theme.js is converted pageCount: number @@ -155,6 +161,7 @@ type UsePaginationPagesParameters = { marginPageCount: number showPages?: PaginationProps['showPages'] surroundingPageCount: number + renderPage?: (props: PageProps) => React.ReactNode } function usePaginationPages({ @@ -166,6 +173,7 @@ function usePaginationPages({ marginPageCount, showPages, surroundingPageCount, + renderPage, }: UsePaginationPagesParameters) { const pageChange = React.useCallback((n: number) => (e: React.MouseEvent) => onPageChange(e, n), [onPageChange]) @@ -178,13 +186,17 @@ function usePaginationPages({ const children = React.useMemo(() => { return model.map(page => { const {props, key, content} = buildComponentData(page, hrefBuilder, pageChange(page.num)) + if (renderPage) { + return renderPage({key, content, className: classes.Page, ...props}) + } + return ( {content} ) }) - }, [model, hrefBuilder, pageChange, theme, enabled]) + }, [model, hrefBuilder, pageChange, renderPage, theme, enabled]) return children } @@ -233,6 +245,7 @@ export type PaginationProps = { marginPageCount?: number showPages?: boolean | ResponsiveValue surroundingPageCount?: number + renderPage?: (props: PageProps) => React.ReactNode } function Pagination({ @@ -244,6 +257,7 @@ function Pagination({ marginPageCount = 1, showPages = true, surroundingPageCount = 2, + renderPage, ...rest }: PaginationProps) { const pageElements = usePaginationPages({ @@ -255,6 +269,7 @@ function Pagination({ marginPageCount, showPages, surroundingPageCount, + renderPage, }) const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) diff --git a/packages/react/src/Pagination/model.tsx b/packages/react/src/Pagination/model.tsx index 8e8a0697732..368e87f6ea7 100644 --- a/packages/react/src/Pagination/model.tsx +++ b/packages/react/src/Pagination/model.tsx @@ -135,11 +135,27 @@ type PageType = { precedesBreak?: boolean } +export type PageDataProps = { + props: { + href?: string + rel?: string + 'aria-label'?: string + 'aria-current'?: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false' | boolean + 'aria-hidden'?: boolean + 'aria-disabled'?: boolean + onClick?: (e: React.MouseEvent) => void + as?: string + role?: string + } + key: string + content: string +} + export function buildComponentData( page: PageType, hrefBuilder: (n: number) => string, onClick: (e: React.MouseEvent) => void, -) { +): PageDataProps { const props = {} let content = '' let key = '' diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 8511cf6e29e..6ca35a9f95c 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -3,6 +3,7 @@ import Pagination from '../../Pagination' import {behavesAsComponent} from '../../utils/testing' import {render as HTMLRender} from '@testing-library/react' import axe from 'axe-core' +import Link from '../../Link' const reqProps = {pageCount: 10, currentPage: 1} const comp = @@ -24,4 +25,20 @@ describe('Pagination', () => { }) expect(results).toHaveNoViolations() }) + + it('should render links instead of anchor tags with the renderPage prop', () => { + const {container} = HTMLRender( + ( + + {content} + + )} + />, + ) + + expect(container.querySelectorAll('a').length).toEqual(11) + }) }) From 46810fdabd4e1e47561ecefdb205867859703e16 Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 20:20:59 +0000 Subject: [PATCH 02/13] add react router link mock --- .../ActionList/ActionList.examples.stories.tsx | 12 +----------- .../src/Button/LinkButton.features.stories.tsx | 14 ++------------ packages/react/src/NavList/NavList.stories.tsx | 12 +----------- packages/react/src/NavList/NavList.test.tsx | 15 ++------------- packages/react/src/NavList/NavList.tsx | 1 + .../Pagination/Pagination.features.stories.tsx | 12 +----------- .../src/__tests__/Pagination/Pagination.test.tsx | 6 +++--- .../src/stories/deprecated/ActionList.stories.tsx | 12 +----------- packages/react/tsconfig.json | 3 ++- 9 files changed, 14 insertions(+), 73 deletions(-) diff --git a/packages/react/src/ActionList/ActionList.examples.stories.tsx b/packages/react/src/ActionList/ActionList.examples.stories.tsx index ee1ed60205e..a533745d36b 100644 --- a/packages/react/src/ActionList/ActionList.examples.stories.tsx +++ b/packages/react/src/ActionList/ActionList.examples.stories.tsx @@ -19,6 +19,7 @@ import Text from '../Text' import FormControl from '../FormControl' import {AriaStatus} from '../live-region' import {VisuallyHidden} from '../VisuallyHidden' +import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' const meta: Meta = { title: 'Components/ActionList/Examples', @@ -31,17 +32,6 @@ const meta: Meta = { } export default meta -type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode} -const ReactRouterLikeLink = forwardRef( - ({to, children, ...props}: {to: string; children: React.ReactNode}, ref) => { - return ( - - {children} - - ) - }, -) - const NextJSLikeLink = forwardRef( ({href, children}: {href: string; children: React.ReactNode}, ref): React.ReactElement => { const child = React.Children.only(children) diff --git a/packages/react/src/Button/LinkButton.features.stories.tsx b/packages/react/src/Button/LinkButton.features.stories.tsx index 85a347a50b7..c4b618d51c2 100644 --- a/packages/react/src/Button/LinkButton.features.stories.tsx +++ b/packages/react/src/Button/LinkButton.features.stories.tsx @@ -1,6 +1,7 @@ import {EyeIcon, ChevronRightIcon, HeartIcon, DownloadIcon} from '@primer/octicons-react' -import React, {forwardRef} from 'react' +import React from 'react' import {LinkButton} from '.' +import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' export default { title: 'Components/LinkButton/Features', @@ -66,17 +67,6 @@ export const Large = () => ( ) -type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode} -const ReactRouterLikeLink = forwardRef( - ({to, children, ...props}: {to: string; children: React.ReactNode}, ref) => { - return ( - - {children} - - ) - }, -) - export const WithReactRouter = () => ( Default diff --git a/packages/react/src/NavList/NavList.stories.tsx b/packages/react/src/NavList/NavList.stories.tsx index b23bbb122a2..019dd67ba6a 100644 --- a/packages/react/src/NavList/NavList.stories.tsx +++ b/packages/react/src/NavList/NavList.stories.tsx @@ -21,6 +21,7 @@ import { } from '@primer/octicons-react' import Octicon from '../Octicon' import VisuallyHidden from '../_VisuallyHidden' +import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' const meta: Meta = { title: 'Components/NavList', @@ -110,17 +111,6 @@ export const WithNestedSubItems: StoryFn = () => ( ) -type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode} -const ReactRouterLikeLink = React.forwardRef( - ({to, children, ...props}, ref) => { - return ( - - {children} - - ) - }, -) - export const WithReactRouterLink = () => ( diff --git a/packages/react/src/NavList/NavList.test.tsx b/packages/react/src/NavList/NavList.test.tsx index 6edd4070707..2c5d687fa67 100644 --- a/packages/react/src/NavList/NavList.test.tsx +++ b/packages/react/src/NavList/NavList.test.tsx @@ -3,18 +3,7 @@ import React from 'react' import {ThemeProvider} from '..' import {NavList} from './NavList' import {FeatureFlags} from '../FeatureFlags' - -type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode} - -const ReactRouterLikeLink = React.forwardRef( - ({to, children, ...props}, ref) => { - return ( - - {children} - - ) - }, -) +import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' type NextJSLinkProps = {href: string; children: React.ReactNode} @@ -97,7 +86,7 @@ describe('NavList.Item', () => { expect(aboutLink).not.toHaveAttribute('aria-current') }) - it('is compatiable with React-Router-like link components', () => { + it('is compatible with React-Router-like link components', () => { const {getByRole} = render( diff --git a/packages/react/src/NavList/NavList.tsx b/packages/react/src/NavList/NavList.tsx index ed8422a257c..4f5496b2d3c 100644 --- a/packages/react/src/NavList/NavList.tsx +++ b/packages/react/src/NavList/NavList.tsx @@ -67,6 +67,7 @@ export type NavListItemProps = { href?: string 'aria-current'?: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false' | boolean inactiveText?: string + className?: string } & SxProp const Item = React.forwardRef( diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index 931a5fd9706..77079e1d0a4 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -2,6 +2,7 @@ import React, {useState} from 'react' import type {Meta} from '@storybook/react' import type {ComponentProps} from '../utils/types' import Pagination from './Pagination' +import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' export default { title: 'Components/Pagination/Features', @@ -33,17 +34,6 @@ export const HigherSurroundingPageCount = () => ( e.preventDefault()} /> ) -type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode} -const ReactRouterLikeLink = React.forwardRef( - ({to, children, ...props}, ref) => { - return ( - - {children} - - ) - }, -) - export const RenderLinks = () => { const [page, setPage] = useState(2) diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 6ca35a9f95c..5a17d6f9d0d 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -1,9 +1,9 @@ import React from 'react' import Pagination from '../../Pagination' import {behavesAsComponent} from '../../utils/testing' +import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' import {render as HTMLRender} from '@testing-library/react' import axe from 'axe-core' -import Link from '../../Link' const reqProps = {pageCount: 10, currentPage: 1} const comp = @@ -32,9 +32,9 @@ describe('Pagination', () => { pageCount={10} currentPage={1} renderPage={({content, key, className}) => ( - + {content} - + )} />, ) diff --git a/packages/react/src/stories/deprecated/ActionList.stories.tsx b/packages/react/src/stories/deprecated/ActionList.stories.tsx index 51399395a20..ee9aceb076c 100644 --- a/packages/react/src/stories/deprecated/ActionList.stories.tsx +++ b/packages/react/src/stories/deprecated/ActionList.stories.tsx @@ -19,6 +19,7 @@ import {ActionList as _ActionList} from '../../deprecated/ActionList' import {Header} from '../../deprecated/ActionList/Header' import BaseStyles from '../../BaseStyles' import sx from '../../sx' +import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' const ActionList = Object.assign(_ActionList, { Header, @@ -365,17 +366,6 @@ export function SizeStressTestingStory(): JSX.Element { } SizeStressTestingStory.storyName = 'Size Stress Testing' -type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode} -const ReactRouterLikeLink = forwardRef( - ({to, children, ...props}: {to: string; children: React.ReactNode}, ref) => { - return ( - - {children} - - ) - }, -) - const NextJSLikeLink = forwardRef( ({href, children}: {href: string; children: React.ReactNode}, ref): React.ReactElement => { const child = React.Children.only(children) diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index cc93c52c2a4..6bc7f1efd9b 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -10,6 +10,7 @@ "src/**/*.js", "src/**/*.ts", "src/**/*.tsx", - "script/**/*.ts" + "script/**/*.ts", + "mocks/**/*.tsx", ] } From 63144b6b316d2ecf551b28e8ed56ff7ae59a3ecb Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 20:38:26 +0000 Subject: [PATCH 03/13] rename prop and add doc --- .changeset/cyan-lights-try.md | 2 +- packages/react/mocks/ReactRouterLink.tsx | 13 +++++++++++++ packages/react/src/NavList/NavList.tsx | 1 - .../react/src/Pagination/Pagination.docs.json | 6 ++++++ .../Pagination/Pagination.features.stories.tsx | 4 ++-- packages/react/src/Pagination/Pagination.tsx | 16 ++++++++-------- .../src/__tests__/Pagination/Pagination.test.tsx | 5 ++--- 7 files changed, 32 insertions(+), 15 deletions(-) create mode 100644 packages/react/mocks/ReactRouterLink.tsx diff --git a/.changeset/cyan-lights-try.md b/.changeset/cyan-lights-try.md index 4109eeaf9d6..8ebfa3d3e98 100644 --- a/.changeset/cyan-lights-try.md +++ b/.changeset/cyan-lights-try.md @@ -2,4 +2,4 @@ '@primer/react': minor --- -feat(Pagination): add renderPage prop to Pagination +feat(Pagination): add renderPageLink prop to Pagination diff --git a/packages/react/mocks/ReactRouterLink.tsx b/packages/react/mocks/ReactRouterLink.tsx new file mode 100644 index 00000000000..9f6b8b3e65a --- /dev/null +++ b/packages/react/mocks/ReactRouterLink.tsx @@ -0,0 +1,13 @@ +import React from 'react' + +export type ReactRouterLikeLinkProps = {to: string; children: React.ReactNode; className?: string} + +export const ReactRouterLikeLink = React.forwardRef( + ({to, children, ...props}, ref) => { + return ( + + {children} + + ) + }, +) diff --git a/packages/react/src/NavList/NavList.tsx b/packages/react/src/NavList/NavList.tsx index 4f5496b2d3c..ed8422a257c 100644 --- a/packages/react/src/NavList/NavList.tsx +++ b/packages/react/src/NavList/NavList.tsx @@ -67,7 +67,6 @@ export type NavListItemProps = { href?: string 'aria-current'?: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false' | boolean inactiveText?: string - className?: string } & SxProp const Item = React.forwardRef( diff --git a/packages/react/src/Pagination/Pagination.docs.json b/packages/react/src/Pagination/Pagination.docs.json index 51f24a8e07a..c2a47bb3466 100644 --- a/packages/react/src/Pagination/Pagination.docs.json +++ b/packages/react/src/Pagination/Pagination.docs.json @@ -66,6 +66,12 @@ "defaultValue": "2", "description": "How many pages to display on each side of the currently selected page." }, + { + "name": "renderPageLink", + "type": "function", + "defaultValue": "(props: PageProps) => ReactNode", + "description": "Provide a custom component or render prop to render each page link within the component." + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index 77079e1d0a4..313ccddbc4e 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -1,4 +1,4 @@ -import React, {useState} from 'react' +import {useState} from 'react' import type {Meta} from '@storybook/react' import type {ComponentProps} from '../utils/types' import Pagination from './Pagination' @@ -45,7 +45,7 @@ export const RenderLinks = () => { e.preventDefault() setPage(n) }} - renderPage={({content, ...props}) => ( + renderPageLink={({content, ...props}) => ( {content} diff --git a/packages/react/src/Pagination/Pagination.tsx b/packages/react/src/Pagination/Pagination.tsx index 112294ad901..55a8df57b48 100644 --- a/packages/react/src/Pagination/Pagination.tsx +++ b/packages/react/src/Pagination/Pagination.tsx @@ -161,7 +161,7 @@ type UsePaginationPagesParameters = { marginPageCount: number showPages?: PaginationProps['showPages'] surroundingPageCount: number - renderPage?: (props: PageProps) => React.ReactNode + renderPageLink?: (props: PageProps) => React.ReactNode } function usePaginationPages({ @@ -173,7 +173,7 @@ function usePaginationPages({ marginPageCount, showPages, surroundingPageCount, - renderPage, + renderPageLink, }: UsePaginationPagesParameters) { const pageChange = React.useCallback((n: number) => (e: React.MouseEvent) => onPageChange(e, n), [onPageChange]) @@ -186,8 +186,8 @@ function usePaginationPages({ const children = React.useMemo(() => { return model.map(page => { const {props, key, content} = buildComponentData(page, hrefBuilder, pageChange(page.num)) - if (renderPage) { - return renderPage({key, content, className: classes.Page, ...props}) + if (renderPageLink) { + return renderPageLink({key, content, className: classes.Page, ...props}) } return ( @@ -196,7 +196,7 @@ function usePaginationPages({ ) }) - }, [model, hrefBuilder, pageChange, renderPage, theme, enabled]) + }, [model, hrefBuilder, pageChange, renderPageLink, theme, enabled]) return children } @@ -245,7 +245,7 @@ export type PaginationProps = { marginPageCount?: number showPages?: boolean | ResponsiveValue surroundingPageCount?: number - renderPage?: (props: PageProps) => React.ReactNode + renderPageLink?: (props: PageProps) => React.ReactNode } function Pagination({ @@ -257,7 +257,7 @@ function Pagination({ marginPageCount = 1, showPages = true, surroundingPageCount = 2, - renderPage, + renderPageLink, ...rest }: PaginationProps) { const pageElements = usePaginationPages({ @@ -269,7 +269,7 @@ function Pagination({ marginPageCount, showPages, surroundingPageCount, - renderPage, + renderPageLink, }) const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 5a17d6f9d0d..f29161d4224 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -1,4 +1,3 @@ -import React from 'react' import Pagination from '../../Pagination' import {behavesAsComponent} from '../../utils/testing' import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' @@ -26,12 +25,12 @@ describe('Pagination', () => { expect(results).toHaveNoViolations() }) - it('should render links instead of anchor tags with the renderPage prop', () => { + it('should render links instead of anchor tags with the renderPageLink prop', () => { const {container} = HTMLRender( ( + renderPageLink={({content, key, className}) => ( {content} From 67ffa8b480af6a7dcc61a93a388dc736b9e203a4 Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 20:42:25 +0000 Subject: [PATCH 04/13] add missing react --- packages/react/src/Pagination/Pagination.features.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index 313ccddbc4e..02ed50fd9a2 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -1,4 +1,4 @@ -import {useState} from 'react' +import React, {useState} from 'react' import type {Meta} from '@storybook/react' import type {ComponentProps} from '../utils/types' import Pagination from './Pagination' From 2dda335f6f0f8276472bd98f73cc375f8d8911ac Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 20:43:40 +0000 Subject: [PATCH 05/13] add missing react --- packages/react/src/__tests__/Pagination/Pagination.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index f29161d4224..6e5373d43d5 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -1,3 +1,4 @@ +import React from 'react' import Pagination from '../../Pagination' import {behavesAsComponent} from '../../utils/testing' import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' From 927740b00ebd6a49e4fcd0ffbb5c7267c06d6cce Mon Sep 17 00:00:00 2001 From: hussam-i-am Date: Tue, 25 Mar 2025 21:29:14 +0000 Subject: [PATCH 06/13] test(vrt): update snapshots --- ...gehead-Render-Links-dark-colorblind-linux.png | Bin 0 -> 9126 bytes .../Pagehead-Render-Links-dark-dimmed-linux.png | Bin 0 -> 9053 bytes ...ead-Render-Links-dark-high-contrast-linux.png | Bin 0 -> 9119 bytes .../Pagehead-Render-Links-dark-linux.png | Bin 0 -> 9126 bytes ...gehead-Render-Links-dark-tritanopia-linux.png | Bin 0 -> 9126 bytes ...ehead-Render-Links-light-colorblind-linux.png | Bin 0 -> 9046 bytes ...ad-Render-Links-light-high-contrast-linux.png | Bin 0 -> 9084 bytes .../Pagehead-Render-Links-light-linux.png | Bin 0 -> 9046 bytes ...ehead-Render-Links-light-tritanopia-linux.png | Bin 0 -> 9046 bytes 9 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-colorblind-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-dimmed-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-high-contrast-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-tritanopia-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-colorblind-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-high-contrast-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-linux.png create mode 100644 .playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-tritanopia-linux.png diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-colorblind-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-colorblind-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2e9f306825e25c1bc214ad0d1f4a485a9535ab GIT binary patch literal 9126 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 literal 0 HcmV?d00001 diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-dark-high-contrast-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..baf44f68958b43db89a4b23ae22a6dfbc4a4e5b6 GIT binary patch literal 9119 zcmeI2X;4$yw#Q@JeeISO+h;2m5ooVbF3^BBLmDEaoxq4dON1B@f-)JVFb4=pR9aCH zBLPGi9U4%kG+_uNfhefR7-dKxBt*tAWB>vL$n?_p)vLO7tKRp1Rem_<)IMid?R9=@ z?S1}hoqgw5cb6U8_iYCN06U;(PI&?VTUWFP;Oj56cfLABchFw8#Cf`$0MzvDp927X z06}2_+}&+eed#-cRf<#90=8XsPE~RV+nC1un#knIwlNww@|oIC=Ch< zng#*@ugJ)mnbs`;z%OC9u>io=CwN-{zkD}g1OVLlP7VNk_gm98z_lOVI067)9*}GS z{P1s7&YN$eGyO%0BHI?b+8R$QIS8Pahk=Y#)IO4S9} zG4I{0D(uA>0PrV5rfIf`_H@q{KUmYu{OQSM$Q+Ck7PFo6<+a|*6V4%T|EF6upZxLy zH93saQ^9?5B{R~yPd}diVGOe`|&uZ`87%|Vg}_j9)d)O{y^W#!lR z5UV+>x9ytSIo?)gJfhk6-&%XjILcg0T|mL3e`kB3Wj?abl?d1A7FZe-65a{kNwAy7 zb!Kq4q1)|bMMo`_nO`yFDS7mq=tB!qKhZ03l|R`^Kx%Tw6z&qj>}-ebJWg%d5Ic}m zEU>1RIN?PuH@`w!6oM8$GMz3^qxdVmW}r_a<*w}S?ZO+~^4ZLZW!JOp?`srmBfr(6 z@^gVuF}FeCxN&i8A~`uj*s{`g?bZ&1GSr7>8+FV$rnYNww6YepFE6SgY$#=;#44xC zl$XHqV>`C~h`zjCI(d4l&~Le)#ItDhk$=(^6U9qmmjdFC05D@ zcSLUPe4HR0D2eof2yYGKgQ~LQxRD13jxH3|u~Mg=ZcE{(jDEN*jU1?-<74<^RU>wW zV8i_Th-n9m!|aQL#4`)Gc|0DXE=2QGftYsLt^+Sac{@A53nzcu)zfoq{P!q*eSM4| zLGeWIZ=xYPi}FL_l$Dr0=6Kl|a&X38xd0W178-3;K(b3TTamwdReHCq z5-|*L#Kny)4@gn{(K@rBV9YFD$douF1nxz^#fQO${O}Kfe9XC_8?Sc$m;8_GjaM7P z(;|Hd%QM*vvd)aqREJRIB1ImmlvjIwmAtK3Q@(EpwX*~iIf?G9s+C44|1tMRx21)A z;R9Z77ipZbsE%hj2yaJroa>`6kJmy;z}=)mQPn65g(!`^+2$1vb6S|%?U6*0!l-;a zoCG}R%s^KAG^86bn9iB|AdfDYW@Tr~-k;ogOnpiq>vIIV9V7ues~^&nmL@K@-zrC+ zYJN_1pq$Q_8I7RI+HUG(10Nran;FA4bar)_Sz5YpRLKRJXnqEWAMIDtQM@jy%iJ#L zou-A8Q|eiPQeDF}^&(oetc{e4;Gm$?6~R$c<$_{`ueNX~-dtjG`-&Dza()~R80E8t z1M@Z`bJt`Vn<|#APC1T5YF_jW^wo{Ho#N(egdGjX?&ln=^vvDSw8`i+J_Plwyj%x_ z_7M`j7i#nj6S|+cZkrBOYIPg3&qvm2rg@Qz>8Trc>+k;)GnnPVaGVkZ2bTalg(V)6QR!TKjta9MH<(q82~U{prIulT z&A*hiG>sWc@IcLBh;XvMBa}4VomU>s7A;9}N9P;1_BDe#-><*+7=Eg%E$2a$Bt5+% zdC!WfPvUog9!mn+?z3x|di%DTRtR6SAMvUv(Gc~w6=DTr<(CL&h#g^r=>Ex}HnyMD zW>)jf4V_B#$Eo2_B$=9!@%@BL8N7TA3 zx567uSx`@BLpF4%wlmy9%bgU$5@k77<(60^X^I0mnfV3g~bsKL|{ z_q=1rW~S2>eocxDkZ~@oMKaEDs@sB@S3I=z^SRh`Cvn#Dz3=Mugx9p*P9;uduLG~a z0;kQqt1ec0SEo4`CE-}%Mk+<%OL0X)L&V4gDZ}b#X`AcWvuFElo}G(|lH6@``(AG0 zYg2M8dENpf_&JU{bx23(Bpb}uhB^1kI4nP2b#kXBvXgYEAi&$9rwA-Ovq-2H=<~C#>_!I>4`_;8l?>$dJZcK)dc=`9J`ZUx8>NE7 zI`7?a4RPZ}m5?!hLUuSWI-PH_!>~z`)79KiV4T#IzEzTcO!-!sJYcc|7uC~E6s4Sz zCzMDvtu$u1|E2n{wg=@hp&RnZ#&fvDVYSE!9{Hx^!we@zzR7n$;}o!xvV^V#N3uU9 zS`x0=4ApGeYQ@`ZA&5Ga2U5Sm0 z%Ldx3>S2(ABaH!b&xnxC#rml7h?NR`SElkxPd6cwBc2ge*tW`Q9f|bVwe|6XoBSLI zntM;vx~lb0B3JWr zk)~whRuOb~9>q8d%~^XfWd6|2K($GO&D%ykMjTk^X1U}VKZXRKd)ws|9@Q)+@){A7 zw+@$MX7z0TbdI`v?RQqy^Xl8PdIMy>5hrQ@Waw4 zBe{W+P8bj%q8|^m;E?5mciOsWiJ@bEY8l(zJGj= zxpz;u?`FDn-#+`;LDw{O@>;WAeIy-IV23RW^lt99q9?tIV_Ess|Farqm(i7LJ}ne- zUc!VEuH@PN)!Cg+`$yz=oI(>JxJkJBiN+A>Nn>?#a0^$Rozuj=tiN0Tu6!k0YPbIB zr$1j82=(;YoJkXk|BxPaxg-~@gA{%0pkaBQ3fjH5Cso3AKNQX>jFvyxF{=8SiSYkb zr=aaaM@^CS7+L4(!hLyaLQ_>Rm6c)HqLH`|RCQT9I} zl%;wff4y8g>13+X^iCdB%kU&%FJ=ri_5M60VQ9w%dZKtu(FmS-o!wurp0U01M$s^j zkF)%!6$t2-RjFmmdRs@yEIrGdj6fV=Aj$XjoQ_CVJGysW`nU8XFwF3M6`F)zs z1bfkgiHV5=8uiU$AG7IqnFdVwUHpIjG%m(h>w-fyby6dZHQ4&^}{@ox$kR(nIF0`S7)m(01f-2r;do z!M-YbuI+K4R`De0xfvrVjZGijvAM>mroe(B^JUqLy9L&P>6uFg_00^vfH$mhSTft; z%fwq?$-k!6Poc`&yF3J*rOy0{hJ|uvO{v$wEidDy`qfNgrbqaQ36v7joA098{NUwi zX$9%0B~${TWo`w<%ZN0j8s6KtEp(#_2pvn3RpUk*s$s%~Rss2>0toF-k!);T6QFrb9(E(<3{Y*2%YOAG zO(@&3NaK$cKc+D0{rwmXK6ro+wjD`eE+5n>OTE;B&t68uHe}^w3rnAtRPBdwPh5pz z{70m-BY_nzPb4eoMTuZ#0n9a6N!%?>bYiYoP%?+m z2B|;|R2SHcm_bS0hOj+*s^>mj7674#-SQa$uWzh2t+C=%C@>3230oH3Xz@*zr7lj5 zeC4_fQwBw&P$(%@LKn0Bb@VJ#!rwozFtB52Tf0s04%#K@rC|;bipQ&I!agf(3RXJ< z>OxssUr}JmYH=2GunHlYtPP|_vPJhtqYQ1sR(#Pr5yWs!1krI!PI0xwCx6fZtAT4jirQaR*C|L~h=*vGA|GvUVWd@aW~XCKRkZ$8fHH_0h|06SvKX zD|LxO_p(E>{-sR+Y0g_8IL0WG9=pH}c0X_v#Cm$04E*ja5Z zP1mpprvARE^PMIMSD8|6*g@YGxsrg7!AmMuI&+XB0~M^hFq1U9II2M6WXic@LiF3S zUflf{ugSfU#*olFTk||BWO8j{$lOJjLDeoQT7e3VXHI6ECtDUk0*96v6%F&CuvQl3 zbe+!LJ~gt=%)2I~jgJl$UN9c68<^1F4NK7bL_NuCzje_juuX?!*gsxHuV9Bg;5J!Z z{8`alyiGemW40u@JScK$;&F*CZF-nOu>$w7kbgPZml}s7c{O@moucg$<|Pkb>Fda0qmvy&5|tnsS54j?~R2^v9jfd{xKtm;A>40<87z4DIr_7S-`GBWG^2t7;Y9KZO~&% zqdX+HDdstY!O-*HAK&gq%~30N>{)pJ9N>nQ{|v4fTu*9XTD}wF*m5%1V~kyY@o>e2N+BjWxP07;$jRX1g+g`mpb`s3u|g>>Yg!V{6Radb%Q->U?1bxUOd~}TbzDjT?0eAsR9-& z<;5RohRsKdV*^LznZgt!M#%KCvjta@GK*j#2^U9NTVu$pDEuqaA}iIxtK#%?`|SQm z?uhE(tGVy5%khh%NKN>Md@plnM+{4wyP9H$kLc?oQ1-jO_@%<;=ZIf?I3=3-J19S6 zfSo?}|0u7mm-^Df=E(6efZ;c992Z^Tmmbs%WS3+Aw@tnBj!7uZ*!t@5VaatQ?b*%e za4YT$q74eaG313A(m%5bS;9&H_fCzv5NsGnG z^Ude!XIJI#YnuIT7IF<3@430iJr+fjl-ILfaW22Fu(!OLG5ME;qp{i&AfbagAO29CbTF5c4QP@mOudd(iOn?1A?PsWL$~ zb3#}lP#%csVOPj1g#9));!*(MT4vXDxYp2=YXg5(0sw!#*=_{5_H~a30PyE;Bs&0K z|0Tr?066&z3IO=aKc;sA{{GiFD*)ieztgK5nev^0td>vjSOs6m_yLAjF7A=@B&Rtm z6Rkv4b4O~tY}oUdY6)<0f@$b7r5?ERCF8*e`r^cfV-ySX$e7eWzf$hX#gwM7{m> z2vNVx&Z()RW^+k#z8=Md5F5hq@UT?Bc1QNzcZ-1m)0jR>ttwjd6og!4p?R{px<;_> z<`*vC0~2@-RZsnw6M7oUZqUW!CCT z*34(*CWip+EUg@b_qAErn`XOzi+^43)R-WM$om#I_;xNqm+G4gE4_cDIAqtZU2wW0 z!MZZXOT1W?$X2~yyKxu4vi=g8@8S^(Y0s1t_nDh5Jx0BPB&Nc8rM&^6_DX zGgQ&Z$r2&N-Ok!txIzk(<+&$Abn|`Dk>iubc5j(jF*f7iZCty8N(v4Lh>8qqv%K>1 zEuNntTI3AsvjWebS4ssrvd!fYcgm5_*2|tT3ybC@`5i08MqtLlyu^A#C)E{B>u<{S zAb;aO>5JO$hyxri3Vy$?CT@%9h{ay$cxUVO*khd%Ue3Wz2+n3CX z?X75H@N_Umeu?tBLgZs7fjw$-jKz%K z#UEe4u9m20%`m_El{twzB)q&XxmbkSTsjXeFBTl~^Wss{X*#aUbf%OZi%0sD{P?u! zUS6I{qu_gF@BP*MrL=+OK1mCE&Fnz-TPj)P=M@;p^vvI1jK>Q&oU-*0Hbk#!Gw;Iz zA=_1`y>v}#uaWrA@b<0WQJ8f0{be@zMD)8hZeCtqYHI3Y*KzAyK^NH`JgU6rAMBxI zQlr_?QLpB9sOgW()46D=2ShPg*T)E9q+)(te2v|oV#cjT={IJD{1MK%mJC+6rL74< zE|HJf*A!6|R>Q3kQ*S{rq^uQd55D%ds#9i_=#gh_y@NcXRhnVdd}+dQv8FU-^gA#y z%E865geYQnP$u(nqAh{Gwi+aj8Xo|3`iG4PNiq6-sfE{TR zG!ArliXJUnNw)`g=Bx}puO?oe(WwhiQG9kmJ^W~_h^N%g;a!4Gz~nu08v^*CFYwCS zUEy9#4%EWg9xWLYgirX;tQdZ zSN*;6;8&y9L8R529eoE-t0)B*G2Ncx9uedmhLn$if*TLGZpejcAUnG=He=D7T*}qu z0gZ%ks(_v$Ap)6aEcIEre6=NH=DjgZK1CyTV6@XVf!OxuYI3u8+!O|n?cBI4ZFrm> z>}5kr=ttRCwPE~TOz;CI_<^8O>J(BDr%@n!B!jV z2r+o0u-G>T#ljUl%igHLRI|B}17iry#d}Osj_9Veq0BW!Vhcns2MdMf#a-$`N@8E3 z%G1fo$-UM9G9jKDoSaRZH?y}7>zb9eMTMO_d6ER9gEwc*!qe8@WD2zPRBB@M`Y)d! zwEN0kQ3q;_N3iEc&e-hPW1jR}P=yzYzt7oPJCtXR-5&OiWtBN)>NG&@2Wxt^obw6N zzT*Qk^K4mbO84!`??DzpjT#{%-F%OEZPEU=s7-EZd9a*@$S^E~E-6F{B(0L!=TUgo zJm(O5fG%G;WCrKZG>?9>p8nM@o^zo?gA?%P-+IgPR8Na`1J@VYN^aL#TQ_7awiP>k z>zq`lV`iFO(3Yb37ZVe-x9{D>Cnm&wm7+uQ)UGDGI-}>T_+^b~zSEpW%?;hZcRIyO zR*t#qZf)(d@WHSGrf*2zpbD&VdI;sE9)hMtLXn@Rrzh0=)L5b5d3{->8%G693wpPF zK_kku2x0^6Zp^glKEh zBSp1|%qq^%3yh?@9$!9+7~N+>nlZ70Dly$0=>CbWwTmOY?^G-L@HD*;gjMESZdq{T z1zEnckMCquuKkn&zo~nD+I+AQqAz7oQSZ9VunToqnZ;-Zv%kM1;`L3MR5v!=fqdck zyZ`y~DN>%7v|Yw>l`U!)NG(`RAylQ5;t3%%IbZy=(1%~$u!@}T4aZDH8(F2z^qeVt z;aER%-qXq{YU$UzQ~E?DD>y8m!p}|K>R;<2AAMbFuGQVO_AwMKVNSIv-Szb`{EoiQ zOBd6Z*Qui2m^CEXJ2t@MYUIf6Xs5iIKo8g7*gE{-rK4XHT2p&_Zaa~R@;mCFf?2fL z2~>Y~DTR`_d^v9Ea@^`q;v}eZTB|dCeP)qUY%DoWAQB>aww0M;S)(Q9Z)^BB$*yaA zKYW=60;(@UMNp8sXt+t=mBh`nfa^wvZGtnb1_+Ju8N$HRxu(ycx=YXzfr6j>JY=Z7 z`Gxx0h8zimL8L<%qe^1r1OYaX7;;0$jV|WNS<817bCUkgb!jldsT)nVZK$$9%O{l*&rSr8WCN zosKNncK7ocdZI1$)nbGtoM;DRYU(`|ZZd#&%sTzZws^r{>RYqco{_P1tZaB$e@W~z z+!=TE%~RhJ_}01YNh5gs_Ioi3_odF^E^2aLiB<^nw~sGc*XHLJ$D0-c0FBvNqrYWSm;ZBwxt!p08EizgCt5AnUe^3P-6NGdle2g9lIFf+;QGd{WZjKjP$rnLsc8`Ud!eK)zKXf7*4DJm zS4M)A*;^r@*oi;n1={oeQs;4laCnug{0jAI(h{dOSmt+-X~)fWL=w&ZEG&XD-Klxy zc^{ZF`G(6s&S;m8LmV5!1A@0Fs-&uybAp@{b!=u@S}SGo!$Ok&(>36k>2B!zq2Z>P z0)IYo_S8ZoFl;T)w{zQEYTwAMM6RyH_SDmzlgydtfqH>38SsaDcZVw!y8A> zT9g(S<=0gyawi0o6r`68!#hP-GHrLrhA>_;*s;xnWzKirm?)^4YKobCD9Eu{_)t=0 z+1mG@RDvAuG4DcM@r3R*bu2s!ggjxI)RyKfT&JpIV?=-g8^Y_?ua9~HJ+S=FL*6Bc zycZW=X^MtnC~@(6yFoicrdvF5c%C8?q5fGd!{f6w>%Q0(|HqYbTpO5ledq3&$aR7@ zOdQUk$u40qFt6ui*E~q7r`6S{ganZTyYsA>ZE?yT<3-#7xr)t8#*A};mW3&T3lX>-2ko}f zVHnCb1^*!$mF2yPG(()7r@k>bX(nhX2&{PZ+G^*qE(}_39F8(e;xskH@#ctdS4;6A zxt;=}VIAgPlfS6Ct7nQWRB=NI9+#_-g zKIzLMjkx0E>0GnJ{KzOToAg!$%(-O+CjcGh5NGu8>!{kVhOMQj*pe{ixeUYH8XX=^ z?Y{ZRd@s5U$?Q@~@P2g-1Dbxc6;`u;5VG;$C{VjJPGT2Wl=`{pJCP){YQg~wvbUG2 zA(~l((rrdE-=44b^U5oYTKL*|q(-~^WXPykp@Ry5scYZZ5E`sdx?jz5F21_4?JoX; z?>^<(cfUg(3jrO@5|20;-QVAlwLW+MNL8VmLCu6OH+8!~-s211R_cWr%TDbw{PUXp z;^)K;V)M6zA}-x(&`_jh0aq4 zP8e^oXNyr;%(e#D1%sIR+mcY`VHzYwCttuAWE?akVFTpV6OU zA*L^k1+?V!v8ACwLC#m+KPmDf4OiI?+8O~yu3{ih8(T;~*4I5f1Q=G2n zm|~O(=$6ZYA{CXQc{pn!T3TwCm*8QTHw&V1l3M1El}s=M(WP+R@atO+HL<$2H8PpZ zwQ`5p+uIXb)B1-Ew&^}QJ|V%|2CcsRiHBD<3lBlO{q>tt_|*kt`vFXRXpoN|NP(=?TPdsG58cX zT0V9V=eA-_5u~Wa5JXav`}Wg9Q`ZmgWo%cMFMRC?MJwOM67k9gNW2!em%W-}HJY#e$iFg)NrHk`~BF73{4AEfrh_|nEQbT-P zgY97nG%VvBa`2uZFww^cC7)DoG&5Ktzp$grt+w^%F)KDNv8ILyD3ZBy?;edcjT~^= z^@bMfEGbVY3I5rQzFHkz4Bsj*Xlt`gfMs9Zm}Ifv8a~}nU*&(|vOc(0BkOMIR83BB z%2sY$DT$ij!GmN_Jzmv+uNKjN#t_O}T|ZS?WQi23NmUbJwBI+(T=s4rc$A9t_cFN2 z~W2>$%3fs0HEt7yb-xJdMx7Hb$nd?6v(Px@k z2EDI_ve59Q4smaugj11^8{=;j0w+cjRim{K?co> zGqJw4RjKKia(RsFxops?A z`PGHO(wCNU;h1GY3+uRyS&G>n$MePw^W>H>hy@l6#9_itMXhN{YM7L1E zfK^9D$N!&sn-MqCBY5s_0^A?} zk$eiRuW=5B6y_I~gKFD?&JOmz12lR6f|{{>qTBw&lDH2%k%&T~wGAQ%+P8q!P}Vu) z&d4uKJsO)7r>d*K0h@6AfbagAO29CbTF5c4QP@mOudd(iOn?1A?PsWL$~ zb3#}lP#%csVOPj1g#9));!*(MT4vXDxYp2=YXg5(0sw!#*=_{5_H~a30PyE;Bs&0K z|0Tr?066&z3IO=aKc;sA{{GiFD*)ieztgK5nev^0td>vjSOs6m_yLAjF7A=@B&Rtm z6Rkv4b4O~tY}oUdY6)<0f@$b7r5?ERCF8*e`r^cfV-ySX$e7eWzf$hX#gwM7{m> z2vNVx&Z()RW^+k#z8=Md5F5hq@UT?Bc1QNzcZ-1m)0jR>ttwjd6og!4p?R{px<;_> z<`*vC0~2@-RZsnw6M7oUZqUW!CCT z*34(*CWip+EUg@b_qAErn`XOzi+^43)R-WM$om#I_;xNqm+G4gE4_cDIAqtZU2wW0 z!MZZXOT1W?$X2~yyKxu4vi=g8@8S^(Y0s1t_nDh5Jx0BPB&Nc8rM&^6_DX zGgQ&Z$r2&N-Ok!txIzk(<+&$Abn|`Dk>iubc5j(jF*f7iZCty8N(v4Lh>8qqv%K>1 zEuNntTI3AsvjWebS4ssrvd!fYcgm5_*2|tT3ybC@`5i08MqtLlyu^A#C)E{B>u<{S zAb;aO>5JO$hyxri3Vy$?CT@%9h{ay$cxUVO*khd%Ue3Wz2+n3CX z?X75H@N_Umeu?tBLgZs7fjw$-jKz%K z#UEe4u9m20%`m_El{twzB)q&XxmbkSTsjXeFBTl~^Wss{X*#aUbf%OZi%0sD{P?u! zUS6I{qu_gF@BP*MrL=+OK1mCE&Fnz-TPj)P=M@;p^vvI1jK>Q&oU-*0Hbk#!Gw;Iz zA=_1`y>v}#uaWrA@b<0WQJ8f0{be@zMD)8hZeCtqYHI3Y*KzAyK^NH`JgU6rAMBxI zQlr_?QLpB9sOgW()46D=2ShPg*T)E9q+)(te2v|oV#cjT={IJD{1MK%mJC+6rL74< zE|HJf*A!6|R>Q3kQ*S{rq^uQd55D%ds#9i_=#gh_y@NcXRhnVdd}+dQv8FU-^gA#y z%E865geYQnP$u(nqAh{Gwi+aj8Xo|3`iG4PNiq6-sfE{TR zG!ArliXJUnNw)`g=Bx}puO?oe(WwhiQG9kmJ^W~_h^N%g;a!4Gz~nu08v^*CFYwCS zUEy9#4%EWg9xWLYgirX;tQdZ zSN*;6;8&y9L8R529eoE-t0)B*G2Ncx9uedmhLn$if*TLGZpejcAUnG=He=D7T*}qu z0gZ%ks(_v$Ap)6aEcIEre6=NH=DjgZK1CyTV6@XVf!OxuYI3u8+!O|n?cBI4ZFrm> z>}5kr=ttRCwPE~TOz;CI_<^8O>J(BDr%@n!B!jV z2r+o0u-G>T#ljUl%igHLRI|B}17iry#d}Osj_9Veq0BW!Vhcns2MdMf#a-$`N@8E3 z%G1fo$-UM9G9jKDoSaRZH?y}7>zb9eMTMO_d6ER9gEwc*!qe8@WD2zPRBB@M`Y)d! zwEN0kQ3q;_N3iEc&e-hPW1jR}P=yzYzt7oPJCtXR-5&OiWtBN)>NG&@2Wxt^obw6N zzT*Qk^K4mbO84!`??DzpjT#{%-F%OEZPEU=s7-EZd9a*@$S^E~E-6F{B(0L!=TUgo zJm(O5fG%G;WCrKZG>?9>p8nM@o^zo?gA?%P-+IgPR8Na`1J@VYN^aL#TQ_7awiP>k z>zq`lV`iFO(3Yb37ZVe-x9{D>Cnm&wm7+uQ)UGDGI-}>T_+^b~zSEpW%?;hZcRIyO zR*t#qZf)(d@WHSGrf*2zpbD&VdI;sE9)hMtLXn@Rrzh0=)L5b5d3{->8%G693wpPF zK_kku2x0^6Zp^glKEh zBSp1|%qq^%3yh?@9$!9+7~N+>nlZ70Dly$0=>CbWwTmOY?^G-L@HD*;gjMESZdq{T z1zEnckMCquuKkn&zo~nD+I+AQqAz7oQSZ9VunToqnZ;-Zv%kM1;`L3MR5v!=fqdck zyZ`y~DN>%7v|Yw>l`U!)NG(`RAylQ5;t3%%IbZy=(1%~$u!@}T4aZDH8(F2z^qeVt z;aER%-qXq{YU$UzQ~E?DD>y8m!p}|K>R;<2AAMbFuGQVO_AwMKVNSIv-Szb`{EoiQ zOBd6Z*Qui2m^CEXJ2t@MYUIf6Xs5iIKo8g7*gE{-rK4XHT2p&_Zaa~R@;mCFf?2fL z2~>Y~DTR`_d^v9Ea@^`q;v}eZTB|dCeP)qUY%DoWAQB>aww0M;S)(Q9Z)^BB$*yaA zKYW=60;(@UMNp8sXt+t=mBh`nfa^wvZGtnb1_+Ju8N$HRxu(ycx=YXzfr6j>JY=Z7 z`Gxx0h8zimL8L<%qe^1r1OYaX7;;0$jV|WNS<817bCUkgb!jldsT)nVZK$$9%O{l*&rSr8WCN zosKNncK7ocdZI1$)nbGtoM;DRYU(`|ZZd#&%sTzZws^r{>RYqco{_P1tZaB$e@W~z z+!=TE%~RhJ_}01YNh5gs_Ioi3_odF^E^2aLiB<^nw~sGc*XHLJ$D0-c0FBvNqrYWSm;ZBwxt!p08EizgCt5AnUe^3P-6NGdle2g9lIFf+;QGd{WZjKjP$rnLsc8`Ud!eK)zKXf7*4DJm zS4M)A*;^r@*oi;n1={oeQs;4laCnug{0jAI(h{dOSmt+-X~)fWL=w&ZEG&XD-Klxy zc^{ZF`G(6s&S;m8LmV5!1A@0Fs-&uybAp@{b!=u@S}SGo!$Ok&(>36k>2B!zq2Z>P z0)IYo_S8ZoFl;T)w{zQEYTwAMM6RyH_SDmzlgydtfqH>38SsaDcZVw!y8A> zT9g(S<=0gyawi0o6r`68!#hP-GHrLrhA>_;*s;xnWzKirm?)^4YKobCD9Eu{_)t=0 z+1mG@RDvAuG4DcM@r3R*bu2s!ggjxI)RyKfT&JpIV?=-g8^Y_?ua9~HJ+S=FL*6Bc zycZW=X^MtnC~@(6yFoicrdvF5c%C8?q5fGd!{f6w>%Q0(|HqYbTpO5ledq3&$aR7@ zOdQUk$u40qFt6ui*E~q7r`6S{ganZTyYsA>ZE?yT<3-#7xr)t8#*A};mW3&T3lX>-2ko}f zVHnCb1^*!$mF2yPG(()7r@k>bX(nhX2&{PZ+G^*qE(}_39F8(e;xskH@#ctdS4;6A zxt;=}VIAgPlfS6Ct7nQWRB=NI9+#_-g zKIzLMjkx0E>0GnJ{KzOToAg!$%(-O+CjcGh5NGu8>!{kVhOMQj*pe{ixeUYH8XX=^ z?Y{ZRd@s5U$?Q@~@P2g-1Dbxc6;`u;5VG;$C{VjJPGT2Wl=`{pJCP){YQg~wvbUG2 zA(~l((rrdE-=44b^U5oYTKL*|q(-~^WXPykp@Ry5scYZZ5E`sdx?jz5F21_4?JoX; z?>^<(cfUg(3jrO@5|20;-QVAlwLW+MNL8VmLCu6OH+8!~-s211R_cWr%TDbw{PUXp z;^)K;V)M6zA}-x(&`_jh0aq4 zP8e^oXNyr;%(e#D1%sIR+mcY`VHzYwCttuAWE?akVFTpV6OU zA*L^k1+?V!v8ACwLC#m+KPmDf4OiI?+8O~yu3{ih8(T;~*4I5f1Q=G2n zm|~O(=$6ZYA{CXQc{pn!T3TwCm*8QTHw&V1l3M1El}s=M(WP+R@atO+HL<$2H8PpZ zwQ`5p+uIXb)B1-Ew&^}QJ|V%|2CcsRiHBD<3lBlO{q>tt_|*kt`vFXRXpoN|NP(=?TPdsG58cX zT0V9V=eA-_5u~Wa5JXav`}Wg9Q`ZmgWo%cMFMRC?MJwOM67k9gNW2!em%W-}HJY#e$iFg)NrHk`~BF73{4AEfrh_|nEQbT-P zgY97nG%VvBa`2uZFww^cC7)DoG&5Ktzp$grt+w^%F)KDNv8ILyD3ZBy?;edcjT~^= z^@bMfEGbVY3I5rQzFHkz4Bsj*Xlt`gfMs9Zm}Ifv8a~}nU*&(|vOc(0BkOMIR83BB z%2sY$DT$ij!GmN_Jzmv+uNKjN#t_O}T|ZS?WQi23NmUbJwBI+(T=s4rc$A9t_cFN2 z~W2>$%3fs0HEt7yb-xJdMx7Hb$nd?6v(Px@k z2EDI_ve59Q4smaugj11^8{=;j0w+cjRim{K?co> zGqJw4RjKKia(RsFxops?A z`PGHO(wCNU;h1GY3+uRyS&G>n$MePw^W>H>hy@l6#9_itMXhN{YM7L1E zfK^9D$N!&sn-MqCBY5s_0^A?} zk$eiRuW=5B6y_I~gKFD?&JOmz12lR6f|{{>qTBw&lDH2%k%&T~wGAQ%+P8q!P}Vu) z&d4uKJsO)7r>d*K0h@6vRV$)UKvfG4#Z=`00*18ZKm{tKP(ut;L>Y`gB14EF43?Il zB2oq+LI|-C2m&EUAYljz3W$u6c}yZh2qX~ZKuAJ5b=SRX-G}?w58dnfaMoGpJ7=A} z*KhCr|9|H@`{BZ0opfU>Ty zW&wb&0pN3IF5k|X7vSPxYs!YD^xuB{;>Z1mKK~)`^JAZ#NxB0o8Mr@Ci}MNhGmN-% zgYKO%q5l1aSI&`v@beK?MK<1apYjp!&n{<%eSYxQUw>0?J!rmBVpwgoIIGgMnU9^_ zaB-N*AoGFiIZ?-pOG@?t03TI$QBk68x~5My0Re!|zL9SOeEoTZ0RV930RaH`{D-ma zfPZ{3VFm!){bC&e_~O@UJ;0r>|BW7fP}&)<2jG_I34NFPR92$R$}o9Fl?ms^l_YEo z`qIJ+wEh!WI<<$O2OuLaV6kh{Tmyi%xx+FeWDKM&Nb@SV)oG4xGr_6{M(tmxZNGD> z3AhL>AFN^uHv+M3q5v$K##aT)@OZ8iOlY6VF~b0I=T` zp}X^r%bXz8o&tnjn=l*d(S*k+*P|loc zhA6^(wzx-IggNYp|#k+jT1RXITuzh5Y?N zh)nc->`%Ijn~8H(Q0<9MH)7yy5An>|1VI&Hp-e!a#%?w!SB&yeKd<|1xC(3)dT_Rt zMg{j)M_U~|suUlkv2~FJ?M9J8(dDf8X?$=fY;pBa2$WotU!i#CDnvYWxGKFchP!%c zQEpRy)Hm{jS6vv~4os{#*}u?r1$gZ(F|mujpRj3v6rs)+7-z!K4>4CfJzq~Rmy{iF zkUzYuz8lRSskei;c!mD^y5on-ec~`wyxwP5mCpTH1p#yOTUR`q8+Q5;J{jbg@M|Zff!RaErGOfz1o&Kh9~C;*bMlJL=*EqG>3$jn;Ur`tAp$E=2CfwLDFaJ zrIh?e5bY=YWGXv1_S&2!N#A|Fl&L_g6(J>hV-6rN(c)-(d+Yv)%e|Y}<8GJM|I+FN zJ*`~zbp0x3pkW)BI5$=|SlrX&p5)JsQ!d}V8x2f8YGtLGFF2d#vb?A=k2?i9sC$Qv zP54-T1dr=X!!$YZ(-H&PS}tjiE#1$1`_=;N%?eu*=C_6pl(u$xyn!|iu1berDmqOt z#@M-TR~ANOE52v{izj<5X6&`=LJylC;A-kaAfRT8Ex<8zBbN6?-0P~nW7>Dia9Za4 z2-n|jU(Sh1=X#%J*C?xDPkPu54Bu7B=4)*=ALexH6QdFiPdJacvP zw(dBWGdH=L6c_X6Wy;O1)6-RAU~=b;NJV9)1OiehYN9f|5;SI*-@HcmfwpGO(tWDj zT5pQvm4s~;7%m}qDPAK;IkgYIpC-VR{<;a(k8S%62v2NgvJce}d|Cw4~hp&N^hi8;a6aW49Vm;CF*;hHuR=Fp;zQO0Ad|a{aZoYssf8%B3b|Q)c*(<}x_n`gDl5 z44D|YHFQ5Hv^d>D891Iz@5+s7Zz5*%5nf*XQZ;lZh_kp%GonWF)d=@*S9boS(Glhb zp*<5QS?=E&R3|9(qQ1SjA#Tv_jxdnTH#!<>7*q=^KKJ0~Ymby8&-$GV{#92?^h zOE57#BVw?mJ!Ys-z7gd;z#uykP~xpYep!0f=|qpED9K(sTR%dBKC|7bByBE(cMaQ5 zr9Gqj1din!YU=vz-fP;ROTz}X)e=T~nG@&MasfRNcWc~c56ORZ=q-kKoB^?Np4?J~ z%ni>_QhZXKUpD7ugoeVG-`yB04-ghUYOZM?7)bD_K$13(lP(uZ5p9W=Jzp2*=TBwu zI5EAQY_r6@65C74vVAlCzk|zJwOnOSF?J-py zZJ(sSbAQZ_;~(S6e;s=1sS~{8TE_g*y7X-NUn{xPZcB)a5V2|~WQhfs_%v`z9OxTyBY?`P zL1eXt+mQk-S_Qlt!h-W2d@pQ^I&YYkGVqvy2_o%tG|d*Dc2uUYFHx%UmjwsJu4`Qk zU{D0AUxTsbeY`_|GLt1@9Z@}}tmw@RZ*;*)usGS5%0w;a?+(tBAsSDv@Lp#1sE zx|rc_AO{DI`XOoqTYJ(yfb~9nZoO(gVZib1bSIfwh;YxeHeKJi#0=(}VJF{*mVKpA zI4@A5rFTwrdP@pGkeu(Yzk7ICZ7sNGU*FTyV*!5W;)G_zZ{nmQFSTg~2UJ6oCN;rW zY)=_VF-tgMwmCIHgu#%iQQ0Bu;i~xhfaJYs__KP^ZhYhJqj58I!;?@Nf2hQ>W!llm zg|&Fk(U8r%7}*Xb_cO>(N$F3?=})ts?zJyUCu@+3hm|*S)+TD2@s3%l)SQz+x!mNn zgYp1iX>pNIRf|}wIF9tCRxoN_Ky<#pV>@l1el~02{qQ`yi@QEGeL%apW02NKQjH3? z!mx~in$%_P#&Fp1sS-$lLd9%Pw{Xl0+3H;&4RFqFZRBStYqB(TaY2|RJ!bo$mu37& z9R6>CX@w7+dfG=mYG%58j2KA$k|~eH4nJmKwAs&Z}8)vk*ILUL~ND5GG@#~;dk`+GRl=E=+K?LV^s~Ko4zGKEG zF>0%30g@dz2ZdVe+-0{GT~B{i8a7mZwP~@0FxOYF-BS6-i_38$@~X~BW}jDeQLf8f zW?J<2p{rotw6J|*u~?~ZY;AM&KBjsF5UMx1I3F&Y$J zfl)Zl*VlwqU5epwRV+hjTRhZ1_lp}(TD z{0?7VkOhYib*C+Y+W%aoOG>a;#>?hch!(HXvrdFQ?=Ssm)e>UVr&>lS9`(c0Loytk zLPu(C3^V#yGGT|nk>~h3;is7!YqLS18}NnKV5{A7;m1(thD?S(*#ewE-;Q0D1s?)e zL}Fo-4$K&gr5PCB!xzOg{c6dJkLzyG+qa6Q5avD4i+Z_Q1n;hA3npIYJQuj-Cj?CI zFeW4=oHbm4p_ON?lR(JrmYQrg^oj; zuC1J)^YHV!#6T}yn345bLEf#@6i1zIrF)^9aQS12~;h|F-sE7Y>;Sp6Q z)C(E?aS-$ny68GdMGPeI`lo52zAj| zizBpcB@FtNn#hK%dp9v-q15dPfy$LFjJtj_L{ryAaXJJ(h7)q4t%bGN5=(d9>G#~o z`4J0nPwWr#?uoh2GhiWu=Bw_a2R3fBC#HuXu^>x#O1b-+c{@@LC}#Z6b#dM6c*g@e zp*=u2=@LO=R1$jc+L`^0sx4n-^uiaqe;4A@tm9_KCNM(wV(PRteJrGDuHqyt(fA@K zfM)+jYn?1^*qr@f9io0Q0W*YwYSCU!U4wJ|PPomxk67n*5*@#!)0}S3xDoGI+Dw*q zEV+QMrdOg8C_v{pjcUc>TlF z#PQ~BA-R`4m&Ds{ryt^pSm8IhINh?Zay6`9OoQ#Am3p%aTua8XQU*&2&u?COPD#(` zK4r%Y*1pX$uswz09l~kyl&)0xm|9{-ZH6VX>lbyo+}2DjqU77+cLv|eKUg2OMD9>8 zluOJ8e01}XZ}6=U*Ho%0qiWieqlF5}&(PueZk=Q1MDjUjR42-)>5dA4;UBtC5S4;M zr~B+#Cjo12uUc6quXiw3FxSa_{L=xXq{bFIl+Ux?`f9nAIioiGTI-8=hX~&6NFk)%(8w0y5I5u*lrFhiewq|^&P>>?CMfzb^s3i2LMak{>t|J?Vj)!z* zuPDbXz;14tK_MZ$t#>|PV&!NV#M4s>9Wsr%F)p#pFz=)f(Fab}XdT(t#@qIS+*><3 z)cq)$uk*y_TYB~!OIEgGWL+K8v^GD=mW>`>BPH7%IZ_lquWoB=(`BEP=>BWuK8^+v zjzA#5MBj~3cajZKSP&)Q2X}1nWEWyaU(4imnyr7zSy;)5UHFpeRa#~YDynwh6=WcTj5Q|BjQm|P%=GbJoO!Ekw<7mJ#SCgVIS>dc z+L(ygwQlTURpN0$5+3<3S9nd5NI5vlIzpg@%RI6XTdGOcR+=`h$@9FvG&pzVgL;S6 z04pp9`(_&?X>L@Pu<3gB5*n5uJh&@cKX;%aV&KEQT_JY#(y}rS;?$sqeEG7McDnn1 z6bbf+USdYaTJ%`&e{635XmEP9#Rp?vFQ0x50)7J~>MR65HJ)5}b&WB?JnP>Wn>DFd zRa(C!!F9Q}psKbfVBH#%cD!8Rs1)7TStG?@9ydM#7s}M z954xuckgcBTyO|n9L}1p*$Pg$x6?qdp4^^*Yi^}co~Bdc8@8#Ck)BfIlcI1GxOKO4 zv`6nmXi4#OhhO=%pxIg*ro{F}{XB{P#)Vo}ULNr>HK!uDGdtTn&)CQ}8r)f9&ZuAR zQOu8uqSj}gI*gt8*l|W&0>{miYXmqUx5WTA`u<^+AO1==)BKs&mhAJ5v$YQUqpmSS z4_hBltmb96q)PaxEGk(k?W^ccL?}8CHaDNhoP*Yr)_JehtEy=bE~foutXQPltk{lz z4h-ZS;%Sx~atC~Q=y!P4$=QA<_;6!VYthydJL0ymL-_55g;)*Dfen>y0?J!YP5<8& zv0rTbdeu&%aVD#&dE3=Jd)6B=(Jh&x+0J-&!~X>2Qv#C&=zrINd}^uDq2)LlC%RNU zX)4p^``n8z{VRZczgmy0mt>B3mY(ql*GVr(5IlbB>HwL~29)FR$=)9clfO8?Pp@sY zv0ZG)bz$>6?Rq!?6v}9ybCJ)z$;~O+s&HGw^x^-i<|T^(|K2sc|D<~3r@nq7@QJ`D z0-p$cBJhd8Cjy@cd?N5KCa~{;vOu>>;IlvW0{jR5k^dLd_(b6UErBNO_L249Dz066 TGN;=p0|1}*I9K+=)w}-$Q=GDd literal 0 HcmV?d00001 diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-high-contrast-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..2f505621529ef06971dbeae0d2ba69433841d802 GIT binary patch literal 9084 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 TGN;=p0|1}*I9K+=)w}-$Q=GDd literal 0 HcmV?d00001 diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-tritanopia-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Render-Links-light-tritanopia-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..277a20c467a2ecb5ba07601ecf587214ee33ad1e GIT binary patch literal 9046 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 TGN;=p0|1}*I9K+=)w}-$Q=GDd literal 0 HcmV?d00001 From 980c645feddbd6edac591f39f9ee76e03a09ed5e Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 21:34:09 +0000 Subject: [PATCH 07/13] add number --- .../react/src/Pagination/Pagination.features.stories.tsx | 4 ++-- packages/react/src/Pagination/Pagination.tsx | 7 ++++++- .../react/src/__tests__/Pagination/Pagination.test.tsx | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index 02ed50fd9a2..feb0993689c 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -45,8 +45,8 @@ export const RenderLinks = () => { e.preventDefault() setPage(n) }} - renderPageLink={({content, ...props}) => ( - + renderPageLink={({content, number, ...props}) => ( + {content} )} diff --git a/packages/react/src/Pagination/Pagination.tsx b/packages/react/src/Pagination/Pagination.tsx index 55a8df57b48..738d96c56f8 100644 --- a/packages/react/src/Pagination/Pagination.tsx +++ b/packages/react/src/Pagination/Pagination.tsx @@ -147,8 +147,13 @@ const Page = toggleStyledComponent( ) export type PageProps = { + /* unique key for the page number */ key: string + /* content to display for the page number (number, Next, Prev) */ content: string + /* page number */ + number: number + /* default styles for the page number */ className: string } & PageDataProps['props'] @@ -187,7 +192,7 @@ function usePaginationPages({ return model.map(page => { const {props, key, content} = buildComponentData(page, hrefBuilder, pageChange(page.num)) if (renderPageLink) { - return renderPageLink({key, content, className: classes.Page, ...props}) + return renderPageLink({key, content, number: page.num, className: classes.Page, ...props}) } return ( diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 6e5373d43d5..93f79b2c049 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -31,8 +31,8 @@ describe('Pagination', () => { ( - + renderPageLink={({content, key, number, className}) => ( + {content} )} From e746db34590ac4cba446379ba6d747ff56ca5d11 Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 21:55:27 +0000 Subject: [PATCH 08/13] dont render link for spans --- .../src/Pagination/Pagination.features.stories.tsx | 6 +----- packages/react/src/Pagination/Pagination.tsx | 14 +++++++------- .../src/__tests__/Pagination/Pagination.test.tsx | 6 +----- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index feb0993689c..9c83a815d47 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -45,11 +45,7 @@ export const RenderLinks = () => { e.preventDefault() setPage(n) }} - renderPageLink={({content, number, ...props}) => ( - - {content} - - )} + renderPageLink={({number, ...props}) => } /> ) } diff --git a/packages/react/src/Pagination/Pagination.tsx b/packages/react/src/Pagination/Pagination.tsx index 738d96c56f8..13d74f7969b 100644 --- a/packages/react/src/Pagination/Pagination.tsx +++ b/packages/react/src/Pagination/Pagination.tsx @@ -147,13 +147,13 @@ const Page = toggleStyledComponent( ) export type PageProps = { - /* unique key for the page number */ + /* Unique key for the page number */ key: string - /* content to display for the page number (number, Next, Prev) */ - content: string - /* page number */ + /* Children to render, typically the page number, 'Prev', or 'Next' */ + children: React.ReactNode + /* Page number */ number: number - /* default styles for the page number */ + /* Default styles for the page number */ className: string } & PageDataProps['props'] @@ -191,8 +191,8 @@ function usePaginationPages({ const children = React.useMemo(() => { return model.map(page => { const {props, key, content} = buildComponentData(page, hrefBuilder, pageChange(page.num)) - if (renderPageLink) { - return renderPageLink({key, content, number: page.num, className: classes.Page, ...props}) + if (renderPageLink && props.as !== 'span') { + return renderPageLink({key, children: content, number: page.num, className: classes.Page, ...props}) } return ( diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 93f79b2c049..2dbe9098026 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -31,11 +31,7 @@ describe('Pagination', () => { ( - - {content} - - )} + renderPageLink={({number, ...props}) => } />, ) From bc801020d94ec317aa118dd242cc73b9539f887e Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 21:55:51 +0000 Subject: [PATCH 09/13] fix test --- packages/react/src/__tests__/Pagination/Pagination.test.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 2dbe9098026..0c54569847d 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -1,4 +1,3 @@ -import React from 'react' import Pagination from '../../Pagination' import {behavesAsComponent} from '../../utils/testing' import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' @@ -35,6 +34,6 @@ describe('Pagination', () => { />, ) - expect(container.querySelectorAll('a').length).toEqual(11) + expect(container.querySelectorAll('a').length).toEqual(10) }) }) From c44064932caf654c9c9f248a9961362da8b71823 Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 22:22:11 +0000 Subject: [PATCH 10/13] readd react --- packages/react/src/__tests__/Pagination/Pagination.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 0c54569847d..887720afbd6 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -1,3 +1,4 @@ +import React from 'react' import Pagination from '../../Pagination' import {behavesAsComponent} from '../../utils/testing' import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' From 2345932158d1e9f1426ffc0b87c59adbcb69776a Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 23:35:21 +0000 Subject: [PATCH 11/13] move mock file --- packages/react/src/ActionList/ActionList.examples.stories.tsx | 2 +- packages/react/src/Button/LinkButton.features.stories.tsx | 3 +-- packages/react/src/NavList/NavList.stories.tsx | 2 +- packages/react/src/NavList/NavList.test.tsx | 2 +- packages/react/src/Pagination/Pagination.features.stories.tsx | 4 ++-- packages/react/src/__tests__/Pagination/Pagination.test.tsx | 2 +- packages/react/{ => src/__tests__}/mocks/ReactRouterLink.tsx | 0 packages/react/src/stories/deprecated/ActionList.stories.tsx | 2 +- packages/react/tsconfig.json | 1 - 9 files changed, 8 insertions(+), 10 deletions(-) rename packages/react/{ => src/__tests__}/mocks/ReactRouterLink.tsx (100%) diff --git a/packages/react/src/ActionList/ActionList.examples.stories.tsx b/packages/react/src/ActionList/ActionList.examples.stories.tsx index a533745d36b..9c421bfe03c 100644 --- a/packages/react/src/ActionList/ActionList.examples.stories.tsx +++ b/packages/react/src/ActionList/ActionList.examples.stories.tsx @@ -19,7 +19,7 @@ import Text from '../Text' import FormControl from '../FormControl' import {AriaStatus} from '../live-region' import {VisuallyHidden} from '../VisuallyHidden' -import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' +import {ReactRouterLikeLink} from '../__tests__/mocks/ReactRouterLink' const meta: Meta = { title: 'Components/ActionList/Examples', diff --git a/packages/react/src/Button/LinkButton.features.stories.tsx b/packages/react/src/Button/LinkButton.features.stories.tsx index c4b618d51c2..6e7cdd8f982 100644 --- a/packages/react/src/Button/LinkButton.features.stories.tsx +++ b/packages/react/src/Button/LinkButton.features.stories.tsx @@ -1,7 +1,6 @@ import {EyeIcon, ChevronRightIcon, HeartIcon, DownloadIcon} from '@primer/octicons-react' -import React from 'react' import {LinkButton} from '.' -import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' +import {ReactRouterLikeLink} from '../__tests__/mocks/ReactRouterLink' export default { title: 'Components/LinkButton/Features', diff --git a/packages/react/src/NavList/NavList.stories.tsx b/packages/react/src/NavList/NavList.stories.tsx index 019dd67ba6a..3cfd0744d5b 100644 --- a/packages/react/src/NavList/NavList.stories.tsx +++ b/packages/react/src/NavList/NavList.stories.tsx @@ -21,7 +21,7 @@ import { } from '@primer/octicons-react' import Octicon from '../Octicon' import VisuallyHidden from '../_VisuallyHidden' -import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' +import {ReactRouterLikeLink} from '../__tests__/mocks/ReactRouterLink' const meta: Meta = { title: 'Components/NavList', diff --git a/packages/react/src/NavList/NavList.test.tsx b/packages/react/src/NavList/NavList.test.tsx index 2c5d687fa67..1c6dca20932 100644 --- a/packages/react/src/NavList/NavList.test.tsx +++ b/packages/react/src/NavList/NavList.test.tsx @@ -3,7 +3,7 @@ import React from 'react' import {ThemeProvider} from '..' import {NavList} from './NavList' import {FeatureFlags} from '../FeatureFlags' -import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' +import {ReactRouterLikeLink} from '../__tests__/mocks/ReactRouterLink' type NextJSLinkProps = {href: string; children: React.ReactNode} diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index 9c83a815d47..2756b872bdb 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -1,8 +1,8 @@ -import React, {useState} from 'react' +import {useState} from 'react' import type {Meta} from '@storybook/react' import type {ComponentProps} from '../utils/types' import Pagination from './Pagination' -import {ReactRouterLikeLink} from '../../mocks/ReactRouterLink' +import {ReactRouterLikeLink} from '../__tests__/mocks/ReactRouterLink' export default { title: 'Components/Pagination/Features', diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 887720afbd6..0c9a04ee358 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -1,9 +1,9 @@ import React from 'react' import Pagination from '../../Pagination' import {behavesAsComponent} from '../../utils/testing' -import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' import {render as HTMLRender} from '@testing-library/react' import axe from 'axe-core' +import {ReactRouterLikeLink} from '../mocks/ReactRouterLink' const reqProps = {pageCount: 10, currentPage: 1} const comp = diff --git a/packages/react/mocks/ReactRouterLink.tsx b/packages/react/src/__tests__/mocks/ReactRouterLink.tsx similarity index 100% rename from packages/react/mocks/ReactRouterLink.tsx rename to packages/react/src/__tests__/mocks/ReactRouterLink.tsx diff --git a/packages/react/src/stories/deprecated/ActionList.stories.tsx b/packages/react/src/stories/deprecated/ActionList.stories.tsx index ee9aceb076c..f3a5303ab22 100644 --- a/packages/react/src/stories/deprecated/ActionList.stories.tsx +++ b/packages/react/src/stories/deprecated/ActionList.stories.tsx @@ -19,7 +19,7 @@ import {ActionList as _ActionList} from '../../deprecated/ActionList' import {Header} from '../../deprecated/ActionList/Header' import BaseStyles from '../../BaseStyles' import sx from '../../sx' -import {ReactRouterLikeLink} from '../../../mocks/ReactRouterLink' +import {ReactRouterLikeLink} from '../../__tests__/mocks/ReactRouterLink' const ActionList = Object.assign(_ActionList, { Header, diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index 6bc7f1efd9b..2c71b2e65c6 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -11,6 +11,5 @@ "src/**/*.ts", "src/**/*.tsx", "script/**/*.ts", - "mocks/**/*.tsx", ] } From 5fdf1f3ba49f17ab80ed25c6b707f6f9df367463 Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Tue, 25 Mar 2025 23:36:04 +0000 Subject: [PATCH 12/13] readd react --- packages/react/src/Button/LinkButton.features.stories.tsx | 1 + packages/react/src/Pagination/Pagination.features.stories.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react/src/Button/LinkButton.features.stories.tsx b/packages/react/src/Button/LinkButton.features.stories.tsx index 6e7cdd8f982..be38f8319de 100644 --- a/packages/react/src/Button/LinkButton.features.stories.tsx +++ b/packages/react/src/Button/LinkButton.features.stories.tsx @@ -1,3 +1,4 @@ +import React from 'react' import {EyeIcon, ChevronRightIcon, HeartIcon, DownloadIcon} from '@primer/octicons-react' import {LinkButton} from '.' import {ReactRouterLikeLink} from '../__tests__/mocks/ReactRouterLink' diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index 2756b872bdb..a471d49c339 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -1,4 +1,4 @@ -import {useState} from 'react' +import React, {useState} from 'react' import type {Meta} from '@storybook/react' import type {ComponentProps} from '../utils/types' import Pagination from './Pagination' From f3b97e22f8cd2909a48d1304e641dc7a25e1795c Mon Sep 17 00:00:00 2001 From: Hussam Ghazzi Date: Thu, 27 Mar 2025 17:55:27 +0000 Subject: [PATCH 13/13] rename renderPageLink to renderPage --- .changeset/cyan-lights-try.md | 2 +- .../react/src/Pagination/Pagination.docs.json | 2 +- .../Pagination/Pagination.features.stories.tsx | 2 +- packages/react/src/Pagination/Pagination.tsx | 18 +++++++++--------- .../__tests__/Pagination/Pagination.test.tsx | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.changeset/cyan-lights-try.md b/.changeset/cyan-lights-try.md index 8ebfa3d3e98..4109eeaf9d6 100644 --- a/.changeset/cyan-lights-try.md +++ b/.changeset/cyan-lights-try.md @@ -2,4 +2,4 @@ '@primer/react': minor --- -feat(Pagination): add renderPageLink prop to Pagination +feat(Pagination): add renderPage prop to Pagination diff --git a/packages/react/src/Pagination/Pagination.docs.json b/packages/react/src/Pagination/Pagination.docs.json index c2a47bb3466..1cc5b692439 100644 --- a/packages/react/src/Pagination/Pagination.docs.json +++ b/packages/react/src/Pagination/Pagination.docs.json @@ -67,7 +67,7 @@ "description": "How many pages to display on each side of the currently selected page." }, { - "name": "renderPageLink", + "name": "renderPage", "type": "function", "defaultValue": "(props: PageProps) => ReactNode", "description": "Provide a custom component or render prop to render each page link within the component." diff --git a/packages/react/src/Pagination/Pagination.features.stories.tsx b/packages/react/src/Pagination/Pagination.features.stories.tsx index a471d49c339..bec74bb1454 100644 --- a/packages/react/src/Pagination/Pagination.features.stories.tsx +++ b/packages/react/src/Pagination/Pagination.features.stories.tsx @@ -45,7 +45,7 @@ export const RenderLinks = () => { e.preventDefault() setPage(n) }} - renderPageLink={({number, ...props}) => } + renderPage={({number, ...props}) => } /> ) } diff --git a/packages/react/src/Pagination/Pagination.tsx b/packages/react/src/Pagination/Pagination.tsx index 13d74f7969b..91877eb769a 100644 --- a/packages/react/src/Pagination/Pagination.tsx +++ b/packages/react/src/Pagination/Pagination.tsx @@ -155,7 +155,7 @@ export type PageProps = { number: number /* Default styles for the page number */ className: string -} & PageDataProps['props'] +} & Omit type UsePaginationPagesParameters = { theme?: Record // set to theme type once /src/theme.js is converted @@ -166,7 +166,7 @@ type UsePaginationPagesParameters = { marginPageCount: number showPages?: PaginationProps['showPages'] surroundingPageCount: number - renderPageLink?: (props: PageProps) => React.ReactNode + renderPage?: (props: PageProps) => React.ReactNode } function usePaginationPages({ @@ -178,7 +178,7 @@ function usePaginationPages({ marginPageCount, showPages, surroundingPageCount, - renderPageLink, + renderPage, }: UsePaginationPagesParameters) { const pageChange = React.useCallback((n: number) => (e: React.MouseEvent) => onPageChange(e, n), [onPageChange]) @@ -191,8 +191,8 @@ function usePaginationPages({ const children = React.useMemo(() => { return model.map(page => { const {props, key, content} = buildComponentData(page, hrefBuilder, pageChange(page.num)) - if (renderPageLink && props.as !== 'span') { - return renderPageLink({key, children: content, number: page.num, className: classes.Page, ...props}) + if (renderPage && props.as !== 'span') { + return renderPage({key, children: content, number: page.num, className: classes.Page, ...props}) } return ( @@ -201,7 +201,7 @@ function usePaginationPages({ ) }) - }, [model, hrefBuilder, pageChange, renderPageLink, theme, enabled]) + }, [model, hrefBuilder, pageChange, renderPage, theme, enabled]) return children } @@ -250,7 +250,7 @@ export type PaginationProps = { marginPageCount?: number showPages?: boolean | ResponsiveValue surroundingPageCount?: number - renderPageLink?: (props: PageProps) => React.ReactNode + renderPage?: (props: PageProps) => React.ReactNode } function Pagination({ @@ -262,7 +262,7 @@ function Pagination({ marginPageCount = 1, showPages = true, surroundingPageCount = 2, - renderPageLink, + renderPage, ...rest }: PaginationProps) { const pageElements = usePaginationPages({ @@ -274,7 +274,7 @@ function Pagination({ marginPageCount, showPages, surroundingPageCount, - renderPageLink, + renderPage, }) const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) diff --git a/packages/react/src/__tests__/Pagination/Pagination.test.tsx b/packages/react/src/__tests__/Pagination/Pagination.test.tsx index 0c9a04ee358..e3b5acde1e3 100644 --- a/packages/react/src/__tests__/Pagination/Pagination.test.tsx +++ b/packages/react/src/__tests__/Pagination/Pagination.test.tsx @@ -26,12 +26,12 @@ describe('Pagination', () => { expect(results).toHaveNoViolations() }) - it('should render links instead of anchor tags with the renderPageLink prop', () => { + it('should render links instead of anchor tags with the renderPage prop', () => { const {container} = HTMLRender( } + renderPage={({number, ...props}) => } />, )