diff --git a/.changeset/blue-eggs-suffer.md b/.changeset/blue-eggs-suffer.md deleted file mode 100644 index 7f2aba3a444..00000000000 --- a/.changeset/blue-eggs-suffer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -feat(LabelGroup): render as list by default diff --git a/.changeset/clean-mails-accept.md b/.changeset/clean-mails-accept.md deleted file mode 100644 index 00d788b60fc..00000000000 --- a/.changeset/clean-mails-accept.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -Convert Details to css module behind feature flag diff --git a/.changeset/few-zebras-drive.md b/.changeset/few-zebras-drive.md deleted file mode 100644 index d283c99f98b..00000000000 --- a/.changeset/few-zebras-drive.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@primer/react": minor ---- - -* Convert SkeletonAvatar to CSS modules behind the feature flag -* Convert SkeletonBox to CSS modules behind the feature flag -* Convert SkeletonText to CSS modules behind the feature flag - diff --git a/.changeset/fifty-suns-smoke.md b/.changeset/fifty-suns-smoke.md deleted file mode 100644 index 749aa264863..00000000000 --- a/.changeset/fifty-suns-smoke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -Convert Radio to css modules behind feature flag diff --git a/.changeset/forty-olives-lay.md b/.changeset/forty-olives-lay.md deleted file mode 100644 index d3e44460ed5..00000000000 --- a/.changeset/forty-olives-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -Overlay: Adds `min-width` to container to improve responsiveness diff --git a/.changeset/four-schools-grin.md b/.changeset/four-schools-grin.md deleted file mode 100644 index 72c447d1a85..00000000000 --- a/.changeset/four-schools-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -Update BranchName to use CSS Modules behind feature flag diff --git a/.changeset/gold-items-shave.md b/.changeset/gold-items-shave.md deleted file mode 100644 index 3d45affb5f7..00000000000 --- a/.changeset/gold-items-shave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": patch ---- - -Move Checkbox css module feature flag to staff diff --git a/.changeset/grumpy-lamps-behave.md b/.changeset/grumpy-lamps-behave.md deleted file mode 100644 index 9ee089cb00e..00000000000 --- a/.changeset/grumpy-lamps-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': patch ---- - -catch TooltipV2 errors in old browsers as a temp fix for unnecessary Sentry reports diff --git a/.changeset/hungry-avocados-remember.md b/.changeset/hungry-avocados-remember.md deleted file mode 100644 index ffe0993061d..00000000000 --- a/.changeset/hungry-avocados-remember.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -Migrated `Spinner` component to use support CSS modules diff --git a/.changeset/itchy-paws-bake.md b/.changeset/itchy-paws-bake.md deleted file mode 100644 index 532507c7a46..00000000000 --- a/.changeset/itchy-paws-bake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": patch ---- - -fix(SegmentedControl): set global focus styles diff --git a/.changeset/loud-spoons-explode.md b/.changeset/loud-spoons-explode.md deleted file mode 100644 index a34200c9342..00000000000 --- a/.changeset/loud-spoons-explode.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -Migrated `VisuallyHidden` to CSS Modules diff --git a/.changeset/modern-icons-clean.md b/.changeset/modern-icons-clean.md deleted file mode 100644 index ac697326b5e..00000000000 --- a/.changeset/modern-icons-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -Migrate `Select` component to css modules diff --git a/.changeset/nice-shoes-fail.md b/.changeset/nice-shoes-fail.md deleted file mode 100644 index be9aa60e94a..00000000000 --- a/.changeset/nice-shoes-fail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": patch ---- - -Update the foreground color for FormControl.Caption to use the control tokens when disabled diff --git a/.changeset/odd-frogs-listen.md b/.changeset/odd-frogs-listen.md deleted file mode 100644 index 9e89ad0a991..00000000000 --- a/.changeset/odd-frogs-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -Update `Header` component to use CSS modules behind the feature flag primer_react_css_modules_team diff --git a/.changeset/old-boxes-clap.md b/.changeset/old-boxes-clap.md deleted file mode 100644 index 27abb9698ec..00000000000 --- a/.changeset/old-boxes-clap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -feat(Details): Add summary subcomponent diff --git a/.changeset/old-plums-explode.md b/.changeset/old-plums-explode.md deleted file mode 100644 index 494da343cbb..00000000000 --- a/.changeset/old-plums-explode.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": patch ---- - -fix(DataTable): export datatable utility types diff --git a/.changeset/popular-moose-end.md b/.changeset/popular-moose-end.md new file mode 100644 index 00000000000..33f808a72ed --- /dev/null +++ b/.changeset/popular-moose-end.md @@ -0,0 +1,5 @@ +--- +"@primer/react": patch +--- + +Fix `border-color` on ActionList Group header diff --git a/.changeset/quiet-seahorses-yawn.md b/.changeset/quiet-seahorses-yawn.md deleted file mode 100644 index 58b0af858f1..00000000000 --- a/.changeset/quiet-seahorses-yawn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -Convert `Pagehead` to CSS Modules diff --git a/.changeset/shy-seahorses-mix.md b/.changeset/shy-seahorses-mix.md deleted file mode 100644 index 1819269fecf..00000000000 --- a/.changeset/shy-seahorses-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -AvatarStack: Adds keyboard support to `AvatarStack` diff --git a/.changeset/six-colts-admire.md b/.changeset/six-colts-admire.md deleted file mode 100644 index 91cdb94123e..00000000000 --- a/.changeset/six-colts-admire.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -Remove CSS modules feature flag from Label component diff --git a/.changeset/slow-snails-swim.md b/.changeset/slow-snails-swim.md deleted file mode 100644 index 0e366fd6e38..00000000000 --- a/.changeset/slow-snails-swim.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -SelectPanel: Allow using SelectPanel in FormControl diff --git a/.changeset/sour-flies-camp.md b/.changeset/sour-flies-camp.md deleted file mode 100644 index 11c1801e7a0..00000000000 --- a/.changeset/sour-flies-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": minor ---- - -Remove the CSS modules feature flag from the Link component diff --git a/.changeset/tiny-fireants-deny.md b/.changeset/tiny-fireants-deny.md new file mode 100644 index 00000000000..04fdc07fd8f --- /dev/null +++ b/.changeset/tiny-fireants-deny.md @@ -0,0 +1,5 @@ +--- +"@primer/react": patch +--- + +Remove `min-width` on leading visuals in ActionList diff --git a/.changeset/tricky-scissors-walk.md b/.changeset/tricky-scissors-walk.md new file mode 100644 index 00000000000..f183fb8f06d --- /dev/null +++ b/.changeset/tricky-scissors-walk.md @@ -0,0 +1,5 @@ +--- +"@primer/react": minor +--- + +Convert ConfirmationDialog to CSS modules behind feature flag diff --git a/.changeset/twelve-kings-confess.md b/.changeset/twelve-kings-confess.md deleted file mode 100644 index 7d55fca5497..00000000000 --- a/.changeset/twelve-kings-confess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@primer/react': minor ---- - -Adds NavList.GroupHeading component that can be used instead of the ActionList.Group 'title' prop if you need to render something besides a string diff --git a/.changeset/wild-maps-grow.md b/.changeset/wild-maps-grow.md deleted file mode 100644 index e3b514572c5..00000000000 --- a/.changeset/wild-maps-grow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": patch ---- - -fix(FormControl): allow required check boxes in CheckboxGroup diff --git a/.changeset/wise-llamas-exist.md b/.changeset/wise-llamas-exist.md deleted file mode 100644 index dbd3aeb645d..00000000000 --- a/.changeset/wise-llamas-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@primer/react": patch ---- - -Move CounterLabel css modules feature flag to staff diff --git a/.eslintrc.js b/.eslintrc.js index e4e195b8967..9b76ac6ae1a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -200,8 +200,14 @@ module.exports = { parserOptions: { project: 'tsconfig.json', }, - extends: ['plugin:playwright/jest-playwright'], - rules: {}, + extends: ['plugin:playwright/recommended'], + rules: { + 'playwright/expect-expect': 'off', + 'playwright/no-conditional-expect': 'off', + 'playwright/no-conditional-in-test': 'off', + 'playwright/no-wait-for-selector': 'off', + 'playwright/valid-title': 'off', + }, }, // rules which apply only to Markdown diff --git a/.github/workflows/assign_release_conductor.yml b/.github/workflows/assign_release_conductor.yml index baacf81c019..2163612d577 100644 --- a/.github/workflows/assign_release_conductor.yml +++ b/.github/workflows/assign_release_conductor.yml @@ -18,7 +18,6 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 22 - - run: npm i -g npm@^10.5.1 - run: npm ci - uses: ./.github/actions/pagerduty id: pagerduty diff --git a/.github/workflows/check-for-integration-result-comment.yml b/.github/workflows/check-for-integration-result-comment.yml new file mode 100644 index 00000000000..57b75617c64 --- /dev/null +++ b/.github/workflows/check-for-integration-result-comment.yml @@ -0,0 +1,68 @@ +name: Check for integration result comment + +on: + issue_comment: + types: [created, edited] + +jobs: + # note: this workflow always passes, it does not fail when integration tests are failing + check-for-integration-result-comment: + if: github.event.issue.pull_request + runs-on: ubuntu-latest + steps: + - name: Get integration result comment + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const INTEGRATION_LABEL_NAMES = { + // synced with https://github.com/primer/react/labels?q=integration-tests + skipped: 'integration-tests: skipped manually', + recommended: 'integration-tests: recommended', + failing: 'integration-tests: failing', + passing: 'integration-tests: passing' + }; + + const issue = { + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo + }; + + const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue(issue); + const existingIntegrationLabels = currentLabels + .map(label => label.name) + .filter(label => label.startsWith('integration-tests:')); + + if (existingIntegrationLabels.includes(INTEGRATION_LABEL_NAMES.skipped)) return; + + const result = await github.rest.issues.listComments(issue); + const integrationComments = result.data.filter( + comment => + comment.user.login == 'primer-integration[bot]' && + comment.body.includes('')) - if (!previousComment.length) { + if (integrationLabels.length === 0) { + // recommend integration tests + await github.rest.issues.addLabels({...issue, labels: [INTEGRATION_LABEL_NAMES.recommended]}) await github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, + ...issue, body: '\n\n :wave: Hi, this pull request contains changes to the source code that github/github depends on. If you are GitHub staff, we recommend testing these changes with github/github using the [integration workflow](https://gh.io/testing_primer_at_dotcom). Thanks!' }) - } - - - name: Add label - if: ${{ steps.source-files.outputs.diff != '' }} - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const result = await github.rest.issues.listLabelsOnIssue({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - }) - - const integrationLabels = result.data.filter(label => label.name.startsWith('integration-tests')) - if (!integrationLabels.length) { - await github.rest.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['integration-tests: recommended'], + } else if (hasPassingLabel) { + // recommend running integration tests again as there are new commits that might change the status + // note: we don't remove 'integration-tests: passing' label because this is only a suggestion/nudge + await github.rest.issues.addLabels({...issue, labels: [INTEGRATION_LABEL_NAMES.recommended]}) + await github.rest.issues.createComment({ + ...issue, + body: '\n\n :wave: Hi, there are new commits since the last successful integration test. We recommend running the [integration workflow](https://gh.io/testing_primer_at_dotcom) once more, unless you are sure the new changes do not affect github/github. Thanks!' }) } diff --git a/.github/workflows/release-schedule.yml b/.github/workflows/release-schedule.yml index d032decd5ca..fd696dc17ee 100644 --- a/.github/workflows/release-schedule.yml +++ b/.github/workflows/release-schedule.yml @@ -31,7 +31,6 @@ jobs: uses: actions/setup-node@v4 with: node-version: 22 - - run: npm i -g npm@^10.5.1 - name: Install packages for github-script run: npm i date-fns - name: Create Release Issue diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 75650f7e244..f3444e52f60 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,6 @@ jobs: with: node-version: 22 cache: 'npm' - - run: npm i -g npm@^10.5.1 - name: Install dependencies run: npm ci diff --git a/.github/workflows/release_canary.yml b/.github/workflows/release_canary.yml index a33cca6c59b..3801452fe12 100644 --- a/.github/workflows/release_canary.yml +++ b/.github/workflows/release_canary.yml @@ -27,7 +27,6 @@ jobs: with: node-version: 22 cache: 'npm' - - run: npm i -g npm@^10.5.1 - name: Install dependencies run: npm ci - name: Build diff --git a/.github/workflows/release_candidate.yml b/.github/workflows/release_candidate.yml index 7504481cd3a..0a29d2b637d 100644 --- a/.github/workflows/release_candidate.yml +++ b/.github/workflows/release_candidate.yml @@ -23,7 +23,6 @@ jobs: with: node-version: 22 cache: 'npm' - - run: npm i -g npm@^10.5.1 - name: Install dependencies run: npm ci @@ -67,7 +66,7 @@ jobs: release-candidate-next-major: if: github.ref_name == 'changeset-release/next-major' name: Candidate (@next-major) - uses: primer/.github/.github/workflows/release_candidate.yml@v2.0.0 + uses: primer/.github/.github/workflows/release_candidate.yml@v2.1.1 with: tag: next-major secrets: diff --git a/.github/workflows/vrt.yml b/.github/workflows/vrt.yml index 1cd02e91ebd..526e1ffba5e 100644 --- a/.github/workflows/vrt.yml +++ b/.github/workflows/vrt.yml @@ -39,7 +39,6 @@ jobs: with: node-version: 22 cache: 'npm' - - run: npm i -g npm@^10.5.1 - name: Install dependencies run: npm ci - name: Build storybook diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-colorblind-linux.png index 5c2c4e5e399..ea39cc10a9e 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-dimmed-linux.png index de52e96893e..517a8039fb0 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-high-contrast-linux.png index 11716f3e74f..89a064b897a 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-linux.png index 5c2c4e5e399..ea39cc10a9e 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-tritanopia-linux.png index 5c2c4e5e399..ea39cc10a9e 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-colorblind-linux.png index ec6ea0a9ea0..8a08e2ef686 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-high-contrast-linux.png index c188b778b3d..124e58958ff 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-linux.png index 48322c9a756..8a08e2ef686 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-tritanopia-linux.png index ec6ea0a9ea0..8a08e2ef686 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Disabled-Item-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-dark-high-contrast-linux.png index 5fe934d5264..6c9e29c92f5 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-light-high-contrast-linux.png index 6afb9cac075..3740f4558e4 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Full-Variant-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-dark-high-contrast-linux.png index 1217c6ff832..a8d70f0587c 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-light-high-contrast-linux.png index 838dcfe441b..74ef5844933 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-Old-Api-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-dark-high-contrast-linux.png index 396cb59dce4..da10f44b676 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-light-high-contrast-linux.png index 8bf2f908acc..ebe68e8f867 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Group-With-Filled-Title-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-colorblind-linux.png index e078f8adcfe..fe78b66aaec 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-dimmed-linux.png index bf3cfb84ee8..c11e54c321d 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-high-contrast-linux.png index f0c21d672e1..5ec3c565f74 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-linux.png index da163c110e0..fe78b66aaec 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-tritanopia-linux.png index e078f8adcfe..fe78b66aaec 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-colorblind-linux.png index 79bd8b28598..148a0e80cab 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-high-contrast-linux.png index daa0f6f2685..72f38880787 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-linux.png index a27b2d9fea1..148a0e80cab 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-tritanopia-linux.png index 79bd8b28598..148a0e80cab 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Loading-Item-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-colorblind-linux.png index b8285475597..a0e47e56448 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-dimmed-linux.png index fcb10047cd3..d2ff1bb710f 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-high-contrast-linux.png index 426121b3cfe..6235be71f4e 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-linux.png index b8285475597..a0e47e56448 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-tritanopia-linux.png index b8285475597..a0e47e56448 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-colorblind-linux.png index e5b3e0b0803..a0981b6ae73 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-high-contrast-linux.png index 59b2184975f..71b9e411b79 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-linux.png index 3ef1e0b756f..a0981b6ae73 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-tritanopia-linux.png index e5b3e0b0803..a0981b6ae73 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Multi-Select-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-dark-high-contrast-linux.png index ca40c8624f5..04432c956fc 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-light-high-contrast-linux.png index 05d5cb83b6b..0bc9c8e20a1 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Simple-List-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-dark-high-contrast-linux.png index ca40c8624f5..04432c956fc 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-light-high-contrast-linux.png index 05d5cb83b6b..0bc9c8e20a1 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Divider-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-colorblind-linux.png index c3815407087..e37c6ab8783 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-dimmed-linux.png index 8d5ff33502c..2810bc70697 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-high-contrast-linux.png index 0919def8ac1..bd57c4676a1 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-linux.png index c3815407087..e37c6ab8783 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-tritanopia-linux.png index c3815407087..e37c6ab8783 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-colorblind-linux.png index aaf206416a1..238e6256914 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-high-contrast-linux.png index b33073bdb35..a773bfc5e7d 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-linux.png index bc28372b65c..238e6256914 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-tritanopia-linux.png index aaf206416a1..238e6256914 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Single-Select-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-colorblind-linux.png index 907aada231c..3b65aab7a75 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-dimmed-linux.png index b429f1981f7..e0b9f8ca1c9 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-high-contrast-linux.png index 8d18525f283..19eb6178332 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-linux.png index 907aada231c..3b65aab7a75 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-tritanopia-linux.png index 907aada231c..3b65aab7a75 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-colorblind-linux.png index b71dc1491e3..db22305f64d 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-high-contrast-linux.png index a7b37a2d3a0..c671e889423 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-linux.png index b71dc1491e3..db22305f64d 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-tritanopia-linux.png index b71dc1491e3..db22305f64d 100644 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-Text-Wrap-And-Truncation-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-colorblind-linux.png deleted file mode 100644 index 02717c4e37a..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-colorblind-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-dimmed-linux.png deleted file mode 100644 index aa27265d3ac..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-dimmed-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-high-contrast-linux.png deleted file mode 100644 index e293e55513c..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-high-contrast-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-linux.png deleted file mode 100644 index 02717c4e37a..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-tritanopia-linux.png deleted file mode 100644 index 02717c4e37a..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-dark-tritanopia-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-colorblind-linux.png deleted file mode 100644 index 7a22e662b78..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-colorblind-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-high-contrast-linux.png deleted file mode 100644 index 2699fe20c72..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-high-contrast-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-linux.png deleted file mode 100644 index 7a22e662b78..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-tritanopia-linux.png deleted file mode 100644 index 7a22e662b78..00000000000 Binary files a/.playwright/snapshots/components/ActionList.test.ts-snapshots/ActionList-With-Trailing-Action-light-tritanopia-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-colorblind-linux.png new file mode 100644 index 00000000000..c35d8aa199d Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-dimmed-linux.png new file mode 100644 index 00000000000..5964c04027b Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-high-contrast-linux.png new file mode 100644 index 00000000000..213f7b60742 Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-linux.png new file mode 100644 index 00000000000..c35d8aa199d Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-tritanopia-linux.png new file mode 100644 index 00000000000..c35d8aa199d Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-colorblind-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-colorblind-linux.png new file mode 100644 index 00000000000..53b577bddc1 Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-high-contrast-linux.png new file mode 100644 index 00000000000..4ca17804028 Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-linux.png new file mode 100644 index 00000000000..53b577bddc1 Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-tritanopia-linux.png new file mode 100644 index 00000000000..53b577bddc1 Binary files /dev/null and b/.playwright/snapshots/components/ActionList.test.ts-snapshots/Heading-with-Classname-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..3f081e1e965 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..c7c8d797e8c Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..a0b26cf772a Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-linux.png new file mode 100644 index 00000000000..218d565a443 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..1ed96a5fab2 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..5919db86605 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..c43a3346028 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-linux.png new file mode 100644 index 00000000000..245847c230a Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..245847c230a Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..6c5ba201253 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..c01fc484d46 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..9ad15252c45 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-linux.png new file mode 100644 index 00000000000..c1c1bbbdcaf Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..e1ba26b3432 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..6b349f6f99e Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..8140104a3c9 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-linux.png new file mode 100644 index 00000000000..1eb037b7505 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..0d7c0aa0cb6 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-And-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-colorblind-linux.png new file mode 100644 index 00000000000..6b3922f91bc Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-dimmed-linux.png new file mode 100644 index 00000000000..c01fc484d46 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-high-contrast-linux.png new file mode 100644 index 00000000000..9ad15252c45 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-linux.png new file mode 100644 index 00000000000..c1c1bbbdcaf Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-tritanopia-linux.png new file mode 100644 index 00000000000..e1ba26b3432 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-colorblind-linux.png new file mode 100644 index 00000000000..6b349f6f99e Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-high-contrast-linux.png new file mode 100644 index 00000000000..d70dfcce26a Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-linux.png new file mode 100644 index 00000000000..1eb037b7505 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-tritanopia-linux.png new file mode 100644 index 00000000000..0d7c0aa0cb6 Binary files /dev/null and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Dev-With-Sx-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-colorblind-linux.png index 542f4d12f11..b0b53803df0 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-dimmed-linux.png index c517d2e358e..0143f6a82c9 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-high-contrast-linux.png index 8c3d04627a9..f5d111c7be6 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-linux.png index 542f4d12f11..b0b53803df0 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-tritanopia-linux.png index 542f4d12f11..b0b53803df0 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-colorblind-linux.png index 17dc1630ec9..4b4982c236b 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-high-contrast-linux.png index 791913e9d0d..e190732a3ff 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-linux.png index 17dc1630ec9..4b4982c236b 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-tritanopia-linux.png index 17dc1630ec9..4b4982c236b 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Groups-And-Descriptions-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-colorblind-linux.png index af77e086c12..83e9d05a3b7 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-dimmed-linux.png index d57ef3dc739..c86494d036d 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-high-contrast-linux.png index 9cbefc6f1ed..d613a25e861 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-linux.png index 37fd1431f1f..83e9d05a3b7 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-tritanopia-linux.png index af77e086c12..83e9d05a3b7 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-colorblind-linux.png index 56db03d54c1..a0ddc93abf8 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-high-contrast-linux.png index ca414be29c8..a2b7381d156 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-linux.png index d6342f1e6d7..a0ddc93abf8 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-tritanopia-linux.png index 56db03d54c1..a0ddc93abf8 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Loading-Items-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-colorblind-linux.png index b12ffe28398..a5f177344f6 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-dimmed-linux.png index a97cae5e534..3a451f5e81f 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-high-contrast-linux.png index 61d4c233c55..5022e5cb2ea 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-linux.png index b12ffe28398..a5f177344f6 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-tritanopia-linux.png index b12ffe28398..a5f177344f6 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-colorblind-linux.png index 4e994cf07b0..4bfba11f291 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-high-contrast-linux.png index 7165faf94eb..3538e724726 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-linux.png index 4e994cf07b0..4bfba11f291 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-tritanopia-linux.png index 4e994cf07b0..4bfba11f291 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Multi-Select-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-colorblind-linux.png index 772ca2d44f6..762ac72fa9e 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-dimmed-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-dimmed-linux.png index f99cc409472..c800db43579 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-dimmed-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-high-contrast-linux.png index ca962024b4c..a5611d1f429 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-linux.png index 772ca2d44f6..762ac72fa9e 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-tritanopia-linux.png index 772ca2d44f6..762ac72fa9e 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-colorblind-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-colorblind-linux.png index 30eabc018ce..10c0574a5f7 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-colorblind-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-high-contrast-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-high-contrast-linux.png index d27fe9d054d..6b386642d84 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-high-contrast-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-linux.png index 6168409daf4..10c0574a5f7 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-linux.png differ diff --git a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-tritanopia-linux.png b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-tritanopia-linux.png index 6168409daf4..10c0574a5f7 100644 Binary files a/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-tritanopia-linux.png and b/.playwright/snapshots/components/ActionMenu.test.ts-snapshots/ActionMenu-Single-Select-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-colorblind-linux.png index d61b40734fb..6336a95ee44 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-dimmed-linux.png index 5a7b80c0860..99730f7b778 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-high-contrast-linux.png index 8e1d5e3d672..0907e31bbd1 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-linux.png index d61b40734fb..6336a95ee44 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-tritanopia-linux.png index d61b40734fb..6336a95ee44 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-colorblind-linux.png index c156821dc4c..f8314c27ca0 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-high-contrast-linux.png index ae2c7e25c0f..fadc41010e6 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-linux.png index c156821dc4c..f8314c27ca0 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-tritanopia-linux.png index c156821dc4c..f8314c27ca0 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-colorblind-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-colorblind-linux.png index 2c610c00e33..66b1245197d 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-colorblind-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-dimmed-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-dimmed-linux.png index 7a98803de6e..9c26173362e 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-dimmed-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-high-contrast-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-high-contrast-linux.png index 94cc050ba1a..114190c440f 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-linux.png index 2c610c00e33..66b1245197d 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-tritanopia-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-tritanopia-linux.png index 2c610c00e33..66b1245197d 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-colorblind-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-colorblind-linux.png index 5ee4ab47821..9b1648d4c75 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-colorblind-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-high-contrast-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-high-contrast-linux.png index 0fecba8638d..d6ffb47c8d5 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-high-contrast-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-linux.png index 5ee4ab47821..9b1648d4c75 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-tritanopia-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-tritanopia-linux.png index 5ee4ab47821..9b1648d4c75 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-tritanopia-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-Responsive-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-colorblind-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-colorblind-linux.png index a245ceb874f..fc688b9daef 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-colorblind-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-dimmed-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-dimmed-linux.png index d42c4c1d76a..414be02a656 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-dimmed-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-high-contrast-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-high-contrast-linux.png index fe2860771b9..22fc060c6e3 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-linux.png index a245ceb874f..fc688b9daef 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-tritanopia-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-tritanopia-linux.png index a245ceb874f..fc688b9daef 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-colorblind-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-colorblind-linux.png index f348915ff70..46f11ffd834 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-colorblind-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-high-contrast-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-high-contrast-linux.png index 89d1db2a928..d26e7185ebc 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-high-contrast-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-linux.png index f348915ff70..46f11ffd834 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-linux.png differ diff --git a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-tritanopia-linux.png b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-tritanopia-linux.png index f348915ff70..46f11ffd834 100644 Binary files a/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-tritanopia-linux.png and b/.playwright/snapshots/components/Avatar.test.ts-snapshots/Avatar-Size-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-colorblind-linux.png index 0c7fbdcaa56..fc16905de34 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-dimmed-linux.png index 21455d3a144..36337dcd9b1 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-high-contrast-linux.png index f4955bbef0b..f5d05300884 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-linux.png index 0c7fbdcaa56..fc16905de34 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-tritanopia-linux.png index 0c7fbdcaa56..fc16905de34 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-colorblind-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-colorblind-linux.png index 83f2a69d703..7fad378fc31 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-high-contrast-linux.png index 2603396c2cb..969e5da7c53 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-linux.png index 8c683c160db..7fad378fc31 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-tritanopia-linux.png index 83f2a69d703..7fad378fc31 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-colorblind-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-colorblind-linux.png index de111a7d78c..0763373fb49 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-colorblind-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-dimmed-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-dimmed-linux.png index e44fb9d5799..6c73c5f2e36 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-dimmed-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-high-contrast-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-high-contrast-linux.png index 7316b06d92a..05c2e22d9ac 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-high-contrast-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-linux.png index de111a7d78c..0763373fb49 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-tritanopia-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-tritanopia-linux.png index de111a7d78c..0763373fb49 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-tritanopia-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-colorblind-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-colorblind-linux.png index 32188c40b5c..71554d69aaa 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-colorblind-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-high-contrast-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-high-contrast-linux.png index c7c1ac84be9..ca375dd40c6 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-high-contrast-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-linux.png index 7d07ad6a94d..71554d69aaa 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-tritanopia-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-tritanopia-linux.png index 32188c40b5c..71554d69aaa 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-tritanopia-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Circle-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-colorblind-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-colorblind-linux.png index 43d012a38f0..49cda0656fb 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-colorblind-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-dimmed-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-dimmed-linux.png index c2e0bb8c831..830b20360fa 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-dimmed-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-high-contrast-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-high-contrast-linux.png index 4c217f9dcc2..539d4bf63be 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-high-contrast-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-linux.png index 43d012a38f0..49cda0656fb 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-tritanopia-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-tritanopia-linux.png index 43d012a38f0..49cda0656fb 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-tritanopia-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-colorblind-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-colorblind-linux.png index 306083cc0dd..abcd333d49f 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-colorblind-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-high-contrast-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-high-contrast-linux.png index 7b58f631af4..cdc793b4d28 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-high-contrast-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-linux.png index 306083cc0dd..abcd333d49f 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-linux.png differ diff --git a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-tritanopia-linux.png b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-tritanopia-linux.png index 306083cc0dd..abcd333d49f 100644 Binary files a/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-tritanopia-linux.png and b/.playwright/snapshots/components/AvatarPair.test.ts-snapshots/AvatarPair-Parent-Square-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-colorblind-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-colorblind-linux.png new file mode 100644 index 00000000000..9c9be1bf233 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-dimmed-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-dimmed-linux.png new file mode 100644 index 00000000000..d04ec76d0a5 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-high-contrast-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-high-contrast-linux.png new file mode 100644 index 00000000000..b81ee92059b Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-linux.png new file mode 100644 index 00000000000..9c9be1bf233 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-tritanopia-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-tritanopia-linux.png new file mode 100644 index 00000000000..9c9be1bf233 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-colorblind-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-colorblind-linux.png new file mode 100644 index 00000000000..187994fbcc5 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-high-contrast-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-high-contrast-linux.png new file mode 100644 index 00000000000..187994fbcc5 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-linux.png new file mode 100644 index 00000000000..187994fbcc5 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-tritanopia-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-tritanopia-linux.png new file mode 100644 index 00000000000..187994fbcc5 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-SX-Prop-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-colorblind-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-colorblind-linux.png new file mode 100644 index 00000000000..f8d78736e97 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-dimmed-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-dimmed-linux.png new file mode 100644 index 00000000000..09f71271449 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-high-contrast-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-high-contrast-linux.png new file mode 100644 index 00000000000..89fbe8a0c83 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-linux.png new file mode 100644 index 00000000000..f8d78736e97 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-tritanopia-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-tritanopia-linux.png new file mode 100644 index 00000000000..f8d78736e97 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-colorblind-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-colorblind-linux.png new file mode 100644 index 00000000000..1f11f61e963 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-high-contrast-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-high-contrast-linux.png new file mode 100644 index 00000000000..379c2fd6974 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-linux.png new file mode 100644 index 00000000000..1f11f61e963 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-linux.png differ diff --git a/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-tritanopia-linux.png b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-tritanopia-linux.png new file mode 100644 index 00000000000..1f11f61e963 Binary files /dev/null and b/.playwright/snapshots/components/AvatarStack.test.ts-snapshots/AvatarStack-With-Link-Wrappers-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..37c22f9b6eb Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..00f46281bf4 Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..e7e1e1dc3c2 Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..37c22f9b6eb Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..37c22f9b6eb Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..c72be797098 Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..616a524b0a2 Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-linux.png new file mode 100644 index 00000000000..c72be797098 Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..c72be797098 Binary files /dev/null and b/.playwright/snapshots/components/BaseStyles.test.ts-snapshots/BaseStyles-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-colorblind-linux.png index 4b1e677fe72..1905f3f847a 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-dimmed-linux.png index a9efebdc3e3..967f7cbcfb5 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-high-contrast-linux.png index cd1cecebfa0..2c2ce98505b 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-linux.png index b07f9bd9b81..a88f2098ed4 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-tritanopia-linux.png index 4b1e677fe72..1905f3f847a 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-colorblind-linux.png index 34c94edc143..f1c994fa927 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-high-contrast-linux.png index 04228fc3f0f..7583d11bf8b 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-linux.png index e7b61f00caa..df3ba67a85c 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-tritanopia-linux.png index 34c94edc143..f1c994fa927 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-sm-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-sm-linux.png index 545946dac1e..5d91cc5e880 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-sm-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-sm-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-xs-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-xs-linux.png index 50d632d028a..bfff59ee3ff 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-xs-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Default-primer-breakpoint-xs-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-colorblind-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-colorblind-linux.png index 3c595b1a3ed..1a7786b2ed2 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-colorblind-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-dimmed-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-dimmed-linux.png index 4c4ff17f895..34735079b5a 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-dimmed-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-high-contrast-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-high-contrast-linux.png index 245b66011ef..862b5aa944b 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-linux.png index 3c595b1a3ed..1a7786b2ed2 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-tritanopia-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-tritanopia-linux.png index 3c595b1a3ed..1a7786b2ed2 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-colorblind-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-colorblind-linux.png index 905d4138bcf..e5720bd3e36 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-colorblind-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-high-contrast-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-high-contrast-linux.png index 2645dbea50a..0116d65f7c4 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-high-contrast-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-linux.png index 905d4138bcf..e5720bd3e36 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-tritanopia-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-tritanopia-linux.png index 905d4138bcf..e5720bd3e36 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-tritanopia-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-primer-breakpoint-sm-linux.png b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-primer-breakpoint-sm-linux.png index 94b2c667b81..2c969788c4b 100644 Binary files a/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-primer-breakpoint-sm-linux.png and b/.playwright/snapshots/components/Blankslate.test.ts-snapshots/Blankslate-Narrow-primer-breakpoint-sm-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-colorblind-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-colorblind-linux.png new file mode 100644 index 00000000000..6153d33044c Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-dimmed-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-dimmed-linux.png new file mode 100644 index 00000000000..ec8b719dd01 Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-high-contrast-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-high-contrast-linux.png new file mode 100644 index 00000000000..1a1ce14f0f0 Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-linux.png new file mode 100644 index 00000000000..6153d33044c Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-tritanopia-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-tritanopia-linux.png new file mode 100644 index 00000000000..6153d33044c Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-colorblind-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-colorblind-linux.png new file mode 100644 index 00000000000..a4ac8d7c369 Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-high-contrast-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-high-contrast-linux.png new file mode 100644 index 00000000000..57feb9d6d99 Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-linux.png new file mode 100644 index 00000000000..a4ac8d7c369 Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-linux.png differ diff --git a/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-tritanopia-linux.png b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-tritanopia-linux.png new file mode 100644 index 00000000000..a4ac8d7c369 Binary files /dev/null and b/.playwright/snapshots/components/ButtonGroup.test.ts-snapshots/ButtonGroup-As-Toolbar-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-colorblind-linux.png index 6c7a7a37704..d633d500237 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-dimmed-linux.png index 0e744b6f82d..a56ed83b3b5 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-high-contrast-linux.png index edae1f28261..15badb3b04f 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-linux.png index 6c7a7a37704..d633d500237 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-tritanopia-linux.png index 6c7a7a37704..d633d500237 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-colorblind-linux.png index d3d869bb412..e6d78d822e1 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-dimmed-linux.png index 55a67300d0e..b12bc2888ff 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-high-contrast-linux.png index 74c4b5b700c..2a9991090a4 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-linux.png index d3d869bb412..e6d78d822e1 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-tritanopia-linux.png index d3d869bb412..e6d78d822e1 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-colorblind-linux.png index 4a247045fcc..2d4f3525026 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-high-contrast-linux.png index 9ac7f2a89b4..0c0b01fb3c8 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-linux.png index 4a247045fcc..2d4f3525026 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-tritanopia-linux.png index 4a247045fcc..2d4f3525026 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-colorblind-linux.png index 71b0d13b70f..6f8fa5214a9 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-high-contrast-linux.png index 011f742c2ae..7f4bdf8e639 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-linux.png index 71b0d13b70f..6f8fa5214a9 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-tritanopia-linux.png index 71b0d13b70f..6f8fa5214a9 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-colorblind-linux.png index 8f60f1ab0ab..68251127344 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-dimmed-linux.png index e40a3141d7b..6c345e1fe88 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-high-contrast-linux.png index 71129d50f41..c7e719beef0 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-linux.png index 8f60f1ab0ab..68251127344 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-tritanopia-linux.png index 8f60f1ab0ab..68251127344 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-colorblind-linux.png index 3e887db27f3..68251127344 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-dimmed-linux.png index 5ae38d5d3db..6c345e1fe88 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-high-contrast-linux.png index 71129d50f41..c7e719beef0 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-linux.png index 3e887db27f3..68251127344 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-tritanopia-linux.png index 3e887db27f3..68251127344 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-colorblind-linux.png index 25f7c24ae57..816593c8fb7 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-high-contrast-linux.png index 7d582d39bd6..8fd2054e754 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-linux.png index 25f7c24ae57..816593c8fb7 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-tritanopia-linux.png index 25f7c24ae57..816593c8fb7 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-colorblind-linux.png index ff84bb1c8bb..816593c8fb7 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-high-contrast-linux.png index 7d582d39bd6..8fd2054e754 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-linux.png index ff84bb1c8bb..816593c8fb7 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-tritanopia-linux.png index ff84bb1c8bb..816593c8fb7 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Disabled-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-colorblind-linux.png index b6c8f0ef414..3ee821f935a 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-dimmed-linux.png index 068a1c04a00..12fa19459e7 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-high-contrast-linux.png index 18e24c7ee8a..e19be3a8a1c 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-linux.png index b6c8f0ef414..1a3eb9b7986 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-tritanopia-linux.png index d1527f14228..1a3eb9b7986 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-colorblind-linux.png index ac6d3557b08..f97facc8547 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-dimmed-linux.png index 718ff5c7fd1..771a6a1d100 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-high-contrast-linux.png index ea0b12ae97f..e4234623f94 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-linux.png index ac6d3557b08..f97facc8547 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-tritanopia-linux.png index ac6d3557b08..f97facc8547 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-colorblind-linux.png index 5cd5bdf344f..3bbaa14ecf1 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-high-contrast-linux.png index 673e63f19c5..bb2bc4b6483 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-linux.png index 5cd5bdf344f..3bbaa14ecf1 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-tritanopia-linux.png index 5cd5bdf344f..3bbaa14ecf1 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-colorblind-linux.png index a89624544e1..722c04dc8ca 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-high-contrast-linux.png index d0824395ba9..5c418fa16aa 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-linux.png index 22b0450b890..45dc165babb 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-tritanopia-linux.png index a89624544e1..722c04dc8ca 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Indeterminate-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-colorblind-linux.png index d3f45d6caa4..f633e9379eb 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-dimmed-linux.png index e93c0f5d367..c64e03caef6 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-high-contrast-linux.png index 8656b395c00..83574f362ef 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-linux.png index d3f45d6caa4..f633e9379eb 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-tritanopia-linux.png index d3f45d6caa4..f633e9379eb 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-colorblind-linux.png index 1aa6e5bcf9a..58d6e7b5f81 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-dimmed-linux.png index 8f8929636a7..d0d91bcc179 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-high-contrast-linux.png index 0ab18864144..44b734e667a 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-linux.png index 1aa6e5bcf9a..58d6e7b5f81 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-tritanopia-linux.png index 1aa6e5bcf9a..58d6e7b5f81 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-colorblind-linux.png index 0fb97cf1114..0a78307df3a 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-high-contrast-linux.png index c526b98decc..140cb88a7cf 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-linux.png index 0fb97cf1114..0a78307df3a 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-tritanopia-linux.png index 0fb97cf1114..0a78307df3a 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-colorblind-linux.png index 09cecaa92bb..e2f6575fca4 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-high-contrast-linux.png index 6ad33f5bc87..707e852989f 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-linux.png index 09cecaa92bb..e2f6575fca4 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-tritanopia-linux.png index 09cecaa92bb..e2f6575fca4 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-Visually-Hidden-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-colorblind-linux.png index 58680aa4a68..c9c17a87a91 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-dimmed-linux.png index 567594b30ad..b0b8c2046f6 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-high-contrast-linux.png index d9fe3b9e07d..6377e2a37bc 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-linux.png index 58680aa4a68..c9c17a87a91 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-tritanopia-linux.png index 58680aa4a68..c9c17a87a91 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-colorblind-linux.png index 783b5c3e531..b5712ea4f74 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-dimmed-linux.png index e2ed1db4265..d072f498191 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-high-contrast-linux.png index 3f287383340..cc2cb184d5a 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-linux.png index 783b5c3e531..b5712ea4f74 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-tritanopia-linux.png index 783b5c3e531..b5712ea4f74 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-colorblind-linux.png index 1266a32f79e..99f6c93fa0f 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-high-contrast-linux.png index c12477eb788..9db032b7e9f 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-linux.png index 1266a32f79e..99f6c93fa0f 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-tritanopia-linux.png index 1266a32f79e..99f6c93fa0f 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-colorblind-linux.png index 77d6d36e770..2e751d5226e 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-high-contrast-linux.png index 438d8e9e5dc..b32b85822c3 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-linux.png index 77d6d36e770..2e751d5226e 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-tritanopia-linux.png index 77d6d36e770..2e751d5226e 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Caption-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-colorblind-linux.png index ec659974c35..66ba71b0365 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-dimmed-linux.png index e7fab374c1c..eeccc8937cb 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-high-contrast-linux.png index 477c04e3027..8019f16cae6 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-linux.png index ec659974c35..66ba71b0365 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-tritanopia-linux.png index ec659974c35..66ba71b0365 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-colorblind-linux.png index 959ee2d221e..5c6f4a6c70c 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-dimmed-linux.png index d6c9027dd00..7419be9445a 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-dimmed-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-high-contrast-linux.png index 3a647b99d0f..8841f868d8b 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-linux.png index 959ee2d221e..5c6f4a6c70c 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-tritanopia-linux.png index 959ee2d221e..5c6f4a6c70c 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-colorblind-linux.png index ef488478326..296360e8cc0 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-high-contrast-linux.png index f4644f7f8e0..fb87e88f9c2 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-linux.png index ef488478326..296360e8cc0 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-tritanopia-linux.png index ef488478326..296360e8cc0 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-colorblind-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-colorblind-linux.png index 2af470b3920..34277fb6b87 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-colorblind-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-high-contrast-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-high-contrast-linux.png index a34513079a2..ce6a7f94e33 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-high-contrast-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-linux.png index 2af470b3920..34277fb6b87 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-linux.png differ diff --git a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-tritanopia-linux.png b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-tritanopia-linux.png index 2af470b3920..34277fb6b87 100644 Binary files a/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-tritanopia-linux.png and b/.playwright/snapshots/components/Checkbox.test.ts-snapshots/Checkbox-With-Leading-Visual-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-colorblind-linux.png index 563479cbe4e..77a1ead5794 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-dimmed-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-dimmed-linux.png index 851703fe428..e9f45f55e3f 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-dimmed-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-high-contrast-linux.png index 51a323ea0c5..ef27c846bf5 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-linux.png index 563479cbe4e..77a1ead5794 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-tritanopia-linux.png index 0aa248ff73a..77a1ead5794 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-colorblind-linux.png index e631f0ed1a7..3351e18c1a4 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-high-contrast-linux.png index cf28dc4103f..0c1d3a3d895 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-linux.png index e631f0ed1a7..53f890e18ba 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-tritanopia-linux.png index e631f0ed1a7..3351e18c1a4 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Caption-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-colorblind-linux.png index bf302ee24bb..efb4dc778e0 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-dimmed-linux.png index 3a9224423ab..c8a09eb1a9f 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-high-contrast-linux.png index 7da7e53386a..3af0e26e2cc 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-linux.png index bf302ee24bb..c44503afc61 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-tritanopia-linux.png index bf302ee24bb..c44503afc61 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-colorblind-linux.png index fbcb27c49e0..11042e95aa4 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-high-contrast-linux.png index 4f4d140484e..1d400d764fe 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-linux.png index 973fb44a7de..635aca2c49a 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-tritanopia-linux.png index fbcb27c49e0..11042e95aa4 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-colorblind-linux.png index cac9be082c9..ecdfe5c1238 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-dimmed-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-dimmed-linux.png index 7890ac93cf9..9c0e09adf49 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-dimmed-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-high-contrast-linux.png index 65a9f71e9eb..4a951ebe386 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-linux.png index 2a03de4a8c5..428f0b3ae83 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-tritanopia-linux.png index 2a03de4a8c5..428f0b3ae83 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-colorblind-linux.png index ad41e48ca23..c1d436da28f 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-high-contrast-linux.png index d212177287f..60c84aaef83 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-linux.png index da3a91c92af..7a374dbe0fa 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-tritanopia-linux.png index ecc802007c2..5f6704e097a 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Error-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-colorblind-linux.png new file mode 100644 index 00000000000..d9bc1c1c0cf Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-dimmed-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-dimmed-linux.png new file mode 100644 index 00000000000..65af7edf6eb Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-high-contrast-linux.png new file mode 100644 index 00000000000..5c921c54e27 Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-linux.png new file mode 100644 index 00000000000..d9bc1c1c0cf Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-tritanopia-linux.png new file mode 100644 index 00000000000..d9bc1c1c0cf Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-colorblind-linux.png new file mode 100644 index 00000000000..abf9946dd78 Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-high-contrast-linux.png new file mode 100644 index 00000000000..776da32fd33 Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-linux.png new file mode 100644 index 00000000000..007c47f3af0 Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-tritanopia-linux.png new file mode 100644 index 00000000000..abf9946dd78 Binary files /dev/null and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-SX-Props-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-colorblind-linux.png index 596f7c252c6..0bf454fddfe 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-dimmed-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-dimmed-linux.png index 11b00a0162e..868babf1d81 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-dimmed-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-high-contrast-linux.png index 61f1cd5308a..ff08ce5acd7 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-linux.png index a9df015a8bf..1322edc341c 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-tritanopia-linux.png index 596f7c252c6..05fba38fcc8 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-colorblind-linux.png index 40ea88c0cab..158ad1a4b81 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-high-contrast-linux.png index d11f5111060..85a8eb71264 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-linux.png index ed3e506322a..47125d1b60d 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-tritanopia-linux.png index 40ea88c0cab..86eae8a9ab6 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Success-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-colorblind-linux.png index 8cced5caf04..4520aad0868 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-dimmed-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-dimmed-linux.png index 6bbd58d333a..4d2de055261 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-dimmed-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-high-contrast-linux.png index 3688b9ff737..52edb2dfbb0 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-linux.png index 8cced5caf04..1874df1e27b 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-tritanopia-linux.png index 8cced5caf04..1874df1e27b 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-colorblind-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-colorblind-linux.png index af1097ee573..27aaabc491e 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-colorblind-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-high-contrast-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-high-contrast-linux.png index a042105cfa8..6616e7eb834 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-high-contrast-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-linux.png index 1d958ff1b6a..27aaabc491e 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-linux.png differ diff --git a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-tritanopia-linux.png b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-tritanopia-linux.png index af1097ee573..27aaabc491e 100644 Binary files a/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-tritanopia-linux.png and b/.playwright/snapshots/components/CheckboxGroup.test.ts-snapshots/CheckboxGroup-Visually-Hidden-Label-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..bb3b9478ef6 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..8b3557aeafd Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..615f1ebcc6c Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-linux.png new file mode 100644 index 00000000000..bb3b9478ef6 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..bb3b9478ef6 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-colorblind-linux.png new file mode 100644 index 00000000000..747c46f88f8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-dimmed-linux.png new file mode 100644 index 00000000000..7568e703e30 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-high-contrast-linux.png new file mode 100644 index 00000000000..eb263d003fc Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-linux.png new file mode 100644 index 00000000000..747c46f88f8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-tritanopia-linux.png new file mode 100644 index 00000000000..747c46f88f8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-colorblind-linux.png new file mode 100644 index 00000000000..707d9010c8b Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-high-contrast-linux.png new file mode 100644 index 00000000000..571990c0f1d Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-linux.png new file mode 100644 index 00000000000..707d9010c8b Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-tritanopia-linux.png new file mode 100644 index 00000000000..707d9010c8b Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..2d843fb0261 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..0fda58b4300 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-linux.png new file mode 100644 index 00000000000..2d843fb0261 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..2d843fb0261 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-colorblind-linux.png new file mode 100644 index 00000000000..4f07fdd21f0 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-dimmed-linux.png new file mode 100644 index 00000000000..0dd714251b6 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-high-contrast-linux.png new file mode 100644 index 00000000000..9b83f879f19 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-linux.png new file mode 100644 index 00000000000..2aeed9dd30a Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-tritanopia-linux.png new file mode 100644 index 00000000000..2aeed9dd30a Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-colorblind-linux.png new file mode 100644 index 00000000000..f5b6e25b789 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-dimmed-linux.png new file mode 100644 index 00000000000..27fb2039ac6 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-high-contrast-linux.png new file mode 100644 index 00000000000..9dad7bbe0e9 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-linux.png new file mode 100644 index 00000000000..eee1463cda1 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-tritanopia-linux.png new file mode 100644 index 00000000000..eee1463cda1 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-colorblind-linux.png new file mode 100644 index 00000000000..fba366ef6c2 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-high-contrast-linux.png new file mode 100644 index 00000000000..a3e5deff406 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-linux.png new file mode 100644 index 00000000000..8221f3c69f8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-tritanopia-linux.png new file mode 100644 index 00000000000..8221f3c69f8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-colorblind-linux.png new file mode 100644 index 00000000000..7d1668550b9 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-high-contrast-linux.png new file mode 100644 index 00000000000..8f3ed25d857 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-linux.png new file mode 100644 index 00000000000..c9acf5d9f9b Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-tritanopia-linux.png new file mode 100644 index 00000000000..c9acf5d9f9b Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Playground-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-colorblind-linux.png new file mode 100644 index 00000000000..088971e7cc8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-dimmed-linux.png new file mode 100644 index 00000000000..3bad0138a90 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-high-contrast-linux.png new file mode 100644 index 00000000000..21d9ebff6f8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-linux.png new file mode 100644 index 00000000000..088971e7cc8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-tritanopia-linux.png new file mode 100644 index 00000000000..088971e7cc8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-colorblind-linux.png new file mode 100644 index 00000000000..eb32536e0a2 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-dimmed-linux.png new file mode 100644 index 00000000000..a65abaac820 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-high-contrast-linux.png new file mode 100644 index 00000000000..318d984eea1 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-linux.png new file mode 100644 index 00000000000..eb32536e0a2 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-tritanopia-linux.png new file mode 100644 index 00000000000..eb32536e0a2 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-colorblind-linux.png new file mode 100644 index 00000000000..f9892cc1b83 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-high-contrast-linux.png new file mode 100644 index 00000000000..c061e235b4e Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-linux.png new file mode 100644 index 00000000000..f9892cc1b83 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-tritanopia-linux.png new file mode 100644 index 00000000000..f9892cc1b83 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-colorblind-linux.png new file mode 100644 index 00000000000..52997585738 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-high-contrast-linux.png new file mode 100644 index 00000000000..597f93f9f67 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-linux.png new file mode 100644 index 00000000000..52997585738 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-tritanopia-linux.png new file mode 100644 index 00000000000..52997585738 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-From-Action-Menu-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-colorblind-linux.png new file mode 100644 index 00000000000..d53fbabd6c8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-dimmed-linux.png new file mode 100644 index 00000000000..5a04ee54ee3 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-high-contrast-linux.png new file mode 100644 index 00000000000..793addcce97 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-linux.png new file mode 100644 index 00000000000..d53fbabd6c8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-tritanopia-linux.png new file mode 100644 index 00000000000..d53fbabd6c8 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-colorblind-linux.png new file mode 100644 index 00000000000..8f0669ea358 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-dimmed-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-dimmed-linux.png new file mode 100644 index 00000000000..3320c9c9773 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-high-contrast-linux.png new file mode 100644 index 00000000000..c3afc8bc0be Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-linux.png new file mode 100644 index 00000000000..8f0669ea358 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-tritanopia-linux.png new file mode 100644 index 00000000000..8f0669ea358 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-colorblind-linux.png new file mode 100644 index 00000000000..860b67f1f82 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-high-contrast-linux.png new file mode 100644 index 00000000000..b8756139c19 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-linux.png new file mode 100644 index 00000000000..860b67f1f82 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-tritanopia-linux.png new file mode 100644 index 00000000000..860b67f1f82 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-focus-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-colorblind-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-colorblind-linux.png new file mode 100644 index 00000000000..ce56afc8cee Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-high-contrast-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-high-contrast-linux.png new file mode 100644 index 00000000000..c56b1762812 Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-linux.png new file mode 100644 index 00000000000..ce56afc8cee Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-linux.png differ diff --git a/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-tritanopia-linux.png b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-tritanopia-linux.png new file mode 100644 index 00000000000..ce56afc8cee Binary files /dev/null and b/.playwright/snapshots/components/ConfirmationDialog.test.ts-snapshots/ConfirmationDialog-Shorthand-Hook-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..8c484fc839c Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..41691965e86 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..fc7647307af Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-linux.png new file mode 100644 index 00000000000..5fea40b4fd5 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..bd9d578c2e0 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-colorblind-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..ffc1019a844 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..af2813a8784 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-linux.png new file mode 100644 index 00000000000..cf3f3a78121 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..bc385505939 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..1f6feb1b5fc Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..cd9526852ba Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..a0e0cd06b19 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-linux.png new file mode 100644 index 00000000000..48f367d4c79 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..1519e3cbafa Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-colorblind-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..6cecb7a1cf7 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..0c80dc00421 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-linux.png new file mode 100644 index 00000000000..def87e27885 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..ba3058882ff Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-And-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-colorblind-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-colorblind-linux.png new file mode 100644 index 00000000000..8c585a67ffe Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-dimmed-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-dimmed-linux.png new file mode 100644 index 00000000000..8a1864a2211 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-high-contrast-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-high-contrast-linux.png new file mode 100644 index 00000000000..c43b30dca3b Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-linux.png new file mode 100644 index 00000000000..6ddef772a8e Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-tritanopia-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-tritanopia-linux.png new file mode 100644 index 00000000000..dceefc49017 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-colorblind-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-colorblind-linux.png new file mode 100644 index 00000000000..684bc1f3ff9 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-high-contrast-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-high-contrast-linux.png new file mode 100644 index 00000000000..e1a7baf8a6b Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-linux.png new file mode 100644 index 00000000000..d16cf3ae1f5 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-linux.png differ diff --git a/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-tritanopia-linux.png b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-tritanopia-linux.png new file mode 100644 index 00000000000..661b5cff6e6 Binary files /dev/null and b/.playwright/snapshots/components/Dialog.test.ts-snapshots/Dialog-Dev-With-Sx-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-colorblind-linux.png index ad84350f1b1..60ffd37ba37 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-dimmed-linux.png index 7bd8d7fceff..fc5fa4328e2 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-high-contrast-linux.png index d9ca11552d6..978b8725871 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-linux.png index ad84350f1b1..60ffd37ba37 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-tritanopia-linux.png index ad84350f1b1..60ffd37ba37 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-colorblind-linux.png index 33e920fd488..275739dd988 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-high-contrast-linux.png index 60f4358aeb1..c88929a3985 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-linux.png index 33e920fd488..275739dd988 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-tritanopia-linux.png index 33e920fd488..275739dd988 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-colorblind-linux.png index 29f000dbf0e..872c0dd55d9 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-dimmed-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-dimmed-linux.png index 128bfda301f..fc52cfa133b 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-dimmed-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-high-contrast-linux.png index 1a81d7ff028..d3fc3493e7d 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-linux.png index 29f000dbf0e..872c0dd55d9 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-tritanopia-linux.png index 29f000dbf0e..872c0dd55d9 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-colorblind-linux.png index 5671831fe39..c5120ed9142 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-high-contrast-linux.png index 7110a8437bb..b69fb08dc5c 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-linux.png index 5671831fe39..c5120ed9142 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-tritanopia-linux.png index 5671831fe39..c5120ed9142 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Disabled-Inputs-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-colorblind-linux.png index fca2e5f1da0..69721d24adb 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-dimmed-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-dimmed-linux.png index 96658607f36..807dfc10974 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-dimmed-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-high-contrast-linux.png index d06f57dbc20..4a243939816 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-linux.png index ccdf6c4d69b..587a6baf914 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-tritanopia-linux.png index ccdf6c4d69b..587a6baf914 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-colorblind-linux.png index 6b47ec1a4ec..33764b0073f 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-high-contrast-linux.png index 54715297019..f2e0a85d1fb 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-linux.png index 51dab31443a..d1a333f74a5 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-tritanopia-linux.png index 51dab31443a..d1a333f74a5 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-Form-Control-with-Custom-Input-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-colorblind-linux.png index cc8fc816ce7..4684450bccc 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-dimmed-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-dimmed-linux.png index 7c0b9b0f030..825e725372b 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-dimmed-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-high-contrast-linux.png index bbad5720b32..8e2ec8fe2fd 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-linux.png index cc8fc816ce7..4684450bccc 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-tritanopia-linux.png index cc8fc816ce7..4684450bccc 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-colorblind-linux.png index 7aa0a55d1eb..228f7c06ae3 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-high-contrast-linux.png index 1135d8d50ab..110a90ef29c 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-linux.png index 7aa0a55d1eb..228f7c06ae3 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-tritanopia-linux.png index 7aa0a55d1eb..228f7c06ae3 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Checkbox-And-Radio-Inputs-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-colorblind-linux.png index 9a52b1c0a3e..80e19ab80aa 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-dimmed-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-dimmed-linux.png index 36aa0dc299e..7c9498c8f64 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-dimmed-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-high-contrast-linux.png index 31d053f6114..fcd059c44e7 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-linux.png index 9a52b1c0a3e..80e19ab80aa 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-tritanopia-linux.png index 9a52b1c0a3e..80e19ab80aa 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-colorblind-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-colorblind-linux.png index 0f7332c086d..57886281494 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-colorblind-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-high-contrast-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-high-contrast-linux.png index 224f11711a3..b717a8d7c9c 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-high-contrast-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-linux.png index 0f7332c086d..57886281494 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-linux.png differ diff --git a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-tritanopia-linux.png b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-tritanopia-linux.png index 0f7332c086d..57886281494 100644 Binary files a/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-tritanopia-linux.png and b/.playwright/snapshots/components/FormControl.test.ts-snapshots/FormControl-With-Leading-Visual-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-colorblind-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-colorblind-linux.png new file mode 100644 index 00000000000..ab8acd4003e Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-dimmed-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-dimmed-linux.png new file mode 100644 index 00000000000..f3fd9e860d2 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-high-contrast-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-high-contrast-linux.png new file mode 100644 index 00000000000..86c35b1d46d Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-linux.png new file mode 100644 index 00000000000..ab8acd4003e Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-tritanopia-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-tritanopia-linux.png new file mode 100644 index 00000000000..ab8acd4003e Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-colorblind-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-colorblind-linux.png new file mode 100644 index 00000000000..2f957b92a84 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-high-contrast-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-high-contrast-linux.png new file mode 100644 index 00000000000..707be9c26fd Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-linux.png new file mode 100644 index 00000000000..2f957b92a84 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-tritanopia-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-tritanopia-linux.png new file mode 100644 index 00000000000..2f957b92a84 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-colorblind-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-colorblind-linux.png new file mode 100644 index 00000000000..b4e3cb7eb61 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-dimmed-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-dimmed-linux.png new file mode 100644 index 00000000000..c5045c2b0e0 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-high-contrast-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-high-contrast-linux.png new file mode 100644 index 00000000000..f890b775103 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-linux.png new file mode 100644 index 00000000000..b4e3cb7eb61 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-tritanopia-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-tritanopia-linux.png new file mode 100644 index 00000000000..b4e3cb7eb61 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-colorblind-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-colorblind-linux.png new file mode 100644 index 00000000000..a7f5e45497e Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-high-contrast-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-high-contrast-linux.png new file mode 100644 index 00000000000..50b6c495b06 Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-linux.png new file mode 100644 index 00000000000..a7f5e45497e Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-linux.png differ diff --git a/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-tritanopia-linux.png b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-tritanopia-linux.png new file mode 100644 index 00000000000..a7f5e45497e Binary files /dev/null and b/.playwright/snapshots/components/IconButton.test.ts-snapshots/IconButton-Keybinding-Hint-on-Description-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..0f89572e51a Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..f13182a7a16 Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..47bdf2c53ca Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..0f89572e51a Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..0f89572e51a Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..5b522169e8c Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..7215a9c96dc Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-linux.png new file mode 100644 index 00000000000..5b522169e8c Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..5b522169e8c Binary files /dev/null and b/.playwright/snapshots/components/InlineMessage.test.ts-snapshots/InlineMessage-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-colorblind-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-colorblind-linux.png deleted file mode 100644 index b77258c9709..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-colorblind-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-dimmed-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-dimmed-linux.png deleted file mode 100644 index 80254e042bc..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-dimmed-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-high-contrast-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-high-contrast-linux.png deleted file mode 100644 index 21e36702d95..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-high-contrast-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-linux.png deleted file mode 100644 index b77258c9709..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-tritanopia-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-tritanopia-linux.png deleted file mode 100644 index b77258c9709..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-dark-tritanopia-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-colorblind-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-colorblind-linux.png deleted file mode 100644 index bf8ed147561..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-colorblind-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-high-contrast-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-high-contrast-linux.png deleted file mode 100644 index ef3a475ee4b..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-high-contrast-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-linux.png deleted file mode 100644 index bf8ed147561..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-tritanopia-linux.png b/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-tritanopia-linux.png deleted file mode 100644 index bf8ed147561..00000000000 Binary files a/.playwright/snapshots/components/NavList.test.ts-snapshots/NavList-With-Bad-Example-of-SubNav-and-TrailingAction-light-tritanopia-linux.png and /dev/null differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..9184936428c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..ab598bc1619 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..861603d8332 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-linux.png new file mode 100644 index 00000000000..9184936428c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..9184936428c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..329a2f1d79c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..5cf5c5e320a Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-linux.png new file mode 100644 index 00000000000..329a2f1d79c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..329a2f1d79c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-colorblind-linux.png new file mode 100644 index 00000000000..71be1297378 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-dimmed-linux.png new file mode 100644 index 00000000000..7bb0976c2e2 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-high-contrast-linux.png new file mode 100644 index 00000000000..7074567d327 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-linux.png new file mode 100644 index 00000000000..7356ac5968e Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-tritanopia-linux.png new file mode 100644 index 00000000000..7356ac5968e Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-colorblind-linux.png new file mode 100644 index 00000000000..25f933882d6 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-high-contrast-linux.png new file mode 100644 index 00000000000..dc6f9180c55 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-linux.png new file mode 100644 index 00000000000..ba2865f37b0 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-tritanopia-linux.png new file mode 100644 index 00000000000..ba2865f37b0 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dialog-Overlay-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-colorblind-linux.png new file mode 100644 index 00000000000..38dcb48f995 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-dimmed-linux.png new file mode 100644 index 00000000000..5aed1427429 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-high-contrast-linux.png new file mode 100644 index 00000000000..c20b9db4b74 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-linux.png new file mode 100644 index 00000000000..f11e2e76b00 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-tritanopia-linux.png new file mode 100644 index 00000000000..f11e2e76b00 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-colorblind-linux.png new file mode 100644 index 00000000000..4d88a83b40e Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-high-contrast-linux.png new file mode 100644 index 00000000000..b2a3c80fc7a Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-linux.png new file mode 100644 index 00000000000..942ec63a064 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-tritanopia-linux.png new file mode 100644 index 00000000000..942ec63a064 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Dropdown-Overlay-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-colorblind-linux.png new file mode 100644 index 00000000000..5d0f7a2496e Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-dimmed-linux.png new file mode 100644 index 00000000000..da192aa2934 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-high-contrast-linux.png new file mode 100644 index 00000000000..ed2263ade4a Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-linux.png new file mode 100644 index 00000000000..5d0f7a2496e Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-tritanopia-linux.png new file mode 100644 index 00000000000..40e5344f33c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-colorblind-linux.png new file mode 100644 index 00000000000..e1c0c2fdc91 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-high-contrast-linux.png new file mode 100644 index 00000000000..88c5904b6e5 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-linux.png new file mode 100644 index 00000000000..e1c0c2fdc91 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-tritanopia-linux.png new file mode 100644 index 00000000000..fcbbed6917c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Issue-Overlay-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-colorblind-linux.png new file mode 100644 index 00000000000..15c7c89e0fc Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-dimmed-linux.png new file mode 100644 index 00000000000..38bb73c0bba Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-high-contrast-linux.png new file mode 100644 index 00000000000..7390ebf1e9c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-linux.png new file mode 100644 index 00000000000..bc2921e4ba2 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-tritanopia-linux.png new file mode 100644 index 00000000000..15c7c89e0fc Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-colorblind-linux.png new file mode 100644 index 00000000000..83c6dd9acf8 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-high-contrast-linux.png new file mode 100644 index 00000000000..2a7d1ad9849 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-linux.png new file mode 100644 index 00000000000..61e5794f0c7 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-tritanopia-linux.png new file mode 100644 index 00000000000..afe9e626188 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Memex-Nested-Overlays-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-colorblind-linux.png new file mode 100644 index 00000000000..2e510e99957 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-dimmed-linux.png new file mode 100644 index 00000000000..34dff091657 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-high-contrast-linux.png new file mode 100644 index 00000000000..6fc363ea5cc Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-linux.png new file mode 100644 index 00000000000..2e510e99957 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-tritanopia-linux.png new file mode 100644 index 00000000000..2e510e99957 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-colorblind-linux.png new file mode 100644 index 00000000000..740ce0ae6f3 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-high-contrast-linux.png new file mode 100644 index 00000000000..5de6ccd568d Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-linux.png new file mode 100644 index 00000000000..740ce0ae6f3 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-tritanopia-linux.png new file mode 100644 index 00000000000..740ce0ae6f3 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Nested-Overlays-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-colorblind-linux.png new file mode 100644 index 00000000000..17177e7fa56 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-dimmed-linux.png new file mode 100644 index 00000000000..f9d0fc96868 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-high-contrast-linux.png new file mode 100644 index 00000000000..c7e5a3082ea Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-linux.png new file mode 100644 index 00000000000..dcc6a2934d0 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-tritanopia-linux.png new file mode 100644 index 00000000000..dcc6a2934d0 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-colorblind-linux.png new file mode 100644 index 00000000000..48cf8bfa9a5 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-high-contrast-linux.png new file mode 100644 index 00000000000..71c59324000 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-linux.png new file mode 100644 index 00000000000..48cf8bfa9a5 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-tritanopia-linux.png new file mode 100644 index 00000000000..38015449521 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Overlay-On-Top-Of-Overlay-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-colorblind-linux.png new file mode 100644 index 00000000000..5d200813319 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-dimmed-linux.png new file mode 100644 index 00000000000..f23945bb6be Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-high-contrast-linux.png new file mode 100644 index 00000000000..18fc28b11df Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-linux.png new file mode 100644 index 00000000000..89dfaf97237 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-tritanopia-linux.png new file mode 100644 index 00000000000..89dfaf97237 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-colorblind-linux.png new file mode 100644 index 00000000000..f55e1b6bdea Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-high-contrast-linux.png new file mode 100644 index 00000000000..9863598732f Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-linux.png new file mode 100644 index 00000000000..f55e1b6bdea Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-tritanopia-linux.png new file mode 100644 index 00000000000..0a571cc0726 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Playground-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-colorblind-linux.png new file mode 100644 index 00000000000..a3d281ba1d5 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-dimmed-linux.png new file mode 100644 index 00000000000..873d027843a Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-high-contrast-linux.png new file mode 100644 index 00000000000..f038668b0fd Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-linux.png new file mode 100644 index 00000000000..a3d281ba1d5 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-tritanopia-linux.png new file mode 100644 index 00000000000..a3d281ba1d5 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-colorblind-linux.png new file mode 100644 index 00000000000..26ee25bae5c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-high-contrast-linux.png new file mode 100644 index 00000000000..cdb39f7b459 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-linux.png new file mode 100644 index 00000000000..26ee25bae5c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-tritanopia-linux.png new file mode 100644 index 00000000000..26ee25bae5c Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-Positioned-Overlays-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-colorblind-linux.png new file mode 100644 index 00000000000..5475c3715bc Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-dimmed-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-dimmed-linux.png new file mode 100644 index 00000000000..4bcd5ee5821 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-high-contrast-linux.png new file mode 100644 index 00000000000..f75800514b5 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-linux.png new file mode 100644 index 00000000000..87614b253a4 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-tritanopia-linux.png new file mode 100644 index 00000000000..87614b253a4 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-colorblind-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-colorblind-linux.png new file mode 100644 index 00000000000..be48775f9a6 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-high-contrast-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-high-contrast-linux.png new file mode 100644 index 00000000000..411ea701363 Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-linux.png new file mode 100644 index 00000000000..838eca2baec Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-linux.png differ diff --git a/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-tritanopia-linux.png b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-tritanopia-linux.png new file mode 100644 index 00000000000..838eca2baec Binary files /dev/null and b/.playwright/snapshots/components/Overlay.test.ts-snapshots/Overlay-SX-Props-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..d7e43eb7378 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..42ec1e64ecd Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..0a6be70f97c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..fd061151f64 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..d7e43eb7378 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..092832a3a9c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..47eef65a776 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-linux.png new file mode 100644 index 00000000000..d1fb7664e7e Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..092832a3a9c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-colorblind-linux.png new file mode 100644 index 00000000000..e04fe20979c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-dimmed-linux.png new file mode 100644 index 00000000000..95e799b6ed2 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-high-contrast-linux.png new file mode 100644 index 00000000000..ae6325c22a4 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-linux.png new file mode 100644 index 00000000000..657ffaf38da Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-tritanopia-linux.png new file mode 100644 index 00000000000..bd4783d5969 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-colorblind-linux.png new file mode 100644 index 00000000000..2665b31fc66 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-high-contrast-linux.png new file mode 100644 index 00000000000..7832d5f91b3 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-linux.png new file mode 100644 index 00000000000..390ca7a8dd7 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-tritanopia-linux.png new file mode 100644 index 00000000000..70bb0bc3109 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-Pull-Request-Page-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-colorblind-linux.png new file mode 100644 index 00000000000..45b4676c847 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-dimmed-linux.png new file mode 100644 index 00000000000..7dab71f3dc6 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-high-contrast-linux.png new file mode 100644 index 00000000000..f1af327da42 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-linux.png new file mode 100644 index 00000000000..45b4676c847 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-tritanopia-linux.png new file mode 100644 index 00000000000..45b4676c847 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-colorblind-linux.png new file mode 100644 index 00000000000..f98c8155e18 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-high-contrast-linux.png new file mode 100644 index 00000000000..f9fce8c5d34 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-linux.png new file mode 100644 index 00000000000..f98c8155e18 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-tritanopia-linux.png new file mode 100644 index 00000000000..f98c8155e18 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLayout-StickyPane-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..1a58b755263 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..44a1ceb03f6 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..bbf1096a087 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-linux.png new file mode 100644 index 00000000000..1a58b755263 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..1a58b755263 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..2adc6c31d6c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..8dcc1c1a9b1 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-linux.png new file mode 100644 index 00000000000..2adc6c31d6c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..2adc6c31d6c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..d7e43eb7378 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..42ec1e64ecd Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..0a6be70f97c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..fd061151f64 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..d7e43eb7378 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..092832a3a9c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..47eef65a776 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-linux.png new file mode 100644 index 00000000000..d1fb7664e7e Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..092832a3a9c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-colorblind-linux.png new file mode 100644 index 00000000000..84feee31c78 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-dimmed-linux.png new file mode 100644 index 00000000000..ac71ba29688 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-high-contrast-linux.png new file mode 100644 index 00000000000..a8305067893 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-linux.png new file mode 100644 index 00000000000..84feee31c78 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-tritanopia-linux.png new file mode 100644 index 00000000000..84feee31c78 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-colorblind-linux.png new file mode 100644 index 00000000000..e30218b26ce Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-high-contrast-linux.png new file mode 100644 index 00000000000..d77c58c6a1f Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-linux.png new file mode 100644 index 00000000000..e30218b26ce Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-tritanopia-linux.png new file mode 100644 index 00000000000..e30218b26ce Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Nested-Scroll-Container-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-colorblind-linux.png new file mode 100644 index 00000000000..e04fe20979c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-dimmed-linux.png new file mode 100644 index 00000000000..95e799b6ed2 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-high-contrast-linux.png new file mode 100644 index 00000000000..ae6325c22a4 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-linux.png new file mode 100644 index 00000000000..657ffaf38da Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-tritanopia-linux.png new file mode 100644 index 00000000000..bd4783d5969 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-colorblind-linux.png new file mode 100644 index 00000000000..2665b31fc66 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-high-contrast-linux.png new file mode 100644 index 00000000000..7832d5f91b3 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-linux.png new file mode 100644 index 00000000000..390ca7a8dd7 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-tritanopia-linux.png new file mode 100644 index 00000000000..70bb0bc3109 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Pull-Request-Page-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-colorblind-linux.png new file mode 100644 index 00000000000..f9ba1ac1eff Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-dimmed-linux.png new file mode 100644 index 00000000000..475d05cc9de Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-high-contrast-linux.png new file mode 100644 index 00000000000..3ac9df9c3f0 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-linux.png new file mode 100644 index 00000000000..f9ba1ac1eff Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-tritanopia-linux.png new file mode 100644 index 00000000000..f9ba1ac1eff Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-colorblind-linux.png new file mode 100644 index 00000000000..5823043f4dd Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-high-contrast-linux.png new file mode 100644 index 00000000000..a9790c1094c Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-linux.png new file mode 100644 index 00000000000..5823043f4dd Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-tritanopia-linux.png new file mode 100644 index 00000000000..5823043f4dd Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Resizable-Pane-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-colorblind-linux.png new file mode 100644 index 00000000000..2756ae1c910 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-dimmed-linux.png new file mode 100644 index 00000000000..736e8cd4412 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-high-contrast-linux.png new file mode 100644 index 00000000000..46dcab891b6 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-linux.png new file mode 100644 index 00000000000..2756ae1c910 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-tritanopia-linux.png new file mode 100644 index 00000000000..2756ae1c910 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-colorblind-linux.png new file mode 100644 index 00000000000..78fd32187a5 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-high-contrast-linux.png new file mode 100644 index 00000000000..99afb05b4a2 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-linux.png new file mode 100644 index 00000000000..78fd32187a5 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-tritanopia-linux.png new file mode 100644 index 00000000000..78fd32187a5 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-Scroll-Container-Within-Page-Layout-Pane-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-colorblind-linux.png new file mode 100644 index 00000000000..45b4676c847 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-dimmed-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-dimmed-linux.png new file mode 100644 index 00000000000..7dab71f3dc6 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-high-contrast-linux.png new file mode 100644 index 00000000000..f1af327da42 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-linux.png new file mode 100644 index 00000000000..45b4676c847 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-tritanopia-linux.png new file mode 100644 index 00000000000..45b4676c847 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-colorblind-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-colorblind-linux.png new file mode 100644 index 00000000000..f98c8155e18 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-high-contrast-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-high-contrast-linux.png new file mode 100644 index 00000000000..f9fce8c5d34 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-linux.png new file mode 100644 index 00000000000..f98c8155e18 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-linux.png differ diff --git a/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-tritanopia-linux.png b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-tritanopia-linux.png new file mode 100644 index 00000000000..f98c8155e18 Binary files /dev/null and b/.playwright/snapshots/components/PageLayout.test.ts-snapshots/PageLoyout-StickyPane-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..7b494e5c706 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..e218ec5b0cd Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..1d8e74c1f75 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-linux.png new file mode 100644 index 00000000000..7b494e5c706 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..7b494e5c706 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..a4fe17ed97b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..86a42dfef3b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-linux.png new file mode 100644 index 00000000000..a4fe17ed97b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..a4fe17ed97b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..7b494e5c706 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..e218ec5b0cd Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..1d8e74c1f75 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..7b494e5c706 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..7b494e5c706 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..a4fe17ed97b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..86a42dfef3b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-linux.png new file mode 100644 index 00000000000..a4fe17ed97b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..a4fe17ed97b Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-colorblind-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-colorblind-linux.png new file mode 100644 index 00000000000..0978ee7ca58 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-dimmed-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-dimmed-linux.png new file mode 100644 index 00000000000..47741643447 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-high-contrast-linux.png new file mode 100644 index 00000000000..9b57ec451ac Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-linux.png new file mode 100644 index 00000000000..0978ee7ca58 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-tritanopia-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-tritanopia-linux.png new file mode 100644 index 00000000000..0978ee7ca58 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-colorblind-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-colorblind-linux.png new file mode 100644 index 00000000000..421ba725d7e Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-high-contrast-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-high-contrast-linux.png new file mode 100644 index 00000000000..df56e09b8e2 Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-linux.png new file mode 100644 index 00000000000..421ba725d7e Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-linux.png differ diff --git a/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-tritanopia-linux.png b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-tritanopia-linux.png new file mode 100644 index 00000000000..421ba725d7e Binary files /dev/null and b/.playwright/snapshots/components/Pagination.test.ts-snapshots/Pagehead-Hide-Page-Numbers-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-colorblind-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-colorblind-linux.png new file mode 100644 index 00000000000..2301e3f2048 Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-dimmed-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-dimmed-linux.png new file mode 100644 index 00000000000..cff50cc2b22 Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-high-contrast-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-high-contrast-linux.png new file mode 100644 index 00000000000..3bd4b88fbc4 Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-linux.png new file mode 100644 index 00000000000..5f048b5371e Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-tritanopia-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-tritanopia-linux.png new file mode 100644 index 00000000000..5f048b5371e Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-colorblind-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-colorblind-linux.png new file mode 100644 index 00000000000..ed864f28fb0 Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-high-contrast-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-high-contrast-linux.png new file mode 100644 index 00000000000..f68e5b80100 Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-linux.png new file mode 100644 index 00000000000..602cb939e3c Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-linux.png differ diff --git a/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-tritanopia-linux.png b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-tritanopia-linux.png new file mode 100644 index 00000000000..602cb939e3c Binary files /dev/null and b/.playwright/snapshots/components/Popover.test.ts-snapshots/Popover-SX-Props-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-colorblind-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-colorblind-linux.png new file mode 100644 index 00000000000..6fe55fca51d Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-dimmed-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-dimmed-linux.png new file mode 100644 index 00000000000..1aa04d731a1 Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-high-contrast-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-high-contrast-linux.png new file mode 100644 index 00000000000..ea3000d0cfd Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-linux.png new file mode 100644 index 00000000000..b272c909a6f Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-tritanopia-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-tritanopia-linux.png new file mode 100644 index 00000000000..6fe55fca51d Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-colorblind-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-colorblind-linux.png new file mode 100644 index 00000000000..1fcdfa55c72 Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-high-contrast-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-high-contrast-linux.png new file mode 100644 index 00000000000..d828f979366 Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-linux.png new file mode 100644 index 00000000000..baf2d5630f7 Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-linux.png differ diff --git a/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-tritanopia-linux.png b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-tritanopia-linux.png new file mode 100644 index 00000000000..1fcdfa55c72 Binary files /dev/null and b/.playwright/snapshots/components/ProgressBar.test.ts-snapshots/ProgressBar-Dev-SX-Props-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-colorblind-linux.png index 25a690ad085..02f58e19c51 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-dimmed-linux.png index 77b2e7673f6..cd333f5db02 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-high-contrast-linux.png index e33faf65d17..09f60f3a344 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-linux.png index 25a690ad085..02f58e19c51 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-tritanopia-linux.png index 25a690ad085..02f58e19c51 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-colorblind-linux.png index 9b463eddfd0..161943e80f9 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-high-contrast-linux.png index 5744eb61ffb..9771438d739 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-linux.png index 9b463eddfd0..161943e80f9 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-tritanopia-linux.png index 9b463eddfd0..161943e80f9 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-colorblind-linux.png index c0b1fa89048..82fa31fc83a 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-dimmed-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-dimmed-linux.png index 4065c3fcef9..58658637bab 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-dimmed-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-high-contrast-linux.png index 81e4669eed1..3736751102c 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-linux.png index c0b1fa89048..82fa31fc83a 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-tritanopia-linux.png index c0b1fa89048..82fa31fc83a 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-colorblind-linux.png index eef796d4f3b..d47783e0700 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-high-contrast-linux.png index 1b536edcccd..1a9d3a7d015 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-linux.png index eef796d4f3b..d47783e0700 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-tritanopia-linux.png index eef796d4f3b..d47783e0700 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-Disabled-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-colorblind-linux.png index 77cd1ad1b57..0ac45b4592d 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-dimmed-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-dimmed-linux.png index 3b473e904a6..a5b6f6d8090 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-dimmed-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-high-contrast-linux.png index 0b8d4bb0048..9c4fd612fcb 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-linux.png index 77cd1ad1b57..0ac45b4592d 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-tritanopia-linux.png index 77cd1ad1b57..0ac45b4592d 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-colorblind-linux.png index 0efd3c3f98a..9eca3e86f93 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-high-contrast-linux.png index 3cdd41c5fc7..0145d6a1c6b 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-linux.png index 0efd3c3f98a..9eca3e86f93 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-tritanopia-linux.png index 0efd3c3f98a..9eca3e86f93 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Caption-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-colorblind-linux.png index eb92412ee50..fa63482607b 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-dimmed-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-dimmed-linux.png index 1d13cc5f4e3..c6f2592afe4 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-dimmed-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-high-contrast-linux.png index f59a6598855..386a3a4a4c1 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-linux.png index eb92412ee50..fa63482607b 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-tritanopia-linux.png index eb92412ee50..fa63482607b 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-colorblind-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-colorblind-linux.png index b7d81ecd327..fa57275b1a9 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-colorblind-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-high-contrast-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-high-contrast-linux.png index 40e02c9e6e2..81b85a18f56 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-high-contrast-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-linux.png index b7d81ecd327..fa57275b1a9 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-linux.png differ diff --git a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-tritanopia-linux.png b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-tritanopia-linux.png index b7d81ecd327..fa57275b1a9 100644 Binary files a/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-tritanopia-linux.png and b/.playwright/snapshots/components/Radio.test.ts-snapshots/Radio-With-Leading-Visual-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-colorblind-linux.png index 3c6a802422f..1708d479119 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-dimmed-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-dimmed-linux.png index db9ba520c0f..1f0d69d8d5c 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-dimmed-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-high-contrast-linux.png index 886bf703cc8..f22c05d6fc1 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-linux.png index 3c6a802422f..1708d479119 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-tritanopia-linux.png index 3c6a802422f..1708d479119 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-colorblind-linux.png index 28662bf4e94..1422b902003 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-high-contrast-linux.png index 8fb2875a4f8..f241445a113 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-linux.png index 28662bf4e94..1422b902003 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-tritanopia-linux.png index 28662bf4e94..1422b902003 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Caption-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-colorblind-linux.png index 84f79a1e2a0..fac6ebdcd61 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-dimmed-linux.png index e801366e4d4..703edb8b30b 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-high-contrast-linux.png index 141f851311e..c1a81cd3f93 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-linux.png index 84f79a1e2a0..fac6ebdcd61 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-tritanopia-linux.png index 84f79a1e2a0..fac6ebdcd61 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-colorblind-linux.png index df5d7821b69..74c0fe91650 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-high-contrast-linux.png index 31dfd5ef4b9..08582d30b16 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-linux.png index df5d7821b69..74c0fe91650 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-tritanopia-linux.png index df5d7821b69..74c0fe91650 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-colorblind-linux.png index 5fc6b7c3791..2fda7477770 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-dimmed-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-dimmed-linux.png index c60bc707af1..614417cb7ff 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-dimmed-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-high-contrast-linux.png index 53d0f520376..f23132a0df4 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-linux.png index db991b50442..e0743006d26 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-tritanopia-linux.png index db991b50442..e0743006d26 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-colorblind-linux.png index 4cd1aa73afc..04931ba4cc4 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-high-contrast-linux.png index 3d1db06785f..5dc251dc122 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-linux.png index bbbb025c4d0..400e05bfd95 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-tritanopia-linux.png index e97520ff349..400e05bfd95 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Error-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-colorblind-linux.png index 5890d365f47..57e3e593450 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-dimmed-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-dimmed-linux.png index c86b9663996..24d9a3c46f8 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-dimmed-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-high-contrast-linux.png index f5c7eabc151..227c2843a8b 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-linux.png index bb9e6b60ec2..7553e9f0652 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-tritanopia-linux.png index 5890d365f47..57e3e593450 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-colorblind-linux.png index c990b809850..67746714a1c 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-high-contrast-linux.png index dfdf6825e77..e2940041369 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-linux.png index 2b81ab27c74..a9d8b91b509 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-tritanopia-linux.png index c990b809850..67746714a1c 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Success-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-colorblind-linux.png index f53f4df15ae..4c519a00279 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-dimmed-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-dimmed-linux.png index b0e96af072e..a411a3460b6 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-dimmed-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-high-contrast-linux.png index 0abd42bd6b8..cbf11ba6b1a 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-linux.png index f53f4df15ae..4c519a00279 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-tritanopia-linux.png index f53f4df15ae..4c519a00279 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-colorblind-linux.png index 2d0b0812d2c..7085f2f6c19 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-high-contrast-linux.png index 08860202064..f28b7696d93 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-linux.png index 2d0b0812d2c..7085f2f6c19 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-tritanopia-linux.png index 2d0b0812d2c..7085f2f6c19 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-Visually-Hidden-Label-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-colorblind-linux.png index 40c85f2a226..63176380af4 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-dimmed-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-dimmed-linux.png index 181c0ab2899..a6215c8684f 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-dimmed-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-high-contrast-linux.png index 931d1495972..e67f0690494 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-linux.png index 40c85f2a226..63176380af4 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-tritanopia-linux.png index 40c85f2a226..63176380af4 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-colorblind-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-colorblind-linux.png index 6ee7daa653e..a1eb7390eeb 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-colorblind-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-high-contrast-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-high-contrast-linux.png index 12a45071791..5c482675e00 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-high-contrast-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-linux.png index 6ee7daa653e..a1eb7390eeb 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-linux.png differ diff --git a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-tritanopia-linux.png b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-tritanopia-linux.png index 6ee7daa653e..a1eb7390eeb 100644 Binary files a/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-tritanopia-linux.png and b/.playwright/snapshots/components/RadioGroup.test.ts-snapshots/RadioGroup-With-External-Label-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..b2443219b19 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..d98344a3fb9 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..93529901ed3 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-linux.png new file mode 100644 index 00000000000..b2443219b19 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..b2443219b19 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-colorblind-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..0677c176682 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..3fe2a15d1c7 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-linux.png new file mode 100644 index 00000000000..0677c176682 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..0677c176682 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..1ef651ca958 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..0b26322d851 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..2f1b39e722e Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-linux.png new file mode 100644 index 00000000000..745862b9c3d Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..1ef651ca958 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-colorblind-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..553afb8ba71 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..7f5d69467c3 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-linux.png new file mode 100644 index 00000000000..85e66885659 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..553afb8ba71 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-And-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-colorblind-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-colorblind-linux.png new file mode 100644 index 00000000000..1ef651ca958 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-dimmed-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-dimmed-linux.png new file mode 100644 index 00000000000..0b26322d851 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-high-contrast-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-high-contrast-linux.png new file mode 100644 index 00000000000..2f1b39e722e Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-linux.png new file mode 100644 index 00000000000..745862b9c3d Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-tritanopia-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-tritanopia-linux.png new file mode 100644 index 00000000000..1ef651ca958 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-colorblind-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-colorblind-linux.png new file mode 100644 index 00000000000..553afb8ba71 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-high-contrast-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-high-contrast-linux.png new file mode 100644 index 00000000000..7f5d69467c3 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-linux.png new file mode 100644 index 00000000000..85e66885659 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-linux.png differ diff --git a/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-tritanopia-linux.png b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-tritanopia-linux.png new file mode 100644 index 00000000000..553afb8ba71 Binary files /dev/null and b/.playwright/snapshots/components/SegmentedControl.test.ts-snapshots/SegmentedControl-Dev-With-Sx-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-colorblind-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-colorblind-linux.png index c420cd91393..82a757d1cac 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-colorblind-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-dimmed-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-dimmed-linux.png index 40d32effc6f..deb50c64999 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-dimmed-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-high-contrast-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-high-contrast-linux.png index 5ba57dc6a85..50c08345dad 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-linux.png index c420cd91393..82a757d1cac 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-tritanopia-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-tritanopia-linux.png index c420cd91393..82a757d1cac 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-colorblind-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-colorblind-linux.png index 7aaefcb553d..020ba25948b 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-colorblind-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-high-contrast-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-high-contrast-linux.png index 87271029fdd..6e6b6bda199 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-high-contrast-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-linux.png index 7aaefcb553d..020ba25948b 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-linux.png differ diff --git a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-tritanopia-linux.png b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-tritanopia-linux.png index 7aaefcb553d..020ba25948b 100644 Binary files a/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-tritanopia-linux.png and b/.playwright/snapshots/components/Select.test.ts-snapshots/Select-Small-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-linux.png index 56cdb8b9ae2..4e04038c90a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-modern-action-list--true-linux.png index 2ba34a0ccb3..e387a4fdc17 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-linux.png index 8f992956eb0..72394f2087a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-modern-action-list--true-linux.png index b40fa0c97cf..08ba50f3744 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-linux.png index fc9c94ceb72..811f523be40 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-modern-action-list--true-linux.png index 410eae5378e..11995b4296a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-linux.png index 56cdb8b9ae2..4e04038c90a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-modern-action-list--true-linux.png index 2ba34a0ccb3..e387a4fdc17 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-linux.png index 56cdb8b9ae2..4e04038c90a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-modern-action-list--true-linux.png index 2ba34a0ccb3..e387a4fdc17 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-linux.png index b9559a5197e..22810d7213a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-modern-action-list--true-linux.png index b1064331250..97e2d399561 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-linux.png index b8a3653968d..7985f9d5571 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-modern-action-list--true-linux.png index 845b61ba941..4fe9b4111c4 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-linux.png index b9559a5197e..22810d7213a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-modern-action-list--true-linux.png index b1064331250..97e2d399561 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-linux.png index b9559a5197e..22810d7213a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-modern-action-list--true-linux.png index b1064331250..9f0bbbd2b00 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Above-Tall-Body-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-linux.png index 6586dff7587..95ba750df31 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-modern-action-list--true-linux.png index 711307592a0..7c0a44a105e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-linux.png index e7bdb2789b5..f4c803d10e6 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-modern-action-list--true-linux.png index 278ff7c6978..92468a21a86 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-linux.png index c57938b7e7f..fd7c3dbb4d7 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-modern-action-list--true-linux.png index 834518c3da7..c1ac13ab7cf 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-linux.png index 6586dff7587..95ba750df31 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-modern-action-list--true-linux.png index 711307592a0..7c0a44a105e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-linux.png index 6586dff7587..95ba750df31 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-modern-action-list--true-linux.png index 711307592a0..7c0a44a105e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-dark-modern-action-list--true-linux.png index febdfd9066d..c8488d08ff5 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-light-modern-action-list--true-linux.png index 7d47e5b7083..9bfdccc1274 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-forced-colors-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-linux.png index a6a76085ad0..7b35581e95e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-modern-action-list--true-linux.png index 3de31d83a06..8b477f0cfa3 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-linux.png index 9c9fd53b926..ae77fe38dec 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-modern-action-list--true-linux.png index c77643c7ba2..3690152ca3e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-linux.png index a6a76085ad0..7b35581e95e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-modern-action-list--true-linux.png index 3de31d83a06..8b477f0cfa3 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-linux.png index a6a76085ad0..7b35581e95e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-modern-action-list--true-linux.png index 3de31d83a06..8b477f0cfa3 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Default-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-linux.png index 2db0c5148c1..28168b1010f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-modern-action-list--true-linux.png index 8c3d13469d1..bdab5786a6d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-linux.png index 1ca05efc880..086a7fa2be9 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-modern-action-list--true-linux.png index da2077b11a9..5f171189fe9 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-linux.png index ad027107c45..9f0b7500e7f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-modern-action-list--true-linux.png index fa932532a0e..a00d44b39f8 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-linux.png index 2db0c5148c1..28168b1010f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-modern-action-list--true-linux.png index 8c3d13469d1..bdab5786a6d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-linux.png index 2db0c5148c1..28168b1010f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-modern-action-list--true-linux.png index 8c3d13469d1..dce866cc9a9 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-linux.png index d75cb6cd27b..5961766d224 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-modern-action-list--true-linux.png index 04b2d75b6d0..eead2a99d8e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-linux.png index 47360db4fc5..4315f1fdaf8 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-modern-action-list--true-linux.png index f412927ebfd..56f181eb1b9 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-linux.png index d75cb6cd27b..5961766d224 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-modern-action-list--true-linux.png index 04b2d75b6d0..eead2a99d8e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-linux.png index d75cb6cd27b..5961766d224 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-modern-action-list--true-linux.png index 04b2d75b6d0..eead2a99d8e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-External-Anchor-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-linux.png index 09581c5e8c5..2358c4860db 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-modern-action-list--true-linux.png index d4e05643bb9..86e994e423b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-linux.png index 0d0fb3af4b7..9151206d08b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-modern-action-list--true-linux.png index c69e10f5274..36b8440c317 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-linux.png index 49ccb1f69ae..8b286a838af 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-modern-action-list--true-linux.png index 5c619b82051..b26c31c4972 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-linux.png index 09581c5e8c5..2358c4860db 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-modern-action-list--true-linux.png index d4e05643bb9..86e994e423b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-linux.png index 09581c5e8c5..2358c4860db 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-modern-action-list--true-linux.png index d4e05643bb9..86e994e423b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-linux.png index 1e7dc04338a..00cde9569d0 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-modern-action-list--true-linux.png index 81c046f815b..5d65845584f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-linux.png index 05a7af594fb..5a094d396a2 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-modern-action-list--true-linux.png index cb7bacf96ad..11970196764 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-linux.png index 1e7dc04338a..00cde9569d0 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-modern-action-list--true-linux.png index 81c046f815b..5d65845584f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-linux.png index 1e7dc04338a..00cde9569d0 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-modern-action-list--true-linux.png index 81c046f815b..5d65845584f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Overflowing-Items-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-linux.png index 4bf7e046e82..073bb006c45 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-modern-action-list--true-linux.png index f745c6b6750..073bb006c45 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-linux.png index 7fd1f5a0d19..c54098f73a0 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-modern-action-list--true-linux.png index dd9ed5215ba..c54098f73a0 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-linux.png index 80159d482d4..ec0eb96909b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-modern-action-list--true-linux.png index 80159d482d4..ec0eb96909b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-linux.png index 4bf7e046e82..073bb006c45 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-modern-action-list--true-linux.png index f745c6b6750..073bb006c45 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-linux.png index 4bf7e046e82..073bb006c45 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-modern-action-list--true-linux.png index f745c6b6750..073bb006c45 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-linux.png index d046a0c6158..2cbbdb93537 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-modern-action-list--true-linux.png index 07a2a90e169..2cbbdb93537 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-linux.png index 1d69edbed3b..a72e2781b8b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-modern-action-list--true-linux.png index 1d69edbed3b..a72e2781b8b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-linux.png index d046a0c6158..2cbbdb93537 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-modern-action-list--true-linux.png index 07a2a90e169..2cbbdb93537 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-linux.png index d046a0c6158..2cbbdb93537 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-modern-action-list--true-linux.png index 07a2a90e169..2cbbdb93537 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-After-Fetch-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-linux.png index cfb4048d49a..d9949ddfa39 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-modern-action-list--true-linux.png index e95d5c9657a..fed9542571f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-linux.png index b52b16819bf..b4dbfc26fb8 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-modern-action-list--true-linux.png index af8c42ce212..37e6b532058 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-linux.png index d9718b4e7de..8ff05564386 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-modern-action-list--true-linux.png index 3ac4204d6e4..2e5905d8554 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-linux.png index cfb4048d49a..d9949ddfa39 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-modern-action-list--true-linux.png index e95d5c9657a..fed9542571f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-linux.png index cfb4048d49a..d9949ddfa39 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-modern-action-list--true-linux.png index e95d5c9657a..fed9542571f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-linux.png index 9fb4714c8a0..d58819e23aa 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-modern-action-list--true-linux.png index 8cff07a8436..8d255f317ab 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-linux.png index 27caf73ab6f..7cd8e5f539b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-modern-action-list--true-linux.png index 41ab0cc5e97..fc3f509832c 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-linux.png index 9fb4714c8a0..d58819e23aa 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-modern-action-list--true-linux.png index 8cff07a8436..8d255f317ab 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-linux.png index 9fb4714c8a0..d58819e23aa 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-modern-action-list--true-linux.png index 8cff07a8436..ecc7a7919e1 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Initial-with-Underflowing-Items-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-linux.png index de117ee00ca..b0f6b72c9f9 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-modern-action-list--true-linux.png index f12cd5056ea..c41179277ac 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-linux.png index 9f3525cdf61..b964437363c 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-modern-action-list--true-linux.png index 66e518072ac..8f60a287256 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-linux.png index d496c6b84bd..f083b6c3788 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-modern-action-list--true-linux.png index c27e28b78b9..74bcdc8c26e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-linux.png index de117ee00ca..b0f6b72c9f9 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-modern-action-list--true-linux.png index f12cd5056ea..c41179277ac 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-linux.png index de117ee00ca..b0f6b72c9f9 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-modern-action-list--true-linux.png index f12cd5056ea..c41179277ac 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-linux.png index 536a8f69d6c..c3496922674 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-modern-action-list--true-linux.png index e7359bb0a4b..f7abff3b812 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-linux.png index 223ed27670f..3ffd75b525c 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-modern-action-list--true-linux.png index ecfeaf37f8d..f64b0312857 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-linux.png index 536a8f69d6c..c3496922674 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-modern-action-list--true-linux.png index e7359bb0a4b..f7abff3b812 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-linux.png index 536a8f69d6c..c3496922674 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-modern-action-list--true-linux.png index e7359bb0a4b..f7abff3b812 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Height-Variantions-and-Scroll-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-linux.png index 09581c5e8c5..14f21968e28 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-modern-action-list--true-linux.png index d4e05643bb9..fac23577e7a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-linux.png index 0d0fb3af4b7..2ba4d7ee8ad 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-modern-action-list--true-linux.png index c69e10f5274..1375e3eb806 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-linux.png index 49ccb1f69ae..a5551b94f8d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-modern-action-list--true-linux.png index 5c619b82051..30d938633d1 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-linux.png index 09581c5e8c5..14f21968e28 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-modern-action-list--true-linux.png index d4e05643bb9..fac23577e7a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-linux.png index 09581c5e8c5..14f21968e28 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-modern-action-list--true-linux.png index d4e05643bb9..fac23577e7a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-linux.png index 1e7dc04338a..b39f630e420 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-modern-action-list--true-linux.png index 81c046f815b..b4aa35dfb82 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-linux.png index 05a7af594fb..03f78d56d82 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-modern-action-list--true-linux.png index cb7bacf96ad..ea64e890a36 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-linux.png index 1e7dc04338a..b39f630e420 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-modern-action-list--true-linux.png index 81c046f815b..b4aa35dfb82 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-linux.png index 1e7dc04338a..b39f630e420 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-modern-action-list--true-linux.png index 81c046f815b..b4aa35dfb82 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-Single-Select-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..7429cfb77c8 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..7429cfb77c8 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..24fb23f56b6 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-dimmed-modern-action-list--true-linux.png new file mode 100644 index 00000000000..24fb23f56b6 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..422526ad09e Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..59fe73fb418 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-linux.png new file mode 100644 index 00000000000..7429cfb77c8 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-modern-action-list--true-linux.png new file mode 100644 index 00000000000..7429cfb77c8 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..7429cfb77c8 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..7429cfb77c8 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..b31c6db58bb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b31c6db58bb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..27a70b12571 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..27a70b12571 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-linux.png new file mode 100644 index 00000000000..b31c6db58bb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b31c6db58bb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..b31c6db58bb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b31c6db58bb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Css-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-linux.png index b011840f740..dd168efad74 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-modern-action-list--true-linux.png index b468069129d..1a363871361 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-linux.png index 2743b58295e..dca70ba429e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-modern-action-list--true-linux.png index 750e52b8a1f..0205dd94e5d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-linux.png index 4c3efe25bc4..53673efdb10 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-modern-action-list--true-linux.png index 0a012c0a80d..72a9d6e26b5 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-linux.png index b011840f740..dd168efad74 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-modern-action-list--true-linux.png index b468069129d..1a363871361 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-linux.png index b011840f740..dd168efad74 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-modern-action-list--true-linux.png index b468069129d..1a363871361 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-linux.png index 259963d9fe1..cade07014af 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-modern-action-list--true-linux.png index 28d87f83935..cfa7a4de82f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-linux.png index 25a9e177d8c..8e56da9f84c 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-modern-action-list--true-linux.png index 4dc028462f5..e42e601af47 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-linux.png index 259963d9fe1..cade07014af 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-modern-action-list--true-linux.png index 28d87f83935..cfa7a4de82f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-linux.png index 259963d9fe1..cade07014af 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-modern-action-list--true-linux.png index 28d87f83935..cfa7a4de82f 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Footer-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-linux.png index d8ca9b21694..11ccfb085ad 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-modern-action-list--true-linux.png index 803261d52f8..02bddb41e1d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-linux.png index fb7041db909..a63f6d6a934 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-modern-action-list--true-linux.png index 5169e4696c1..2f065a82c70 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-linux.png index 98d6ec96cb9..3ae4cd8c409 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-modern-action-list--true-linux.png index 45ca07a94fe..a99bd72968d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-linux.png index d8ca9b21694..11ccfb085ad 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-modern-action-list--true-linux.png index 803261d52f8..02bddb41e1d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-linux.png index d8ca9b21694..11ccfb085ad 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-modern-action-list--true-linux.png index 803261d52f8..973cef5b98b 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-linux.png index a201450fbe2..53a15804e37 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-modern-action-list--true-linux.png index 3f410fa3492..a738cc09cab 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-linux.png index 7e01b17d3f3..e2450488e27 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-modern-action-list--true-linux.png index 8bb4356b45f..96b882c8fdb 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-linux.png index a201450fbe2..53a15804e37 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-modern-action-list--true-linux.png index 3f410fa3492..a738cc09cab 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-linux.png index a201450fbe2..53a15804e37 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-modern-action-list--true-linux.png index 3f410fa3492..a738cc09cab 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Groups-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-linux.png index 6cd0441ab65..80cab97b817 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-modern-action-list--true-linux.png index 05339bb6c5d..5677f88f6ac 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-linux.png index 3ab36166892..931d0fe4311 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-modern-action-list--true-linux.png index 463c47001ee..19a308281f8 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-linux.png index 5402ea234a3..8aecd833ec5 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-modern-action-list--true-linux.png index e69dc6fd293..991c9b97376 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-linux.png index 6cd0441ab65..80cab97b817 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-modern-action-list--true-linux.png index 05339bb6c5d..5677f88f6ac 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-linux.png index 6cd0441ab65..80cab97b817 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-modern-action-list--true-linux.png index 05339bb6c5d..5677f88f6ac 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-linux.png index 6126ac50abc..c652967475d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-modern-action-list--true-linux.png index c5e8b1f576a..c8ba5dbcdc1 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-linux.png index 7e6804a87b2..b6d07e8bd31 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-modern-action-list--true-linux.png index 889ef739045..2939bdce896 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-linux.png index 6126ac50abc..c652967475d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-modern-action-list--true-linux.png index c5e8b1f576a..c8ba5dbcdc1 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-linux.png index 6126ac50abc..c652967475d 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-modern-action-list--true-linux.png index c5e8b1f576a..c8ba5dbcdc1 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Item-Dividers-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-colorblind-linux.png new file mode 100644 index 00000000000..8f383274ca4 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..0ac723e256b Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-dimmed-linux.png new file mode 100644 index 00000000000..89d31b606fc Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-dimmed-modern-action-list--true-linux.png new file mode 100644 index 00000000000..3525783ac79 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-high-contrast-linux.png new file mode 100644 index 00000000000..e2826e119a1 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..c6d42a4b85f Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-linux.png new file mode 100644 index 00000000000..8f383274ca4 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-modern-action-list--true-linux.png new file mode 100644 index 00000000000..0ac723e256b Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-tritanopia-linux.png new file mode 100644 index 00000000000..8f383274ca4 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..0ac723e256b Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-colorblind-linux.png new file mode 100644 index 00000000000..7832e9a9037 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..5c360970b81 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-high-contrast-linux.png new file mode 100644 index 00000000000..f898571a393 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..c81466ee1cf Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-linux.png new file mode 100644 index 00000000000..7832e9a9037 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-modern-action-list--true-linux.png new file mode 100644 index 00000000000..5c360970b81 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-tritanopia-linux.png new file mode 100644 index 00000000000..7832e9a9037 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..5c360970b81 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Internally-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-colorblind-linux.png new file mode 100644 index 00000000000..c7fb71adb16 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..f06f73557ff Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-dimmed-linux.png new file mode 100644 index 00000000000..53a5458eb5d Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-dimmed-modern-action-list--true-linux.png new file mode 100644 index 00000000000..0a77f027ffd Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-high-contrast-linux.png new file mode 100644 index 00000000000..c9ff2bc99c5 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..3b7e313e883 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-linux.png new file mode 100644 index 00000000000..ce32f61be6e Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-modern-action-list--true-linux.png new file mode 100644 index 00000000000..f06f73557ff Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-tritanopia-linux.png new file mode 100644 index 00000000000..c7fb71adb16 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..f06f73557ff Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-colorblind-linux.png new file mode 100644 index 00000000000..662af42b235 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b92a3af1f00 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-high-contrast-linux.png new file mode 100644 index 00000000000..bc4c4137577 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..bab54f06826 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-linux.png new file mode 100644 index 00000000000..662af42b235 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b92a3af1f00 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-tritanopia-linux.png new file mode 100644 index 00000000000..662af42b235 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b92a3af1f00 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Label-Visually-Hidden-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-linux.png index 2223fec8a8c..8a7b27fdadf 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-modern-action-list--true-linux.png index 8b026fc8267..2b86b2e2656 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-linux.png index 7e2216be83f..52f23da0568 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-modern-action-list--true-linux.png index ec14e5173b3..8ecb6aec00e 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-linux.png index e3c0fcc3fb0..eb145f38fb2 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-modern-action-list--true-linux.png index 64b3b33d98d..a20863e9b82 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-linux.png index 2223fec8a8c..8a7b27fdadf 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-modern-action-list--true-linux.png index 8b026fc8267..2b86b2e2656 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-linux.png index 2223fec8a8c..8a7b27fdadf 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-modern-action-list--true-linux.png index 8b026fc8267..2b86b2e2656 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-linux.png index d827de02a40..0cb2ba8020a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-modern-action-list--true-linux.png index 1a28d121de6..6f1c4414ac8 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-linux.png index d778eee1aca..9ab687eb6ad 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-modern-action-list--true-linux.png index ad704b64404..4ced6c499df 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-linux.png index d827de02a40..0cb2ba8020a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-modern-action-list--true-linux.png index 1a28d121de6..6f1c4414ac8 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-linux.png index d827de02a40..0cb2ba8020a 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-modern-action-list--true-linux.png index 1a28d121de6..6f1c4414ac8 100644 Binary files a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-modern-action-list--true-linux.png and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Placeholder-for-Search-Input-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-colorblind-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-dimmed-linux.png new file mode 100644 index 00000000000..56469c5cfbe Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-dimmed-modern-action-list--true-linux.png new file mode 100644 index 00000000000..56469c5cfbe Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-high-contrast-linux.png new file mode 100644 index 00000000000..ba0914a4187 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..1a4dd5c42d6 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-modern-action-list--true-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-tritanopia-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-colorblind-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-high-contrast-linux.png new file mode 100644 index 00000000000..d1e33ba752f Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..d1e33ba752f Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-linux.png new file mode 100644 index 00000000000..161d5f304a1 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-tritanopia-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-and-Css-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-colorblind-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-dimmed-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-dimmed-linux.png new file mode 100644 index 00000000000..56469c5cfbe Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-dimmed-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-dimmed-modern-action-list--true-linux.png new file mode 100644 index 00000000000..56469c5cfbe Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-dimmed-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-high-contrast-linux.png new file mode 100644 index 00000000000..ba0914a4187 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..1a4dd5c42d6 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-modern-action-list--true-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-tritanopia-linux.png new file mode 100644 index 00000000000..3f1571f6fbb Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..05df1d83203 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-dark-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-colorblind-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-colorblind-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-colorblind-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-colorblind-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-colorblind-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-high-contrast-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-high-contrast-linux.png new file mode 100644 index 00000000000..d1e33ba752f Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-high-contrast-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-high-contrast-modern-action-list--true-linux.png new file mode 100644 index 00000000000..d1e33ba752f Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-high-contrast-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-tritanopia-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-tritanopia-linux.png new file mode 100644 index 00000000000..161d5f304a1 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-tritanopia-modern-action-list--true-linux.png b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-tritanopia-modern-action-list--true-linux.png new file mode 100644 index 00000000000..b3a26c90827 Binary files /dev/null and b/.playwright/snapshots/components/SelectPanel.test.ts-snapshots/SelectPanel-With-Sx-light-tritanopia-modern-action-list--true-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-colorblind-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-colorblind-linux.png new file mode 100644 index 00000000000..65e722a5bcc Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-dimmed-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-dimmed-linux.png new file mode 100644 index 00000000000..70f0e626d18 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-high-contrast-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-high-contrast-linux.png new file mode 100644 index 00000000000..84195a877b2 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-linux.png new file mode 100644 index 00000000000..27f0e0be0da Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-tritanopia-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-tritanopia-linux.png new file mode 100644 index 00000000000..6f5f68b71b4 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-colorblind-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-colorblind-linux.png new file mode 100644 index 00000000000..a99147e0059 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-high-contrast-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-high-contrast-linux.png new file mode 100644 index 00000000000..c3d90cc3a68 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-linux.png new file mode 100644 index 00000000000..4aeddbe6e03 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-tritanopia-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-tritanopia-linux.png new file mode 100644 index 00000000000..3061962a774 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithCSS-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-colorblind-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-colorblind-linux.png new file mode 100644 index 00000000000..860ac151f38 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-dimmed-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-dimmed-linux.png new file mode 100644 index 00000000000..74132d45826 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-high-contrast-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-high-contrast-linux.png new file mode 100644 index 00000000000..0e560eaf0ea Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-linux.png new file mode 100644 index 00000000000..370ff8df54d Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-tritanopia-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-tritanopia-linux.png new file mode 100644 index 00000000000..370ff8df54d Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-colorblind-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-colorblind-linux.png new file mode 100644 index 00000000000..cf9f751fd88 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-high-contrast-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-high-contrast-linux.png new file mode 100644 index 00000000000..06e19d5a8cc Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-linux.png new file mode 100644 index 00000000000..58945d4f5af Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-tritanopia-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-tritanopia-linux.png new file mode 100644 index 00000000000..58945d4f5af Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSx-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-colorblind-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-colorblind-linux.png new file mode 100644 index 00000000000..860ac151f38 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-dimmed-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-dimmed-linux.png new file mode 100644 index 00000000000..3011c2dcb6c Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-high-contrast-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-high-contrast-linux.png new file mode 100644 index 00000000000..0e560eaf0ea Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-linux.png new file mode 100644 index 00000000000..370ff8df54d Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-tritanopia-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-tritanopia-linux.png new file mode 100644 index 00000000000..370ff8df54d Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-colorblind-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-colorblind-linux.png new file mode 100644 index 00000000000..cf9f751fd88 Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-high-contrast-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-high-contrast-linux.png new file mode 100644 index 00000000000..06e19d5a8cc Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-linux.png new file mode 100644 index 00000000000..58945d4f5af Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-linux.png differ diff --git a/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-tritanopia-linux.png b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-tritanopia-linux.png new file mode 100644 index 00000000000..58945d4f5af Binary files /dev/null and b/.playwright/snapshots/components/SubNav.test.ts-snapshots/SubNav-Dev-WithSxAndCSS-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-colorblind-linux.png new file mode 100644 index 00000000000..f8d0964c5d7 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-dimmed-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-dimmed-linux.png new file mode 100644 index 00000000000..37805b608f0 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-high-contrast-linux.png new file mode 100644 index 00000000000..097f4bbc611 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-linux.png new file mode 100644 index 00000000000..f8d0964c5d7 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-tritanopia-linux.png new file mode 100644 index 00000000000..f8d0964c5d7 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-colorblind-linux.png new file mode 100644 index 00000000000..f42efd1779a Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-high-contrast-linux.png new file mode 100644 index 00000000000..f132bf21c32 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-linux.png new file mode 100644 index 00000000000..f42efd1779a Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-tritanopia-linux.png new file mode 100644 index 00000000000..f42efd1779a Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithCSS-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-colorblind-linux.png new file mode 100644 index 00000000000..df3df41d174 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-dimmed-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-dimmed-linux.png new file mode 100644 index 00000000000..7c5497e2b96 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-high-contrast-linux.png new file mode 100644 index 00000000000..36a573d7a12 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-linux.png new file mode 100644 index 00000000000..df3df41d174 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-tritanopia-linux.png new file mode 100644 index 00000000000..df3df41d174 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-colorblind-linux.png new file mode 100644 index 00000000000..785dcf53bb9 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-high-contrast-linux.png new file mode 100644 index 00000000000..adef3e640fb Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-linux.png new file mode 100644 index 00000000000..785dcf53bb9 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-tritanopia-linux.png new file mode 100644 index 00000000000..785dcf53bb9 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-colorblind-linux.png new file mode 100644 index 00000000000..df3df41d174 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-dimmed-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-dimmed-linux.png new file mode 100644 index 00000000000..7c5497e2b96 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-high-contrast-linux.png new file mode 100644 index 00000000000..36a573d7a12 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-linux.png new file mode 100644 index 00000000000..df3df41d174 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-tritanopia-linux.png new file mode 100644 index 00000000000..df3df41d174 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-colorblind-linux.png new file mode 100644 index 00000000000..785dcf53bb9 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-high-contrast-linux.png new file mode 100644 index 00000000000..adef3e640fb Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-linux.png new file mode 100644 index 00000000000..785dcf53bb9 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-tritanopia-linux.png new file mode 100644 index 00000000000..785dcf53bb9 Binary files /dev/null and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-dark-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-dark-high-contrast-linux.png index ef480436f25..cef4b87359b 100644 Binary files a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-dark-high-contrast-linux.png and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-light-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-light-high-contrast-linux.png index 04465ff0cc1..78407f49e11 100644 Binary files a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-light-high-contrast-linux.png and b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Small-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-dark-high-contrast-linux.png b/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-dark-high-contrast-linux.png index d846b4fbc76..f55f5739a92 100644 Binary files a/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-dark-high-contrast-linux.png and b/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-light-high-contrast-linux.png b/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-light-high-contrast-linux.png index 87cc80fd5bb..2528f9b8115 100644 Binary files a/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-light-high-contrast-linux.png and b/.playwright/snapshots/components/TextInputWithTokens.test.ts-snapshots/TextInputWithTokens-Size-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..6c67385f2bc Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..b306cbd8484 Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..a4fdd19d793 Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..6c67385f2bc Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..6c67385f2bc Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..ba71282acf3 Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..77ec2086456 Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-linux.png new file mode 100644 index 00000000000..ba71282acf3 Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..ba71282acf3 Binary files /dev/null and b/.playwright/snapshots/components/Textarea.test.ts-snapshots/Textarea-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-colorblind-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-colorblind-linux.png new file mode 100644 index 00000000000..cd814fe66e7 Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-dimmed-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-dimmed-linux.png new file mode 100644 index 00000000000..56aa9ef8b10 Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-high-contrast-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-high-contrast-linux.png new file mode 100644 index 00000000000..03f1475c831 Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-linux.png new file mode 100644 index 00000000000..3de87f7854a Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-tritanopia-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-tritanopia-linux.png new file mode 100644 index 00000000000..3de87f7854a Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-colorblind-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-colorblind-linux.png new file mode 100644 index 00000000000..af26dc01247 Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-high-contrast-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-high-contrast-linux.png new file mode 100644 index 00000000000..4c2242f7484 Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-linux.png new file mode 100644 index 00000000000..64926bde6a6 Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-linux.png differ diff --git a/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-tritanopia-linux.png b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-tritanopia-linux.png new file mode 100644 index 00000000000..64926bde6a6 Binary files /dev/null and b/.playwright/snapshots/components/Timeline.test.ts-snapshots/Timeline-SX-Props-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..02234423645 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..8f60bc33e22 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..f117a3c6c2c Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-linux.png new file mode 100644 index 00000000000..02234423645 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..02234423645 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..2bc7d141be0 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..a90edd7f246 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-linux.png new file mode 100644 index 00000000000..2bc7d141be0 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..062712eb449 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-colorblind-linux.png new file mode 100644 index 00000000000..2d0a32f12d5 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-dimmed-linux.png new file mode 100644 index 00000000000..35b288f0958 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-high-contrast-linux.png new file mode 100644 index 00000000000..21f4d561ca4 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-linux.png new file mode 100644 index 00000000000..2d0a32f12d5 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-tritanopia-linux.png new file mode 100644 index 00000000000..2d0a32f12d5 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-colorblind-linux.png new file mode 100644 index 00000000000..ba093ad0c98 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-high-contrast-linux.png new file mode 100644 index 00000000000..7b0add732fb Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-linux.png new file mode 100644 index 00000000000..ba093ad0c98 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-tritanopia-linux.png new file mode 100644 index 00000000000..ba093ad0c98 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-Interactive-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-colorblind-linux.png new file mode 100644 index 00000000000..23f3953e44c Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-dimmed-linux.png new file mode 100644 index 00000000000..766f5516baa Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-high-contrast-linux.png new file mode 100644 index 00000000000..9b9cde8bb08 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-linux.png new file mode 100644 index 00000000000..23f3953e44c Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-tritanopia-linux.png new file mode 100644 index 00000000000..23f3953e44c Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-colorblind-linux.png new file mode 100644 index 00000000000..8a06b5ad27d Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-high-contrast-linux.png new file mode 100644 index 00000000000..197a4c73553 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-linux.png new file mode 100644 index 00000000000..8a06b5ad27d Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-tritanopia-linux.png new file mode 100644 index 00000000000..8a06b5ad27d Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-AvatarToken-On-Remove-Fn-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-colorblind-linux.png new file mode 100644 index 00000000000..695bbdbeaf3 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-dimmed-linux.png new file mode 100644 index 00000000000..44ba463e4b2 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-high-contrast-linux.png new file mode 100644 index 00000000000..814df4eb4f6 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-linux.png new file mode 100644 index 00000000000..695bbdbeaf3 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-tritanopia-linux.png new file mode 100644 index 00000000000..695bbdbeaf3 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-colorblind-linux.png new file mode 100644 index 00000000000..d5029e854c8 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-high-contrast-linux.png new file mode 100644 index 00000000000..d5029e854c8 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-linux.png new file mode 100644 index 00000000000..d5029e854c8 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-tritanopia-linux.png new file mode 100644 index 00000000000..d5029e854c8 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-IssueLabelToken-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..a2b51fd1126 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..e18e7290dd0 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..df78189e886 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-linux.png new file mode 100644 index 00000000000..a2b51fd1126 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..a2b51fd1126 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..00d0c535592 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..58d7270a5cc Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-linux.png new file mode 100644 index 00000000000..00d0c535592 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..00d0c535592 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..52764a8380b Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..1594e15dadc Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..7fd6ca68bfe Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..52764a8380b Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..52764a8380b Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..1c1ed3389bf Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..ec6b8403650 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-linux.png new file mode 100644 index 00000000000..1c1ed3389bf Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..1c1ed3389bf Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-colorblind-linux.png new file mode 100644 index 00000000000..740e408142f Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-dimmed-linux.png new file mode 100644 index 00000000000..7b774f027b5 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-high-contrast-linux.png new file mode 100644 index 00000000000..e39b57f87ed Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-linux.png new file mode 100644 index 00000000000..740e408142f Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-tritanopia-linux.png new file mode 100644 index 00000000000..740e408142f Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-colorblind-linux.png new file mode 100644 index 00000000000..39aa7596268 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-high-contrast-linux.png new file mode 100644 index 00000000000..39aa7596268 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-linux.png new file mode 100644 index 00000000000..39aa7596268 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-tritanopia-linux.png new file mode 100644 index 00000000000..39aa7596268 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-IssueLabelToken-with-onRemove-fn-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-colorblind-linux.png new file mode 100644 index 00000000000..95781f8c689 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-dimmed-linux.png new file mode 100644 index 00000000000..e4d659f1fa5 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-high-contrast-linux.png new file mode 100644 index 00000000000..7e872dbdbe7 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-linux.png new file mode 100644 index 00000000000..95781f8c689 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-tritanopia-linux.png new file mode 100644 index 00000000000..95781f8c689 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-colorblind-linux.png new file mode 100644 index 00000000000..a25ae1f9d19 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-high-contrast-linux.png new file mode 100644 index 00000000000..78547b74fca Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-linux.png new file mode 100644 index 00000000000..a25ae1f9d19 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-tritanopia-linux.png new file mode 100644 index 00000000000..a25ae1f9d19 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Large-Token-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-colorblind-linux.png new file mode 100644 index 00000000000..66df456b1ed Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-dimmed-linux.png new file mode 100644 index 00000000000..ceabd622946 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-high-contrast-linux.png new file mode 100644 index 00000000000..81db80d9081 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-linux.png new file mode 100644 index 00000000000..66df456b1ed Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-tritanopia-linux.png new file mode 100644 index 00000000000..66df456b1ed Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-colorblind-linux.png new file mode 100644 index 00000000000..3e6c4165679 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-high-contrast-linux.png new file mode 100644 index 00000000000..fb1518972e9 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-linux.png new file mode 100644 index 00000000000..3e6c4165679 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-tritanopia-linux.png new file mode 100644 index 00000000000..3e6c4165679 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Small-Token-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-colorblind-linux.png new file mode 100644 index 00000000000..f552fa7afbd Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-dimmed-linux.png new file mode 100644 index 00000000000..f4b2bab1d5b Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-high-contrast-linux.png new file mode 100644 index 00000000000..d2fe915c7cd Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-linux.png new file mode 100644 index 00000000000..f552fa7afbd Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-tritanopia-linux.png new file mode 100644 index 00000000000..f552fa7afbd Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-colorblind-linux.png new file mode 100644 index 00000000000..5334f7fe8cb Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-high-contrast-linux.png new file mode 100644 index 00000000000..599ae66bc10 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-linux.png new file mode 100644 index 00000000000..5334f7fe8cb Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-tritanopia-linux.png new file mode 100644 index 00000000000..5334f7fe8cb Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-With-Leading-Visual-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-colorblind-linux.png new file mode 100644 index 00000000000..c88a804bf09 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-dimmed-linux.png new file mode 100644 index 00000000000..8da2f743db1 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-high-contrast-linux.png new file mode 100644 index 00000000000..bd9d23688e7 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-linux.png new file mode 100644 index 00000000000..c88a804bf09 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-tritanopia-linux.png new file mode 100644 index 00000000000..c88a804bf09 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-colorblind-linux.png new file mode 100644 index 00000000000..e7b0e02fc58 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-high-contrast-linux.png new file mode 100644 index 00000000000..8be4dd23191 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-linux.png new file mode 100644 index 00000000000..e7b0e02fc58 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-tritanopia-linux.png new file mode 100644 index 00000000000..e7b0e02fc58 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-Token-with-onRemove-fn-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-colorblind-linux.png new file mode 100644 index 00000000000..95781f8c689 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-dimmed-linux.png new file mode 100644 index 00000000000..e4d659f1fa5 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-high-contrast-linux.png new file mode 100644 index 00000000000..7e872dbdbe7 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-linux.png new file mode 100644 index 00000000000..95781f8c689 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-tritanopia-linux.png new file mode 100644 index 00000000000..95781f8c689 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-colorblind-linux.png new file mode 100644 index 00000000000..a25ae1f9d19 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-high-contrast-linux.png new file mode 100644 index 00000000000..78547b74fca Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-linux.png new file mode 100644 index 00000000000..a25ae1f9d19 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-tritanopia-linux.png new file mode 100644 index 00000000000..a25ae1f9d19 Binary files /dev/null and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-X-Large-Token-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-colorblind-linux.png index 8c73d42a57b..52764a8380b 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-dimmed-linux.png index 927f2926d54..1594e15dadc 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-high-contrast-linux.png index 10c579efc35..7fd6ca68bfe 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-linux.png index 8c73d42a57b..52764a8380b 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-tritanopia-linux.png index 8c73d42a57b..52764a8380b 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-colorblind-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-colorblind-linux.png index a08d227f335..1c1ed3389bf 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-high-contrast-linux.png index 93b1aa311a5..ec6b8403650 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-linux.png index a08d227f335..1c1ed3389bf 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-tritanopia-linux.png index a08d227f335..1c1ed3389bf 100644 Binary files a/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/Token.test.ts-snapshots/Token-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-colorblind-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-colorblind-linux.png new file mode 100644 index 00000000000..233af12addb Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-dimmed-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-dimmed-linux.png new file mode 100644 index 00000000000..c0e1e1f19a6 Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-high-contrast-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-high-contrast-linux.png new file mode 100644 index 00000000000..c8accffdf2c Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-linux.png new file mode 100644 index 00000000000..233af12addb Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-tritanopia-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-tritanopia-linux.png new file mode 100644 index 00000000000..233af12addb Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-colorblind-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-colorblind-linux.png new file mode 100644 index 00000000000..f4091c94478 Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-high-contrast-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-high-contrast-linux.png new file mode 100644 index 00000000000..922f6c202ad Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-linux.png new file mode 100644 index 00000000000..f4091c94478 Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-linux.png differ diff --git a/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-tritanopia-linux.png b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-tritanopia-linux.png new file mode 100644 index 00000000000..f4091c94478 Binary files /dev/null and b/.playwright/snapshots/components/TooltipV2.test.ts-snapshots/TooltipV2-Dev-SX-Props-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-colorblind-linux.png index 12ae1ab1f97..87ab8e84834 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-dimmed-linux.png index 81054b17e8c..7325d273498 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-high-contrast-linux.png index 8f3cc309dbc..41a3d33be6a 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-linux.png index dc81c874410..47ad814b608 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-tritanopia-linux.png index 12ae1ab1f97..87ab8e84834 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-colorblind-linux.png index 2b309d634e2..ee2eef2252d 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-high-contrast-linux.png index 86ba24fecf0..a14a3ffac85 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-linux.png index 4a6a6bdd442..97584376003 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-tritanopia-linux.png index 2b309d634e2..ee2eef2252d 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-colorblind-linux.png index a9945c7c97a..246f217ec57 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-dimmed-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-dimmed-linux.png index 93984a22924..915db6bcc11 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-dimmed-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-high-contrast-linux.png index 60c64608b2e..bd1437b8b47 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-linux.png index 087d3050920..c825c2e9d53 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-tritanopia-linux.png index a9945c7c97a..246f217ec57 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-colorblind-linux.png index d2755f7b7f1..d84bd7949a8 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-high-contrast-linux.png index 7bf145d7900..30d7d69c224 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-linux.png index d2755f7b7f1..d84bd7949a8 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-tritanopia-linux.png index d2755f7b7f1..d84bd7949a8 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Empty-Directories-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-colorblind-linux.png index 0ddff78f691..02fcf1668a1 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-dimmed-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-dimmed-linux.png index 894a7f69c06..f9cabc94740 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-dimmed-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-high-contrast-linux.png index a79d7111fc7..11fb1f3f63c 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-linux.png index cb584be7e9f..17e7213615f 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-tritanopia-linux.png index b93a601acdc..021b399aa17 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-colorblind-linux.png index bbc93d13a8b..3b1dafdef7f 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-high-contrast-linux.png index 5d89ddfa693..51d8856c85e 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-linux.png index 0946c66e7e2..a9e6f0b14a0 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-tritanopia-linux.png index b806f4525c7..9c4c0558f7f 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-Changed-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-colorblind-linux.png index 6a7610277a2..3fd400a3e78 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-dimmed-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-dimmed-linux.png index 274c0dabde8..7422369cf32 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-dimmed-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-high-contrast-linux.png index da0caffb7a7..24a37f28b24 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-linux.png index 0b3c5d491ce..33fee37e4d1 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-tritanopia-linux.png index 6a7610277a2..3fd400a3e78 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-colorblind-linux.png index 9c680127141..8c5d9b0db6c 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-high-contrast-linux.png index dd5cf3fcaf9..7fa7e85a0d8 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-linux.png index 9c680127141..8c5d9b0db6c 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-tritanopia-linux.png index 9c680127141..8c5d9b0db6c 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Files-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-colorblind-linux.png index 0cd4881456d..9ae47128ca6 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-dimmed-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-dimmed-linux.png index 6826d686203..7f37f990bbc 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-dimmed-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-high-contrast-linux.png index be11d72a4bd..aeb23275d62 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-linux.png index f25f67fd3ce..e6e6adcccb9 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-tritanopia-linux.png index 80f4f0ad69b..6c45e7b3701 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-colorblind-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-colorblind-linux.png index c308d50dbe3..cbbb07b750e 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-colorblind-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-high-contrast-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-high-contrast-linux.png index d1b441d80e1..741b2f22541 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-high-contrast-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-linux.png index a9cc60d52b3..ea44200b078 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-linux.png differ diff --git a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-tritanopia-linux.png b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-tritanopia-linux.png index febee9c17e5..1ee261efe3f 100644 Binary files a/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-tritanopia-linux.png and b/.playwright/snapshots/components/TreeView.test.ts-snapshots/TreeView-Leading-Action-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-colorblind-linux.png index a960918babc..92c1a0e9ffd 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-colorblind-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-dimmed-linux.png index c5c4f595ea4..eb6a6146938 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-dimmed-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-high-contrast-linux.png index 9f940e52411..25597772826 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-high-contrast-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-linux.png index 737ba2107fe..92c1a0e9ffd 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-tritanopia-linux.png index a960918babc..f120b27b6e4 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-tritanopia-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-colorblind-linux.png index 088f540a5af..ac087d9077b 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-colorblind-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-high-contrast-linux.png index defb1d07a4c..3a0308a93c8 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-high-contrast-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-linux.png index 088f540a5af..ffa09fbe236 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-tritanopia-linux.png index 088f540a5af..ed3ec0d8ebf 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-tritanopia-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Counters-Loading-State-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-colorblind-linux.png index f6f3c59a6bf..0106fb98bce 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-colorblind-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-dimmed-linux.png index 686bea40496..d378bc47e55 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-dimmed-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-high-contrast-linux.png index 5abd1916978..70e7e7e545f 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-high-contrast-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-linux.png index f6f3c59a6bf..0106fb98bce 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-tritanopia-linux.png index f6f3c59a6bf..0106fb98bce 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-tritanopia-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-colorblind-linux.png index 743f746cdca..2f5469b5e03 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-colorblind-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-high-contrast-linux.png index 70153165e60..6ac7bd6a244 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-high-contrast-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-linux.png index 743f746cdca..2f5469b5e03 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-tritanopia-linux.png index 743f746cdca..2f5469b5e03 100644 Binary files a/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-tritanopia-linux.png and b/.playwright/snapshots/components/UnderlineNav.test.ts-snapshots/UnderlineNav-Profile-Page-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..380729cf417 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..6ba0952ef13 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..572b14f775c Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-linux.png new file mode 100644 index 00000000000..380729cf417 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..380729cf417 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..1ed79aaea66 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..1d4331b7752 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-linux.png new file mode 100644 index 00000000000..1ed79aaea66 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..1ed79aaea66 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-colorblind-linux.png new file mode 100644 index 00000000000..380729cf417 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-dimmed-linux.png new file mode 100644 index 00000000000..6ba0952ef13 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-high-contrast-linux.png new file mode 100644 index 00000000000..572b14f775c Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-linux.png new file mode 100644 index 00000000000..380729cf417 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-tritanopia-linux.png new file mode 100644 index 00000000000..380729cf417 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-colorblind-linux.png new file mode 100644 index 00000000000..1ed79aaea66 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-high-contrast-linux.png new file mode 100644 index 00000000000..1d4331b7752 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-linux.png new file mode 100644 index 00000000000..1ed79aaea66 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-tritanopia-linux.png new file mode 100644 index 00000000000..1ed79aaea66 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Dev-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-colorblind-linux.png new file mode 100644 index 00000000000..775708b3e59 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-dimmed-linux.png new file mode 100644 index 00000000000..691ab37f700 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-high-contrast-linux.png new file mode 100644 index 00000000000..5a59ac5cfc0 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-linux.png new file mode 100644 index 00000000000..775708b3e59 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-tritanopia-linux.png new file mode 100644 index 00000000000..775708b3e59 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-colorblind-linux.png new file mode 100644 index 00000000000..7ef2b17da04 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-high-contrast-linux.png new file mode 100644 index 00000000000..826116ad125 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-linux.png new file mode 100644 index 00000000000..7ef2b17da04 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-tritanopia-linux.png new file mode 100644 index 00000000000..7ef2b17da04 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Labelled-By-External-Element-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-colorblind-linux.png new file mode 100644 index 00000000000..a95a5472776 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-dimmed-linux.png new file mode 100644 index 00000000000..07303911f0b Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-high-contrast-linux.png new file mode 100644 index 00000000000..4755127c858 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-linux.png new file mode 100644 index 00000000000..a95a5472776 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-tritanopia-linux.png new file mode 100644 index 00000000000..a95a5472776 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-colorblind-linux.png new file mode 100644 index 00000000000..1e9614f028d Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-high-contrast-linux.png new file mode 100644 index 00000000000..a6b1cc225b8 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-linux.png new file mode 100644 index 00000000000..1e9614f028d Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-tritanopia-linux.png new file mode 100644 index 00000000000..1e9614f028d Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-Selected-Tab-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-colorblind-linux.png new file mode 100644 index 00000000000..e4bbf59873f Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-dimmed-linux.png new file mode 100644 index 00000000000..bccafd46ed9 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-high-contrast-linux.png new file mode 100644 index 00000000000..0a0048d51a8 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-linux.png new file mode 100644 index 00000000000..b76e862b711 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-tritanopia-linux.png new file mode 100644 index 00000000000..e4bbf59873f Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-colorblind-linux.png new file mode 100644 index 00000000000..39fd21dbded Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-high-contrast-linux.png new file mode 100644 index 00000000000..391e41a82a7 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-linux.png new file mode 100644 index 00000000000..39fd21dbded Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-tritanopia-linux.png new file mode 100644 index 00000000000..39fd21dbded Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-In-Loading-State-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-colorblind-linux.png new file mode 100644 index 00000000000..06312377557 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-dimmed-linux.png new file mode 100644 index 00000000000..8b34b8686c2 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-high-contrast-linux.png new file mode 100644 index 00000000000..0b566ed6a86 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-linux.png new file mode 100644 index 00000000000..06312377557 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-tritanopia-linux.png new file mode 100644 index 00000000000..06312377557 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-colorblind-linux.png new file mode 100644 index 00000000000..2dc42e41db5 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-high-contrast-linux.png new file mode 100644 index 00000000000..259cc07ed6f Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-linux.png new file mode 100644 index 00000000000..2dc42e41db5 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-tritanopia-linux.png new file mode 100644 index 00000000000..2dc42e41db5 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Counters-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-colorblind-linux.png new file mode 100644 index 00000000000..fef8afe02db Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-dimmed-linux.png new file mode 100644 index 00000000000..e3b49a50fd8 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-high-contrast-linux.png new file mode 100644 index 00000000000..e5776e97060 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-linux.png new file mode 100644 index 00000000000..fef8afe02db Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-tritanopia-linux.png new file mode 100644 index 00000000000..fef8afe02db Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-colorblind-linux.png new file mode 100644 index 00000000000..1258c1ed187 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-high-contrast-linux.png new file mode 100644 index 00000000000..30403a93e92 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-linux.png new file mode 100644 index 00000000000..1258c1ed187 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-tritanopia-linux.png new file mode 100644 index 00000000000..1258c1ed187 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-Hidden-On-Narrow-Screen-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-colorblind-linux.png new file mode 100644 index 00000000000..79b4f821f96 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-dimmed-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-dimmed-linux.png new file mode 100644 index 00000000000..2af230e86b4 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-high-contrast-linux.png new file mode 100644 index 00000000000..b3ac40e62b7 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-linux.png new file mode 100644 index 00000000000..79b4f821f96 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-tritanopia-linux.png new file mode 100644 index 00000000000..79b4f821f96 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-colorblind-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-colorblind-linux.png new file mode 100644 index 00000000000..d05768fe7ca Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-high-contrast-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-high-contrast-linux.png new file mode 100644 index 00000000000..39292cd5085 Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-linux.png new file mode 100644 index 00000000000..d05768fe7ca Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-linux.png differ diff --git a/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-tritanopia-linux.png b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-tritanopia-linux.png new file mode 100644 index 00000000000..d05768fe7ca Binary files /dev/null and b/.playwright/snapshots/components/UnderlinePanels.test.ts-snapshots/UnderlinePanels-With-Icons-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-colorblind-linux.png new file mode 100644 index 00000000000..4279ade5669 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-dimmed-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-dimmed-linux.png new file mode 100644 index 00000000000..7834240bb39 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-high-contrast-linux.png new file mode 100644 index 00000000000..5aeb800729e Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-linux.png new file mode 100644 index 00000000000..533d57e4eed Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-tritanopia-linux.png new file mode 100644 index 00000000000..4279ade5669 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-colorblind-linux.png new file mode 100644 index 00000000000..c167a48240c Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-high-contrast-linux.png new file mode 100644 index 00000000000..8c18542c49e Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-linux.png new file mode 100644 index 00000000000..7073b656d73 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-tritanopia-linux.png new file mode 100644 index 00000000000..c167a48240c Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-As-Modal-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-colorblind-linux.png index eb8193c0ded..ce0afd68fe6 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-colorblind-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-dimmed-linux.png index 6149b1e1f7b..75cd5689a7b 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-dimmed-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-high-contrast-linux.png index 40fd7504cc3..97f160c76a8 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-high-contrast-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-linux.png index 0918383eafa..66287d4c71a 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-tritanopia-linux.png index eb8193c0ded..ce0afd68fe6 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-tritanopia-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-colorblind-linux.png index fdb5f8460b3..267ba0a00d0 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-colorblind-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-high-contrast-linux.png index 5d70004921b..99616cbb61f 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-high-contrast-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-linux.png index 0b202c63448..e8230d1a75f 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-tritanopia-linux.png index fdb5f8460b3..267ba0a00d0 100644 Binary files a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-tritanopia-linux.png and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Default-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-colorblind-linux.png new file mode 100644 index 00000000000..0f480e31a4b Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-dimmed-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-dimmed-linux.png new file mode 100644 index 00000000000..028ec5bb990 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-high-contrast-linux.png new file mode 100644 index 00000000000..de380a4e078 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-linux.png new file mode 100644 index 00000000000..8087194db97 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-tritanopia-linux.png new file mode 100644 index 00000000000..0f480e31a4b Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-colorblind-linux.png new file mode 100644 index 00000000000..908800b9752 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-high-contrast-linux.png new file mode 100644 index 00000000000..8184ec7dbd8 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-linux.png new file mode 100644 index 00000000000..f5b819ce8e7 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-tritanopia-linux.png new file mode 100644 index 00000000000..908800b9752 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-External-Anchor-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-colorblind-linux.png new file mode 100644 index 00000000000..b19386e2a64 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-dimmed-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-dimmed-linux.png new file mode 100644 index 00000000000..0497100e845 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-high-contrast-linux.png new file mode 100644 index 00000000000..0ee43e0f963 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-linux.png new file mode 100644 index 00000000000..b19386e2a64 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-tritanopia-linux.png new file mode 100644 index 00000000000..b19386e2a64 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-colorblind-linux.png new file mode 100644 index 00000000000..223fe0c99f5 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-high-contrast-linux.png new file mode 100644 index 00000000000..073074d95b0 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-linux.png new file mode 100644 index 00000000000..223fe0c99f5 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-tritanopia-linux.png new file mode 100644 index 00000000000..223fe0c99f5 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-Instant-Selection-Variant-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-colorblind-linux.png new file mode 100644 index 00000000000..97a4e32bb19 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-dimmed-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-dimmed-linux.png new file mode 100644 index 00000000000..f99ba326985 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-high-contrast-linux.png new file mode 100644 index 00000000000..e4fd8954ea9 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-linux.png new file mode 100644 index 00000000000..31457d9b58d Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-tritanopia-linux.png new file mode 100644 index 00000000000..7f5edfae155 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-colorblind-linux.png new file mode 100644 index 00000000000..c74605ae77a Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-high-contrast-linux.png new file mode 100644 index 00000000000..9f954425ee7 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-linux.png new file mode 100644 index 00000000000..324ee2ca502 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-tritanopia-linux.png new file mode 100644 index 00000000000..e882cb3adf5 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Errors-light-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-colorblind-linux.png new file mode 100644 index 00000000000..1c1c08d32ca Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-dimmed-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-dimmed-linux.png new file mode 100644 index 00000000000..beec50453f4 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-dimmed-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-high-contrast-linux.png new file mode 100644 index 00000000000..b9045ca5c0d Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-linux.png new file mode 100644 index 00000000000..c35e121ae07 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-tritanopia-linux.png new file mode 100644 index 00000000000..1c1c08d32ca Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-dark-tritanopia-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-colorblind-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-colorblind-linux.png new file mode 100644 index 00000000000..0714fd28ee6 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-colorblind-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-high-contrast-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-high-contrast-linux.png new file mode 100644 index 00000000000..635b841cf0f Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-high-contrast-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-linux.png new file mode 100644 index 00000000000..8149e46b262 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-linux.png differ diff --git a/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-tritanopia-linux.png b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-tritanopia-linux.png new file mode 100644 index 00000000000..60922b63ff9 Binary files /dev/null and b/.playwright/snapshots/components/drafts/SelectPanel.test.ts-snapshots/drafts-SelectPanel-With-Warning-light-tritanopia-linux.png differ diff --git a/.prettierignore b/.prettierignore index c349507e393..7d78f4af5a1 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,5 @@ .changeset +packages/react/CHANGELOG.md dist lib !codemods/lib/** diff --git a/contributor-docs/migrating-to-css-modules.md b/contributor-docs/migrating-to-css-modules.md index 50ab7c0781f..c72df1d7800 100644 --- a/contributor-docs/migrating-to-css-modules.md +++ b/contributor-docs/migrating-to-css-modules.md @@ -53,7 +53,7 @@ This guide outlines the steps to follow when refactoring Primer React components - Add a feature flag to toggle the `sx` prop for controlled rollout (staff shipping). How it's used will be based on the implementation of the component. For most you'll be able to `useFeatureFlag` and toggle between components. For more complex styled components, you can use the utility `toggleStyledComponent` which will render based on the feature flag string provided. ```jsx - /* When there is an exisiting styled component, use the `toggleStyledComponent` utility. */ + /* When there is an existing styled component, use the `toggleStyledComponent` utility. */ const StyledDiv = toggleStyledComponent( 'primer_react_css_modules_team', 'div', diff --git a/e2e/components/ActionList.test.ts b/e2e/components/ActionList.test.ts index 99f18363cea..3da80621f8a 100644 --- a/e2e/components/ActionList.test.ts +++ b/e2e/components/ActionList.test.ts @@ -657,24 +657,24 @@ test.describe('ActionList', () => { } }) - test.describe('With Trailing Action', () => { + test.describe('Full Variant', () => { for (const theme of themes) { test.describe(theme, () => { test('default @vrt', async ({page}) => { await visit(page, { - id: 'components-actionlist-features--with-trailing-action', + id: 'components-actionlist-features--full-variant', globals: { colorScheme: theme, }, }) // Default state - expect(await page.screenshot()).toMatchSnapshot(`ActionList.With Trailing Action.${theme}.png`) + expect(await page.screenshot()).toMatchSnapshot(`ActionList.Full Variant.${theme}.png`) }) test('axe @aat', async ({page}) => { await visit(page, { - id: 'components-actionlist-features--with-trailing-action', + id: 'components-actionlist-features--full-variant', globals: { colorScheme: theme, }, @@ -685,24 +685,24 @@ test.describe('ActionList', () => { } }) - test.describe('Full Variant', () => { + test.describe('Group Heading with Classname', () => { for (const theme of themes) { test.describe(theme, () => { test('default @vrt', async ({page}) => { await visit(page, { - id: 'components-actionlist-features--full-variant', + id: 'components-actionlist-dev--group-heading-custom-classname', globals: { colorScheme: theme, }, }) // Default state - expect(await page.screenshot()).toMatchSnapshot(`ActionList.Full Variant.${theme}.png`) + expect(await page.screenshot()).toMatchSnapshot(`Group Heading with Classname.${theme}.png`) }) test('axe @aat', async ({page}) => { await visit(page, { - id: 'components-actionlist-features--full-variant', + id: 'components-actionlist-dev--group-heading-custom-classname', globals: { colorScheme: theme, }, @@ -713,24 +713,24 @@ test.describe('ActionList', () => { } }) - test.describe('Group Heading with Classname', () => { + test.describe('Heading with Classname', () => { for (const theme of themes) { test.describe(theme, () => { test('default @vrt', async ({page}) => { await visit(page, { - id: 'components-actionlist-dev--group-heading-custom-classname', + id: 'components-actionlist-dev--heading-custom-classname', globals: { colorScheme: theme, }, }) // Default state - expect(await page.screenshot()).toMatchSnapshot(`Group Heading with Classname.${theme}.png`) + expect(await page.screenshot()).toMatchSnapshot(`Heading with Classname.${theme}.png`) }) test('axe @aat', async ({page}) => { await visit(page, { - id: 'components-actionlist-dev--group-heading-custom-classname', + id: 'components-actionlist-dev--heading-custom-classname', globals: { colorScheme: theme, }, diff --git a/e2e/components/ActionMenu.test.ts b/e2e/components/ActionMenu.test.ts index 17da8466c54..3c1cd045247 100644 --- a/e2e/components/ActionMenu.test.ts +++ b/e2e/components/ActionMenu.test.ts @@ -2,324 +2,109 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('ActionMenu', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu--default', - globals: { - colorScheme: theme, - }, - }) - // Open state - await page.getByRole('button', {name: 'Open menu'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`ActionMenu.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu--default', - globals: { - colorScheme: theme, - }, - }) - await page.getByRole('button', {name: 'Open menu'}).click() - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Inactive Items', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--inactive-items', - globals: { - colorScheme: theme, - }, - }) - - // Open state - await page.locator('button', {hasText: 'Open menu'}).waitFor() - await page.getByRole('button', {name: 'Open menu'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Inactive Items.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--inactive-items', - globals: { - colorScheme: theme, - }, - }) - // Open menu - await page.locator('button', {hasText: 'Open menu'}).waitFor() - await page.getByRole('button', {name: 'Open menu'}).click() - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Links And Actions', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--links-and-actions', - globals: { - colorScheme: theme, - }, - }) - - // Open state - await page.getByRole('button', {name: 'Open menu'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Links And Actions.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--links-and-actions', - globals: { - colorScheme: theme, - }, - }) - // Open Menu - await page.getByRole('button', {name: 'Open menu'}).click() - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Loading Items', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--loading-items', - globals: { - colorScheme: theme, - }, - }) - - // Open menu - await page.locator('button', {hasText: 'Open menu'}).waitFor() - await page.getByRole('button', {name: 'Open menu'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot() - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--loading-items', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Multi Select', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--multi-select', - globals: { - colorScheme: theme, - }, - }) - - // Open state - await page.getByRole('button', {name: 'Display'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Multi Select.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--multi-select', - globals: { - colorScheme: theme, - }, - }) - - // Open state - await page.getByRole('button', {name: 'Display'}).click() - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Single Select', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--single-select', - globals: { - colorScheme: theme, - }, - }) +const stories: Array<{ + title: string + id: string + buttonName?: string + skipOpen?: boolean +}> = [ + { + title: 'Default', + id: 'components-actionmenu--default', + }, + { + title: 'Inactive Items', + id: 'components-actionmenu-features--inactive-items', + }, + { + title: 'Links And Actions', + id: 'components-actionmenu-features--links-and-actions', + }, + { + title: 'Loading Items', + id: 'components-actionmenu-features--loading-items', + }, + { + title: 'Multi Select', + buttonName: 'Display', + id: 'components-actionmenu-features--multi-select', + }, + { + title: 'Single Select', + buttonName: 'Options: fast Forward', + id: 'components-actionmenu-features--single-select', + }, + { + title: 'Controlled Menu', + id: 'components-actionmenu-examples--controlled-menu', + }, + { + title: 'Custom Anchor', + skipOpen: true, + id: 'components-actionmenu-examples--custom-anchor', + }, + { + title: 'Custom Overlay Props', + skipOpen: true, + id: 'components-actionmenu-examples--custom-overlay-props', + }, + { + title: 'Groups And Descriptions', + skipOpen: true, + id: 'components-actionmenu-examples--groups-and-descriptions', + }, + { + title: 'Dev: With Css', + id: 'components-actionmenu-dev--with-css', + }, + { + title: 'Dev: With Sx', + id: 'components-actionmenu-dev--with-sx', + }, + { + title: 'Dev: With Sx And Css', + id: 'components-actionmenu-dev--with-sx-and-css', + }, +] as const - // Open state - await page.getByRole('button', {name: 'Options: fast Forward'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Single Select.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-features--single-select', - globals: { - colorScheme: theme, - }, - }) - - // Open state - await page.getByRole('button', {name: 'Options: fast Forward'}).click() - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Controlled Menu', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--controlled-menu', - globals: { - colorScheme: theme, - }, - }) - - await page.getByRole('button', {name: 'Open Menu'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Controlled Menu.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--controlled-menu', - globals: { - colorScheme: theme, - }, - }) - - // Open state - await page.getByRole('button', {name: 'Open Menu'}).click() - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Custom Anchor', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--custom-anchor', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Custom Anchor.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--custom-anchor', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Custom Overlay Props', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--custom-overlay-props', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Custom Overlay Props.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--custom-overlay-props', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Groups And Descriptions', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--groups-and-descriptions', - globals: { - colorScheme: theme, - }, - }) - - // Open state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `ActionMenu.Groups And Descriptions.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-actionmenu-examples--groups-and-descriptions', - globals: { - colorScheme: theme, - }, - }) - - // Open state - await expect(page).toHaveNoViolations() - }) - }) - } - }) +test.describe('ActionMenu', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + const buttonName = story.buttonName ?? 'Open menu' + + // Default state + // Open state + + if (!story.skipOpen) { + await page.locator('button', {hasText: buttonName}).waitFor() + await page.getByRole('button', {name: buttonName}).click() + } + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `ActionMenu.${story.title}.${theme}.png`, + ) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() + }) + }) + } + }) + } }) diff --git a/e2e/components/AvatarStack.test.ts b/e2e/components/AvatarStack.test.ts index 4d814a808bf..066f1f3ff6c 100644 --- a/e2e/components/AvatarStack.test.ts +++ b/e2e/components/AvatarStack.test.ts @@ -2,310 +2,86 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('AvatarStack', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) +const stories: Array<{title: string; id: string}> = [ + { + title: 'Default', + id: 'components-avatarstack--default', + }, + { + title: 'Playground', + id: 'components-avatarstack--playground', + }, + { + title: 'Align Left', + id: 'components-avatarstack-features--align-left', + }, + { + title: 'Align Right', + id: 'components-avatarstack-features--align-right', + }, + { + title: 'Disable Expand On Hover', + id: 'components-avatarstack-features--disable-expand-on-hover', + }, + { + title: 'Custom Size On Parent', + id: 'components-avatarstack-features--custom-size-on-parent', + }, + { + title: 'Custom Size On Parent Responsive', + id: 'components-avatarstack-features--custom-size-on-parent-responsive', + }, + { + title: 'Custom Size On Children', + id: 'components-avatarstack-features--custom-size-on-children', + }, + { + title: 'Custom Size On Children Responsive', + id: 'components-avatarstack-features--custom-size-on-children-responsive', + }, + { + title: 'SX Prop', + id: 'components-avatarstack-dev--sx-prop', + }, + { + title: 'With Link Wrappers', + id: 'components-avatarstack-dev--with-link-wrappers', + }, +] - test.describe('Playground', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack--playground', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Playground.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack--playground', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Align Left', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--align-left', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Align Left.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--align-left', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Align Right', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--align-right', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Align Right.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--align-right', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Disable Expand On Hover', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--disable-expand-on-hover', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Disable Expand On Hover.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--disable-expand-on-hover', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Custom Size On Parent', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-parent', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Custom Size On Parent.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-parent', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Custom Size On Parent Responsive', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-parent-responsive', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Custom Size On Parent Responsive.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-parent-responsive', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', +test.describe('AvatarStack', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) + }) - test.describe('Custom Size On Children', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-children', - globals: { - colorScheme: theme, - }, + expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.${story.title}.${theme}.png`) }) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Custom Size On Children.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-children', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', + test('@aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) - - test.describe('Custom Size On Children Responsive', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-children-responsive', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`AvatarStack.Custom Size On Children Responsive.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-avatarstack-features--custom-size-on-children-responsive', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', + }) + await expect(page).toHaveNoViolations({ + rules: { + 'color-contrast': { + enabled: theme !== 'dark_dimmed', + }, }, - }, + }) }) }) - }) - } - }) + } + }) + } }) diff --git a/e2e/components/BaseStyles.test.ts b/e2e/components/BaseStyles.test.ts new file mode 100644 index 00000000000..22735f58ea5 --- /dev/null +++ b/e2e/components/BaseStyles.test.ts @@ -0,0 +1,44 @@ +import {test, expect} from '@playwright/test' +import {visit} from '../test-helpers/storybook' +import {themes} from '../test-helpers/themes' + +const stories = [ + { + id: 'behaviors-basestyles-dev--default', + title: 'Dev Default', + }, +] as const + +test.describe('BaseStyles', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `BaseStyles.${story.title}.${theme}.png`, + ) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() + }) + }) + } + }) + } +}) diff --git a/e2e/components/ButtonGroup.test.ts b/e2e/components/ButtonGroup.test.ts index dcfd620fa10..243f070df7f 100644 --- a/e2e/components/ButtonGroup.test.ts +++ b/e2e/components/ButtonGroup.test.ts @@ -87,6 +87,34 @@ test.describe('ButtonGroup', () => { } }) + test.describe('As Toolbar', () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: 'components-buttongroup-features--as-toolbar', + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`ButtonGroup.As Toolbar.${theme}.png`) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: 'components-buttongroup-features--as-toolbar', + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() + }) + }) + } + }) + test.describe('Overrides', () => { for (const theme of themes) { test.describe(theme, () => { diff --git a/e2e/components/CheckboxGroup.test.ts b/e2e/components/CheckboxGroup.test.ts index 45697bbeba5..8b5faa1d261 100644 --- a/e2e/components/CheckboxGroup.test.ts +++ b/e2e/components/CheckboxGroup.test.ts @@ -2,176 +2,69 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('CheckboxGroup', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`CheckboxGroup.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, - }, - }, - }) - }) - }) - } - }) +const stories = [ + { + title: 'Default', + id: 'components-checkboxgroup--default', + }, + { + title: 'Caption', + id: 'components-checkboxgroup-features--caption', + }, + { + title: 'Error', + id: 'components-checkboxgroup-features--error', + }, + { + title: 'Success', + id: 'components-checkboxgroup-features--success', + }, + { + title: 'Visually Hidden Label', + id: 'components-checkboxgroup-features--visually-hidden-label', + }, + { + title: 'SX Props', + id: 'components-checkboxgroup-dev--sx-props', + }, +] as const - test.describe('Caption', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--caption', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`CheckboxGroup.Caption.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--caption', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, - }, - }, - }) - }) - }) - } - }) - - test.describe('Error', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--error', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`CheckboxGroup.Error.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--error', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, +test.describe('CheckboxGroup', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) + }) - test.describe('Success', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--success', - globals: { - colorScheme: theme, - }, + // Default state + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `CheckboxGroup.${story.title}.${theme}.png`, + ) }) - // Default state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`CheckboxGroup.Success.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--success', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) - - test.describe('Visually Hidden Label', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--visually-hidden-label', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `CheckboxGroup.Visually Hidden Label.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-checkboxgroup-features--visually-hidden-label', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, + }) + await expect(page).toHaveNoViolations({ + rules: { + 'color-contrast': { + enabled: false, + }, }, - }, + }) }) }) - }) - } - }) + } + }) + } }) diff --git a/e2e/components/ConfirmationDialog.test.ts b/e2e/components/ConfirmationDialog.test.ts new file mode 100644 index 00000000000..d9d07b18c6d --- /dev/null +++ b/e2e/components/ConfirmationDialog.test.ts @@ -0,0 +1,64 @@ +import {test, expect} from '@playwright/test' +import {visit} from '../test-helpers/storybook' +import {themes} from '../test-helpers/themes' + +const stories = [ + { + title: 'Default', + id: 'components-confirmationdialog--default', + }, + { + title: 'Playground', + id: 'components-confirmationdialog--playground', + }, + { + title: 'Shorthand Hook', + id: 'components-confirmationdialog-features--shorthand-hook', + }, + { + title: 'Shorthand Hook From Action Menu', + id: 'components-confirmationdialog-features--shorthand-hook-from-action-menu', + }, +] as const + +test.describe('ConfirmationDialog', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + args: {open: true}, + }) + + // Default state + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `ConfirmationDialog.${story.title}.${theme}.png`, + ) + + // Focus state + await page.keyboard.press('Tab') + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `ConfirmationDialog.${story.title}.focus.${theme}.png`, + ) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + args: {open: true}, + }) + await expect(page).toHaveNoViolations() + }) + }) + } + }) + } +}) diff --git a/e2e/components/DataTable.test.ts b/e2e/components/DataTable.test.ts index b9fb4c3ecdf..9c96b048f41 100644 --- a/e2e/components/DataTable.test.ts +++ b/e2e/components/DataTable.test.ts @@ -175,12 +175,12 @@ test.describe('DataTable', () => { const region = page.getByRole('region') const table = region.getByRole('table') - const tabIndex = await region.getAttribute('tabindex') - const labelledby = await region.getAttribute('aria-labelledby') + const tabIndex = region + const labelledby = region await expect(region).toBeVisible() - expect(tabIndex).toBe('0') - expect(labelledby).toBe(headingId) + await expect(tabIndex).toHaveAttribute('tabindex', '0') + await expect(labelledby).toHaveAttribute('aria-labelledby', headingId!) await expect(table).toBeVisible() expect(labelledby).toBe(headingId) diff --git a/e2e/components/Dialog.test.ts b/e2e/components/Dialog.test.ts index 351587bd7cd..e87906f3e63 100644 --- a/e2e/components/Dialog.test.ts +++ b/e2e/components/Dialog.test.ts @@ -2,176 +2,79 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('Dialog', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-dialog--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - await page.getByRole('button', {name: 'Show dialog'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`Dialog.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-dialog--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Stress Test', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--stress-test', - globals: { - colorScheme: theme, - }, - }) - - await page.getByRole('button', {name: 'Show dialog'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`Dialog.Stress Test.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--stress-test', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('With Custom Renderers', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--with-custom-renderers', - globals: { - colorScheme: theme, - }, - }) - - await page.getByRole('button', {name: 'Show dialog'}).click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `Dialog.With Custom Renderers.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--with-custom-renderers', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Position bottom', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--bottom-sheet-narrow', - globals: { - colorScheme: theme, - }, - }) - - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`Dialog.Position bottom.${theme}.png`) - }) +const stories = [ + { + title: 'Default', + id: 'components-dialog--default', + }, + { + title: 'Stress Test', + id: 'components-dialog-features--stress-test', + }, + { + title: 'With Custom Renderers', + id: 'components-dialog-features--with-custom-renderers', + }, + { + title: 'Position bottom', + id: 'components-dialog-features--bottom-sheet-narrow', + }, + { + title: 'Position fullscreen', + id: 'components-dialog-features--full-screen-narrow', + }, + { + title: 'Position sidesheet', + id: 'components-dialog-features--side-sheet', + }, + { + title: 'Dev: With Css', + id: 'components-dialog-dev--with-css', + }, + { + title: 'Dev: With Sx', + id: 'components-dialog-dev--with-sx', + }, + { + title: 'Dev: With Sx And Css', + id: 'components-dialog-dev--with-sx-and-css', + }, +] as const - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--bottom-sheet-narrow', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Position fullscreen', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--full-screen-narrow', - globals: { - colorScheme: theme, - }, - }) - - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `Dialog.Position fullscreen.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--full-screen-narrow', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Position sidesheet', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--side-sheet', - globals: { - colorScheme: theme, - }, +test.describe('Dialog', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + // Default state + const isDialogOpen = await page.locator('role=dialog').isVisible() + if (!isDialogOpen) { + await page.getByRole('button', {name: 'Show dialog'}).click() + } + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `Dialog.${story.title}.${theme}.png`, + ) }) - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `Dialog.Position sidesheet.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-dialog-features--side-sheet', - globals: { - colorScheme: theme, - }, + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() }) - await expect(page).toHaveNoViolations() }) - }) - } - }) + } + }) + } }) diff --git a/e2e/components/IconButton.test.ts b/e2e/components/IconButton.test.ts index 86a6b3d1c26..83b00e325e1 100644 --- a/e2e/components/IconButton.test.ts +++ b/e2e/components/IconButton.test.ts @@ -308,12 +308,12 @@ test.describe('IconButton', () => { }) } }) - test.describe('Keyshortcuts', () => { + test.describe('Keybinding hint', () => { for (const theme of themes) { test.describe(theme, () => { test('default @vrt', async ({page}) => { await visit(page, { - id: 'components-iconbutton-features--keyshortcuts', + id: 'components-iconbutton-features--keybinding-hint', globals: { colorScheme: theme, }, @@ -322,13 +322,13 @@ test.describe('IconButton', () => { // Default state await page.keyboard.press('Tab') // focus on icon button expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `IconButton.Keyshortcuts.${theme}.png`, + `IconButton.Keybinding Hint.${theme}.png`, ) }) test('axe @aat', async ({page}) => { await visit(page, { - id: 'components-iconbutton-features--keyshortcuts', + id: 'components-iconbutton-features--keybinding-hint', globals: { colorScheme: theme, }, @@ -340,12 +340,12 @@ test.describe('IconButton', () => { } }) - test.describe('Keyshortcuts on Description', () => { + test.describe('Keybinding hint on Description', () => { for (const theme of themes) { test.describe(theme, () => { test('default @vrt', async ({page}) => { await visit(page, { - id: 'components-iconbutton-features--keyshortcuts-on-description', + id: 'components-iconbutton-features--keybinding-hint-on-description', globals: { colorScheme: theme, }, @@ -354,13 +354,13 @@ test.describe('IconButton', () => { // Default state await page.keyboard.press('Tab') // focus on icon button expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `IconButton.Keyshortcuts on Description.${theme}.png`, + `IconButton.Keybinding Hint on Description.${theme}.png`, ) }) test('axe @aat', async ({page}) => { await visit(page, { - id: 'components-iconbutton-features--keyshortcuts-on-description', + id: 'components-iconbutton-features--keybinding-hint-on-description', globals: { colorScheme: theme, }, diff --git a/e2e/components/InlineMessage.test.ts b/e2e/components/InlineMessage.test.ts index cb595a96201..81814c82a20 100644 --- a/e2e/components/InlineMessage.test.ts +++ b/e2e/components/InlineMessage.test.ts @@ -12,6 +12,10 @@ const stories = [ title: 'Multiline', id: 'experimental-components-inlinemessage-features--multiline', }, + { + title: 'Dev Default', + id: 'experimental-components-inlinemessage-dev--dev-default', + }, ] const scenarios = matrix({ diff --git a/e2e/components/NavList.test.ts b/e2e/components/NavList.test.ts index 79307b2dad1..0b00fcf6e9e 100644 --- a/e2e/components/NavList.test.ts +++ b/e2e/components/NavList.test.ts @@ -30,34 +30,4 @@ test.describe('NavList', () => { }) } }) - - test.describe('With Bad Example of SubNav and TrailingAction', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-navlist-devonly--with-bad-example-of-sub-nav-and-trailing-action', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot( - `NavList.With Bad Example of SubNav and TrailingAction.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-navlist-devonly--with-bad-example-of-sub-nav-and-trailing-action', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) }) diff --git a/e2e/components/Overlay.test.ts b/e2e/components/Overlay.test.ts new file mode 100644 index 00000000000..b9f36ba62ed --- /dev/null +++ b/e2e/components/Overlay.test.ts @@ -0,0 +1,84 @@ +import {test, expect} from '@playwright/test' +import {visit} from '../test-helpers/storybook' +import {themes} from '../test-helpers/themes' + +const stories = [ + { + title: 'Default', + id: 'private-components-overlay--default', + }, + { + title: 'Playground', + id: 'private-components-overlay--playground', + }, + { + title: 'Dialog Overlay', + id: 'private-components-overlay-features--dialog-overlay', + }, + { + title: 'Dropdown Overlay', + id: 'private-components-overlay-features--dropdown-overlay', + }, + { + title: 'Memex Issue Overlay', + id: 'private-components-overlay-features--memex-issue-overlay', + }, + { + title: 'Memex Nested Overlays', + id: 'private-components-overlay-features--memex-nested-overlays', + }, + { + title: 'Nested Overlays', + id: 'private-components-overlay-features--nested-overlays', + }, + { + title: 'Overlay On Top Of Overlay', + id: 'private-components-overlay-features--overlay-on-top-of-overlay', + }, + { + title: 'Positioned Overlays', + id: 'private-components-overlay-features--positioned-overlays', + }, + { + title: 'SX Props', + id: 'private-components-overlay-dev--sx-props', + }, +] as const + +test.describe('Overlay ', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + args: { + open: true, + }, + }) + + await expect(page).toHaveScreenshot(`Overlay.${story.title}.${theme}.png`, {animations: 'disabled'}) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + args: { + open: true, + }, + }) + + await expect(page).toHaveNoViolations() + }) + }) + } + }) + } +}) diff --git a/e2e/components/PageLayout.test.ts b/e2e/components/PageLayout.test.ts index a2475290fe0..22f36964f56 100644 --- a/e2e/components/PageLayout.test.ts +++ b/e2e/components/PageLayout.test.ts @@ -22,76 +22,83 @@ const isInViewPort = (page: Page, boundingBox: {x: number; y: number; width: num ) } +const stories = [ + { + id: 'components-pagelayout--default', + title: 'Default', + }, + { + id: 'components-pagelayout-dev--default', + title: 'Dev Default', + }, + { + id: 'components-pagelayout-features--pull-request-page', + title: 'Pull Request Page', + }, + { + id: 'components-pagelayout-features--nested-scroll-container', + title: 'Nested Scroll Container', + }, + { + id: 'components-pagelayout-features--resizable-pane', + title: 'Resizable Pane', + }, + { + id: 'components-pagelayout-features--scroll-container-within-page-layout-pane', + title: 'Scroll Container Within Page Layout Pane', + }, +] as const + test.describe('PageLayout', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-pagelayout--default', - globals: { - colorScheme: theme, - }, + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `PageLayout.${story.title}.${theme}.png`, + ) }) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`PageLayout.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-pagelayout--default', - globals: { - colorScheme: theme, - }, + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Pull Request', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--pull-request', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`PageLayout.Pull Request.${theme}.png`) }) + } + }) + } +}) - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--pull-request', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) +const stickyPaneId = 'components-pagelayout-features--sticky-pane' +test.describe('PageLayout', () => { test.describe('Sticky Pane', () => { for (const theme of themes) { test.describe(theme, () => { test('default @vrt', async ({page}) => { await visit(page, { - id: 'components-pagelayout-features--sticky-pane', + id: stickyPaneId, globals: { colorScheme: theme, }, }) // Default state - expect(await page.screenshot()).toMatchSnapshot(`PageLayout.Sticky Pane.${theme}.png`) + expect(await page.screenshot()).toMatchSnapshot(`PageLayout.StickyPane.${theme}.png`) const content = page.getByTestId('content3') await content.scrollIntoViewIfNeeded() @@ -104,7 +111,7 @@ test.describe('PageLayout', () => { test('non sticky pane', async ({page}) => { await visit(page, { - id: 'components-pagelayout-features--sticky-pane', + id: stickyPaneId, globals: { colorScheme: theme, }, @@ -116,7 +123,7 @@ test.describe('PageLayout', () => { }) // Default state - expect(await page.screenshot()).toMatchSnapshot() + expect(await page.screenshot()).toMatchSnapshot(`PageLayout.NonStickyPane.${theme}.png`) const content3 = page.getByTestId('content3') await content3.scrollIntoViewIfNeeded() @@ -128,7 +135,7 @@ test.describe('PageLayout', () => { test('axe @aat', async ({page}) => { await visit(page, { - id: 'components-pagelayout-features--sticky-pane', + id: stickyPaneId, globals: { colorScheme: theme, }, @@ -139,40 +146,14 @@ test.describe('PageLayout', () => { } }) - test.describe('Nested Scroll Container', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--nested-scroll-container', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`PageLayout.Nested Scroll Container.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--nested-scroll-container', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) + const customStickyPaneId = 'components-pagelayout-features--custom-sticky-header' test.describe('Custom Sticky Header', () => { for (const theme of themes) { test.describe(theme, () => { test('default @vrt', async ({page}) => { await visit(page, { - id: 'components-pagelayout-features--custom-sticky-header', + id: customStickyPaneId, globals: { colorScheme: theme, }, @@ -197,65 +178,7 @@ test.describe('PageLayout', () => { test('axe @aat', async ({page}) => { await visit(page, { - id: 'components-pagelayout-features--custom-sticky-header', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Resizable Pane', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--resizable-pane', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`PageLayout.Resizable Pane.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--resizable-pane', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Scroll Container Within Page Layout Pane', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--scroll-container-within-page-layout-pane', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot( - `PageLayout.Scroll Container Within Page Layout Pane.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-pagelayout-features--scroll-container-within-page-layout-pane', + id: customStickyPaneId, globals: { colorScheme: theme, }, diff --git a/e2e/components/Pagination.test.ts b/e2e/components/Pagination.test.ts new file mode 100644 index 00000000000..84f8861a38c --- /dev/null +++ b/e2e/components/Pagination.test.ts @@ -0,0 +1,50 @@ +import {test, expect} from '@playwright/test' +import {visit} from '../test-helpers/storybook' +import {themes} from '../test-helpers/themes' + +const stories = [ + { + title: 'Default', + id: 'components-pagination--default', + }, + { + title: 'Dev Default', + id: 'components-pagination-dev--dev-default', + }, + { + title: 'Hide Page Numbers', + id: 'components-pagination-features--hide-page-numbers', + }, +] as const + +test.describe('Pagination', () => { + for (const story of stories) { + test.describe(story.id, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`Pagehead.${story.title}.${theme}.png`) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() + }) + }) + } + }) + } +}) diff --git a/e2e/components/Popover.test.ts b/e2e/components/Popover.test.ts index 7a80f28cda4..43ba2962bef 100644 --- a/e2e/components/Popover.test.ts +++ b/e2e/components/Popover.test.ts @@ -2,60 +2,49 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('Popover', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-popover--default', - globals: { - colorScheme: theme, - }, - }) +const stories = [ + { + title: 'Default', + id: 'components-popover--default', + }, + { + title: 'Playground', + id: 'components-popover--playground', + }, + { + title: 'SX Props', + id: 'components-popover-dev--sx-props', + }, +] as const - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Popover.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-popover--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) +test.describe('Popover', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) - test.describe('Playground', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-popover--playground', - globals: { - colorScheme: theme, - }, + // Default state + expect(await page.screenshot()).toMatchSnapshot(`Popover.${story.title}.${theme}.png`) }) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Popover.Playground.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-popover--playground', - globals: { - colorScheme: theme, - }, + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() }) - await expect(page).toHaveNoViolations() }) - }) - } - }) + } + }) + } }) diff --git a/e2e/components/ProgressBar.test.ts b/e2e/components/ProgressBar.test.ts index ac87493b2a1..acef0768594 100644 --- a/e2e/components/ProgressBar.test.ts +++ b/e2e/components/ProgressBar.test.ts @@ -2,228 +2,75 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('ProgressBar', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Progress Zero', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--progress-zero', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Progress Zero.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--progress-zero', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Progress Half', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--progress-half', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Progress Half.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--progress-half', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Progress Done', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--progress-done', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Progress Done.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--progress-done', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) +const stories = [ + { + title: 'Default', + id: 'components-progressbar--default', + }, + { + title: 'Progress Zero', + id: 'components-progressbar-features--progress-zero', + }, + { + title: 'Progress Half', + id: 'components-progressbar-features--progress-half', + }, + { + title: 'Progress Done', + id: 'components-progressbar-features--progress-done', + }, + { + title: 'Size Small', + id: 'components-progressbar-features--size-small', + }, + { + title: 'Size Large', + id: 'components-progressbar-features--size-large', + }, + { + title: 'Inline', + id: 'components-progressbar-features--inline', + }, + { + title: 'Color', + id: 'components-progressbar-features--color', + }, + { + title: 'Dev SX Props', + id: 'components-progressbar-dev--default', + }, +] as const - test.describe('Size Small', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--size-small', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Size Small.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--size-small', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Size Large', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--size-large', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Size Large.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--size-large', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Inline', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--inline', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Inline.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--inline', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Color', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--color', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`ProgressBar.Color.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-progressbar-features--color', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) +test.describe('ProgressBar', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `ProgressBar.${story.title}.${theme}.png`, + ) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() + }) + }) + } + }) + } }) diff --git a/e2e/components/SegmentedControl.test.ts b/e2e/components/SegmentedControl.test.ts index 1c7132775f6..2458709e526 100644 --- a/e2e/components/SegmentedControl.test.ts +++ b/e2e/components/SegmentedControl.test.ts @@ -3,500 +3,120 @@ import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' import {viewports} from '../test-helpers/viewports' -test.describe('SegmentedControl', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Default.${theme}.png`) - - // Focus state - await page.keyboard.press('Tab') - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Default.${theme}.focus.png`) - - // Middle Button Focus state - await page.keyboard.press('Tab') - await page.keyboard.press('Enter') - await page.keyboard.press('Shift+Tab') - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Default.${theme}.middle.selected.focus.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Playground', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol--playground', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Playground.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol--playground', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('SegmentedControlButton Playground', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-segmentedcontrol-button--playground', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot( - `SegmentedControl.SegmentedControlButton Playground.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-segmentedcontrol-button--playground', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('SegmentedControlIconButton Playground', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-segmentedcontrol-iconbutton--playground', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot( - `SegmentedControl.SegmentedControlIconButton Playground.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-segmentedcontrol-iconbutton--playground', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, - }, - // TODO: Remove this rule when the issue is fixed https://github.com/github/primer/issues/1864 - 'button-name': { - enabled: false, - }, - }, - }) - }) - }) - } - }) - - test.describe('Associated with a Label and Caption', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--associated-with-a-label-and-caption', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot( - `SegmentedControl.Associated with a Label and Caption.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--associated-with-a-label-and-caption', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, - }, - }, - }) - }) - }) - } - }) - - test.describe('Fullwidth Narrow', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--fullwidth-narrow', - globals: { - colorScheme: theme, - }, - }) - - // Set viewport to narrow - await page.setViewportSize({width: viewports['primer.breakpoint.sm'], height: 768}) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Fullwidth Narrow.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--fullwidth-narrow', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Fullwidth Regular', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--fullwidth-regular', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Fullwidth Regular.${theme}.png`) - }) +const stories = [ + { + title: 'Default', + id: 'components-segmentedcontrol--default', + }, + { + title: 'Playground', + id: 'components-segmentedcontrol--playground', + }, + { + title: 'Associated with a Label and Caption', + id: 'components-segmentedcontrol-features--associated-with-a-label-and-caption', + }, + { + title: 'Fullwidth Narrow', + id: 'components-segmentedcontrol-features--fullwidth-narrow', + }, + { + title: 'Fullwidth Regular', + id: 'components-segmentedcontrol-features--fullwidth-regular', + }, + { + title: 'Variant Narrow Action Menu', + id: 'components-segmentedcontrol-features--variant-narrow-action-menu', + }, + { + title: 'Variant Narrow Hide Labels', + id: 'components-segmentedcontrol-features--variant-narrow-hide-labels', + }, + { + title: 'Controlled', + id: 'components-segmentedcontrol-features--controlled', + }, + { + title: 'Fullwidth', + id: 'components-segmentedcontrol-features--fullwidth-all', + }, + { + title: 'Icon Only', + id: 'components-segmentedcontrol-features--icon-only', + }, + { + title: 'With Icons', + id: 'components-segmentedcontrol-features--with-icons', + }, + { + title: 'SegmentedControlButton Playground', + id: 'components-segmentedcontrol-segmentedcontrol-button--playground', + }, + { + title: 'SegmentedControlIconButton Playground', + id: 'components-segmentedcontrol-segmentedcontrol-iconbutton--playground', + }, + { + title: 'Dev: With Css', + id: 'components-segmentedcontrol-dev--with-css', + }, + { + title: 'Dev: With Sx', + id: 'components-segmentedcontrol-dev--with-sx', + }, + { + title: 'Dev: With Sx And Css', + id: 'components-segmentedcontrol-dev--with-sx-and-css', + }, +] as const - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--fullwidth-regular', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Variant Narrow Action Menu', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--variant-narrow-action-menu', - globals: { - colorScheme: theme, - }, - }) - - // Set viewport to narrow - await page.setViewportSize({width: viewports['primer.breakpoint.sm'], height: 768}) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Variant Narrow Action Menu.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--variant-narrow-action-menu', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Variant Narrow Hide Labels', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--variant-narrow-hide-labels', - globals: { - colorScheme: theme, - }, - }) - - // Set viewport to narrow - await page.setViewportSize({width: viewports['primer.breakpoint.sm'], height: 768}) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Variant Narrow Hide Labels.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--variant-narrow-hide-labels', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Controlled', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--controlled', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Controlled.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--controlled', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Fullwidth', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--fullwidth-all', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Fullwidth.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--fullwidth-all', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Icon Only', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--icon-only', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Icon Only.${theme}.png`) - - // Focus state - await page.keyboard.press('Tab') - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.Icon Only.${theme}.focus.png`) - - // Middle Button Focus state - await page.keyboard.press('Tab') - await page.keyboard.press('Enter') - await page.keyboard.press('Shift+Tab') - expect(await page.screenshot()).toMatchSnapshot( - `SegmentedControl.Icon Only.${theme}.middle.selected.focus.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--icon-only', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: false, - }, - // TODO: Remove this rule when the issue is fixed https://github.com/github/primer/issues/1864 - 'button-name': { - enabled: false, +test.describe('SegmentedControl', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) - - test.describe('With Icons', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--with-icons', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.With Icons.${theme}.png`) - - // Focus state - await page.keyboard.press('Tab') - expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.With Icons.${theme}.focus.png`) - - // Middle Button Focus state - await page.keyboard.press('Tab') - await page.keyboard.press('Enter') - await page.keyboard.press('Shift+Tab') - expect(await page.screenshot()).toMatchSnapshot( - `SegmentedControl.With Icons.${theme}.middle.selected.focus.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-segmentedcontrol-features--with-icons', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', + }) + + if (story.title.includes('Narrow')) { + // Set viewport to narrow + await page.setViewportSize({width: viewports['primer.breakpoint.sm'], height: 768}) + } + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.${story.title}.${theme}.png`) + + if (story.title === 'Default') { + // Focus state + await page.keyboard.press('Tab') + expect(await page.screenshot()).toMatchSnapshot(`SegmentedControl.${story.title}.${theme}.focus.png`) + + // Middle Button Focus state + await page.keyboard.press('Tab') + await page.keyboard.press('Enter') + await page.keyboard.press('Shift+Tab') + expect(await page.screenshot()).toMatchSnapshot( + `SegmentedControl.${story.title}.${theme}.middle.selected.focus.png`, + ) + } + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, + }) + await expect(page).toHaveNoViolations() }) }) - }) - } - }) + } + }) + } }) diff --git a/e2e/components/SelectPanel.test.ts b/e2e/components/SelectPanel.test.ts index bc6614cee1e..fe020a405cb 100644 --- a/e2e/components/SelectPanel.test.ts +++ b/e2e/components/SelectPanel.test.ts @@ -13,11 +13,12 @@ const scenarios = matrix({ {id: 'components-selectpanel-features--with-footer', name: 'With Footer'}, {id: 'components-selectpanel-features--with-groups', name: 'With Groups'}, {id: 'components-selectpanel-features--with-item-dividers', name: 'With Item Dividers'}, + {id: 'components-selectpanel-features--with-label-internally', name: 'With Label Internally'}, + {id: 'components-selectpanel-features--with-label-visually-hidden', name: 'With Label Visually Hidden'}, { - id: 'components-selectpanel-features--with-placeholder-for-seach-input', + id: 'components-selectpanel-features--with-placeholder-for-search-input', name: 'With Placeholder for Search Input', }, - {id: 'components-selectpanel-features--with-placeholder-select', name: 'With Placeholder Select'}, {id: 'components-selectpanel-examples--above-tall-body', name: 'Above Tall Body'}, {id: 'components-selectpanel-examples--height-variantions-and-scroll', name: 'Height Variantions and Scroll'}, { @@ -32,6 +33,18 @@ const scenarios = matrix({ id: 'components-selectpanel-examples--height-initial-with-underflowing-items-after-fetch', name: 'Height Initial with Underflowing Items After Fetch', }, + { + id: 'components-selectpanel-dev--with-css', + name: 'With Css', + }, + { + id: 'components-selectpanel-dev--with-sx', + name: 'With Sx', + }, + { + id: 'components-selectpanel-dev--with-sx-and-css', + name: 'With Sx and Css', + }, ], }) @@ -50,8 +63,11 @@ test.describe('SelectPanel', () => { await visit(page, {id: scenario.story.id, globals}) // Open select panel - await page.keyboard.press('Tab') - await page.keyboard.press('Enter') + const isPanelOpen = await page.isVisible('[role="listbox"]') + if (!isPanelOpen) { + await page.keyboard.press('Tab') + await page.keyboard.press('Enter') + } expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`SelectPanel.${name}.${theme}${flag}.png`) }) @@ -68,8 +84,11 @@ test.describe('SelectPanel', () => { }) // Open select panel - await page.keyboard.press('Tab') - await page.keyboard.press('Enter') + const isPanelOpen = await page.isVisible('[role="listbox"]') + if (!isPanelOpen) { + await page.keyboard.press('Tab') + await page.keyboard.press('Enter') + } // windows high contrast mode: light await page.emulateMedia({forcedColors: 'active', colorScheme: 'light'}) diff --git a/e2e/components/SubNav.test.ts b/e2e/components/SubNav.test.ts index 3cd1fc9ea7b..71336dcad7e 100644 --- a/e2e/components/SubNav.test.ts +++ b/e2e/components/SubNav.test.ts @@ -36,4 +36,58 @@ test.describe('SubNav', () => { }) } }) + + test.describe('Dev: With Sx', () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: 'components-subnav-dev--with-sx', + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`SubNav.Dev.WithSx.${theme}.png`) + }) + }) + } + }) + + test.describe('Dev: With CSS', () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: 'components-subnav-dev--with-css', + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`SubNav.Dev.WithCSS.${theme}.png`) + }) + }) + } + }) + + test.describe('Dev: With Sx and CSS', () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: 'components-subnav-dev--with-sx-and-css', + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`SubNav.Dev.WithSxAndCSS.${theme}.png`) + }) + }) + } + }) }) diff --git a/e2e/components/TextInput.test.ts b/e2e/components/TextInput.test.ts index dc1af6c6551..34ef7693a0e 100644 --- a/e2e/components/TextInput.test.ts +++ b/e2e/components/TextInput.test.ts @@ -338,4 +338,58 @@ test.describe('TextInput', () => { }) } }) + + test.describe('Dev: With Sx', () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: 'components-textinput-dev--with-sx', + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`TextInput.Dev.WithSx.${theme}.png`) + }) + }) + } + }) + + test.describe('Dev: With CSS', () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: 'components-textinput-dev--with-css', + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`TextInput.Dev.WithCSS.${theme}.png`) + }) + }) + } + }) + + test.describe('Dev: With Sx and CSS', () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: 'components-textinput-dev--with-sx-and-css', + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`TextInput.Dev.WithSxAndCSS.${theme}.png`) + }) + }) + } + }) }) diff --git a/e2e/components/Textarea.test.ts b/e2e/components/Textarea.test.ts index 828436027fd..5d584aec9c3 100644 --- a/e2e/components/Textarea.test.ts +++ b/e2e/components/Textarea.test.ts @@ -43,6 +43,10 @@ const stories = [ id: 'components-textarea-features--custom-width', title: 'Custom Width', }, + { + id: 'components-textarea-dev--dev-default', + title: 'Dev Default', + }, ] as const test.describe('Textarea', () => { diff --git a/e2e/components/Timeline.test.ts b/e2e/components/Timeline.test.ts index ceba14c85ec..480467c8547 100644 --- a/e2e/components/Timeline.test.ts +++ b/e2e/components/Timeline.test.ts @@ -2,143 +2,65 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('Timeline', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-timeline--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Timeline.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-timeline--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) +const stories = [ + { + title: 'Default', + id: 'components-timeline--default', + }, + { + title: 'Clip Sidebar', + id: 'components-timeline-features--clip-sidebar', + }, + { + title: 'Condensed Items', + id: 'components-timeline-features--condensed-items', + }, + { + title: 'Timeline Break', + id: 'components-timeline-features--timeline-break', + }, + { + title: 'SX Props', + id: 'components-timeline-dev--sx-props', + }, +] as const - test.describe('Clip Sidebar', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-timeline-features--clip-sidebar', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Timeline.Clip Sidebar.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-timeline-features--clip-sidebar', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', +test.describe('Timeline', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) + }) - test.describe('Condensed Items', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-timeline-features--condensed-items', - globals: { - colorScheme: theme, - }, + // Default state + expect(await page.screenshot()).toMatchSnapshot(`Timeline.${story.title}.${theme}.png`) }) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Timeline.Condensed Items.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-timeline-features--condensed-items', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) - - test.describe('Timeline Break', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-timeline-features--timeline-break', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Timeline.Timeline Break.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-timeline-features--timeline-break', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', + }) + await expect(page).toHaveNoViolations({ + rules: { + 'color-contrast': { + enabled: theme !== 'dark_dimmed', + }, }, - }, + }) }) }) - }) - } - }) - + } + }) + } test.describe('With Inline Links', () => { for (const theme of themes) { test.describe(theme, () => { diff --git a/e2e/components/Token.test.ts b/e2e/components/Token.test.ts index 87f0d422e7d..397e6eaa5c1 100644 --- a/e2e/components/Token.test.ts +++ b/e2e/components/Token.test.ts @@ -2,228 +2,85 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('Token', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Small Token', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token-features--small-token', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Small Token.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token-features--small-token', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Large Token', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token-features--large-token', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Large Token.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token-features--large-token', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Xlarge Token', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token-features--x-large-token', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Xlarge Token.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token-features--x-large-token', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) +const stories = [ + { + title: 'Default', + id: 'components-token--default', + }, + { + title: 'Dev Default', + id: 'components-token-dev--dev-default', + }, + { + title: 'Small Token', + id: 'components-token-features--small-token', + }, + { + title: 'Large Token', + id: 'components-token-features--large-token', + }, + { + title: 'X Large Token', + id: 'components-token-features--x-large-token', + }, + { + title: 'Token With Leading Visual', + id: 'components-token-features--token-with-leading-visual', + }, + { + title: 'Token with onRemove fn', + id: 'components-token-features--token-with-on-remove-fn', + }, + { + title: 'Default IssueLabelToken', + id: 'components-token-features--default-issue-label-token', + }, + { + title: 'IssueLabelToken with onRemove fn', + id: 'components-token-features--issue-label-token-with-on-remove-fn', + }, + { + title: 'AvatarToken Default', + id: 'components-avatartoken--default-token', + }, + { + title: 'AvatarToken Interactive', + id: 'components-avatartoken--interactive', + }, + { + title: 'AvatarToken On Remove Fn', + id: 'components-avatartoken--with-on-remove-fn', + }, +] - test.describe('Token With Leading Visual', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token-features--token-with-leading-visual', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Token With Leading Visual.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token-features--token-with-leading-visual', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Token With On Remove Fn', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token-features--token-with-on-remove-fn', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Token With On Remove Fn.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token-features--token-with-on-remove-fn', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Default Issue Label Token', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token-features--default-issue-label-token', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Default Issue Label Token.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token-features--default-issue-label-token', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Issue Label Token With On Remove Fn', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-token-features--issue-label-token-with-on-remove-fn', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`Token.Issue Label Token With On Remove Fn.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-token-features--issue-label-token-with-on-remove-fn', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) +test.describe('Token', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + // Default state + expect(await page.screenshot()).toMatchSnapshot(`Token.Default.${story.title}.${theme}.png`) + }) + + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() + }) + }) + } + }) + } }) diff --git a/e2e/components/TooltipV2.test.ts b/e2e/components/TooltipV2.test.ts index 38d2846e582..d72a1881241 100644 --- a/e2e/components/TooltipV2.test.ts +++ b/e2e/components/TooltipV2.test.ts @@ -2,155 +2,64 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('TooltipV2', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - await page.keyboard.press('Tab') - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`TooltipV2.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Anchor Has Margin', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--anchor-has-margin', - globals: { - colorScheme: theme, - }, - }) - - // Default state - await page.keyboard.press('Tab') - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `TooltipV2.Anchor Has Margin.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--anchor-has-margin', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Calculated Direction', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--calculated-direction', - globals: { - colorScheme: theme, - }, - }) - - // Default state - await page.keyboard.press('Tab') - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `TooltipV2.Calculated Direction.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--calculated-direction', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) - - test.describe('Icon Button With Description', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--icon-button-with-description', - globals: { - colorScheme: theme, - }, - }) +const stories = [ + { + title: 'Default', + id: 'components-tooltipv2--default', + }, + { + title: 'Anchor Has Margin', + id: 'components-tooltipv2-features--anchor-has-margin', + }, + { + title: 'Calculated Direction', + id: 'components-tooltipv2-features--calculated-direction', + }, + { + title: 'Icon Button With Description', + id: 'components-tooltipv2-features--icon-button-with-description', + }, + { + title: 'Label Type', + id: 'components-tooltipv2-features--label-type', + }, + { + title: 'Dev SX Props', + id: 'components-tooltipv2-dev--default', + }, +] as const - // Default state - await page.keyboard.press('Tab') - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `TooltipV2.Icon Button With Description.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--icon-button-with-description', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations() - }) - }) - } - }) +test.describe('TooltipV2', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) - test.describe('Label Type', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--label-type', - globals: { - colorScheme: theme, - }, + // Default state + await page.keyboard.press('Tab') + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `TooltipV2.${story.title}.${theme}.png`, + ) }) - // Default state - await page.keyboard.press('Tab') - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot(`TooltipV2.Label Type.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'components-tooltipv2-features--label-type', - globals: { - colorScheme: theme, - }, + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + await expect(page).toHaveNoViolations() }) - await expect(page).toHaveNoViolations() }) - }) - } - }) + } + }) + } }) diff --git a/e2e/components/UnderlinePanels.test.ts b/e2e/components/UnderlinePanels.test.ts index 3166549175f..fd9b5ec9764 100644 --- a/e2e/components/UnderlinePanels.test.ts +++ b/e2e/components/UnderlinePanels.test.ts @@ -2,244 +2,74 @@ import {test, expect} from '@playwright/test' import {visit} from '../test-helpers/storybook' import {themes} from '../test-helpers/themes' -test.describe('UnderlinePanels', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels--default', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`UnderlineNav.Default.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels--default', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Labelled By External Element', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--labelled-by-external-element', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`UnderlineNav.Labelled By External Element.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--labelled-by-external-element', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('Selected Tab', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--selected-tab', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`UnderlineNav.Selected Tab.${theme}.png`) - }) +const stories: Array<{title: string; id: string}> = [ + { + title: 'Default', + id: 'experimental-components-underlinepanels--default', + }, + { + title: 'Dev Default', + id: 'experimental-components-underlinepanels-dev--default', + }, + { + title: 'Labelled By External Element', + id: 'experimental-components-underlinepanels-features--labelled-by-external-element', + }, + { + title: 'Selected Tab', + id: 'experimental-components-underlinepanels-features--selected-tab', + }, + { + title: 'With Counters', + id: 'experimental-components-underlinepanels-features--with-counters', + }, + { + title: 'With Counters In Loading State', + id: 'experimental-components-underlinepanels-features--with-counters-in-loading-state', + }, + { + title: 'With Icons', + id: 'experimental-components-underlinepanels-features--with-icons', + }, + { + title: 'With Icons Hidden On Narrow Screen', + id: 'experimental-components-underlinepanels-features--with-icons-hidden-on-narrow-screen', + }, +] - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--selected-tab', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('With Counters', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-counters', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`UnderlineNav.With Counters.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-counters', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', +test.describe('UnderlinePanels', () => { + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('@vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) + }) - test.describe('With Counters In Loading State', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-counters-in-loading-state', - globals: { - colorScheme: theme, - }, + expect(await page.screenshot()).toMatchSnapshot(`UnderlinePanels.${story.title}.${theme}.png`) }) - // Default state - expect(await page.screenshot()).toMatchSnapshot(`UnderlineNav.With Counters In Loading State.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-counters-in-loading-state', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', + test('@aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, }, - }, - }) - }) - }) - } - }) - - test.describe('With Icons', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-icons', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`UnderlineNav.With Icons.${theme}.png`) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-icons', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', - }, - }, - }) - }) - }) - } - }) - - test.describe('With Icons Hidden On Narrow Screen', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-icons-hidden-on-narrow-screen', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot( - `UnderlineNav.With Icons Hidden On Narrow Screen.${theme}.png`, - ) - }) - - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-underlinepanels-features--with-icons-hidden-on-narrow-screen', - globals: { - colorScheme: theme, - }, - }) - await expect(page).toHaveNoViolations({ - rules: { - 'color-contrast': { - enabled: theme !== 'dark_dimmed', + }) + await expect(page).toHaveNoViolations({ + rules: { + 'color-contrast': { + enabled: theme !== 'dark_dimmed', + }, }, - }, + }) }) }) - }) - } - }) + } + }) + } }) diff --git a/e2e/components/drafts/SelectPanel.test.ts b/e2e/components/drafts/SelectPanel.test.ts index 2a2407e9ad7..301dc3b81f2 100644 --- a/e2e/components/drafts/SelectPanel.test.ts +++ b/e2e/components/drafts/SelectPanel.test.ts @@ -1,37 +1,80 @@ import {test, expect} from '@playwright/test' import {visit} from '../../test-helpers/storybook' import {themes} from '../../test-helpers/themes' +import {waitForImages} from '../../test-helpers/waitForImages' + +const stories: Array<{ + title: string + id: string + buttonText?: string +}> = [ + { + title: 'Default', + id: 'experimental-components-selectpanel--default', + }, + { + id: 'experimental-components-selectpanel-features--as-modal', + title: 'As Modal', + }, + { + id: 'experimental-components-selectpanel-features--external-anchor', + title: 'External Anchor', + }, + { + id: 'experimental-components-selectpanel-features--instant-selection-variant', + title: 'Instant Selection Variant', + buttonText: 'Choose a tag', + }, + { + id: 'experimental-components-selectpanel-features--with-warning', + title: 'With Warning', + buttonText: 'Assignees', + }, + { + id: 'experimental-components-selectpanel-features--with-errors', + title: 'With Errors', + buttonText: 'Assignees', + }, +] as const test.describe('SelectPanel', () => { - test.describe('Default', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'experimental-components-selectpanel--default', - globals: { - colorScheme: theme, - }, + for (const story of stories) { + test.describe(story.title, () => { + for (const theme of themes) { + test.describe(theme, () => { + test('default @vrt', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) + + // Default state + const buttonText = story.buttonText || 'Assign label' + await page.getByText(buttonText).click() + await waitForImages(page) + expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( + `drafts.SelectPanel.${story.title}.${theme}.png`, + ) }) - // Default state - await page.getByText('Assign label').click() - expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( - `drafts.SelectPanel.Default.${theme}.png`, - ) - }) + test('axe @aat', async ({page}) => { + await visit(page, { + id: story.id, + globals: { + colorScheme: theme, + }, + }) - test('axe @aat', async ({page}) => { - await visit(page, { - id: 'experimental-components-selectpanel--default', - globals: { - colorScheme: theme, - }, + // Default state + const buttonText = story.buttonText || 'Assign label' + await page.getByText(buttonText).click() + await waitForImages(page) + await expect(page).toHaveNoViolations() }) - await page.getByText('Assign label').click() - await expect(page).toHaveNoViolations() }) - }) - } - }) + } + }) + } }) diff --git a/e2e/test-helpers/storybook.ts b/e2e/test-helpers/storybook.ts index cd07cbb4629..ccb890c8316 100644 --- a/e2e/test-helpers/storybook.ts +++ b/e2e/test-helpers/storybook.ts @@ -54,7 +54,7 @@ export async function visit(page: Page, options: Options) { await page.goto(url.toString()) await page.waitForSelector('body.sb-show-main:not(.sb-show-preparing-story)') - await page.waitForSelector('#storybook-root > *') + await page.waitForSelector('#storybook-root > *', {state: 'attached'}) await waitForImages(page) } diff --git a/examples/app-router/package.json b/examples/app-router/package.json index 485665f95d0..8bdf5415f78 100644 --- a/examples/app-router/package.json +++ b/examples/app-router/package.json @@ -10,12 +10,12 @@ "type-check": "tsc --noEmit" }, "dependencies": { - "@primer/react": "37.0.1", + "@primer/react": "37.7.1", "next": "^14.2.10", "react": "^18.3.1", "react-dom": "^18.3.1", "styled-components": "5.x", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "devDependencies": { "@next/eslint-plugin-next": "14.1.0", diff --git a/examples/codesandbox/package.json b/examples/codesandbox/package.json index f483b600c7c..3ed7daadf06 100644 --- a/examples/codesandbox/package.json +++ b/examples/codesandbox/package.json @@ -19,13 +19,13 @@ "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^7.11.0", "@typescript-eslint/parser": "^7.3.1", - "@vitejs/plugin-react": "^4.2.1", - "@primer/react": "37.0.1", + "@vitejs/plugin-react": "^4.3.3", + "@primer/react": "37.7.1", "eslint": "^8.56.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.7", "styled-components": "5.x", - "typescript": "^5.6.3", + "typescript": "^5.7.2", "vite": "^5.2.14" } } diff --git a/examples/consumer-test/App.tsx b/examples/consumer-test/App.tsx deleted file mode 100644 index 0d947c6888d..00000000000 --- a/examples/consumer-test/App.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import {Box} from '@primer/react' - -export default function App() { - return -} diff --git a/examples/consumer-test/README.md b/examples/consumer-test/README.md deleted file mode 100644 index 6e7ac65e3ba..00000000000 --- a/examples/consumer-test/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Primer React Consumer Test - -This directory is used to run a simple test that asserts that a consumer of -Primer React can build their own project with strict TypeScript options enabled, -including `"skipLibCheck": false`. - -During Primer React's build process, we run the TypeScript compiler and output -`.d.ts` declaration files for consumers of Primer React that are using -TypeScript. If the build script runs with a TypeScript configuration that has -any files in its `types` or `typeRoots` that import any of our development -dependencies, it's possible for our build output to be polluted by interface -augmentations in those dependencies, or in transitive dependencies. - -The best way to avoid this is to ensure that any files that import development -dependencies are excluded in our `tsconfig.build.json` file we use to build -Primer React. - -If a mistake is made and a file is omitted, we will catch those when we attempt -to build this consumer library, which has `"skipLibCheck": false` in its -TypeScript configuration. - -For historical context, see these issues: - -- [v27.0.0 breaks TypeScript typings](https://github.com/primer/react/issues/1163) -- [Storybook dependency changes types in build output](https://github.com/primer/react/issues/1849) diff --git a/examples/consumer-test/package.json b/examples/consumer-test/package.json deleted file mode 100644 index ac945c97926..00000000000 --- a/examples/consumer-test/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "example-consumer-test", - "version": "0.0.0", - "private": true, - "scripts": { - "check": "tsc --noEmit" - }, - "dependencies": { - "@types/react": "^18.3.11", - "@types/react-dom": "^18.2.19", - "@types/styled-components": "^5.1.11", - "@primer/react": "37.0.1", - "react": "^18.0.0", - "react-dom": "^18.0.0", - "styled-components": "^5.3.11", - "typescript": "~4.7.2" - } -} diff --git a/examples/consumer-test/tsconfig.json b/examples/consumer-test/tsconfig.json deleted file mode 100644 index 1a898abb1a0..00000000000 --- a/examples/consumer-test/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "skipLibCheck": false, // IMPORTANT: Validates our type outputs - "target": "esnext", - "module": "commonjs", - "allowJs": true, - "checkJs": false, - "jsx": "preserve", - "declaration": true, - "noEmit": true, - "strict": true, - "moduleResolution": "node", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true - }, - "include": ["./*.tsx"] -} diff --git a/examples/theming/package.json b/examples/theming/package.json index 461b31ea605..6fd7fb3d2b2 100644 --- a/examples/theming/package.json +++ b/examples/theming/package.json @@ -11,13 +11,13 @@ }, "dependencies": { "@primer/octicons-react": "^19.9.0", - "@primer/react": "37.0.1", + "@primer/react": "37.7.1", "clsx": "^1.2.1", "next": "^14.2.10", "react": "^18.3.1", "react-dom": "^18.3.1", "styled-components": "5.x", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "devDependencies": { "@next/eslint-plugin-next": "14.1.0", diff --git a/package-lock.json b/package-lock.json index 3b6116ca3c2..e54147a6610 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@playwright/test": "^1.47.2", "@prettier/sync": "0.5.1", "@primer/stylelint-config": "13.1.1", - "@size-limit/preset-big-lib": "11.0.2", + "@size-limit/preset-big-lib": "11.1.6", "@types/jest": "29.5.12", "@typescript-eslint/eslint-plugin": "^7.11.0", "@typescript-eslint/parser": "^7.3.1", @@ -32,7 +32,7 @@ "eslint-plugin-jest": "28.8.3", "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-mdx": "3.1.5", - "eslint-plugin-playwright": "0.15.1", + "eslint-plugin-playwright": "^2.1.0", "eslint-plugin-prettier": "5.0.0", "eslint-plugin-primer-react": "5.4.0", "eslint-plugin-react": "7.32.2", @@ -48,7 +48,7 @@ "rimraf": "5.0.5", "size-limit": "11.1.5", "stylelint": "16.9.0", - "typescript": "5.6.3" + "typescript": "^5.7.2" }, "engines": { "node": ">=12", @@ -62,12 +62,12 @@ "name": "example-app-router", "version": "0.0.0", "dependencies": { - "@primer/react": "37.0.1", + "@primer/react": "37.6.0", "next": "^14.2.10", "react": "^18.3.1", "react-dom": "^18.3.1", "styled-components": "5.x", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "devDependencies": { "@next/eslint-plugin-next": "14.1.0", @@ -81,25 +81,26 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@primer/react": "37.0.1", + "@primer/react": "37.6.0", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^7.11.0", "@typescript-eslint/parser": "^7.3.1", - "@vitejs/plugin-react": "^4.2.1", + "@vitejs/plugin-react": "^4.3.3", "eslint": "^8.56.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.7", "styled-components": "5.x", - "typescript": "^5.6.3", + "typescript": "^5.7.2", "vite": "^5.2.14" } }, "examples/consumer-test": { "name": "example-consumer-test", "version": "0.0.0", + "extraneous": true, "dependencies": { - "@primer/react": "37.0.1", + "@primer/react": "37.6.0", "@types/react": "^18.3.11", "@types/react-dom": "^18.2.19", "@types/styled-components": "^5.1.11", @@ -109,29 +110,18 @@ "typescript": "~4.7.2" } }, - "examples/consumer-test/node_modules/typescript": { - "version": "4.7.4", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "examples/theming": { "name": "example-theming", "version": "0.0.0", "dependencies": { "@primer/octicons-react": "^19.9.0", - "@primer/react": "37.0.1", + "@primer/react": "37.6.0", "clsx": "^1.2.1", "next": "^14.2.10", "react": "^18.3.1", "react-dom": "^18.3.1", "styled-components": "5.x", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "devDependencies": { "@next/eslint-plugin-next": "14.1.0", @@ -228,10 +218,12 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "license": "MIT", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -239,9 +231,10 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -329,18 +322,34 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "license": "MIT", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.24.7", "license": "MIT", @@ -364,13 +373,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -504,25 +514,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "license": "MIT", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -543,8 +554,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "license": "MIT", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "engines": { "node": ">=6.9.0" } @@ -617,23 +629,26 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "license": "MIT", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "license": "MIT", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -652,25 +667,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" @@ -1742,11 +1745,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.1", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2248,22 +2252,24 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "license": "MIT", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/parser": { - "version": "7.25.6", - "license": "MIT", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -2273,14 +2279,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2289,10 +2296,11 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/parser": { - "version": "7.25.6", - "license": "MIT", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -2302,12 +2310,12 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "license": "MIT", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -4185,8 +4193,9 @@ "license": "MIT" }, "node_modules/@github/relative-time-element": { - "version": "4.4.2", - "license": "MIT" + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@github/relative-time-element/-/relative-time-element-4.4.3.tgz", + "integrity": "sha512-EVKokqx9/DdUAZ2l9WVyY51EtRCO2gQWWMvsRIn7r4glJ91q9CXcnILVHZVCpfD52ucXUhUvtYsAjNJ4qP4uIg==" }, "node_modules/@github/tab-container-element": { "version": "4.8.2", @@ -6018,18 +6027,19 @@ "license": "MIT" }, "node_modules/@puppeteer/browsers": { - "version": "2.1.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.1.tgz", + "integrity": "sha512-0kdAbmic3J09I6dT8e9vE2JOCSt13wHCW5x/ly8TSt2bDtuIWe2TgLZZDHdcziw9AVCzflMAXCrVyRIhIs44Ng==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.4.0", - "semver": "7.6.0", - "tar-fs": "3.0.5", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "debug": "^4.3.7", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" @@ -6040,8 +6050,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6054,8 +6065,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -6067,8 +6079,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6078,27 +6091,38 @@ }, "node_modules/@puppeteer/browsers/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@puppeteer/browsers/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=10" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/@puppeteer/browsers/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -6106,33 +6130,11 @@ "node": ">=10" } }, - "node_modules/@puppeteer/browsers/node_modules/tar-fs": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" - } - }, - "node_modules/@puppeteer/browsers/node_modules/tar-stream": { - "version": "3.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "node_modules/@puppeteer/browsers/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6147,21 +6149,18 @@ }, "node_modules/@puppeteer/browsers/node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/@puppeteer/browsers/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -6177,8 +6176,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } @@ -6308,6 +6308,27 @@ } } }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.1.tgz", + "integrity": "sha512-2sPh9b73dj5IxuMmDAsQWVFT7mR+yoHweBaXG2W/R8vQ+IWZlnaI7BR7J6EguVQUp1hd8Z7XuozpDjEKQAAC2Q==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-terser": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", @@ -6608,8 +6629,9 @@ }, "node_modules/@sitespeed.io/tracium": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@sitespeed.io/tracium/-/tracium-0.3.3.tgz", + "integrity": "sha512-dNZafjM93Y+F+sfwTO5gTpsGXlnc/0Q+c2+62ViqP3gkMWvHEMSKkaEHgVJLcLg3i/g19GSIPziiKpgyne07Bw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "^4.1.1" }, @@ -6618,60 +6640,54 @@ } }, "node_modules/@size-limit/file": { - "version": "11.0.2", + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-11.1.6.tgz", + "integrity": "sha512-ojzzJMrTfcSECRnaTjGy0wNIolTCRdyqZTSWG9sG5XEoXG6PNgHXDDS6gf6YNxnqb+rWfCfVe93u6aKi3wEocQ==", "dev": true, - "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "size-limit": "11.0.2" + "size-limit": "11.1.6" } }, "node_modules/@size-limit/preset-big-lib": { - "version": "11.0.2", + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@size-limit/preset-big-lib/-/preset-big-lib-11.1.6.tgz", + "integrity": "sha512-GE93qIW9C3+8MXOsYgV0QcLfKv6B+Q8u/Jjb5rLfetDHBKoZV7HmedM/bv0vrbdcZlT8elk5P18Jo6L6yeV/8Q==", "dev": true, - "license": "MIT", "dependencies": { - "@size-limit/file": "11.0.2", - "@size-limit/time": "11.0.2", - "@size-limit/webpack": "11.0.2", - "size-limit": "11.0.2" + "@size-limit/file": "11.1.6", + "@size-limit/time": "11.1.6", + "@size-limit/webpack": "11.1.6", + "size-limit": "11.1.6" }, "peerDependencies": { - "size-limit": "11.0.2" + "size-limit": "11.1.6" } }, - "node_modules/@size-limit/preset-big-lib/node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "node_modules/@size-limit/preset-big-lib/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, "engines": { - "node": ">=18" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@size-limit/preset-big-lib/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "node_modules/@size-limit/preset-big-lib/node_modules/jiti": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.0.tgz", + "integrity": "sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==", "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/@size-limit/preset-big-lib/node_modules/lilconfig": { @@ -6686,30 +6702,32 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/@size-limit/preset-big-lib/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "node_modules/@size-limit/preset-big-lib/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, "engines": { - "node": ">=12" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/@size-limit/preset-big-lib/node_modules/size-limit": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-11.0.2.tgz", - "integrity": "sha512-iFZ8iTR/3zPqxSwEIdGnTVYVU0F2nhodLQG/G6zpi/NxECYAK9ntq2lNr+prXH7h3gyBjx2Umt2D/oS2Qzz+eg==", + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-11.1.6.tgz", + "integrity": "sha512-S5ux2IB8rU26xwVgMskmknGMFkieaIAqDLuwgKiypk6oa4lFsie8yFPrzRFV+yrLDY2GddjXuCaVk5PveVOHiQ==", "dev": true, "dependencies": { "bytes-iec": "^3.1.1", - "chokidar": "^3.5.3", - "globby": "^14.0.0", - "lilconfig": "^3.0.0", + "chokidar": "^4.0.1", + "jiti": "^2.0.0", + "lilconfig": "^3.1.2", "nanospinner": "^1.1.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.0", + "tinyglobby": "^0.2.7" }, "bin": { "size-limit": "bin.js" @@ -6718,49 +6736,41 @@ "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/@size-limit/preset-big-lib/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@size-limit/time": { - "version": "11.0.2", + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@size-limit/time/-/time-11.1.6.tgz", + "integrity": "sha512-NIlJEPvUIxw87gHjriHpPhvd9fIC94S9wq7OW25K7Ctn14FZ2NlOTezPCfVViPmdlXjBYdi8vjsbc7kLCF1EpA==", "dev": true, - "license": "MIT", "dependencies": { - "estimo": "^3.0.1" + "estimo": "^3.0.3" }, "engines": { "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "size-limit": "11.0.2" + "size-limit": "11.1.6" } }, "node_modules/@size-limit/webpack": { - "version": "11.0.2", + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@size-limit/webpack/-/webpack-11.1.6.tgz", + "integrity": "sha512-PTZCgwJsgdzdEj2wPFuLm0cCge8N2WbswMcKWNwMJibxQxPAmiF+sZ2F6GYBS7G7K3Fb4ovCliuN+wnnRACPNg==", "dev": true, - "license": "MIT", "dependencies": { - "nanoid": "^5.0.4", - "webpack": "^5.89.0" + "nanoid": "^5.0.7", + "webpack": "^5.95.0" }, "engines": { "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "size-limit": "11.0.2" + "size-limit": "11.1.6" } }, "node_modules/@size-limit/webpack/node_modules/nanoid": { - "version": "5.0.7", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz", + "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==", "dev": true, "funding": [ { @@ -6768,7 +6778,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.js" }, @@ -8141,9 +8150,10 @@ } }, "node_modules/@testing-library/react": { - "version": "16.0.0", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.1.tgz", + "integrity": "sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5" }, @@ -8217,8 +8227,9 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true }, "node_modules/@trysound/sax": { "version": "0.2.0", @@ -8323,6 +8334,26 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -8384,6 +8415,7 @@ }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.5", + "dev": true, "license": "MIT", "dependencies": { "@types/react": "*", @@ -8616,6 +8648,7 @@ }, "node_modules/@types/react-dom": { "version": "18.3.0", + "dev": true, "license": "MIT", "dependencies": { "@types/react": "*" @@ -8672,6 +8705,7 @@ }, "node_modules/@types/styled-components": { "version": "5.1.34", + "dev": true, "license": "MIT", "dependencies": { "@types/hoist-non-react-statics": "*", @@ -8734,8 +8768,9 @@ }, "node_modules/@types/yauzl": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -9324,15 +9359,14 @@ "license": "ISC" }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", - "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.24.5", - "@babel/plugin-transform-react-jsx-self": "^7.24.5", - "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, @@ -9343,6 +9377,66 @@ "vite": "^4.2.0 || ^5.0.0" } }, + "node_modules/@vitejs/plugin-react/node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@vitejs/plugin-react/node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@vitejs/plugin-react/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@vitejs/plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@vitest/expect": { "version": "2.0.5", "dev": true, @@ -9402,145 +9496,162 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "dev": true, - "license": "MIT" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "dev": true, - "license": "MIT" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "dev": true, - "license": "MIT" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "dev": true, - "license": "MIT" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "dev": true, - "license": "MIT" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, - "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, "node_modules/abab": { "version": "2.0.6", @@ -9570,9 +9681,10 @@ } }, "node_modules/acorn": { - "version": "8.12.1", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -9600,14 +9712,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "dev": true, @@ -9652,8 +9756,9 @@ }, "node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -9708,6 +9813,7 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -9992,9 +10098,10 @@ } }, "node_modules/b4a": { - "version": "1.6.6", - "dev": true, - "license": "Apache-2.0" + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", @@ -10361,38 +10468,51 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.2.1", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "dev": true, - "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { - "version": "2.2.2", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "bare-events": "^2.0.0", - "bare-os": "^2.0.0", "bare-path": "^2.0.0", - "streamx": "^2.13.0" + "bare-stream": "^2.0.0" } }, "node_modules/bare-os": { - "version": "2.2.1", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", "dev": true, - "license": "Apache-2.0", "optional": true }, "node_modules/bare-path": { - "version": "2.1.0", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "bare-os": "^2.1.0" } }, + "node_modules/bare-stream": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.2.tgz", + "integrity": "sha512-EFZHSIBkDgSHIwj2l2QZfP4U5OcD4xFAOwhSb/vlr9PIqyGJGvB/nfClJbcnh3EY4jtPE4zsb5ztae96bVF79A==", + "dev": true, + "optional": true, + "dependencies": { + "streamx": "^2.20.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "dev": true, @@ -10414,8 +10534,9 @@ }, "node_modules/basic-ftp": { "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -10569,7 +10690,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.23.3", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -10584,12 +10707,11 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -10631,8 +10753,9 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -10771,9 +10894,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001667", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", - "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", "funding": [ { "type": "opencollective", @@ -10787,8 +10910,7 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/ccount": { "version": "2.0.1", @@ -10816,6 +10938,7 @@ }, "node_modules/chalk": { "version": "2.4.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -10912,29 +11035,36 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/chromium-bidi": { - "version": "0.5.9", + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.17.tgz", + "integrity": "sha512-BqOuIWUgTPj8ayuBFJUYCCuwIcwjBsb3/614P7tt1bEPJ4i1M0kCdIl0Wi9xhtswBXnfO2bTpTMkHD71H8rJMg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0" + "urlpattern-polyfill": "10.0.0", + "zod": "3.22.4" }, "peerDependencies": { "devtools-protocol": "*" } }, - "node_modules/chromium-bidi/node_modules/mitt": { - "version": "3.0.1", + "node_modules/chromium-bidi/node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "dev": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } }, "node_modules/ci-info": { "version": "3.9.0", @@ -11050,6 +11180,7 @@ }, "node_modules/color-convert": { "version": "1.9.3", + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -11057,6 +11188,7 @@ }, "node_modules/color-name": { "version": "1.1.3", + "dev": true, "license": "MIT" }, "node_modules/color2k": { @@ -11674,14 +11806,6 @@ "node": ">= 8" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "5.1.0", "dev": true, @@ -12037,8 +12161,9 @@ }, "node_modules/data-uri-to-buffer": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14" } @@ -12338,8 +12463,9 @@ }, "node_modules/degenerator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, - "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -12351,8 +12477,9 @@ }, "node_modules/degenerator/node_modules/ast-types": { "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -12422,9 +12549,10 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1249869", - "dev": true, - "license": "BSD-3-Clause" + "version": "0.0.1262051", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1262051.tgz", + "integrity": "sha512-YJe4CT5SA8on3Spa+UDtNhEqtuV6Epwz3OZ4HQVLhlRccpZ9/PAYk0/cy/oKxFKRrZPBUPyxympQci4yWNWZ9g==", + "dev": true }, "node_modules/diff": { "version": "5.2.0", @@ -12574,8 +12702,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.6", - "license": "ISC" + "version": "1.5.58", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.58.tgz", + "integrity": "sha512-al2l4r+24ZFL7WzyPTlyD0fC33LLzvxqLCwurtBibVPghRGO9hSTl+tis8t1kD7biPiH/en4U0I7o/nQbYeoVA==" }, "node_modules/emittery": { "version": "0.13.1", @@ -12602,8 +12731,9 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -12888,8 +13018,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "license": "MIT", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -12901,6 +13032,7 @@ }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -13116,11 +13248,13 @@ } }, "node_modules/eslint-plugin-escompat": { - "version": "3.4.0", + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.11.4.tgz", + "integrity": "sha512-j0ywwNnIufshOzgAu+PfIig1c7VRClKSNKzpniMT2vXQ4leL5q+e/SpMFQU0nrdL2WFFM44XmhSuwmxb3G0CJg==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.21.0" + "browserslist": "^4.23.1" }, "peerDependencies": { "eslint": ">=5.14.1" @@ -13740,17 +13874,51 @@ } }, "node_modules/eslint-plugin-playwright": { - "version": "0.15.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.1.0.tgz", + "integrity": "sha512-wMbHOehofSB1cBdzz2CLaCYaKNLeTQ0YnOW+7AHa281TJqlpEJUBgTHbRUYOUxiXphfWwOyTPvgr6vvEmArbSA==", "dev": true, "license": "MIT", + "workspaces": [ + "examples" + ], + "dependencies": { + "globals": "^13.23.0" + }, + "engines": { + "node": ">=16.6.0" + }, "peerDependencies": { - "eslint": ">=7", - "eslint-plugin-jest": ">=25" + "eslint": ">=8.40.0" + } + }, + "node_modules/eslint-plugin-playwright/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" }, - "peerDependenciesMeta": { - "eslint-plugin-jest": { - "optional": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-playwright/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-plugin-prettier": { @@ -14358,15 +14526,16 @@ } }, "node_modules/estimo": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estimo/-/estimo-3.0.3.tgz", + "integrity": "sha512-qSibrDHo82yvmgeOW7onGgeOzS/nnqa8r2exQ8LyTSH8rAma10VBJE+hPSdukV1nQrqFvEz7BVe5puUK2LZJXg==", "dev": true, - "license": "MIT", "dependencies": { "@sitespeed.io/tracium": "^0.3.3", "commander": "^12.0.0", "find-chrome-bin": "2.0.2", - "nanoid": "5.0.6", - "puppeteer-core": "22.2.0" + "nanoid": "5.0.7", + "puppeteer-core": "22.6.5" }, "bin": { "estimo": "scripts/cli.js" @@ -14377,14 +14546,17 @@ }, "node_modules/estimo/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/estimo/node_modules/nanoid": { - "version": "5.0.6", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", + "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", "dev": true, "funding": [ { @@ -14392,7 +14564,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.js" }, @@ -14454,8 +14625,9 @@ }, "node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -14464,10 +14636,6 @@ "resolved": "examples/app-router", "link": true }, - "node_modules/example-consumer-test": { - "resolved": "examples/consumer-test", - "link": true - }, "node_modules/example-theming": { "resolved": "examples/theming", "link": true @@ -14756,8 +14924,9 @@ }, "node_modules/extract-zip": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -14775,8 +14944,9 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -14799,8 +14969,9 @@ }, "node_modules/fast-fifo": { "version": "1.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true }, "node_modules/fast-fuzzy": { "version": "1.12.0", @@ -14873,16 +15044,18 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fdir": { - "version": "6.3.0", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", "dev": true, - "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -15034,8 +15207,9 @@ }, "node_modules/find-chrome-bin": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/find-chrome-bin/-/find-chrome-bin-2.0.2.tgz", + "integrity": "sha512-KlggCilbbvgETk/WEq9NG894U8yu4erIW0SjMm1sMPm2xihCHeNoybpzGoxEzHRthwF3XrKOgHYtfqgJzpCH2w==", "dev": true, - "license": "MIT", "dependencies": { "@puppeteer/browsers": "^2.1.0" }, @@ -15437,8 +15611,9 @@ }, "node_modules/get-uri": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, - "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", @@ -15451,8 +15626,9 @@ }, "node_modules/get-uri/node_modules/fs-extra": { "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -15464,8 +15640,9 @@ }, "node_modules/get-uri/node_modules/jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -15475,8 +15652,9 @@ }, "node_modules/get-uri/node_modules/universalify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -15558,8 +15736,9 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/global-modules": { "version": "2.0.0", @@ -16163,8 +16342,9 @@ }, "node_modules/ip-address": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, - "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -16173,15 +16353,11 @@ "node": ">= 12" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/ip-address/node_modules/sprintf-js": { "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -18975,6 +19151,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jscodeshift": { "version": "0.15.0", "dev": true, @@ -19131,13 +19313,14 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -19330,8 +19513,9 @@ }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.11.5" } @@ -21375,6 +21559,12 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, "node_modules/mixme": { "version": "0.5.4", "dev": true, @@ -21480,8 +21670,9 @@ }, "node_modules/netmask": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -22183,18 +22374,19 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" @@ -22202,8 +22394,9 @@ }, "node_modules/pac-proxy-agent/node_modules/agent-base": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -22213,8 +22406,9 @@ }, "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -22225,8 +22419,9 @@ }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -22237,8 +22432,9 @@ }, "node_modules/pac-resolver": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, - "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -22410,8 +22606,9 @@ }, "node_modules/pend": { "version": "1.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/picocolors": { "version": "1.1.0", @@ -24002,8 +24199,9 @@ }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -24078,8 +24276,9 @@ }, "node_modules/proxy-agent": { "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -24096,8 +24295,9 @@ }, "node_modules/proxy-agent/node_modules/agent-base": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -24107,8 +24307,9 @@ }, "node_modules/proxy-agent/node_modules/http-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -24119,8 +24320,9 @@ }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -24131,8 +24333,9 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } @@ -24159,9 +24362,10 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.0", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -24176,21 +24380,190 @@ } }, "node_modules/puppeteer-core": { - "version": "22.2.0", + "version": "22.6.5", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.6.5.tgz", + "integrity": "sha512-s0/5XkAWe0/dWISiljdrybjwDCHhgN31Nu/wznOZPKeikgcJtZtbvPKBz0t802XWqfSQnQDt3L6xiAE5JLlfuw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.1.0", - "chromium-bidi": "0.5.9", - "cross-fetch": "4.0.0", + "@puppeteer/browsers": "2.2.2", + "chromium-bidi": "0.5.17", "debug": "4.3.4", - "devtools-protocol": "0.0.1249869", + "devtools-protocol": "0.0.1262051", "ws": "8.16.0" }, "engines": { "node": ">=18" } }, + "node_modules/puppeteer-core/node_modules/@puppeteer/browsers": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.2.tgz", + "integrity": "sha512-hZ/JhxPIceWaGSEzUZp83/8M49CoxlkuThfTR7t4AoCu5+ZvJ3vktLm60Otww2TXeROB5igiZ8D9oPQh6ckBVg==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.4.0", + "semver": "7.6.0", + "tar-fs": "3.0.5", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/puppeteer-core/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/puppeteer-core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/puppeteer-core/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/puppeteer-core/node_modules/tar-fs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", + "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", + "dev": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/puppeteer-core/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/puppeteer-core/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/puppeteer-core/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/puppeteer-core/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/pure-rand": { "version": "6.0.4", "dev": true, @@ -24246,8 +24619,9 @@ }, "node_modules/queue-tick": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, "node_modules/quick-lru": { "version": "4.0.1", @@ -26032,8 +26406,9 @@ }, "node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -26049,8 +26424,9 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -26064,8 +26440,9 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/semver": { "version": "7.6.2", @@ -26294,8 +26671,9 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -26326,9 +26704,10 @@ "license": "MIT" }, "node_modules/socks": { - "version": "2.8.1", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, - "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -26339,13 +26718,14 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "dev": true, - "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" @@ -26353,8 +26733,9 @@ }, "node_modules/socks-proxy-agent/node_modules/agent-base": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -26502,12 +26883,14 @@ } }, "node_modules/streamx": { - "version": "2.16.1", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.2.tgz", + "integrity": "sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==", "dev": true, - "license": "MIT", "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" @@ -27532,6 +27915,31 @@ "node": ">=6" } }, + "node_modules/tar-fs": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/telejson": { "version": "7.2.0", "dev": true, @@ -27574,9 +27982,10 @@ } }, "node_modules/terser": { - "version": "5.31.0", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -27592,8 +28001,9 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -27625,16 +28035,18 @@ }, "node_modules/terser-webpack-plugin/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -27646,8 +28058,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -27676,6 +28089,12 @@ "node": ">=8" } }, + "node_modules/text-decoder": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", + "dev": true + }, "node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -27683,8 +28102,9 @@ }, "node_modules/through": { "version": "2.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/through2": { "version": "2.0.5", @@ -27725,11 +28145,12 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.6", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", "dev": true, - "license": "ISC", "dependencies": { - "fdir": "^6.3.0", + "fdir": "^6.4.2", "picomatch": "^4.0.2" }, "engines": { @@ -27790,13 +28211,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "dev": true, @@ -28323,9 +28737,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -28406,8 +28820,9 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -28922,7 +29337,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -28937,10 +29354,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -28968,8 +29384,9 @@ }, "node_modules/urlpattern-polyfill": { "version": "10.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true }, "node_modules/util": { "version": "0.12.5", @@ -29410,8 +29827,9 @@ }, "node_modules/watchpack": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, - "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -29437,17 +29855,18 @@ } }, "node_modules/webpack": { - "version": "5.94.0", + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", "dev": true, - "license": "MIT", "dependencies": { - "@types/estree": "^1.0.5", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", @@ -29481,19 +29900,20 @@ } } }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/webpack-sources": { + "node_modules/webpack-sources": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "dev": true, + "license": "MIT" + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "dev": true, @@ -29837,8 +30257,9 @@ }, "node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -29903,7 +30324,7 @@ "postcss": "^8.4.41", "postcss-custom-properties-fallback": "^1.0.2", "postcss-mixins": "^11.0.1", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "peerDependencies": { "postcss": "^8.4.41" @@ -30045,17 +30466,17 @@ }, "packages/react": { "name": "@primer/react", - "version": "37.0.1", + "version": "37.6.0", "license": "MIT", "dependencies": { - "@github/relative-time-element": "^4.4.2", + "@github/relative-time-element": "^4.4.3", "@github/tab-container-element": "^4.8.0", "@lit-labs/react": "1.2.1", "@oddbird/popover-polyfill": "^0.4.4", "@primer/behaviors": "^1.7.2", "@primer/live-region-element": "^0.7.1", "@primer/octicons-react": "^19.9.0", - "@primer/primitives": "^9.0.3", + "@primer/primitives": "9.x || 10.x", "@styled-system/css": "^5.1.5", "@styled-system/props": "^5.1.5", "@styled-system/theme-get": "^5.1.2", @@ -30090,7 +30511,7 @@ "@rollup/plugin-babel": "6.0.4", "@rollup/plugin-commonjs": "25.0.4", "@rollup/plugin-node-resolve": "15.1.0", - "@rollup/plugin-replace": "5.0.2", + "@rollup/plugin-replace": "6.0.1", "@rollup/plugin-terser": "0.4.4", "@rollup/plugin-typescript": "11.1.5", "@rollup/plugin-virtual": "3.0.2", @@ -30107,7 +30528,7 @@ "@storybook/theming": "^8.3.0", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.4.5", - "@testing-library/react": "^16.0.0", + "@testing-library/react": "^16.0.1", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.5.2", "@types/lodash.groupby": "4.6.9", @@ -30120,7 +30541,7 @@ "@types/react-test-renderer": "18.3.0", "@types/semver": "7.5.8", "@types/styled-components": "^5.1.26", - "@vitejs/plugin-react": "^4.3.1", + "@vitejs/plugin-react": "^4.3.3", "ajv": "8.16.0", "axe-core": "4.9.1", "babel-core": "7.0.0-bridge.0", @@ -30168,10 +30589,10 @@ "semver": "7.6.2", "storybook": "^8.3.0", "styled-components": "5.3.11", - "terser": "5.31.0", + "terser": "5.36.0", "ts-toolbelt": "9.6.0", "tsx": "4.7.0", - "typescript": "^5.6.3", + "typescript": "^5.7.2", "typescript-plugin-css-modules": "5.1.0", "unist-util-find": "3.0.0", "unist-util-find-before": "4.0.0", @@ -30204,7 +30625,8 @@ }, "packages/react/node_modules/@prettier/sync": { "version": "0.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.5.2.tgz", + "integrity": "sha512-Yb569su456XNx5BsH/Vyem7xD6g/y9iLmLUzRKM1a/dhU/D7HqqvkAG72znulXlMXztbV0iiu9O5AL8K98TzZQ==", "dependencies": { "make-synchronized": "^0.2.8" }, @@ -30216,8 +30638,9 @@ } }, "packages/react/node_modules/@primer/primitives": { - "version": "9.1.1", - "license": "MIT", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-9.1.2.tgz", + "integrity": "sha512-KecRJpUdIf14J3gVpoyMMJeQD6Sh5kcHk93N5bYch4XGB0GOZP3ypxz+NByMjr/2HHPsRfCCO5EEgNjmeWYUGQ==", "dependencies": { "@prettier/sync": "^0.5.2", "prettier": "3.3" @@ -30271,26 +30694,6 @@ } } }, - "packages/react/node_modules/@rollup/plugin-replace": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.27.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, "packages/react/node_modules/@rollup/plugin-typescript": { "version": "11.1.5", "dev": true, @@ -30515,7 +30918,8 @@ "postcss-modules": "^6.0.0", "rimraf": "^5.0.7", "rollup-plugin-esbuild": "^6.1.1", - "rollup-plugin-typescript2": "^0.36.0" + "rollup-plugin-typescript2": "^0.36.0", + "typescript": "^5.7.2" }, "peerDependencies": { "postcss": "^8.4.38", diff --git a/package.json b/package.json index 9ac53a5ba2e..f4723bf4e63 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@playwright/test": "^1.47.2", "@prettier/sync": "0.5.1", "@primer/stylelint-config": "13.1.1", - "@size-limit/preset-big-lib": "11.0.2", + "@size-limit/preset-big-lib": "11.1.6", "@types/jest": "29.5.12", "@typescript-eslint/eslint-plugin": "^7.11.0", "@typescript-eslint/parser": "^7.3.1", @@ -60,7 +60,7 @@ "eslint-plugin-jest": "28.8.3", "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-mdx": "3.1.5", - "eslint-plugin-playwright": "0.15.1", + "eslint-plugin-playwright": "^2.1.0", "eslint-plugin-prettier": "5.0.0", "eslint-plugin-primer-react": "5.4.0", "eslint-plugin-react": "7.32.2", @@ -76,7 +76,7 @@ "rimraf": "5.0.5", "size-limit": "11.1.5", "stylelint": "16.9.0", - "typescript": "5.6.3" + "typescript": "^5.7.2" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "^4.9.6" @@ -93,5 +93,6 @@ "webpack": false, "running": false } - ] + ], + "packageManager": "npm@10.9.2+sha512.8ab88f10f224a0c614cb717a7f7c30499014f77134120e9c1f0211ea3cf3397592cbe483feb38e0c4b3be1c54e347292c76a1b5edb94a3289d5448484ab8ac81" } diff --git a/packages/postcss-preset-primer/package.json b/packages/postcss-preset-primer/package.json index 3ba7cfd1ec1..305a93706cb 100644 --- a/packages/postcss-preset-primer/package.json +++ b/packages/postcss-preset-primer/package.json @@ -29,6 +29,6 @@ "postcss": "^8.4.41", "postcss-custom-properties-fallback": "^1.0.2", "postcss-mixins": "^11.0.1", - "typescript": "^5.6.3" + "typescript": "^5.7.2" } } diff --git a/packages/react/.storybook/preview.jsx b/packages/react/.storybook/preview.jsx index 05be21801da..e000c6b6e1c 100644 --- a/packages/react/.storybook/preview.jsx +++ b/packages/react/.storybook/preview.jsx @@ -46,18 +46,69 @@ const preview = { ], ], ], - 'Experimental', + [ + 'Experimental', + [ + [ + // Match on any story that leads with "Components" + 'Components', + // This is the ordering of stories under "Components", by default + // we'll sort alphabetically + [ + [ + '*', + // Within a set of stories, set the order to the following + ['*', 'Playground', /Playground$/, 'Features', 'Examples'], + ], + ], + ] + ] + ], 'Behaviors', 'Hooks', - 'Deprecated', - 'Private', + [ + 'Deprecated', + [ + [ + // Match on any story that leads with "Components" + 'Components', + // This is the ordering of stories under "Components", by default + // we'll sort alphabetically + [ + [ + '*', + // Within a set of stories, set the order to the following + ['*', 'Playground', /Playground$/, 'Features', 'Examples'], + ], + ], + ] + ] + ], + [ + 'Private', + [ + [ + // Match on any story that leads with "Components" + 'Components', + // This is the ordering of stories under "Components", by default + // we'll sort alphabetically + [ + [ + '*', + // Within a set of stories, set the order to the following + ['*', 'Playground', /Playground$/, 'Features', 'Examples'], + ], + ], + ] + ] + ], '*', ] /** * Get the position of an item within a given order. This will return the * index if the item is defined in the given array, or the wildcard index - * if it is not explicitlyd efined + * if it is not explicitly defined */ function getPosition(order, item) { const position = order.findIndex(value => { diff --git a/packages/react/.storybook/storybook.css b/packages/react/.storybook/storybook.css index decaab83e91..31dfd6f105a 100644 --- a/packages/react/.storybook/storybook.css +++ b/packages/react/.storybook/storybook.css @@ -69,3 +69,11 @@ .testCustomClassnameBorderColor { border-color: var(--borderColor-sponsors-emphasis) !important; } + +.testCustomClassnameBorder { + border: var(--borderWidth-thin) solid var(--borderColor-sponsors-emphasis); +} + +.testCustomClassnameMono { + font-family: var(--fontStack-monospace); +} diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index fba871e038d..9e8fd08102c 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,290 @@ # @primer/react +## 37.7.1 + +### Patch Changes + +- [#5412](https://github.com/primer/react/pull/5412) [`7d195fc`](https://github.com/primer/react/commit/7d195fc7c60e5d480e28e71928ce72e152703a48) Thanks [@jonrohan](https://github.com/jonrohan)! - Revert changes to ButtonGroup component + +## 37.7.0 + +### Minor Changes + +- [#5324](https://github.com/primer/react/pull/5324) [`bd5f0d4`](https://github.com/primer/react/commit/bd5f0d4cd78d2fb557f2a7bb3ba7157d5ca5c3b9) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert SelectPanel to CSS modules behind feature flag + +- [#5336](https://github.com/primer/react/pull/5336) [`59a6654`](https://github.com/primer/react/commit/59a6654b34430d4469e94c5b56881558e599bccd) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert SegmentedControl to use CSS modules behind feature flag + +- [#5339](https://github.com/primer/react/pull/5339) [`dc2f083`](https://github.com/primer/react/commit/dc2f083eb3c07a4bcb9adcf9d2e8395d4daef1a9) Thanks [@jonrohan](https://github.com/jonrohan)! - Remove the CSS modules feature flag from ButtonGroup + +- [#5332](https://github.com/primer/react/pull/5332) [`3fcfba8`](https://github.com/primer/react/commit/3fcfba8a2c85a4d4f58eb66f7567b96adfcb2f20) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert PageHeader to CSS modules behind feature flag + +- [#5326](https://github.com/primer/react/pull/5326) [`1d79cc5`](https://github.com/primer/react/commit/1d79cc5c2ee19b0d957e68d783ac644728fae6ba) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert KeybindingHint to CSS modules behind feature flag + +- [#5361](https://github.com/primer/react/pull/5361) [`2fbdd3b`](https://github.com/primer/react/commit/2fbdd3b9c6a4acb3b3356191c79a7d38fdd4163f) Thanks [@JelloBagel](https://github.com/JelloBagel)! - Convert BaseStyles to CSS modules behind team feature flag + +- [#5299](https://github.com/primer/react/pull/5299) [`8673664`](https://github.com/primer/react/commit/867366474d67360d74b771ffbf5b58789535dad2) Thanks [@jonrohan](https://github.com/jonrohan)! - Update `AvatarStack` component to use CSS modules behind the feature flag primer_react_css_modules_team + +- [#5376](https://github.com/primer/react/pull/5376) [`167c8d4`](https://github.com/primer/react/commit/167c8d493fdf75227b4a8987323ca9a555d3799a) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - fix(useFormControlForwardedProps): do not pass through validationStatus + +- [#5337](https://github.com/primer/react/pull/5337) [`7d9bb0c`](https://github.com/primer/react/commit/7d9bb0cad33fc4bcb1121f3437466924190952de) Thanks [@jonrohan](https://github.com/jonrohan)! - Remove the CSS modules feature flag from Checkbox + +- [#5282](https://github.com/primer/react/pull/5282) [`d6fe52e`](https://github.com/primer/react/commit/d6fe52e69edb123ee67321c818d94bf00082fae9) Thanks [@jonrohan](https://github.com/jonrohan)! - Remove the CSS modules feature flag from Banner + +- [#5367](https://github.com/primer/react/pull/5367) [`844e41f`](https://github.com/primer/react/commit/844e41f440d933b9a55d245bef6ff4ff3b7de325) Thanks [@langermank](https://github.com/langermank)! - Convert ActionList.Heading to CSS Modules + +- [#5302](https://github.com/primer/react/pull/5302) [`82bf850`](https://github.com/primer/react/commit/82bf85030b8f728b8a7845b0a523cff1b0704e05) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Convert `Pagination` component to use CSS modules + +- [#5271](https://github.com/primer/react/pull/5271) [`05db651`](https://github.com/primer/react/commit/05db651698af5a713cf0a5624016a2f86ab13a90) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Update `Token`, `IssueLabelToken`, `AvatarToken` components to use CSS Modules + +- [#5342](https://github.com/primer/react/pull/5342) [`39df71e`](https://github.com/primer/react/commit/39df71e0c8724de6d26dcb35b8eb1bc85b36281e) Thanks [@joshblack](https://github.com/joshblack)! - Update FormControl sub-components to use new styled components format for migration + +- [#5338](https://github.com/primer/react/pull/5338) [`4c7056b`](https://github.com/primer/react/commit/4c7056bd979b605691d07fcb35cd2d8bd1780964) Thanks [@jonrohan](https://github.com/jonrohan)! - Remove the CSS modules feature flag from Checkbox + +- [#5222](https://github.com/primer/react/pull/5222) [`b5ff840`](https://github.com/primer/react/commit/b5ff84017842987388baae8e7950b8faf49bcfd4) Thanks [@jonrohan](https://github.com/jonrohan)! - feat(ButtonBase): Remove css modules feature flag from ButtonBase + +- [#5375](https://github.com/primer/react/pull/5375) [`ba0a6c0`](https://github.com/primer/react/commit/ba0a6c0446882bf2087f7c7e42576aa4a0a2cbab) Thanks [@langermank](https://github.com/langermank)! - Convert ActionList (wrapper) and ActionList.Divider to CSS Modules + +### Patch Changes + +- [#5343](https://github.com/primer/react/pull/5343) [`70005b8`](https://github.com/primer/react/commit/70005b8043ed8845ccc8d675f9bf4735a5da94c8) Thanks [@jonrohan](https://github.com/jonrohan)! - BugFix: Fix issue in ButtonGroup Overlay screenshots by updating the selector to use `:is(button, a)` and `:first-of-type` and `:last-of-type` pseudo-classes. + +- [#5402](https://github.com/primer/react/pull/5402) [`6978865`](https://github.com/primer/react/commit/6978865ab17cb31412a84180485fa3dab1da168d) Thanks [@francinelucca](https://github.com/francinelucca)! - fix(PageHeader): use display block insteaf of flex when FF off + +- [#5383](https://github.com/primer/react/pull/5383) [`efc5c47`](https://github.com/primer/react/commit/efc5c47a8eda691ded260b2cbc1247683c36fba1) Thanks [@jonrohan](https://github.com/jonrohan)! - Move VisuallyHidden component css module feature flag to ga + +- [#5394](https://github.com/primer/react/pull/5394) [`1a51288`](https://github.com/primer/react/commit/1a51288ee2d759a16c69f98823d227a9db9fe5d9) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Dialog component css module feature flag to staff + +- [#5397](https://github.com/primer/react/pull/5397) [`3dd1e5e`](https://github.com/primer/react/commit/3dd1e5e14c1721ee1332c48a1f8e1ec1802c7098) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Textarea component css module feature flag to staff + +- [#5358](https://github.com/primer/react/pull/5358) [`b08f770`](https://github.com/primer/react/commit/b08f7705eb56e5190279c45d8da45d99d353c2f1) Thanks [@langermank](https://github.com/langermank)! - ActionList UI bug fixes + +- [#5363](https://github.com/primer/react/pull/5363) [`3e0fc7c`](https://github.com/primer/react/commit/3e0fc7c883e80ce12652883b0d7e2fc728abba55) Thanks [@joshblack](https://github.com/joshblack)! - Update line-height value for Table to be a valid calc() expression + +- [#5377](https://github.com/primer/react/pull/5377) [`6bf3e9e`](https://github.com/primer/react/commit/6bf3e9efbc14edbdfc844b6edf9c6299d5b29895) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Radio component css module feature flag to ga + +- [#5345](https://github.com/primer/react/pull/5345) [`e231b5f`](https://github.com/primer/react/commit/e231b5f1f70d789fa65f28e768f8675ba2d8cad5) Thanks [@francinelucca](https://github.com/francinelucca)! - docs: fix \*.docs.json story ids + +- [#5379](https://github.com/primer/react/pull/5379) [`2ced9a3`](https://github.com/primer/react/commit/2ced9a363d5998992719a43c5c79b9a2f52243bc) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Details component css module feature flag to ga + +- [#5385](https://github.com/primer/react/pull/5385) [`2afdd5d`](https://github.com/primer/react/commit/2afdd5dc69d98e5e1ffe1504ad144cb755f70bde) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Spinner component css module feature flag to ga + +- [#5391](https://github.com/primer/react/pull/5391) [`f0a530b`](https://github.com/primer/react/commit/f0a530b31b45840c3690ae80a2390e9b628d8e53) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Popover component css module feature flag to staff + +- [#5396](https://github.com/primer/react/pull/5396) [`64bb31b`](https://github.com/primer/react/commit/64bb31bf9067a351619d245e3b7bab7a8abfef1a) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Textarea component css module feature flag to staff + +- [#5389](https://github.com/primer/react/pull/5389) [`2129f9d`](https://github.com/primer/react/commit/2129f9db86f936f7e863ead00a5373663fb7ad44) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Timeline component css module feature flag to staff + +- [#5395](https://github.com/primer/react/pull/5395) [`a90da75`](https://github.com/primer/react/commit/a90da75c552677f62cb6d2e4629b76fcd9d5d59e) Thanks [@jonrohan](https://github.com/jonrohan)! - Move DialogV1 component css module feature flag to staff + +- [#5390](https://github.com/primer/react/pull/5390) [`20957b4`](https://github.com/primer/react/commit/20957b48bce649bfa8fa0f403fe4a3ecb58ad4dc) Thanks [@jonrohan](https://github.com/jonrohan)! - Move ProgressBar component css module feature flag to staff + +- [#5392](https://github.com/primer/react/pull/5392) [`184e292`](https://github.com/primer/react/commit/184e2920d8377a5b60be0664370a74961e767827) Thanks [@jonrohan](https://github.com/jonrohan)! - Move CheckboxOrRadioGroup component css module feature flag to staff + +- [#5393](https://github.com/primer/react/pull/5393) [`eec92da`](https://github.com/primer/react/commit/eec92dac3c77cdbf36b0f239dd8a5cb4c32b1901) Thanks [@jonrohan](https://github.com/jonrohan)! - Move UnstyledTextInput component css module feature flag to staff + +## 37.6.0 + +### Minor Changes + +- [#5325](https://github.com/primer/react/pull/5325) [`cdc4da1`](https://github.com/primer/react/commit/cdc4da128895f4f63a526748fd4df63c9f27d055) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert SelectPanel2 to CSS modules + +- [#5252](https://github.com/primer/react/pull/5252) [`bb0cd90`](https://github.com/primer/react/commit/bb0cd90cab27012ad8bcb33a23f67951d6e213b4) Thanks [@iansan5653](https://github.com/iansan5653)! - Adds `keybindingHint` prop to `TooltipV2` and `IconButton`, updates `onEmphasis` design variant for `KeybindingHint`, and adds `size` prop with `small` option to `KeybindingHint`. + +- [#5294](https://github.com/primer/react/pull/5294) [`912a0d7`](https://github.com/primer/react/commit/912a0d7102cb65d2b9c31a68a244795586d1ee3b) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Update `Textarea` component to use CSS module + +- [#5227](https://github.com/primer/react/pull/5227) [`1cfbf63`](https://github.com/primer/react/commit/1cfbf633c6ccc01595a19b2e1d8714d59e56a007) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert TextInput to CSS module behind feature flag + +- [#5150](https://github.com/primer/react/pull/5150) [`e89edbc`](https://github.com/primer/react/commit/e89edbc6c8892e324eeb1af381a70f2ac0e75a3c) Thanks [@jonrohan](https://github.com/jonrohan)! - Convert Breadcrumbs to css module behind feature flag + +- [#5298](https://github.com/primer/react/pull/5298) [`3935811`](https://github.com/primer/react/commit/393581160180ccb87da126e441439748909f138d) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert Dialog v2 to CSS Modules behind feature flag + +- [#5267](https://github.com/primer/react/pull/5267) [`ffc8f91`](https://github.com/primer/react/commit/ffc8f91e9c96033abad523cb4440a144ace30db9) Thanks [@ktravers](https://github.com/ktravers)! - Update `TreeView` component to use CSS Modules + +- [#5320](https://github.com/primer/react/pull/5320) [`e9e4d1c`](https://github.com/primer/react/commit/e9e4d1c2781f6d45a3a001f89b352abb1a265c26) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Add forward ref to Popover + +- [#5306](https://github.com/primer/react/pull/5306) [`84c3e62`](https://github.com/primer/react/commit/84c3e62b317e5cd3d65ef31c11ccc3071f373b35) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Convert PageLayout to CSS modules behind feature flags + +- [#5319](https://github.com/primer/react/pull/5319) [`37c4e97`](https://github.com/primer/react/commit/37c4e9731af622be2b19fed82a1c9235517b918e) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Do not pass through hoverColor prop into DOM element + +- [#5257](https://github.com/primer/react/pull/5257) [`4aa40c9`](https://github.com/primer/react/commit/4aa40c9acd90f432c505abba6ca9213dbd971f5c) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert TextInput to use data attributes + +- [#5329](https://github.com/primer/react/pull/5329) [`e7547e8`](https://github.com/primer/react/commit/e7547e8304fa2a6ea06d0f12a9a3ecd8cbdc429b) Thanks [@francinelucca](https://github.com/francinelucca)! - Update `Timeline` component to use CSS modules behind the feature flag primer_react_css_modules_team + +- [#5304](https://github.com/primer/react/pull/5304) [`a3fc488`](https://github.com/primer/react/commit/a3fc4881b8e3916a054900fa2a2b252056350bc9) Thanks [@TylerJDev](https://github.com/TylerJDev)! - Convert ProgressBar to CSS modules behind feature flag + +- [#5276](https://github.com/primer/react/pull/5276) [`d91dc54`](https://github.com/primer/react/commit/d91dc541ece37c4a9681ded10b220f511aa34b2f) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Migrate TextInputAction & TextInputInnerVisualSlot to CSS Modules behind feature flag + +- [#5300](https://github.com/primer/react/pull/5300) [`65802fc`](https://github.com/primer/react/commit/65802fcbe2e882a53fef85a4b0efb6c326012ad6) Thanks [@francinelucca](https://github.com/francinelucca)! - Update `Popover` component to use CSS modules behind the feature flag primer_react_css_modules_team + +### Patch Changes + +- [#5285](https://github.com/primer/react/pull/5285) [`057d868`](https://github.com/primer/react/commit/057d868d657e88aeba6eea930bd4fdd50027f62c) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Select component from team to staff flag + +- [#5279](https://github.com/primer/react/pull/5279) [`aac10fa`](https://github.com/primer/react/commit/aac10fa1c134444791a01fe7c71d508f94ab5ca5) Thanks [@jonrohan](https://github.com/jonrohan)! - Move CounterLabel CSS module feature flag from staff to ga + +- [#5286](https://github.com/primer/react/pull/5286) [`d4cb322`](https://github.com/primer/react/commit/d4cb322ef030bb4bbf379a4a962fc39659779297) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Spinner component from team to staff flag + +- [#5288](https://github.com/primer/react/pull/5288) [`9d004d0`](https://github.com/primer/react/commit/9d004d037bbd740d30424e919383ba32a5f04eda) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Radio component from team to staff flag + +- [#5291](https://github.com/primer/react/pull/5291) [`8fd0035`](https://github.com/primer/react/commit/8fd003505d91a92c1ea9dc73c4b4efd926c2b6c0) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Pagehead component from team to staff flag + +- [#5190](https://github.com/primer/react/pull/5190) [`32c4fe1`](https://github.com/primer/react/commit/32c4fe1441e2f0d4f71ba5c6c75fe0c654908063) Thanks [@mperrotti](https://github.com/mperrotti)! - Changes `` wrapper of `FormControl` to put padding directly on the `label` so the entire row is clickable + +- [#5290](https://github.com/primer/react/pull/5290) [`7c94916`](https://github.com/primer/react/commit/7c9491628a2905c806a4d2758152f93331755ffc) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Details component from team to staff flag + +- [#5284](https://github.com/primer/react/pull/5284) [`8853f5f`](https://github.com/primer/react/commit/8853f5f9daa6e4f4c284d432e7ce6747709afc27) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Header component from team to staff flag + +- [#5275](https://github.com/primer/react/pull/5275) [`d1b7bce`](https://github.com/primer/react/commit/d1b7bceb9ca9211a1d12dbf83c973ddbe7cde973) Thanks [@jonrohan](https://github.com/jonrohan)! - Convert CheckBoxOrRadioGroup to CSS modules behind feature flag + +- [#5287](https://github.com/primer/react/pull/5287) [`41ae5aa`](https://github.com/primer/react/commit/41ae5aa7b38707072310354d89721b677bfa4d23) Thanks [@jonrohan](https://github.com/jonrohan)! - Move BranchName component from team to staff flag + +- [#5289](https://github.com/primer/react/pull/5289) [`cc876d9`](https://github.com/primer/react/commit/cc876d9ecbf7f4e2d1a7af94605c6be2d7b6fe45) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Skeleton component from team to staff flag + +- [#5281](https://github.com/primer/react/pull/5281) [`b8e138e`](https://github.com/primer/react/commit/b8e138e76721003240cf813257e717d607cbb467) Thanks [@jonrohan](https://github.com/jonrohan)! - chore(ButtonGroup): Move ButtonGroup CSS module feature flag from staff to ga + +- [#5333](https://github.com/primer/react/pull/5333) [`f0603fd`](https://github.com/primer/react/commit/f0603fd763327e47b862fa94f56a074eede6298b) Thanks [@mperrotti](https://github.com/mperrotti)! - - Makes {Checkbox|Radio}Group `` bold and default font size + + - Makes Checkbox and Radio `` default font weight + +- [#5209](https://github.com/primer/react/pull/5209) [`556afbd`](https://github.com/primer/react/commit/556afbda728ef34a278f786f11cce6c459817178) Thanks [@dusave](https://github.com/dusave)! - Check certain refs for nullishness to address HMR issues in dotcom + +## 37.5.0 + +### Minor Changes + +- [#5253](https://github.com/primer/react/pull/5253) [`729c0fa`](https://github.com/primer/react/commit/729c0fac9a8d84f20bb77c046063837b38e90d37) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Deprecate width, minWidth and maxWidth props from TextInput + +- [#5169](https://github.com/primer/react/pull/5169) [`a2efba0`](https://github.com/primer/react/commit/a2efba0079304e25dd700523dbfa35fab56249ad) Thanks [@francinelucca](https://github.com/francinelucca)! - fix(ActionList): do not truncate description by default + +- [#5254](https://github.com/primer/react/pull/5254) [`ac6ddcd`](https://github.com/primer/react/commit/ac6ddcd4b15526dd6f5ad6072a4daa57087eb1e7) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Convert UnstyledTextInput to use CSS Modules behing feature flag + +- [#5246](https://github.com/primer/react/pull/5246) [`c4ecb73`](https://github.com/primer/react/commit/c4ecb7312c1f595361a6b5a247c73af894c0be54) Thanks [@keithamus](https://github.com/keithamus)! - Migrate DialogV1 to CSS Modules + +### Patch Changes + +- [#5277](https://github.com/primer/react/pull/5277) [`a9088e6`](https://github.com/primer/react/commit/a9088e60b6f60ee13e309b7c263def781caba97e) Thanks [@langermank](https://github.com/langermank)! - Fix `TreeViewItem` folder icon color in legacy fallback theme + update VRT + +- [#4745](https://github.com/primer/react/pull/4745) [`3f508c7`](https://github.com/primer/react/commit/3f508c7778839a8bfd659adcb21a1eda558e0f0a) Thanks [@cihad](https://github.com/cihad)! - UnderlineNav: Display loading counters only for items with the "counter" prop. + +- [#5283](https://github.com/primer/react/pull/5283) [`d6ea909`](https://github.com/primer/react/commit/d6ea909eb3ef8c2ae178ee590865b80108fa3390) Thanks [@jonrohan](https://github.com/jonrohan)! - Move VisuallyHidden component from team to staff flag + +- [#5292](https://github.com/primer/react/pull/5292) [`d3959f3`](https://github.com/primer/react/commit/d3959f3685bcf8aff908efe69cbf80c92c85483c) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Stack component from team to staff flag + +- [#5280](https://github.com/primer/react/pull/5280) [`973130e`](https://github.com/primer/react/commit/973130e9119e1f592345d3e67c1b61f37957191b) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Checkbox CSS module feature flag from staff to ga + +## 37.4.0 + +### Minor Changes + +- [#5221](https://github.com/primer/react/pull/5221) [`11c455c`](https://github.com/primer/react/commit/11c455c1592e2d5919fed2cfbe09b2c1917124ed) Thanks [@jonrohan](https://github.com/jonrohan)! - Remove the CSS modules feature flag from Avatar + +- [#5243](https://github.com/primer/react/pull/5243) [`bc9c696`](https://github.com/primer/react/commit/bc9c696320d83c9d871ac49978e213a9c5cb39d2) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Fix small TextInput to be the use the correct font size + +- [#5228](https://github.com/primer/react/pull/5228) [`2da7336`](https://github.com/primer/react/commit/2da7336c6568fd7337b654e54503549715b57e44) Thanks [@jonrohan](https://github.com/jonrohan)! - feat(Tooltip): Convert Tooltip to CSS modules behind team flag + +- [#5122](https://github.com/primer/react/pull/5122) [`e021a8f`](https://github.com/primer/react/commit/e021a8f6f1a85e5f70b069674e02c40f56f674d7) Thanks [@TylerJDev](https://github.com/TylerJDev)! - TreeView: Adds prop `truncate`, keeps default behavior of truncation but allows for text to wrap when turned off. + +- [#5210](https://github.com/primer/react/pull/5210) [`b1950f5`](https://github.com/primer/react/commit/b1950f572954f504d91c49cc16220be91ecfc38e) Thanks [@francinelucca](https://github.com/francinelucca)! - feat(AnchoredOverlay): allow overlay to reflow + +### Patch Changes + +- [#5236](https://github.com/primer/react/pull/5236) [`2e5c601`](https://github.com/primer/react/commit/2e5c601b8793c2f15604258b4f66371ea791cac7) Thanks [@jonrohan](https://github.com/jonrohan)! - Update Spinner component to correctly use the `size` prop when both `sx` and `size` are provided + +- [#5200](https://github.com/primer/react/pull/5200) [`b28e6b2`](https://github.com/primer/react/commit/b28e6b2ca37cd7138dd7ff5c52594dd2c1a584f8) Thanks [@francinelucca](https://github.com/francinelucca)! - fix(ButtonGroup): add toolbar interactions for role toolbar + +## 37.3.0 + +### Minor Changes + +- [#5204](https://github.com/primer/react/pull/5204) [`209c9b0`](https://github.com/primer/react/commit/209c9b0f92a7e1006db8e5752ace247168268340) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Migrate 'InlineMessage' component to use CSS modules + +### Patch Changes + +- [#5229](https://github.com/primer/react/pull/5229) [`33c5086`](https://github.com/primer/react/commit/33c5086f24cb42a1b2bf7447021520467cb54af6) Thanks [@joshblack](https://github.com/joshblack)! - Update Blankslate description text to always be centered + +- [#4693](https://github.com/primer/react/pull/4693) [`570d4b3`](https://github.com/primer/react/commit/570d4b3f3e14f58c134a1716cec6b8bbe79e4f48) Thanks [@renbaoshuo](https://github.com/renbaoshuo)! - fix: hover background in ActionList.Item + +- [#5196](https://github.com/primer/react/pull/5196) [`49cbff2`](https://github.com/primer/react/commit/49cbff223459b3805dc6160c771529b7752a9042) Thanks [@francinelucca](https://github.com/francinelucca)! - fix(Treevieew):do not add aria-describedby attribute when empty leading/trailing visual + +- [#5144](https://github.com/primer/react/pull/5144) [`271d063`](https://github.com/primer/react/commit/271d063813f3e623bcced3bf949e5c31ba0e3fd9) Thanks [@jonrohan](https://github.com/jonrohan)! - Move ButtonGroup css module feature flag to staff + +## 37.2.0 + +### Minor Changes + +- [#5168](https://github.com/primer/react/pull/5168) [`b9749d4`](https://github.com/primer/react/commit/b9749d4efccf17b4aa669231a57df55333497ca2) Thanks [@TylerJDev](https://github.com/TylerJDev)! - TreeView: Adds indication of no nodes in a tree item, allows for `aria-expanded even if the item is empty. + +- [#5202](https://github.com/primer/react/pull/5202) [`293c574`](https://github.com/primer/react/commit/293c574a25d49bb52a2f5c17e4c54b1b1b598ddc) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Update `SubNav` component to use CSS modules behind the feature flag primer_react_css_modules_team + +### Patch Changes + +- [#5225](https://github.com/primer/react/pull/5225) [`e732591`](https://github.com/primer/react/commit/e732591e939e5a86dc5ce2ce2da25388177b6a54) Thanks [@jonrohan](https://github.com/jonrohan)! - chore(Banner): Move Banner CSS module flag from staff to ga + +- [#5177](https://github.com/primer/react/pull/5177) [`26b54d8`](https://github.com/primer/react/commit/26b54d8a58e83e50127b5c04ac26ec953a89c108) Thanks [@lukasoppermann](https://github.com/lukasoppermann)! - Allow primitives dep to be if version 9 OR 10 + +## 37.1.0 + +### Minor Changes + +- [#5156](https://github.com/primer/react/pull/5156) [`8e58e4d`](https://github.com/primer/react/commit/8e58e4d1fc8a6ec9e9329b152f3d43d15d6dd5d5) Thanks [@francinelucca](https://github.com/francinelucca)! - feat(LabelGroup): render as list by default + +- [#5167](https://github.com/primer/react/pull/5167) [`07b75e7`](https://github.com/primer/react/commit/07b75e78f6842713fff12dad1e7a0502596e30bf) Thanks [@jonrohan](https://github.com/jonrohan)! - Convert Details to css module behind feature flag + +- [#5195](https://github.com/primer/react/pull/5195) [`d349cfc`](https://github.com/primer/react/commit/d349cfcb3fca9982040a1389c0fabcaafca5b85e) Thanks [@jonrohan](https://github.com/jonrohan)! - \* Convert SkeletonAvatar to CSS modules behind the feature flag + + - Convert SkeletonBox to CSS modules behind the feature flag + - Convert SkeletonText to CSS modules behind the feature flag + +- [#5187](https://github.com/primer/react/pull/5187) [`2ab7b9e`](https://github.com/primer/react/commit/2ab7b9e649cc2f6a1c290bdbfcf48d3e635d998f) Thanks [@jonrohan](https://github.com/jonrohan)! - Convert Radio to css modules behind feature flag + +- [#5129](https://github.com/primer/react/pull/5129) [`e27decd`](https://github.com/primer/react/commit/e27decdae5fcff3b25c9c58194709abbf4de85f8) Thanks [@TylerJDev](https://github.com/TylerJDev)! - Overlay: Adds `min-width` to container to improve responsiveness + +- [#5040](https://github.com/primer/react/pull/5040) [`8d9a357`](https://github.com/primer/react/commit/8d9a357db49dbf1f00e19c7aa489bd963a0d3dd5) Thanks [@joshblack](https://github.com/joshblack)! - Update BranchName to use CSS Modules behind feature flag + +- [#5188](https://github.com/primer/react/pull/5188) [`573ae51`](https://github.com/primer/react/commit/573ae5168879998946ba1aa3e21af8ddf54351af) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Migrated `Spinner` component to use support CSS modules + +- [#5193](https://github.com/primer/react/pull/5193) [`ed3d8c1`](https://github.com/primer/react/commit/ed3d8c1d0825502293b7a772a26e2e3865c9c162) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Migrated `VisuallyHidden` to CSS Modules + +- [#4878](https://github.com/primer/react/pull/4878) [`73312d8`](https://github.com/primer/react/commit/73312d8ceb98ae84c0291f05b0b30f7f06975d3c) Thanks [@TylerJDev](https://github.com/TylerJDev)! - Move `aria-*` attributes to `ProgressBar.Item` and marks `ProgressBar.Item` as `role="progressbar". + +- [#5194](https://github.com/primer/react/pull/5194) [`719def7`](https://github.com/primer/react/commit/719def7ea83f5212dc6ba888fe22d29b6620ce37) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Migrate `Select` component to css modules + +- [#5192](https://github.com/primer/react/pull/5192) [`cbeed21`](https://github.com/primer/react/commit/cbeed2111c02c6e4457228acdb7d83f11e866197) Thanks [@hussam-i-am](https://github.com/hussam-i-am)! - Update `Header` component to use CSS modules behind the feature flag primer_react_css_modules_team + +- [#5015](https://github.com/primer/react/pull/5015) [`1473c26`](https://github.com/primer/react/commit/1473c26abb37b2de2af5f4ff848107971ee557c7) Thanks [@francinelucca](https://github.com/francinelucca)! - feat(Details): Add summary subcomponent + +- [#5197](https://github.com/primer/react/pull/5197) [`ad84d4f`](https://github.com/primer/react/commit/ad84d4f494cb424b307ed3fa7eb77aec21c2ad40) Thanks [@randall-krauskopf](https://github.com/randall-krauskopf)! - Convert `Pagehead` to CSS Modules + +- [#5134](https://github.com/primer/react/pull/5134) [`6713e72`](https://github.com/primer/react/commit/6713e72124f4b9e594b31d5abc7dda258940c9cc) Thanks [@TylerJDev](https://github.com/TylerJDev)! - AvatarStack: Adds keyboard support to `AvatarStack` + +- [#5060](https://github.com/primer/react/pull/5060) [`33396ea`](https://github.com/primer/react/commit/33396ead24bb25dc042004cd82bbdbe235403c61) Thanks [@jonrohan](https://github.com/jonrohan)! - Remove CSS modules feature flag from Label component + +- [#5185](https://github.com/primer/react/pull/5185) [`461ae57`](https://github.com/primer/react/commit/461ae57b4efd1053449643fe4dbd8c18ff86ddd0) Thanks [@broccolinisoup](https://github.com/broccolinisoup)! - SelectPanel: Allow using SelectPanel in FormControl + +- [#5148](https://github.com/primer/react/pull/5148) [`002be35`](https://github.com/primer/react/commit/002be358676c2a882893dfbe518e1eafbd38db55) Thanks [@jonrohan](https://github.com/jonrohan)! - Remove the CSS modules feature flag from the Link component + +- [#5106](https://github.com/primer/react/pull/5106) [`851c857`](https://github.com/primer/react/commit/851c857f1a69541b6b8b77dac714f2de51419936) Thanks [@mperrotti](https://github.com/mperrotti)! - Adds NavList.GroupHeading component that can be used instead of the ActionList.Group 'title' prop if you need to render something besides a string + +### Patch Changes + +- [#5213](https://github.com/primer/react/pull/5213) [`a5d7fe3`](https://github.com/primer/react/commit/a5d7fe34a20c9eeffe879e10b4f0165b8f1a6da8) Thanks [@langermank](https://github.com/langermank)! - Bug fix: `ButtonBase` sx base styles leaking into CSS modules feat flag + +- [#5214](https://github.com/primer/react/pull/5214) [`916ed95`](https://github.com/primer/react/commit/916ed952d38502b72640dcb07dac69005cb176e3) Thanks [@jonrohan](https://github.com/jonrohan)! - Convert Stack to CSS modules behind feature flag + +- [#5146](https://github.com/primer/react/pull/5146) [`ad554da`](https://github.com/primer/react/commit/ad554da1ed3907e5764f68190c0a3dd1cf7529b7) Thanks [@jonrohan](https://github.com/jonrohan)! - Move Checkbox css module feature flag to staff + +- [#5171](https://github.com/primer/react/pull/5171) [`8138dee`](https://github.com/primer/react/commit/8138dee8d8235475ec8135591c52abf3df90d50b) Thanks [@alondahari](https://github.com/alondahari)! - catch TooltipV2 errors in old browsers as a temp fix for unnecessary Sentry reports + +- [#5140](https://github.com/primer/react/pull/5140) [`73796d3`](https://github.com/primer/react/commit/73796d3b249ade8b69adb5aa720432d77a433103) Thanks [@francinelucca](https://github.com/francinelucca)! - fix(SegmentedControl): set global focus styles + +- [#5201](https://github.com/primer/react/pull/5201) [`29a9770`](https://github.com/primer/react/commit/29a9770ead42b01026e8277f6c30d18d2ccaaf84) Thanks [@joshblack](https://github.com/joshblack)! - Update the foreground color for FormControl.Caption to use the control tokens when disabled + +- [#5182](https://github.com/primer/react/pull/5182) [`31d9a05`](https://github.com/primer/react/commit/31d9a0587eb76f8d786404881b1727213c55fdbc) Thanks [@francinelucca](https://github.com/francinelucca)! - fix(DataTable): export datatable utility types + +- [#5027](https://github.com/primer/react/pull/5027) [`9a30c63`](https://github.com/primer/react/commit/9a30c63dc8e0c2923952f7ffea831446d0ed6122) Thanks [@francinelucca](https://github.com/francinelucca)! - fix(FormControl): allow required check boxes in CheckboxGroup + +- [#5147](https://github.com/primer/react/pull/5147) [`e421f32`](https://github.com/primer/react/commit/e421f32002ad07582d0221862f7afb6e8afbbc51) Thanks [@jonrohan](https://github.com/jonrohan)! - Move CounterLabel css modules feature flag to staff + ## 37.0.1 ### Patch Changes @@ -2368,7 +2653,7 @@ ```jsx // Hide pane on narrow viewports - ... + ... ``` - [#2199](https://github.com/primer/react/pull/2199) [`fb385b63`](https://github.com/primer/react/commit/fb385b63f22c1eb76193e42e92ea2a056e61fdbb) Thanks [@colebemis](https://github.com/colebemis)! - \* Updated the `position` prop in `PageLayout.Pane` to use the new responsive prop API introduced in https://github.com/primer/react/pull/2174. @@ -2529,7 +2814,7 @@ - [#2112](https://github.com/primer/react/pull/2112) [`74e1d138`](https://github.com/primer/react/commit/74e1d1386bc6bb6326c3c2b64b5e31146f9cc56b) Thanks [@colebemis](https://github.com/colebemis)! - [NavList](https://primer.style/NavList) is ready to use. You can now import it from the main bundle: ```js - import {NavList} from '@primer/react' + import { NavList } from "@primer/react"; ``` ### Patch Changes @@ -2670,11 +2955,11 @@ ```jsx ``` @@ -2702,21 +2987,21 @@ showItemDividers items={[ { - key: '0', + key: "0", leadingVisual: LinkIcon, - text: 'github/primer', + text: "github/primer", }, { - key: '1', + key: "1", leadingVisual: () => , - text: 'mona', - description: 'Monalisa Octocat', - descriptionVariant: 'block', + text: "mona", + description: "Monalisa Octocat", + descriptionVariant: "block", }, { - key: '2', + key: "2", leadingVisual: GearIcon, - text: 'View Settings', + text: "View Settings", trailingVisual: ArrowRightIcon, }, ]} @@ -2739,7 +3024,9 @@ mona - Monalisa Octocat + + Monalisa Octocat + @@ -2761,14 +3048,14 @@ ```jsx ``` @@ -2800,7 +3087,7 @@ To continue to use the deprecated API for now, change the import path to `@primer/react/deprecated`: ```js - import {ActionList} from '@primer/react/deprecated' + import { ActionList } from "@primer/react/deprecated"; ``` You can use the [one-time codemod](https://github.com/primer/react-migrate#readme) to change your import statements automatically. @@ -2851,13 +3138,13 @@ anchorContent="Menu" onAction={fn} items={[ - {text: 'New file'}, - {text: 'Copy link'}, - {text: 'Edit file'}, + { text: "New file" }, + { text: "Copy link" }, + { text: "Edit file" }, ActionMenu.Divider, - {text: 'Delete file', variant: 'danger'}, + { text: "Delete file", variant: "danger" }, ]} - overlayProps={{width: 'small'}} + overlayProps={{ width: "small" }} /> ``` @@ -2886,7 +3173,7 @@ To continue to use the deprecated API for now, change the import path to `@primer/react/deprecated`: ```js - import {ActionMenu} from '@primer/react/deprecated' + import { ActionMenu } from "@primer/react/deprecated"; ``` You can use the [one-time codemod](https://github.com/primer/react-migrate#readme) to change your import statements automatically. @@ -2918,19 +3205,19 @@ ```js const fieldTypes = [ - {key: 0, text: 'Text'}, - {key: 1, text: 'Number'}, - {key: 3, text: 'Date'}, - {key: 4, text: 'Single select'}, - {key: 5, text: 'Iteration'}, - ] + { key: 0, text: "Text" }, + { key: 1, text: "Number" }, + { key: 3, text: "Date" }, + { key: 4, text: "Single select" }, + { key: 5, text: "Iteration" }, + ]; const Example = () => { - const [selectedType, setSelectedType] = React.useState() + const [selectedType, setSelectedType] = React.useState(); return ( ( + renderAnchor={({ children, ...anchorProps }) => ( {children} @@ -2939,10 +3226,10 @@ items={fieldTypes} selectedItem={selectedType} onChange={setSelectedType} - overlayProps={{width: 'medium'}} + overlayProps={{ width: "medium" }} /> - ) - } + ); + }; ``` @@ -2950,22 +3237,24 @@ ```jsx const fieldTypes = [ - {id: 0, text: 'Text'}, - {id: 1, text: 'Number'}, - {id: 3, text: 'Date'}, - {id: 4, text: 'Single select'}, - {id: 5, text: 'Iteration'}, - ] + { id: 0, text: "Text" }, + { id: 1, text: "Number" }, + { id: 3, text: "Date" }, + { id: 4, text: "Single select" }, + { id: 5, text: "Iteration" }, + ]; const Example = () => { - const [selectedType, setSelectedType] = React.useState() + const [selectedType, setSelectedType] = React.useState(); render( - {selectedType.name || 'Field type'} + + {selectedType.name || "Field type"} + - {fieldTypes.map(type => ( + {fieldTypes.map((type) => ( , - ) - } + ); + }; ``` @@ -2988,7 +3277,7 @@ To continue to use the deprecated API for now, change the import path to `@primer/react/deprecated`: ```js - import {DropdownMenu} from '@primer/react/deprecated' + import { DropdownMenu } from "@primer/react/deprecated"; ``` You can use the [one-time codemod](https://github.com/primer/react-migrate#readme) to change your import statements automatically. @@ -3019,17 +3308,21 @@ ```jsx - import {Label} from '@primer/react' + import { Label } from "@primer/react"; function Example() { return ( <> default - + danger > - ) + ); } ``` @@ -3037,7 +3330,7 @@ ```jsx - import {Label} from '@primer/react' + import { Label } from "@primer/react"; function Example() { return ( @@ -3047,7 +3340,7 @@ danger > - ) + ); } ``` @@ -3058,7 +3351,7 @@ To continue to use the deprecated API for now, change the import path to `@primer/react/deprecated`: ```js - import {Label} from '@primer/react/deprecated' + import { Label } from "@primer/react/deprecated"; ``` You can use the [one-time codemod](https://github.com/primer/react-migrate#readme) to change your import statements automatically. @@ -3081,7 +3374,12 @@ ```jsx - import {ButtonPrimary, ButtonInvisible, ButtonOutline, ButtonDanger} from '@primer/react' + import { + ButtonPrimary, + ButtonInvisible, + ButtonOutline, + ButtonDanger, + } from "@primer/react"; function Example() { return ( @@ -3091,7 +3389,7 @@ Outline Button Danger Button > - ) + ); } ``` @@ -3099,7 +3397,7 @@ ```jsx - import {Button} from '@primer/react' + import { Button } from "@primer/react"; function Example() { return ( @@ -3109,7 +3407,7 @@ Outline Button Danger Button > - ) + ); } ``` @@ -3216,34 +3514,50 @@ ```jsx - import {ChoiceFieldset} from '@primer/react' + import { ChoiceFieldset } from "@primer/react"; function Example() { return ( <> {/* Multi-select */} - Preferred Primer component interface + + Preferred Primer component interface + - Figma library + + Figma library + Primer CSS - Primer React components - Primer ViewComponents + + Primer React components + + + Primer ViewComponents + {/* Single select */} - Preferred Primer component interface + + Preferred Primer component interface + - Figma library + + Figma library + Primer CSS - Primer React components - Primer ViewComponents + + Primer React components + + + Primer ViewComponents + > - ) + ); } ``` @@ -3251,14 +3565,22 @@ ```jsx - import {CheckboxGroup, RadioGroup, FormControl, Checkbox, Radio} from '@primer/react' + import { + CheckboxGroup, + RadioGroup, + FormControl, + Checkbox, + Radio, + } from "@primer/react"; function Example() { return ( <> {/* Multi-select */} - Preferred Primer component interface + + Preferred Primer component interface + Figma @@ -3279,7 +3601,9 @@ {/* Single select */} - Preferred Primer component interface + + Preferred Primer component interface + Figma @@ -3298,7 +3622,7 @@ > - ) + ); } ``` @@ -3309,7 +3633,7 @@ To continue to use the deprecated API for now, change the import path to `@primer/react/deprecated`: ```js - import {ChoiceFieldset} from '@primer/react/deprecated' + import { ChoiceFieldset } from "@primer/react/deprecated"; ``` You can use the [one-time codemod](https://github.com/primer/react-migrate#readme) to change your import statements automatically. @@ -3341,7 +3665,7 @@ ```jsx - import {FormControl, Checkbox, TextInput} from '@primer/react' + import { FormControl, Checkbox, TextInput } from "@primer/react"; function Example() { return ( @@ -3361,7 +3685,7 @@ > - ) + ); } ``` @@ -3369,7 +3693,7 @@ ```jsx - import {FormGroup, TextInput} from '@primer/react' + import { FormGroup, TextInput } from "@primer/react"; function Example() { return ( @@ -3384,7 +3708,7 @@ > - ) + ); } ``` @@ -3394,7 +3718,7 @@ ```jsx - import {InputField, TextInput} from '@primer/react' + import { InputField, TextInput } from "@primer/react"; function Example() { return ( @@ -3402,7 +3726,7 @@ Example text - ) + ); } ``` @@ -3410,7 +3734,7 @@ ```jsx - import {FormControl, TextInput} from '@primer/react' + import { FormControl, TextInput } from "@primer/react"; function Example() { return ( @@ -3418,7 +3742,7 @@ Example text - ) + ); } ``` @@ -3429,7 +3753,11 @@ To continue to use the deprecated API for now, change the import path to `@primer/react/deprecated`: ```js - import {FormGroup, ChoiceInputField, InputField} from '@primer/react/deprecated' + import { + FormGroup, + ChoiceInputField, + InputField, + } from "@primer/react/deprecated"; ``` You can use the [one-time codemod](https://github.com/primer/react-migrate#readme) to change your import statements automatically. @@ -3500,23 +3828,25 @@ ```jsx const fieldTypes = [ - {leadingVisual: TypographyIcon, text: 'Text'}, - {leadingVisual: NumberIcon, text: 'Number'}, - ] + { leadingVisual: TypographyIcon, text: "Text" }, + { leadingVisual: NumberIcon, text: "Number" }, + ]; const Example = () => { - const [selectedItem, setSelectedItem] = React.useState() + const [selectedItem, setSelectedItem] = React.useState(); return ( {children}} + renderAnchor={({ children, ...anchorProps }) => ( + {children} + )} placeholder="Select a field type" items={fieldTypes} selectedItem={selectedItem} onChange={() => setSelectedIndex(index)} /> - ) - } + ); + }; ``` @@ -3524,29 +3854,36 @@ ```jsx const fieldTypes = [ - {icon: , name: 'Text'}, - {icon: , name: 'Number'}, - ] + { icon: , name: "Text" }, + { icon: , name: "Number" }, + ]; const Example = () => { - const [selectedItem, setSelectedItem] = React.useState() + const [selectedItem, setSelectedItem] = React.useState(); return ( - {selectedItem ? selectedItem.name : 'Select a field type'} + + {selectedItem ? selectedItem.name : "Select a field type"} + - {fieldTypes.map(field => ( - setSelectedItem(field)} key={field.name}> - {field.icon} + {fieldTypes.map((field) => ( + setSelectedItem(field)} + key={field.name} + > + + {field.icon} + {field.name} ))} - ) - } + ); + }; ``` @@ -3648,7 +3985,12 @@ ```jsx - + Item 1 ``` @@ -4692,8 +5034,8 @@ * [`beef075e`](https://github.com/primer/react/commit/beef075e0274396b77887adf0b912583fe564b3f) [#1094](https://github.com/primer/react/pull/1094) Thanks [@colebemis](https://github.com/colebemis)! - Components no longer have a default `theme` prop. To ensure components still render correctly, you'll need pass the Primer theme to a [styled-components](https://styled-components.com/) `` at the root of your application: ```jsx - import {ThemeProvider} from 'styled-components' - import {theme} from '@primer/react' + import { ThemeProvider } from "styled-components"; + import { theme } from "@primer/react"; function App(props) { return ( @@ -4702,7 +5044,7 @@ your app here - ) + ); } ``` diff --git a/packages/react/package.json b/packages/react/package.json index 2d3affe6d1e..c6263bc28ed 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@primer/react", - "version": "37.0.1", + "version": "37.7.1", "description": "An implementation of GitHub's Primer Design System using React", "main": "lib/index.js", "module": "lib-esm/index.js", @@ -78,14 +78,14 @@ "npm": ">=7" }, "dependencies": { - "@github/relative-time-element": "^4.4.2", + "@github/relative-time-element": "^4.4.3", "@github/tab-container-element": "^4.8.0", "@lit-labs/react": "1.2.1", "@oddbird/popover-polyfill": "^0.4.4", "@primer/behaviors": "^1.7.2", "@primer/live-region-element": "^0.7.1", "@primer/octicons-react": "^19.9.0", - "@primer/primitives": "^9.0.3", + "@primer/primitives": "9.x || 10.x", "@styled-system/css": "^5.1.5", "@styled-system/props": "^5.1.5", "@styled-system/theme-get": "^5.1.2", @@ -120,7 +120,7 @@ "@rollup/plugin-babel": "6.0.4", "@rollup/plugin-commonjs": "25.0.4", "@rollup/plugin-node-resolve": "15.1.0", - "@rollup/plugin-replace": "5.0.2", + "@rollup/plugin-replace": "6.0.1", "@rollup/plugin-terser": "0.4.4", "@rollup/plugin-typescript": "11.1.5", "@rollup/plugin-virtual": "3.0.2", @@ -137,7 +137,7 @@ "@storybook/theming": "^8.3.0", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.4.5", - "@testing-library/react": "^16.0.0", + "@testing-library/react": "^16.0.1", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.5.2", "@types/lodash.groupby": "4.6.9", @@ -150,7 +150,7 @@ "@types/react-test-renderer": "18.3.0", "@types/semver": "7.5.8", "@types/styled-components": "^5.1.26", - "@vitejs/plugin-react": "^4.3.1", + "@vitejs/plugin-react": "^4.3.3", "ajv": "8.16.0", "axe-core": "4.9.1", "babel-core": "7.0.0-bridge.0", @@ -198,10 +198,10 @@ "semver": "7.6.2", "storybook": "^8.3.0", "styled-components": "5.3.11", - "terser": "5.31.0", + "terser": "5.36.0", "ts-toolbelt": "9.6.0", "tsx": "4.7.0", - "typescript": "^5.6.3", + "typescript": "^5.7.2", "typescript-plugin-css-modules": "5.1.0", "unist-util-find": "3.0.0", "unist-util-find-before": "4.0.0", diff --git a/packages/react/script/components-json/build.ts b/packages/react/script/components-json/build.ts index c67ff1d4629..33c7a82f7bf 100644 --- a/packages/react/script/components-json/build.ts +++ b/packages/react/script/components-json/build.ts @@ -22,6 +22,7 @@ type Component = { | '@primer/react/experimental' | '@primer/react/drafts' stories: Array<{id: string; code?: string}> + source?: string } const ajv = new Ajv() @@ -77,8 +78,16 @@ const components = docsFiles.map(docsFilepath => { // if stories are not defined in *.docs.json, fill feature stories as default const stories = (docs.stories.length > 0 ? docs.stories : getStoryIds(docs, Object.keys(featureStorySourceCode))) // Filter out the default story - .filter(({id}) => id !== defaultStoryId) + .filter(({id}) => { + return id !== defaultStoryId + }) .map(({id}) => { + if (id.endsWith('--default')) { + return { + id, + code: defaultStoryCode, + } + } const storyName = getStoryName(id) const code = id.includes('-features--') ? featureStorySourceCode[storyName] : exampleStorySourceCode[storyName] @@ -96,14 +105,20 @@ const components = docsFiles.map(docsFilepath => { // Add default story to the beginning of the array if (defaultStoryCode) { - docs.stories.unshift({ - id: defaultStoryId, - code: defaultStoryCode, - }) + const hasDefaultStory = docs.stories.find(story => story.code === defaultStoryCode) + if (!hasDefaultStory) { + docs.stories.unshift({ + id: defaultStoryId, + code: defaultStoryCode, + }) + } } // TODO: Provide default type and description for sx and ref props - return docs + return { + source: `https://github.com/primer/react/tree/main/packages/react/${docsFilepath.substring(0, docsFilepath.lastIndexOf('/'))}`, + ...docs, + } }) const data = {schemaVersion: 2, components: keyBy(components, 'id')} diff --git a/packages/react/script/components-json/component.schema.json b/packages/react/script/components-json/component.schema.json index 4bc4f0037bc..7fe4969c043 100644 --- a/packages/react/script/components-json/component.schema.json +++ b/packages/react/script/components-json/component.schema.json @@ -77,6 +77,10 @@ "type": "string", "description": "The path to import the component from. i.e. '@primer/react/experimental'" }, + "source": { + "type": "string", + "description": "Link to the component source on GitHub" + }, "stories": { "type": "array", diff --git a/packages/react/src/ActionBar/ActionBar.docs.json b/packages/react/src/ActionBar/ActionBar.docs.json index 7b8f2659f96..878a96eafe2 100644 --- a/packages/react/src/ActionBar/ActionBar.docs.json +++ b/packages/react/src/ActionBar/ActionBar.docs.json @@ -3,29 +3,45 @@ "name": "ActionBar", "status": "alpha", "a11yReviewed": true, - "stories": [], + "stories": [ + { + "id": "experimental-components-actionbar--default" + } + ], "importPath": "@primer/react", "props": [ { - "name": "size", - "type": "'small' | 'medium' | 'large'", + "name": "aria-label", + "type": "string", "required": false, - "description": "Size of the action bar" + "description": "When provided, a label is added to the action bar", + "defaultValue": "" }, { - "name": "aria-label", + "name": "aria-labelledby", "type": "string", - "description": "When provided, a label is added to the action bar" + "required": false, + "description": "When provided, uses the element with that ID as the accessible name for the ActionBar", + "defaultValue": "" }, { "name": "children", - "type": "React.ReactElement", - "required": true + "type": "ReactNode", + "required": false, + "description": "Buttons in the action bar", + "defaultValue": "" + }, + { + "name": "size", + "type": "'small' | 'large' | 'medium'", + "required": false, + "description": "Size of the action bar", + "defaultValue": "" } ], "subcomponents": [ { - "name": "ActionBar.Icon", + "name": "ActionBar.IconButton", "props": [ { "name": "children", @@ -38,19 +54,19 @@ "name": "icon", "type": "Component", "defaultValue": "", - "description": "provide an octicon. It will be placed in the center of the button" + "description": "Provide an octicon. It will be placed in the center of the button" }, { "name": "aria-label", "type": "string", "defaultValue": "", "description": "Use an aria label to describe the functionality of the button. Please refer to [our guidance on alt text](https://primer.style/guides/accessibility/alternative-text-for-images) for tips on writing good alternative text." - }, - { - "name": "sx", - "type": "SystemStyleObject" } - ] + ], + "passthrough": { + "element": "IconButton", + "url": "/react/IconButton" + } }, { "name": "ActionBar.Divider", diff --git a/packages/react/src/ActionBar/ActionBar.stories.tsx b/packages/react/src/ActionBar/ActionBar.stories.tsx index f253a67d20e..1d1fb6e8d98 100644 --- a/packages/react/src/ActionBar/ActionBar.stories.tsx +++ b/packages/react/src/ActionBar/ActionBar.stories.tsx @@ -43,6 +43,14 @@ export const Default = () => ( ) +export const TextLabels = () => ( + + Edit + Duplicate + Export to CSV + +) + export const SmallActionBar = () => ( diff --git a/packages/react/src/ActionList/ActionList.dev.stories.tsx b/packages/react/src/ActionList/ActionList.dev.stories.tsx index 6d0fc3d1da7..35c37cf213f 100644 --- a/packages/react/src/ActionList/ActionList.dev.stories.tsx +++ b/packages/react/src/ActionList/ActionList.dev.stories.tsx @@ -116,3 +116,31 @@ export const GroupHeadingCustomClassname = () => ( ) + +export const ListCustomClassname = () => ( + + Copy link + Quote reply + +) + +export const DividerCustomClassname = () => ( + + Edit comment + + Quote reply + +) + +export const HeadingCustomClassname = () => ( + + + Filter by + + + Repositories + {}}>app/assets/modules + {}}>src/react/components + + +) diff --git a/packages/react/src/ActionList/ActionList.docs.json b/packages/react/src/ActionList/ActionList.docs.json index ba78705b808..59bbc7ae805 100644 --- a/packages/react/src/ActionList/ActionList.docs.json +++ b/packages/react/src/ActionList/ActionList.docs.json @@ -26,10 +26,10 @@ "description": "Whether multiple items or a single item can be selected." }, { - "name": "showDivider", + "name": "showDividers", "type": "boolean", - "defaultValue": "false", - "description": "Display a divider above each item in this list when it does not follow a header or divider." + "description": "Display a divider above each `Item` in this `List` when it does not follow a `Header` or `Divider`.", + "defaultValue": "" }, { "name": "role", @@ -51,7 +51,7 @@ "type": "React.ReactNode | ActionList.LeadingVisual | ActionList.Description | ActionList.TrailingVisual", "defaultValue": "", "required": true, - "description": "" + "description": "Primary content for an Item" }, { "name": "variant", @@ -100,6 +100,13 @@ "defaultValue": "", "description": "ARIA role describing the function of the item. `option` is a common value." }, + { + "name": "id", + "type": "string", + "required": false, + "description": "id to attach to the root element of the Item", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" @@ -123,6 +130,13 @@ "required": false, "description": "The level of the heading" }, + { + "name": "visuallyHidden", + "type": "boolean", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" @@ -154,6 +168,13 @@ "type": "React.ElementType", "defaultValue": "\"a\"" }, + { + "name": "inactiveText", + "type": "string", + "required": false, + "description": "Text describing why the item is inactive. This may be used when an item's usual functionality\nis unavailable due to a system error such as a database outage.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" @@ -252,6 +273,12 @@ "type": "string | undefined", "defaultValue": "", "description": "CSS string" + }, + { + "name": "truncate", + "type": "boolean", + "defaultValue": "false", + "description": "Whether the inline description should truncate the text on overflow." } ] }, @@ -271,6 +298,20 @@ "defaultValue": "'subtle'", "description": "`filled` style has a background color and top and bottom borders. Subtle style has no background or borders." }, + { + "name": "auxiliaryText", + "type": "string", + "required": false, + "description": "Secondary text which provides additional information about a `Group`.", + "defaultValue": "" + }, + { + "name": "visuallyHidden", + "type": "boolean", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "as", "type": "h1 | h2 | h3 | h4 | h5 | h6", @@ -330,6 +371,16 @@ "type": "SystemStyleObject" } ] + }, + { + "filePath": "/Users/mperrotti/work-dir/react/packages/react/src/ActionList/Divider.tsx", + "name": "ActionList.Divider", + "props": [ + { + "name": "sx", + "type": "SystemStyleObject" + } + ] } ] -} \ No newline at end of file +} diff --git a/packages/react/src/ActionList/ActionList.features.stories.tsx b/packages/react/src/ActionList/ActionList.features.stories.tsx index 59155c9c0f4..2cb63ac8fff 100644 --- a/packages/react/src/ActionList/ActionList.features.stories.tsx +++ b/packages/react/src/ActionList/ActionList.features.stories.tsx @@ -29,7 +29,6 @@ import { GitPullRequestIcon, IssueOpenedIcon, ProjectIcon, - LinkExternalIcon, } from '@primer/octicons-react' import {FeatureFlags} from '../FeatureFlags' @@ -51,7 +50,9 @@ export const SimpleList = () => ( export const WithVisualListHeading = () => ( - Filter by + + Filter by + Repositories {}}> @@ -281,6 +282,7 @@ export const InactiveSingleSelect = () => { const [selectedIndex, setSelectedIndex] = React.useState(1) return ( + {/* menuitem because state is inactive */} Inactive item @@ -409,6 +411,7 @@ export const InactiveMultiselect = () => { } return ( + {/* menuitem because state is inactive */} Inactive item @@ -478,43 +481,41 @@ export const LoadingItem = () => { } export const Links = () => ( - <> + Details - - - - - - Readme - - - - - - MIT License - - - - - - 1.5k stars - - - - - - 21 watching - - - - - - 225 forks - - - > + + + + + Readme + + + + + + MIT License + + + + + + 1.5k stars + + + + + + 21 watching + + + + + + 225 forks + + ) export const CustomItemChildren = () => ( @@ -551,7 +552,19 @@ export const TextWrapAndTruncation = () => ( Inline Description - This description gets truncated because it is inline + + This description gets truncated because it is inline with truncation + + + + + + + + + + Inline Description + This description wraps because it is inline without truncation @@ -784,85 +797,64 @@ export const WithCustomTrailingVisuals = () => ( ) -export const ActionListWithButtonSemantics = () => { - return ( - - - Copy link - Quote reply - Edit comment - - Delete file - - Support - - - - - - - ) -} - -ActionListWithButtonSemantics.storyName = 'With Button Semantics (Behind feature flag)' - -export const WithTrailingAction = () => { - return ( - - - - - - - Item 1 (with default TrailingAction) - - - - Item 2 (with link TrailingAction) - - - - Item 3This is an inline description. - - - - Item 4This is a block description. - - - - Item 5This is a block description. - - - - Item 6 - - - - LinkItem 1 - - with TrailingAction this is a long description and should not cause horizontal scroll on smaller screen - sizes - - - - - LinkItem 2 - - with TrailingVisual this is a long description and should not cause horizontal scroll on smaller screen - sizes - - - - - - - Inactive ItemWith TrailingAction - - - - - ) -} +// removing this until CSS Modules FF ships, currently broken in production if button semantic FF is false +// export const WithTrailingAction = () => { +// return ( +// +// +// +// +// +// +// Item 1 (with default TrailingAction) +// +// +// +// Item 2 (with link TrailingAction) +// +// +// +// Item 3This is an inline description. +// +// +// +// Item 4This is a block description. +// +// +// +// Item 5This is a block description. +// +// +// +// Item 6 +// +// +// +// LinkItem 1 +// +// with TrailingAction this is a long description and should not cause horizontal scroll on smaller screen +// sizes +// +// +// +// +// LinkItem 2 +// +// with TrailingVisual this is a long description and should not cause horizontal scroll on smaller screen +// sizes +// +// +// +// +// +// +// Inactive ItemWith TrailingAction +// +// +// +// +// ) +// } export const FullVariant = () => ( diff --git a/packages/react/src/ActionList/ActionList.module.css b/packages/react/src/ActionList/ActionList.module.css new file mode 100644 index 00000000000..0f3e563ffa0 --- /dev/null +++ b/packages/react/src/ActionList/ActionList.module.css @@ -0,0 +1,79 @@ +/* stylelint-disable selector-max-specificity, selector-max-compound-selectors */ + +.ActionList { + padding: 0; + margin: 0; + list-style: none; + + ul { + padding: 0; + margin: 0; + list-style: none; + } + + &:where([data-variant='inset']) { + /* change to padding (all) when Item is converted */ + padding-block: var(--base-size-8); + } + + &:where([data-dividers='true']) { + /* place dividers on the wrapper that excludes leading visuals/actions */ + & .ActionListSubContent::before { + position: absolute; + /* stylelint-disable-next-line primer/spacing */ + top: calc(-1 * var(--control-medium-paddingBlock)); + display: block; + width: 100%; + height: 1px; + content: ''; + /* stylelint-disable-next-line primer/colors */ + background: var(--borderColor-muted); + } + + /* if inline description, move pseudo divider to description wrapper */ + & [data-description-variant='inline'] { + &::before { + position: absolute; + /* stylelint-disable-next-line primer/spacing */ + top: calc(-1 * var(--control-medium-paddingBlock)); + display: block; + width: 100%; + height: var(--borderWidth-thin); + content: ''; + /* stylelint-disable-next-line primer/colors */ + background: var(--borderColor-muted); + } + + /* remove the default divider */ + & .ActionListSubContent::before { + content: unset; + } + } + + /* hide if item is first of type with label::before, or is the first item after a sectionDivider */ + .ActionListItem:first-of-type .ActionListSubContent::before, + .Divider + .ActionListItem .ActionListSubContent::before { + visibility: hidden; + } + + /* hide if item is first of type with label::before, or is the first item after a sectionDivider */ + .ActionListItem:first-of-type [data-description-variant='inline']::before, + .Divider + .ActionListItem [data-description-variant='inline']::before { + visibility: hidden; + } + } +} + +.Divider { + display: block; + height: var(--borderWidth-thin); + padding: 0; + /* stylelint-disable-next-line primer/spacing */ + margin-block-start: calc(var(--base-size-8) - var(--borderWidth-thin)); + margin-block-end: var(--base-size-8); + margin-inline: calc(-1 * var(--base-size-8)); + list-style: none; + /* stylelint-disable-next-line primer/colors */ + background: var(--borderColor-muted); + border: 0; +} diff --git a/packages/react/src/ActionList/ActionList.stories.tsx b/packages/react/src/ActionList/ActionList.stories.tsx index 5e77aab1b4a..4a53aa290f5 100644 --- a/packages/react/src/ActionList/ActionList.stories.tsx +++ b/packages/react/src/ActionList/ActionList.stories.tsx @@ -220,6 +220,7 @@ LinkItemPlayground.args = { active: false, disabled: false, id: 'item-1', + variant: 'default', inactiveText: '', leadingVisual: null, loading: false, @@ -231,6 +232,10 @@ LinkItemPlayground.argTypes = { type: 'boolean', }, }, + variant: { + control: 'radio', + options: ['default', 'danger'], + }, role: { type: 'string', }, diff --git a/packages/react/src/ActionList/ActionList.test.tsx b/packages/react/src/ActionList/ActionList.test.tsx index 79b50978b4c..11ce02d53fc 100644 --- a/packages/react/src/ActionList/ActionList.test.tsx +++ b/packages/react/src/ActionList/ActionList.test.tsx @@ -237,52 +237,6 @@ describe('ActionList', () => { expect(onClick).toHaveBeenCalled() }) - it('should render the ActionList.Heading component as a heading with the given heading level', async () => { - const container = HTMLRender( - - Heading - , - ) - const heading = container.getByRole('heading', {level: 1}) - expect(heading).toBeInTheDocument() - expect(heading).toHaveTextContent('Heading') - }) - it('should label the action list with the heading id', async () => { - const {container, getByRole} = HTMLRender( - - Heading - Item - , - ) - const list = container.querySelector('ul') - const heading = getByRole('heading', {level: 1}) - expect(list).toHaveAttribute('aria-labelledby', heading.id) - }) - it('should throw an error when ActionList.Heading is used within ActionMenu context', async () => { - const spy = jest.spyOn(console, 'error').mockImplementation(() => jest.fn()) - expect(() => - HTMLRender( - - - - Trigger - - - Heading - Item - - - - - , - ), - ).toThrow( - "ActionList.Heading shouldn't be used within an ActionMenu container. Menus are labelled by the menu button's name.", - ) - expect(spy).toHaveBeenCalled() - spy.mockRestore() - }) - it('should throw an error when ActionList.GroupHeading has an `as` prop when it is used within ActionMenu context', async () => { const spy = jest.spyOn(console, 'error').mockImplementation(() => jest.fn()) expect(() => @@ -648,4 +602,105 @@ describe('ActionList', () => { await userEvent.keyboard('{ArrowUp}') expect(document.activeElement).toHaveTextContent('Option 4') }) + + describe('ActionList.Description', () => { + it('should render the description as inline without truncation by default', () => { + const {getByText} = HTMLRender( + + + Item 1Item 1 description + + , + ) + + const description = getByText('Item 1 description') + expect(description.tagName).toBe('SPAN') + expect(description).toHaveStyleRule('flex-basis', 'auto') + expect(description).not.toHaveStyleRule('overflow', 'ellipsis') + expect(description).not.toHaveStyleRule('white-space', 'nowrap') + }) + it('should render the description as `Truncate` when truncate is true', () => { + const {getByText} = HTMLRender( + + + Item 1Item 1 description + + , + ) + + const description = getByText('Item 1 description') + expect(description.tagName).toBe('DIV') + expect(description).toHaveAttribute('title', 'Item 1 description') + expect(description).toHaveStyleRule('flex-basis', '0') + expect(description).toHaveStyleRule('text-overflow', 'ellipsis') + expect(description).toHaveStyleRule('overflow', 'hidden') + expect(description).toHaveStyleRule('white-space', 'nowrap') + }) + it('should render the description in a new line when variant is block', () => { + const {getByText} = HTMLRender( + + + Item 1Item 1 description + + , + ) + + const description = getByText('Item 1 description') + expect(description.tagName).toBe('SPAN') + expect(description.parentElement).toHaveAttribute('data-component', 'ActionList.Item--DividerContainer') + }) + }) + + it('should support a custom `className` on the outermost element', () => { + const Element = () => { + return ( + + Item + + ) + } + const FeatureFlagElement = () => { + return ( + + + + ) + } + expect(HTMLRender().container.querySelector('ul')).toHaveClass('test-class-name') + expect(HTMLRender().container.querySelector('ul')).toHaveClass('test-class-name') + }) + + it('divider should support a custom `className`', () => { + const Element = () => { + return ( + + Item + + + ) + } + const FeatureFlagElement = () => { + return ( + + + + ) + } + expect(HTMLRender().container.querySelector('li[aria-hidden="true"]')).toHaveClass( + 'test-class-name', + ) + expect(HTMLRender().container.querySelector('li[aria-hidden="true"]')).toHaveClass('test-class-name') + }) }) diff --git a/packages/react/src/ActionList/Description.tsx b/packages/react/src/ActionList/Description.tsx index 10fc980fc51..68bc4f661f9 100644 --- a/packages/react/src/ActionList/Description.tsx +++ b/packages/react/src/ActionList/Description.tsx @@ -14,19 +14,24 @@ export type ActionListDescriptionProps = { */ variant?: 'inline' | 'block' className?: string + /** + * Whether the inline description should truncate the text on overflow. + */ + truncate?: boolean } & SxProp export const Description: React.FC> = ({ variant = 'inline', sx = {}, className, + truncate, ...props }) => { const styles = { fontSize: 0, lineHeight: '16px', flexGrow: 1, - flexBasis: 0, + flexBasis: variant === 'inline' && !truncate ? 'auto' : 0, minWidth: 0, marginLeft: variant === 'block' ? 0 : 2, color: 'fg.muted', @@ -37,11 +42,11 @@ export const Description: React.FC diff --git a/packages/react/src/ActionList/Divider.tsx b/packages/react/src/ActionList/Divider.tsx index 1e7c2c0b5a5..04e0de3c690 100644 --- a/packages/react/src/ActionList/Divider.tsx +++ b/packages/react/src/ActionList/Divider.tsx @@ -4,13 +4,34 @@ import {get} from '../constants' import type {Theme} from '../ThemeProvider' import type {SxProp} from '../sx' import {merge} from '../sx' +import {clsx} from 'clsx' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './ActionList.module.css' +import {defaultSxProp} from '../utils/defaultSxProp' -export type ActionListDividerProps = SxProp +export type ActionListDividerProps = SxProp & { + className?: string +} /** * Visually separates `Item`s or `Group`s in an `ActionList`. */ -export const Divider: React.FC> = ({sx = {}}) => { +export const Divider: React.FC> = ({sx = defaultSxProp, className}) => { + const enabled = useFeatureFlag('primer_react_css_modules_team') + if (enabled) { + if (sx !== defaultSxProp) { + return ( + + ) + } + return + } return ( > marginTop: (theme: Theme) => `calc(${get('space.2')(theme)} - 1px)`, marginBottom: 2, listStyle: 'none', // hide the ::marker inserted by browser's stylesheet + marginRight: 'calc(-1 * var(--base-size-8))', + marginLeft: 'calc(-1 * var(--base-size-8))', }, sx as SxProp, )} + className={className} data-component="ActionList.Divider" /> ) diff --git a/packages/react/src/ActionList/Group.tsx b/packages/react/src/ActionList/Group.tsx index d0db9a77ff2..c49fdf55623 100644 --- a/packages/react/src/ActionList/Group.tsx +++ b/packages/react/src/ActionList/Group.tsx @@ -164,7 +164,7 @@ export const GroupHeading: React.FC { + it('should render the ActionList.Heading component as a heading with the given heading level', async () => { + const container = HTMLRender( + + Heading + , + ) + const heading = container.getByRole('heading', {level: 1}) + expect(heading).toBeInTheDocument() + expect(heading).toHaveTextContent('Heading') + }) + + it('should label the action list with the heading id', async () => { + const {container, getByRole} = HTMLRender( + + Heading + Item + , + ) + const list = container.querySelector('ul') + const heading = getByRole('heading', {level: 1}) + expect(list).toHaveAttribute('aria-labelledby', heading.id) + }) + + it('should throw an error when ActionList.Heading is used within ActionMenu context', async () => { + const spy = jest.spyOn(console, 'error').mockImplementation(() => jest.fn()) + expect(() => + HTMLRender( + + + + Trigger + + + Heading + Item + + + + + , + ), + ).toThrow( + "ActionList.Heading shouldn't be used within an ActionMenu container. Menus are labelled by the menu button's name.", + ) + expect(spy).toHaveBeenCalled() + spy.mockRestore() + }) + + it('should support a custom `className` on the outermost element', () => { + const Element = () => { + return ( + + + Filter by + + + ) + } + const FeatureFlagElement = () => { + return ( + + + + ) + } + expect(HTMLRender().container.querySelector('h2')).toHaveClass('test-class-name') + expect(HTMLRender().container.querySelector('h2')).toHaveClass('test-class-name') + }) +}) diff --git a/packages/react/src/ActionList/Heading.tsx b/packages/react/src/ActionList/Heading.tsx index 1971f9a3886..d024be646c7 100644 --- a/packages/react/src/ActionList/Heading.tsx +++ b/packages/react/src/ActionList/Heading.tsx @@ -9,18 +9,26 @@ import {ListContext} from './shared' import VisuallyHidden from '../_VisuallyHidden' import {ActionListContainerContext} from './ActionListContainerContext' import {invariant} from '../utils/invariant' +import {clsx} from 'clsx' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './Heading.module.css' type HeadingLevels = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' +type HeadingVariants = 'large' | 'medium' | 'small' export type ActionListHeadingProps = { as: HeadingLevels + size?: HeadingVariants visuallyHidden?: boolean + className?: string } & SxProp export const Heading = forwardRef( - ({as, children, sx = defaultSxProp, visuallyHidden = false, ...props}, forwardedRef) => { + ({as, size, children, sx = defaultSxProp, visuallyHidden = false, className, ...props}, forwardedRef) => { const innerRef = React.useRef(null) useRefObjectAsForwardedRef(forwardedRef, innerRef) + const enabled = useFeatureFlag('primer_react_css_modules_team') + const {headingId: headingId, variant: listVariant} = React.useContext(ListContext) const {container} = React.useContext(ActionListContainerContext) @@ -37,16 +45,49 @@ export const Heading = forwardRef( return ( - (styles, sx)} - {...props} - > - {children} - + {enabled ? ( + sx !== defaultSxProp ? ( + + {children} + + ) : ( + + {children} + + ) + ) : ( + (styles, sx)} + className={className} + {...props} + > + {children} + + )} ) }, diff --git a/packages/react/src/ActionList/Item.tsx b/packages/react/src/ActionList/Item.tsx index 5db1765bfb5..f51caa7b641 100644 --- a/packages/react/src/ActionList/Item.tsx +++ b/packages/react/src/ActionList/Item.tsx @@ -147,7 +147,7 @@ export const Item = React.forwardRef( const hoverStyles = { '@media (hover: hover) and (pointer: fine)': { - ':hover:not([aria-disabled]):not([data-inactive])': { + '&:hover:not([aria-disabled]):not([data-inactive])': { backgroundColor: `actionListItem.${variant}.hoverBg`, color: getVariantStyles(variant, disabled, inactive).hoverColor, boxShadow: `inset 0 0 0 max(1px, 0.0625rem) ${theme?.colors.actionListItem.default.activeBorder}`, @@ -157,7 +157,7 @@ export const Item = React.forwardRef( border: `2 solid`, boxShadow: `0 0 0 2px ${theme?.colors.accent.emphasis}`, }, - ':active:not([aria-disabled]):not([data-inactive])': { + '&:active:not([aria-disabled]):not([data-inactive])': { backgroundColor: `actionListItem.${variant}.activeBg`, color: getVariantStyles(variant, disabled, inactive).hoverColor, }, @@ -197,6 +197,9 @@ export const Item = React.forwardRef( bg: selected ? 'fg.muted' : 'var(--control-bgColor-disabled, rgba(175, 184, 193, 0.2))', borderColor: selected ? 'fg.muted' : 'var(--color-input-disabled-bg, rgba(175, 184, 193, 0.2))', }, + '[data-component="ActionList.Selection"]': { + color: 'primer.fg.disabled', + }, }, // Button reset styles (to support as="button") @@ -392,7 +395,8 @@ export const Item = React.forwardRef( flexGrow: slots.inlineDescription ? 0 : 1, fontWeight: slots.inlineDescription || slots.blockDescription || active ? 'bold' : 'normal', marginBlockEnd: slots.blockDescription ? '4px' : undefined, - wordBreak: 'break-word', + wordBreak: slots.inlineDescription ? 'normal' : 'break-word', + lineHeight: '20px', }} > {childrenWithoutSlots} diff --git a/packages/react/src/ActionList/List.tsx b/packages/react/src/ActionList/List.tsx index 874ce8195ef..c957b40060a 100644 --- a/packages/react/src/ActionList/List.tsx +++ b/packages/react/src/ActionList/List.tsx @@ -11,12 +11,15 @@ import {useId} from '../hooks/useId' import {ListContext, type ActionListProps} from './shared' import {useProvidedRefOrCreate} from '../hooks' import {FocusKeys, useFocusZone} from '../hooks/useFocusZone' +import {clsx} from 'clsx' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './ActionList.module.css' const ListBox = styled.ul(sx) export const List = React.forwardRef( ( - {variant = 'inset', selectionVariant, showDividers = false, role, sx: sxProp = defaultSxProp, ...props}, + {variant = 'inset', selectionVariant, showDividers = false, role, sx: sxProp = defaultSxProp, className, ...props}, forwardedRef, ): JSX.Element => { const styles = { @@ -54,6 +57,8 @@ export const List = React.forwardRef( focusOutBehavior: listRole === 'menu' ? 'wrap' : undefined, }) + const enabled = useFeatureFlag('primer_react_css_modules_team') + return ( ( }} > {slots.heading} - - {childrenWithoutSlots} - + {enabled ? ( + sxProp !== defaultSxProp ? ( + + {childrenWithoutSlots} + + ) : ( + + {childrenWithoutSlots} + + ) + ) : ( + + {childrenWithoutSlots} + + )} ) }, diff --git a/packages/react/src/ActionList/Selection.tsx b/packages/react/src/ActionList/Selection.tsx index 4d705e2faf4..355176e3493 100644 --- a/packages/react/src/ActionList/Selection.tsx +++ b/packages/react/src/ActionList/Selection.tsx @@ -31,7 +31,9 @@ export const Selection: React.FC> = ({se if (selectionVariant === 'single' || listRole === 'menu') { return ( - {selected && } + + {selected && } + ) } @@ -61,7 +63,7 @@ export const Selection: React.FC> = ({se } return ( - + > = ({ color: getVariantStyles(variant, disabled, inactive).annotationColor, marginLeft: 2, fontWeight: 'initial', + display: 'grid', + alignContent: 'center', '[data-variant="danger"]:hover &, [data-variant="danger"]:active &': { color: getVariantStyles(variant, disabled, inactive).hoverColor, }, diff --git a/packages/react/src/ActionList/shared.ts b/packages/react/src/ActionList/shared.ts index d0d582a804b..a8f62cfc86d 100644 --- a/packages/react/src/ActionList/shared.ts +++ b/packages/react/src/ActionList/shared.ts @@ -131,6 +131,7 @@ export type ActionListProps = React.PropsWithChildren<{ * The ARIA role describing the function of `List` component. `listbox` or `menu` are a common values. */ role?: AriaRole + className?: string }> & SxProp diff --git a/packages/react/src/ActionMenu/ActionMenu.dev.stories.tsx b/packages/react/src/ActionMenu/ActionMenu.dev.stories.tsx new file mode 100644 index 00000000000..bf4a8e654e6 --- /dev/null +++ b/packages/react/src/ActionMenu/ActionMenu.dev.stories.tsx @@ -0,0 +1,122 @@ +import React from 'react' +import type {Meta} from '@storybook/react' +import type {ComponentProps} from '../utils/types' +import {ActionMenu} from './ActionMenu' +import {ActionList} from '../ActionList' +import {FeatureFlags} from '../FeatureFlags' + +export default { + title: 'Components/ActionMenu/Dev', + component: ActionMenu, +} as Meta> + +export const WithCss = () => ( + + + Open menu + + + alert('Copy link clicked')}> + Copy link + ⌘C + + alert('Quote reply clicked')}> + Quote reply + ⌘Q + + alert('Edit comment clicked')}> + Edit comment + ⌘E + + + alert('Delete file clicked')}> + Delete file + ⌘D + + + + + +) + +export const WithSx = () => ( + + + Open menu + + + alert('Copy link clicked')}> + Copy link + ⌘C + + alert('Quote reply clicked')}> + Quote reply + ⌘Q + + alert('Edit comment clicked')}> + Edit comment + ⌘E + + + alert('Delete file clicked')}> + Delete file + ⌘D + + + + + +) + +export const WithSxAndCSS = () => ( + + + + Open menu + + + + alert('Copy link clicked')}> + Copy link + ⌘C + + alert('Quote reply clicked')}> + Quote reply + ⌘Q + + alert('Edit comment clicked')}> + Edit comment + ⌘E + + + alert('Delete file clicked')}> + Delete file + ⌘D + + + + + +) diff --git a/packages/react/src/ActionMenu/ActionMenu.docs.json b/packages/react/src/ActionMenu/ActionMenu.docs.json index e1b262a66b1..cdd205fd7db 100644 --- a/packages/react/src/ActionMenu/ActionMenu.docs.json +++ b/packages/react/src/ActionMenu/ActionMenu.docs.json @@ -3,7 +3,29 @@ "name": "ActionMenu", "status": "beta", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-actionmenu--default" + }, + { + "id": "components-actionmenu-features--links-and-actions" + }, + { + "id": "components-actionmenu-features--single-select" + }, + { + "id": "components-actionmenu-features--multi-select" + }, + { + "id": "components-actionmenu-features--inactive-items" + }, + { + "id": "components-actionmenu-features--loading-items" + }, + { + "id": "components-actionmenu-features--submenus" + } + ], "importPath": "@primer/react", "props": [ { @@ -58,6 +80,12 @@ "defaultValue": "", "required": true, "description": "Accepts a single child element" + }, + { + "name": "id", + "type": "string", + "description": "", + "defaultValue": "" } ] }, @@ -82,6 +110,13 @@ "type": "| 'inside-top' | 'inside-bottom' | 'inside-left' | 'inside-right' | 'inside-center' | 'outside-top' | 'outside-bottom' | 'outside-left' | 'outside-right'", "defaultValue": "'outside-bottom'", "description": "Controls which side of the anchor the menu will appear" + }, + { + "name": "data-test-id", + "type": "unknown", + "required": false, + "description": "ID to use for React testing utilities.", + "defaultValue": "" } ], "passthrough": { diff --git a/packages/react/src/ActionMenu/ActionMenu.examples.stories.tsx b/packages/react/src/ActionMenu/ActionMenu.examples.stories.tsx index a5a77a18190..ce1ca3662de 100644 --- a/packages/react/src/ActionMenu/ActionMenu.examples.stories.tsx +++ b/packages/react/src/ActionMenu/ActionMenu.examples.stories.tsx @@ -233,6 +233,64 @@ export const ShortcutMenu = () => { ) } +export const ContextMenu = () => { + const ListItemWithContextMenu = ({children}: {children: string}) => { + const handleContextMenu: React.MouseEventHandler = event => { + event.preventDefault() + setOpen(true) + } + + const [open, setOpen] = React.useState(false) + const triggerRef = React.useRef(null) + + return ( + + + + + {children} + + + + + + Copy link + ⌘C + + + Quote reply + ⌘Q + + + Edit comment + ⌘E + + View file + + + Delete file + ⌘D + + + + + + ) + } + + return ( + <> + Right click the list items below to see the context menu + + + List item one + List item two + List item three + + > + ) +} + export const CustomAnchor = () => ( diff --git a/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx b/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx index ab68345afe1..564229a929e 100644 --- a/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx +++ b/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx @@ -158,11 +158,7 @@ export const InactiveItems = () => ( - alert('Make a copy clicked')} - inactiveText="Unavailable due to an outage" - > + alert('Make a copy clicked')} inactiveText="Unavailable due to an outage"> Make a copy diff --git a/packages/react/src/ActionMenu/ActionMenu.tsx b/packages/react/src/ActionMenu/ActionMenu.tsx index 376dce0ac1a..b2dd4b81a9b 100644 --- a/packages/react/src/ActionMenu/ActionMenu.tsx +++ b/packages/react/src/ActionMenu/ActionMenu.tsx @@ -260,7 +260,9 @@ const Overlay: React.FC> = ({ // If the menu anchor is an icon button, we need to label the menu by tooltip that also labelled the anchor. const [anchorAriaLabelledby, setAnchorAriaLabelledby] = useState(null) useEffect(() => { - if (anchorRef.current) { + // Necessary for HMR reloads + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (anchorRef?.current) { const ariaLabelledby = anchorRef.current.getAttribute('aria-labelledby') if (ariaLabelledby) { setAnchorAriaLabelledby(ariaLabelledby) diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.docs.json b/packages/react/src/AnchoredOverlay/AnchoredOverlay.docs.json index d8683ed5dc1..699fd82c050 100644 --- a/packages/react/src/AnchoredOverlay/AnchoredOverlay.docs.json +++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.docs.json @@ -3,18 +3,56 @@ "name": "AnchoredOverlay", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-anchoredoverlay--default" + }, + { + "id": "components-anchoredoverlay-features--portal-inside-scrolling-element" + }, + { + "id": "components-anchoredoverlay-features--custom-anchor-id" + }, + { + "id": "components-anchoredoverlay-features--height" + }, + { + "id": "components-anchoredoverlay-features--width" + }, + { + "id": "components-anchoredoverlay-features--anchor-alignment" + }, + { + "id": "components-anchoredoverlay-features--anchor-side" + }, + { + "id": "components-anchoredoverlay-features--offset-position-from-anchor" + }, + { + "id": "components-anchoredoverlay-features--offset-alignment-from-anchor" + }, + { + "id": "components-anchoredoverlay-features--focus-trap-overrides" + }, + { + "id": "components-anchoredoverlay-features--focus-zone-overrides" + }, + { + "id": "components-anchoredoverlay-features--overlay-props-overrides" + } + ], "importPath": "@primer/react", "props": [ { "name": "open", "type": "boolean", + "required": true, "defaultValue": "false", "description": "Determines whether the overlay portion of the component should be shown or not." }, { "name": "onOpen", - "type": "(gesture: 'anchor-click' | 'anchor-key-press') => unknown", + "type": "(gesture: 'anchor-click' | 'anchor-key-press', event?: KeyboardEvent | undefined) => unknown", "defaultValue": "", "description": "A callback that is called whenever the overlay is currently closed and an \"open gesture\" is detected." }, @@ -89,6 +127,26 @@ "type": "string", "defaultValue": "", "description": "Class name for custom styling." + }, + { + "name": "preventOverflow", + "type": "boolean", + "defaultValue": "true", + "description": "Determines if the Overlay width should be adjusted responsively if there is not enough space to display the Overlay. If `preventOverflow` is set to `false`, the Overlay will be displayed at the maximum width that fits within the viewport." + }, + { + "name": "height", + "type": "'small' | 'initial' | 'large' | 'medium' | 'auto' | 'fit-content' | 'xsmall' | 'xlarge'", + "required": false, + "description": "", + "defaultValue": "" + }, + { + "name": "width", + "type": "'small' | 'large' | 'medium' | 'auto' | 'xlarge' | 'xxlarge'", + "required": false, + "description": "", + "defaultValue": "" } ] } diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.features.stories.tsx b/packages/react/src/AnchoredOverlay/AnchoredOverlay.features.stories.tsx index 3f914def820..0cf7566b9f9 100644 --- a/packages/react/src/AnchoredOverlay/AnchoredOverlay.features.stories.tsx +++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.features.stories.tsx @@ -18,9 +18,9 @@ export default { } as Meta const hoverCard = ( - + - + Follow @@ -103,8 +103,9 @@ export const CustomAnchorId = () => { onClose={() => setOpen(false)} renderAnchor={props => Button} anchorId="my-custom-anchor-id" - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -121,8 +122,9 @@ export const Height = () => { onClose={() => setOpen(false)} renderAnchor={props => Button} height="large" - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -139,8 +141,9 @@ export const Width = () => { onClose={() => setOpen(false)} renderAnchor={props => Button} width="large" - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > { )} align="center" - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -188,8 +192,9 @@ export const AnchorSide = () => { onClose={() => setOpen(false)} renderAnchor={props => Button} side="outside-right" - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -206,8 +211,9 @@ export const OffsetPositionFromAnchor = () => { onClose={() => setOpen(false)} renderAnchor={props => Button} anchorOffset={100} - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -224,8 +230,9 @@ export const OffsetAlignmentFromAnchor = () => { onClose={() => setOpen(false)} renderAnchor={props => Button} alignmentOffset={100} - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -245,6 +252,7 @@ export const FocusTrapOverrides = () => { focusTrapSettings={{initialFocusRef}} overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'Focus Trap Demo Overlay'}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > First button Initial focus @@ -263,6 +271,7 @@ export const FocusZoneOverrides = () => { renderAnchor={props => Button} focusZoneSettings={{bindKeys: FocusKeys.JK}} overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'Focus Zone Demo Overlay'}} + preventOverflow={false} > Use J and K keys to move focus. @@ -289,8 +298,10 @@ export const OverlayPropsOverrides = () => { role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', + sx: {minWidth: '320px'}, }} focusZoneSettings={{disabled: true}} + preventOverflow={false} > Overlay props have been overridden to set: diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx index 84ec0727c24..f214b8c1410 100644 --- a/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx +++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx @@ -15,9 +15,9 @@ export default { } as Meta const hoverCard = ( - + - + Follow @@ -53,8 +53,9 @@ export const Default = () => { onOpen={() => setOpen(true)} onClose={() => setOpen(false)} renderAnchor={props => Button} - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -83,9 +84,11 @@ export const Playground = (args: Args) => { role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', + sx: {minWidth: '320px'}, }} side={args.side} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx b/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx index bfc08cf041a..e046e301938 100644 --- a/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx +++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx @@ -84,6 +84,11 @@ interface AnchoredOverlayBaseProps extends Pick { const anchorRef = useProvidedRefOrCreate(externalAnchorRef) const [overlayRef, updateOverlayRef] = useRenderForcingRef() @@ -198,7 +204,7 @@ export const AnchoredOverlay: React.FC {children} diff --git a/packages/react/src/Autocomplete/Autocomplete.docs.json b/packages/react/src/Autocomplete/Autocomplete.docs.json index ff776c4ab01..94b13ca91e6 100644 --- a/packages/react/src/Autocomplete/Autocomplete.docs.json +++ b/packages/react/src/Autocomplete/Autocomplete.docs.json @@ -3,12 +3,52 @@ "name": "Autocomplete", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-autocomplete--default" + }, + { + "id": "components-autocomplete-features--with-token-input" + }, + { + "id": "components-autocomplete-features--add-new-item" + }, + { + "id": "components-autocomplete-features--custom-search-filter-fn" + }, + { + "id": "components-autocomplete-features--custom-sort-after-menu-close" + }, + { + "id": "components-autocomplete-features--with-callback-when-overlay-open-state-changes" + }, + { + "id": "components-autocomplete-features--async-loading-of-items" + }, + { + "id": "components-autocomplete-features--rendering-the-menu-outside-an-overlay" + }, + { + "id": "components-autocomplete-features--custom-overlay-menu-anchor" + }, + { + "id": "components-autocomplete-features--in-overlay-with-custom-scroll-container-ref" + }, + { + "id": "components-autocomplete-features--in-a-dialog" + } + ], "importPath": "@primer/react", "props": [ { "name": "children", "type": "React.ReactNode" + }, + { + "name": "id", + "type": "string", + "description": "May be used to customize how the ID is set on the text input to be used by ARIA attributes on related elements.", + "defaultValue": "" } ], "subcomponents": [ @@ -68,7 +108,7 @@ { "name": "selectedItemIds", "required": true, - "type": "(string | number)[]", + "type": "string[]", "description": "The IDs of the selected items" }, { diff --git a/packages/react/src/Avatar/Avatar.docs.json b/packages/react/src/Avatar/Avatar.docs.json index ca2581332dc..e678fec6eb5 100644 --- a/packages/react/src/Avatar/Avatar.docs.json +++ b/packages/react/src/Avatar/Avatar.docs.json @@ -3,7 +3,23 @@ "name": "Avatar", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-avatar--default" + }, + { + "id": "components-avatar-features--square" + }, + { + "id": "components-avatar-features--square-sx-prop" + }, + { + "id": "components-avatar-features--size" + }, + { + "id": "components-avatar-features--size-responsive" + } + ], "importPath": "@primer/react", "props": [ { @@ -24,6 +40,13 @@ "defaultValue": "false", "description": "If true, the avatar will be square instead of circular." }, + { + "name": "src", + "type": "string", + "required": false, + "description": "URL of the avatar image.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Avatar/Avatar.features.stories.tsx b/packages/react/src/Avatar/Avatar.features.stories.tsx index dc5ee4b0636..2c448438db4 100644 --- a/packages/react/src/Avatar/Avatar.features.stories.tsx +++ b/packages/react/src/Avatar/Avatar.features.stories.tsx @@ -21,18 +21,18 @@ export const SquareSxProp = () => ( export const Size = () => ( - - - - - - - - - - - - + + + + + + + + + + + + ) @@ -41,52 +41,52 @@ export const SizeResponsive = () => ( ) diff --git a/packages/react/src/Avatar/Avatar.stories.tsx b/packages/react/src/Avatar/Avatar.stories.tsx index 476c118a998..c5b07cc1403 100644 --- a/packages/react/src/Avatar/Avatar.stories.tsx +++ b/packages/react/src/Avatar/Avatar.stories.tsx @@ -16,14 +16,14 @@ type Args = { sizeAtWide?: number } & Omit -export const Default = () => +export const Default = () => export const Playground: StoryFn = args => { return ( ) @@ -63,12 +63,6 @@ Playground.argTypes = { disable: true, }, }, - ref: { - controls: false, - table: { - disable: true, - }, - }, sx: { controls: false, table: { diff --git a/packages/react/src/Avatar/Avatar.tsx b/packages/react/src/Avatar/Avatar.tsx index 4f5f066a147..b8120519df8 100644 --- a/packages/react/src/Avatar/Avatar.tsx +++ b/packages/react/src/Avatar/Avatar.tsx @@ -1,21 +1,15 @@ import {clsx} from 'clsx' import React from 'react' import Box from '../Box' -import styled from 'styled-components' -import {get} from '../constants' -import type {BetterCssProperties, BetterSystemStyleObject, SxProp} from '../sx' -import sx, {merge} from '../sx' -import type {ComponentProps} from '../utils/types' +import type {SxProp} from '../sx' import type {ResponsiveValue} from '../hooks/useResponsiveValue' import {isResponsiveValue} from '../hooks/useResponsiveValue' -import {getBreakpointDeclarations} from '../utils/getBreakpointDeclarations' import {defaultSxProp} from '../utils/defaultSxProp' import classes from './Avatar.module.css' -import {useFeatureFlag} from '../FeatureFlags' export const DEFAULT_AVATAR_SIZE = 20 -type StyledAvatarProps = { +export type AvatarProps = { /** Sets the width and height of the avatar. */ size?: number | ResponsiveValue /** Sets the shape of the avatar to a square if true. If false, the avatar will be circular. */ @@ -24,99 +18,56 @@ type StyledAvatarProps = { src: string /** Provide alt text when the Avatar is used without the user's name next to it. */ alt?: string -} & SxProp - -const StyledAvatar = styled.img.attrs(props => ({ - height: props.size, - width: props.size, -}))` - display: inline-block; - overflow: hidden; // Ensure page layout in Firefox should images fail to load - line-height: ${get('lineHeights.condensedUltra')}; - vertical-align: middle; - // If the avatar is square and size is greater than 24px (at any breakpoint), border-radius will be 6px. Otherwise, it will be 4px. - border-radius: ${props => (props.square ? 'clamp(4px, var(--avatar-size) - 24px, 6px)' : '50%')}; - box-shadow: 0 0 0 1px ${get('colors.avatar.border')}; - height: var(--avatar-size); - width: var(--avatar-size); - ${sx} -` - -export type AvatarProps = ComponentProps + /** Additional class name. */ + className?: string +} & SxProp & + React.ComponentPropsWithoutRef<'img'> const Avatar = React.forwardRef(function Avatar( {alt = '', size = DEFAULT_AVATAR_SIZE, square = false, sx: sxProp = defaultSxProp, className, ...rest}, ref, ) { - const enabled = useFeatureFlag('primer_react_css_modules_ga') const isResponsive = isResponsiveValue(size) - const avatarSx = isResponsive - ? merge( - getBreakpointDeclarations( - size, - '--avatar-size' as keyof React.CSSProperties, - value => `${value || DEFAULT_AVATAR_SIZE}px`, - ), - sxProp as SxProp, - ) - : merge({'--avatar-size': `${size}px`} as React.CSSProperties, sxProp as SxProp) - - if (enabled) { - const cssSizeVars = {} as Record + const cssSizeVars = {} as Record - if (isResponsive) { - for (const [key, value] of Object.entries(size)) { - cssSizeVars[`--avatarSize-${key}`] = `${value}px` - } - } else { - cssSizeVars['--avatarSize-regular'] = `${size}px` - } - - if (sxProp !== defaultSxProp) { - return ( - - ) + if (isResponsive) { + for (const [key, value] of Object.entries(size)) { + cssSizeVars[`--avatarSize-${key}`] = `${value}px` } + } else { + cssSizeVars['--avatarSize-regular'] = `${size}px` + } + if (sxProp !== defaultSxProp) { return ( - ) } return ( - ) diff --git a/packages/react/src/AvatarPair/AvatarPair.docs.json b/packages/react/src/AvatarPair/AvatarPair.docs.json index 6185196dff3..176ec3916df 100644 --- a/packages/react/src/AvatarPair/AvatarPair.docs.json +++ b/packages/react/src/AvatarPair/AvatarPair.docs.json @@ -3,7 +3,17 @@ "name": "AvatarPair", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-avatarpair--default" + }, + { + "id": "components-avatarpair-features--parent-circle" + }, + { + "id": "components-avatarpair-features--parent-square" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx b/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx index 7129a28c6fd..1b0fadfdff2 100644 --- a/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx +++ b/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx @@ -10,7 +10,7 @@ export default { export const ParentCircle = () => ( - + ) @@ -18,6 +18,6 @@ export const ParentCircle = () => ( export const ParentSquare = () => ( - + ) diff --git a/packages/react/src/AvatarPair/AvatarPair.stories.tsx b/packages/react/src/AvatarPair/AvatarPair.stories.tsx index 217b417d297..3184e529f78 100644 --- a/packages/react/src/AvatarPair/AvatarPair.stories.tsx +++ b/packages/react/src/AvatarPair/AvatarPair.stories.tsx @@ -10,7 +10,7 @@ export default { export const Default = () => ( - + ) diff --git a/packages/react/src/AvatarStack/AvatarStack.dev.stories.tsx b/packages/react/src/AvatarStack/AvatarStack.dev.stories.tsx new file mode 100644 index 00000000000..ed132a155ed --- /dev/null +++ b/packages/react/src/AvatarStack/AvatarStack.dev.stories.tsx @@ -0,0 +1,41 @@ +import React from 'react' +import type {Meta} from '@storybook/react' +import AvatarStack from './AvatarStack' +import Avatar from '../Avatar' +import Link from '../Link' + +export default { + title: 'Components/AvatarStack/Dev', + component: AvatarStack, +} as Meta + +export const SxProp = () => ( + + + + + + +) + +export const WithLinkWrappers = () => ( + + + + + + + + + + + + + + +) diff --git a/packages/react/src/AvatarStack/AvatarStack.docs.json b/packages/react/src/AvatarStack/AvatarStack.docs.json index 3f38da7c4eb..286e889c4d8 100644 --- a/packages/react/src/AvatarStack/AvatarStack.docs.json +++ b/packages/react/src/AvatarStack/AvatarStack.docs.json @@ -3,9 +3,43 @@ "name": "AvatarStack", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-avatarstack--default" + }, + { + "id": "components-avatarstack-features--align-left" + }, + { + "id": "components-avatarstack-features--align-right" + }, + { + "id": "components-avatarstack-features--disable-expand-on-hover" + }, + { + "id": "components-avatarstack-features--custom-size-on-parent" + }, + { + "id": "components-avatarstack-features--custom-size-on-parent-responsive" + }, + { + "id": "components-avatarstack-features--custom-size-on-children" + }, + { + "id": "components-avatarstack-features--custom-size-on-children-responsive" + }, + { + "id": "components-avatarstack-features--with-single-avatar" + } + ], "importPath": "@primer/react", "props": [ + { + "name": "children", + "type": "ReactNode", + "description": "A set of Avatar components to stack", + "defaultValue": "" + }, { "name": "alignRight", "type": "boolean", @@ -24,6 +58,12 @@ "defaultValue": "20", "description": "The size of the avatar children in pixels." }, + { + "name": "className", + "type": "string", + "description": "Class name for custom styling.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/AvatarStack/AvatarStack.module.css b/packages/react/src/AvatarStack/AvatarStack.module.css new file mode 100644 index 00000000000..ea13c99ecae --- /dev/null +++ b/packages/react/src/AvatarStack/AvatarStack.module.css @@ -0,0 +1,190 @@ +/* stylelint-disable max-nesting-depth */ +/* stylelint-disable selector-max-specificity */ +.AvatarStack { + --avatar-border-width: 1px; + --avatar-two-margin: calc(var(--avatar-stack-size) * -0.55); + --avatar-three-margin: calc(var(--avatar-stack-size) * -0.85); + + position: relative; + display: flex; + min-width: var(--avatar-stack-size); + height: var(--avatar-stack-size); + + &:where([data-responsive]) { + @media screen and (--viewportRange-narrow) { + --avatar-stack-size: var(--stackSize-narrow); + } + + @media screen and (--viewportRange-regular) { + --avatar-stack-size: var(--stackSize-regular); + } + + @media screen and (--viewportRange-wide) { + --avatar-stack-size: var(--stackSize-wide); + } + } + + &:where([data-avatar-count='1']) { + .AvatarItem { + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 0 0 var(--avatar-border-width) var(--avatar-borderColor); + } + } + + &:where([data-avatar-count='2']) { + /* this calc explained: */ + + /* 1. avatar size + the non-overlapping part of the second avatar */ + + /* 2. + the border widths of the first two avatars */ + min-width: calc( + var(--avatar-stack-size) + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + var(--avatar-border-width) + ); + } + + &:where([data-avatar-count='3']) { + /* this calc explained: */ + + /* 1. avatar size + the non-overlapping part of the second avatar */ + + /* 2. + the non-overlapping part of the third avatar */ + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) + ) + ); + } + + &:where([data-avatar-count='3+']) { + /* this calc explained: */ + + /* 1. avatar size + the non-overlapping part of the second avatar */ + + /* 2. + the non-overlapping part of the third and fourth avatar */ + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) * 2 + ) + ); + } + + &:where([data-align-right]) { + justify-content: flex-end; + + .AvatarItem { + margin-left: 0 !important; + + &:first-child { + margin-right: 0; + } + + &:nth-child(n + 2) { + /* stylelint-disable-next-line primer/spacing */ + margin-right: var(--avatar-two-margin); + } + + &:nth-child(n + 3) { + /* stylelint-disable-next-line primer/spacing */ + margin-right: var(--avatar-three-margin); + } + } + + .AvatarStackBody { + flex-direction: row-reverse; + + &:not([data-disable-expand]):hover, + &:not([data-disable-expand]):focus-within { + .AvatarItem { + margin-right: var(--base-size-4) !important; + margin-left: 0 !important; + + &:first-child { + margin-right: 0 !important; + } + } + } + } + } +} + +.AvatarStackBody { + position: absolute; + display: flex; + + &:where([data-disable-expand]) { + position: relative; + } +} + +.AvatarItem { + --avatarSize-regular: var(--avatar-stack-size); + + position: relative; + display: flex; + width: var(--avatar-stack-size); + height: var(--avatar-stack-size); + overflow: hidden; + flex-shrink: 0; + + &:is(img) { + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 0 0 var(--avatar-border-width) var(--bgColor-default); + } + + &:first-child { + z-index: 10; + margin-left: 0; + } + + &:nth-child(n + 2) { + z-index: 9; + /* stylelint-disable-next-line primer/spacing */ + margin-left: var(--avatar-two-margin); + } + + &:nth-child(n + 3) { + z-index: 8; + /* stylelint-disable-next-line primer/spacing */ + margin-left: var(--avatar-three-margin); + opacity: 0.55; + } + + &:nth-child(n + 4) { + z-index: 7; + opacity: 0.4; + } + + &:nth-child(n + 5) { + z-index: 6; + opacity: 0.25; + } + + &:nth-child(n + 6) { + visibility: hidden; + opacity: 0; + } +} + +.AvatarStackBody:not([data-disable-expand]):hover, +.AvatarStackBody:not([data-disable-expand]):focus-within { + width: auto; + + .AvatarItem { + margin-left: var(--base-size-4); + visibility: visible; + opacity: 1; + transition: + margin 0.2s ease-in-out, + opacity 0.2s ease-in-out, + visibility 0.2s ease-in-out, + box-shadow 0.1s ease-in-out; + + &:first-child { + margin-left: 0; + } + } +} diff --git a/packages/react/src/AvatarStack/AvatarStack.tsx b/packages/react/src/AvatarStack/AvatarStack.tsx index ccd87f1e24f..78856581e62 100644 --- a/packages/react/src/AvatarStack/AvatarStack.tsx +++ b/packages/react/src/AvatarStack/AvatarStack.tsx @@ -12,6 +12,9 @@ import {isResponsiveValue} from '../hooks/useResponsiveValue' import {getBreakpointDeclarations} from '../utils/getBreakpointDeclarations' import {defaultSxProp} from '../utils/defaultSxProp' import type {WidthOnlyViewportRangeKeys} from '../utils/types/ViewportRangeKeys' +import classes from './AvatarStack.module.css' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' import {hasInteractiveNodes} from '../internal/utils/hasInteractiveNodes' import getGlobalFocusStyles from '../internal/utils/getGlobalFocusStyles' @@ -19,170 +22,182 @@ type StyledAvatarStackWrapperProps = { count?: number } & SxProp -const AvatarStackWrapper = styled.span` - --avatar-border-width: 1px; - --avatar-two-margin: calc(var(--avatar-stack-size) * -0.55); - --avatar-three-margin: calc(var(--avatar-stack-size) * -0.85); +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' - display: flex; - position: relative; - height: var(--avatar-stack-size); - min-width: var(--avatar-stack-size); +const AvatarStackWrapper = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'span', + styled.span` + --avatar-border-width: 1px; + --avatar-two-margin: calc(var(--avatar-stack-size) * -0.55); + --avatar-three-margin: calc(var(--avatar-stack-size) * -0.85); - .pc-AvatarStackBody { display: flex; - position: absolute; - - ${getGlobalFocusStyles('1px')} - } - - .pc-AvatarItem { - --avatar-size: var(--avatar-stack-size); - flex-shrink: 0; - height: var(--avatar-stack-size); - width: var(--avatar-stack-size); - box-shadow: 0 0 0 var(--avatar-border-width) - ${props => (props.count === 1 ? get('colors.avatar.border') : get('colors.canvas.default'))}; position: relative; - overflow: hidden; + height: var(--avatar-stack-size); + min-width: var(--avatar-stack-size); - &:first-child { - margin-left: 0; - z-index: 10; - } + .pc-AvatarStackBody { + display: flex; + position: absolute; - &:nth-child(n + 2) { - margin-left: var(--avatar-two-margin); - z-index: 9; + ${getGlobalFocusStyles('1px')} } - &:nth-child(n + 3) { - margin-left: var(--avatar-three-margin); - opacity: ${100 - 3 * 15}%; - z-index: 8; - } + .pc-AvatarItem { + --avatar-size: var(--avatar-stack-size); + flex-shrink: 0; + height: var(--avatar-stack-size); + width: var(--avatar-stack-size); + position: relative; + overflow: hidden; + display: flex; + + &:is(img) { + box-shadow: 0 0 0 var(--avatar-border-width) + ${props => (props.count === 1 ? get('colors.avatar.border') : get('colors.canvas.default'))}; + } - &:nth-child(n + 4) { - opacity: ${100 - 4 * 15}%; - z-index: 7; - } + &:first-child { + margin-left: 0; + z-index: 10; + } - &:nth-child(n + 5) { - opacity: ${100 - 5 * 15}%; - z-index: 6; - } + &:nth-child(n + 2) { + margin-left: var(--avatar-two-margin); + z-index: 9; + } + + &:nth-child(n + 3) { + margin-left: var(--avatar-three-margin); + opacity: ${100 - 3 * 15}%; + z-index: 8; + } - &:nth-child(n + 6) { - opacity: 0; - visibility: hidden; + &:nth-child(n + 4) { + opacity: ${100 - 4 * 15}%; + z-index: 7; + } + + &:nth-child(n + 5) { + opacity: ${100 - 5 * 15}%; + z-index: 6; + } + + &:nth-child(n + 6) { + opacity: 0; + visibility: hidden; + } } - } - &.pc-AvatarStack--two { - // this calc explained: - // 1. avatar size + the non-overlapping part of the second avatar - // 2. + the border widths of the first two avatars - min-width: calc( - var(--avatar-stack-size) + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + var(--avatar-border-width) - ); - } + &.pc-AvatarStack--two { + // this calc explained: + // 1. avatar size + the non-overlapping part of the second avatar + // 2. + the border widths of the first two avatars + min-width: calc( + var(--avatar-stack-size) + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + var(--avatar-border-width) + ); + } - &.pc-AvatarStack--three { - // this calc explained: - // 1. avatar size + the non-overlapping part of the second avatar - // 2. + the non-overlapping part of the third avatar - min-width: calc( - var(--avatar-stack-size) + - calc( - calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + - calc(var(--avatar-stack-size) + var(--avatar-three-margin)) - ) - ); - } + &.pc-AvatarStack--three { + // this calc explained: + // 1. avatar size + the non-overlapping part of the second avatar + // 2. + the non-overlapping part of the third avatar + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) + ) + ); + } - &.pc-AvatarStack--three-plus { - // this calc explained: - // 1. avatar size + the non-overlapping part of the second avatar - // 2. + the non-overlapping part of the third and fourth avatar - min-width: calc( - var(--avatar-stack-size) + - calc( - calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + - calc(var(--avatar-stack-size) + var(--avatar-three-margin)) * 2 - ) - ); - } + &.pc-AvatarStack--three-plus { + // this calc explained: + // 1. avatar size + the non-overlapping part of the second avatar + // 2. + the non-overlapping part of the third and fourth avatar + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) * 2 + ) + ); + } - &.pc-AvatarStack--right { - justify-content: flex-end; - .pc-AvatarItem { - margin-left: 0 !important; + &.pc-AvatarStack--right { + justify-content: flex-end; + .pc-AvatarItem { + margin-left: 0 !important; - &:first-child { - margin-right: 0; - } + &:first-child { + margin-right: 0; + } - &:nth-child(n + 2) { - margin-right: var(--avatar-two-margin); - } + &:nth-child(n + 2) { + margin-right: var(--avatar-two-margin); + } - &:nth-child(n + 3) { - margin-right: var(--avatar-three-margin); + &:nth-child(n + 3) { + margin-right: var(--avatar-three-margin); + } } - } - .pc-AvatarStackBody { - flex-direction: row-reverse; + .pc-AvatarStackBody { + flex-direction: row-reverse; - &:not(.pc-AvatarStack--disableExpand):hover, - &:not(.pc-AvatarStack--disableExpand):focus-within { - .pc-AvatarItem { - margin-right: ${get('space.1')}!important; - margin-left: 0 !important; + &:not(.pc-AvatarStack--disableExpand):hover, + &:not(.pc-AvatarStack--disableExpand):focus-within { + .pc-AvatarItem { + margin-right: ${get('space.1')}!important; + margin-left: 0 !important; - &:first-child { - margin-right: 0 !important; + &:first-child { + margin-right: 0 !important; + } } } } } - } - .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover, - .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within { - width: auto; + .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover, + .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within { + width: auto; - .pc-AvatarItem { - margin-left: ${get('space.1')}; - opacity: 100%; - visibility: visible; - ${props => (props.count === 1 ? '' : `box-shadow: inset 0 0 0 4px ${get('colors.canvas.default')};`)} - transition: + .pc-AvatarItem { + margin-left: ${get('space.1')}; + opacity: 100%; + visibility: visible; + ${props => (props.count === 1 ? '' : `box-shadow: inset 0 0 0 4px ${get('colors.canvas.default')};`)} + transition: margin 0.2s ease-in-out, opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, box-shadow 0.1s ease-in-out; - ${getGlobalFocusStyles('1px')} + ${getGlobalFocusStyles('1px')} - &:first-child { - margin-left: 0; + &:first-child { + margin-left: 0; + } } } - } - .pc-AvatarStack--disableExpand { - position: relative; - } + .pc-AvatarStack--disableExpand { + position: relative; + } - ${sx}; -` -const transformChildren = (children: React.ReactNode) => { + ${sx}; + `, +) + +const transformChildren = (children: React.ReactNode, enabled: boolean) => { return React.Children.map(children, child => { if (!React.isValidElement(child)) return child return React.cloneElement(child, { ...child.props, - className: clsx(child.props.className, 'pc-AvatarItem'), + className: clsx(child.props.className, 'pc-AvatarItem', {[classes.AvatarItem]: enabled}), }) }) } @@ -195,6 +210,44 @@ export type AvatarStackProps = { children: React.ReactNode } & SxProp +const AvatarStackBody = ({ + disableExpand, + hasInteractiveChildren, + stackContainer, + children, +}: { + disableExpand: boolean | undefined + hasInteractiveChildren: boolean | undefined + stackContainer: React.RefObject +} & React.ComponentPropsWithoutRef<'div'>) => { + const bodyClassNames = clsx('pc-AvatarStackBody', { + 'pc-AvatarStack--disableExpand': disableExpand, + }) + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + if (enabled) { + return ( + + {children} + + ) + } + return ( + + {children} + + ) +} + const AvatarStack = ({ children, alignRight, @@ -203,6 +256,7 @@ const AvatarStack = ({ className, sx: sxProp = defaultSxProp, }: AvatarStackProps) => { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) const [hasInteractiveChildren, setHasInteractiveChildren] = useState(false) const stackContainer = useRef(null) @@ -216,9 +270,6 @@ const AvatarStack = ({ }, className, ) - const bodyClassNames = clsx('pc-AvatarStackBody', { - 'pc-AvatarStack--disableExpand': disableExpand, - }) const getAvatarChildSizes = () => { const avatarSizeMap: Record = { @@ -259,6 +310,7 @@ const AvatarStack = ({ }, ) } + const childSizes = getAvatarChildSizes() useEffect(() => { if (stackContainer.current) { @@ -282,8 +334,16 @@ const AvatarStack = ({ const getResponsiveAvatarSizeStyles = () => { // if there is no size set on the AvatarStack, use the `size` props of the Avatar children to set the `--avatar-stack-size` CSS variable if (!size) { + if (enabled) { + return { + '--stackSize-narrow': `${childSizes.narrow}px`, + '--stackSize-regular': `${childSizes.regular}px`, + '--stackSize-wide': `${childSizes.wide}px`, + } + } + return getBreakpointDeclarations( - getAvatarChildSizes(), + childSizes, '--avatar-stack-size' as keyof React.CSSProperties, value => `${value}px`, ) @@ -291,6 +351,14 @@ const AvatarStack = ({ // if the `size` prop is set and responsive, set the `--avatar-stack-size` CSS variable for each viewport if (isResponsiveValue(size)) { + if (enabled) { + return { + '--stackSize-narrow': `${size.narrow || DEFAULT_AVATAR_SIZE}px`, + '--stackSize-regular': `${size.regular || DEFAULT_AVATAR_SIZE}px`, + '--stackSize-wide': `${size.wide || DEFAULT_AVATAR_SIZE}px`, + } + } + return getBreakpointDeclarations( size, '--avatar-stack-size' as keyof React.CSSProperties, @@ -303,20 +371,28 @@ const AvatarStack = ({ } const avatarStackSx = merge( - getResponsiveAvatarSizeStyles(), + !enabled && getResponsiveAvatarSizeStyles(), sxProp as SxProp, ) return ( - - 3 ? '3+' : count) : undefined} + data-align-right={enabled && alignRight ? '' : undefined} + data-responsive={enabled && (!size || isResponsiveValue(size)) ? '' : undefined} + className={clsx(wrapperClassNames, {[classes.AvatarStack]: enabled})} + style={enabled ? getResponsiveAvatarSizeStyles() : undefined} + sx={avatarStackSx} + > + {' '} - {transformChildren(children)} - + {transformChildren(children, enabled)} + ) } diff --git a/packages/react/src/Banner/Banner.docs.json b/packages/react/src/Banner/Banner.docs.json index 9451a4dbef5..9a22b629a39 100644 --- a/packages/react/src/Banner/Banner.docs.json +++ b/packages/react/src/Banner/Banner.docs.json @@ -1,10 +1,53 @@ { "id": "banner", "name": "Banner", - "status": "draft", + "status": "alpha", "a11yReviewed": true, "importPath": "@primer/react/experimental", - "stories": [], + "stories": [ + { + "id": "experimental-components-banner--default" + }, + { + "id": "experimental-components-banner-features--critical" + }, + { + "id": "experimental-components-banner-features--info" + }, + { + "id": "experimental-components-banner-features--success" + }, + { + "id": "experimental-components-banner-features--upsell" + }, + { + "id": "experimental-components-banner-features--warning" + }, + { + "id": "experimental-components-banner-features--dismiss" + }, + { + "id": "experimental-components-banner-features--dismiss-with-actions" + }, + { + "id": "experimental-components-banner-features--with-hidden-title" + }, + { + "id": "experimental-components-banner-features--with-hidden-title-and-actions" + }, + { + "id": "experimental-components-banner-features--dismissible-with-hidden-title-and-actions" + }, + { + "id": "experimental-components-banner-features--dismissible-with-hidden-title-and-secondary-action" + }, + { + "id": "experimental-components-banner-features--with-actions" + }, + { + "id": "experimental-components-banner-features--custom-icon" + } + ], "props": [ { "name": "aria-label", @@ -69,15 +112,30 @@ }, { "name": "Banner.Description", - "props": [] + "props": [ + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" + } + ] }, { "name": "Banner.PrimaryAction", - "props": [] + "props": [], + "passthrough": { + "element": "Button", + "url": "/react/Button" + } }, { "name": "Banner.SecondaryAction", - "props": [] + "props": [], + "passthrough": { + "element": "Button", + "url": "/react/Button" + } } ] } diff --git a/packages/react/src/Banner/Banner.test.tsx b/packages/react/src/Banner/Banner.test.tsx index 13fecdc6fb8..59975b0f63c 100644 --- a/packages/react/src/Banner/Banner.test.tsx +++ b/packages/react/src/Banner/Banner.test.tsx @@ -115,9 +115,9 @@ describe('Banner', () => { />, ) - expect(screen.getByRole('button', {name: 'test primary action'})).toBeInTheDocument() + expect(screen.queryAllByRole('button', {name: 'test primary action', hidden: true}).length).toBe(2) - await user.click(screen.getByRole('button', {name: 'test primary action'})) + await user.click(screen.queryAllByText('test primary action')[0]) expect(onClick).toHaveBeenCalledTimes(1) }) @@ -132,9 +132,9 @@ describe('Banner', () => { />, ) - expect(screen.getByRole('button', {name: 'test secondary action'})).toBeInTheDocument() + expect(screen.queryAllByRole('button', {name: 'test secondary action', hidden: true}).length).toBe(2) - await user.click(screen.getByRole('button', {name: 'test secondary action'})) + await user.click(screen.queryAllByText('test secondary action')[0]) expect(onClick).toHaveBeenCalledTimes(1) }) @@ -148,8 +148,8 @@ describe('Banner', () => { />, ) - expect(screen.getByRole('button', {name: 'test primary action'})).toBeInTheDocument() - expect(screen.getByRole('button', {name: 'test secondary action'})).toBeInTheDocument() + expect(screen.queryAllByRole('button', {name: 'test primary action', hidden: true}).length).toBe(2) + expect(screen.queryAllByRole('button', {name: 'test secondary action', hidden: true}).length).toBe(2) }) it('should call `onDismiss` when the dismiss button is activated', async () => { diff --git a/packages/react/src/Banner/Banner.tsx b/packages/react/src/Banner/Banner.tsx index f33021d67d7..e1c7a1119e8 100644 --- a/packages/react/src/Banner/Banner.tsx +++ b/packages/react/src/Banner/Banner.tsx @@ -1,14 +1,10 @@ import {clsx} from 'clsx' import React, {forwardRef, useEffect} from 'react' -import styled from 'styled-components' import {AlertIcon, InfoIcon, StopIcon, CheckCircleIcon, XIcon} from '@primer/octicons-react' import {Button, IconButton, type ButtonProps} from '../Button' -import {get} from '../constants' import {VisuallyHidden} from '../VisuallyHidden' import {useMergedRefs} from '../internal/hooks/useMergedRefs' -import {useFeatureFlag} from '../FeatureFlags' import classes from './Banner.module.css' -import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' type BannerVariant = 'critical' | 'info' | 'success' | 'upsell' | 'warning' @@ -88,8 +84,6 @@ const labels: Record = { warning: 'Warning', } -const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' - export const Banner = React.forwardRef(function Banner( { 'aria-label': label, @@ -111,7 +105,6 @@ export const Banner = React.forwardRef(function Banner const hasActions = primaryAction || secondaryAction const bannerRef = React.useRef(null) const ref = useMergedRefs(forwardRef, bannerRef) - const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) const supportsCustomIcon = variant === 'info' || variant === 'upsell' if (__DEV__) { @@ -137,40 +130,19 @@ export const Banner = React.forwardRef(function Banner } return ( - - {!enabled ? : null} - - {icon && supportsCustomIcon ? icon : iconForVariant[variant]} - - - + {icon && supportsCustomIcon ? icon : iconForVariant[variant]} + + {title ? ( hideTitle ? ( @@ -189,221 +161,15 @@ export const Banner = React.forwardRef(function Banner ) : null} - + ) }) -const StyledBanner = toggleStyledComponent( - CSS_MODULES_FEATURE_FLAG, - /** - * For styling, it's important that the icons and the text have the same height - * for alignment to occur in multi-line scenarios. Currently, we use a - * line-height of `20px` so that means that the height of icons should match - * that value. - */ - 'div', - styled.div` - display: grid; - grid-template-columns: auto minmax(0, 1fr) auto; - align-items: start; - background-color: var(--banner-bgColor); - border: var(--borderWidth-thin, 1px) solid var(--banner-borderColor); - padding: var(--base-size-8, 0.5rem); - border-radius: var(--borderRadius-medium, ${get('radii.2')}); - - @supports (container-type: inline-size) { - container: banner / inline-size; - } - - &[data-variant='critical'] { - --banner-bgColor: ${get('colors.danger.subtle')}; - --banner-borderColor: ${get('colors.danger.muted')}; - --banner-icon-fgColor: ${get('colors.danger.fg')}; - } - - &[data-variant='info'] { - --banner-bgColor: ${get('colors.accent.subtle')}; - --banner-borderColor: ${get('colors.accent.muted')}; - --banner-icon-fgColor: ${get('colors.accent.fg')}; - } - - &[data-variant='success'] { - --banner-bgColor: ${get('colors.success.subtle')}; - --banner-borderColor: ${get('colors.success.muted')}; - --banner-icon-fgColor: ${get('colors.success.fg')}; - } - - &[data-variant='upsell'] { - --banner-bgColor: var(--bgColor-upsell-muted, ${get('colors.done.subtle')}); - --banner-borderColor: var(--borderColor-upsell-muted, ${get('colors.done.muted')}); - --banner-icon-fgColor: var(--fgColor-upsell-muted, ${get('colors.done.fg')}); - } - - &[data-variant='warning'] { - --banner-bgColor: ${get('colors.attention.subtle')}; - --banner-borderColor: ${get('colors.attention.muted')}; - --banner-icon-fgColor: ${get('colors.attention.fg')}; - } - - /* BannerIcon ------------------------------------------------------------- */ - - .BannerIcon { - display: grid; - place-items: center; - padding: var(--base-size-8, 0.5rem); - } - - .BannerIcon svg { - color: var(--banner-icon-fgColor); - fill: var(--banner-icon-fgColor); - /* 20px is the line box height of the trailing action buttons */ - height: var(--base-size-20, 1.25rem); - } - - &[data-title-hidden=''] .BannerIcon svg { - height: var(--base-size-16, 1rem); - } - - /* BannerContainer -------------------------------------------------------- */ - - .BannerContainer { - font-size: var(--text-body-size-medium, 0.875rem); - align-items: start; - line-height: var(--text-body-lineHeight-medium, calc(20 / 14)); - row-gap: var(--base-size-4, 0.25rem); - column-gap: var(--base-size-4, 0.25rem); - } - - & :where(.BannerContainer) { - display: flex; - flex-wrap: wrap; - justify-content: space-between; - } - - &[data-dismissible]:not([data-title-hidden='']) .BannerContainer { - display: grid; - grid-template-columns: auto; - grid-template-rows: auto; - } - - /* BannerContent ---------------------------------------------------------- */ - - .BannerContent { - display: grid; - row-gap: var(--base-size-4, 0.25rem); - grid-column-start: 1; - margin-block: var(--base-size-8, 0.5rem); - } - - &[data-title-hidden=''] .BannerContent { - margin-block: var(--base-size-6, 0.375rem); - } - - @media screen and (min-width: 544px) { - .BannerContent { - flex: 1 1 0%; - } - } - - .BannerTitle { - margin: 0; - font-size: inherit; - font-weight: var(--base-text-weight-semibold, 600); - } - - /* BannerActions ---------------------------------------------------------- */ - .BannerActionsContainer { - display: flex; - column-gap: var(--base-size-12, 0.5rem); - align-items: center; - } - - .BannerActions :where([data-primary-action='trailing']) { - display: none; - } - - @media screen and (min-width: 544px) { - .BannerActions :where([data-primary-action='trailing']) { - display: flex; - } - - .BannerActions :where([data-primary-action='leading']) { - display: none; - } - } - - &[data-dismissible]:not([data-title-hidden]) .BannerActions { - margin-block-end: var(--base-size-6, 0.375rem); - } - - &[data-dismissible]:not([data-title-hidden]) .BannerActionsContainer[data-primary-action='trailing'] { - display: none; - } - - &[data-dismissible]:not([data-title-hidden]) .BannerActionsContainer[data-primary-action='leading'] { - display: flex; - } - - /* BannerDismiss ---------------------------------------------------------- */ - - .BannerDismiss { - display: grid; - place-items: center; - padding: var(--base-size-8, 0.5rem); - margin-inline-start: var(--base-size-4, 0.25rem); - } - - .BannerDismiss svg { - color: var(--banner-icon-fgColor); - } - `, -) - -const BannerContainerQuery = ` - @container banner (max-width: 500px) { - .BannerContainer { - display: grid; - grid-template-rows: auto auto; - } - - .BannerActions { - margin-block-end: var(--size-small, 0.375rem); - } - - .BannerActions [data-primary-action="trailing"] { - display: none; - } - - .BannerActions [data-primary-action="leading"] { - display: flex; - } - } - - @container banner (min-width: 500px) { - .BannerContainer { - display: grid; - grid-template-columns: auto auto; - } - - .BannerActions [data-primary-action="trailing"] { - display: flex; - min-height: var(--base-size-32, 2rem); - } - - .BannerActions [data-primary-action="leading"] { - display: none; - } - } -` - type HeadingElement = 'h2' | 'h3' | 'h4' | 'h5' | 'h6' export type BannerTitleProps = { @@ -413,16 +179,8 @@ export type BannerTitleProps = { export function BannerTitle(props: BannerTitleProps) { const {as: Heading = 'h2', className, children, ...rest} = props - const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) return ( - + {children} ) @@ -444,31 +202,13 @@ export type BannerActionsProps = { } export function BannerActions({primaryAction, secondaryAction}: BannerActionsProps) { - const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) return ( - - + + {secondaryAction ?? null} {primaryAction ?? null} - + {primaryAction ?? null} {secondaryAction ?? null} diff --git a/packages/react/src/BaseStyles.dev.stories.tsx b/packages/react/src/BaseStyles.dev.stories.tsx new file mode 100644 index 00000000000..d313f089009 --- /dev/null +++ b/packages/react/src/BaseStyles.dev.stories.tsx @@ -0,0 +1,11 @@ +import {BaseStyles} from '.' +import type {Meta} from '@storybook/react' +import React from 'react' +import type {ComponentProps} from './utils/types' + +export default { + title: 'Behaviors/BaseStyles/Dev', + component: BaseStyles, +} as Meta> + +export const Default = () => Hello diff --git a/packages/react/src/BaseStyles.module.css b/packages/react/src/BaseStyles.module.css new file mode 100644 index 00000000000..f1c0e87ec64 --- /dev/null +++ b/packages/react/src/BaseStyles.module.css @@ -0,0 +1,50 @@ +/* stylelint-disable selector-max-specificity */ +/* stylelint-disable selector-type-no-unknown */ + +/* -------------------------------- + * Global Styles + *--------------------------------- */ +* { + box-sizing: border-box; +} + +body { + margin: 0; +} + +table { + /* stylelint-disable-next-line primer/borders */ + border-collapse: collapse; +} + +[role='button']:focus:not(:focus-visible):not(.focus-visible), +[role='tabpanel'][tabindex='0']:focus:not(:focus-visible):not(.focus-visible), +button:focus:not(:focus-visible):not(.focus-visible), +summary:focus:not(:focus-visible):not(.focus-visible), +a:focus:not(:focus-visible):not(.focus-visible) { + outline: none; + box-shadow: none; +} + +[tabindex='0']:focus:not(:focus-visible):not(.focus-visible), +details-dialog:focus:not(:focus-visible):not(.focus-visible) { + outline: none; +} + +/* -------------------------------------------------------------------------- */ + +.BaseStyles { + /* Global styles for light mode */ + &:has([data-color-mode='light']) { + input & { + color-scheme: light; + } + } + + /* Global styles for dark mode */ + &:has([data-color-mode='dark']) { + input & { + color-scheme: dark; + } + } +} diff --git a/packages/react/src/BaseStyles.tsx b/packages/react/src/BaseStyles.tsx index 351c1cb39f2..2a5ffb24347 100644 --- a/packages/react/src/BaseStyles.tsx +++ b/packages/react/src/BaseStyles.tsx @@ -1,13 +1,19 @@ import React from 'react' +import {clsx} from 'clsx' import styled, {createGlobalStyle} from 'styled-components' +import type {ComponentProps} from './utils/types' import type {SystemCommonProps, SystemTypographyProps} from './constants' import {COMMON, TYPOGRAPHY} from './constants' import {useTheme} from './ThemeProvider' -import type {ComponentProps} from './utils/types' +import {useFeatureFlag} from './FeatureFlags' +import {toggleStyledComponent} from './internal/utils/toggleStyledComponent' +import classes from './BaseStyles.module.css' // load polyfill for :focus-visible import 'focus-visible' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' + const GlobalStyle = createGlobalStyle<{colorScheme?: 'light' | 'dark'}>` * { box-sizing: border-box; } body { margin: 0; } @@ -29,27 +35,34 @@ const GlobalStyle = createGlobalStyle<{colorScheme?: 'light' | 'dark'}>` } ` -const Base = styled.div` - ${TYPOGRAPHY}; - ${COMMON}; -` +const Base = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + ${TYPOGRAPHY}; + ${COMMON}; + `, +) export type BaseStylesProps = ComponentProps function BaseStyles(props: BaseStylesProps) { - const {children, color = 'fg.default', fontFamily = 'normal', lineHeight = 'default', ...rest} = props + const {children, color = 'fg.default', fontFamily = 'normal', lineHeight = 'default', className, ...rest} = props const {colorScheme, dayScheme, nightScheme} = useTheme() + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + const stylingProps = enabled ? {className: clsx(classes.BaseStyles, className)} : {className} /** * We need to map valid primer/react color modes onto valid color modes for primer/primitives * valid color modes for primer/primitives: auto | light | dark * valid color modes for primer/primer: auto | day | night | light | dark */ - return ( - + {!enabled && } {children} ) diff --git a/packages/react/src/Blankslate/Blankslate.docs.json b/packages/react/src/Blankslate/Blankslate.docs.json index 9241118b4ea..234cfa9cb89 100644 --- a/packages/react/src/Blankslate/Blankslate.docs.json +++ b/packages/react/src/Blankslate/Blankslate.docs.json @@ -3,13 +3,35 @@ "name": "Blankslate", "status": "draft", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "experimental-components-blankslate--default" + }, + { + "id": "experimental-components-blankslate-features--with-visual" + }, + { + "id": "experimental-components-blankslate-features--with-primary-action" + }, + { + "id": "experimental-components-blankslate-features--with-secondary-action" + }, + { + "id": "experimental-components-blankslate-features--with-border" + }, + { + "id": "experimental-components-blankslate-features--narrow" + }, + { + "id": "experimental-components-blankslate-features--spacious" + } + ], "importPath": "@primer/react/experimental", "props": [ { "name": "border", "type": "boolean", - "description": "" + "description": "Add a border around this component" }, { "name": "narrow", @@ -20,6 +42,12 @@ "name": "spacious", "type": "boolean", "description": "" + }, + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" } ], "subcomponents": [ @@ -45,7 +73,8 @@ "props": [ { "name": "href", - "type": "string" + "type": "string", + "description": "Link to complete primary action" } ] }, @@ -54,7 +83,8 @@ "props": [ { "name": "href", - "type": "string" + "type": "string", + "description": "Link to complete secondary action" } ] } diff --git a/packages/react/src/Blankslate/Blankslate.module.css b/packages/react/src/Blankslate/Blankslate.module.css index 05fa2c0a442..5f0029cbcfd 100644 --- a/packages/react/src/Blankslate/Blankslate.module.css +++ b/packages/react/src/Blankslate/Blankslate.module.css @@ -31,6 +31,7 @@ .Description { margin: 0; margin-bottom: var(--base-size-8); + text-align: center; } .Heading { diff --git a/packages/react/src/BranchName/BranchName.docs.json b/packages/react/src/BranchName/BranchName.docs.json index 7529b5ef337..585a62d2720 100644 --- a/packages/react/src/BranchName/BranchName.docs.json +++ b/packages/react/src/BranchName/BranchName.docs.json @@ -3,7 +3,17 @@ "name": "BranchName", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-branchname--default" + }, + { + "id": "components-branchname-features--with-branch-icon" + }, + { + "id": "components-branchname-features--not-a-link" + } + ], "importPath": "@primer/react", "props": [ { @@ -21,4 +31,4 @@ } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/BranchName/BranchName.tsx b/packages/react/src/BranchName/BranchName.tsx index 4b6d7697c9f..d2d4556b577 100644 --- a/packages/react/src/BranchName/BranchName.tsx +++ b/packages/react/src/BranchName/BranchName.tsx @@ -31,7 +31,7 @@ type BranchNameProps = { // eslint-disable-next-line @typescript-eslint/no-explicit-any function BranchName(props: BranchNameProps, ref: ForwardedRef) { const {as: BaseComponent = 'a', className, children, sx, ...rest} = props - const enabled = useFeatureFlag('primer_react_css_modules_team') + const enabled = useFeatureFlag('primer_react_css_modules_staff') if (enabled) { if (sx) { diff --git a/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json b/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json index 640e078d600..1ee3dcb3b4c 100644 --- a/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json +++ b/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json @@ -3,9 +3,20 @@ "name": "Breadcrumbs", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-breadcrumbs--default" + } + ], "importPath": "@primer/react", "props": [ + { + "name": "className", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "children", "type": "Breadcrumbs.Item[]", @@ -25,7 +36,14 @@ "name": "selected", "type": "boolean", "defaultValue": "false", - "description": "" + "description": "Whether this item represents the current page" + }, + { + "name": "to", + "type": "string | Partial", + "required": false, + "description": "Used when the item is rendered using a component like React Router's `Link`. The path to navigate to.", + "defaultValue": "" }, { "name": "ref", @@ -47,4 +65,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/react/src/Breadcrumbs/Breadcrumbs.module.css b/packages/react/src/Breadcrumbs/Breadcrumbs.module.css new file mode 100644 index 00000000000..96c61e7072c --- /dev/null +++ b/packages/react/src/Breadcrumbs/Breadcrumbs.module.css @@ -0,0 +1,60 @@ +.BreadcrumbsBase { + display: flex; + justify-content: space-between; +} + +.BreadcrumbsList { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; +} + +.ItemWrapper { + display: inline-block; + font-size: var(--text-body-size-medium); + white-space: nowrap; + list-style: none; + + &::after { + display: inline-block; + height: 0.8em; + /* stylelint-disable-next-line primer/spacing */ + margin: 0 0.5em; + font-size: var(--text-body-size-medium); + content: ''; + /* stylelint-disable-next-line primer/borders, primer/colors */ + border-right: 0.1em solid var(--fgColor-muted); + transform: rotate(15deg) translateY(0.0625em); + } + + &:first-child { + margin-left: 0; + } + + &:last-child { + &::after { + content: none; + } + } +} + +.Item { + display: inline-block; + font-size: var(--text-body-size-medium); + color: var(--fgColor-link); + text-decoration: none; + + &:hover, + &:focus { + text-decoration: underline; + } +} + +.ItemSelected { + color: var(--fgColor-default); + pointer-events: none; + + &:focus { + text-decoration: none; + } +} diff --git a/packages/react/src/Breadcrumbs/Breadcrumbs.tsx b/packages/react/src/Breadcrumbs/Breadcrumbs.tsx index 7b1753aa853..32b72149679 100644 --- a/packages/react/src/Breadcrumbs/Breadcrumbs.tsx +++ b/packages/react/src/Breadcrumbs/Breadcrumbs.tsx @@ -7,38 +7,51 @@ import {get} from '../constants' import type {SxProp} from '../sx' import sx from '../sx' import type {ComponentProps} from '../utils/types' +import classes from './Breadcrumbs.module.css' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' const SELECTED_CLASS = 'selected' +const CSS_MODULES_FLAG = 'primer_react_css_modules_team' -const Wrapper = styled.li` - display: inline-block; - white-space: nowrap; - list-style: none; - &::after { - font-size: ${get('fontSizes.1')}; - content: ''; +const Wrapper = toggleStyledComponent( + CSS_MODULES_FLAG, + 'li', + styled.li` display: inline-block; - height: 0.8em; - margin: 0 0.5em; - border-right: 0.1em solid; - border-color: ${get('colors.fg.muted')}; - transform: rotate(15deg) translateY(0.0625em); - } - &:first-child { - margin-left: 0; - } - &:last-child { + white-space: nowrap; + list-style: none; &::after { - content: none; + font-size: ${get('fontSizes.1')}; + content: ''; + display: inline-block; + height: 0.8em; + margin: 0 0.5em; + border-right: 0.1em solid; + border-color: ${get('colors.fg.muted')}; + transform: rotate(15deg) translateY(0.0625em); } - } -` + &:first-child { + margin-left: 0; + } + &:last-child { + &::after { + content: none; + } + } + `, +) -const BreadcrumbsBase = styled.nav` - display: flex; - justify-content: space-between; - ${sx}; -` +const BreadcrumbsBase = toggleStyledComponent( + CSS_MODULES_FLAG, + 'nav', + styled.nav` + display: flex; + justify-content: space-between; + ${sx}; + `, +) export type BreadcrumbsProps = React.PropsWithChildren< { @@ -46,13 +59,31 @@ export type BreadcrumbsProps = React.PropsWithChildren< } & SxProp > +const BreadcrumbsList = ({children}: React.PropsWithChildren) => { + const enabled = useFeatureFlag(CSS_MODULES_FLAG) + if (enabled) { + return {children} + } + + return ( + + {children} + + ) +} + function Breadcrumbs({className, children, sx: sxProp}: React.PropsWithChildren) { - const wrappedChildren = React.Children.map(children, child => {child}) + const enabled = useFeatureFlag(CSS_MODULES_FLAG) + const wrappedChildren = React.Children.map(children, child => ( + {child} + )) return ( - - - {wrappedChildren} - + + {wrappedChildren} ) } @@ -60,29 +91,48 @@ function Breadcrumbs({className, children, sx: sxProp}: React.PropsWithChildren< type StyledBreadcrumbsItemProps = { to?: To selected?: boolean -} & SxProp - -const BreadcrumbsItem = styled.a.attrs(props => ({ - className: clsx(props.selected && SELECTED_CLASS, props.className), - 'aria-current': props.selected ? 'page' : null, -}))` - color: ${get('colors.accent.fg')}; - display: inline-block; - font-size: ${get('fontSizes.1')}; - text-decoration: none; - &:hover, - &:focus { - text-decoration: underline; - } - &.selected { - color: ${get('colors.fg.default')}; - pointer-events: none; - } - &.selected:focus { + className?: string +} & SxProp & + React.ComponentPropsWithoutRef<'a'> + +const StyledBreadcrumbsItem = toggleStyledComponent( + CSS_MODULES_FLAG, + 'a', + styled.a` + color: ${get('colors.accent.fg')}; + display: inline-block; + font-size: ${get('fontSizes.1')}; text-decoration: none; - } - ${sx}; -` + &:hover, + &:focus { + text-decoration: underline; + } + &.selected { + color: ${get('colors.fg.default')}; + pointer-events: none; + } + &.selected:focus { + text-decoration: none; + } + ${sx}; + `, +) + +const BreadcrumbsItem = React.forwardRef(({selected, className, ...rest}, ref) => { + const enabled = useFeatureFlag(CSS_MODULES_FLAG) + return ( + + ) +}) as PolymorphicForwardRefComponent<'a', StyledBreadcrumbsItemProps> Breadcrumbs.displayName = 'Breadcrumbs' diff --git a/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap b/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap index 9b4c8a741f8..250ad1236ce 100644 --- a/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap +++ b/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap @@ -28,6 +28,5 @@ exports[`Breadcrumbs.Item respects the "selected" prop 1`] = ` `; diff --git a/packages/react/src/Button/Button.docs.json b/packages/react/src/Button/Button.docs.json index 627f75d6808..39e688b1acf 100644 --- a/packages/react/src/Button/Button.docs.json +++ b/packages/react/src/Button/Button.docs.json @@ -3,7 +3,86 @@ "name": "Button", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-button--default" + }, + { + "id": "components-button-features--primary" + }, + { + "id": "components-button-features--danger" + }, + { + "id": "components-button-features--invisible" + }, + { + "id": "components-button-features--link" + }, + { + "id": "components-button-features--leading-visual" + }, + { + "id": "components-button-features--trailing-visual" + }, + { + "id": "components-button-features--trailing-counter" + }, + { + "id": "components-button-features--trailing-counter-with-no-text" + }, + { + "id": "components-button-features--trailing-counter-all-variants" + }, + { + "id": "components-button-features--trailing-action" + }, + { + "id": "components-button-features--block" + }, + { + "id": "components-button-features--disabled" + }, + { + "id": "components-button-features--inactive" + }, + { + "id": "components-button-features--small" + }, + { + "id": "components-button-features--medium" + }, + { + "id": "components-button-features--large" + }, + { + "id": "components-button-features--loading" + }, + { + "id": "components-button-features--loading-custom-announcement" + }, + { + "id": "components-button-features--loading-with-leading-visual" + }, + { + "id": "components-button-features--loading-with-trailing-visual" + }, + { + "id": "components-button-features--loading-with-trailing-action" + }, + { + "id": "components-button-features--loading-trigger" + }, + { + "id": "components-button-features--label-wrap" + }, + { + "id": "components-button-features--inactive-button-with-tooltip" + }, + { + "id": "components-button-features--expanded-button" + } + ], "importPath": "@primer/react", "props": [ { @@ -29,7 +108,7 @@ }, { "name": "count", - "type": "number | string", + "type": "number", "description": "For counter buttons, the number to display." }, { @@ -83,9 +162,14 @@ "type": "React.ElementType", "description": "A visual to display after the button text." }, + { + "name": "trailingAction", + "type": "React.ElementType", + "description": "Trailing action appears to the right of the trailing visual and is always locked to the end" + }, { "name": "variant", - "type": "'default'\n| 'primary'\n| 'danger'\n| 'invisible'", + "type": "'default'\n| 'primary'\n| 'danger'\n| 'invisible'\n| 'link'", "defaultValue": "'default'", "description": "Change the visual style of the button." }, @@ -94,6 +178,12 @@ "type": "boolean", "defaultValue": "false", "description": "Whether the button label should wrap to multiple lines of it is longer than the button width." + }, + { + "name": "disabled", + "type": "boolean", + "description": "Avoid disabling buttons because it will make them inaccessible to users who rely on keyboard navigation. Buttons that are disabled can not be clicked, selected, or navigated through.", + "defaultValue": "" } ], "passthrough": { diff --git a/packages/react/src/Button/ButtonBase.tsx b/packages/react/src/Button/ButtonBase.tsx index f64137b8433..d49124a624f 100644 --- a/packages/react/src/Button/ButtonBase.tsx +++ b/packages/react/src/Button/ButtonBase.tsx @@ -1,13 +1,9 @@ import type {ComponentPropsWithRef} from 'react' -import React, {forwardRef, useMemo} from 'react' +import React, {forwardRef} from 'react' import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' import Box from '../Box' -import type {BetterSystemStyleObject} from '../sx' -import {merge} from '../sx' -import {useTheme} from '../ThemeProvider' import type {ButtonProps} from './types' -import {StyledButton} from './types' -import {getVariantStyles, getButtonStyles, getAlignContentSize} from './styles' +import {getAlignContentSize} from './styles' import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef' import {defaultSxProp} from '../utils/defaultSxProp' import {VisuallyHidden} from '../VisuallyHidden' @@ -18,20 +14,8 @@ import {ConditionalWrapper} from '../internal/components/ConditionalWrapper' import {AriaStatus} from '../live-region' import {clsx} from 'clsx' import classes from './ButtonBase.module.css' -import {useFeatureFlag} from '../FeatureFlags' import {isElement} from 'react-is' -const iconWrapStyles = { - display: 'flex', - pointerEvents: 'none', -} - -const renderVisual = (Visual: React.ElementType | React.ReactElement, loading: boolean, visualName: string) => ( - - {loading ? : isElement(Visual) ? Visual : } - -) - const renderModuleVisual = ( Visual: React.ElementType | React.ReactElement, loading: boolean, @@ -70,17 +54,9 @@ const ButtonBase = forwardRef( ...rest } = props - const enabled = useFeatureFlag('primer_react_css_modules_ga') const innerRef = React.useRef(null) useRefObjectAsForwardedRef(forwardedRef, innerRef) - const {theme} = useTheme() - const baseStyles = useMemo(() => { - return merge.all([getButtonStyles(theme), getVariantStyles(variant, theme)]) - }, [theme, variant]) - const sxStyles = useMemo(() => { - return merge(baseStyles, sxProp) - }, [baseStyles, sxProp]) const uuid = useId(id) const loadingAnnouncementID = `${uuid}-loading-announcement` @@ -104,131 +80,7 @@ const ButtonBase = forwardRef( }, [innerRef]) } - if (enabled) { - if (sxProp !== defaultSxProp) { - return ( - - Boolean(descriptionID)) - .join(' ')} - // aria-labelledby is needed because the accessible name becomes unset when the button is in a loading state. - // We only set it when the button is in a loading state because it will supercede the aria-label when the screen - // reader announces the button name. - aria-labelledby={ - loading - ? [`${uuid}-label`, ariaLabelledBy].filter(labelID => Boolean(labelID)).join(' ') - : ariaLabelledBy - } - id={id} - onClick={loading ? undefined : onClick} - > - {Icon ? ( - loading ? ( - - ) : isElement(Icon) ? ( - Icon - ) : ( - - ) - ) : ( - <> - - { - /* If there are no leading/trailing visuals/actions to replace with a loading spinner, - render a loading spiner in place of the button content. */ - loading && - !LeadingVisual && - !TrailingVisual && - !TrailingAction && - renderModuleVisual(Spinner, loading, 'loadingSpinner', false) - } - { - /* Render a leading visual unless the button is in a loading state. - Then replace the leading visual with a loading spinner. */ - LeadingVisual && renderModuleVisual(LeadingVisual, Boolean(loading), 'leadingVisual', false) - } - {children && ( - - {children} - - )} - { - /* If there is a count, render a counter label unless there is a trailing visual. - Then render the counter label as a trailing visual. - Replace the counter label or the trailing visual with a loading spinner if: - - the button is in a loading state - - there is no leading visual to replace with a loading spinner - */ - count !== undefined && !TrailingVisual - ? renderModuleVisual( - () => ( - - {count} - - ), - Boolean(loading) && !LeadingVisual, - 'trailingVisual', - true, - ) - : TrailingVisual - ? renderModuleVisual( - TrailingVisual, - Boolean(loading) && !LeadingVisual, - 'trailingVisual', - false, - ) - : null - } - - { - /* If there is a trailing action, render it unless the button is in a loading state - and there is no leading or trailing visual to replace with a loading spinner. */ - TrailingAction && - renderModuleVisual( - TrailingAction, - Boolean(loading) && !LeadingVisual && !TrailingVisual, - 'trailingAction', - false, - ) - } - > - )} - - {loading && ( - - {loadingAnnouncement} - - )} - - ) - } + if (sxProp !== defaultSxProp) { return ( - Boolean(labelID)).join(' ') : ariaLabelledBy } id={id} - // @ts-ignore temporary disable as we migrate to css modules, until we remove PolymorphicForwardRefComponent onClick={loading ? undefined : onClick} > {Icon ? ( @@ -275,7 +127,12 @@ const ButtonBase = forwardRef( ) ) : ( <> - + { /* If there are no leading/trailing visuals/actions to replace with a loading spinner, render a loading spiner in place of the button content. */ @@ -287,7 +144,7 @@ const ButtonBase = forwardRef( } { /* Render a leading visual unless the button is in a loading state. - Then replace the leading visual with a loading spinner. */ + Then replace the leading visual with a loading spinner. */ LeadingVisual && renderModuleVisual(LeadingVisual, Boolean(loading), 'leadingVisual', false) } {children && ( @@ -322,7 +179,7 @@ const ButtonBase = forwardRef( ) : null } - + { /* If there is a trailing action, render it unless the button is in a loading state and there is no leading or trailing visual to replace with a loading spinner. */ @@ -336,7 +193,7 @@ const ButtonBase = forwardRef( } > )} - + {loading && ( {loadingAnnouncement} @@ -345,7 +202,6 @@ const ButtonBase = forwardRef( ) } - return ( - Boolean(descriptionID)) @@ -379,6 +235,7 @@ const ButtonBase = forwardRef( loading ? [`${uuid}-label`, ariaLabelledBy].filter(labelID => Boolean(labelID)).join(' ') : ariaLabelledBy } id={id} + // @ts-ignore temporary disable as we migrate to css modules, until we remove PolymorphicForwardRefComponent onClick={loading ? undefined : onClick} > {Icon ? ( @@ -391,7 +248,7 @@ const ButtonBase = forwardRef( ) ) : ( <> - + { /* If there are no leading/trailing visuals/actions to replace with a loading spinner, render a loading spiner in place of the button content. */ @@ -399,15 +256,15 @@ const ButtonBase = forwardRef( !LeadingVisual && !TrailingVisual && !TrailingAction && - renderVisual(Spinner, loading, 'loadingSpinner') + renderModuleVisual(Spinner, loading, 'loadingSpinner', false) } { /* Render a leading visual unless the button is in a loading state. Then replace the leading visual with a loading spinner. */ - LeadingVisual && renderVisual(LeadingVisual, Boolean(loading), 'leadingVisual') + LeadingVisual && renderModuleVisual(LeadingVisual, Boolean(loading), 'leadingVisual', false) } {children && ( - + {children} )} @@ -419,25 +276,35 @@ const ButtonBase = forwardRef( - there is no leading visual to replace with a loading spinner */ count !== undefined && !TrailingVisual - ? renderVisual( - () => {count}, + ? renderModuleVisual( + () => ( + + {count} + + ), Boolean(loading) && !LeadingVisual, 'trailingVisual', + true, ) : TrailingVisual - ? renderVisual(TrailingVisual, Boolean(loading) && !LeadingVisual, 'trailingVisual') + ? renderModuleVisual(TrailingVisual, Boolean(loading) && !LeadingVisual, 'trailingVisual', false) : null } - + { /* If there is a trailing action, render it unless the button is in a loading state and there is no leading or trailing visual to replace with a loading spinner. */ TrailingAction && - renderVisual(TrailingAction, Boolean(loading) && !LeadingVisual && !TrailingVisual, 'trailingAction') + renderModuleVisual( + TrailingAction, + Boolean(loading) && !LeadingVisual && !TrailingVisual, + 'trailingAction', + false, + ) } > )} - + {loading && ( {loadingAnnouncement} diff --git a/packages/react/src/Button/IconButton.docs.json b/packages/react/src/Button/IconButton.docs.json index dc357c85695..88d7ae75938 100644 --- a/packages/react/src/Button/IconButton.docs.json +++ b/packages/react/src/Button/IconButton.docs.json @@ -3,7 +3,56 @@ "name": "IconButton", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-iconbutton--default" + }, + { + "id": "components-iconbutton-features--primary" + }, + { + "id": "components-iconbutton-features--danger" + }, + { + "id": "components-iconbutton-features--invisible" + }, + { + "id": "components-iconbutton-features--disabled" + }, + { + "id": "components-iconbutton-features--small" + }, + { + "id": "components-iconbutton-features--medium" + }, + { + "id": "components-iconbutton-features--large" + }, + { + "id": "components-iconbutton-features--with-description" + }, + { + "id": "components-iconbutton-features--external-tooltip" + }, + { + "id": "components-iconbutton-features--external-tooltip-version1" + }, + { + "id": "components-iconbutton-features--as-a-menu-anchor" + }, + { + "id": "components-iconbutton-features--loading" + }, + { + "id": "components-iconbutton-features--loading-trigger" + }, + { + "id": "components-iconbutton-features--keybinding-hint-on-description" + }, + { + "id": "components-iconbutton-features--keybinding-hint" + } + ], "importPath": "@primer/react", "props": [ { @@ -46,8 +95,13 @@ "name": "keyshortcuts", "type": "string", "defaultValue": "", - "required": false, - "description": "Keyboard shortcuts that trigger the button. Keyboard shortcut will be appended to the accessible name or description (depending on the tooltip type) of the button with a comma (i.e. Bold, Command+B) and it will be displayed in the tooltip." + "deprecated": true, + "description": "Use `keybindingHint` instead." + }, + { + "name": "keybindingHint", + "type": "string", + "description": "Optional keybinding hint to show in the tooltip for this button. See the `KeybindingHint` component documentation for the correct format for this string. Has no effect if tooltip is overridden or disabled. Does **not** bind any keybindings for this button - this is only for visual hints." }, { "name": "tooltipDirection", @@ -56,6 +110,13 @@ "description": "The direction of the tooltip. ", "required": false }, + { + "name": "description", + "type": "string", + "required": false, + "description": "If `description` is provided, we will use a Tooltip to describe the button. Then `aria-label` is used to label the button.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Button/IconButton.features.stories.tsx b/packages/react/src/Button/IconButton.features.stories.tsx index e8581bd6482..d8db5c4b4c2 100644 --- a/packages/react/src/Button/IconButton.features.stories.tsx +++ b/packages/react/src/Button/IconButton.features.stories.tsx @@ -84,13 +84,13 @@ export const LoadingTrigger = () => { return } -export const KeyshortcutsOnDescription = () => ( +export const KeybindingHintOnDescription = () => ( ) -export const Keyshortcuts = () => +export const KeybindingHint = () => diff --git a/packages/react/src/Button/IconButton.tsx b/packages/react/src/Button/IconButton.tsx index 4b3d00f6e3e..4b86ea1bd48 100644 --- a/packages/react/src/Button/IconButton.tsx +++ b/packages/react/src/Button/IconButton.tsx @@ -21,6 +21,7 @@ const IconButton = forwardRef( // This is planned to be a temporary prop until the default tooltip on icon buttons are fully rolled out. unsafeDisableTooltip = false, keyshortcuts, + keybindingHint, className, ...props }, @@ -58,15 +59,14 @@ const IconButton = forwardRef( /> ) } else { - // Does it have keyshortcuts? - const tooltipSuffix = keyshortcuts ? `, ${keyshortcuts}` : '' const tooltipText = description ?? ariaLabel return ( { expect(triggerEl).toHaveAttribute('aria-keyshortcuts', 'Command+H') }) it('should append the keyshortcuts to the tooltip text that labels the icon button when keyshortcuts prop is passed', () => { - const {getByRole, getByText} = render() - const triggerEl = getByRole('button') - const tooltipEl = getByText('Heart, Command+H') - expect(tooltipEl).toBeInTheDocument() - expect(triggerEl).toHaveAttribute('aria-labelledby', tooltipEl.id) + const {getByRole} = render() + const triggerEl = getByRole('button', {name: 'Heart ( command h )'}) + expect(triggerEl).toBeInTheDocument() }) - it('should render aria-keyshorts on an icon button when keyshortcuts prop is passed (Description Type)', () => { + it('should render aria-keyshortcuts on an icon button when keyshortcuts prop is passed (Description Type)', () => { const {getByRole} = render( , ) @@ -354,12 +352,10 @@ describe('Button', () => { expect(triggerEl).toHaveAttribute('aria-keyshortcuts', 'Command+H') }) it('should append the keyshortcuts to the tooltip text that describes the icon button when keyshortcuts prop is passed (Description Type)', () => { - const {getByRole, getByText} = render( + const {getByRole} = render( , ) - const triggerEl = getByRole('button') - const tooltipEl = getByText('Love is all around, Command+H') - expect(tooltipEl).toBeInTheDocument() - expect(triggerEl.getAttribute('aria-describedby')).toEqual(expect.stringContaining(tooltipEl.id)) + const triggerEl = getByRole('button', {name: 'Heart'}) + expect(triggerEl).toHaveAccessibleDescription('Love is all around ( command h )') }) }) diff --git a/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap b/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap index 27d49686024..9808d784a94 100644 --- a/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap +++ b/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap @@ -1,315 +1,24 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Button respects block prop 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Block @@ -319,314 +28,23 @@ exports[`Button respects block prop 1`] = ` `; exports[`Button respects the alignContent prop 1`] = ` -.c1 { - -webkit-box-pack: start; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Align start @@ -636,314 +54,23 @@ exports[`Button respects the alignContent prop 1`] = ` `; exports[`Button respects the large size prop 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Smol @@ -953,314 +80,23 @@ exports[`Button respects the large size prop 1`] = ` `; exports[`Button respects the small size prop 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Smol @@ -1270,317 +106,23 @@ exports[`Button respects the small size prop 1`] = ` `; exports[`Button styles danger button appropriately 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.danger.text; - background-color: btn.bg; - box-shadow: undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: btn.danger.disabledText; - background-color: btn.danger.disabledBg; - border-color: var(--button-default-borderColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: btn.danger.disabledCounterFg; - background-color: btn.danger.disabledCounterBg; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - color: btn.danger.counterFg; - background-color: btn.danger.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - color: btn.danger.hoverText; - background-color: btn.danger.hoverBg; - border-color: btn.danger.hoverBorder; - box-shadow: undefined; -} - -.c0:hover:not([disabled]):not([data-inactive]) [data-component=ButtonCounter] { - background-color: btn.danger.hoverCounterBg; - color: btn.danger.hoverCounterFg; -} - -.c0:active:not([disabled]):not([data-inactive]) { - color: btn.danger.selectedText; - background-color: btn.danger.selectedBg; - box-shadow: undefined; - border-color: btn.danger.selectedBorder; -} - -.c0[aria-expanded=true] { - color: btn.danger.selectedText; - background-color: btn.danger.selectedBg; - box-shadow: undefined; - border-color: btn.danger.selectedBorder; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Danger @@ -1590,324 +132,23 @@ exports[`Button styles danger button appropriately 1`] = ` `; exports[`Button styles invisible button appropriately 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: transparent; - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: var(--button-invisible-fgColor-rest,undefined); - background-color: transparent; - box-shadow: none; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - background-color: var(--button-invisible-bgColor-disabled,transparent); -} - -.c0:disabled [data-component=ButtonCounter], -.c0:disabled [data-component="leadingVisual"], -.c0:disabled [data-component="trailingAction"] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]) { - background-color: actionListItem.default.hoverBg; -} - -.c0:active:not([disabled]) { - background-color: actionListItem.default.activeBg; -} - -.c0[aria-expanded=true] { - background-color: actionListItem.default.selectedBg; -} - -.c0[data-component="IconButton"][data-no-visuals] { - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0[data-no-visuals] { - color: var(--button-invisible-fgColor-rest,undefined); -} - -.c0:has([data-component="ButtonCounter"]) { - color: var(--button-invisible-fgColor-rest,undefined); -} - -.c0:disabled[data-no-visuals] { - color: primer.fg.disabled; -} - -.c0:disabled[data-no-visuals] [data-component=ButtonCounter] { - color: inherit; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Invisible @@ -1917,313 +158,23 @@ exports[`Button styles invisible button appropriately 1`] = ` `; exports[`Button styles primary button appropriately 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: btn.primary.border; - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.primary.text; - background-color: btn.primary.bg; - box-shadow: undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: btn.primary.disabledText; - background-color: btn.primary.disabledBg; - border-color: btn.primary.disabledBorder; -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.primary.counterBg; - color: btn.primary.text; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - color: btn.primary.hoverText; - background-color: btn.primary.hoverBg; -} - -.c0:focus:not([disabled]) { - box-shadow: inset 0 0 0 3px; -} - -.c0:focus-visible:not([disabled]) { - box-shadow: inset 0 0 0 3px; -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.primary.selectedBg; - box-shadow: undefined; -} - -.c0[aria-expanded=true] { - background-color: btn.primary.selectedBg; - box-shadow: undefined; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Primary diff --git a/packages/react/src/Button/types.ts b/packages/react/src/Button/types.ts index 2d3fae5b07b..6824ae17e69 100644 --- a/packages/react/src/Button/types.ts +++ b/packages/react/src/Button/types.ts @@ -31,7 +31,7 @@ export type ButtonBaseProps = { */ size?: Size /** - * Items that are disabled can not be clicked, selected, or navigated through. + * Avoid disabling buttons because it will make them inaccessible to users who rely on keyboard navigation. that are disabled can not be clicked, selected, or navigated through. */ disabled?: boolean /** @@ -94,7 +94,9 @@ export type IconButtonProps = ButtonA11yProps & { unsafeDisableTooltip?: boolean description?: string tooltipDirection?: TooltipDirection + /** @deprecated Use `keybindingHint` instead. */ keyshortcuts?: string + keybindingHint?: string } & Omit // adopted from React.AnchorHTMLAttributes diff --git a/packages/react/src/ButtonGroup/ButtonGroup.docs.json b/packages/react/src/ButtonGroup/ButtonGroup.docs.json index 06c470b1253..bc7c4828eb8 100644 --- a/packages/react/src/ButtonGroup/ButtonGroup.docs.json +++ b/packages/react/src/ButtonGroup/ButtonGroup.docs.json @@ -3,7 +3,23 @@ "name": "ButtonGroup", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-buttongroup--default" + }, + { + "id": "components-buttongroup-features--icon-buttons" + }, + { + "id": "components-buttongroup-features--loading-buttons" + }, + { + "id": "components-buttongroup-features--dropdown-split" + }, + { + "id": "components-buttongroup-features--as-toolbar" + } + ], "importPath": "@primer/react", "props": [ { @@ -16,4 +32,4 @@ } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx b/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx index b233506fd88..da2b99ff6e6 100644 --- a/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx +++ b/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx @@ -132,3 +132,11 @@ export const DropdownSplit = () => { ) } + +export const AsToolbar = () => ( + + Button 1 + Button 2 + Button 3 + +) diff --git a/packages/react/src/ButtonGroup/ButtonGroup.test.tsx b/packages/react/src/ButtonGroup/ButtonGroup.test.tsx new file mode 100644 index 00000000000..67b3b0b3b6f --- /dev/null +++ b/packages/react/src/ButtonGroup/ButtonGroup.test.tsx @@ -0,0 +1,58 @@ +import {Button} from '../Button' +import {render, screen} from '@testing-library/react' +import axe from 'axe-core' +import {FeatureFlags} from '../FeatureFlags' +import {behavesAsComponent} from '../utils/testing' +import type {ButtonGroupProps} from './ButtonGroup' +import ButtonGroup from './ButtonGroup' +import React from 'react' + +const TestButtonGroup = (props: ButtonGroupProps) => ( + + Button 1 + Button 2 + Button 3 + +) + +describe('ButtonGroup', () => { + behavesAsComponent({ + Component: TestButtonGroup, + options: {skipSx: true, skipAs: true}, + }) + + it('should support `className` on the outermost element', () => { + const Element = () => + const FeatureFlagElement = () => { + return ( + + + + ) + } + expect(render().container.firstChild).toHaveClass('test-class-name') + expect(render().container.firstChild).toHaveClass('test-class-name') + }) + + it('renders a ', () => { + const container = render() + expect(container.getByTestId('button-group').tagName).toBe('DIV') + }) + + it('should have no axe violations', async () => { + const {container} = render() + const results = await axe.run(container) + expect(results).toHaveNoViolations() + }) + + it('should respect role prop', () => { + render() + expect(screen.getByRole('toolbar')).toBeInTheDocument() + }) +}) diff --git a/packages/react/src/ButtonGroup/ButtonGroup.tsx b/packages/react/src/ButtonGroup/ButtonGroup.tsx index 9e9111f591a..e3cc3e0632a 100644 --- a/packages/react/src/ButtonGroup/ButtonGroup.tsx +++ b/packages/react/src/ButtonGroup/ButtonGroup.tsx @@ -6,9 +6,12 @@ import classes from './ButtonGroup.module.css' import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' import {clsx} from 'clsx' import {useFeatureFlag} from '../FeatureFlags' +import {FocusKeys, useFocusZone} from '../hooks/useFocusZone' +import {useProvidedRefOrCreate} from '../hooks' +import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' const StyledButtonGroup = toggleStyledComponent( - 'primer_react_css_modules_team', + 'primer_react_css_modules_ga', 'div', styled.div` display: inline-flex; @@ -95,24 +98,35 @@ const StyledButtonGroup = toggleStyledComponent( ) export type ButtonGroupProps = ComponentProps + const ButtonGroup = React.forwardRef(function ButtonGroup( - {children, className, ...rest}, + {children, className, role, ...rest}, forwardRef, ) { - const enabled = useFeatureFlag('primer_react_css_modules_team') + const enabled = useFeatureFlag('primer_react_css_modules_ga') const buttons = React.Children.map(children, (child, index) => {child}) + const buttonRef = useProvidedRefOrCreate(forwardRef as React.RefObject) + + useFocusZone({ + containerRef: buttonRef, + disabled: role !== 'toolbar', + bindKeys: FocusKeys.ArrowHorizontal, + focusOutBehavior: 'wrap', + }) + return ( {buttons} ) -}) +}) as PolymorphicForwardRefComponent<'div', ButtonGroupProps> ButtonGroup.displayName = 'ButtonGroup' diff --git a/packages/react/src/Checkbox/Checkbox.docs.json b/packages/react/src/Checkbox/Checkbox.docs.json index 8e493070d97..ffe55c31e13 100644 --- a/packages/react/src/Checkbox/Checkbox.docs.json +++ b/packages/react/src/Checkbox/Checkbox.docs.json @@ -3,7 +3,23 @@ "name": "Checkbox", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-checkbox--default" + }, + { + "id": "components-checkbox-features--with-leading-visual" + }, + { + "id": "components-checkbox-features--disabled" + }, + { + "id": "components-checkbox-features--with-caption" + }, + { + "id": "components-checkbox-features--indeterminate" + } + ], "importPath": "@primer/react", "props": [ { @@ -63,4 +79,4 @@ } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/Checkbox/Checkbox.test.tsx b/packages/react/src/Checkbox/Checkbox.test.tsx index bf115bfd6ec..05dbad28317 100644 --- a/packages/react/src/Checkbox/Checkbox.test.tsx +++ b/packages/react/src/Checkbox/Checkbox.test.tsx @@ -9,7 +9,7 @@ describe('Checkbox', () => { beforeEach(() => { jest.resetAllMocks() }) - behavesAsComponent({Component: Checkbox}) + behavesAsComponent({Component: Checkbox, options: {skipAs: true}}) checkExports('Checkbox', { default: Checkbox, diff --git a/packages/react/src/Checkbox/Checkbox.tsx b/packages/react/src/Checkbox/Checkbox.tsx index 19acab2f020..5b60739d4d0 100644 --- a/packages/react/src/Checkbox/Checkbox.tsx +++ b/packages/react/src/Checkbox/Checkbox.tsx @@ -1,17 +1,12 @@ import {clsx} from 'clsx' -import styled from 'styled-components' import {useProvidedRefOrCreate} from '../hooks' import React, {useContext, useEffect, type ChangeEventHandler, type InputHTMLAttributes, type ReactElement} from 'react' -import sx, {type SxProp} from '../sx' +import {type SxProp} from '../sx' import useLayoutEffect from '../utils/useIsomorphicLayoutEffect' import type {FormValidationStatus} from '../utils/types/FormValidationStatus' import {CheckboxGroupContext} from '../CheckboxGroup/CheckboxGroupContext' -import getGlobalFocusStyles from '../internal/utils/getGlobalFocusStyles' -import {get} from '../constants' -import {sharedCheckboxAndRadioStyles} from '../internal/utils/sharedCheckboxAndRadioStyles' import classes from './Checkbox.module.css' import sharedClasses from './shared.module.css' -import {useFeatureFlag} from '../FeatureFlags' import Box from '../Box' export type CheckboxProps = { @@ -43,106 +38,6 @@ export type CheckboxProps = { } & Exclude, 'value'> & SxProp -const StyledCheckbox = styled.input` - ${sharedCheckboxAndRadioStyles}; - border-radius: ${get('radii.1')}; - transition: - background-color, - border-color 80ms cubic-bezier(0.33, 1, 0.68, 1); /* checked -> unchecked - add 120ms delay to fully see animation-out */ - - &::before { - width: var(--base-size-16, 16px); - height: var(--base-size-16, 16px); - visibility: hidden; - content: ''; - background-color: ${get('colors.fg.onEmphasis')}; - transition: visibility 0s linear 230ms; - clip-path: inset(var(--base-size-16, 16px) 0 0 0); - mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNzgwMyAwLjIxOTYyNUMxMS45MjEgMC4zNjA0MjcgMTIgMC41NTEzMDUgMTIgMC43NTAzMTNDMTIgMC45NDkzMjEgMTEuOTIxIDEuMTQwMTkgMTEuNzgwMyAxLjI4MUw0LjUxODYgOC41NDA0MkM0LjM3Nzc1IDguNjgxIDQuMTg2ODIgOC43NiAzLjk4Nzc0IDguNzZDMy43ODg2NyA4Ljc2IDMuNTk3NzMgOC42ODEgMy40NTY4OSA4LjU0MDQyTDAuMjAxNjIyIDUuMjg2MkMwLjA2ODkyNzcgNS4xNDM4MyAtMC4wMDMzMDkwNSA0Ljk1NTU1IDAuMDAwMTE2NDkzIDQuNzYwOThDMC4wMDM1NTIwNSA0LjU2NjQzIDAuMDgyMzg5NCA0LjM4MDgxIDAuMjIwMDMyIDQuMjQzMjFDMC4zNTc2NjUgNC4xMDU2MiAwLjU0MzM1NSA0LjAyNjgxIDAuNzM3OTcgNC4wMjMzOEMwLjkzMjU4NCA0LjAxOTk0IDEuMTIwOTMgNC4wOTIxNyAxLjI2MzM0IDQuMjI0ODJMMy45ODc3NCA2Ljk0ODM1TDEwLjcxODYgMC4yMTk2MjVDMTAuODU5NSAwLjA3ODk5MjMgMTEuMDUwNCAwIDExLjI0OTUgMEMxMS40NDg1IDAgMTEuNjM5NSAwLjA3ODk5MjMgMTEuNzgwMyAwLjIxOTYyNVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo='); - mask-size: 75%; - mask-repeat: no-repeat; - mask-position: center; - - animation: checkmarkOut 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards; - } - - &:checked, - &:indeterminate { - background: var(--control-checked-bgColor-rest, ${get('colors.accent.fg')}); - border-color: var( - --control-checked-bgColor-rest, - ${get('colors.accent.fg')} - ); /* using bgColor here to avoid a border change in dark high contrast */ - - &::before { - animation: checkmarkIn 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards 80ms; - } - } - - &:disabled { - cursor: not-allowed; - } - - &:checked { - transition: - background-color, - border-color 80ms cubic-bezier(0.32, 0, 0.67, 0) 0ms; - - &::before { - visibility: visible; - transition: visibility 0s linear 0s; - } - - &:disabled { - background-color: var(--control-checked-bgColor-disabled, ${get('colors.fg.muted')}); - border-color: var(--control-checked-borderColor-disabled, ${get('colors.fg.muted')}); - opacity: 1; - - &::before { - background-color: var(--control-checked-fgColor-disabled, ${get('colors.fg.onEmphasis')}); - } - } - - /* Windows High Contrast mode */ - @media (forced-colors: active) { - background-color: canvastext; - border-color: canvastext; - } - } - - &:indeterminate { - background: var(--control-checked-bgColor-rest, ${get('colors.accent.fg')}); - &::before { - mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMiIgdmlld0JveD0iMCAwIDEwIDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMCAxQzAgMC40NDc3MTUgMC40NDc3MTUgMCAxIDBIOUM5LjU1MjI5IDAgMTAgMC40NDc3MTUgMTAgMUMxMCAxLjU1MjI4IDkuNTUyMjkgMiA5IDJIMUMwLjQ0NzcxNSAyIDAgMS41NTIyOCAwIDFaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K'); - visibility: visible; - } - } - - ${getGlobalFocusStyles()}; - - ${sx}; - - @keyframes checkmarkIn { - from { - clip-path: inset(var(--base-size-16, 16px) 0 0 0); - } - - to { - clip-path: inset(0 0 0 0); - } - } - - @keyframes checkmarkOut { - from { - clip-path: inset(0 0 0 0); - } - - to { - clip-path: inset(var(--base-size-16, 16px) 0 0 0); - } - } -` - /** * An accessible, native checkbox component */ @@ -163,7 +58,6 @@ const Checkbox = React.forwardRef( }, ref, ): ReactElement => { - const enabled = useFeatureFlag('primer_react_css_modules_staff') const checkboxRef = useProvidedRefOrCreate(ref as React.RefObject) const checkboxGroupContext = useContext(CheckboxGroupContext) const handleOnChange: ChangeEventHandler = e => { @@ -204,21 +98,17 @@ const Checkbox = React.forwardRef( } }) - if (enabled) { - if (sxProp) { - return ( - - ) - } - return + if (sxProp) { + return ( + + ) } - - return + return }, ) diff --git a/packages/react/src/CheckboxGroup/CheckboxGroup.dev.stories.tsx b/packages/react/src/CheckboxGroup/CheckboxGroup.dev.stories.tsx new file mode 100644 index 00000000000..333c3ef0cea --- /dev/null +++ b/packages/react/src/CheckboxGroup/CheckboxGroup.dev.stories.tsx @@ -0,0 +1,49 @@ +import React from 'react' +import type {Meta} from '@storybook/react' +import {Checkbox, CheckboxGroup, FormControl} from '..' + +export default { + title: 'Components/CheckboxGroup/Dev', + component: CheckboxGroup, + parameters: {controls: {exclude: ['aria-labelledby', 'id', 'onChange', 'sx']}}, +} as Meta + +export const SxProps = () => ( + + + Caption + + + Choices + + + + Choice one + + + + Choice two + + + + Choice three + + +) diff --git a/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json b/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json index 4d289ce5c81..d32a6d208f8 100644 --- a/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json +++ b/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json @@ -3,7 +3,26 @@ "name": "CheckboxGroup", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-checkboxgroup--default" + }, + { + "id": "components-checkboxgroup-features--visually-hidden-label" + }, + { + "id": "components-checkboxgroup-features--with-external-label" + }, + { + "id": "components-checkboxgroup-features--error" + }, + { + "id": "components-checkboxgroup-features--success" + }, + { + "id": "components-checkboxgroup-features--caption" + } + ], "importPath": "@primer/react", "props": [ { @@ -102,4 +121,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/react/src/ConfirmationDialog/ConfirmationDialog.module.css b/packages/react/src/ConfirmationDialog/ConfirmationDialog.module.css new file mode 100644 index 00000000000..12fac66ad61 --- /dev/null +++ b/packages/react/src/ConfirmationDialog/ConfirmationDialog.module.css @@ -0,0 +1,31 @@ +.ConfirmationHeader { + display: flex; + padding: var(--base-size-8); + flex-direction: row; + + > h1 { + padding: var(--base-size-6) var(--base-size-8); + + /* override default margin */ + margin: 0; + font-size: var(--text-title-size-medium); + font-weight: var(--text-title-weight-medium); + flex-grow: 1; + } +} + +.ConfirmationBody { + padding: 0 var(--base-size-16) var(--base-size-16) var(--base-size-16); + font-size: var(--text-body-size-medium); + flex-grow: 1; +} + +.ConfirmationFooter { + display: grid; + grid-auto-flow: column; + grid-auto-columns: max-content; + grid-gap: var(--base-size-8); + align-items: end; + justify-content: end; + padding: var(--base-size-4) var(--base-size-16) var(--base-size-16); +} diff --git a/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx b/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx index 51607879b34..5fab91cb57e 100644 --- a/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx +++ b/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx @@ -25,6 +25,7 @@ export const Default = () => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( <> setIsOpen(!isOpen)}> @@ -44,3 +45,60 @@ export const Default = () => { > ) } + +interface PlaygroundProps { + open: boolean +} + +export const Playground = ({open, ...args}: PlaygroundProps) => { + const [isOpen, setIsOpen] = useState(false) + const buttonRef = useRef(null) + const onDialogClose = useCallback(() => setIsOpen(false), []) + + return ( + <> + setIsOpen(!isOpen)}> + Show dialog + + {(isOpen || open) && ( + + Deleting the universe could have disastrous effects, including but not limited to destroying all life on + Earth. + + )} + > + ) +} + +Playground.args = { + open: false, +} + +Playground.argTypes = { + open: { + control: { + type: 'boolean', + }, + }, + title: { + control: { + type: 'text', + }, + }, + cancelButtonContent: { + control: { + type: 'text', + }, + }, + confirmButtonContent: { + control: { + type: 'text', + }, + }, +} diff --git a/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx b/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx index 0e45f3c683d..95fe993d620 100644 --- a/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx +++ b/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx @@ -10,6 +10,9 @@ import type {DialogProps, DialogHeaderProps, DialogButtonProps} from '../Dialog/ import {Dialog} from '../Dialog/Dialog' import {useFocusZone} from '../hooks/useFocusZone' import BaseStyles from '../BaseStyles' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './ConfirmationDialog.module.css' /** * Props to customize the ConfirmationDialog. @@ -43,54 +46,85 @@ export interface ConfirmationDialogProps { confirmButtonType?: 'normal' | 'primary' | 'danger' } -const StyledConfirmationHeader = styled.div` - padding: ${get('space.2')}; - display: flex; - flex-direction: row; -` -const StyledTitle = styled(Box).attrs({as: 'h1'})` - font-size: ${get('fontSizes.3')}; - font-weight: ${get('fontWeights.bold')}; - padding: 6px ${get('space.2')}; - flex-grow: 1; - margin: 0; /* override default margin */ -` +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' + +const StyledConfirmationHeader = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + padding: ${get('space.2')}; + display: flex; + flex-direction: row; + `, +) + +const StyledTitle = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'h1', + styled(Box).attrs({as: 'h1'})` + font-size: ${get('fontSizes.3')}; + font-weight: ${get('fontWeights.bold')}; + padding: 6px ${get('space.2')}; + flex-grow: 1; + margin: 0; /* override default margin */ + `, +) + const ConfirmationHeader: React.FC> = ({title, onClose, dialogLabelId}) => { const onCloseClick = useCallback(() => { onClose('close-button') }, [onClose]) + + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) return ( - + {title} ) } -const StyledConfirmationBody = styled(Box)` - font-size: ${get('fontSizes.1')}; - padding: 0 ${get('space.3')} ${get('space.3')} ${get('space.3')}; - flex-grow: 1; -` +const StyledConfirmationBody = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled(Box)` + font-size: ${get('fontSizes.1')}; + padding: 0 ${get('space.3')} ${get('space.3')} ${get('space.3')}; + flex-grow: 1; + `, +) + const ConfirmationBody: React.FC> = ({children}) => { - return {children} + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return {children} } -const StyledConfirmationFooter = styled(Box)` - display: grid; - grid-auto-flow: column; - grid-auto-columns: max-content; - grid-gap: ${get('space.2')}; - align-items: end; - justify-content: end; - padding: ${get('space.1')} ${get('space.3')} ${get('space.3')}; -` +const StyledConfirmationFooter = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled(Box)` + display: grid; + grid-auto-flow: column; + grid-auto-columns: max-content; + grid-gap: ${get('space.2')}; + align-items: end; + justify-content: end; + padding: ${get('space.1')} ${get('space.3')} ${get('space.3')}; + `, +) + const ConfirmationFooter: React.FC> = ({footerButtons}) => { const {containerRef: footerRef} = useFocusZone({ bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.Tab, focusInStrategy: 'closest', }) + + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + // Must have exactly 2 buttons! return ( - }> + } + className={enabled && classes.ConfirmationFooter} + > ) diff --git a/packages/react/src/CounterLabel/CounterLabel.docs.json b/packages/react/src/CounterLabel/CounterLabel.docs.json index 17a0b4cb94e..b551fb900a0 100644 --- a/packages/react/src/CounterLabel/CounterLabel.docs.json +++ b/packages/react/src/CounterLabel/CounterLabel.docs.json @@ -3,7 +3,17 @@ "name": "CounterLabel", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-counterlabel--default" + }, + { + "id": "components-counterlabel-features--primary-theme" + }, + { + "id": "components-counterlabel-features--secondary-theme" + } + ], "importPath": "@primer/react", "props": [ { @@ -11,7 +21,17 @@ "type": "'primary' | 'secondary'", "defaultValue": "", "description": "Pass in 'primary' for a darker background and inverse text, or 'secondary' for a lighter background and primary text. Omitting the scheme prop renders the default counter scheme" + }, + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" + }, + { + "name": "sx", + "type": "BetterSystemStyleObject" } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/CounterLabel/CounterLabel.tsx b/packages/react/src/CounterLabel/CounterLabel.tsx index be06080269f..08105b8701d 100644 --- a/packages/react/src/CounterLabel/CounterLabel.tsx +++ b/packages/react/src/CounterLabel/CounterLabel.tsx @@ -1,13 +1,9 @@ import {clsx} from 'clsx' import type {HTMLAttributes} from 'react' import React, {forwardRef} from 'react' -import styled from 'styled-components' -import {get} from '../constants' -import sx from '../sx' import type {SxProp} from '../sx' import {VisuallyHidden} from '../VisuallyHidden' import {defaultSxProp} from '../utils/defaultSxProp' -import {useFeatureFlag} from '../FeatureFlags' import Box from '../Box' import classes from './CounterLabel.module.css' @@ -20,7 +16,6 @@ export type CounterLabelProps = React.PropsWithChildren< const CounterLabel = forwardRef( ({scheme = 'secondary', sx = defaultSxProp, className, children, ...rest}, forwardedRef) => { - const enabled = useFeatureFlag('primer_react_css_modules_staff') const label = ({children}) const counterProps = { ref: forwardedRef, @@ -29,67 +24,27 @@ const CounterLabel = forwardRef( ...rest, } - if (enabled) { - if (sx !== defaultSxProp) { - return ( - <> - - {children} - - {label} - > - ) - } + if (sx !== defaultSxProp) { return ( <> - + {children} - + {label} > ) } - return ( <> - + {children} - + {label} > ) }, ) -const StyledCounterLabel = styled.span` - display: inline-block; - padding: var(--base-size-2, 0.125rem) var(--base-size-6, 0.375rem); - font-size: 12px; - font-weight: var(--base-text-weight-semibold, bold); - line-height: 1; - border-radius: 20px; - border: var(--borderWidth-thin, max(1px, 0.0625rem)) solid var(--counter-borderColor, var(--color-counter-border)); - - &:where([data-scheme='primary']) { - background-color: ${get('colors.neutral.emphasis')}; - color: ${get('colors.fg.onEmphasis')}; - } - - &:where([data-scheme='secondary']) { - background-color: ${get('colors.neutral.muted')}; - color: ${get('colors.fg.default')}; - } - - &:where(:empty) { - display: none; - } - - /* Place the sx prop styles after previously inserted styles so that it will win out in specificity */ - & { - ${sx} - } -` - CounterLabel.displayName = 'CounterLabel' export default CounterLabel diff --git a/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap b/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap index 1d08b1f9ece..77ff00aad26 100644 --- a/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap +++ b/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CounterLabel renders with secondary scheme when no "scheme" prop is provided 1`] = ` -.c1:not(:focus):not(:active):not(:focus-within) { +.c0:not(:focus):not(:active):not(:focus-within) { -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; @@ -11,30 +11,16 @@ exports[`CounterLabel renders with secondary scheme when no "scheme" prop is pro width: 1px; } -.c0 { - display: inline-block; - padding: var(--base-size-2,0.125rem) var(--base-size-6,0.375rem); - font-size: 12px; - font-weight: var(--base-text-weight-semibold,bold); - line-height: 1; - border-radius: 20px; - border: var(--borderWidth-thin,max(1px,0.0625rem)) solid var(--counter-borderColor,var(--color-counter-border)); -} - -.c0:where(:empty) { - display: none; -} - 1234  ( 1234 @@ -44,7 +30,7 @@ exports[`CounterLabel renders with secondary scheme when no "scheme" prop is pro `; exports[`CounterLabel respects the primary "scheme" prop 1`] = ` -.c1:not(:focus):not(:active):not(:focus-within) { +.c0:not(:focus):not(:active):not(:focus-within) { -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; @@ -54,30 +40,16 @@ exports[`CounterLabel respects the primary "scheme" prop 1`] = ` width: 1px; } -.c0 { - display: inline-block; - padding: var(--base-size-2,0.125rem) var(--base-size-6,0.375rem); - font-size: 12px; - font-weight: var(--base-text-weight-semibold,bold); - line-height: 1; - border-radius: 20px; - border: var(--borderWidth-thin,max(1px,0.0625rem)) solid var(--counter-borderColor,var(--color-counter-border)); -} - -.c0:where(:empty) { - display: none; -} - 1234  ( 1234 diff --git a/packages/react/src/DataTable/DataTable.docs.json b/packages/react/src/DataTable/DataTable.docs.json index b3458391ed0..88d0373ae34 100644 --- a/packages/react/src/DataTable/DataTable.docs.json +++ b/packages/react/src/DataTable/DataTable.docs.json @@ -1,9 +1,12 @@ { "id": "data_table", "name": "DataTable", - "status": "draft", - "a11yReviewed": false, + "status": "alpha", + "a11yReviewed": true, "stories": [ + { + "id": "experimental-components-datatable--default" + }, { "id": "experimental-components-datatable-features--with-title" }, @@ -67,6 +70,34 @@ "name": "cellPadding", "type": "'condensed' | 'normal' | 'spacious'", "description": "Specify the amount of space that should be available around the contents of a cell" + }, + { + "name": "aria-describedby", + "type": "string", + "required": false, + "description": "Provide an id to an element which uniquely describes this table", + "defaultValue": "" + }, + { + "name": "aria-labelledby", + "type": "string", + "required": false, + "description": "Provide an id to an element which uniquely labels this table", + "defaultValue": "" + }, + { + "name": "initialSortColumn", + "type": "string | number", + "required": false, + "description": "Provide the id or field of the column by which the table is sorted. When\nusing this `prop`, the input data must be sorted by this column in\nascending order", + "defaultValue": "" + }, + { + "name": "initialSortDirection", + "type": "'ASC' | 'DESC'", + "required": false, + "description": "Provide the sort direction that the table should be sorted by on the\ncurrently sorted column", + "defaultValue": "" } ], "subcomponents": [ @@ -103,6 +134,15 @@ } ] }, + { + "name": "Table.Actions", + "props": [ + { + "name": "children", + "type": "React.ReactNode" + } + ] + }, { "name": "Table.Body", "props": [ @@ -124,6 +164,13 @@ { "name": "Table.Header", "props": [ + { + "name": "align", + "type": "'end' | 'start'", + "required": false, + "description": "The horizontal alignment of the cell's content", + "defaultValue": "" + }, { "name": "children", "type": "React.ReactNode" @@ -133,6 +180,13 @@ { "name": "Table.Cell", "props": [ + { + "name": "align", + "type": "'end' | 'start'", + "required": false, + "description": "The horizontal alignment of the cell's content", + "defaultValue": "" + }, { "name": "children", "type": "React.ReactNode" @@ -144,6 +198,10 @@ } ] }, + { + "name": "Table.CellPlaceholder", + "props": [] + }, { "name": "Table.Container", "props": [ @@ -153,6 +211,10 @@ } ] }, + { + "name": "Table.Divider", + "props": [] + }, { "name": "Table.Title", "props": [ @@ -163,7 +225,8 @@ { "name": "id", "type": "string", - "required": true + "required": true, + "description": "Provide a unique id for the table subtitle. This should be used along with\n`aria-labelledby` on `DataTable`" } ] }, @@ -177,7 +240,8 @@ { "name": "id", "type": "string", - "required": true + "required": true, + "description": "Provide a unique id for the table subtitle. This should be used along with\n`aria-describedby` on `DataTable`" } ] }, @@ -187,16 +251,19 @@ { "name": "cellPadding", "type": "'condensed' | 'normal' | 'spacious'", - "description": "Specify the amount of space that should be available around the contents of a cell" + "description": "Specify the amount of space that should be available around the contents of a cell", + "defaultValue": "normal" }, { "name": "columns", + "required": true, "type": "Array>" }, { "name": "rows", "type": "number", - "description": "Optionally specify the number of rows which should be included in the skeleton state of the component" + "description": "Optionally specify the number of rows which should be included in the skeleton state of the component", + "defaultValue": "10" } ] }, @@ -206,28 +273,42 @@ { "name": "aria-label", "type": "string", - "required": true + "required": true, + "description": "Defines a string value that labels the current element.\nProvide a label for the navigation landmark rendered by this component\n@see aria-labelledby." }, { "name": "defaultPageIndex", - "type": "string" + "type": "string", + "description": "Provide an optional index to specify the default selected page" }, { "name": "id", - "type": "string" + "type": "string", + "description": "Optionally provide an `id` that is placed on the navigation landmark\nrendered by this component" }, { "name": "onChange", - "type": "({ pageIndex }: { pageIndex: number }) => void" + "type": "({ pageIndex }: { pageIndex: number }) => void", + "description": "Optionally provide a handler that is called whenever the pagination state\nis updated" }, { "name": "pageSize", - "type": "number" + "type": "number", + "description": "Optionally specify the number of items within a page", + "defaultValue": "25" }, { "name": "totalCount", "type": "number", - "required": true + "required": true, + "description": "Specify the total number of items within the collection" + }, + { + "name": "showPages", + "type": "boolean | { narrow?: boolean; regular?: boolean; wide?: boolean; }", + "required": false, + "description": "Whether to show the page numbers", + "defaultValue": "{narrow: false}" } ] }, @@ -258,6 +339,31 @@ } ] }, + { + "name": "Table.SortHeader", + "props": [ + { + "name": "direction", + "type": "'ASC' | 'DESC' | 'NONE'", + "required": true, + "description": "Specify the sort direction for the TableHeader", + "defaultValue": "" + }, + { + "name": "onToggleSort", + "type": "() => void", + "required": true, + "description": "Provide a handler that is called when the sortable TableHeader is\ninteracted with via a click or keyboard interaction", + "defaultValue": "" + }, + { + "name": "align", + "type": "'end' | 'start'", + "description": "The horizontal alignment of the cell's content", + "defaultValue": "" + } + ] + }, { "name": "Column options", "props": [ diff --git a/packages/react/src/DataTable/Table.tsx b/packages/react/src/DataTable/Table.tsx index 35959563773..b4bf6796eb7 100644 --- a/packages/react/src/DataTable/Table.tsx +++ b/packages/react/src/DataTable/Table.tsx @@ -31,7 +31,7 @@ const StyledTable = styled.table>` display: grid; font-size: var(--table-font-size); grid-template-columns: var(--grid-template-columns); - line-height: calc(20 / var(--table-font-size)); + line-height: calc(20 / 12); width: 100%; /* Density modes: condensed, normal, spacious */ diff --git a/packages/react/src/Details/Details.docs.json b/packages/react/src/Details/Details.docs.json index 0dff5c8d6da..6b4ce4e945a 100644 --- a/packages/react/src/Details/Details.docs.json +++ b/packages/react/src/Details/Details.docs.json @@ -3,7 +3,11 @@ "name": "Details", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-details--default" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Details/Details.tsx b/packages/react/src/Details/Details.tsx index 927edb6091f..bc2a4c30909 100644 --- a/packages/react/src/Details/Details.tsx +++ b/packages/react/src/Details/Details.tsx @@ -8,7 +8,7 @@ import {clsx} from 'clsx' import classes from './Details.module.css' import {useMergedRefs} from '../internal/hooks/useMergedRefs' -const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_ga' const StyledDetails = toggleStyledComponent( CSS_MODULES_FEATURE_FLAG, diff --git a/packages/react/src/Dialog/Dialog.dev.stories.tsx b/packages/react/src/Dialog/Dialog.dev.stories.tsx new file mode 100644 index 00000000000..8f4d6bb26f4 --- /dev/null +++ b/packages/react/src/Dialog/Dialog.dev.stories.tsx @@ -0,0 +1,213 @@ +import React, {useState, useCallback} from 'react' +import {Text, Button} from '..' +import type {DialogProps, DialogWidth, DialogHeight} from './Dialog' +import {Dialog} from './Dialog' +import {FeatureFlags} from '../FeatureFlags' + +/* Dialog Version 2 */ + +export default { + title: 'Components/Dialog/Dev', +} + +const lipsum = ( + <> + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sollicitudin mauris maximus elit sagittis, nec + lobortis ligula elementum. Nam iaculis, urna nec lobortis posuere, eros urna venenatis eros, vel accumsan turpis + nunc vitae enim. Maecenas et lorem lectus. Vivamus iaculis tortor eget ante placerat, nec posuere nisl tincidunt. + Cras condimentum ante in accumsan ultricies. Morbi quis porta est, sit amet congue augue. Lorem ipsum dolor sit + amet, consectetur adipiscing elit. Ut consequat nunc id quam tempus, id tincidunt neque venenatis. Mauris + fringilla tempor est, vitae fermentum enim elementum vitae. Nullam eleifend odio ut porta efficitur. Phasellus + luctus tempus posuere. + + + + Curabitur scelerisque bibendum faucibus. Duis rhoncus nunc est, at pharetra eros tristique a. Nam sodales turpis + lectus, quis faucibus felis fermentum in. Curabitur vel velit vel eros laoreet pharetra. Aenean in facilisis + sapien, eu porttitor ex. Donec ultrices ac arcu ut lobortis. Pellentesque vitae rutrum orci. Etiam pretium et enim + sit amet scelerisque. Nulla sed odio nec lorem dapibus condimentum at sagittis quam. Sed in ornare ex, sed luctus + sem. Mauris a est tellus. + + > +) + +interface DialogStoryProps { + width: DialogWidth + height: DialogHeight + subtitle: boolean +} + +function CssHeader({title, subtitle, dialogLabelId}: React.PropsWithChildren) { + if (typeof title === 'string' && typeof subtitle === 'string') { + return ( + + {title.toUpperCase()} + + ) + } + return null +} +function CssBody({children}: React.PropsWithChildren) { + return {children} +} +function CssFooter({footerButtons}: React.PropsWithChildren) { + return ( + + {footerButtons ? : null} + + ) +} +export const WithCss = ({width, height, subtitle}: DialogStoryProps) => { + const [isOpen, setIsOpen] = useState(true) + const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( + + setIsOpen(!isOpen)}>Show dialog + {isOpen && ( + + {lipsum} + + )} + + ) +} + +function SxHeader({title, subtitle, dialogLabelId}: React.PropsWithChildren) { + if (typeof title === 'string' && typeof subtitle === 'string') { + return ( + + {title.toUpperCase()} + + ) + } + return null +} +function SxBody({children}: React.PropsWithChildren) { + return {children} +} +function SxFooter({footerButtons}: React.PropsWithChildren) { + return ( + + {footerButtons ? : null} + + ) +} +export const WithSx = ({width, height, subtitle}: DialogStoryProps) => { + const [isOpen, setIsOpen] = useState(true) + const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( + + setIsOpen(!isOpen)}>Show dialog + {isOpen && ( + + {lipsum} + + )} + + ) +} + +function SxAndCssHeader({ + title, + subtitle, + dialogLabelId, +}: React.PropsWithChildren) { + if (typeof title === 'string' && typeof subtitle === 'string') { + return ( + + {title.toUpperCase()} + + ) + } + return null +} +function SxAndCssBody({children}: React.PropsWithChildren) { + return ( + + {children} + + ) +} +function SxAndCssFooter({footerButtons}: React.PropsWithChildren) { + return ( + + {footerButtons ? : null} + + ) +} +export const WithSxAndCss = ({width, height, subtitle}: DialogStoryProps) => { + const [isOpen, setIsOpen] = useState(true) + const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( + + setIsOpen(!isOpen)}>Show dialog + {isOpen && ( + + {lipsum} + + )} + + ) +} diff --git a/packages/react/src/Dialog/Dialog.docs.json b/packages/react/src/Dialog/Dialog.docs.json index 3a04fe82721..fe93cc281b1 100644 --- a/packages/react/src/Dialog/Dialog.docs.json +++ b/packages/react/src/Dialog/Dialog.docs.json @@ -4,7 +4,38 @@ "name": "Dialog", "status": "draft", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-dialog--default" + }, + { + "id": "components-dialog-features--with-custom-renderers" + }, + { + "id": "components-dialog-features--stress-test" + }, + { + "id": "components-dialog-features--repro-multistep-dialog-with-conditional-footer" + }, + { + "id": "components-dialog-features--bottom-sheet-narrow" + }, + { + "id": "components-dialog-features--full-screen-narrow" + }, + { + "id": "components-dialog-features--side-sheet" + }, + { + "id": "components-dialog-features--return-focus-ref" + }, + { + "id": "components-dialog-features--new-issues" + }, + { + "id": "components-dialog-features--retains-focus-trap-with-dynamic-content" + } + ], "importPath": "@primer/react/experimental", "props": [ { @@ -45,15 +76,17 @@ { "name": "role", "type": "'dialog' | 'alertdialog'", - "description": "The ARIA role to assign to this dialog." + "description": "The ARIA role to assign to this dialog. @see https://www.w3.org/TR/wai-aria-practices-1.1/#dialog_modal\n@see https://www.w3.org/TR/wai-aria-practices-1.1/#alertdialog" }, { "name": "width", - "type": "'small' | 'medium' | 'large' | 'xlarge'" + "type": "'small' | 'medium' | 'large' | 'xlarge'", + "description": "The width of the dialog.\nsmall: 296px\nmedium: 320px\nlarge: 480px\nxlarge: 640px" }, { "name": "height", - "type": "'small' | 'large' | 'auto'" + "type": "'small' | 'large' | 'auto'", + "description": "The height of the dialog.\nsmall: 296x480\nlarge: 480x640\nauto: variable based on contents" }, { "name": "returnFocusRef", @@ -65,6 +98,13 @@ "type": "React.RefObject", "description": "Focus this element when the Dialog opens" }, + { + "name": "position", + "type": "'center' | 'left' | 'right' | { narrow: 'center' | 'left' | 'right' | 'bottom' | 'fullscreen', regular: 'center' | 'left' | 'right' | 'bottom' | 'fullscreen', wide: 'center' | 'left' | 'right' | 'bottom' | 'fullscreen' }", + "required": false, + "description": "The position of the dialog", + "defaultValue": "" + }, { "name": "className", "type": "string | undefined", @@ -72,5 +112,70 @@ "description": "CSS string" } ], - "subcomponents": [] + "subcomponents": [ + { + "name": "Dialog.Body", + "props": [] + }, + { + "name": "Dialog.Buttons", + "props": [ + { + "name": "buttons", + "type": "DialogButtonProps[] (see table below)", + "required": true + } + ] + }, + { + "name": "Dialog.CloseButton", + "props": [ + { + "name": "onClose", + "type": "() => void", + "required": true, + "description": "Callback for closing the Dialog", + "defaultValue": "" + } + ] + }, + { + "name": "Dialog.Footer", + "props": [] + }, + { + "name": "Dialog.Header", + "props": [] + }, + { + "name": "Dialog.Title", + "props": [] + }, + { + "name": "DialogButtonProps", + "props": [ + { + "name": "buttonType", + "type": "'default' | 'danger' | 'primary' | 'normal'", + "description": "The variant of Button to use" + }, + { + "name": "content", + "type": "React.ReactNode", + "required": true, + "description": "The Button's inner text" + }, + { + "name": "autoFocus", + "type": "boolean", + "description": "If true, and if this is the only button with autoFocus set to true, focus this button automatically when the dialog appears." + }, + { + "name": "ref", + "type": "React.RefObject", + "description": " A reference to the rendered Button’s DOM node, used together with `autoFocus` for `focusTrap`’s `initialFocus`." + } + ] + } + ] } diff --git a/packages/react/src/Dialog/Dialog.module.css b/packages/react/src/Dialog/Dialog.module.css new file mode 100644 index 00000000000..444df0b3510 --- /dev/null +++ b/packages/react/src/Dialog/Dialog.module.css @@ -0,0 +1,253 @@ +@keyframes dialog-backdrop-appear { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes Overlay--motion-scaleFade { + 0% { + opacity: 0; + transform: scale(0.5); + } + + 100% { + opacity: 1; + transform: scale(1); + } +} + +@keyframes Overlay--motion-slideUp { + from { + transform: translateY(100%); + } +} + +@keyframes Overlay--motion-slideInRight { + from { + transform: translateX(-100%); + } +} + +@keyframes Overlay--motion-slideInLeft { + from { + transform: translateX(100%); + } +} + +.Backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + background-color: var(--overlay-backdrop-bgColor); + animation: dialog-backdrop-appear 200ms cubic-bezier(0.33, 1, 0.68, 1); + align-items: center; + justify-content: center; + + &[data-position-regular='center'] { + align-items: center; + justify-content: center; + } + + &[data-position-regular='left'] { + align-items: center; + justify-content: flex-start; + } + + &[data-position-regular='right'] { + align-items: center; + justify-content: flex-end; + } + + .DialogOverflowWrapper { + flex-grow: 1; + } + + @media (max-width: 767px) { + &[data-position-narrow='center'] { + align-items: center; + justify-content: center; + } + + &[data-position-narrow='bottom'] { + align-items: end; + justify-content: center; + } + } +} + +.Dialog { + display: flex; + /* stylelint-disable-next-line primer/responsive-widths */ + width: 640px; + min-width: 296px; + max-width: calc(100dvw - 64px); + height: auto; + max-height: calc(100dvh - 64px); + flex-direction: column; + background-color: var(--overlay-bgColor); + border-radius: var(--borderRadius-large); + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + box-shadow: var(--shadow-floating-small); + opacity: 1; + + &:where([data-width='small']) { + width: 296px; + } + + &:where([data-width='medium']) { + width: 320px; + } + + &:where([data-width='large']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 480px; + } + + &:where([data-height='small']) { + height: 480px; + } + + &:where([data-height='large']) { + height: 640px; + } + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + + &[data-position-regular='center'] { + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + &[data-position-regular='left'] { + height: 100dvh; + max-height: unset; + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideInRight 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + &[data-position-regular='right'] { + height: 100dvh; + max-height: unset; + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + border-top-right-radius: 0; + border-bottom-right-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideInLeft 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + @media (max-width: 767px) { + &[data-position-narrow='center'] { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 640px; + height: auto; + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + + &:where([data-width='small']) { + width: 296px; + } + + &:where([data-width='medium']) { + width: 320px; + } + + &:where([data-width='large']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 480px; + } + + &:where([data-height='small']) { + height: 480px; + } + + &:where([data-height='large']) { + height: 640px; + } + } + + &[data-position-narrow='bottom'] { + width: 100dvw; + max-width: 100dvw; + height: auto; + max-height: calc(100dvh - 64px); + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideUp 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + &[data-position-narrow='fullscreen'] { + width: 100%; + max-width: 100dvw; + height: 100%; + max-height: 100dvh; + border-radius: unset !important; + flex-grow: 1; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + } +} + +.Header { + z-index: 1; + padding: var(--base-size-8); + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 1px 0 var(--borderColor-default); + flex-shrink: 0; +} + +.Title { + margin: 0; /* override default margin */ + font-size: var(--text-body-size-medium); + font-weight: var(--text-title-weight-large); +} + +.Subtitle { + margin: 0; /* override default margin */ + margin-top: var(--base-size-4); + font-size: var(--text-body-size-small); + font-weight: var(--base-text-weight-normal); + color: var(--fgColor-muted); +} + +.Body { + padding: var(--base-size-16); + overflow: auto; + flex-grow: 1; +} + +.Footer { + z-index: 1; + display: flex; + padding: var(--base-size-16); + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 -1px 0 var(--borderColor-default); + flex-flow: wrap; + justify-content: flex-end; + gap: var(--base-size-8); + flex-shrink: 0; +} diff --git a/packages/react/src/Dialog/Dialog.test.tsx b/packages/react/src/Dialog/Dialog.test.tsx index 85095fa0b20..1d707fd321f 100644 --- a/packages/react/src/Dialog/Dialog.test.tsx +++ b/packages/react/src/Dialog/Dialog.test.tsx @@ -6,6 +6,7 @@ import MatchMediaMock from 'jest-matchmedia-mock' import {behavesAsComponent, checkExports} from '../utils/testing' import axe from 'axe-core' import {Button} from '../Button' +import {FeatureFlags} from '../FeatureFlags' let matchMedia: MatchMediaMock @@ -226,6 +227,53 @@ describe('Dialog', () => { expect(getByRole('button', {name: 'return focus to (button 2)'})).toHaveFocus() }) + + it('should support `className` on the Dialog element', async () => { + const Fixture = () => { + const [isOpen, setIsOpen] = React.useState(true) + const triggerRef = React.useRef(null) + + return ( + <> + setIsOpen(true)}> + Show dialog + + {isOpen && ( + setIsOpen(false)} returnFocusRef={triggerRef} className="custom-class"> + body + + )} + > + ) + } + + const FeatureFlagElement = () => { + return ( + + + + ) + } + + const user = userEvent.setup() + + let component = render() + let triggerButton = component.getByRole('button', {name: 'Show dialog'}) + await user.click(triggerButton) + expect(component.getByRole('dialog')).toHaveClass('custom-class') + component.unmount() + + component = render() + triggerButton = component.getByRole('button', {name: 'Show dialog'}) + await user.click(triggerButton) + expect(component.getByRole('dialog')).toHaveClass('custom-class') + }) }) it('automatically focuses the element that is specified as initialFocusRef', () => { diff --git a/packages/react/src/Dialog/Dialog.tsx b/packages/react/src/Dialog/Dialog.tsx index 13d1b4fd752..0152906ada3 100644 --- a/packages/react/src/Dialog/Dialog.tsx +++ b/packages/react/src/Dialog/Dialog.tsx @@ -16,6 +16,12 @@ import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef' import {useId} from '../hooks/useId' import {ScrollableRegion} from '../ScrollableRegion' import type {ResponsiveValue} from '../hooks/useResponsiveValue' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' + +import classes from './Dialog.module.css' +import {useFeatureFlag} from '../FeatureFlags' +import {clsx} from 'clsx' /* Dialog Version 2 */ @@ -25,7 +31,7 @@ import type {ResponsiveValue} from '../hooks/useResponsiveValue' */ export type DialogButtonProps = Omit & { /** - * The type of Button element to use + * The variant of Button to use */ buttonType?: 'default' | 'primary' | 'danger' | 'normal' @@ -166,58 +172,65 @@ export interface DialogHeaderProps extends DialogProps { dialogDescriptionId: string } -const Backdrop = styled('div')` - position: fixed; - top: 0; - left: 0; - bottom: 0; - right: 0; - display: flex; - align-items: center; - justify-content: center; - background-color: ${get('colors.primer.canvas.backdrop')}; - animation: dialog-backdrop-appear 200ms ${get('animation.easeOutCubic')}; - - &[data-position-regular='center'] { +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' + +const Backdrop = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + display: flex; align-items: center; justify-content: center; - } - - &[data-position-regular='left'] { - align-items: center; - justify-content: flex-start; - } + background-color: ${get('colors.primer.canvas.backdrop')}; + animation: dialog-backdrop-appear 200ms ${get('animation.easeOutCubic')}; - &[data-position-regular='right'] { - align-items: center; - justify-content: flex-end; - } + &[data-position-regular='center'] { + align-items: center; + justify-content: center; + } - .DialogOverflowWrapper { - flex-grow: 1; - } + &[data-position-regular='left'] { + align-items: center; + justify-content: flex-start; + } - @media (max-width: 767px) { - &[data-position-narrow='center'] { + &[data-position-regular='right'] { align-items: center; - justify-content: center; + justify-content: flex-end; } - &[data-position-narrow='bottom'] { - align-items: end; - justify-content: center; + .DialogOverflowWrapper { + flex-grow: 1; } - } - @keyframes dialog-backdrop-appear { - 0% { - opacity: 0; + @media (max-width: 767px) { + &[data-position-narrow='center'] { + align-items: center; + justify-content: center; + } + + &[data-position-narrow='bottom'] { + align-items: end; + justify-content: center; + } } - 100% { - opacity: 1; + + @keyframes dialog-backdrop-appear { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } } - } -` + `, +) +Backdrop.displayName = 'Backdrop' const heightMap = { small: '480px', @@ -238,123 +251,128 @@ export type DialogHeight = keyof typeof heightMap type StyledDialogProps = { width?: DialogWidth height?: DialogHeight -} & SxProp - -const StyledDialog = styled.div` - display: flex; - flex-direction: column; - background-color: ${get('colors.canvas.overlay')}; - box-shadow: ${get('shadows.overlay.shadow')}; - width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; - height: ${props => heightMap[props.height ?? ('auto' as const)]}; - min-width: 296px; - max-width: calc(100dvw - 64px); - max-height: calc(100dvh - 64px); - border-radius: 12px; - opacity: 1; - - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; - } - - &[data-position-regular='center'] { - border-radius: var(--borderRadius-large, 0.75rem); +} & SxProp & + React.ComponentPropsWithRef<'div'> + +const StyledDialog = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + display: flex; + flex-direction: column; + background-color: ${get('colors.canvas.overlay')}; + box-shadow: ${get('shadows.overlay.shadow')}; + width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; + height: ${props => heightMap[props.height ?? ('auto' as const)]}; + min-width: 296px; + max-width: calc(100dvw - 64px); + max-height: calc(100dvh - 64px); + border-radius: 12px; + opacity: 1; @media screen and (prefers-reduced-motion: no-preference) { animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; } - } - - &[data-position-regular='left'] { - height: 100dvh; - max-height: unset; - border-radius: var(--borderRadius-large, 0.75rem); - border-top-left-radius: 0; - border-bottom-left-radius: 0; - - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-slideInRight 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; - } - } - &[data-position-regular='right'] { - height: 100dvh; - max-height: unset; - border-radius: var(--borderRadius-large, 0.75rem); - border-top-right-radius: 0; - border-bottom-right-radius: 0; + &[data-position-regular='center'] { + border-radius: var(--borderRadius-large, 0.75rem); - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-slideInLeft 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } } - } - @media (max-width: 767px) { - &[data-position-narrow='center'] { + &[data-position-regular='left'] { + height: 100dvh; + max-height: unset; border-radius: var(--borderRadius-large, 0.75rem); - width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; - height: ${props => heightMap[props.height ?? ('auto' as const)]}; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideInRight 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } } - &[data-position-narrow='bottom'] { - width: 100dvw; - height: auto; - max-width: 100dvw; - max-height: calc(100dvh - 64px); + &[data-position-regular='right'] { + height: 100dvh; + max-height: unset; border-radius: var(--borderRadius-large, 0.75rem); + border-top-right-radius: 0; border-bottom-right-radius: 0; - border-bottom-left-radius: 0; @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-slideUp 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + animation: Overlay--motion-slideInLeft 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; } } - &[data-position-narrow='fullscreen'] { - width: 100%; - max-width: 100dvw; - height: 100%; - max-height: 100dvh; - border-radius: unset !important; - flex-grow: 1; + @media (max-width: 767px) { + &[data-position-narrow='center'] { + border-radius: var(--borderRadius-large, 0.75rem); + width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; + height: ${props => heightMap[props.height ?? ('auto' as const)]}; + } - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + &[data-position-narrow='bottom'] { + width: 100dvw; + height: auto; + max-width: 100dvw; + max-height: calc(100dvh - 64px); + border-radius: var(--borderRadius-large, 0.75rem); + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideUp 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } } - } - } - @keyframes Overlay--motion-scaleFade { - 0% { - opacity: 0; - transform: scale(0.5); + &[data-position-narrow='fullscreen'] { + width: 100%; + max-width: 100dvw; + height: 100%; + max-height: 100dvh; + border-radius: unset !important; + flex-grow: 1; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } } - 100% { - opacity: 1; - transform: scale(1); + + @keyframes Overlay--motion-scaleFade { + 0% { + opacity: 0; + transform: scale(0.5); + } + 100% { + opacity: 1; + transform: scale(1); + } } - } - @keyframes Overlay--motion-slideUp { - from { - transform: translateY(100%); + @keyframes Overlay--motion-slideUp { + from { + transform: translateY(100%); + } } - } - @keyframes Overlay--motion-slideInRight { - from { - transform: translateX(-100%); + @keyframes Overlay--motion-slideInRight { + from { + transform: translateX(-100%); + } } - } - @keyframes Overlay--motion-slideInLeft { - from { - transform: translateX(100%); + @keyframes Overlay--motion-slideInLeft { + from { + transform: translateX(100%); + } } - } - ${sx}; -` + ${sx}; + `, +) const DefaultHeader: React.FC> = ({ dialogLabelId, @@ -416,6 +434,8 @@ const _Dialog = React.forwardRef(null) @@ -481,29 +501,30 @@ const _Dialog = React.forwardRef { + onMouseDown={(e: React.MouseEvent) => { setLastMouseDownIsBackdrop(e.target === e.currentTarget) }} > {header} @@ -518,51 +539,109 @@ const _Dialog = React.forwardRef` - box-shadow: 0 1px 0 ${get('colors.border.default')}; - padding: ${get('space.2')}; - z-index: 1; - flex-shrink: 0; - ${sx}; -` - -const Title = styled.h1` - font-size: ${get('fontSizes.1')}; - font-weight: ${get('fontWeights.bold')}; - margin: 0; /* override default margin */ - ${sx}; -` - -const Subtitle = styled.h2` - font-size: ${get('fontSizes.0')}; - color: ${get('colors.fg.muted')}; - margin: 0; /* override default margin */ - margin-top: ${get('space.1')}; - font-weight: normal; - - ${sx}; -` - -const Body = styled.div` - flex-grow: 1; - overflow: auto; - padding: ${get('space.3')}; - - ${sx}; -` - -const Footer = styled.div` - box-shadow: 0 -1px 0 ${get('colors.border.default')}; - padding: ${get('space.3')}; - display: flex; - flex-flow: wrap; - justify-content: flex-end; - gap: ${get('space.2')}; - z-index: 1; - flex-shrink: 0; - - ${sx}; -` +const StyledHeader = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + box-shadow: 0 1px 0 ${get('colors.border.default')}; + padding: ${get('space.2')}; + z-index: 1; + flex-shrink: 0; + ${sx}; + `, +) +type StyledHeaderProps = React.ComponentProps<'div'> & SxProp + +const Header = React.forwardRef(function Header({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Header.displayName = 'Dialog.Header' + +const StyledTitle = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'h1', + styled.h1` + font-size: ${get('fontSizes.1')}; + font-weight: ${get('fontWeights.bold')}; + margin: 0; /* override default margin */ + ${sx}; + `, +) +type StyledTitleProps = React.ComponentProps<'h1'> & SxProp + +const Title = React.forwardRef(function Title({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Title.displayName = 'Dialog.Title' + +const StyledSubtitle = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'h2', + styled.h2` + font-size: ${get('fontSizes.0')}; + color: ${get('colors.fg.muted')}; + margin: 0; /* override default margin */ + margin-top: ${get('space.1')}; + font-weight: normal; + ${sx}; + `, +) +type StyledSubtitleProps = React.ComponentProps<'h2'> & SxProp + +const Subtitle = React.forwardRef(function Subtitle( + {className, ...rest}, + forwardRef, +) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Subtitle.displayName = 'Dialog.Subtitle' + +const StyledBody = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + flex-grow: 1; + overflow: auto; + padding: ${get('space.3')}; + + ${sx}; + `, +) +type StyledBodyProps = React.ComponentProps<'div'> & SxProp + +const Body = React.forwardRef(function Body({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) as PolymorphicForwardRefComponent<'div', StyledBodyProps> + +Body.displayName = 'Dialog.Body' + +const StyledFooter = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + box-shadow: 0 -1px 0 ${get('colors.border.default')}; + padding: ${get('space.3')}; + display: flex; + flex-flow: wrap; + justify-content: flex-end; + gap: ${get('space.2')}; + z-index: 1; + flex-shrink: 0; + + ${sx}; + `, +) +type StyledFooterProps = React.ComponentProps<'div'> & SxProp + +const Footer = React.forwardRef(function Footer({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Footer.displayName = 'Dialog.Footer' const Buttons: React.FC> = ({buttons}) => { const autoFocusRef = useProvidedRefOrCreate(buttons.find(button => button.autoFocus)?.ref) diff --git a/packages/react/src/DialogV1/Dialog.docs.json b/packages/react/src/DialogV1/Dialog.docs.json index 254859970d8..77b44d8279a 100644 --- a/packages/react/src/DialogV1/Dialog.docs.json +++ b/packages/react/src/DialogV1/Dialog.docs.json @@ -4,7 +4,11 @@ "name": "Dialog", "status": "deprecated", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-dialog--default" + } + ], "importPath": "@primer/react/deprecated", "props": [ { @@ -37,6 +41,14 @@ "type": "string", "description": "Pass a label to be used to describe the Dialog. Use either a `aria-label` or an `aria-labelledby` but not both." }, + { + "name": "narrow", + "type": "boolean" + }, + { + "name": "wide", + "type": "boolean" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/DialogV1/Dialog.module.css b/packages/react/src/DialogV1/Dialog.module.css new file mode 100644 index 00000000000..dba07129c37 --- /dev/null +++ b/packages/react/src/DialogV1/Dialog.module.css @@ -0,0 +1,67 @@ +.Overlay { + &::before { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99; + display: block; + cursor: default; + content: ' '; + background: var(--overlay-backdrop-bgColor); + } +} + +.CloseIcon { + position: absolute; + top: var(--base-size-8); + right: var(--base-size-16); +} + +.Dialog { + position: fixed; + top: 0; + left: 50%; + z-index: 999; + max-height: 80vh; + margin: 10vh auto; + background-color: var(--bgColor-default); + border-radius: var(--borderRadius-medium); + outline: none; + box-shadow: var(--shadow-floating-large); + transform: translateX(-50%); + + &:where([data-width='default']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 440px; + } + + &:where([data-width='narrow']) { + width: 320px; + } + + &:where([data-width='wide']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 640px; + } + + @media screen and (max-width: 750px) { + width: 100dvw; + height: 100dvh; + margin: 0; + border-radius: 0; + } +} + +.Header { + display: flex; + padding: var(--base-size-16); + background: var(--bgColor-muted); + border-bottom: var(--borderWidth-thin) solid var(--borderColor-default); + border-radius: var(--borderRadius-medium) var(--borderRadius-medium) 0 0; + + @media screen and (max-width: 750px) { + border-radius: 0; + } +} diff --git a/packages/react/src/DialogV1/Dialog.test.tsx b/packages/react/src/DialogV1/Dialog.test.tsx index 7df87bd2c75..d4023e6365c 100644 --- a/packages/react/src/DialogV1/Dialog.test.tsx +++ b/packages/react/src/DialogV1/Dialog.test.tsx @@ -4,6 +4,7 @@ import {Dialog} from '../DialogV1' import {render as HTMLRender, fireEvent} from '@testing-library/react' import axe from 'axe-core' import {behavesAsComponent} from '../utils/testing' +import {FeatureFlags} from '../FeatureFlags' /* Dialog Version 1*/ @@ -113,6 +114,25 @@ describe('Dialog', () => { behavesAsComponent({Component: Dialog.Header}) }) + it('should support `className` on the Dialog element', () => { + const Element = () => + const FeatureFlagElement = () => { + return ( + + + + ) + } + expect(HTMLRender().container.children[1]).toHaveClass('test-class-name') + expect(HTMLRender().container.children[1]).toHaveClass('test-class-name') + }) + it('should have no axe violations', async () => { const spy = jest.spyOn(console, 'warn').mockImplementation() const {container} = HTMLRender(comp) diff --git a/packages/react/src/DialogV1/Dialog.tsx b/packages/react/src/DialogV1/Dialog.tsx index 3e565ba8d3d..7361b223251 100644 --- a/packages/react/src/DialogV1/Dialog.tsx +++ b/packages/react/src/DialogV1/Dialog.tsx @@ -10,6 +10,12 @@ import Text from '../Text' import type {ComponentProps} from '../utils/types' import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef' import {XIcon} from '@primer/octicons-react' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import {clsx} from 'clsx' +import classes from './Dialog.module.css' + +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' // Dialog v1 const noop = () => null @@ -19,41 +25,50 @@ type StyledDialogBaseProps = { wide?: boolean } & SxProp -const DialogBase = styled.div` - box-shadow: ${get('shadows.shadow.large')}; - border-radius: ${get('radii.2')}; - position: fixed; - top: 0; - left: 50%; - transform: translateX(-50%); - max-height: 80vh; - z-index: 999; - margin: 10vh auto; - background-color: ${get('colors.canvas.default')}; - width: ${props => (props.narrow ? '320px' : props.wide ? '640px' : '440px')}; - outline: none; - - @media screen and (max-width: 750px) { - width: 100dvw; - margin: 0; - border-radius: 0; - height: 100dvh; - } +const DialogBase = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + box-shadow: ${get('shadows.shadow.large')}; + border-radius: ${get('radii.2')}; + position: fixed; + top: 0; + left: 50%; + transform: translateX(-50%); + max-height: 80vh; + z-index: 999; + margin: 10vh auto; + background-color: ${get('colors.canvas.default')}; + width: ${props => (props.narrow ? '320px' : props.wide ? '640px' : '440px')}; + outline: none; + + @media screen and (max-width: 750px) { + width: 100dvw; + margin: 0; + border-radius: 0; + height: 100dvh; + } - ${sx}; -` + ${sx}; + `, +) -const DialogHeaderBase = styled(Box)` - border-radius: ${get('radii.2')} ${get('radii.2')} 0px 0px; - border-bottom: 1px solid ${get('colors.border.default')}; - display: flex; +const DialogHeaderBase = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled(Box)` + border-radius: ${get('radii.2')} ${get('radii.2')} 0px 0px; + border-bottom: 1px solid ${get('colors.border.default')}; + display: flex; - @media screen and (max-width: 750px) { - border-radius: 0px; - } + @media screen and (max-width: 750px) { + border-radius: 0px; + } + + ${sx}; + `, +) - ${sx}; -` export type DialogHeaderProps = ComponentProps function DialogHeader({theme, children, backgroundColor = 'canvas.subtle', ...rest}: DialogHeaderProps) { @@ -65,28 +80,40 @@ function DialogHeader({theme, children, backgroundColor = 'canvas.subtle', ...re ) } + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return ( - + {children} ) } -const Overlay = styled.span` - &:before { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: block; - cursor: default; - content: ' '; - background: transparent; - z-index: 99; - background: ${get('colors.primer.canvas.backdrop')}; - } -` +const Overlay = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'span', + styled.span` + &:before { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; + cursor: default; + content: ' '; + background: transparent; + z-index: 99; + background: ${get('colors.primer.canvas.backdrop')}; + } + `, +) type InternalDialogProps = { isOpen?: boolean @@ -96,7 +123,7 @@ type InternalDialogProps = { } & ComponentProps const Dialog = forwardRef( - ({children, onDismiss = noop, isOpen, initialFocusRef, returnFocusRef, ...props}, forwardedRef) => { + ({children, onDismiss = noop, isOpen, initialFocusRef, returnFocusRef, className, ...props}, forwardedRef) => { const overlayRef = useRef(null) const modalRef = useRef(null) useRefObjectAsForwardedRef(forwardedRef, modalRef) @@ -118,17 +145,33 @@ const Dialog = forwardRef( returnFocusRef, overlayRef, }) + + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + const iconStyles = enabled + ? {className: classes.CloseIcon} + : {sx: {position: 'absolute', top: '8px', right: '16px'}} + return isOpen ? ( <> - - + + {children} diff --git a/packages/react/src/DialogV1/Dialog.types.test.tsx b/packages/react/src/DialogV1/Dialog.types.test.tsx index 010f84f6fed..8c31a1a8768 100644 --- a/packages/react/src/DialogV1/Dialog.types.test.tsx +++ b/packages/react/src/DialogV1/Dialog.types.test.tsx @@ -4,8 +4,3 @@ import {Dialog} from '../DialogV1' export function shouldAcceptCallWithNoProps() { return } - -export function shouldNotAcceptSystemProps() { - // @ts-expect-error system props should not be accepted - return -} diff --git a/packages/react/src/FeatureFlags/FeatureFlags.docs.json b/packages/react/src/FeatureFlags/FeatureFlags.docs.json new file mode 100644 index 00000000000..a39f86ceea8 --- /dev/null +++ b/packages/react/src/FeatureFlags/FeatureFlags.docs.json @@ -0,0 +1,17 @@ +{ + "id": "feature_flags", + "name": "FeatureFlags", + "status": "draft", + "a11yReviewed": false, + "stories": [], + "importPath": "@primer/react/experimental", + "props": [ + { + "name": "flags", + "type": "FeatureFlags", + "required": true, + "description": "Object where keys are feature flag names and values are boolean" + } + ], + "subcomponents": [] +} diff --git a/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx b/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx index 0152247f387..ef75656cabc 100644 --- a/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx +++ b/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx @@ -30,6 +30,7 @@ export interface FilteredActionListProps onFilterChange: (value: string, e: React.ChangeEvent) => void textInputProps?: Partial> inputRef?: React.RefObject + className?: string } const StyledHeader = styled.div` @@ -46,6 +47,7 @@ export function FilteredActionList({ textInputProps, inputRef: providedInputRef, sx, + className, ...listProps }: FilteredActionListProps): JSX.Element { const [filterValue, setInternalFilterValue] = useProvidedStateOrCreate(externalFilterValue, undefined, '') @@ -110,7 +112,14 @@ export function FilteredActionList({ useScrollFlash(scrollContainerRef) return ( - + ) => void textInputProps?: Partial> inputRef?: React.RefObject + className?: string } const StyledHeader = styled.div` @@ -52,6 +53,7 @@ export function FilteredActionList({ sx, groupMetadata, showItemDividers, + className, ...listProps }: FilteredActionListProps): JSX.Element { const [filterValue, setInternalFilterValue] = useProvidedStateOrCreate(externalFilterValue, undefined, '') @@ -129,7 +131,14 @@ export function FilteredActionList({ } return ( - + element by FormControl's React Context. \n When 'as' prop is 'legend' or 'span', it is used as the `id` for the element." + }, + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" @@ -77,6 +161,12 @@ { "name": "FormControl.Caption", "props": [ + { + "name": "id", + "type": "string", + "description": "Custom ID to override the ID set by FormControl's React Context", + "defaultValue": "" + }, { "name": "children", "type": "React.ReactNode", @@ -105,6 +195,12 @@ "required": true, "description": "Changes the visual style to match the validation status" }, + { + "name": "id", + "type": "string", + "description": "May be used to override the ID assigned by FormControl's React Context", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" @@ -127,4 +223,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/react/src/FormControl/FormControl.features.stories.tsx b/packages/react/src/FormControl/FormControl.features.stories.tsx index d1e7a284ef4..cdf06c1a6f7 100644 --- a/packages/react/src/FormControl/FormControl.features.stories.tsx +++ b/packages/react/src/FormControl/FormControl.features.stories.tsx @@ -21,6 +21,7 @@ import { } from '..' import {MarkGithubIcon, TriangleDownIcon} from '@primer/octicons-react' import type {ItemInput} from '../deprecated/ActionList/List' +import {Stack} from '../Stack' export default { title: 'Components/FormControl/Features', @@ -339,7 +340,7 @@ export const WithSelectPanel = () => { } export const WithLeadingVisual = () => ( - + Option one @@ -356,7 +357,24 @@ export const WithLeadingVisual = () => ( This one has a caption - + + + Option three + + + + + + + + Option four + + + + + This one has a caption + + ) export const DisabledInputs = () => ( diff --git a/packages/react/src/FormControl/FormControl.tsx b/packages/react/src/FormControl/FormControl.tsx index f2eb061b594..69d4b9bf871 100644 --- a/packages/react/src/FormControl/FormControl.tsx +++ b/packages/react/src/FormControl/FormControl.tsx @@ -14,9 +14,9 @@ import {get} from '../constants' import {useSlots} from '../hooks/useSlots' import type {SxProp} from '../sx' import {useId} from '../hooks/useId' -import FormControlCaption from './_FormControlCaption' -import FormControlLabel from './_FormControlLabel' -import FormControlLeadingVisual from './_FormControlLeadingVisual' +import {FormControlCaption} from './FormControlCaption' +import FormControlLabel from './FormControlLabel' +import FormControlLeadingVisual from './FormControlLeadingVisual' import FormControlValidation from './_FormControlValidation' import {FormControlContextProvider} from './_FormControlContext' import {warning} from '../utils/warning' @@ -172,17 +172,15 @@ const FormControl = React.forwardRef( {slots.leadingVisual} )} - {!slots.label?.props.visuallyHidden || slots.caption ? ( - - {slots.label} - {slots.caption} - - ) : ( - <> - {slots.label} - {slots.caption} - > - )} + *': {paddingLeft: 'var(--stack-gap-condensed)'}, + '> label': {fontWeight: 'var(--base-text-weight-normal)'}, + }} + > + {slots.label} + {slots.caption} + ) : ( + +function FormControlCaption({id, children, sx}: FormControlCaptionProps) { + const {captionId, disabled} = useFormControlContext() + return ( + + {children} + + ) +} + +export {FormControlCaption} diff --git a/packages/react/src/FormControl/_FormControlLabel.tsx b/packages/react/src/FormControl/FormControlLabel.tsx similarity index 95% rename from packages/react/src/FormControl/_FormControlLabel.tsx rename to packages/react/src/FormControl/FormControlLabel.tsx index 4d62b19e114..485894c18d4 100644 --- a/packages/react/src/FormControl/_FormControlLabel.tsx +++ b/packages/react/src/FormControl/FormControlLabel.tsx @@ -1,7 +1,7 @@ import React from 'react' -import InputLabel from '../internal/components/InputLabel' import type {SxProp} from '../sx' import {useFormControlContext} from './_FormControlContext' +import {InputLabel} from '../internal/components/InputLabel' export type Props = { /** @@ -49,6 +49,7 @@ const FormControlLabel: React.FC< sx, ...props, } + return {children} } diff --git a/packages/react/src/FormControl/FormControlLeadingVisual.tsx b/packages/react/src/FormControl/FormControlLeadingVisual.tsx new file mode 100644 index 00000000000..27c18d69aca --- /dev/null +++ b/packages/react/src/FormControl/FormControlLeadingVisual.tsx @@ -0,0 +1,44 @@ +import React from 'react' +import {get} from '../constants' +import type {SxProp} from '../sx' +import {useFormControlContext} from './_FormControlContext' +import styled from 'styled-components' +import sx from '../sx' + +const FormControlLeadingVisual: React.FC> = ({children, sx}) => { + const {disabled, captionId} = useFormControlContext() + return ( + + {children} + + ) +} + +const StyledLeadingVisual = styled.div` + --leadingVisual-size: ${get('fontSizes.2')}; + + color: var(--fgColor-default); + margin-inline-start: ${get('space.2')}; + + &:where([data-control-disabled]) { + color: var(--fgColor-muted); + } + + & > * { + min-width: var(--leadingVisual-size); + min-height: var(--leadingVisual-size); + fill: currentColor; + } + + &:where([data-has-caption]) { + --leadingVisual-size: ${get('fontSizes.4')}; + } + + ${sx} +` + +export default FormControlLeadingVisual diff --git a/packages/react/src/FormControl/_FormControlCaption.tsx b/packages/react/src/FormControl/_FormControlCaption.tsx deleted file mode 100644 index 4a3be2bdedb..00000000000 --- a/packages/react/src/FormControl/_FormControlCaption.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import InputCaption from '../internal/components/InputCaption' -import type {SxProp} from '../sx' -import {useFormControlContext} from './_FormControlContext' - -const FormControlCaption: React.FC> = ({children, sx, id}) => { - const {captionId, disabled} = useFormControlContext() - return ( - - {children} - - ) -} - -export default FormControlCaption diff --git a/packages/react/src/FormControl/_FormControlContext.tsx b/packages/react/src/FormControl/_FormControlContext.tsx index f27b321ec84..e7a4cb550e3 100644 --- a/packages/react/src/FormControl/_FormControlContext.tsx +++ b/packages/react/src/FormControl/_FormControlContext.tsx @@ -17,7 +17,7 @@ export function useFormControlContext(): FormControlContext { return useContext(FormControlContext) ?? {} } -interface FormControlForwardedProps extends Omit { +interface FormControlForwardedProps extends Pick { ['aria-describedby']?: string } @@ -29,22 +29,14 @@ interface FormControlForwardedProps extends Omit(externalProps: P): P & FormControlForwardedProps -/** - * Make any component compatible with `FormControl`'s automatic wiring up of accessibility attributes & validation by - * reading the props from this hook and handling them / assigning them to the underlying form control. If used outside - * of `FormControl`, this hook has no effect. - */ -export function useFormControlForwardedProps(): FormControlForwardedProps -export function useFormControlForwardedProps(externalProps: FormControlForwardedProps = {}) { +export function useFormControlForwardedProps(externalProps: P): P & FormControlForwardedProps { const context = useContext(FormControlContext) - if (!context) return externalProps + if (!context) return externalProps as P & FormControlForwardedProps return { disabled: context.disabled, id: context.id, required: context.required, - validationStatus: context.validationStatus, ['aria-describedby']: [context.validationMessageId, context.captionId].filter(Boolean).join(' ') || undefined, ...externalProps, } diff --git a/packages/react/src/FormControl/_FormControlLeadingVisual.tsx b/packages/react/src/FormControl/_FormControlLeadingVisual.tsx deleted file mode 100644 index 80551681704..00000000000 --- a/packages/react/src/FormControl/_FormControlLeadingVisual.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import Box from '../Box' -import {get} from '../constants' -import type {SxProp} from '../sx' -import {useFormControlContext} from './_FormControlContext' - -const FormControlLeadingVisual: React.FC> = ({children, sx}) => { - const {disabled, captionId} = useFormControlContext() - return ( - *': { - minWidth: captionId ? get('fontSizes.4') : get('fontSizes.2'), - minHeight: captionId ? get('fontSizes.4') : get('fontSizes.2'), - fill: 'currentColor', - }, - ...sx, - }} - ml={2} - > - {children} - - ) -} - -export default FormControlLeadingVisual diff --git a/packages/react/src/Header/Header.tsx b/packages/react/src/Header/Header.tsx index 3c7c194ca43..e36b2d983b1 100644 --- a/packages/react/src/Header/Header.tsx +++ b/packages/react/src/Header/Header.tsx @@ -15,7 +15,7 @@ type StyledHeaderProps = React.ComponentProps<'header'> & SxProp type StyledHeaderItemProps = React.ComponentProps<'div'> & SxProp & {full?: boolean} type StyledHeaderLinkProps = React.ComponentProps<'a'> & SxProp & {to?: Location | Pathname} -const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' const StyledHeader = toggleStyledComponent( CSS_MODULES_FEATURE_FLAG, diff --git a/packages/react/src/Hidden/Hidden.docs.json b/packages/react/src/Hidden/Hidden.docs.json index ab4ecf2edef..2820003d38c 100644 --- a/packages/react/src/Hidden/Hidden.docs.json +++ b/packages/react/src/Hidden/Hidden.docs.json @@ -1,9 +1,19 @@ { - "id": "drafts_hidden", + "id": "hidden", "name": "Hidden", "status": "draft", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "drafts-components-hidden--default" + }, + { + "id": "drafts-components-hidden-features--hide-content" + }, + { + "id": "drafts-components-hidden-features--render-content-responsively" + } + ], "importPath": "@primer/react/experimental", "props": [ { diff --git a/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx b/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx new file mode 100644 index 00000000000..95c6d281cac --- /dev/null +++ b/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx @@ -0,0 +1,15 @@ +import type {Meta} from '@storybook/react' +import React from 'react' +import {InlineMessage} from '.' + +const meta = { + title: 'Experimental/Components/InlineMessage/Dev', + component: InlineMessage, +} satisfies Meta + +export default meta + +// Previous Styled version of the component didn't accept an sx prop so no need to test if that works. +export const DevDefault = () => { + return An example inline message +} diff --git a/packages/react/src/InlineMessage/InlineMessage.docs.json b/packages/react/src/InlineMessage/InlineMessage.docs.json index dbdbb463b70..4547cfe57d5 100644 --- a/packages/react/src/InlineMessage/InlineMessage.docs.json +++ b/packages/react/src/InlineMessage/InlineMessage.docs.json @@ -6,16 +6,22 @@ "importPath": "@primer/react/experimental", "stories": [ { - "id": "experimental-components-inlinemessage-features--critical" + "id": "components-inlinemessage--default" }, { - "id": "experimental-components-inlinemessage-features--success" + "id": "components-inlinemessage-features--critical" }, { - "id": "experimental-components-inlinemessage-features--unavailable" + "id": "components-inlinemessage-features--success" }, { - "id": "experimental-components-inlinemessage-features--warning" + "id": "components-inlinemessage-features--unavailable" + }, + { + "id": "components-inlinemessage-features--warning" + }, + { + "id": "components-inlinemessage-features--multiline" } ], "props": [ diff --git a/packages/react/src/InlineMessage/InlineMessage.module.css b/packages/react/src/InlineMessage/InlineMessage.module.css new file mode 100644 index 00000000000..0ddbea7498b --- /dev/null +++ b/packages/react/src/InlineMessage/InlineMessage.module.css @@ -0,0 +1,42 @@ +.InlineMessage { + display: grid; + /* stylelint-disable-next-line primer/typography */ + font-size: var(--inline-message-fontSize); + /* stylelint-disable-next-line primer/typography */ + line-height: var(--inline-message-lineHeight); + /* stylelint-disable-next-line primer/colors */ + color: var(--inline-message-fgColor); + column-gap: 0.5rem; + grid-template-columns: auto 1fr; + align-items: start; + + &[data-size='small'] { + --inline-message-fontSize: var(--text-body-size-small); + --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + } + + &[data-size='medium'] { + --inline-message-fontSize: var(--text-body-size-medium); + --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); + } + + &[data-variant='warning'] { + --inline-message-fgColor: var(--fgColor-attention); + } + + &[data-variant='critical'] { + --inline-message-fgColor: var(--fgColor-danger); + } + + &[data-variant='success'] { + --inline-message-fgColor: var(--fgColor-success); + } + + &[data-variant='unavailable'] { + --inline-message-fgColor: var(--fgColor-muted); + } +} + +.InlineMessageIcon { + min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); +} diff --git a/packages/react/src/InlineMessage/InlineMessage.tsx b/packages/react/src/InlineMessage/InlineMessage.tsx index 55f2296a6fd..173c9502f1b 100644 --- a/packages/react/src/InlineMessage/InlineMessage.tsx +++ b/packages/react/src/InlineMessage/InlineMessage.tsx @@ -1,80 +1,105 @@ import {AlertFillIcon, AlertIcon, CheckCircleFillIcon, CheckCircleIcon} from '@primer/octicons-react' +import {clsx} from 'clsx' import React from 'react' import styled from 'styled-components' import {get} from '../constants' - +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './InlineMessage.module.css' +import type {SxProp} from '../sx' type MessageVariant = 'critical' | 'success' | 'unavailable' | 'warning' -export type InlineMessageProps = React.ComponentPropsWithoutRef<'div'> & { - /** - * Specify the size of the InlineMessage - */ - size?: 'small' | 'medium' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' - /** - * Specify the type of the InlineMessage - */ - variant: MessageVariant -} +export type InlineMessageProps = React.ComponentPropsWithoutRef<'div'> & + SxProp & { + /** + * Specify the size of the InlineMessage + */ + size?: 'small' | 'medium' -const StyledMessage = styled.div` - display: grid; - column-gap: 0.5rem; - grid-template-columns: auto 1fr; - align-items: start; - color: var(--inline-message-fgColor, ${get('colors.fg.muted')}); - line-height: var(--inline-message-lineHeight); - font-size: var(--inline-message-fontSize, ${get('fontSizes.1')}); - - &[data-size='small'] { - --inline-message-fontSize: var(--text-body-size-small, ${get('fontSizes.0')}); - --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + /** + * Specify the type of the InlineMessage + */ + variant: MessageVariant } - &[data-size='medium'] { - --inline-message-fontSize: var(--text-body-size-medium, ${get('fontSizes.1')}); - --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); - } +const StyledMessage = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + display: grid; + column-gap: 0.5rem; + grid-template-columns: auto 1fr; + align-items: start; + color: var(--inline-message-fgColor, ${get('colors.fg.muted')}); + line-height: var(--inline-message-lineHeight); + font-size: var(--inline-message-fontSize, ${get('fontSizes.1')}); - &[data-variant='warning'] { - --inline-message-fgColor: ${get('colors.attention.fg')}; - } + &[data-size='small'] { + --inline-message-fontSize: var(--text-body-size-small, ${get('fontSizes.0')}); + --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + } - &[data-variant='critical'] { - --inline-message-fgColor: ${get('colors.danger.fg')}; - } + &[data-size='medium'] { + --inline-message-fontSize: var(--text-body-size-medium, ${get('fontSizes.1')}); + --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); + } - &[data-variant='success'] { - --inline-message-fgColor: ${get('colors.success.fg')}; - } + &[data-variant='warning'] { + --inline-message-fgColor: ${get('colors.attention.fg')}; + } - &[data-variant='unavailable'] { - --inline-message-fgColor: ${get('colors.fg.muted')}; - } + &[data-variant='critical'] { + --inline-message-fgColor: ${get('colors.danger.fg')}; + } + + &[data-variant='success'] { + --inline-message-fgColor: ${get('colors.success.fg')}; + } + + &[data-variant='unavailable'] { + --inline-message-fgColor: ${get('colors.fg.muted')}; + } - & .InlineMessageIcon { - min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); + & .InlineMessageIcon { + min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); + } + `, +) + +const variantToIcon = (enabled: boolean, variant: MessageVariant): React.ReactNode => { + const icons = { + warning: , + critical: , + success: , + unavailable: , } -` -const variantToIcon: Record = { - warning: , - critical: , - success: , - unavailable: , + return icons[variant] } -const variantToSmallIcon: Record = { - warning: , - critical: , - success: , - unavailable: , +const variantToSmallIcon = (enabled: boolean, variant: MessageVariant): React.ReactNode => { + const icons = { + warning: , + critical: , + success: , + unavailable: , + } + return icons[variant] } -export function InlineMessage({children, size = 'medium', variant, ...rest}: InlineMessageProps) { - const icon = size === 'small' ? variantToSmallIcon[variant] : variantToIcon[variant] +export function InlineMessage({children, className, size = 'medium', variant, ...rest}: InlineMessageProps) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + const icon = size === 'small' ? variantToSmallIcon(enabled, variant) : variantToIcon(enabled, variant) return ( - + {icon} {children} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.docs.json b/packages/react/src/KeybindingHint/KeybindingHint.docs.json index 136c41954ef..46d1d975f44 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.docs.json +++ b/packages/react/src/KeybindingHint/KeybindingHint.docs.json @@ -22,6 +22,12 @@ "type": "'normal' | 'onEmphasis'", "defaultValue": "'normal'", "description": "Set to `onEmphasis` for display on 'emphasis' colors." + }, + { + "name": "size", + "type": "'small' | 'normal'", + "defaultValue": "'normal'", + "description": "Control the size of the hint." } ], "subcomponents": [] diff --git a/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx b/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx index 37e92d203ce..a9a20a0ca21 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx +++ b/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx @@ -28,3 +28,5 @@ export const OnEmphasis: StoryObj = { ), args: {keys: chord, variant: 'onEmphasis'}, } + +export const Small = {args: {keys: chord, size: 'small'}} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.module.css b/packages/react/src/KeybindingHint/KeybindingHint.module.css new file mode 100644 index 00000000000..980830b0e8f --- /dev/null +++ b/packages/react/src/KeybindingHint/KeybindingHint.module.css @@ -0,0 +1,15 @@ +.KeybindingHint { + position: relative; + padding: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + /* stylelint-disable-next-line primer/typography */ + line-height: unset; + color: inherit; + white-space: nowrap; + vertical-align: baseline; + background: none; + border: none; + box-shadow: none; +} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.tsx b/packages/react/src/KeybindingHint/KeybindingHint.tsx index 82338b748ca..4b7a820aada 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.tsx +++ b/packages/react/src/KeybindingHint/KeybindingHint.tsx @@ -3,34 +3,48 @@ import {memo} from 'react' import Text from '../Text' import type {KeybindingHintProps} from './props' import {accessibleSequenceString, Sequence} from './components/Sequence' +import {useFeatureFlag} from '../FeatureFlags' + +import classes from './KeybindingHint.module.css' +import {clsx} from 'clsx' /** `kbd` element with style resets. */ -const Kbd = ({children}: {children: ReactNode}) => ( - - {children} - -) +const Kbd = ({children, className}: {children: ReactNode; className?: string}) => { + const enabled = useFeatureFlag('primer_react_css_modules_team') + + return ( + + {children} + + ) +} /** Indicates the presence of an available keybinding. */ // KeybindingHint is a good candidate for memoizing since props will rarely change -export const KeybindingHint = memo((props: KeybindingHintProps) => ( - +export const KeybindingHint = memo(({className, ...props}: KeybindingHintProps) => ( + )) diff --git a/packages/react/src/KeybindingHint/components/Chord.tsx b/packages/react/src/KeybindingHint/components/Chord.tsx index d12ce8f44ff..280769db16d 100644 --- a/packages/react/src/KeybindingHint/components/Chord.tsx +++ b/packages/react/src/KeybindingHint/components/Chord.tsx @@ -29,24 +29,26 @@ const splitChord = (chord: string) => .map(k => k.toLowerCase()) .sort(compareLowercaseKeys) -export const Chord = ({keys, format = 'condensed', variant = 'normal'}: KeybindingHintProps) => ( +export const Chord = ({keys, format = 'condensed', variant = 'normal', size = 'normal'}: KeybindingHintProps) => ( {splitChord(keys).map((k, i) => ( diff --git a/packages/react/src/KeybindingHint/components/Sequence.tsx b/packages/react/src/KeybindingHint/components/Sequence.tsx index aaa4ba00f0f..d2b6ab5ce9f 100644 --- a/packages/react/src/KeybindingHint/components/Sequence.tsx +++ b/packages/react/src/KeybindingHint/components/Sequence.tsx @@ -5,7 +5,7 @@ import {accessibleChordString, Chord} from './Chord' const splitSequence = (sequence: string) => sequence.split(' ') -export const Sequence = ({keys, format = 'condensed', variant = 'normal'}: KeybindingHintProps) => +export const Sequence = ({keys, ...chordProps}: KeybindingHintProps) => splitSequence(keys).map((c, i) => ( { @@ -16,7 +16,7 @@ export const Sequence = ({keys, format = 'condensed', variant = 'normal'}: Keybi > ) } - + )) diff --git a/packages/react/src/KeybindingHint/props.ts b/packages/react/src/KeybindingHint/props.ts index 72584086435..bc384fafd08 100644 --- a/packages/react/src/KeybindingHint/props.ts +++ b/packages/react/src/KeybindingHint/props.ts @@ -27,4 +27,12 @@ export interface KeybindingHintProps { * Set to `onEmphasis` for display on emphasis colors. */ variant?: KeybindingHintVariant + /** + * Control the size of the hint. + */ + size?: 'small' | 'normal' + /** + * Additional class name to apply to the hint. + */ + className?: string } diff --git a/packages/react/src/Label/Label.docs.json b/packages/react/src/Label/Label.docs.json index 078e03a9ff3..9abc9b394aa 100644 --- a/packages/react/src/Label/Label.docs.json +++ b/packages/react/src/Label/Label.docs.json @@ -3,7 +3,44 @@ "name": "Label", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-label--default" + }, + { + "id": "components-label-features--primary" + }, + { + "id": "components-label-features--secondary" + }, + { + "id": "components-label-features--accent" + }, + { + "id": "components-label-features--success" + }, + { + "id": "components-label-features--attention" + }, + { + "id": "components-label-features--severe" + }, + { + "id": "components-label-features--danger" + }, + { + "id": "components-label-features--done" + }, + { + "id": "components-label-features--sponsors" + }, + { + "id": "components-label-features--size-large" + }, + { + "id": "components-label-features--size-small" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/LabelGroup/LabelGroup.docs.json b/packages/react/src/LabelGroup/LabelGroup.docs.json index 51e64eef176..578d7fa40fe 100644 --- a/packages/react/src/LabelGroup/LabelGroup.docs.json +++ b/packages/react/src/LabelGroup/LabelGroup.docs.json @@ -3,7 +3,26 @@ "name": "LabelGroup", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-labelgroup--default" + }, + { + "id": "components-labelgroup-features--truncate-auto" + }, + { + "id": "components-labelgroup-features--truncate-auto-with-interactive-tokens" + }, + { + "id": "components-labelgroup-features--truncate-after-five" + }, + { + "id": "components-labelgroup-features--truncate-auto-expand-inline" + }, + { + "id": "components-labelgroup-features--truncate-auto-expand-inline-with-interactive-tokens" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Link/Link.docs.json b/packages/react/src/Link/Link.docs.json index 40506efbdf9..49ffe0d6f77 100644 --- a/packages/react/src/Link/Link.docs.json +++ b/packages/react/src/Link/Link.docs.json @@ -3,7 +3,20 @@ "name": "Link", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-link--default" + }, + { + "id": "components-link-features--muted" + }, + { + "id": "components-link-features--underline" + }, + { + "id": "components-link-features--inline" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Link/Link.tsx b/packages/react/src/Link/Link.tsx index 9c27320a776..8e98db69c24 100644 --- a/packages/react/src/Link/Link.tsx +++ b/packages/react/src/Link/Link.tsx @@ -17,7 +17,7 @@ type StyledLinkProps = { inline?: boolean } & SxProp -const Link = forwardRef(({as: Component = 'a', className, inline, underline, ...props}, forwardedRef) => { +const Link = forwardRef(({as: Component = 'a', className, inline, underline, hoverColor, ...props}, forwardedRef) => { const innerRef = React.useRef(null) useRefObjectAsForwardedRef(forwardedRef, innerRef) @@ -53,6 +53,7 @@ const Link = forwardRef(({as: Component = 'a', className, inline, underline, ... data-muted={props.muted} data-inline={inline} data-underline={underline} + data-hover-color={hoverColor} {...props} // @ts-ignore shh ref={innerRef} @@ -66,6 +67,7 @@ const Link = forwardRef(({as: Component = 'a', className, inline, underline, ... data-muted={props.muted} data-inline={inline} data-underline={underline} + data-hover-color={hoverColor} {...props} // @ts-ignore shh ref={innerRef} diff --git a/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap b/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap index 8b8d5ef784c..33636ed0777 100644 --- a/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap +++ b/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap @@ -16,7 +16,7 @@ exports[`Link passes href down to link element 1`] = ` exports[`Link respects hoverColor prop 1`] = ` `; diff --git a/packages/react/src/NavList/NavList.docs.json b/packages/react/src/NavList/NavList.docs.json index c6df5c21b99..6e2cfbd407a 100644 --- a/packages/react/src/NavList/NavList.docs.json +++ b/packages/react/src/NavList/NavList.docs.json @@ -53,6 +53,12 @@ "type": "boolean", "description": "The open state of the item when it is initially rendered if the item has a SubNav." }, + { + "name": "inactiveText", + "type": "string", + "description": "Text to explain why this item is currently inactive and cannot be activated.", + "defaultValue": "" + }, { "name": "ref", "type": "React.RefObject" @@ -114,6 +120,13 @@ { "name": "NavList.Group", "props": [ + { + "name": "children", + "type": "ReactNode", + "required": true, + "description": "A related set of NavList.Items", + "defaultValue": "" + }, { "name": "title", "type": "string", @@ -132,6 +145,27 @@ { "name": "NavList.GroupHeading", "props": [ + { + "name": "auxiliaryText", + "type": "string", + "required": false, + "description": "Secondary text which provides additional information about a `Group`.", + "defaultValue": "" + }, + { + "name": "variant", + "type": "'subtle' | 'filled'", + "required": false, + "description": "Style variations. Usage is discretionary.\n\n- `\"filled\"` - Superimposed on a background, offset from nearby content\n- `\"subtle\"` - Relatively less offset from nearby content", + "defaultValue": "" + }, + { + "name": "visuallyHidden", + "type": "boolean", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap b/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap index 1d4bccc1f5a..0310e28f437 100644 --- a/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap +++ b/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap @@ -46,6 +46,7 @@ exports[`NavList renders a simple list 1`] = ` flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c7 { @@ -55,6 +56,7 @@ exports[`NavList renders a simple list 1`] = ` flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c0 { @@ -114,6 +116,11 @@ exports[`NavList renders a simple list 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c2[aria-disabled] [data-component="ActionList.Selection"], +.c2[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c2 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -222,6 +229,11 @@ exports[`NavList renders a simple list 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c6[aria-disabled] [data-component="ActionList.Selection"], +.c6[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c6 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -420,6 +432,8 @@ exports[`NavList renders with groups 1`] = ` margin-top: calc(8px - 1px); margin-bottom: 8px; list-style: none; + margin-right: calc(-1 * var(--base-size-8)); + margin-left: calc(-1 * var(--base-size-8)); } .c1:first-child { @@ -511,6 +525,7 @@ exports[`NavList renders with groups 1`] = ` flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c11 { @@ -520,6 +535,7 @@ exports[`NavList renders with groups 1`] = ` flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c0 { @@ -579,6 +595,11 @@ exports[`NavList renders with groups 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c6[aria-disabled] [data-component="ActionList.Selection"], +.c6[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c6 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -687,6 +708,11 @@ exports[`NavList renders with groups 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c10[aria-disabled] [data-component="ActionList.Selection"], +.c10[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c10 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -943,6 +969,7 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c8 { @@ -953,6 +980,10 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav color: var(--fgColor-muted,var(--color-fg-muted,#656d76)); margin-left: 8px; font-weight: initial; + display: grid; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; } [data-variant="danger"]:hover .c1, @@ -992,6 +1023,7 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c10 { @@ -1066,6 +1098,11 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c11[aria-disabled] [data-component="ActionList.Selection"], +.c11[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c11 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1174,6 +1211,11 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c4[aria-disabled] [data-component="ActionList.Selection"], +.c4[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c4 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1428,6 +1470,10 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t color: var(--fgColor-muted,var(--color-fg-muted,#656d76)); margin-left: 8px; font-weight: initial; + display: grid; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; } [data-variant="danger"]:hover .c1, @@ -1473,6 +1519,7 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c0 { @@ -1541,6 +1588,11 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c11[aria-disabled] [data-component="ActionList.Selection"], +.c11[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c11 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1659,6 +1711,11 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c4[aria-disabled] [data-component="ActionList.Selection"], +.c4[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c4 [data-component="ActionList.Item--DividerContainer"] { position: relative; } diff --git a/packages/react/src/Overlay/Overlay.dev.stories.tsx b/packages/react/src/Overlay/Overlay.dev.stories.tsx new file mode 100644 index 00000000000..1f848d4d6c2 --- /dev/null +++ b/packages/react/src/Overlay/Overlay.dev.stories.tsx @@ -0,0 +1,91 @@ +import React, {useRef, useState} from 'react' +import type {Args, Meta} from '@storybook/react' +import Text from '../Text' +import {Button, IconButton} from '../Button' +import Overlay from './Overlay' +import {useFocusTrap} from '../hooks/useFocusTrap' +import Box from '../Box' +import {XIcon} from '@primer/octicons-react' + +export default { + title: 'Private/Components/Overlay/Dev', + component: Overlay, + args: { + open: false, + }, + argTypes: { + open: { + control: false, + visible: false, + }, + }, +} as Meta + +export const SxProps = (args: Args) => { + const [isOpen, setIsOpen] = useState(false) + const buttonRef = useRef(null) + const confirmButtonRef = useRef(null) + const anchorRef = useRef(null) + const closeOverlay = () => setIsOpen(false) + const containerRef = useRef(null) + useFocusTrap({ + containerRef, + disabled: !isOpen, + }) + return ( + + { + setIsOpen(!isOpen) + }} + > + Open overlay + + {isOpen || args.open ? ( + + + + Look! an overlay + + + ) : null} + + ) +} diff --git a/packages/react/src/Overlay/Overlay.docs.json b/packages/react/src/Overlay/Overlay.docs.json index 8187889934b..6091b66b5c7 100644 --- a/packages/react/src/Overlay/Overlay.docs.json +++ b/packages/react/src/Overlay/Overlay.docs.json @@ -4,6 +4,7 @@ "status": "alpha", "a11yReviewed": false, "stories": [ + {"id": "private-components-overlay--default"}, {"id": "private-components-overlay-features--dialog-overlay"}, {"id": "private-components-overlay-features--positioned-overlays"} ], @@ -112,12 +113,33 @@ "defaultValue": "", "description": "If defined, Overlays will be rendered in the named portal. See also `Portal`." }, + { + "name": "overflow", + "type": "'hidden' | 'scroll' | 'auto' | 'visible'", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "preventOverflow", "type": "boolean", "defaultValue": "true", "description": "Determines if the Overlay width should be adjusted responsively if `width` is set to either `auto`, `medium` or lower and there is not enough space to display the Overlay. If `preventOverflow` is set to `false`, the Overlay will be displayed at the maximum width that fits within the viewport." }, + { + "name": "role", + "type": "ARIA role - will most often be 'dialog' or 'menu'", + "required": false, + "description": "ARIA role to use for the overlay", + "defaultValue": "" + }, + { + "name": "data-test-id", + "type": "unknown", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Overlay/Overlay.features.stories.tsx b/packages/react/src/Overlay/Overlay.features.stories.tsx index 6b31bdbb7ca..af4c93bc5e3 100644 --- a/packages/react/src/Overlay/Overlay.features.stories.tsx +++ b/packages/react/src/Overlay/Overlay.features.stories.tsx @@ -1,5 +1,5 @@ import React, {useState, useRef, useCallback} from 'react' -import type {Meta} from '@storybook/react' +import type {Args, Meta} from '@storybook/react' import {TriangleDownIcon, PlusIcon, IssueDraftIcon, XIcon} from '@primer/octicons-react' import { Overlay, @@ -18,8 +18,6 @@ import { ActionMenu, useFocusTrap, } from '..' -import type {AnchorSide} from '@primer/behaviors' -import type {AriaRole} from '../utils/types' import {Tooltip} from '../TooltipV2' export default { @@ -28,6 +26,7 @@ export default { args: { anchorSide: 'inside-top', role: 'dialog', + open: false, }, argTypes: { anchorSide: { @@ -49,16 +48,14 @@ export default { role: { type: 'string', }, + open: { + control: false, + visible: false, + }, }, } as Meta -interface OverlayProps { - anchorSide?: AnchorSide - role?: AriaRole - right?: boolean -} - -export const DropdownOverlay = ({anchorSide}: OverlayProps) => { +export const DropdownOverlay = ({anchorSide, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) @@ -67,7 +64,7 @@ export const DropdownOverlay = ({anchorSide}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { role="none" > - Copy link - Quote reply - Reference in new issue - Edit + Copy link + Quote reply + Reference in new issue + Edit - Delete + + Delete + ) : null} @@ -92,7 +91,7 @@ export const DropdownOverlay = ({anchorSide}: OverlayProps) => { ) } -export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { +export const DialogOverlay = ({anchorSide, role, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) const containerRef = useRef(null) @@ -106,7 +105,7 @@ export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Confirmation screen' : undefined} ref={containerRef} > @@ -134,7 +134,7 @@ export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { ) } -export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { +export const OverlayOnTopOfOverlay = ({anchorSide, role, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const [isSecondaryOpen, setIsSecondaryOpen] = useState(false) const buttonRef = useRef(null) @@ -161,7 +161,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Open overlay' : undefined} ref={primaryContainer} preventOverflow={false} > @@ -188,6 +189,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Options' : undefined} ref={secondaryContainer} preventOverflow={false} > @@ -218,7 +220,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { ) } -export const MemexNestedOverlays = ({role}: OverlayProps) => { +export const MemexNestedOverlays = ({role, open}: Args) => { const [overlayOpen, setOverlayOpen] = React.useState(false) const buttonRef = useRef(null) const containerRef = useRef(null) @@ -238,7 +240,7 @@ export const MemexNestedOverlays = ({role}: OverlayProps) => { icon={TriangleDownIcon} /> - {overlayOpen && ( + {(overlayOpen || open) && ( setOverlayOpen(false)} @@ -249,15 +251,21 @@ export const MemexNestedOverlays = ({role}: OverlayProps) => { left={16} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Add iteration' : undefined} ref={containerRef} preventOverflow={false} > - setOverlayOpen(false)} sx={{display: 'flex', flexDirection: 'column', py: 2}}> + setOverlayOpen(false)} + sx={{display: 'flex', flexDirection: 'column', py: 2}} + aria-label="Set Duration Form" + >
Use J and K keys to move focus. @@ -289,8 +298,10 @@ export const OverlayPropsOverrides = () => { role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', + sx: {minWidth: '320px'}, }} focusZoneSettings={{disabled: true}} + preventOverflow={false} >
diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx index 84ec0727c24..f214b8c1410 100644 --- a/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx +++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx @@ -15,9 +15,9 @@ export default { } as Meta const hoverCard = ( - + - + Follow @@ -53,8 +53,9 @@ export const Default = () => { onOpen={() => setOpen(true)} onClose={() => setOpen(false)} renderAnchor={props => Button} - overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay'}} + overlayProps={{role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', sx: {minWidth: '320px'}}} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} @@ -83,9 +84,11 @@ export const Playground = (args: Args) => { role: 'dialog', 'aria-modal': true, 'aria-label': 'User Card Overlay', + sx: {minWidth: '320px'}, }} side={args.side} focusZoneSettings={{disabled: true}} + preventOverflow={false} > {hoverCard} diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx b/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx index bfc08cf041a..e046e301938 100644 --- a/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx +++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.tsx @@ -84,6 +84,11 @@ interface AnchoredOverlayBaseProps extends Pick { const anchorRef = useProvidedRefOrCreate(externalAnchorRef) const [overlayRef, updateOverlayRef] = useRenderForcingRef() @@ -198,7 +204,7 @@ export const AnchoredOverlay: React.FC {children} diff --git a/packages/react/src/Autocomplete/Autocomplete.docs.json b/packages/react/src/Autocomplete/Autocomplete.docs.json index ff776c4ab01..94b13ca91e6 100644 --- a/packages/react/src/Autocomplete/Autocomplete.docs.json +++ b/packages/react/src/Autocomplete/Autocomplete.docs.json @@ -3,12 +3,52 @@ "name": "Autocomplete", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-autocomplete--default" + }, + { + "id": "components-autocomplete-features--with-token-input" + }, + { + "id": "components-autocomplete-features--add-new-item" + }, + { + "id": "components-autocomplete-features--custom-search-filter-fn" + }, + { + "id": "components-autocomplete-features--custom-sort-after-menu-close" + }, + { + "id": "components-autocomplete-features--with-callback-when-overlay-open-state-changes" + }, + { + "id": "components-autocomplete-features--async-loading-of-items" + }, + { + "id": "components-autocomplete-features--rendering-the-menu-outside-an-overlay" + }, + { + "id": "components-autocomplete-features--custom-overlay-menu-anchor" + }, + { + "id": "components-autocomplete-features--in-overlay-with-custom-scroll-container-ref" + }, + { + "id": "components-autocomplete-features--in-a-dialog" + } + ], "importPath": "@primer/react", "props": [ { "name": "children", "type": "React.ReactNode" + }, + { + "name": "id", + "type": "string", + "description": "May be used to customize how the ID is set on the text input to be used by ARIA attributes on related elements.", + "defaultValue": "" } ], "subcomponents": [ @@ -68,7 +108,7 @@ { "name": "selectedItemIds", "required": true, - "type": "(string | number)[]", + "type": "string[]", "description": "The IDs of the selected items" }, { diff --git a/packages/react/src/Avatar/Avatar.docs.json b/packages/react/src/Avatar/Avatar.docs.json index ca2581332dc..e678fec6eb5 100644 --- a/packages/react/src/Avatar/Avatar.docs.json +++ b/packages/react/src/Avatar/Avatar.docs.json @@ -3,7 +3,23 @@ "name": "Avatar", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-avatar--default" + }, + { + "id": "components-avatar-features--square" + }, + { + "id": "components-avatar-features--square-sx-prop" + }, + { + "id": "components-avatar-features--size" + }, + { + "id": "components-avatar-features--size-responsive" + } + ], "importPath": "@primer/react", "props": [ { @@ -24,6 +40,13 @@ "defaultValue": "false", "description": "If true, the avatar will be square instead of circular." }, + { + "name": "src", + "type": "string", + "required": false, + "description": "URL of the avatar image.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Avatar/Avatar.features.stories.tsx b/packages/react/src/Avatar/Avatar.features.stories.tsx index dc5ee4b0636..2c448438db4 100644 --- a/packages/react/src/Avatar/Avatar.features.stories.tsx +++ b/packages/react/src/Avatar/Avatar.features.stories.tsx @@ -21,18 +21,18 @@ export const SquareSxProp = () => ( export const Size = () => ( - - - - - - - - - - - - + + + + + + + + + + + + ) @@ -41,52 +41,52 @@ export const SizeResponsive = () => ( ) diff --git a/packages/react/src/Avatar/Avatar.stories.tsx b/packages/react/src/Avatar/Avatar.stories.tsx index 476c118a998..c5b07cc1403 100644 --- a/packages/react/src/Avatar/Avatar.stories.tsx +++ b/packages/react/src/Avatar/Avatar.stories.tsx @@ -16,14 +16,14 @@ type Args = { sizeAtWide?: number } & Omit -export const Default = () => +export const Default = () => export const Playground: StoryFn = args => { return ( ) @@ -63,12 +63,6 @@ Playground.argTypes = { disable: true, }, }, - ref: { - controls: false, - table: { - disable: true, - }, - }, sx: { controls: false, table: { diff --git a/packages/react/src/Avatar/Avatar.tsx b/packages/react/src/Avatar/Avatar.tsx index 4f5f066a147..b8120519df8 100644 --- a/packages/react/src/Avatar/Avatar.tsx +++ b/packages/react/src/Avatar/Avatar.tsx @@ -1,21 +1,15 @@ import {clsx} from 'clsx' import React from 'react' import Box from '../Box' -import styled from 'styled-components' -import {get} from '../constants' -import type {BetterCssProperties, BetterSystemStyleObject, SxProp} from '../sx' -import sx, {merge} from '../sx' -import type {ComponentProps} from '../utils/types' +import type {SxProp} from '../sx' import type {ResponsiveValue} from '../hooks/useResponsiveValue' import {isResponsiveValue} from '../hooks/useResponsiveValue' -import {getBreakpointDeclarations} from '../utils/getBreakpointDeclarations' import {defaultSxProp} from '../utils/defaultSxProp' import classes from './Avatar.module.css' -import {useFeatureFlag} from '../FeatureFlags' export const DEFAULT_AVATAR_SIZE = 20 -type StyledAvatarProps = { +export type AvatarProps = { /** Sets the width and height of the avatar. */ size?: number | ResponsiveValue /** Sets the shape of the avatar to a square if true. If false, the avatar will be circular. */ @@ -24,99 +18,56 @@ type StyledAvatarProps = { src: string /** Provide alt text when the Avatar is used without the user's name next to it. */ alt?: string -} & SxProp - -const StyledAvatar = styled.img.attrs(props => ({ - height: props.size, - width: props.size, -}))` - display: inline-block; - overflow: hidden; // Ensure page layout in Firefox should images fail to load - line-height: ${get('lineHeights.condensedUltra')}; - vertical-align: middle; - // If the avatar is square and size is greater than 24px (at any breakpoint), border-radius will be 6px. Otherwise, it will be 4px. - border-radius: ${props => (props.square ? 'clamp(4px, var(--avatar-size) - 24px, 6px)' : '50%')}; - box-shadow: 0 0 0 1px ${get('colors.avatar.border')}; - height: var(--avatar-size); - width: var(--avatar-size); - ${sx} -` - -export type AvatarProps = ComponentProps + /** Additional class name. */ + className?: string +} & SxProp & + React.ComponentPropsWithoutRef<'img'> const Avatar = React.forwardRef(function Avatar( {alt = '', size = DEFAULT_AVATAR_SIZE, square = false, sx: sxProp = defaultSxProp, className, ...rest}, ref, ) { - const enabled = useFeatureFlag('primer_react_css_modules_ga') const isResponsive = isResponsiveValue(size) - const avatarSx = isResponsive - ? merge( - getBreakpointDeclarations( - size, - '--avatar-size' as keyof React.CSSProperties, - value => `${value || DEFAULT_AVATAR_SIZE}px`, - ), - sxProp as SxProp, - ) - : merge({'--avatar-size': `${size}px`} as React.CSSProperties, sxProp as SxProp) - - if (enabled) { - const cssSizeVars = {} as Record + const cssSizeVars = {} as Record - if (isResponsive) { - for (const [key, value] of Object.entries(size)) { - cssSizeVars[`--avatarSize-${key}`] = `${value}px` - } - } else { - cssSizeVars['--avatarSize-regular'] = `${size}px` - } - - if (sxProp !== defaultSxProp) { - return ( - - ) + if (isResponsive) { + for (const [key, value] of Object.entries(size)) { + cssSizeVars[`--avatarSize-${key}`] = `${value}px` } + } else { + cssSizeVars['--avatarSize-regular'] = `${size}px` + } + if (sxProp !== defaultSxProp) { return ( - ) } return ( - ) diff --git a/packages/react/src/AvatarPair/AvatarPair.docs.json b/packages/react/src/AvatarPair/AvatarPair.docs.json index 6185196dff3..176ec3916df 100644 --- a/packages/react/src/AvatarPair/AvatarPair.docs.json +++ b/packages/react/src/AvatarPair/AvatarPair.docs.json @@ -3,7 +3,17 @@ "name": "AvatarPair", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-avatarpair--default" + }, + { + "id": "components-avatarpair-features--parent-circle" + }, + { + "id": "components-avatarpair-features--parent-square" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx b/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx index 7129a28c6fd..1b0fadfdff2 100644 --- a/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx +++ b/packages/react/src/AvatarPair/AvatarPair.features.stories.tsx @@ -10,7 +10,7 @@ export default { export const ParentCircle = () => ( - + ) @@ -18,6 +18,6 @@ export const ParentCircle = () => ( export const ParentSquare = () => ( - + ) diff --git a/packages/react/src/AvatarPair/AvatarPair.stories.tsx b/packages/react/src/AvatarPair/AvatarPair.stories.tsx index 217b417d297..3184e529f78 100644 --- a/packages/react/src/AvatarPair/AvatarPair.stories.tsx +++ b/packages/react/src/AvatarPair/AvatarPair.stories.tsx @@ -10,7 +10,7 @@ export default { export const Default = () => ( - + ) diff --git a/packages/react/src/AvatarStack/AvatarStack.dev.stories.tsx b/packages/react/src/AvatarStack/AvatarStack.dev.stories.tsx new file mode 100644 index 00000000000..ed132a155ed --- /dev/null +++ b/packages/react/src/AvatarStack/AvatarStack.dev.stories.tsx @@ -0,0 +1,41 @@ +import React from 'react' +import type {Meta} from '@storybook/react' +import AvatarStack from './AvatarStack' +import Avatar from '../Avatar' +import Link from '../Link' + +export default { + title: 'Components/AvatarStack/Dev', + component: AvatarStack, +} as Meta + +export const SxProp = () => ( + + + + + + +) + +export const WithLinkWrappers = () => ( + + + + + + + + + + + + + + +) diff --git a/packages/react/src/AvatarStack/AvatarStack.docs.json b/packages/react/src/AvatarStack/AvatarStack.docs.json index 3f38da7c4eb..286e889c4d8 100644 --- a/packages/react/src/AvatarStack/AvatarStack.docs.json +++ b/packages/react/src/AvatarStack/AvatarStack.docs.json @@ -3,9 +3,43 @@ "name": "AvatarStack", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-avatarstack--default" + }, + { + "id": "components-avatarstack-features--align-left" + }, + { + "id": "components-avatarstack-features--align-right" + }, + { + "id": "components-avatarstack-features--disable-expand-on-hover" + }, + { + "id": "components-avatarstack-features--custom-size-on-parent" + }, + { + "id": "components-avatarstack-features--custom-size-on-parent-responsive" + }, + { + "id": "components-avatarstack-features--custom-size-on-children" + }, + { + "id": "components-avatarstack-features--custom-size-on-children-responsive" + }, + { + "id": "components-avatarstack-features--with-single-avatar" + } + ], "importPath": "@primer/react", "props": [ + { + "name": "children", + "type": "ReactNode", + "description": "A set of Avatar components to stack", + "defaultValue": "" + }, { "name": "alignRight", "type": "boolean", @@ -24,6 +58,12 @@ "defaultValue": "20", "description": "The size of the avatar children in pixels." }, + { + "name": "className", + "type": "string", + "description": "Class name for custom styling.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/AvatarStack/AvatarStack.module.css b/packages/react/src/AvatarStack/AvatarStack.module.css new file mode 100644 index 00000000000..ea13c99ecae --- /dev/null +++ b/packages/react/src/AvatarStack/AvatarStack.module.css @@ -0,0 +1,190 @@ +/* stylelint-disable max-nesting-depth */ +/* stylelint-disable selector-max-specificity */ +.AvatarStack { + --avatar-border-width: 1px; + --avatar-two-margin: calc(var(--avatar-stack-size) * -0.55); + --avatar-three-margin: calc(var(--avatar-stack-size) * -0.85); + + position: relative; + display: flex; + min-width: var(--avatar-stack-size); + height: var(--avatar-stack-size); + + &:where([data-responsive]) { + @media screen and (--viewportRange-narrow) { + --avatar-stack-size: var(--stackSize-narrow); + } + + @media screen and (--viewportRange-regular) { + --avatar-stack-size: var(--stackSize-regular); + } + + @media screen and (--viewportRange-wide) { + --avatar-stack-size: var(--stackSize-wide); + } + } + + &:where([data-avatar-count='1']) { + .AvatarItem { + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 0 0 var(--avatar-border-width) var(--avatar-borderColor); + } + } + + &:where([data-avatar-count='2']) { + /* this calc explained: */ + + /* 1. avatar size + the non-overlapping part of the second avatar */ + + /* 2. + the border widths of the first two avatars */ + min-width: calc( + var(--avatar-stack-size) + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + var(--avatar-border-width) + ); + } + + &:where([data-avatar-count='3']) { + /* this calc explained: */ + + /* 1. avatar size + the non-overlapping part of the second avatar */ + + /* 2. + the non-overlapping part of the third avatar */ + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) + ) + ); + } + + &:where([data-avatar-count='3+']) { + /* this calc explained: */ + + /* 1. avatar size + the non-overlapping part of the second avatar */ + + /* 2. + the non-overlapping part of the third and fourth avatar */ + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) * 2 + ) + ); + } + + &:where([data-align-right]) { + justify-content: flex-end; + + .AvatarItem { + margin-left: 0 !important; + + &:first-child { + margin-right: 0; + } + + &:nth-child(n + 2) { + /* stylelint-disable-next-line primer/spacing */ + margin-right: var(--avatar-two-margin); + } + + &:nth-child(n + 3) { + /* stylelint-disable-next-line primer/spacing */ + margin-right: var(--avatar-three-margin); + } + } + + .AvatarStackBody { + flex-direction: row-reverse; + + &:not([data-disable-expand]):hover, + &:not([data-disable-expand]):focus-within { + .AvatarItem { + margin-right: var(--base-size-4) !important; + margin-left: 0 !important; + + &:first-child { + margin-right: 0 !important; + } + } + } + } + } +} + +.AvatarStackBody { + position: absolute; + display: flex; + + &:where([data-disable-expand]) { + position: relative; + } +} + +.AvatarItem { + --avatarSize-regular: var(--avatar-stack-size); + + position: relative; + display: flex; + width: var(--avatar-stack-size); + height: var(--avatar-stack-size); + overflow: hidden; + flex-shrink: 0; + + &:is(img) { + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 0 0 var(--avatar-border-width) var(--bgColor-default); + } + + &:first-child { + z-index: 10; + margin-left: 0; + } + + &:nth-child(n + 2) { + z-index: 9; + /* stylelint-disable-next-line primer/spacing */ + margin-left: var(--avatar-two-margin); + } + + &:nth-child(n + 3) { + z-index: 8; + /* stylelint-disable-next-line primer/spacing */ + margin-left: var(--avatar-three-margin); + opacity: 0.55; + } + + &:nth-child(n + 4) { + z-index: 7; + opacity: 0.4; + } + + &:nth-child(n + 5) { + z-index: 6; + opacity: 0.25; + } + + &:nth-child(n + 6) { + visibility: hidden; + opacity: 0; + } +} + +.AvatarStackBody:not([data-disable-expand]):hover, +.AvatarStackBody:not([data-disable-expand]):focus-within { + width: auto; + + .AvatarItem { + margin-left: var(--base-size-4); + visibility: visible; + opacity: 1; + transition: + margin 0.2s ease-in-out, + opacity 0.2s ease-in-out, + visibility 0.2s ease-in-out, + box-shadow 0.1s ease-in-out; + + &:first-child { + margin-left: 0; + } + } +} diff --git a/packages/react/src/AvatarStack/AvatarStack.tsx b/packages/react/src/AvatarStack/AvatarStack.tsx index ccd87f1e24f..78856581e62 100644 --- a/packages/react/src/AvatarStack/AvatarStack.tsx +++ b/packages/react/src/AvatarStack/AvatarStack.tsx @@ -12,6 +12,9 @@ import {isResponsiveValue} from '../hooks/useResponsiveValue' import {getBreakpointDeclarations} from '../utils/getBreakpointDeclarations' import {defaultSxProp} from '../utils/defaultSxProp' import type {WidthOnlyViewportRangeKeys} from '../utils/types/ViewportRangeKeys' +import classes from './AvatarStack.module.css' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' import {hasInteractiveNodes} from '../internal/utils/hasInteractiveNodes' import getGlobalFocusStyles from '../internal/utils/getGlobalFocusStyles' @@ -19,170 +22,182 @@ type StyledAvatarStackWrapperProps = { count?: number } & SxProp -const AvatarStackWrapper = styled.span` - --avatar-border-width: 1px; - --avatar-two-margin: calc(var(--avatar-stack-size) * -0.55); - --avatar-three-margin: calc(var(--avatar-stack-size) * -0.85); +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' - display: flex; - position: relative; - height: var(--avatar-stack-size); - min-width: var(--avatar-stack-size); +const AvatarStackWrapper = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'span', + styled.span` + --avatar-border-width: 1px; + --avatar-two-margin: calc(var(--avatar-stack-size) * -0.55); + --avatar-three-margin: calc(var(--avatar-stack-size) * -0.85); - .pc-AvatarStackBody { display: flex; - position: absolute; - - ${getGlobalFocusStyles('1px')} - } - - .pc-AvatarItem { - --avatar-size: var(--avatar-stack-size); - flex-shrink: 0; - height: var(--avatar-stack-size); - width: var(--avatar-stack-size); - box-shadow: 0 0 0 var(--avatar-border-width) - ${props => (props.count === 1 ? get('colors.avatar.border') : get('colors.canvas.default'))}; position: relative; - overflow: hidden; + height: var(--avatar-stack-size); + min-width: var(--avatar-stack-size); - &:first-child { - margin-left: 0; - z-index: 10; - } + .pc-AvatarStackBody { + display: flex; + position: absolute; - &:nth-child(n + 2) { - margin-left: var(--avatar-two-margin); - z-index: 9; + ${getGlobalFocusStyles('1px')} } - &:nth-child(n + 3) { - margin-left: var(--avatar-three-margin); - opacity: ${100 - 3 * 15}%; - z-index: 8; - } + .pc-AvatarItem { + --avatar-size: var(--avatar-stack-size); + flex-shrink: 0; + height: var(--avatar-stack-size); + width: var(--avatar-stack-size); + position: relative; + overflow: hidden; + display: flex; + + &:is(img) { + box-shadow: 0 0 0 var(--avatar-border-width) + ${props => (props.count === 1 ? get('colors.avatar.border') : get('colors.canvas.default'))}; + } - &:nth-child(n + 4) { - opacity: ${100 - 4 * 15}%; - z-index: 7; - } + &:first-child { + margin-left: 0; + z-index: 10; + } - &:nth-child(n + 5) { - opacity: ${100 - 5 * 15}%; - z-index: 6; - } + &:nth-child(n + 2) { + margin-left: var(--avatar-two-margin); + z-index: 9; + } + + &:nth-child(n + 3) { + margin-left: var(--avatar-three-margin); + opacity: ${100 - 3 * 15}%; + z-index: 8; + } - &:nth-child(n + 6) { - opacity: 0; - visibility: hidden; + &:nth-child(n + 4) { + opacity: ${100 - 4 * 15}%; + z-index: 7; + } + + &:nth-child(n + 5) { + opacity: ${100 - 5 * 15}%; + z-index: 6; + } + + &:nth-child(n + 6) { + opacity: 0; + visibility: hidden; + } } - } - &.pc-AvatarStack--two { - // this calc explained: - // 1. avatar size + the non-overlapping part of the second avatar - // 2. + the border widths of the first two avatars - min-width: calc( - var(--avatar-stack-size) + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + var(--avatar-border-width) - ); - } + &.pc-AvatarStack--two { + // this calc explained: + // 1. avatar size + the non-overlapping part of the second avatar + // 2. + the border widths of the first two avatars + min-width: calc( + var(--avatar-stack-size) + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + var(--avatar-border-width) + ); + } - &.pc-AvatarStack--three { - // this calc explained: - // 1. avatar size + the non-overlapping part of the second avatar - // 2. + the non-overlapping part of the third avatar - min-width: calc( - var(--avatar-stack-size) + - calc( - calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + - calc(var(--avatar-stack-size) + var(--avatar-three-margin)) - ) - ); - } + &.pc-AvatarStack--three { + // this calc explained: + // 1. avatar size + the non-overlapping part of the second avatar + // 2. + the non-overlapping part of the third avatar + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) + ) + ); + } - &.pc-AvatarStack--three-plus { - // this calc explained: - // 1. avatar size + the non-overlapping part of the second avatar - // 2. + the non-overlapping part of the third and fourth avatar - min-width: calc( - var(--avatar-stack-size) + - calc( - calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + - calc(var(--avatar-stack-size) + var(--avatar-three-margin)) * 2 - ) - ); - } + &.pc-AvatarStack--three-plus { + // this calc explained: + // 1. avatar size + the non-overlapping part of the second avatar + // 2. + the non-overlapping part of the third and fourth avatar + min-width: calc( + var(--avatar-stack-size) + + calc( + calc(var(--avatar-stack-size) + var(--avatar-two-margin)) + + calc(var(--avatar-stack-size) + var(--avatar-three-margin)) * 2 + ) + ); + } - &.pc-AvatarStack--right { - justify-content: flex-end; - .pc-AvatarItem { - margin-left: 0 !important; + &.pc-AvatarStack--right { + justify-content: flex-end; + .pc-AvatarItem { + margin-left: 0 !important; - &:first-child { - margin-right: 0; - } + &:first-child { + margin-right: 0; + } - &:nth-child(n + 2) { - margin-right: var(--avatar-two-margin); - } + &:nth-child(n + 2) { + margin-right: var(--avatar-two-margin); + } - &:nth-child(n + 3) { - margin-right: var(--avatar-three-margin); + &:nth-child(n + 3) { + margin-right: var(--avatar-three-margin); + } } - } - .pc-AvatarStackBody { - flex-direction: row-reverse; + .pc-AvatarStackBody { + flex-direction: row-reverse; - &:not(.pc-AvatarStack--disableExpand):hover, - &:not(.pc-AvatarStack--disableExpand):focus-within { - .pc-AvatarItem { - margin-right: ${get('space.1')}!important; - margin-left: 0 !important; + &:not(.pc-AvatarStack--disableExpand):hover, + &:not(.pc-AvatarStack--disableExpand):focus-within { + .pc-AvatarItem { + margin-right: ${get('space.1')}!important; + margin-left: 0 !important; - &:first-child { - margin-right: 0 !important; + &:first-child { + margin-right: 0 !important; + } } } } } - } - .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover, - .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within { - width: auto; + .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):hover, + .pc-AvatarStackBody:not(.pc-AvatarStack--disableExpand):focus-within { + width: auto; - .pc-AvatarItem { - margin-left: ${get('space.1')}; - opacity: 100%; - visibility: visible; - ${props => (props.count === 1 ? '' : `box-shadow: inset 0 0 0 4px ${get('colors.canvas.default')};`)} - transition: + .pc-AvatarItem { + margin-left: ${get('space.1')}; + opacity: 100%; + visibility: visible; + ${props => (props.count === 1 ? '' : `box-shadow: inset 0 0 0 4px ${get('colors.canvas.default')};`)} + transition: margin 0.2s ease-in-out, opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, box-shadow 0.1s ease-in-out; - ${getGlobalFocusStyles('1px')} + ${getGlobalFocusStyles('1px')} - &:first-child { - margin-left: 0; + &:first-child { + margin-left: 0; + } } } - } - .pc-AvatarStack--disableExpand { - position: relative; - } + .pc-AvatarStack--disableExpand { + position: relative; + } - ${sx}; -` -const transformChildren = (children: React.ReactNode) => { + ${sx}; + `, +) + +const transformChildren = (children: React.ReactNode, enabled: boolean) => { return React.Children.map(children, child => { if (!React.isValidElement(child)) return child return React.cloneElement(child, { ...child.props, - className: clsx(child.props.className, 'pc-AvatarItem'), + className: clsx(child.props.className, 'pc-AvatarItem', {[classes.AvatarItem]: enabled}), }) }) } @@ -195,6 +210,44 @@ export type AvatarStackProps = { children: React.ReactNode } & SxProp +const AvatarStackBody = ({ + disableExpand, + hasInteractiveChildren, + stackContainer, + children, +}: { + disableExpand: boolean | undefined + hasInteractiveChildren: boolean | undefined + stackContainer: React.RefObject +} & React.ComponentPropsWithoutRef<'div'>) => { + const bodyClassNames = clsx('pc-AvatarStackBody', { + 'pc-AvatarStack--disableExpand': disableExpand, + }) + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + if (enabled) { + return ( + + {children} + + ) + } + return ( + + {children} + + ) +} + const AvatarStack = ({ children, alignRight, @@ -203,6 +256,7 @@ const AvatarStack = ({ className, sx: sxProp = defaultSxProp, }: AvatarStackProps) => { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) const [hasInteractiveChildren, setHasInteractiveChildren] = useState(false) const stackContainer = useRef(null) @@ -216,9 +270,6 @@ const AvatarStack = ({ }, className, ) - const bodyClassNames = clsx('pc-AvatarStackBody', { - 'pc-AvatarStack--disableExpand': disableExpand, - }) const getAvatarChildSizes = () => { const avatarSizeMap: Record = { @@ -259,6 +310,7 @@ const AvatarStack = ({ }, ) } + const childSizes = getAvatarChildSizes() useEffect(() => { if (stackContainer.current) { @@ -282,8 +334,16 @@ const AvatarStack = ({ const getResponsiveAvatarSizeStyles = () => { // if there is no size set on the AvatarStack, use the `size` props of the Avatar children to set the `--avatar-stack-size` CSS variable if (!size) { + if (enabled) { + return { + '--stackSize-narrow': `${childSizes.narrow}px`, + '--stackSize-regular': `${childSizes.regular}px`, + '--stackSize-wide': `${childSizes.wide}px`, + } + } + return getBreakpointDeclarations( - getAvatarChildSizes(), + childSizes, '--avatar-stack-size' as keyof React.CSSProperties, value => `${value}px`, ) @@ -291,6 +351,14 @@ const AvatarStack = ({ // if the `size` prop is set and responsive, set the `--avatar-stack-size` CSS variable for each viewport if (isResponsiveValue(size)) { + if (enabled) { + return { + '--stackSize-narrow': `${size.narrow || DEFAULT_AVATAR_SIZE}px`, + '--stackSize-regular': `${size.regular || DEFAULT_AVATAR_SIZE}px`, + '--stackSize-wide': `${size.wide || DEFAULT_AVATAR_SIZE}px`, + } + } + return getBreakpointDeclarations( size, '--avatar-stack-size' as keyof React.CSSProperties, @@ -303,20 +371,28 @@ const AvatarStack = ({ } const avatarStackSx = merge( - getResponsiveAvatarSizeStyles(), + !enabled && getResponsiveAvatarSizeStyles(), sxProp as SxProp, ) return ( - - 3 ? '3+' : count) : undefined} + data-align-right={enabled && alignRight ? '' : undefined} + data-responsive={enabled && (!size || isResponsiveValue(size)) ? '' : undefined} + className={clsx(wrapperClassNames, {[classes.AvatarStack]: enabled})} + style={enabled ? getResponsiveAvatarSizeStyles() : undefined} + sx={avatarStackSx} + > + {' '} - {transformChildren(children)} - + {transformChildren(children, enabled)} + ) } diff --git a/packages/react/src/Banner/Banner.docs.json b/packages/react/src/Banner/Banner.docs.json index 9451a4dbef5..9a22b629a39 100644 --- a/packages/react/src/Banner/Banner.docs.json +++ b/packages/react/src/Banner/Banner.docs.json @@ -1,10 +1,53 @@ { "id": "banner", "name": "Banner", - "status": "draft", + "status": "alpha", "a11yReviewed": true, "importPath": "@primer/react/experimental", - "stories": [], + "stories": [ + { + "id": "experimental-components-banner--default" + }, + { + "id": "experimental-components-banner-features--critical" + }, + { + "id": "experimental-components-banner-features--info" + }, + { + "id": "experimental-components-banner-features--success" + }, + { + "id": "experimental-components-banner-features--upsell" + }, + { + "id": "experimental-components-banner-features--warning" + }, + { + "id": "experimental-components-banner-features--dismiss" + }, + { + "id": "experimental-components-banner-features--dismiss-with-actions" + }, + { + "id": "experimental-components-banner-features--with-hidden-title" + }, + { + "id": "experimental-components-banner-features--with-hidden-title-and-actions" + }, + { + "id": "experimental-components-banner-features--dismissible-with-hidden-title-and-actions" + }, + { + "id": "experimental-components-banner-features--dismissible-with-hidden-title-and-secondary-action" + }, + { + "id": "experimental-components-banner-features--with-actions" + }, + { + "id": "experimental-components-banner-features--custom-icon" + } + ], "props": [ { "name": "aria-label", @@ -69,15 +112,30 @@ }, { "name": "Banner.Description", - "props": [] + "props": [ + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" + } + ] }, { "name": "Banner.PrimaryAction", - "props": [] + "props": [], + "passthrough": { + "element": "Button", + "url": "/react/Button" + } }, { "name": "Banner.SecondaryAction", - "props": [] + "props": [], + "passthrough": { + "element": "Button", + "url": "/react/Button" + } } ] } diff --git a/packages/react/src/Banner/Banner.test.tsx b/packages/react/src/Banner/Banner.test.tsx index 13fecdc6fb8..59975b0f63c 100644 --- a/packages/react/src/Banner/Banner.test.tsx +++ b/packages/react/src/Banner/Banner.test.tsx @@ -115,9 +115,9 @@ describe('Banner', () => { />, ) - expect(screen.getByRole('button', {name: 'test primary action'})).toBeInTheDocument() + expect(screen.queryAllByRole('button', {name: 'test primary action', hidden: true}).length).toBe(2) - await user.click(screen.getByRole('button', {name: 'test primary action'})) + await user.click(screen.queryAllByText('test primary action')[0]) expect(onClick).toHaveBeenCalledTimes(1) }) @@ -132,9 +132,9 @@ describe('Banner', () => { />, ) - expect(screen.getByRole('button', {name: 'test secondary action'})).toBeInTheDocument() + expect(screen.queryAllByRole('button', {name: 'test secondary action', hidden: true}).length).toBe(2) - await user.click(screen.getByRole('button', {name: 'test secondary action'})) + await user.click(screen.queryAllByText('test secondary action')[0]) expect(onClick).toHaveBeenCalledTimes(1) }) @@ -148,8 +148,8 @@ describe('Banner', () => { />, ) - expect(screen.getByRole('button', {name: 'test primary action'})).toBeInTheDocument() - expect(screen.getByRole('button', {name: 'test secondary action'})).toBeInTheDocument() + expect(screen.queryAllByRole('button', {name: 'test primary action', hidden: true}).length).toBe(2) + expect(screen.queryAllByRole('button', {name: 'test secondary action', hidden: true}).length).toBe(2) }) it('should call `onDismiss` when the dismiss button is activated', async () => { diff --git a/packages/react/src/Banner/Banner.tsx b/packages/react/src/Banner/Banner.tsx index f33021d67d7..e1c7a1119e8 100644 --- a/packages/react/src/Banner/Banner.tsx +++ b/packages/react/src/Banner/Banner.tsx @@ -1,14 +1,10 @@ import {clsx} from 'clsx' import React, {forwardRef, useEffect} from 'react' -import styled from 'styled-components' import {AlertIcon, InfoIcon, StopIcon, CheckCircleIcon, XIcon} from '@primer/octicons-react' import {Button, IconButton, type ButtonProps} from '../Button' -import {get} from '../constants' import {VisuallyHidden} from '../VisuallyHidden' import {useMergedRefs} from '../internal/hooks/useMergedRefs' -import {useFeatureFlag} from '../FeatureFlags' import classes from './Banner.module.css' -import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' type BannerVariant = 'critical' | 'info' | 'success' | 'upsell' | 'warning' @@ -88,8 +84,6 @@ const labels: Record = { warning: 'Warning', } -const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' - export const Banner = React.forwardRef(function Banner( { 'aria-label': label, @@ -111,7 +105,6 @@ export const Banner = React.forwardRef(function Banner const hasActions = primaryAction || secondaryAction const bannerRef = React.useRef(null) const ref = useMergedRefs(forwardRef, bannerRef) - const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) const supportsCustomIcon = variant === 'info' || variant === 'upsell' if (__DEV__) { @@ -137,40 +130,19 @@ export const Banner = React.forwardRef(function Banner } return ( - - {!enabled ? : null} - - {icon && supportsCustomIcon ? icon : iconForVariant[variant]} - - - + {icon && supportsCustomIcon ? icon : iconForVariant[variant]} + + {title ? ( hideTitle ? ( @@ -189,221 +161,15 @@ export const Banner = React.forwardRef(function Banner ) : null} - + ) }) -const StyledBanner = toggleStyledComponent( - CSS_MODULES_FEATURE_FLAG, - /** - * For styling, it's important that the icons and the text have the same height - * for alignment to occur in multi-line scenarios. Currently, we use a - * line-height of `20px` so that means that the height of icons should match - * that value. - */ - 'div', - styled.div` - display: grid; - grid-template-columns: auto minmax(0, 1fr) auto; - align-items: start; - background-color: var(--banner-bgColor); - border: var(--borderWidth-thin, 1px) solid var(--banner-borderColor); - padding: var(--base-size-8, 0.5rem); - border-radius: var(--borderRadius-medium, ${get('radii.2')}); - - @supports (container-type: inline-size) { - container: banner / inline-size; - } - - &[data-variant='critical'] { - --banner-bgColor: ${get('colors.danger.subtle')}; - --banner-borderColor: ${get('colors.danger.muted')}; - --banner-icon-fgColor: ${get('colors.danger.fg')}; - } - - &[data-variant='info'] { - --banner-bgColor: ${get('colors.accent.subtle')}; - --banner-borderColor: ${get('colors.accent.muted')}; - --banner-icon-fgColor: ${get('colors.accent.fg')}; - } - - &[data-variant='success'] { - --banner-bgColor: ${get('colors.success.subtle')}; - --banner-borderColor: ${get('colors.success.muted')}; - --banner-icon-fgColor: ${get('colors.success.fg')}; - } - - &[data-variant='upsell'] { - --banner-bgColor: var(--bgColor-upsell-muted, ${get('colors.done.subtle')}); - --banner-borderColor: var(--borderColor-upsell-muted, ${get('colors.done.muted')}); - --banner-icon-fgColor: var(--fgColor-upsell-muted, ${get('colors.done.fg')}); - } - - &[data-variant='warning'] { - --banner-bgColor: ${get('colors.attention.subtle')}; - --banner-borderColor: ${get('colors.attention.muted')}; - --banner-icon-fgColor: ${get('colors.attention.fg')}; - } - - /* BannerIcon ------------------------------------------------------------- */ - - .BannerIcon { - display: grid; - place-items: center; - padding: var(--base-size-8, 0.5rem); - } - - .BannerIcon svg { - color: var(--banner-icon-fgColor); - fill: var(--banner-icon-fgColor); - /* 20px is the line box height of the trailing action buttons */ - height: var(--base-size-20, 1.25rem); - } - - &[data-title-hidden=''] .BannerIcon svg { - height: var(--base-size-16, 1rem); - } - - /* BannerContainer -------------------------------------------------------- */ - - .BannerContainer { - font-size: var(--text-body-size-medium, 0.875rem); - align-items: start; - line-height: var(--text-body-lineHeight-medium, calc(20 / 14)); - row-gap: var(--base-size-4, 0.25rem); - column-gap: var(--base-size-4, 0.25rem); - } - - & :where(.BannerContainer) { - display: flex; - flex-wrap: wrap; - justify-content: space-between; - } - - &[data-dismissible]:not([data-title-hidden='']) .BannerContainer { - display: grid; - grid-template-columns: auto; - grid-template-rows: auto; - } - - /* BannerContent ---------------------------------------------------------- */ - - .BannerContent { - display: grid; - row-gap: var(--base-size-4, 0.25rem); - grid-column-start: 1; - margin-block: var(--base-size-8, 0.5rem); - } - - &[data-title-hidden=''] .BannerContent { - margin-block: var(--base-size-6, 0.375rem); - } - - @media screen and (min-width: 544px) { - .BannerContent { - flex: 1 1 0%; - } - } - - .BannerTitle { - margin: 0; - font-size: inherit; - font-weight: var(--base-text-weight-semibold, 600); - } - - /* BannerActions ---------------------------------------------------------- */ - .BannerActionsContainer { - display: flex; - column-gap: var(--base-size-12, 0.5rem); - align-items: center; - } - - .BannerActions :where([data-primary-action='trailing']) { - display: none; - } - - @media screen and (min-width: 544px) { - .BannerActions :where([data-primary-action='trailing']) { - display: flex; - } - - .BannerActions :where([data-primary-action='leading']) { - display: none; - } - } - - &[data-dismissible]:not([data-title-hidden]) .BannerActions { - margin-block-end: var(--base-size-6, 0.375rem); - } - - &[data-dismissible]:not([data-title-hidden]) .BannerActionsContainer[data-primary-action='trailing'] { - display: none; - } - - &[data-dismissible]:not([data-title-hidden]) .BannerActionsContainer[data-primary-action='leading'] { - display: flex; - } - - /* BannerDismiss ---------------------------------------------------------- */ - - .BannerDismiss { - display: grid; - place-items: center; - padding: var(--base-size-8, 0.5rem); - margin-inline-start: var(--base-size-4, 0.25rem); - } - - .BannerDismiss svg { - color: var(--banner-icon-fgColor); - } - `, -) - -const BannerContainerQuery = ` - @container banner (max-width: 500px) { - .BannerContainer { - display: grid; - grid-template-rows: auto auto; - } - - .BannerActions { - margin-block-end: var(--size-small, 0.375rem); - } - - .BannerActions [data-primary-action="trailing"] { - display: none; - } - - .BannerActions [data-primary-action="leading"] { - display: flex; - } - } - - @container banner (min-width: 500px) { - .BannerContainer { - display: grid; - grid-template-columns: auto auto; - } - - .BannerActions [data-primary-action="trailing"] { - display: flex; - min-height: var(--base-size-32, 2rem); - } - - .BannerActions [data-primary-action="leading"] { - display: none; - } - } -` - type HeadingElement = 'h2' | 'h3' | 'h4' | 'h5' | 'h6' export type BannerTitleProps = { @@ -413,16 +179,8 @@ export type BannerTitleProps = { export function BannerTitle(props: BannerTitleProps) { const {as: Heading = 'h2', className, children, ...rest} = props - const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) return ( - + {children} ) @@ -444,31 +202,13 @@ export type BannerActionsProps = { } export function BannerActions({primaryAction, secondaryAction}: BannerActionsProps) { - const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) return ( - - + + {secondaryAction ?? null} {primaryAction ?? null} - + {primaryAction ?? null} {secondaryAction ?? null} diff --git a/packages/react/src/BaseStyles.dev.stories.tsx b/packages/react/src/BaseStyles.dev.stories.tsx new file mode 100644 index 00000000000..d313f089009 --- /dev/null +++ b/packages/react/src/BaseStyles.dev.stories.tsx @@ -0,0 +1,11 @@ +import {BaseStyles} from '.' +import type {Meta} from '@storybook/react' +import React from 'react' +import type {ComponentProps} from './utils/types' + +export default { + title: 'Behaviors/BaseStyles/Dev', + component: BaseStyles, +} as Meta> + +export const Default = () => Hello diff --git a/packages/react/src/BaseStyles.module.css b/packages/react/src/BaseStyles.module.css new file mode 100644 index 00000000000..f1c0e87ec64 --- /dev/null +++ b/packages/react/src/BaseStyles.module.css @@ -0,0 +1,50 @@ +/* stylelint-disable selector-max-specificity */ +/* stylelint-disable selector-type-no-unknown */ + +/* -------------------------------- + * Global Styles + *--------------------------------- */ +* { + box-sizing: border-box; +} + +body { + margin: 0; +} + +table { + /* stylelint-disable-next-line primer/borders */ + border-collapse: collapse; +} + +[role='button']:focus:not(:focus-visible):not(.focus-visible), +[role='tabpanel'][tabindex='0']:focus:not(:focus-visible):not(.focus-visible), +button:focus:not(:focus-visible):not(.focus-visible), +summary:focus:not(:focus-visible):not(.focus-visible), +a:focus:not(:focus-visible):not(.focus-visible) { + outline: none; + box-shadow: none; +} + +[tabindex='0']:focus:not(:focus-visible):not(.focus-visible), +details-dialog:focus:not(:focus-visible):not(.focus-visible) { + outline: none; +} + +/* -------------------------------------------------------------------------- */ + +.BaseStyles { + /* Global styles for light mode */ + &:has([data-color-mode='light']) { + input & { + color-scheme: light; + } + } + + /* Global styles for dark mode */ + &:has([data-color-mode='dark']) { + input & { + color-scheme: dark; + } + } +} diff --git a/packages/react/src/BaseStyles.tsx b/packages/react/src/BaseStyles.tsx index 351c1cb39f2..2a5ffb24347 100644 --- a/packages/react/src/BaseStyles.tsx +++ b/packages/react/src/BaseStyles.tsx @@ -1,13 +1,19 @@ import React from 'react' +import {clsx} from 'clsx' import styled, {createGlobalStyle} from 'styled-components' +import type {ComponentProps} from './utils/types' import type {SystemCommonProps, SystemTypographyProps} from './constants' import {COMMON, TYPOGRAPHY} from './constants' import {useTheme} from './ThemeProvider' -import type {ComponentProps} from './utils/types' +import {useFeatureFlag} from './FeatureFlags' +import {toggleStyledComponent} from './internal/utils/toggleStyledComponent' +import classes from './BaseStyles.module.css' // load polyfill for :focus-visible import 'focus-visible' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' + const GlobalStyle = createGlobalStyle<{colorScheme?: 'light' | 'dark'}>` * { box-sizing: border-box; } body { margin: 0; } @@ -29,27 +35,34 @@ const GlobalStyle = createGlobalStyle<{colorScheme?: 'light' | 'dark'}>` } ` -const Base = styled.div` - ${TYPOGRAPHY}; - ${COMMON}; -` +const Base = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + ${TYPOGRAPHY}; + ${COMMON}; + `, +) export type BaseStylesProps = ComponentProps function BaseStyles(props: BaseStylesProps) { - const {children, color = 'fg.default', fontFamily = 'normal', lineHeight = 'default', ...rest} = props + const {children, color = 'fg.default', fontFamily = 'normal', lineHeight = 'default', className, ...rest} = props const {colorScheme, dayScheme, nightScheme} = useTheme() + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + const stylingProps = enabled ? {className: clsx(classes.BaseStyles, className)} : {className} /** * We need to map valid primer/react color modes onto valid color modes for primer/primitives * valid color modes for primer/primitives: auto | light | dark * valid color modes for primer/primer: auto | day | night | light | dark */ - return ( - + {!enabled && } {children} ) diff --git a/packages/react/src/Blankslate/Blankslate.docs.json b/packages/react/src/Blankslate/Blankslate.docs.json index 9241118b4ea..234cfa9cb89 100644 --- a/packages/react/src/Blankslate/Blankslate.docs.json +++ b/packages/react/src/Blankslate/Blankslate.docs.json @@ -3,13 +3,35 @@ "name": "Blankslate", "status": "draft", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "experimental-components-blankslate--default" + }, + { + "id": "experimental-components-blankslate-features--with-visual" + }, + { + "id": "experimental-components-blankslate-features--with-primary-action" + }, + { + "id": "experimental-components-blankslate-features--with-secondary-action" + }, + { + "id": "experimental-components-blankslate-features--with-border" + }, + { + "id": "experimental-components-blankslate-features--narrow" + }, + { + "id": "experimental-components-blankslate-features--spacious" + } + ], "importPath": "@primer/react/experimental", "props": [ { "name": "border", "type": "boolean", - "description": "" + "description": "Add a border around this component" }, { "name": "narrow", @@ -20,6 +42,12 @@ "name": "spacious", "type": "boolean", "description": "" + }, + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" } ], "subcomponents": [ @@ -45,7 +73,8 @@ "props": [ { "name": "href", - "type": "string" + "type": "string", + "description": "Link to complete primary action" } ] }, @@ -54,7 +83,8 @@ "props": [ { "name": "href", - "type": "string" + "type": "string", + "description": "Link to complete secondary action" } ] } diff --git a/packages/react/src/Blankslate/Blankslate.module.css b/packages/react/src/Blankslate/Blankslate.module.css index 05fa2c0a442..5f0029cbcfd 100644 --- a/packages/react/src/Blankslate/Blankslate.module.css +++ b/packages/react/src/Blankslate/Blankslate.module.css @@ -31,6 +31,7 @@ .Description { margin: 0; margin-bottom: var(--base-size-8); + text-align: center; } .Heading { diff --git a/packages/react/src/BranchName/BranchName.docs.json b/packages/react/src/BranchName/BranchName.docs.json index 7529b5ef337..585a62d2720 100644 --- a/packages/react/src/BranchName/BranchName.docs.json +++ b/packages/react/src/BranchName/BranchName.docs.json @@ -3,7 +3,17 @@ "name": "BranchName", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-branchname--default" + }, + { + "id": "components-branchname-features--with-branch-icon" + }, + { + "id": "components-branchname-features--not-a-link" + } + ], "importPath": "@primer/react", "props": [ { @@ -21,4 +31,4 @@ } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/BranchName/BranchName.tsx b/packages/react/src/BranchName/BranchName.tsx index 4b6d7697c9f..d2d4556b577 100644 --- a/packages/react/src/BranchName/BranchName.tsx +++ b/packages/react/src/BranchName/BranchName.tsx @@ -31,7 +31,7 @@ type BranchNameProps = { // eslint-disable-next-line @typescript-eslint/no-explicit-any function BranchName(props: BranchNameProps, ref: ForwardedRef) { const {as: BaseComponent = 'a', className, children, sx, ...rest} = props - const enabled = useFeatureFlag('primer_react_css_modules_team') + const enabled = useFeatureFlag('primer_react_css_modules_staff') if (enabled) { if (sx) { diff --git a/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json b/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json index 640e078d600..1ee3dcb3b4c 100644 --- a/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json +++ b/packages/react/src/Breadcrumbs/Breadcrumbs.docs.json @@ -3,9 +3,20 @@ "name": "Breadcrumbs", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-breadcrumbs--default" + } + ], "importPath": "@primer/react", "props": [ + { + "name": "className", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "children", "type": "Breadcrumbs.Item[]", @@ -25,7 +36,14 @@ "name": "selected", "type": "boolean", "defaultValue": "false", - "description": "" + "description": "Whether this item represents the current page" + }, + { + "name": "to", + "type": "string | Partial", + "required": false, + "description": "Used when the item is rendered using a component like React Router's `Link`. The path to navigate to.", + "defaultValue": "" }, { "name": "ref", @@ -47,4 +65,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/react/src/Breadcrumbs/Breadcrumbs.module.css b/packages/react/src/Breadcrumbs/Breadcrumbs.module.css new file mode 100644 index 00000000000..96c61e7072c --- /dev/null +++ b/packages/react/src/Breadcrumbs/Breadcrumbs.module.css @@ -0,0 +1,60 @@ +.BreadcrumbsBase { + display: flex; + justify-content: space-between; +} + +.BreadcrumbsList { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; +} + +.ItemWrapper { + display: inline-block; + font-size: var(--text-body-size-medium); + white-space: nowrap; + list-style: none; + + &::after { + display: inline-block; + height: 0.8em; + /* stylelint-disable-next-line primer/spacing */ + margin: 0 0.5em; + font-size: var(--text-body-size-medium); + content: ''; + /* stylelint-disable-next-line primer/borders, primer/colors */ + border-right: 0.1em solid var(--fgColor-muted); + transform: rotate(15deg) translateY(0.0625em); + } + + &:first-child { + margin-left: 0; + } + + &:last-child { + &::after { + content: none; + } + } +} + +.Item { + display: inline-block; + font-size: var(--text-body-size-medium); + color: var(--fgColor-link); + text-decoration: none; + + &:hover, + &:focus { + text-decoration: underline; + } +} + +.ItemSelected { + color: var(--fgColor-default); + pointer-events: none; + + &:focus { + text-decoration: none; + } +} diff --git a/packages/react/src/Breadcrumbs/Breadcrumbs.tsx b/packages/react/src/Breadcrumbs/Breadcrumbs.tsx index 7b1753aa853..32b72149679 100644 --- a/packages/react/src/Breadcrumbs/Breadcrumbs.tsx +++ b/packages/react/src/Breadcrumbs/Breadcrumbs.tsx @@ -7,38 +7,51 @@ import {get} from '../constants' import type {SxProp} from '../sx' import sx from '../sx' import type {ComponentProps} from '../utils/types' +import classes from './Breadcrumbs.module.css' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' const SELECTED_CLASS = 'selected' +const CSS_MODULES_FLAG = 'primer_react_css_modules_team' -const Wrapper = styled.li` - display: inline-block; - white-space: nowrap; - list-style: none; - &::after { - font-size: ${get('fontSizes.1')}; - content: ''; +const Wrapper = toggleStyledComponent( + CSS_MODULES_FLAG, + 'li', + styled.li` display: inline-block; - height: 0.8em; - margin: 0 0.5em; - border-right: 0.1em solid; - border-color: ${get('colors.fg.muted')}; - transform: rotate(15deg) translateY(0.0625em); - } - &:first-child { - margin-left: 0; - } - &:last-child { + white-space: nowrap; + list-style: none; &::after { - content: none; + font-size: ${get('fontSizes.1')}; + content: ''; + display: inline-block; + height: 0.8em; + margin: 0 0.5em; + border-right: 0.1em solid; + border-color: ${get('colors.fg.muted')}; + transform: rotate(15deg) translateY(0.0625em); } - } -` + &:first-child { + margin-left: 0; + } + &:last-child { + &::after { + content: none; + } + } + `, +) -const BreadcrumbsBase = styled.nav` - display: flex; - justify-content: space-between; - ${sx}; -` +const BreadcrumbsBase = toggleStyledComponent( + CSS_MODULES_FLAG, + 'nav', + styled.nav` + display: flex; + justify-content: space-between; + ${sx}; + `, +) export type BreadcrumbsProps = React.PropsWithChildren< { @@ -46,13 +59,31 @@ export type BreadcrumbsProps = React.PropsWithChildren< } & SxProp > +const BreadcrumbsList = ({children}: React.PropsWithChildren) => { + const enabled = useFeatureFlag(CSS_MODULES_FLAG) + if (enabled) { + return {children} + } + + return ( + + {children} + + ) +} + function Breadcrumbs({className, children, sx: sxProp}: React.PropsWithChildren) { - const wrappedChildren = React.Children.map(children, child => {child}) + const enabled = useFeatureFlag(CSS_MODULES_FLAG) + const wrappedChildren = React.Children.map(children, child => ( + {child} + )) return ( - - - {wrappedChildren} - + + {wrappedChildren} ) } @@ -60,29 +91,48 @@ function Breadcrumbs({className, children, sx: sxProp}: React.PropsWithChildren< type StyledBreadcrumbsItemProps = { to?: To selected?: boolean -} & SxProp - -const BreadcrumbsItem = styled.a.attrs(props => ({ - className: clsx(props.selected && SELECTED_CLASS, props.className), - 'aria-current': props.selected ? 'page' : null, -}))` - color: ${get('colors.accent.fg')}; - display: inline-block; - font-size: ${get('fontSizes.1')}; - text-decoration: none; - &:hover, - &:focus { - text-decoration: underline; - } - &.selected { - color: ${get('colors.fg.default')}; - pointer-events: none; - } - &.selected:focus { + className?: string +} & SxProp & + React.ComponentPropsWithoutRef<'a'> + +const StyledBreadcrumbsItem = toggleStyledComponent( + CSS_MODULES_FLAG, + 'a', + styled.a` + color: ${get('colors.accent.fg')}; + display: inline-block; + font-size: ${get('fontSizes.1')}; text-decoration: none; - } - ${sx}; -` + &:hover, + &:focus { + text-decoration: underline; + } + &.selected { + color: ${get('colors.fg.default')}; + pointer-events: none; + } + &.selected:focus { + text-decoration: none; + } + ${sx}; + `, +) + +const BreadcrumbsItem = React.forwardRef(({selected, className, ...rest}, ref) => { + const enabled = useFeatureFlag(CSS_MODULES_FLAG) + return ( + + ) +}) as PolymorphicForwardRefComponent<'a', StyledBreadcrumbsItemProps> Breadcrumbs.displayName = 'Breadcrumbs' diff --git a/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap b/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap index 9b4c8a741f8..250ad1236ce 100644 --- a/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap +++ b/packages/react/src/Breadcrumbs/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap @@ -28,6 +28,5 @@ exports[`Breadcrumbs.Item respects the "selected" prop 1`] = ` `; diff --git a/packages/react/src/Button/Button.docs.json b/packages/react/src/Button/Button.docs.json index 627f75d6808..39e688b1acf 100644 --- a/packages/react/src/Button/Button.docs.json +++ b/packages/react/src/Button/Button.docs.json @@ -3,7 +3,86 @@ "name": "Button", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-button--default" + }, + { + "id": "components-button-features--primary" + }, + { + "id": "components-button-features--danger" + }, + { + "id": "components-button-features--invisible" + }, + { + "id": "components-button-features--link" + }, + { + "id": "components-button-features--leading-visual" + }, + { + "id": "components-button-features--trailing-visual" + }, + { + "id": "components-button-features--trailing-counter" + }, + { + "id": "components-button-features--trailing-counter-with-no-text" + }, + { + "id": "components-button-features--trailing-counter-all-variants" + }, + { + "id": "components-button-features--trailing-action" + }, + { + "id": "components-button-features--block" + }, + { + "id": "components-button-features--disabled" + }, + { + "id": "components-button-features--inactive" + }, + { + "id": "components-button-features--small" + }, + { + "id": "components-button-features--medium" + }, + { + "id": "components-button-features--large" + }, + { + "id": "components-button-features--loading" + }, + { + "id": "components-button-features--loading-custom-announcement" + }, + { + "id": "components-button-features--loading-with-leading-visual" + }, + { + "id": "components-button-features--loading-with-trailing-visual" + }, + { + "id": "components-button-features--loading-with-trailing-action" + }, + { + "id": "components-button-features--loading-trigger" + }, + { + "id": "components-button-features--label-wrap" + }, + { + "id": "components-button-features--inactive-button-with-tooltip" + }, + { + "id": "components-button-features--expanded-button" + } + ], "importPath": "@primer/react", "props": [ { @@ -29,7 +108,7 @@ }, { "name": "count", - "type": "number | string", + "type": "number", "description": "For counter buttons, the number to display." }, { @@ -83,9 +162,14 @@ "type": "React.ElementType", "description": "A visual to display after the button text." }, + { + "name": "trailingAction", + "type": "React.ElementType", + "description": "Trailing action appears to the right of the trailing visual and is always locked to the end" + }, { "name": "variant", - "type": "'default'\n| 'primary'\n| 'danger'\n| 'invisible'", + "type": "'default'\n| 'primary'\n| 'danger'\n| 'invisible'\n| 'link'", "defaultValue": "'default'", "description": "Change the visual style of the button." }, @@ -94,6 +178,12 @@ "type": "boolean", "defaultValue": "false", "description": "Whether the button label should wrap to multiple lines of it is longer than the button width." + }, + { + "name": "disabled", + "type": "boolean", + "description": "Avoid disabling buttons because it will make them inaccessible to users who rely on keyboard navigation. Buttons that are disabled can not be clicked, selected, or navigated through.", + "defaultValue": "" } ], "passthrough": { diff --git a/packages/react/src/Button/ButtonBase.tsx b/packages/react/src/Button/ButtonBase.tsx index f64137b8433..d49124a624f 100644 --- a/packages/react/src/Button/ButtonBase.tsx +++ b/packages/react/src/Button/ButtonBase.tsx @@ -1,13 +1,9 @@ import type {ComponentPropsWithRef} from 'react' -import React, {forwardRef, useMemo} from 'react' +import React, {forwardRef} from 'react' import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' import Box from '../Box' -import type {BetterSystemStyleObject} from '../sx' -import {merge} from '../sx' -import {useTheme} from '../ThemeProvider' import type {ButtonProps} from './types' -import {StyledButton} from './types' -import {getVariantStyles, getButtonStyles, getAlignContentSize} from './styles' +import {getAlignContentSize} from './styles' import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef' import {defaultSxProp} from '../utils/defaultSxProp' import {VisuallyHidden} from '../VisuallyHidden' @@ -18,20 +14,8 @@ import {ConditionalWrapper} from '../internal/components/ConditionalWrapper' import {AriaStatus} from '../live-region' import {clsx} from 'clsx' import classes from './ButtonBase.module.css' -import {useFeatureFlag} from '../FeatureFlags' import {isElement} from 'react-is' -const iconWrapStyles = { - display: 'flex', - pointerEvents: 'none', -} - -const renderVisual = (Visual: React.ElementType | React.ReactElement, loading: boolean, visualName: string) => ( - - {loading ? : isElement(Visual) ? Visual : } - -) - const renderModuleVisual = ( Visual: React.ElementType | React.ReactElement, loading: boolean, @@ -70,17 +54,9 @@ const ButtonBase = forwardRef( ...rest } = props - const enabled = useFeatureFlag('primer_react_css_modules_ga') const innerRef = React.useRef(null) useRefObjectAsForwardedRef(forwardedRef, innerRef) - const {theme} = useTheme() - const baseStyles = useMemo(() => { - return merge.all([getButtonStyles(theme), getVariantStyles(variant, theme)]) - }, [theme, variant]) - const sxStyles = useMemo(() => { - return merge(baseStyles, sxProp) - }, [baseStyles, sxProp]) const uuid = useId(id) const loadingAnnouncementID = `${uuid}-loading-announcement` @@ -104,131 +80,7 @@ const ButtonBase = forwardRef( }, [innerRef]) } - if (enabled) { - if (sxProp !== defaultSxProp) { - return ( - - Boolean(descriptionID)) - .join(' ')} - // aria-labelledby is needed because the accessible name becomes unset when the button is in a loading state. - // We only set it when the button is in a loading state because it will supercede the aria-label when the screen - // reader announces the button name. - aria-labelledby={ - loading - ? [`${uuid}-label`, ariaLabelledBy].filter(labelID => Boolean(labelID)).join(' ') - : ariaLabelledBy - } - id={id} - onClick={loading ? undefined : onClick} - > - {Icon ? ( - loading ? ( - - ) : isElement(Icon) ? ( - Icon - ) : ( - - ) - ) : ( - <> - - { - /* If there are no leading/trailing visuals/actions to replace with a loading spinner, - render a loading spiner in place of the button content. */ - loading && - !LeadingVisual && - !TrailingVisual && - !TrailingAction && - renderModuleVisual(Spinner, loading, 'loadingSpinner', false) - } - { - /* Render a leading visual unless the button is in a loading state. - Then replace the leading visual with a loading spinner. */ - LeadingVisual && renderModuleVisual(LeadingVisual, Boolean(loading), 'leadingVisual', false) - } - {children && ( - - {children} - - )} - { - /* If there is a count, render a counter label unless there is a trailing visual. - Then render the counter label as a trailing visual. - Replace the counter label or the trailing visual with a loading spinner if: - - the button is in a loading state - - there is no leading visual to replace with a loading spinner - */ - count !== undefined && !TrailingVisual - ? renderModuleVisual( - () => ( - - {count} - - ), - Boolean(loading) && !LeadingVisual, - 'trailingVisual', - true, - ) - : TrailingVisual - ? renderModuleVisual( - TrailingVisual, - Boolean(loading) && !LeadingVisual, - 'trailingVisual', - false, - ) - : null - } - - { - /* If there is a trailing action, render it unless the button is in a loading state - and there is no leading or trailing visual to replace with a loading spinner. */ - TrailingAction && - renderModuleVisual( - TrailingAction, - Boolean(loading) && !LeadingVisual && !TrailingVisual, - 'trailingAction', - false, - ) - } - > - )} - - {loading && ( - - {loadingAnnouncement} - - )} - - ) - } + if (sxProp !== defaultSxProp) { return ( - Boolean(labelID)).join(' ') : ariaLabelledBy } id={id} - // @ts-ignore temporary disable as we migrate to css modules, until we remove PolymorphicForwardRefComponent onClick={loading ? undefined : onClick} > {Icon ? ( @@ -275,7 +127,12 @@ const ButtonBase = forwardRef( ) ) : ( <> - + { /* If there are no leading/trailing visuals/actions to replace with a loading spinner, render a loading spiner in place of the button content. */ @@ -287,7 +144,7 @@ const ButtonBase = forwardRef( } { /* Render a leading visual unless the button is in a loading state. - Then replace the leading visual with a loading spinner. */ + Then replace the leading visual with a loading spinner. */ LeadingVisual && renderModuleVisual(LeadingVisual, Boolean(loading), 'leadingVisual', false) } {children && ( @@ -322,7 +179,7 @@ const ButtonBase = forwardRef( ) : null } - + { /* If there is a trailing action, render it unless the button is in a loading state and there is no leading or trailing visual to replace with a loading spinner. */ @@ -336,7 +193,7 @@ const ButtonBase = forwardRef( } > )} - + {loading && ( {loadingAnnouncement} @@ -345,7 +202,6 @@ const ButtonBase = forwardRef( ) } - return ( - Boolean(descriptionID)) @@ -379,6 +235,7 @@ const ButtonBase = forwardRef( loading ? [`${uuid}-label`, ariaLabelledBy].filter(labelID => Boolean(labelID)).join(' ') : ariaLabelledBy } id={id} + // @ts-ignore temporary disable as we migrate to css modules, until we remove PolymorphicForwardRefComponent onClick={loading ? undefined : onClick} > {Icon ? ( @@ -391,7 +248,7 @@ const ButtonBase = forwardRef( ) ) : ( <> - + { /* If there are no leading/trailing visuals/actions to replace with a loading spinner, render a loading spiner in place of the button content. */ @@ -399,15 +256,15 @@ const ButtonBase = forwardRef( !LeadingVisual && !TrailingVisual && !TrailingAction && - renderVisual(Spinner, loading, 'loadingSpinner') + renderModuleVisual(Spinner, loading, 'loadingSpinner', false) } { /* Render a leading visual unless the button is in a loading state. Then replace the leading visual with a loading spinner. */ - LeadingVisual && renderVisual(LeadingVisual, Boolean(loading), 'leadingVisual') + LeadingVisual && renderModuleVisual(LeadingVisual, Boolean(loading), 'leadingVisual', false) } {children && ( - + {children} )} @@ -419,25 +276,35 @@ const ButtonBase = forwardRef( - there is no leading visual to replace with a loading spinner */ count !== undefined && !TrailingVisual - ? renderVisual( - () => {count}, + ? renderModuleVisual( + () => ( + + {count} + + ), Boolean(loading) && !LeadingVisual, 'trailingVisual', + true, ) : TrailingVisual - ? renderVisual(TrailingVisual, Boolean(loading) && !LeadingVisual, 'trailingVisual') + ? renderModuleVisual(TrailingVisual, Boolean(loading) && !LeadingVisual, 'trailingVisual', false) : null } - + { /* If there is a trailing action, render it unless the button is in a loading state and there is no leading or trailing visual to replace with a loading spinner. */ TrailingAction && - renderVisual(TrailingAction, Boolean(loading) && !LeadingVisual && !TrailingVisual, 'trailingAction') + renderModuleVisual( + TrailingAction, + Boolean(loading) && !LeadingVisual && !TrailingVisual, + 'trailingAction', + false, + ) } > )} - + {loading && ( {loadingAnnouncement} diff --git a/packages/react/src/Button/IconButton.docs.json b/packages/react/src/Button/IconButton.docs.json index dc357c85695..88d7ae75938 100644 --- a/packages/react/src/Button/IconButton.docs.json +++ b/packages/react/src/Button/IconButton.docs.json @@ -3,7 +3,56 @@ "name": "IconButton", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-iconbutton--default" + }, + { + "id": "components-iconbutton-features--primary" + }, + { + "id": "components-iconbutton-features--danger" + }, + { + "id": "components-iconbutton-features--invisible" + }, + { + "id": "components-iconbutton-features--disabled" + }, + { + "id": "components-iconbutton-features--small" + }, + { + "id": "components-iconbutton-features--medium" + }, + { + "id": "components-iconbutton-features--large" + }, + { + "id": "components-iconbutton-features--with-description" + }, + { + "id": "components-iconbutton-features--external-tooltip" + }, + { + "id": "components-iconbutton-features--external-tooltip-version1" + }, + { + "id": "components-iconbutton-features--as-a-menu-anchor" + }, + { + "id": "components-iconbutton-features--loading" + }, + { + "id": "components-iconbutton-features--loading-trigger" + }, + { + "id": "components-iconbutton-features--keybinding-hint-on-description" + }, + { + "id": "components-iconbutton-features--keybinding-hint" + } + ], "importPath": "@primer/react", "props": [ { @@ -46,8 +95,13 @@ "name": "keyshortcuts", "type": "string", "defaultValue": "", - "required": false, - "description": "Keyboard shortcuts that trigger the button. Keyboard shortcut will be appended to the accessible name or description (depending on the tooltip type) of the button with a comma (i.e. Bold, Command+B) and it will be displayed in the tooltip." + "deprecated": true, + "description": "Use `keybindingHint` instead." + }, + { + "name": "keybindingHint", + "type": "string", + "description": "Optional keybinding hint to show in the tooltip for this button. See the `KeybindingHint` component documentation for the correct format for this string. Has no effect if tooltip is overridden or disabled. Does **not** bind any keybindings for this button - this is only for visual hints." }, { "name": "tooltipDirection", @@ -56,6 +110,13 @@ "description": "The direction of the tooltip. ", "required": false }, + { + "name": "description", + "type": "string", + "required": false, + "description": "If `description` is provided, we will use a Tooltip to describe the button. Then `aria-label` is used to label the button.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Button/IconButton.features.stories.tsx b/packages/react/src/Button/IconButton.features.stories.tsx index e8581bd6482..d8db5c4b4c2 100644 --- a/packages/react/src/Button/IconButton.features.stories.tsx +++ b/packages/react/src/Button/IconButton.features.stories.tsx @@ -84,13 +84,13 @@ export const LoadingTrigger = () => { return } -export const KeyshortcutsOnDescription = () => ( +export const KeybindingHintOnDescription = () => ( ) -export const Keyshortcuts = () => +export const KeybindingHint = () => diff --git a/packages/react/src/Button/IconButton.tsx b/packages/react/src/Button/IconButton.tsx index 4b3d00f6e3e..4b86ea1bd48 100644 --- a/packages/react/src/Button/IconButton.tsx +++ b/packages/react/src/Button/IconButton.tsx @@ -21,6 +21,7 @@ const IconButton = forwardRef( // This is planned to be a temporary prop until the default tooltip on icon buttons are fully rolled out. unsafeDisableTooltip = false, keyshortcuts, + keybindingHint, className, ...props }, @@ -58,15 +59,14 @@ const IconButton = forwardRef( /> ) } else { - // Does it have keyshortcuts? - const tooltipSuffix = keyshortcuts ? `, ${keyshortcuts}` : '' const tooltipText = description ?? ariaLabel return ( { expect(triggerEl).toHaveAttribute('aria-keyshortcuts', 'Command+H') }) it('should append the keyshortcuts to the tooltip text that labels the icon button when keyshortcuts prop is passed', () => { - const {getByRole, getByText} = render() - const triggerEl = getByRole('button') - const tooltipEl = getByText('Heart, Command+H') - expect(tooltipEl).toBeInTheDocument() - expect(triggerEl).toHaveAttribute('aria-labelledby', tooltipEl.id) + const {getByRole} = render() + const triggerEl = getByRole('button', {name: 'Heart ( command h )'}) + expect(triggerEl).toBeInTheDocument() }) - it('should render aria-keyshorts on an icon button when keyshortcuts prop is passed (Description Type)', () => { + it('should render aria-keyshortcuts on an icon button when keyshortcuts prop is passed (Description Type)', () => { const {getByRole} = render( , ) @@ -354,12 +352,10 @@ describe('Button', () => { expect(triggerEl).toHaveAttribute('aria-keyshortcuts', 'Command+H') }) it('should append the keyshortcuts to the tooltip text that describes the icon button when keyshortcuts prop is passed (Description Type)', () => { - const {getByRole, getByText} = render( + const {getByRole} = render( , ) - const triggerEl = getByRole('button') - const tooltipEl = getByText('Love is all around, Command+H') - expect(tooltipEl).toBeInTheDocument() - expect(triggerEl.getAttribute('aria-describedby')).toEqual(expect.stringContaining(tooltipEl.id)) + const triggerEl = getByRole('button', {name: 'Heart'}) + expect(triggerEl).toHaveAccessibleDescription('Love is all around ( command h )') }) }) diff --git a/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap b/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap index 27d49686024..9808d784a94 100644 --- a/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap +++ b/packages/react/src/Button/__tests__/__snapshots__/Button.test.tsx.snap @@ -1,315 +1,24 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Button respects block prop 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Block @@ -319,314 +28,23 @@ exports[`Button respects block prop 1`] = ` `; exports[`Button respects the alignContent prop 1`] = ` -.c1 { - -webkit-box-pack: start; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Align start @@ -636,314 +54,23 @@ exports[`Button respects the alignContent prop 1`] = ` `; exports[`Button respects the large size prop 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Smol @@ -953,314 +80,23 @@ exports[`Button respects the large size prop 1`] = ` `; exports[`Button respects the small size prop 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.text; - background-color: btn.bg; - box-shadow: undefined,undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - border-color: var(--button-default-borderColor-disabled,undefined); - background-color: var(--button-default-bgColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - background-color: btn.hoverBg; - border-color: var(--button-default-borderColor-hover,undefined); -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0[aria-expanded=true] { - background-color: btn.activeBg; - border-color: var(--button-default-borderColor-active,undefined); -} - -.c0 [data-component="leadingVisual"], -.c0 [data-component="trailingVisual"], -.c0 [data-component="trailingAction"] { - color: var(--button-color,undefined); -} - -.c0[data-component="IconButton"][data-no-visuals]:not(:disabled) { - color: fg.muted; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Smol @@ -1270,317 +106,23 @@ exports[`Button respects the small size prop 1`] = ` `; exports[`Button styles danger button appropriately 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: var(--button-default-borderColor-rest,undefined); - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.danger.text; - background-color: btn.bg; - box-shadow: undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: btn.danger.disabledText; - background-color: btn.danger.disabledBg; - border-color: var(--button-default-borderColor-disabled,undefined); -} - -.c0:disabled [data-component=ButtonCounter] { - color: btn.danger.disabledCounterFg; - background-color: btn.danger.disabledCounterBg; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - color: btn.danger.counterFg; - background-color: btn.danger.counterBg; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - color: btn.danger.hoverText; - background-color: btn.danger.hoverBg; - border-color: btn.danger.hoverBorder; - box-shadow: undefined; -} - -.c0:hover:not([disabled]):not([data-inactive]) [data-component=ButtonCounter] { - background-color: btn.danger.hoverCounterBg; - color: btn.danger.hoverCounterFg; -} - -.c0:active:not([disabled]):not([data-inactive]) { - color: btn.danger.selectedText; - background-color: btn.danger.selectedBg; - box-shadow: undefined; - border-color: btn.danger.selectedBorder; -} - -.c0[aria-expanded=true] { - color: btn.danger.selectedText; - background-color: btn.danger.selectedBg; - box-shadow: undefined; - border-color: btn.danger.selectedBorder; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Danger @@ -1590,324 +132,23 @@ exports[`Button styles danger button appropriately 1`] = ` `; exports[`Button styles invisible button appropriately 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: transparent; - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: var(--button-invisible-fgColor-rest,undefined); - background-color: transparent; - box-shadow: none; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: primer.fg.disabled; - background-color: var(--button-invisible-bgColor-disabled,transparent); -} - -.c0:disabled [data-component=ButtonCounter], -.c0:disabled [data-component="leadingVisual"], -.c0:disabled [data-component="trailingAction"] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]) { - background-color: actionListItem.default.hoverBg; -} - -.c0:active:not([disabled]) { - background-color: actionListItem.default.activeBg; -} - -.c0[aria-expanded=true] { - background-color: actionListItem.default.selectedBg; -} - -.c0[data-component="IconButton"][data-no-visuals] { - color: var(--button-invisible-iconColor-rest,undefined); -} - -.c0[data-no-visuals] { - color: var(--button-invisible-fgColor-rest,undefined); -} - -.c0:has([data-component="ButtonCounter"]) { - color: var(--button-invisible-fgColor-rest,undefined); -} - -.c0:disabled[data-no-visuals] { - color: primer.fg.disabled; -} - -.c0:disabled[data-no-visuals] [data-component=ButtonCounter] { - color: inherit; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Invisible @@ -1917,313 +158,23 @@ exports[`Button styles invisible button appropriately 1`] = ` `; exports[`Button styles primary button appropriately 1`] = ` -.c1 { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; -} - -.c0 { - border-radius: 2; - border: 1px solid; - border-color: btn.primary.border; - font-family: inherit; - font-weight: semibold; - font-size: 14px; - cursor: pointer; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-text-decoration: none; - text-decoration: none; - text-align: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - height: 32px; - padding: 0 12px; - gap: 8px; - min-width: -webkit-max-content; - min-width: -moz-max-content; - min-width: max-content; - -webkit-transition: 80ms cubic-bezier(0.65,0,0.35,1); - transition: 80ms cubic-bezier(0.65,0,0.35,1); - -webkit-transition-property: color,fill,background-color,border-color; - transition-property: color,fill,background-color,border-color; - color: btn.primary.text; - background-color: btn.primary.bg; - box-shadow: undefined; -} - -.c0:focus:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0:focus:not(:disabled):not(:focus-visible) { - outline: solid 1px transparent; -} - -.c0:focus-visible:not(:disabled) { - box-shadow: none; - outline: 2px solid; - outline-offset: -2px; -} - -.c0[href] { - display: -webkit-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-flex; -} - -.c0[href]:hover { - -webkit-text-decoration: none; - text-decoration: none; -} - -.c0:hover { - -webkit-transition-duration: 80ms; - transition-duration: 80ms; -} - -.c0:active { - -webkit-transition: none; - transition: none; -} - -.c0[data-inactive] { - cursor: auto; -} - -.c0:disabled { - cursor: not-allowed; - box-shadow: none; - color: btn.primary.disabledText; - background-color: btn.primary.disabledBg; - border-color: btn.primary.disabledBorder; -} - -.c0:disabled [data-component=ButtonCounter] { - color: inherit; -} - -.c0 [data-component=ButtonCounter] { - font-size: 12px; - background-color: btn.primary.counterBg; - color: btn.primary.text; -} - -.c0[data-component=IconButton] { - display: inline-grid; - padding: unset; - place-content: center; - width: 32px; - min-width: unset; -} - -.c0[data-size="small"] { - padding: 0 8px; - height: 28px; - gap: 4px; - font-size: 12px; -} - -.c0[data-size="small"] [data-component="text"] { - line-height: 1.6666667; -} - -.c0[data-size="small"] [data-component=ButtonCounter] { - font-size: 12px; -} - -.c0[data-size="small"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 4px; -} - -.c0[data-size="small"][data-component=IconButton] { - width: 28px; - padding: unset; -} - -.c0[data-size="large"] { - padding: 0 16px; - height: 40px; - gap: 8px; -} - -.c0[data-size="large"] [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0[data-size="large"][data-component=IconButton] { - width: 40px; - padding: unset; -} - -.c0[data-block="block"] { - width: 100%; -} - -.c0[data-label-wrap="true"] { - min-width: -webkit-fit-content; - min-width: -moz-fit-content; - min-width: fit-content; - height: unset; - min-height: var(--control-medium-size,2rem); -} - -.c0[data-label-wrap="true"] [data-component="buttonContent"] { - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - -webkit-align-self: stretch; - -ms-flex-item-align: stretch; - align-self: stretch; - padding-block: calc(var(--control-medium-paddingBlock,0.375rem) - 2px); -} - -.c0[data-label-wrap="true"] [data-component="text"] { - white-space: unset; - word-break: break-word; -} - -.c0[data-label-wrap="true"][data-size="small"] { - height: unset; - min-height: var(--control-small-size,1.75rem); -} - -.c0[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"] { - padding-block: calc(var(--control-small-paddingBlock,0.25rem) - 2px); -} - -.c0[data-label-wrap="true"][data-size="large"] { - height: unset; - min-height: var(--control-large-size,2.5rem); - padding-inline: var(--control-large-paddingInline-spacious,1rem); -} - -.c0[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"] { - padding-block: calc(var(--control-large-paddingBlock,0.625rem) - 2px); -} - -.c0[data-inactive]:not([disabled]) { - background-color: var(--button-inactive-bgColor,undefined); - border-color: var(--button-inactive-bgColor,undefined); - color: var(--button-inactive-fgColor,undefined); -} - -.c0[data-inactive]:not([disabled]):focus-visible { - box-shadow: none; -} - -.c0 [data-component="leadingVisual"] { - grid-area: leadingVisual; -} - -.c0 [data-component="text"] { - grid-area: text; - line-height: 1.4285714; - white-space: nowrap; -} - -.c0 [data-component="trailingVisual"] { - grid-area: trailingVisual; -} - -.c0 [data-component="trailingAction"] { - margin-right: -4px; -} - -.c0 [data-component="buttonContent"] { - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - display: grid; - grid-template-areas: "leadingVisual text trailingVisual"; - grid-template-columns: min-content minmax(0,auto) min-content; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-align-content: center; - -ms-flex-line-pack: center; - align-content: center; -} - -.c0 [data-component="buttonContent"] > :not(:last-child) { - margin-right: 8px; -} - -.c0 [data-component="loadingSpinner"] { - grid-area: text; - margin-right: 0px !important; - place-self: center; - color: fg.muted; -} - -.c0 [data-component="loadingSpinner"] + [data-component="text"] { - visibility: hidden; -} - -.c0:hover:not([disabled]):not([data-inactive]) { - color: btn.primary.hoverText; - background-color: btn.primary.hoverBg; -} - -.c0:focus:not([disabled]) { - box-shadow: inset 0 0 0 3px; -} - -.c0:focus-visible:not([disabled]) { - box-shadow: inset 0 0 0 3px; -} - -.c0:active:not([disabled]):not([data-inactive]) { - background-color: btn.primary.selectedBg; - box-shadow: undefined; -} - -.c0[aria-expanded=true] { - background-color: btn.primary.selectedBg; - box-shadow: undefined; -} - -@media (forced-colors:active) { - .c0:focus { - outline: solid 1px transparent; - } -} - Primary diff --git a/packages/react/src/Button/types.ts b/packages/react/src/Button/types.ts index 2d3fae5b07b..6824ae17e69 100644 --- a/packages/react/src/Button/types.ts +++ b/packages/react/src/Button/types.ts @@ -31,7 +31,7 @@ export type ButtonBaseProps = { */ size?: Size /** - * Items that are disabled can not be clicked, selected, or navigated through. + * Avoid disabling buttons because it will make them inaccessible to users who rely on keyboard navigation. that are disabled can not be clicked, selected, or navigated through. */ disabled?: boolean /** @@ -94,7 +94,9 @@ export type IconButtonProps = ButtonA11yProps & { unsafeDisableTooltip?: boolean description?: string tooltipDirection?: TooltipDirection + /** @deprecated Use `keybindingHint` instead. */ keyshortcuts?: string + keybindingHint?: string } & Omit // adopted from React.AnchorHTMLAttributes diff --git a/packages/react/src/ButtonGroup/ButtonGroup.docs.json b/packages/react/src/ButtonGroup/ButtonGroup.docs.json index 06c470b1253..bc7c4828eb8 100644 --- a/packages/react/src/ButtonGroup/ButtonGroup.docs.json +++ b/packages/react/src/ButtonGroup/ButtonGroup.docs.json @@ -3,7 +3,23 @@ "name": "ButtonGroup", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-buttongroup--default" + }, + { + "id": "components-buttongroup-features--icon-buttons" + }, + { + "id": "components-buttongroup-features--loading-buttons" + }, + { + "id": "components-buttongroup-features--dropdown-split" + }, + { + "id": "components-buttongroup-features--as-toolbar" + } + ], "importPath": "@primer/react", "props": [ { @@ -16,4 +32,4 @@ } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx b/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx index b233506fd88..da2b99ff6e6 100644 --- a/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx +++ b/packages/react/src/ButtonGroup/ButtonGroup.features.stories.tsx @@ -132,3 +132,11 @@ export const DropdownSplit = () => { ) } + +export const AsToolbar = () => ( + + Button 1 + Button 2 + Button 3 + +) diff --git a/packages/react/src/ButtonGroup/ButtonGroup.test.tsx b/packages/react/src/ButtonGroup/ButtonGroup.test.tsx new file mode 100644 index 00000000000..67b3b0b3b6f --- /dev/null +++ b/packages/react/src/ButtonGroup/ButtonGroup.test.tsx @@ -0,0 +1,58 @@ +import {Button} from '../Button' +import {render, screen} from '@testing-library/react' +import axe from 'axe-core' +import {FeatureFlags} from '../FeatureFlags' +import {behavesAsComponent} from '../utils/testing' +import type {ButtonGroupProps} from './ButtonGroup' +import ButtonGroup from './ButtonGroup' +import React from 'react' + +const TestButtonGroup = (props: ButtonGroupProps) => ( + + Button 1 + Button 2 + Button 3 + +) + +describe('ButtonGroup', () => { + behavesAsComponent({ + Component: TestButtonGroup, + options: {skipSx: true, skipAs: true}, + }) + + it('should support `className` on the outermost element', () => { + const Element = () => + const FeatureFlagElement = () => { + return ( + + + + ) + } + expect(render().container.firstChild).toHaveClass('test-class-name') + expect(render().container.firstChild).toHaveClass('test-class-name') + }) + + it('renders a ', () => { + const container = render() + expect(container.getByTestId('button-group').tagName).toBe('DIV') + }) + + it('should have no axe violations', async () => { + const {container} = render() + const results = await axe.run(container) + expect(results).toHaveNoViolations() + }) + + it('should respect role prop', () => { + render() + expect(screen.getByRole('toolbar')).toBeInTheDocument() + }) +}) diff --git a/packages/react/src/ButtonGroup/ButtonGroup.tsx b/packages/react/src/ButtonGroup/ButtonGroup.tsx index 9e9111f591a..e3cc3e0632a 100644 --- a/packages/react/src/ButtonGroup/ButtonGroup.tsx +++ b/packages/react/src/ButtonGroup/ButtonGroup.tsx @@ -6,9 +6,12 @@ import classes from './ButtonGroup.module.css' import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' import {clsx} from 'clsx' import {useFeatureFlag} from '../FeatureFlags' +import {FocusKeys, useFocusZone} from '../hooks/useFocusZone' +import {useProvidedRefOrCreate} from '../hooks' +import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' const StyledButtonGroup = toggleStyledComponent( - 'primer_react_css_modules_team', + 'primer_react_css_modules_ga', 'div', styled.div` display: inline-flex; @@ -95,24 +98,35 @@ const StyledButtonGroup = toggleStyledComponent( ) export type ButtonGroupProps = ComponentProps + const ButtonGroup = React.forwardRef(function ButtonGroup( - {children, className, ...rest}, + {children, className, role, ...rest}, forwardRef, ) { - const enabled = useFeatureFlag('primer_react_css_modules_team') + const enabled = useFeatureFlag('primer_react_css_modules_ga') const buttons = React.Children.map(children, (child, index) => {child}) + const buttonRef = useProvidedRefOrCreate(forwardRef as React.RefObject) + + useFocusZone({ + containerRef: buttonRef, + disabled: role !== 'toolbar', + bindKeys: FocusKeys.ArrowHorizontal, + focusOutBehavior: 'wrap', + }) + return ( {buttons} ) -}) +}) as PolymorphicForwardRefComponent<'div', ButtonGroupProps> ButtonGroup.displayName = 'ButtonGroup' diff --git a/packages/react/src/Checkbox/Checkbox.docs.json b/packages/react/src/Checkbox/Checkbox.docs.json index 8e493070d97..ffe55c31e13 100644 --- a/packages/react/src/Checkbox/Checkbox.docs.json +++ b/packages/react/src/Checkbox/Checkbox.docs.json @@ -3,7 +3,23 @@ "name": "Checkbox", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-checkbox--default" + }, + { + "id": "components-checkbox-features--with-leading-visual" + }, + { + "id": "components-checkbox-features--disabled" + }, + { + "id": "components-checkbox-features--with-caption" + }, + { + "id": "components-checkbox-features--indeterminate" + } + ], "importPath": "@primer/react", "props": [ { @@ -63,4 +79,4 @@ } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/Checkbox/Checkbox.test.tsx b/packages/react/src/Checkbox/Checkbox.test.tsx index bf115bfd6ec..05dbad28317 100644 --- a/packages/react/src/Checkbox/Checkbox.test.tsx +++ b/packages/react/src/Checkbox/Checkbox.test.tsx @@ -9,7 +9,7 @@ describe('Checkbox', () => { beforeEach(() => { jest.resetAllMocks() }) - behavesAsComponent({Component: Checkbox}) + behavesAsComponent({Component: Checkbox, options: {skipAs: true}}) checkExports('Checkbox', { default: Checkbox, diff --git a/packages/react/src/Checkbox/Checkbox.tsx b/packages/react/src/Checkbox/Checkbox.tsx index 19acab2f020..5b60739d4d0 100644 --- a/packages/react/src/Checkbox/Checkbox.tsx +++ b/packages/react/src/Checkbox/Checkbox.tsx @@ -1,17 +1,12 @@ import {clsx} from 'clsx' -import styled from 'styled-components' import {useProvidedRefOrCreate} from '../hooks' import React, {useContext, useEffect, type ChangeEventHandler, type InputHTMLAttributes, type ReactElement} from 'react' -import sx, {type SxProp} from '../sx' +import {type SxProp} from '../sx' import useLayoutEffect from '../utils/useIsomorphicLayoutEffect' import type {FormValidationStatus} from '../utils/types/FormValidationStatus' import {CheckboxGroupContext} from '../CheckboxGroup/CheckboxGroupContext' -import getGlobalFocusStyles from '../internal/utils/getGlobalFocusStyles' -import {get} from '../constants' -import {sharedCheckboxAndRadioStyles} from '../internal/utils/sharedCheckboxAndRadioStyles' import classes from './Checkbox.module.css' import sharedClasses from './shared.module.css' -import {useFeatureFlag} from '../FeatureFlags' import Box from '../Box' export type CheckboxProps = { @@ -43,106 +38,6 @@ export type CheckboxProps = { } & Exclude, 'value'> & SxProp -const StyledCheckbox = styled.input` - ${sharedCheckboxAndRadioStyles}; - border-radius: ${get('radii.1')}; - transition: - background-color, - border-color 80ms cubic-bezier(0.33, 1, 0.68, 1); /* checked -> unchecked - add 120ms delay to fully see animation-out */ - - &::before { - width: var(--base-size-16, 16px); - height: var(--base-size-16, 16px); - visibility: hidden; - content: ''; - background-color: ${get('colors.fg.onEmphasis')}; - transition: visibility 0s linear 230ms; - clip-path: inset(var(--base-size-16, 16px) 0 0 0); - mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNzgwMyAwLjIxOTYyNUMxMS45MjEgMC4zNjA0MjcgMTIgMC41NTEzMDUgMTIgMC43NTAzMTNDMTIgMC45NDkzMjEgMTEuOTIxIDEuMTQwMTkgMTEuNzgwMyAxLjI4MUw0LjUxODYgOC41NDA0MkM0LjM3Nzc1IDguNjgxIDQuMTg2ODIgOC43NiAzLjk4Nzc0IDguNzZDMy43ODg2NyA4Ljc2IDMuNTk3NzMgOC42ODEgMy40NTY4OSA4LjU0MDQyTDAuMjAxNjIyIDUuMjg2MkMwLjA2ODkyNzcgNS4xNDM4MyAtMC4wMDMzMDkwNSA0Ljk1NTU1IDAuMDAwMTE2NDkzIDQuNzYwOThDMC4wMDM1NTIwNSA0LjU2NjQzIDAuMDgyMzg5NCA0LjM4MDgxIDAuMjIwMDMyIDQuMjQzMjFDMC4zNTc2NjUgNC4xMDU2MiAwLjU0MzM1NSA0LjAyNjgxIDAuNzM3OTcgNC4wMjMzOEMwLjkzMjU4NCA0LjAxOTk0IDEuMTIwOTMgNC4wOTIxNyAxLjI2MzM0IDQuMjI0ODJMMy45ODc3NCA2Ljk0ODM1TDEwLjcxODYgMC4yMTk2MjVDMTAuODU5NSAwLjA3ODk5MjMgMTEuMDUwNCAwIDExLjI0OTUgMEMxMS40NDg1IDAgMTEuNjM5NSAwLjA3ODk5MjMgMTEuNzgwMyAwLjIxOTYyNVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo='); - mask-size: 75%; - mask-repeat: no-repeat; - mask-position: center; - - animation: checkmarkOut 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards; - } - - &:checked, - &:indeterminate { - background: var(--control-checked-bgColor-rest, ${get('colors.accent.fg')}); - border-color: var( - --control-checked-bgColor-rest, - ${get('colors.accent.fg')} - ); /* using bgColor here to avoid a border change in dark high contrast */ - - &::before { - animation: checkmarkIn 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards 80ms; - } - } - - &:disabled { - cursor: not-allowed; - } - - &:checked { - transition: - background-color, - border-color 80ms cubic-bezier(0.32, 0, 0.67, 0) 0ms; - - &::before { - visibility: visible; - transition: visibility 0s linear 0s; - } - - &:disabled { - background-color: var(--control-checked-bgColor-disabled, ${get('colors.fg.muted')}); - border-color: var(--control-checked-borderColor-disabled, ${get('colors.fg.muted')}); - opacity: 1; - - &::before { - background-color: var(--control-checked-fgColor-disabled, ${get('colors.fg.onEmphasis')}); - } - } - - /* Windows High Contrast mode */ - @media (forced-colors: active) { - background-color: canvastext; - border-color: canvastext; - } - } - - &:indeterminate { - background: var(--control-checked-bgColor-rest, ${get('colors.accent.fg')}); - &::before { - mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMiIgdmlld0JveD0iMCAwIDEwIDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMCAxQzAgMC40NDc3MTUgMC40NDc3MTUgMCAxIDBIOUM5LjU1MjI5IDAgMTAgMC40NDc3MTUgMTAgMUMxMCAxLjU1MjI4IDkuNTUyMjkgMiA5IDJIMUMwLjQ0NzcxNSAyIDAgMS41NTIyOCAwIDFaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K'); - visibility: visible; - } - } - - ${getGlobalFocusStyles()}; - - ${sx}; - - @keyframes checkmarkIn { - from { - clip-path: inset(var(--base-size-16, 16px) 0 0 0); - } - - to { - clip-path: inset(0 0 0 0); - } - } - - @keyframes checkmarkOut { - from { - clip-path: inset(0 0 0 0); - } - - to { - clip-path: inset(var(--base-size-16, 16px) 0 0 0); - } - } -` - /** * An accessible, native checkbox component */ @@ -163,7 +58,6 @@ const Checkbox = React.forwardRef( }, ref, ): ReactElement => { - const enabled = useFeatureFlag('primer_react_css_modules_staff') const checkboxRef = useProvidedRefOrCreate(ref as React.RefObject) const checkboxGroupContext = useContext(CheckboxGroupContext) const handleOnChange: ChangeEventHandler = e => { @@ -204,21 +98,17 @@ const Checkbox = React.forwardRef( } }) - if (enabled) { - if (sxProp) { - return ( - - ) - } - return + if (sxProp) { + return ( + + ) } - - return + return }, ) diff --git a/packages/react/src/CheckboxGroup/CheckboxGroup.dev.stories.tsx b/packages/react/src/CheckboxGroup/CheckboxGroup.dev.stories.tsx new file mode 100644 index 00000000000..333c3ef0cea --- /dev/null +++ b/packages/react/src/CheckboxGroup/CheckboxGroup.dev.stories.tsx @@ -0,0 +1,49 @@ +import React from 'react' +import type {Meta} from '@storybook/react' +import {Checkbox, CheckboxGroup, FormControl} from '..' + +export default { + title: 'Components/CheckboxGroup/Dev', + component: CheckboxGroup, + parameters: {controls: {exclude: ['aria-labelledby', 'id', 'onChange', 'sx']}}, +} as Meta + +export const SxProps = () => ( + + + Caption + + + Choices + + + + Choice one + + + + Choice two + + + + Choice three + + +) diff --git a/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json b/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json index 4d289ce5c81..d32a6d208f8 100644 --- a/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json +++ b/packages/react/src/CheckboxGroup/CheckboxGroup.docs.json @@ -3,7 +3,26 @@ "name": "CheckboxGroup", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-checkboxgroup--default" + }, + { + "id": "components-checkboxgroup-features--visually-hidden-label" + }, + { + "id": "components-checkboxgroup-features--with-external-label" + }, + { + "id": "components-checkboxgroup-features--error" + }, + { + "id": "components-checkboxgroup-features--success" + }, + { + "id": "components-checkboxgroup-features--caption" + } + ], "importPath": "@primer/react", "props": [ { @@ -102,4 +121,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/react/src/ConfirmationDialog/ConfirmationDialog.module.css b/packages/react/src/ConfirmationDialog/ConfirmationDialog.module.css new file mode 100644 index 00000000000..12fac66ad61 --- /dev/null +++ b/packages/react/src/ConfirmationDialog/ConfirmationDialog.module.css @@ -0,0 +1,31 @@ +.ConfirmationHeader { + display: flex; + padding: var(--base-size-8); + flex-direction: row; + + > h1 { + padding: var(--base-size-6) var(--base-size-8); + + /* override default margin */ + margin: 0; + font-size: var(--text-title-size-medium); + font-weight: var(--text-title-weight-medium); + flex-grow: 1; + } +} + +.ConfirmationBody { + padding: 0 var(--base-size-16) var(--base-size-16) var(--base-size-16); + font-size: var(--text-body-size-medium); + flex-grow: 1; +} + +.ConfirmationFooter { + display: grid; + grid-auto-flow: column; + grid-auto-columns: max-content; + grid-gap: var(--base-size-8); + align-items: end; + justify-content: end; + padding: var(--base-size-4) var(--base-size-16) var(--base-size-16); +} diff --git a/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx b/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx index 51607879b34..5fab91cb57e 100644 --- a/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx +++ b/packages/react/src/ConfirmationDialog/ConfirmationDialog.stories.tsx @@ -25,6 +25,7 @@ export const Default = () => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( <> setIsOpen(!isOpen)}> @@ -44,3 +45,60 @@ export const Default = () => { > ) } + +interface PlaygroundProps { + open: boolean +} + +export const Playground = ({open, ...args}: PlaygroundProps) => { + const [isOpen, setIsOpen] = useState(false) + const buttonRef = useRef(null) + const onDialogClose = useCallback(() => setIsOpen(false), []) + + return ( + <> + setIsOpen(!isOpen)}> + Show dialog + + {(isOpen || open) && ( + + Deleting the universe could have disastrous effects, including but not limited to destroying all life on + Earth. + + )} + > + ) +} + +Playground.args = { + open: false, +} + +Playground.argTypes = { + open: { + control: { + type: 'boolean', + }, + }, + title: { + control: { + type: 'text', + }, + }, + cancelButtonContent: { + control: { + type: 'text', + }, + }, + confirmButtonContent: { + control: { + type: 'text', + }, + }, +} diff --git a/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx b/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx index 0e45f3c683d..95fe993d620 100644 --- a/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx +++ b/packages/react/src/ConfirmationDialog/ConfirmationDialog.tsx @@ -10,6 +10,9 @@ import type {DialogProps, DialogHeaderProps, DialogButtonProps} from '../Dialog/ import {Dialog} from '../Dialog/Dialog' import {useFocusZone} from '../hooks/useFocusZone' import BaseStyles from '../BaseStyles' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './ConfirmationDialog.module.css' /** * Props to customize the ConfirmationDialog. @@ -43,54 +46,85 @@ export interface ConfirmationDialogProps { confirmButtonType?: 'normal' | 'primary' | 'danger' } -const StyledConfirmationHeader = styled.div` - padding: ${get('space.2')}; - display: flex; - flex-direction: row; -` -const StyledTitle = styled(Box).attrs({as: 'h1'})` - font-size: ${get('fontSizes.3')}; - font-weight: ${get('fontWeights.bold')}; - padding: 6px ${get('space.2')}; - flex-grow: 1; - margin: 0; /* override default margin */ -` +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' + +const StyledConfirmationHeader = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + padding: ${get('space.2')}; + display: flex; + flex-direction: row; + `, +) + +const StyledTitle = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'h1', + styled(Box).attrs({as: 'h1'})` + font-size: ${get('fontSizes.3')}; + font-weight: ${get('fontWeights.bold')}; + padding: 6px ${get('space.2')}; + flex-grow: 1; + margin: 0; /* override default margin */ + `, +) + const ConfirmationHeader: React.FC> = ({title, onClose, dialogLabelId}) => { const onCloseClick = useCallback(() => { onClose('close-button') }, [onClose]) + + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) return ( - + {title} ) } -const StyledConfirmationBody = styled(Box)` - font-size: ${get('fontSizes.1')}; - padding: 0 ${get('space.3')} ${get('space.3')} ${get('space.3')}; - flex-grow: 1; -` +const StyledConfirmationBody = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled(Box)` + font-size: ${get('fontSizes.1')}; + padding: 0 ${get('space.3')} ${get('space.3')} ${get('space.3')}; + flex-grow: 1; + `, +) + const ConfirmationBody: React.FC> = ({children}) => { - return {children} + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return {children} } -const StyledConfirmationFooter = styled(Box)` - display: grid; - grid-auto-flow: column; - grid-auto-columns: max-content; - grid-gap: ${get('space.2')}; - align-items: end; - justify-content: end; - padding: ${get('space.1')} ${get('space.3')} ${get('space.3')}; -` +const StyledConfirmationFooter = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled(Box)` + display: grid; + grid-auto-flow: column; + grid-auto-columns: max-content; + grid-gap: ${get('space.2')}; + align-items: end; + justify-content: end; + padding: ${get('space.1')} ${get('space.3')} ${get('space.3')}; + `, +) + const ConfirmationFooter: React.FC> = ({footerButtons}) => { const {containerRef: footerRef} = useFocusZone({ bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.Tab, focusInStrategy: 'closest', }) + + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + // Must have exactly 2 buttons! return ( - }> + } + className={enabled && classes.ConfirmationFooter} + > ) diff --git a/packages/react/src/CounterLabel/CounterLabel.docs.json b/packages/react/src/CounterLabel/CounterLabel.docs.json index 17a0b4cb94e..b551fb900a0 100644 --- a/packages/react/src/CounterLabel/CounterLabel.docs.json +++ b/packages/react/src/CounterLabel/CounterLabel.docs.json @@ -3,7 +3,17 @@ "name": "CounterLabel", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-counterlabel--default" + }, + { + "id": "components-counterlabel-features--primary-theme" + }, + { + "id": "components-counterlabel-features--secondary-theme" + } + ], "importPath": "@primer/react", "props": [ { @@ -11,7 +21,17 @@ "type": "'primary' | 'secondary'", "defaultValue": "", "description": "Pass in 'primary' for a darker background and inverse text, or 'secondary' for a lighter background and primary text. Omitting the scheme prop renders the default counter scheme" + }, + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" + }, + { + "name": "sx", + "type": "BetterSystemStyleObject" } ], "subcomponents": [] -} \ No newline at end of file +} diff --git a/packages/react/src/CounterLabel/CounterLabel.tsx b/packages/react/src/CounterLabel/CounterLabel.tsx index be06080269f..08105b8701d 100644 --- a/packages/react/src/CounterLabel/CounterLabel.tsx +++ b/packages/react/src/CounterLabel/CounterLabel.tsx @@ -1,13 +1,9 @@ import {clsx} from 'clsx' import type {HTMLAttributes} from 'react' import React, {forwardRef} from 'react' -import styled from 'styled-components' -import {get} from '../constants' -import sx from '../sx' import type {SxProp} from '../sx' import {VisuallyHidden} from '../VisuallyHidden' import {defaultSxProp} from '../utils/defaultSxProp' -import {useFeatureFlag} from '../FeatureFlags' import Box from '../Box' import classes from './CounterLabel.module.css' @@ -20,7 +16,6 @@ export type CounterLabelProps = React.PropsWithChildren< const CounterLabel = forwardRef( ({scheme = 'secondary', sx = defaultSxProp, className, children, ...rest}, forwardedRef) => { - const enabled = useFeatureFlag('primer_react_css_modules_staff') const label = ({children}) const counterProps = { ref: forwardedRef, @@ -29,67 +24,27 @@ const CounterLabel = forwardRef( ...rest, } - if (enabled) { - if (sx !== defaultSxProp) { - return ( - <> - - {children} - - {label} - > - ) - } + if (sx !== defaultSxProp) { return ( <> - + {children} - + {label} > ) } - return ( <> - + {children} - + {label} > ) }, ) -const StyledCounterLabel = styled.span` - display: inline-block; - padding: var(--base-size-2, 0.125rem) var(--base-size-6, 0.375rem); - font-size: 12px; - font-weight: var(--base-text-weight-semibold, bold); - line-height: 1; - border-radius: 20px; - border: var(--borderWidth-thin, max(1px, 0.0625rem)) solid var(--counter-borderColor, var(--color-counter-border)); - - &:where([data-scheme='primary']) { - background-color: ${get('colors.neutral.emphasis')}; - color: ${get('colors.fg.onEmphasis')}; - } - - &:where([data-scheme='secondary']) { - background-color: ${get('colors.neutral.muted')}; - color: ${get('colors.fg.default')}; - } - - &:where(:empty) { - display: none; - } - - /* Place the sx prop styles after previously inserted styles so that it will win out in specificity */ - & { - ${sx} - } -` - CounterLabel.displayName = 'CounterLabel' export default CounterLabel diff --git a/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap b/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap index 1d08b1f9ece..77ff00aad26 100644 --- a/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap +++ b/packages/react/src/CounterLabel/__snapshots__/CounterLabel.test.tsx.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CounterLabel renders with secondary scheme when no "scheme" prop is provided 1`] = ` -.c1:not(:focus):not(:active):not(:focus-within) { +.c0:not(:focus):not(:active):not(:focus-within) { -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; @@ -11,30 +11,16 @@ exports[`CounterLabel renders with secondary scheme when no "scheme" prop is pro width: 1px; } -.c0 { - display: inline-block; - padding: var(--base-size-2,0.125rem) var(--base-size-6,0.375rem); - font-size: 12px; - font-weight: var(--base-text-weight-semibold,bold); - line-height: 1; - border-radius: 20px; - border: var(--borderWidth-thin,max(1px,0.0625rem)) solid var(--counter-borderColor,var(--color-counter-border)); -} - -.c0:where(:empty) { - display: none; -} - 1234  ( 1234 @@ -44,7 +30,7 @@ exports[`CounterLabel renders with secondary scheme when no "scheme" prop is pro `; exports[`CounterLabel respects the primary "scheme" prop 1`] = ` -.c1:not(:focus):not(:active):not(:focus-within) { +.c0:not(:focus):not(:active):not(:focus-within) { -webkit-clip-path: inset(50%); clip-path: inset(50%); height: 1px; @@ -54,30 +40,16 @@ exports[`CounterLabel respects the primary "scheme" prop 1`] = ` width: 1px; } -.c0 { - display: inline-block; - padding: var(--base-size-2,0.125rem) var(--base-size-6,0.375rem); - font-size: 12px; - font-weight: var(--base-text-weight-semibold,bold); - line-height: 1; - border-radius: 20px; - border: var(--borderWidth-thin,max(1px,0.0625rem)) solid var(--counter-borderColor,var(--color-counter-border)); -} - -.c0:where(:empty) { - display: none; -} - 1234  ( 1234 diff --git a/packages/react/src/DataTable/DataTable.docs.json b/packages/react/src/DataTable/DataTable.docs.json index b3458391ed0..88d0373ae34 100644 --- a/packages/react/src/DataTable/DataTable.docs.json +++ b/packages/react/src/DataTable/DataTable.docs.json @@ -1,9 +1,12 @@ { "id": "data_table", "name": "DataTable", - "status": "draft", - "a11yReviewed": false, + "status": "alpha", + "a11yReviewed": true, "stories": [ + { + "id": "experimental-components-datatable--default" + }, { "id": "experimental-components-datatable-features--with-title" }, @@ -67,6 +70,34 @@ "name": "cellPadding", "type": "'condensed' | 'normal' | 'spacious'", "description": "Specify the amount of space that should be available around the contents of a cell" + }, + { + "name": "aria-describedby", + "type": "string", + "required": false, + "description": "Provide an id to an element which uniquely describes this table", + "defaultValue": "" + }, + { + "name": "aria-labelledby", + "type": "string", + "required": false, + "description": "Provide an id to an element which uniquely labels this table", + "defaultValue": "" + }, + { + "name": "initialSortColumn", + "type": "string | number", + "required": false, + "description": "Provide the id or field of the column by which the table is sorted. When\nusing this `prop`, the input data must be sorted by this column in\nascending order", + "defaultValue": "" + }, + { + "name": "initialSortDirection", + "type": "'ASC' | 'DESC'", + "required": false, + "description": "Provide the sort direction that the table should be sorted by on the\ncurrently sorted column", + "defaultValue": "" } ], "subcomponents": [ @@ -103,6 +134,15 @@ } ] }, + { + "name": "Table.Actions", + "props": [ + { + "name": "children", + "type": "React.ReactNode" + } + ] + }, { "name": "Table.Body", "props": [ @@ -124,6 +164,13 @@ { "name": "Table.Header", "props": [ + { + "name": "align", + "type": "'end' | 'start'", + "required": false, + "description": "The horizontal alignment of the cell's content", + "defaultValue": "" + }, { "name": "children", "type": "React.ReactNode" @@ -133,6 +180,13 @@ { "name": "Table.Cell", "props": [ + { + "name": "align", + "type": "'end' | 'start'", + "required": false, + "description": "The horizontal alignment of the cell's content", + "defaultValue": "" + }, { "name": "children", "type": "React.ReactNode" @@ -144,6 +198,10 @@ } ] }, + { + "name": "Table.CellPlaceholder", + "props": [] + }, { "name": "Table.Container", "props": [ @@ -153,6 +211,10 @@ } ] }, + { + "name": "Table.Divider", + "props": [] + }, { "name": "Table.Title", "props": [ @@ -163,7 +225,8 @@ { "name": "id", "type": "string", - "required": true + "required": true, + "description": "Provide a unique id for the table subtitle. This should be used along with\n`aria-labelledby` on `DataTable`" } ] }, @@ -177,7 +240,8 @@ { "name": "id", "type": "string", - "required": true + "required": true, + "description": "Provide a unique id for the table subtitle. This should be used along with\n`aria-describedby` on `DataTable`" } ] }, @@ -187,16 +251,19 @@ { "name": "cellPadding", "type": "'condensed' | 'normal' | 'spacious'", - "description": "Specify the amount of space that should be available around the contents of a cell" + "description": "Specify the amount of space that should be available around the contents of a cell", + "defaultValue": "normal" }, { "name": "columns", + "required": true, "type": "Array>" }, { "name": "rows", "type": "number", - "description": "Optionally specify the number of rows which should be included in the skeleton state of the component" + "description": "Optionally specify the number of rows which should be included in the skeleton state of the component", + "defaultValue": "10" } ] }, @@ -206,28 +273,42 @@ { "name": "aria-label", "type": "string", - "required": true + "required": true, + "description": "Defines a string value that labels the current element.\nProvide a label for the navigation landmark rendered by this component\n@see aria-labelledby." }, { "name": "defaultPageIndex", - "type": "string" + "type": "string", + "description": "Provide an optional index to specify the default selected page" }, { "name": "id", - "type": "string" + "type": "string", + "description": "Optionally provide an `id` that is placed on the navigation landmark\nrendered by this component" }, { "name": "onChange", - "type": "({ pageIndex }: { pageIndex: number }) => void" + "type": "({ pageIndex }: { pageIndex: number }) => void", + "description": "Optionally provide a handler that is called whenever the pagination state\nis updated" }, { "name": "pageSize", - "type": "number" + "type": "number", + "description": "Optionally specify the number of items within a page", + "defaultValue": "25" }, { "name": "totalCount", "type": "number", - "required": true + "required": true, + "description": "Specify the total number of items within the collection" + }, + { + "name": "showPages", + "type": "boolean | { narrow?: boolean; regular?: boolean; wide?: boolean; }", + "required": false, + "description": "Whether to show the page numbers", + "defaultValue": "{narrow: false}" } ] }, @@ -258,6 +339,31 @@ } ] }, + { + "name": "Table.SortHeader", + "props": [ + { + "name": "direction", + "type": "'ASC' | 'DESC' | 'NONE'", + "required": true, + "description": "Specify the sort direction for the TableHeader", + "defaultValue": "" + }, + { + "name": "onToggleSort", + "type": "() => void", + "required": true, + "description": "Provide a handler that is called when the sortable TableHeader is\ninteracted with via a click or keyboard interaction", + "defaultValue": "" + }, + { + "name": "align", + "type": "'end' | 'start'", + "description": "The horizontal alignment of the cell's content", + "defaultValue": "" + } + ] + }, { "name": "Column options", "props": [ diff --git a/packages/react/src/DataTable/Table.tsx b/packages/react/src/DataTable/Table.tsx index 35959563773..b4bf6796eb7 100644 --- a/packages/react/src/DataTable/Table.tsx +++ b/packages/react/src/DataTable/Table.tsx @@ -31,7 +31,7 @@ const StyledTable = styled.table>` display: grid; font-size: var(--table-font-size); grid-template-columns: var(--grid-template-columns); - line-height: calc(20 / var(--table-font-size)); + line-height: calc(20 / 12); width: 100%; /* Density modes: condensed, normal, spacious */ diff --git a/packages/react/src/Details/Details.docs.json b/packages/react/src/Details/Details.docs.json index 0dff5c8d6da..6b4ce4e945a 100644 --- a/packages/react/src/Details/Details.docs.json +++ b/packages/react/src/Details/Details.docs.json @@ -3,7 +3,11 @@ "name": "Details", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-details--default" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Details/Details.tsx b/packages/react/src/Details/Details.tsx index 927edb6091f..bc2a4c30909 100644 --- a/packages/react/src/Details/Details.tsx +++ b/packages/react/src/Details/Details.tsx @@ -8,7 +8,7 @@ import {clsx} from 'clsx' import classes from './Details.module.css' import {useMergedRefs} from '../internal/hooks/useMergedRefs' -const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_ga' const StyledDetails = toggleStyledComponent( CSS_MODULES_FEATURE_FLAG, diff --git a/packages/react/src/Dialog/Dialog.dev.stories.tsx b/packages/react/src/Dialog/Dialog.dev.stories.tsx new file mode 100644 index 00000000000..8f4d6bb26f4 --- /dev/null +++ b/packages/react/src/Dialog/Dialog.dev.stories.tsx @@ -0,0 +1,213 @@ +import React, {useState, useCallback} from 'react' +import {Text, Button} from '..' +import type {DialogProps, DialogWidth, DialogHeight} from './Dialog' +import {Dialog} from './Dialog' +import {FeatureFlags} from '../FeatureFlags' + +/* Dialog Version 2 */ + +export default { + title: 'Components/Dialog/Dev', +} + +const lipsum = ( + <> + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sollicitudin mauris maximus elit sagittis, nec + lobortis ligula elementum. Nam iaculis, urna nec lobortis posuere, eros urna venenatis eros, vel accumsan turpis + nunc vitae enim. Maecenas et lorem lectus. Vivamus iaculis tortor eget ante placerat, nec posuere nisl tincidunt. + Cras condimentum ante in accumsan ultricies. Morbi quis porta est, sit amet congue augue. Lorem ipsum dolor sit + amet, consectetur adipiscing elit. Ut consequat nunc id quam tempus, id tincidunt neque venenatis. Mauris + fringilla tempor est, vitae fermentum enim elementum vitae. Nullam eleifend odio ut porta efficitur. Phasellus + luctus tempus posuere. + + + + Curabitur scelerisque bibendum faucibus. Duis rhoncus nunc est, at pharetra eros tristique a. Nam sodales turpis + lectus, quis faucibus felis fermentum in. Curabitur vel velit vel eros laoreet pharetra. Aenean in facilisis + sapien, eu porttitor ex. Donec ultrices ac arcu ut lobortis. Pellentesque vitae rutrum orci. Etiam pretium et enim + sit amet scelerisque. Nulla sed odio nec lorem dapibus condimentum at sagittis quam. Sed in ornare ex, sed luctus + sem. Mauris a est tellus. + + > +) + +interface DialogStoryProps { + width: DialogWidth + height: DialogHeight + subtitle: boolean +} + +function CssHeader({title, subtitle, dialogLabelId}: React.PropsWithChildren) { + if (typeof title === 'string' && typeof subtitle === 'string') { + return ( + + {title.toUpperCase()} + + ) + } + return null +} +function CssBody({children}: React.PropsWithChildren) { + return {children} +} +function CssFooter({footerButtons}: React.PropsWithChildren) { + return ( + + {footerButtons ? : null} + + ) +} +export const WithCss = ({width, height, subtitle}: DialogStoryProps) => { + const [isOpen, setIsOpen] = useState(true) + const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( + + setIsOpen(!isOpen)}>Show dialog + {isOpen && ( + + {lipsum} + + )} + + ) +} + +function SxHeader({title, subtitle, dialogLabelId}: React.PropsWithChildren) { + if (typeof title === 'string' && typeof subtitle === 'string') { + return ( + + {title.toUpperCase()} + + ) + } + return null +} +function SxBody({children}: React.PropsWithChildren) { + return {children} +} +function SxFooter({footerButtons}: React.PropsWithChildren) { + return ( + + {footerButtons ? : null} + + ) +} +export const WithSx = ({width, height, subtitle}: DialogStoryProps) => { + const [isOpen, setIsOpen] = useState(true) + const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( + + setIsOpen(!isOpen)}>Show dialog + {isOpen && ( + + {lipsum} + + )} + + ) +} + +function SxAndCssHeader({ + title, + subtitle, + dialogLabelId, +}: React.PropsWithChildren) { + if (typeof title === 'string' && typeof subtitle === 'string') { + return ( + + {title.toUpperCase()} + + ) + } + return null +} +function SxAndCssBody({children}: React.PropsWithChildren) { + return ( + + {children} + + ) +} +function SxAndCssFooter({footerButtons}: React.PropsWithChildren) { + return ( + + {footerButtons ? : null} + + ) +} +export const WithSxAndCss = ({width, height, subtitle}: DialogStoryProps) => { + const [isOpen, setIsOpen] = useState(true) + const onDialogClose = useCallback(() => setIsOpen(false), []) + return ( + + setIsOpen(!isOpen)}>Show dialog + {isOpen && ( + + {lipsum} + + )} + + ) +} diff --git a/packages/react/src/Dialog/Dialog.docs.json b/packages/react/src/Dialog/Dialog.docs.json index 3a04fe82721..fe93cc281b1 100644 --- a/packages/react/src/Dialog/Dialog.docs.json +++ b/packages/react/src/Dialog/Dialog.docs.json @@ -4,7 +4,38 @@ "name": "Dialog", "status": "draft", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-dialog--default" + }, + { + "id": "components-dialog-features--with-custom-renderers" + }, + { + "id": "components-dialog-features--stress-test" + }, + { + "id": "components-dialog-features--repro-multistep-dialog-with-conditional-footer" + }, + { + "id": "components-dialog-features--bottom-sheet-narrow" + }, + { + "id": "components-dialog-features--full-screen-narrow" + }, + { + "id": "components-dialog-features--side-sheet" + }, + { + "id": "components-dialog-features--return-focus-ref" + }, + { + "id": "components-dialog-features--new-issues" + }, + { + "id": "components-dialog-features--retains-focus-trap-with-dynamic-content" + } + ], "importPath": "@primer/react/experimental", "props": [ { @@ -45,15 +76,17 @@ { "name": "role", "type": "'dialog' | 'alertdialog'", - "description": "The ARIA role to assign to this dialog." + "description": "The ARIA role to assign to this dialog. @see https://www.w3.org/TR/wai-aria-practices-1.1/#dialog_modal\n@see https://www.w3.org/TR/wai-aria-practices-1.1/#alertdialog" }, { "name": "width", - "type": "'small' | 'medium' | 'large' | 'xlarge'" + "type": "'small' | 'medium' | 'large' | 'xlarge'", + "description": "The width of the dialog.\nsmall: 296px\nmedium: 320px\nlarge: 480px\nxlarge: 640px" }, { "name": "height", - "type": "'small' | 'large' | 'auto'" + "type": "'small' | 'large' | 'auto'", + "description": "The height of the dialog.\nsmall: 296x480\nlarge: 480x640\nauto: variable based on contents" }, { "name": "returnFocusRef", @@ -65,6 +98,13 @@ "type": "React.RefObject", "description": "Focus this element when the Dialog opens" }, + { + "name": "position", + "type": "'center' | 'left' | 'right' | { narrow: 'center' | 'left' | 'right' | 'bottom' | 'fullscreen', regular: 'center' | 'left' | 'right' | 'bottom' | 'fullscreen', wide: 'center' | 'left' | 'right' | 'bottom' | 'fullscreen' }", + "required": false, + "description": "The position of the dialog", + "defaultValue": "" + }, { "name": "className", "type": "string | undefined", @@ -72,5 +112,70 @@ "description": "CSS string" } ], - "subcomponents": [] + "subcomponents": [ + { + "name": "Dialog.Body", + "props": [] + }, + { + "name": "Dialog.Buttons", + "props": [ + { + "name": "buttons", + "type": "DialogButtonProps[] (see table below)", + "required": true + } + ] + }, + { + "name": "Dialog.CloseButton", + "props": [ + { + "name": "onClose", + "type": "() => void", + "required": true, + "description": "Callback for closing the Dialog", + "defaultValue": "" + } + ] + }, + { + "name": "Dialog.Footer", + "props": [] + }, + { + "name": "Dialog.Header", + "props": [] + }, + { + "name": "Dialog.Title", + "props": [] + }, + { + "name": "DialogButtonProps", + "props": [ + { + "name": "buttonType", + "type": "'default' | 'danger' | 'primary' | 'normal'", + "description": "The variant of Button to use" + }, + { + "name": "content", + "type": "React.ReactNode", + "required": true, + "description": "The Button's inner text" + }, + { + "name": "autoFocus", + "type": "boolean", + "description": "If true, and if this is the only button with autoFocus set to true, focus this button automatically when the dialog appears." + }, + { + "name": "ref", + "type": "React.RefObject", + "description": " A reference to the rendered Button’s DOM node, used together with `autoFocus` for `focusTrap`’s `initialFocus`." + } + ] + } + ] } diff --git a/packages/react/src/Dialog/Dialog.module.css b/packages/react/src/Dialog/Dialog.module.css new file mode 100644 index 00000000000..444df0b3510 --- /dev/null +++ b/packages/react/src/Dialog/Dialog.module.css @@ -0,0 +1,253 @@ +@keyframes dialog-backdrop-appear { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes Overlay--motion-scaleFade { + 0% { + opacity: 0; + transform: scale(0.5); + } + + 100% { + opacity: 1; + transform: scale(1); + } +} + +@keyframes Overlay--motion-slideUp { + from { + transform: translateY(100%); + } +} + +@keyframes Overlay--motion-slideInRight { + from { + transform: translateX(-100%); + } +} + +@keyframes Overlay--motion-slideInLeft { + from { + transform: translateX(100%); + } +} + +.Backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + background-color: var(--overlay-backdrop-bgColor); + animation: dialog-backdrop-appear 200ms cubic-bezier(0.33, 1, 0.68, 1); + align-items: center; + justify-content: center; + + &[data-position-regular='center'] { + align-items: center; + justify-content: center; + } + + &[data-position-regular='left'] { + align-items: center; + justify-content: flex-start; + } + + &[data-position-regular='right'] { + align-items: center; + justify-content: flex-end; + } + + .DialogOverflowWrapper { + flex-grow: 1; + } + + @media (max-width: 767px) { + &[data-position-narrow='center'] { + align-items: center; + justify-content: center; + } + + &[data-position-narrow='bottom'] { + align-items: end; + justify-content: center; + } + } +} + +.Dialog { + display: flex; + /* stylelint-disable-next-line primer/responsive-widths */ + width: 640px; + min-width: 296px; + max-width: calc(100dvw - 64px); + height: auto; + max-height: calc(100dvh - 64px); + flex-direction: column; + background-color: var(--overlay-bgColor); + border-radius: var(--borderRadius-large); + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + box-shadow: var(--shadow-floating-small); + opacity: 1; + + &:where([data-width='small']) { + width: 296px; + } + + &:where([data-width='medium']) { + width: 320px; + } + + &:where([data-width='large']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 480px; + } + + &:where([data-height='small']) { + height: 480px; + } + + &:where([data-height='large']) { + height: 640px; + } + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + + &[data-position-regular='center'] { + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + &[data-position-regular='left'] { + height: 100dvh; + max-height: unset; + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideInRight 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + &[data-position-regular='right'] { + height: 100dvh; + max-height: unset; + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + border-top-right-radius: 0; + border-bottom-right-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideInLeft 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + @media (max-width: 767px) { + &[data-position-narrow='center'] { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 640px; + height: auto; + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + + &:where([data-width='small']) { + width: 296px; + } + + &:where([data-width='medium']) { + width: 320px; + } + + &:where([data-width='large']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 480px; + } + + &:where([data-height='small']) { + height: 480px; + } + + &:where([data-height='large']) { + height: 640px; + } + } + + &[data-position-narrow='bottom'] { + width: 100dvw; + max-width: 100dvw; + height: auto; + max-height: calc(100dvh - 64px); + border-radius: var(--borderRadius-large, var(--borderRadius-large)); + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideUp 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + + &[data-position-narrow='fullscreen'] { + width: 100%; + max-width: 100dvw; + height: 100%; + max-height: 100dvh; + border-radius: unset !important; + flex-grow: 1; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } + } +} + +.Header { + z-index: 1; + padding: var(--base-size-8); + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 1px 0 var(--borderColor-default); + flex-shrink: 0; +} + +.Title { + margin: 0; /* override default margin */ + font-size: var(--text-body-size-medium); + font-weight: var(--text-title-weight-large); +} + +.Subtitle { + margin: 0; /* override default margin */ + margin-top: var(--base-size-4); + font-size: var(--text-body-size-small); + font-weight: var(--base-text-weight-normal); + color: var(--fgColor-muted); +} + +.Body { + padding: var(--base-size-16); + overflow: auto; + flex-grow: 1; +} + +.Footer { + z-index: 1; + display: flex; + padding: var(--base-size-16); + /* stylelint-disable-next-line primer/box-shadow */ + box-shadow: 0 -1px 0 var(--borderColor-default); + flex-flow: wrap; + justify-content: flex-end; + gap: var(--base-size-8); + flex-shrink: 0; +} diff --git a/packages/react/src/Dialog/Dialog.test.tsx b/packages/react/src/Dialog/Dialog.test.tsx index 85095fa0b20..1d707fd321f 100644 --- a/packages/react/src/Dialog/Dialog.test.tsx +++ b/packages/react/src/Dialog/Dialog.test.tsx @@ -6,6 +6,7 @@ import MatchMediaMock from 'jest-matchmedia-mock' import {behavesAsComponent, checkExports} from '../utils/testing' import axe from 'axe-core' import {Button} from '../Button' +import {FeatureFlags} from '../FeatureFlags' let matchMedia: MatchMediaMock @@ -226,6 +227,53 @@ describe('Dialog', () => { expect(getByRole('button', {name: 'return focus to (button 2)'})).toHaveFocus() }) + + it('should support `className` on the Dialog element', async () => { + const Fixture = () => { + const [isOpen, setIsOpen] = React.useState(true) + const triggerRef = React.useRef(null) + + return ( + <> + setIsOpen(true)}> + Show dialog + + {isOpen && ( + setIsOpen(false)} returnFocusRef={triggerRef} className="custom-class"> + body + + )} + > + ) + } + + const FeatureFlagElement = () => { + return ( + + + + ) + } + + const user = userEvent.setup() + + let component = render() + let triggerButton = component.getByRole('button', {name: 'Show dialog'}) + await user.click(triggerButton) + expect(component.getByRole('dialog')).toHaveClass('custom-class') + component.unmount() + + component = render() + triggerButton = component.getByRole('button', {name: 'Show dialog'}) + await user.click(triggerButton) + expect(component.getByRole('dialog')).toHaveClass('custom-class') + }) }) it('automatically focuses the element that is specified as initialFocusRef', () => { diff --git a/packages/react/src/Dialog/Dialog.tsx b/packages/react/src/Dialog/Dialog.tsx index 13d1b4fd752..0152906ada3 100644 --- a/packages/react/src/Dialog/Dialog.tsx +++ b/packages/react/src/Dialog/Dialog.tsx @@ -16,6 +16,12 @@ import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef' import {useId} from '../hooks/useId' import {ScrollableRegion} from '../ScrollableRegion' import type {ResponsiveValue} from '../hooks/useResponsiveValue' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' + +import classes from './Dialog.module.css' +import {useFeatureFlag} from '../FeatureFlags' +import {clsx} from 'clsx' /* Dialog Version 2 */ @@ -25,7 +31,7 @@ import type {ResponsiveValue} from '../hooks/useResponsiveValue' */ export type DialogButtonProps = Omit & { /** - * The type of Button element to use + * The variant of Button to use */ buttonType?: 'default' | 'primary' | 'danger' | 'normal' @@ -166,58 +172,65 @@ export interface DialogHeaderProps extends DialogProps { dialogDescriptionId: string } -const Backdrop = styled('div')` - position: fixed; - top: 0; - left: 0; - bottom: 0; - right: 0; - display: flex; - align-items: center; - justify-content: center; - background-color: ${get('colors.primer.canvas.backdrop')}; - animation: dialog-backdrop-appear 200ms ${get('animation.easeOutCubic')}; - - &[data-position-regular='center'] { +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' + +const Backdrop = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + display: flex; align-items: center; justify-content: center; - } - - &[data-position-regular='left'] { - align-items: center; - justify-content: flex-start; - } + background-color: ${get('colors.primer.canvas.backdrop')}; + animation: dialog-backdrop-appear 200ms ${get('animation.easeOutCubic')}; - &[data-position-regular='right'] { - align-items: center; - justify-content: flex-end; - } + &[data-position-regular='center'] { + align-items: center; + justify-content: center; + } - .DialogOverflowWrapper { - flex-grow: 1; - } + &[data-position-regular='left'] { + align-items: center; + justify-content: flex-start; + } - @media (max-width: 767px) { - &[data-position-narrow='center'] { + &[data-position-regular='right'] { align-items: center; - justify-content: center; + justify-content: flex-end; } - &[data-position-narrow='bottom'] { - align-items: end; - justify-content: center; + .DialogOverflowWrapper { + flex-grow: 1; } - } - @keyframes dialog-backdrop-appear { - 0% { - opacity: 0; + @media (max-width: 767px) { + &[data-position-narrow='center'] { + align-items: center; + justify-content: center; + } + + &[data-position-narrow='bottom'] { + align-items: end; + justify-content: center; + } } - 100% { - opacity: 1; + + @keyframes dialog-backdrop-appear { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } } - } -` + `, +) +Backdrop.displayName = 'Backdrop' const heightMap = { small: '480px', @@ -238,123 +251,128 @@ export type DialogHeight = keyof typeof heightMap type StyledDialogProps = { width?: DialogWidth height?: DialogHeight -} & SxProp - -const StyledDialog = styled.div` - display: flex; - flex-direction: column; - background-color: ${get('colors.canvas.overlay')}; - box-shadow: ${get('shadows.overlay.shadow')}; - width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; - height: ${props => heightMap[props.height ?? ('auto' as const)]}; - min-width: 296px; - max-width: calc(100dvw - 64px); - max-height: calc(100dvh - 64px); - border-radius: 12px; - opacity: 1; - - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; - } - - &[data-position-regular='center'] { - border-radius: var(--borderRadius-large, 0.75rem); +} & SxProp & + React.ComponentPropsWithRef<'div'> + +const StyledDialog = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + display: flex; + flex-direction: column; + background-color: ${get('colors.canvas.overlay')}; + box-shadow: ${get('shadows.overlay.shadow')}; + width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; + height: ${props => heightMap[props.height ?? ('auto' as const)]}; + min-width: 296px; + max-width: calc(100dvw - 64px); + max-height: calc(100dvh - 64px); + border-radius: 12px; + opacity: 1; @media screen and (prefers-reduced-motion: no-preference) { animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; } - } - - &[data-position-regular='left'] { - height: 100dvh; - max-height: unset; - border-radius: var(--borderRadius-large, 0.75rem); - border-top-left-radius: 0; - border-bottom-left-radius: 0; - - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-slideInRight 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; - } - } - &[data-position-regular='right'] { - height: 100dvh; - max-height: unset; - border-radius: var(--borderRadius-large, 0.75rem); - border-top-right-radius: 0; - border-bottom-right-radius: 0; + &[data-position-regular='center'] { + border-radius: var(--borderRadius-large, 0.75rem); - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-slideInLeft 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } } - } - @media (max-width: 767px) { - &[data-position-narrow='center'] { + &[data-position-regular='left'] { + height: 100dvh; + max-height: unset; border-radius: var(--borderRadius-large, 0.75rem); - width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; - height: ${props => heightMap[props.height ?? ('auto' as const)]}; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideInRight 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } } - &[data-position-narrow='bottom'] { - width: 100dvw; - height: auto; - max-width: 100dvw; - max-height: calc(100dvh - 64px); + &[data-position-regular='right'] { + height: 100dvh; + max-height: unset; border-radius: var(--borderRadius-large, 0.75rem); + border-top-right-radius: 0; border-bottom-right-radius: 0; - border-bottom-left-radius: 0; @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-slideUp 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + animation: Overlay--motion-slideInLeft 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; } } - &[data-position-narrow='fullscreen'] { - width: 100%; - max-width: 100dvw; - height: 100%; - max-height: 100dvh; - border-radius: unset !important; - flex-grow: 1; + @media (max-width: 767px) { + &[data-position-narrow='center'] { + border-radius: var(--borderRadius-large, 0.75rem); + width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; + height: ${props => heightMap[props.height ?? ('auto' as const)]}; + } - @media screen and (prefers-reduced-motion: no-preference) { - animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + &[data-position-narrow='bottom'] { + width: 100dvw; + height: auto; + max-width: 100dvw; + max-height: calc(100dvh - 64px); + border-radius: var(--borderRadius-large, 0.75rem); + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-slideUp 0.25s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } } - } - } - @keyframes Overlay--motion-scaleFade { - 0% { - opacity: 0; - transform: scale(0.5); + &[data-position-narrow='fullscreen'] { + width: 100%; + max-width: 100dvw; + height: 100%; + max-height: 100dvh; + border-radius: unset !important; + flex-grow: 1; + + @media screen and (prefers-reduced-motion: no-preference) { + animation: Overlay--motion-scaleFade 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running; + } + } } - 100% { - opacity: 1; - transform: scale(1); + + @keyframes Overlay--motion-scaleFade { + 0% { + opacity: 0; + transform: scale(0.5); + } + 100% { + opacity: 1; + transform: scale(1); + } } - } - @keyframes Overlay--motion-slideUp { - from { - transform: translateY(100%); + @keyframes Overlay--motion-slideUp { + from { + transform: translateY(100%); + } } - } - @keyframes Overlay--motion-slideInRight { - from { - transform: translateX(-100%); + @keyframes Overlay--motion-slideInRight { + from { + transform: translateX(-100%); + } } - } - @keyframes Overlay--motion-slideInLeft { - from { - transform: translateX(100%); + @keyframes Overlay--motion-slideInLeft { + from { + transform: translateX(100%); + } } - } - ${sx}; -` + ${sx}; + `, +) const DefaultHeader: React.FC> = ({ dialogLabelId, @@ -416,6 +434,8 @@ const _Dialog = React.forwardRef(null) @@ -481,29 +501,30 @@ const _Dialog = React.forwardRef { + onMouseDown={(e: React.MouseEvent) => { setLastMouseDownIsBackdrop(e.target === e.currentTarget) }} > {header} @@ -518,51 +539,109 @@ const _Dialog = React.forwardRef` - box-shadow: 0 1px 0 ${get('colors.border.default')}; - padding: ${get('space.2')}; - z-index: 1; - flex-shrink: 0; - ${sx}; -` - -const Title = styled.h1` - font-size: ${get('fontSizes.1')}; - font-weight: ${get('fontWeights.bold')}; - margin: 0; /* override default margin */ - ${sx}; -` - -const Subtitle = styled.h2` - font-size: ${get('fontSizes.0')}; - color: ${get('colors.fg.muted')}; - margin: 0; /* override default margin */ - margin-top: ${get('space.1')}; - font-weight: normal; - - ${sx}; -` - -const Body = styled.div` - flex-grow: 1; - overflow: auto; - padding: ${get('space.3')}; - - ${sx}; -` - -const Footer = styled.div` - box-shadow: 0 -1px 0 ${get('colors.border.default')}; - padding: ${get('space.3')}; - display: flex; - flex-flow: wrap; - justify-content: flex-end; - gap: ${get('space.2')}; - z-index: 1; - flex-shrink: 0; - - ${sx}; -` +const StyledHeader = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + box-shadow: 0 1px 0 ${get('colors.border.default')}; + padding: ${get('space.2')}; + z-index: 1; + flex-shrink: 0; + ${sx}; + `, +) +type StyledHeaderProps = React.ComponentProps<'div'> & SxProp + +const Header = React.forwardRef(function Header({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Header.displayName = 'Dialog.Header' + +const StyledTitle = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'h1', + styled.h1` + font-size: ${get('fontSizes.1')}; + font-weight: ${get('fontWeights.bold')}; + margin: 0; /* override default margin */ + ${sx}; + `, +) +type StyledTitleProps = React.ComponentProps<'h1'> & SxProp + +const Title = React.forwardRef(function Title({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Title.displayName = 'Dialog.Title' + +const StyledSubtitle = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'h2', + styled.h2` + font-size: ${get('fontSizes.0')}; + color: ${get('colors.fg.muted')}; + margin: 0; /* override default margin */ + margin-top: ${get('space.1')}; + font-weight: normal; + ${sx}; + `, +) +type StyledSubtitleProps = React.ComponentProps<'h2'> & SxProp + +const Subtitle = React.forwardRef(function Subtitle( + {className, ...rest}, + forwardRef, +) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Subtitle.displayName = 'Dialog.Subtitle' + +const StyledBody = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + flex-grow: 1; + overflow: auto; + padding: ${get('space.3')}; + + ${sx}; + `, +) +type StyledBodyProps = React.ComponentProps<'div'> & SxProp + +const Body = React.forwardRef(function Body({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) as PolymorphicForwardRefComponent<'div', StyledBodyProps> + +Body.displayName = 'Dialog.Body' + +const StyledFooter = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + box-shadow: 0 -1px 0 ${get('colors.border.default')}; + padding: ${get('space.3')}; + display: flex; + flex-flow: wrap; + justify-content: flex-end; + gap: ${get('space.2')}; + z-index: 1; + flex-shrink: 0; + + ${sx}; + `, +) +type StyledFooterProps = React.ComponentProps<'div'> & SxProp + +const Footer = React.forwardRef(function Footer({className, ...rest}, forwardRef) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return +}) +Footer.displayName = 'Dialog.Footer' const Buttons: React.FC> = ({buttons}) => { const autoFocusRef = useProvidedRefOrCreate(buttons.find(button => button.autoFocus)?.ref) diff --git a/packages/react/src/DialogV1/Dialog.docs.json b/packages/react/src/DialogV1/Dialog.docs.json index 254859970d8..77b44d8279a 100644 --- a/packages/react/src/DialogV1/Dialog.docs.json +++ b/packages/react/src/DialogV1/Dialog.docs.json @@ -4,7 +4,11 @@ "name": "Dialog", "status": "deprecated", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-dialog--default" + } + ], "importPath": "@primer/react/deprecated", "props": [ { @@ -37,6 +41,14 @@ "type": "string", "description": "Pass a label to be used to describe the Dialog. Use either a `aria-label` or an `aria-labelledby` but not both." }, + { + "name": "narrow", + "type": "boolean" + }, + { + "name": "wide", + "type": "boolean" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/DialogV1/Dialog.module.css b/packages/react/src/DialogV1/Dialog.module.css new file mode 100644 index 00000000000..dba07129c37 --- /dev/null +++ b/packages/react/src/DialogV1/Dialog.module.css @@ -0,0 +1,67 @@ +.Overlay { + &::before { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 99; + display: block; + cursor: default; + content: ' '; + background: var(--overlay-backdrop-bgColor); + } +} + +.CloseIcon { + position: absolute; + top: var(--base-size-8); + right: var(--base-size-16); +} + +.Dialog { + position: fixed; + top: 0; + left: 50%; + z-index: 999; + max-height: 80vh; + margin: 10vh auto; + background-color: var(--bgColor-default); + border-radius: var(--borderRadius-medium); + outline: none; + box-shadow: var(--shadow-floating-large); + transform: translateX(-50%); + + &:where([data-width='default']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 440px; + } + + &:where([data-width='narrow']) { + width: 320px; + } + + &:where([data-width='wide']) { + /* stylelint-disable-next-line primer/responsive-widths */ + width: 640px; + } + + @media screen and (max-width: 750px) { + width: 100dvw; + height: 100dvh; + margin: 0; + border-radius: 0; + } +} + +.Header { + display: flex; + padding: var(--base-size-16); + background: var(--bgColor-muted); + border-bottom: var(--borderWidth-thin) solid var(--borderColor-default); + border-radius: var(--borderRadius-medium) var(--borderRadius-medium) 0 0; + + @media screen and (max-width: 750px) { + border-radius: 0; + } +} diff --git a/packages/react/src/DialogV1/Dialog.test.tsx b/packages/react/src/DialogV1/Dialog.test.tsx index 7df87bd2c75..d4023e6365c 100644 --- a/packages/react/src/DialogV1/Dialog.test.tsx +++ b/packages/react/src/DialogV1/Dialog.test.tsx @@ -4,6 +4,7 @@ import {Dialog} from '../DialogV1' import {render as HTMLRender, fireEvent} from '@testing-library/react' import axe from 'axe-core' import {behavesAsComponent} from '../utils/testing' +import {FeatureFlags} from '../FeatureFlags' /* Dialog Version 1*/ @@ -113,6 +114,25 @@ describe('Dialog', () => { behavesAsComponent({Component: Dialog.Header}) }) + it('should support `className` on the Dialog element', () => { + const Element = () => + const FeatureFlagElement = () => { + return ( + + + + ) + } + expect(HTMLRender().container.children[1]).toHaveClass('test-class-name') + expect(HTMLRender().container.children[1]).toHaveClass('test-class-name') + }) + it('should have no axe violations', async () => { const spy = jest.spyOn(console, 'warn').mockImplementation() const {container} = HTMLRender(comp) diff --git a/packages/react/src/DialogV1/Dialog.tsx b/packages/react/src/DialogV1/Dialog.tsx index 3e565ba8d3d..7361b223251 100644 --- a/packages/react/src/DialogV1/Dialog.tsx +++ b/packages/react/src/DialogV1/Dialog.tsx @@ -10,6 +10,12 @@ import Text from '../Text' import type {ComponentProps} from '../utils/types' import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef' import {XIcon} from '@primer/octicons-react' +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import {clsx} from 'clsx' +import classes from './Dialog.module.css' + +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' // Dialog v1 const noop = () => null @@ -19,41 +25,50 @@ type StyledDialogBaseProps = { wide?: boolean } & SxProp -const DialogBase = styled.div` - box-shadow: ${get('shadows.shadow.large')}; - border-radius: ${get('radii.2')}; - position: fixed; - top: 0; - left: 50%; - transform: translateX(-50%); - max-height: 80vh; - z-index: 999; - margin: 10vh auto; - background-color: ${get('colors.canvas.default')}; - width: ${props => (props.narrow ? '320px' : props.wide ? '640px' : '440px')}; - outline: none; - - @media screen and (max-width: 750px) { - width: 100dvw; - margin: 0; - border-radius: 0; - height: 100dvh; - } +const DialogBase = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + box-shadow: ${get('shadows.shadow.large')}; + border-radius: ${get('radii.2')}; + position: fixed; + top: 0; + left: 50%; + transform: translateX(-50%); + max-height: 80vh; + z-index: 999; + margin: 10vh auto; + background-color: ${get('colors.canvas.default')}; + width: ${props => (props.narrow ? '320px' : props.wide ? '640px' : '440px')}; + outline: none; + + @media screen and (max-width: 750px) { + width: 100dvw; + margin: 0; + border-radius: 0; + height: 100dvh; + } - ${sx}; -` + ${sx}; + `, +) -const DialogHeaderBase = styled(Box)` - border-radius: ${get('radii.2')} ${get('radii.2')} 0px 0px; - border-bottom: 1px solid ${get('colors.border.default')}; - display: flex; +const DialogHeaderBase = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled(Box)` + border-radius: ${get('radii.2')} ${get('radii.2')} 0px 0px; + border-bottom: 1px solid ${get('colors.border.default')}; + display: flex; - @media screen and (max-width: 750px) { - border-radius: 0px; - } + @media screen and (max-width: 750px) { + border-radius: 0px; + } + + ${sx}; + `, +) - ${sx}; -` export type DialogHeaderProps = ComponentProps function DialogHeader({theme, children, backgroundColor = 'canvas.subtle', ...rest}: DialogHeaderProps) { @@ -65,28 +80,40 @@ function DialogHeader({theme, children, backgroundColor = 'canvas.subtle', ...re ) } + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + return ( - + {children} ) } -const Overlay = styled.span` - &:before { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: block; - cursor: default; - content: ' '; - background: transparent; - z-index: 99; - background: ${get('colors.primer.canvas.backdrop')}; - } -` +const Overlay = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'span', + styled.span` + &:before { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; + cursor: default; + content: ' '; + background: transparent; + z-index: 99; + background: ${get('colors.primer.canvas.backdrop')}; + } + `, +) type InternalDialogProps = { isOpen?: boolean @@ -96,7 +123,7 @@ type InternalDialogProps = { } & ComponentProps const Dialog = forwardRef( - ({children, onDismiss = noop, isOpen, initialFocusRef, returnFocusRef, ...props}, forwardedRef) => { + ({children, onDismiss = noop, isOpen, initialFocusRef, returnFocusRef, className, ...props}, forwardedRef) => { const overlayRef = useRef(null) const modalRef = useRef(null) useRefObjectAsForwardedRef(forwardedRef, modalRef) @@ -118,17 +145,33 @@ const Dialog = forwardRef( returnFocusRef, overlayRef, }) + + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + const iconStyles = enabled + ? {className: classes.CloseIcon} + : {sx: {position: 'absolute', top: '8px', right: '16px'}} + return isOpen ? ( <> - - + + {children} diff --git a/packages/react/src/DialogV1/Dialog.types.test.tsx b/packages/react/src/DialogV1/Dialog.types.test.tsx index 010f84f6fed..8c31a1a8768 100644 --- a/packages/react/src/DialogV1/Dialog.types.test.tsx +++ b/packages/react/src/DialogV1/Dialog.types.test.tsx @@ -4,8 +4,3 @@ import {Dialog} from '../DialogV1' export function shouldAcceptCallWithNoProps() { return } - -export function shouldNotAcceptSystemProps() { - // @ts-expect-error system props should not be accepted - return -} diff --git a/packages/react/src/FeatureFlags/FeatureFlags.docs.json b/packages/react/src/FeatureFlags/FeatureFlags.docs.json new file mode 100644 index 00000000000..a39f86ceea8 --- /dev/null +++ b/packages/react/src/FeatureFlags/FeatureFlags.docs.json @@ -0,0 +1,17 @@ +{ + "id": "feature_flags", + "name": "FeatureFlags", + "status": "draft", + "a11yReviewed": false, + "stories": [], + "importPath": "@primer/react/experimental", + "props": [ + { + "name": "flags", + "type": "FeatureFlags", + "required": true, + "description": "Object where keys are feature flag names and values are boolean" + } + ], + "subcomponents": [] +} diff --git a/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx b/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx index 0152247f387..ef75656cabc 100644 --- a/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx +++ b/packages/react/src/FilteredActionList/FilteredActionListWithDeprecatedActionList.tsx @@ -30,6 +30,7 @@ export interface FilteredActionListProps onFilterChange: (value: string, e: React.ChangeEvent) => void textInputProps?: Partial> inputRef?: React.RefObject + className?: string } const StyledHeader = styled.div` @@ -46,6 +47,7 @@ export function FilteredActionList({ textInputProps, inputRef: providedInputRef, sx, + className, ...listProps }: FilteredActionListProps): JSX.Element { const [filterValue, setInternalFilterValue] = useProvidedStateOrCreate(externalFilterValue, undefined, '') @@ -110,7 +112,14 @@ export function FilteredActionList({ useScrollFlash(scrollContainerRef) return ( - + ) => void textInputProps?: Partial> inputRef?: React.RefObject + className?: string } const StyledHeader = styled.div` @@ -52,6 +53,7 @@ export function FilteredActionList({ sx, groupMetadata, showItemDividers, + className, ...listProps }: FilteredActionListProps): JSX.Element { const [filterValue, setInternalFilterValue] = useProvidedStateOrCreate(externalFilterValue, undefined, '') @@ -129,7 +131,14 @@ export function FilteredActionList({ } return ( - + element by FormControl's React Context. \n When 'as' prop is 'legend' or 'span', it is used as the `id` for the element." + }, + { + "name": "className", + "type": "string", + "description": "Class name(s) for custom styling.", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" @@ -77,6 +161,12 @@ { "name": "FormControl.Caption", "props": [ + { + "name": "id", + "type": "string", + "description": "Custom ID to override the ID set by FormControl's React Context", + "defaultValue": "" + }, { "name": "children", "type": "React.ReactNode", @@ -105,6 +195,12 @@ "required": true, "description": "Changes the visual style to match the validation status" }, + { + "name": "id", + "type": "string", + "description": "May be used to override the ID assigned by FormControl's React Context", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" @@ -127,4 +223,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/react/src/FormControl/FormControl.features.stories.tsx b/packages/react/src/FormControl/FormControl.features.stories.tsx index d1e7a284ef4..cdf06c1a6f7 100644 --- a/packages/react/src/FormControl/FormControl.features.stories.tsx +++ b/packages/react/src/FormControl/FormControl.features.stories.tsx @@ -21,6 +21,7 @@ import { } from '..' import {MarkGithubIcon, TriangleDownIcon} from '@primer/octicons-react' import type {ItemInput} from '../deprecated/ActionList/List' +import {Stack} from '../Stack' export default { title: 'Components/FormControl/Features', @@ -339,7 +340,7 @@ export const WithSelectPanel = () => { } export const WithLeadingVisual = () => ( - + Option one @@ -356,7 +357,24 @@ export const WithLeadingVisual = () => ( This one has a caption - + + + Option three + + + + + + + + Option four + + + + + This one has a caption + + ) export const DisabledInputs = () => ( diff --git a/packages/react/src/FormControl/FormControl.tsx b/packages/react/src/FormControl/FormControl.tsx index f2eb061b594..69d4b9bf871 100644 --- a/packages/react/src/FormControl/FormControl.tsx +++ b/packages/react/src/FormControl/FormControl.tsx @@ -14,9 +14,9 @@ import {get} from '../constants' import {useSlots} from '../hooks/useSlots' import type {SxProp} from '../sx' import {useId} from '../hooks/useId' -import FormControlCaption from './_FormControlCaption' -import FormControlLabel from './_FormControlLabel' -import FormControlLeadingVisual from './_FormControlLeadingVisual' +import {FormControlCaption} from './FormControlCaption' +import FormControlLabel from './FormControlLabel' +import FormControlLeadingVisual from './FormControlLeadingVisual' import FormControlValidation from './_FormControlValidation' import {FormControlContextProvider} from './_FormControlContext' import {warning} from '../utils/warning' @@ -172,17 +172,15 @@ const FormControl = React.forwardRef( {slots.leadingVisual} )} - {!slots.label?.props.visuallyHidden || slots.caption ? ( - - {slots.label} - {slots.caption} - - ) : ( - <> - {slots.label} - {slots.caption} - > - )} + *': {paddingLeft: 'var(--stack-gap-condensed)'}, + '> label': {fontWeight: 'var(--base-text-weight-normal)'}, + }} + > + {slots.label} + {slots.caption} + ) : ( + +function FormControlCaption({id, children, sx}: FormControlCaptionProps) { + const {captionId, disabled} = useFormControlContext() + return ( + + {children} + + ) +} + +export {FormControlCaption} diff --git a/packages/react/src/FormControl/_FormControlLabel.tsx b/packages/react/src/FormControl/FormControlLabel.tsx similarity index 95% rename from packages/react/src/FormControl/_FormControlLabel.tsx rename to packages/react/src/FormControl/FormControlLabel.tsx index 4d62b19e114..485894c18d4 100644 --- a/packages/react/src/FormControl/_FormControlLabel.tsx +++ b/packages/react/src/FormControl/FormControlLabel.tsx @@ -1,7 +1,7 @@ import React from 'react' -import InputLabel from '../internal/components/InputLabel' import type {SxProp} from '../sx' import {useFormControlContext} from './_FormControlContext' +import {InputLabel} from '../internal/components/InputLabel' export type Props = { /** @@ -49,6 +49,7 @@ const FormControlLabel: React.FC< sx, ...props, } + return {children} } diff --git a/packages/react/src/FormControl/FormControlLeadingVisual.tsx b/packages/react/src/FormControl/FormControlLeadingVisual.tsx new file mode 100644 index 00000000000..27c18d69aca --- /dev/null +++ b/packages/react/src/FormControl/FormControlLeadingVisual.tsx @@ -0,0 +1,44 @@ +import React from 'react' +import {get} from '../constants' +import type {SxProp} from '../sx' +import {useFormControlContext} from './_FormControlContext' +import styled from 'styled-components' +import sx from '../sx' + +const FormControlLeadingVisual: React.FC> = ({children, sx}) => { + const {disabled, captionId} = useFormControlContext() + return ( + + {children} + + ) +} + +const StyledLeadingVisual = styled.div` + --leadingVisual-size: ${get('fontSizes.2')}; + + color: var(--fgColor-default); + margin-inline-start: ${get('space.2')}; + + &:where([data-control-disabled]) { + color: var(--fgColor-muted); + } + + & > * { + min-width: var(--leadingVisual-size); + min-height: var(--leadingVisual-size); + fill: currentColor; + } + + &:where([data-has-caption]) { + --leadingVisual-size: ${get('fontSizes.4')}; + } + + ${sx} +` + +export default FormControlLeadingVisual diff --git a/packages/react/src/FormControl/_FormControlCaption.tsx b/packages/react/src/FormControl/_FormControlCaption.tsx deleted file mode 100644 index 4a3be2bdedb..00000000000 --- a/packages/react/src/FormControl/_FormControlCaption.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import InputCaption from '../internal/components/InputCaption' -import type {SxProp} from '../sx' -import {useFormControlContext} from './_FormControlContext' - -const FormControlCaption: React.FC> = ({children, sx, id}) => { - const {captionId, disabled} = useFormControlContext() - return ( - - {children} - - ) -} - -export default FormControlCaption diff --git a/packages/react/src/FormControl/_FormControlContext.tsx b/packages/react/src/FormControl/_FormControlContext.tsx index f27b321ec84..e7a4cb550e3 100644 --- a/packages/react/src/FormControl/_FormControlContext.tsx +++ b/packages/react/src/FormControl/_FormControlContext.tsx @@ -17,7 +17,7 @@ export function useFormControlContext(): FormControlContext { return useContext(FormControlContext) ?? {} } -interface FormControlForwardedProps extends Omit { +interface FormControlForwardedProps extends Pick { ['aria-describedby']?: string } @@ -29,22 +29,14 @@ interface FormControlForwardedProps extends Omit(externalProps: P): P & FormControlForwardedProps -/** - * Make any component compatible with `FormControl`'s automatic wiring up of accessibility attributes & validation by - * reading the props from this hook and handling them / assigning them to the underlying form control. If used outside - * of `FormControl`, this hook has no effect. - */ -export function useFormControlForwardedProps(): FormControlForwardedProps -export function useFormControlForwardedProps(externalProps: FormControlForwardedProps = {}) { +export function useFormControlForwardedProps(externalProps: P): P & FormControlForwardedProps { const context = useContext(FormControlContext) - if (!context) return externalProps + if (!context) return externalProps as P & FormControlForwardedProps return { disabled: context.disabled, id: context.id, required: context.required, - validationStatus: context.validationStatus, ['aria-describedby']: [context.validationMessageId, context.captionId].filter(Boolean).join(' ') || undefined, ...externalProps, } diff --git a/packages/react/src/FormControl/_FormControlLeadingVisual.tsx b/packages/react/src/FormControl/_FormControlLeadingVisual.tsx deleted file mode 100644 index 80551681704..00000000000 --- a/packages/react/src/FormControl/_FormControlLeadingVisual.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import Box from '../Box' -import {get} from '../constants' -import type {SxProp} from '../sx' -import {useFormControlContext} from './_FormControlContext' - -const FormControlLeadingVisual: React.FC> = ({children, sx}) => { - const {disabled, captionId} = useFormControlContext() - return ( - *': { - minWidth: captionId ? get('fontSizes.4') : get('fontSizes.2'), - minHeight: captionId ? get('fontSizes.4') : get('fontSizes.2'), - fill: 'currentColor', - }, - ...sx, - }} - ml={2} - > - {children} - - ) -} - -export default FormControlLeadingVisual diff --git a/packages/react/src/Header/Header.tsx b/packages/react/src/Header/Header.tsx index 3c7c194ca43..e36b2d983b1 100644 --- a/packages/react/src/Header/Header.tsx +++ b/packages/react/src/Header/Header.tsx @@ -15,7 +15,7 @@ type StyledHeaderProps = React.ComponentProps<'header'> & SxProp type StyledHeaderItemProps = React.ComponentProps<'div'> & SxProp & {full?: boolean} type StyledHeaderLinkProps = React.ComponentProps<'a'> & SxProp & {to?: Location | Pathname} -const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' const StyledHeader = toggleStyledComponent( CSS_MODULES_FEATURE_FLAG, diff --git a/packages/react/src/Hidden/Hidden.docs.json b/packages/react/src/Hidden/Hidden.docs.json index ab4ecf2edef..2820003d38c 100644 --- a/packages/react/src/Hidden/Hidden.docs.json +++ b/packages/react/src/Hidden/Hidden.docs.json @@ -1,9 +1,19 @@ { - "id": "drafts_hidden", + "id": "hidden", "name": "Hidden", "status": "draft", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "drafts-components-hidden--default" + }, + { + "id": "drafts-components-hidden-features--hide-content" + }, + { + "id": "drafts-components-hidden-features--render-content-responsively" + } + ], "importPath": "@primer/react/experimental", "props": [ { diff --git a/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx b/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx new file mode 100644 index 00000000000..95c6d281cac --- /dev/null +++ b/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx @@ -0,0 +1,15 @@ +import type {Meta} from '@storybook/react' +import React from 'react' +import {InlineMessage} from '.' + +const meta = { + title: 'Experimental/Components/InlineMessage/Dev', + component: InlineMessage, +} satisfies Meta + +export default meta + +// Previous Styled version of the component didn't accept an sx prop so no need to test if that works. +export const DevDefault = () => { + return An example inline message +} diff --git a/packages/react/src/InlineMessage/InlineMessage.docs.json b/packages/react/src/InlineMessage/InlineMessage.docs.json index dbdbb463b70..4547cfe57d5 100644 --- a/packages/react/src/InlineMessage/InlineMessage.docs.json +++ b/packages/react/src/InlineMessage/InlineMessage.docs.json @@ -6,16 +6,22 @@ "importPath": "@primer/react/experimental", "stories": [ { - "id": "experimental-components-inlinemessage-features--critical" + "id": "components-inlinemessage--default" }, { - "id": "experimental-components-inlinemessage-features--success" + "id": "components-inlinemessage-features--critical" }, { - "id": "experimental-components-inlinemessage-features--unavailable" + "id": "components-inlinemessage-features--success" }, { - "id": "experimental-components-inlinemessage-features--warning" + "id": "components-inlinemessage-features--unavailable" + }, + { + "id": "components-inlinemessage-features--warning" + }, + { + "id": "components-inlinemessage-features--multiline" } ], "props": [ diff --git a/packages/react/src/InlineMessage/InlineMessage.module.css b/packages/react/src/InlineMessage/InlineMessage.module.css new file mode 100644 index 00000000000..0ddbea7498b --- /dev/null +++ b/packages/react/src/InlineMessage/InlineMessage.module.css @@ -0,0 +1,42 @@ +.InlineMessage { + display: grid; + /* stylelint-disable-next-line primer/typography */ + font-size: var(--inline-message-fontSize); + /* stylelint-disable-next-line primer/typography */ + line-height: var(--inline-message-lineHeight); + /* stylelint-disable-next-line primer/colors */ + color: var(--inline-message-fgColor); + column-gap: 0.5rem; + grid-template-columns: auto 1fr; + align-items: start; + + &[data-size='small'] { + --inline-message-fontSize: var(--text-body-size-small); + --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + } + + &[data-size='medium'] { + --inline-message-fontSize: var(--text-body-size-medium); + --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); + } + + &[data-variant='warning'] { + --inline-message-fgColor: var(--fgColor-attention); + } + + &[data-variant='critical'] { + --inline-message-fgColor: var(--fgColor-danger); + } + + &[data-variant='success'] { + --inline-message-fgColor: var(--fgColor-success); + } + + &[data-variant='unavailable'] { + --inline-message-fgColor: var(--fgColor-muted); + } +} + +.InlineMessageIcon { + min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); +} diff --git a/packages/react/src/InlineMessage/InlineMessage.tsx b/packages/react/src/InlineMessage/InlineMessage.tsx index 55f2296a6fd..173c9502f1b 100644 --- a/packages/react/src/InlineMessage/InlineMessage.tsx +++ b/packages/react/src/InlineMessage/InlineMessage.tsx @@ -1,80 +1,105 @@ import {AlertFillIcon, AlertIcon, CheckCircleFillIcon, CheckCircleIcon} from '@primer/octicons-react' +import {clsx} from 'clsx' import React from 'react' import styled from 'styled-components' import {get} from '../constants' - +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './InlineMessage.module.css' +import type {SxProp} from '../sx' type MessageVariant = 'critical' | 'success' | 'unavailable' | 'warning' -export type InlineMessageProps = React.ComponentPropsWithoutRef<'div'> & { - /** - * Specify the size of the InlineMessage - */ - size?: 'small' | 'medium' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' - /** - * Specify the type of the InlineMessage - */ - variant: MessageVariant -} +export type InlineMessageProps = React.ComponentPropsWithoutRef<'div'> & + SxProp & { + /** + * Specify the size of the InlineMessage + */ + size?: 'small' | 'medium' -const StyledMessage = styled.div` - display: grid; - column-gap: 0.5rem; - grid-template-columns: auto 1fr; - align-items: start; - color: var(--inline-message-fgColor, ${get('colors.fg.muted')}); - line-height: var(--inline-message-lineHeight); - font-size: var(--inline-message-fontSize, ${get('fontSizes.1')}); - - &[data-size='small'] { - --inline-message-fontSize: var(--text-body-size-small, ${get('fontSizes.0')}); - --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + /** + * Specify the type of the InlineMessage + */ + variant: MessageVariant } - &[data-size='medium'] { - --inline-message-fontSize: var(--text-body-size-medium, ${get('fontSizes.1')}); - --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); - } +const StyledMessage = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + display: grid; + column-gap: 0.5rem; + grid-template-columns: auto 1fr; + align-items: start; + color: var(--inline-message-fgColor, ${get('colors.fg.muted')}); + line-height: var(--inline-message-lineHeight); + font-size: var(--inline-message-fontSize, ${get('fontSizes.1')}); - &[data-variant='warning'] { - --inline-message-fgColor: ${get('colors.attention.fg')}; - } + &[data-size='small'] { + --inline-message-fontSize: var(--text-body-size-small, ${get('fontSizes.0')}); + --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + } - &[data-variant='critical'] { - --inline-message-fgColor: ${get('colors.danger.fg')}; - } + &[data-size='medium'] { + --inline-message-fontSize: var(--text-body-size-medium, ${get('fontSizes.1')}); + --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); + } - &[data-variant='success'] { - --inline-message-fgColor: ${get('colors.success.fg')}; - } + &[data-variant='warning'] { + --inline-message-fgColor: ${get('colors.attention.fg')}; + } - &[data-variant='unavailable'] { - --inline-message-fgColor: ${get('colors.fg.muted')}; - } + &[data-variant='critical'] { + --inline-message-fgColor: ${get('colors.danger.fg')}; + } + + &[data-variant='success'] { + --inline-message-fgColor: ${get('colors.success.fg')}; + } + + &[data-variant='unavailable'] { + --inline-message-fgColor: ${get('colors.fg.muted')}; + } - & .InlineMessageIcon { - min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); + & .InlineMessageIcon { + min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); + } + `, +) + +const variantToIcon = (enabled: boolean, variant: MessageVariant): React.ReactNode => { + const icons = { + warning: , + critical: , + success: , + unavailable: , } -` -const variantToIcon: Record = { - warning: , - critical: , - success: , - unavailable: , + return icons[variant] } -const variantToSmallIcon: Record = { - warning: , - critical: , - success: , - unavailable: , +const variantToSmallIcon = (enabled: boolean, variant: MessageVariant): React.ReactNode => { + const icons = { + warning: , + critical: , + success: , + unavailable: , + } + return icons[variant] } -export function InlineMessage({children, size = 'medium', variant, ...rest}: InlineMessageProps) { - const icon = size === 'small' ? variantToSmallIcon[variant] : variantToIcon[variant] +export function InlineMessage({children, className, size = 'medium', variant, ...rest}: InlineMessageProps) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + const icon = size === 'small' ? variantToSmallIcon(enabled, variant) : variantToIcon(enabled, variant) return ( - + {icon} {children} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.docs.json b/packages/react/src/KeybindingHint/KeybindingHint.docs.json index 136c41954ef..46d1d975f44 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.docs.json +++ b/packages/react/src/KeybindingHint/KeybindingHint.docs.json @@ -22,6 +22,12 @@ "type": "'normal' | 'onEmphasis'", "defaultValue": "'normal'", "description": "Set to `onEmphasis` for display on 'emphasis' colors." + }, + { + "name": "size", + "type": "'small' | 'normal'", + "defaultValue": "'normal'", + "description": "Control the size of the hint." } ], "subcomponents": [] diff --git a/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx b/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx index 37e92d203ce..a9a20a0ca21 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx +++ b/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx @@ -28,3 +28,5 @@ export const OnEmphasis: StoryObj = { ), args: {keys: chord, variant: 'onEmphasis'}, } + +export const Small = {args: {keys: chord, size: 'small'}} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.module.css b/packages/react/src/KeybindingHint/KeybindingHint.module.css new file mode 100644 index 00000000000..980830b0e8f --- /dev/null +++ b/packages/react/src/KeybindingHint/KeybindingHint.module.css @@ -0,0 +1,15 @@ +.KeybindingHint { + position: relative; + padding: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + /* stylelint-disable-next-line primer/typography */ + line-height: unset; + color: inherit; + white-space: nowrap; + vertical-align: baseline; + background: none; + border: none; + box-shadow: none; +} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.tsx b/packages/react/src/KeybindingHint/KeybindingHint.tsx index 82338b748ca..4b7a820aada 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.tsx +++ b/packages/react/src/KeybindingHint/KeybindingHint.tsx @@ -3,34 +3,48 @@ import {memo} from 'react' import Text from '../Text' import type {KeybindingHintProps} from './props' import {accessibleSequenceString, Sequence} from './components/Sequence' +import {useFeatureFlag} from '../FeatureFlags' + +import classes from './KeybindingHint.module.css' +import {clsx} from 'clsx' /** `kbd` element with style resets. */ -const Kbd = ({children}: {children: ReactNode}) => ( - - {children} - -) +const Kbd = ({children, className}: {children: ReactNode; className?: string}) => { + const enabled = useFeatureFlag('primer_react_css_modules_team') + + return ( + + {children} + + ) +} /** Indicates the presence of an available keybinding. */ // KeybindingHint is a good candidate for memoizing since props will rarely change -export const KeybindingHint = memo((props: KeybindingHintProps) => ( - +export const KeybindingHint = memo(({className, ...props}: KeybindingHintProps) => ( + )) diff --git a/packages/react/src/KeybindingHint/components/Chord.tsx b/packages/react/src/KeybindingHint/components/Chord.tsx index d12ce8f44ff..280769db16d 100644 --- a/packages/react/src/KeybindingHint/components/Chord.tsx +++ b/packages/react/src/KeybindingHint/components/Chord.tsx @@ -29,24 +29,26 @@ const splitChord = (chord: string) => .map(k => k.toLowerCase()) .sort(compareLowercaseKeys) -export const Chord = ({keys, format = 'condensed', variant = 'normal'}: KeybindingHintProps) => ( +export const Chord = ({keys, format = 'condensed', variant = 'normal', size = 'normal'}: KeybindingHintProps) => ( {splitChord(keys).map((k, i) => ( diff --git a/packages/react/src/KeybindingHint/components/Sequence.tsx b/packages/react/src/KeybindingHint/components/Sequence.tsx index aaa4ba00f0f..d2b6ab5ce9f 100644 --- a/packages/react/src/KeybindingHint/components/Sequence.tsx +++ b/packages/react/src/KeybindingHint/components/Sequence.tsx @@ -5,7 +5,7 @@ import {accessibleChordString, Chord} from './Chord' const splitSequence = (sequence: string) => sequence.split(' ') -export const Sequence = ({keys, format = 'condensed', variant = 'normal'}: KeybindingHintProps) => +export const Sequence = ({keys, ...chordProps}: KeybindingHintProps) => splitSequence(keys).map((c, i) => ( { @@ -16,7 +16,7 @@ export const Sequence = ({keys, format = 'condensed', variant = 'normal'}: Keybi > ) } - + )) diff --git a/packages/react/src/KeybindingHint/props.ts b/packages/react/src/KeybindingHint/props.ts index 72584086435..bc384fafd08 100644 --- a/packages/react/src/KeybindingHint/props.ts +++ b/packages/react/src/KeybindingHint/props.ts @@ -27,4 +27,12 @@ export interface KeybindingHintProps { * Set to `onEmphasis` for display on emphasis colors. */ variant?: KeybindingHintVariant + /** + * Control the size of the hint. + */ + size?: 'small' | 'normal' + /** + * Additional class name to apply to the hint. + */ + className?: string } diff --git a/packages/react/src/Label/Label.docs.json b/packages/react/src/Label/Label.docs.json index 078e03a9ff3..9abc9b394aa 100644 --- a/packages/react/src/Label/Label.docs.json +++ b/packages/react/src/Label/Label.docs.json @@ -3,7 +3,44 @@ "name": "Label", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-label--default" + }, + { + "id": "components-label-features--primary" + }, + { + "id": "components-label-features--secondary" + }, + { + "id": "components-label-features--accent" + }, + { + "id": "components-label-features--success" + }, + { + "id": "components-label-features--attention" + }, + { + "id": "components-label-features--severe" + }, + { + "id": "components-label-features--danger" + }, + { + "id": "components-label-features--done" + }, + { + "id": "components-label-features--sponsors" + }, + { + "id": "components-label-features--size-large" + }, + { + "id": "components-label-features--size-small" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/LabelGroup/LabelGroup.docs.json b/packages/react/src/LabelGroup/LabelGroup.docs.json index 51e64eef176..578d7fa40fe 100644 --- a/packages/react/src/LabelGroup/LabelGroup.docs.json +++ b/packages/react/src/LabelGroup/LabelGroup.docs.json @@ -3,7 +3,26 @@ "name": "LabelGroup", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-labelgroup--default" + }, + { + "id": "components-labelgroup-features--truncate-auto" + }, + { + "id": "components-labelgroup-features--truncate-auto-with-interactive-tokens" + }, + { + "id": "components-labelgroup-features--truncate-after-five" + }, + { + "id": "components-labelgroup-features--truncate-auto-expand-inline" + }, + { + "id": "components-labelgroup-features--truncate-auto-expand-inline-with-interactive-tokens" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Link/Link.docs.json b/packages/react/src/Link/Link.docs.json index 40506efbdf9..49ffe0d6f77 100644 --- a/packages/react/src/Link/Link.docs.json +++ b/packages/react/src/Link/Link.docs.json @@ -3,7 +3,20 @@ "name": "Link", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-link--default" + }, + { + "id": "components-link-features--muted" + }, + { + "id": "components-link-features--underline" + }, + { + "id": "components-link-features--inline" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Link/Link.tsx b/packages/react/src/Link/Link.tsx index 9c27320a776..8e98db69c24 100644 --- a/packages/react/src/Link/Link.tsx +++ b/packages/react/src/Link/Link.tsx @@ -17,7 +17,7 @@ type StyledLinkProps = { inline?: boolean } & SxProp -const Link = forwardRef(({as: Component = 'a', className, inline, underline, ...props}, forwardedRef) => { +const Link = forwardRef(({as: Component = 'a', className, inline, underline, hoverColor, ...props}, forwardedRef) => { const innerRef = React.useRef(null) useRefObjectAsForwardedRef(forwardedRef, innerRef) @@ -53,6 +53,7 @@ const Link = forwardRef(({as: Component = 'a', className, inline, underline, ... data-muted={props.muted} data-inline={inline} data-underline={underline} + data-hover-color={hoverColor} {...props} // @ts-ignore shh ref={innerRef} @@ -66,6 +67,7 @@ const Link = forwardRef(({as: Component = 'a', className, inline, underline, ... data-muted={props.muted} data-inline={inline} data-underline={underline} + data-hover-color={hoverColor} {...props} // @ts-ignore shh ref={innerRef} diff --git a/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap b/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap index 8b8d5ef784c..33636ed0777 100644 --- a/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap +++ b/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap @@ -16,7 +16,7 @@ exports[`Link passes href down to link element 1`] = ` exports[`Link respects hoverColor prop 1`] = ` `; diff --git a/packages/react/src/NavList/NavList.docs.json b/packages/react/src/NavList/NavList.docs.json index c6df5c21b99..6e2cfbd407a 100644 --- a/packages/react/src/NavList/NavList.docs.json +++ b/packages/react/src/NavList/NavList.docs.json @@ -53,6 +53,12 @@ "type": "boolean", "description": "The open state of the item when it is initially rendered if the item has a SubNav." }, + { + "name": "inactiveText", + "type": "string", + "description": "Text to explain why this item is currently inactive and cannot be activated.", + "defaultValue": "" + }, { "name": "ref", "type": "React.RefObject" @@ -114,6 +120,13 @@ { "name": "NavList.Group", "props": [ + { + "name": "children", + "type": "ReactNode", + "required": true, + "description": "A related set of NavList.Items", + "defaultValue": "" + }, { "name": "title", "type": "string", @@ -132,6 +145,27 @@ { "name": "NavList.GroupHeading", "props": [ + { + "name": "auxiliaryText", + "type": "string", + "required": false, + "description": "Secondary text which provides additional information about a `Group`.", + "defaultValue": "" + }, + { + "name": "variant", + "type": "'subtle' | 'filled'", + "required": false, + "description": "Style variations. Usage is discretionary.\n\n- `\"filled\"` - Superimposed on a background, offset from nearby content\n- `\"subtle\"` - Relatively less offset from nearby content", + "defaultValue": "" + }, + { + "name": "visuallyHidden", + "type": "boolean", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap b/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap index 1d4bccc1f5a..0310e28f437 100644 --- a/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap +++ b/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap @@ -46,6 +46,7 @@ exports[`NavList renders a simple list 1`] = ` flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c7 { @@ -55,6 +56,7 @@ exports[`NavList renders a simple list 1`] = ` flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c0 { @@ -114,6 +116,11 @@ exports[`NavList renders a simple list 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c2[aria-disabled] [data-component="ActionList.Selection"], +.c2[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c2 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -222,6 +229,11 @@ exports[`NavList renders a simple list 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c6[aria-disabled] [data-component="ActionList.Selection"], +.c6[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c6 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -420,6 +432,8 @@ exports[`NavList renders with groups 1`] = ` margin-top: calc(8px - 1px); margin-bottom: 8px; list-style: none; + margin-right: calc(-1 * var(--base-size-8)); + margin-left: calc(-1 * var(--base-size-8)); } .c1:first-child { @@ -511,6 +525,7 @@ exports[`NavList renders with groups 1`] = ` flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c11 { @@ -520,6 +535,7 @@ exports[`NavList renders with groups 1`] = ` flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c0 { @@ -579,6 +595,11 @@ exports[`NavList renders with groups 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c6[aria-disabled] [data-component="ActionList.Selection"], +.c6[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c6 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -687,6 +708,11 @@ exports[`NavList renders with groups 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c10[aria-disabled] [data-component="ActionList.Selection"], +.c10[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c10 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -943,6 +969,7 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c8 { @@ -953,6 +980,10 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav color: var(--fgColor-muted,var(--color-fg-muted,#656d76)); margin-left: 8px; font-weight: initial; + display: grid; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; } [data-variant="danger"]:hover .c1, @@ -992,6 +1023,7 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c10 { @@ -1066,6 +1098,11 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c11[aria-disabled] [data-component="ActionList.Selection"], +.c11[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c11 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1174,6 +1211,11 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c4[aria-disabled] [data-component="ActionList.Selection"], +.c4[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c4 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1428,6 +1470,10 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t color: var(--fgColor-muted,var(--color-fg-muted,#656d76)); margin-left: 8px; font-weight: initial; + display: grid; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; } [data-variant="danger"]:hover .c1, @@ -1473,6 +1519,7 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c0 { @@ -1541,6 +1588,11 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c11[aria-disabled] [data-component="ActionList.Selection"], +.c11[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c11 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1659,6 +1711,11 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c4[aria-disabled] [data-component="ActionList.Selection"], +.c4[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c4 [data-component="ActionList.Item--DividerContainer"] { position: relative; } diff --git a/packages/react/src/Overlay/Overlay.dev.stories.tsx b/packages/react/src/Overlay/Overlay.dev.stories.tsx new file mode 100644 index 00000000000..1f848d4d6c2 --- /dev/null +++ b/packages/react/src/Overlay/Overlay.dev.stories.tsx @@ -0,0 +1,91 @@ +import React, {useRef, useState} from 'react' +import type {Args, Meta} from '@storybook/react' +import Text from '../Text' +import {Button, IconButton} from '../Button' +import Overlay from './Overlay' +import {useFocusTrap} from '../hooks/useFocusTrap' +import Box from '../Box' +import {XIcon} from '@primer/octicons-react' + +export default { + title: 'Private/Components/Overlay/Dev', + component: Overlay, + args: { + open: false, + }, + argTypes: { + open: { + control: false, + visible: false, + }, + }, +} as Meta + +export const SxProps = (args: Args) => { + const [isOpen, setIsOpen] = useState(false) + const buttonRef = useRef(null) + const confirmButtonRef = useRef(null) + const anchorRef = useRef(null) + const closeOverlay = () => setIsOpen(false) + const containerRef = useRef(null) + useFocusTrap({ + containerRef, + disabled: !isOpen, + }) + return ( + + { + setIsOpen(!isOpen) + }} + > + Open overlay + + {isOpen || args.open ? ( + + + + Look! an overlay + + + ) : null} + + ) +} diff --git a/packages/react/src/Overlay/Overlay.docs.json b/packages/react/src/Overlay/Overlay.docs.json index 8187889934b..6091b66b5c7 100644 --- a/packages/react/src/Overlay/Overlay.docs.json +++ b/packages/react/src/Overlay/Overlay.docs.json @@ -4,6 +4,7 @@ "status": "alpha", "a11yReviewed": false, "stories": [ + {"id": "private-components-overlay--default"}, {"id": "private-components-overlay-features--dialog-overlay"}, {"id": "private-components-overlay-features--positioned-overlays"} ], @@ -112,12 +113,33 @@ "defaultValue": "", "description": "If defined, Overlays will be rendered in the named portal. See also `Portal`." }, + { + "name": "overflow", + "type": "'hidden' | 'scroll' | 'auto' | 'visible'", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "preventOverflow", "type": "boolean", "defaultValue": "true", "description": "Determines if the Overlay width should be adjusted responsively if `width` is set to either `auto`, `medium` or lower and there is not enough space to display the Overlay. If `preventOverflow` is set to `false`, the Overlay will be displayed at the maximum width that fits within the viewport." }, + { + "name": "role", + "type": "ARIA role - will most often be 'dialog' or 'menu'", + "required": false, + "description": "ARIA role to use for the overlay", + "defaultValue": "" + }, + { + "name": "data-test-id", + "type": "unknown", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Overlay/Overlay.features.stories.tsx b/packages/react/src/Overlay/Overlay.features.stories.tsx index 6b31bdbb7ca..af4c93bc5e3 100644 --- a/packages/react/src/Overlay/Overlay.features.stories.tsx +++ b/packages/react/src/Overlay/Overlay.features.stories.tsx @@ -1,5 +1,5 @@ import React, {useState, useRef, useCallback} from 'react' -import type {Meta} from '@storybook/react' +import type {Args, Meta} from '@storybook/react' import {TriangleDownIcon, PlusIcon, IssueDraftIcon, XIcon} from '@primer/octicons-react' import { Overlay, @@ -18,8 +18,6 @@ import { ActionMenu, useFocusTrap, } from '..' -import type {AnchorSide} from '@primer/behaviors' -import type {AriaRole} from '../utils/types' import {Tooltip} from '../TooltipV2' export default { @@ -28,6 +26,7 @@ export default { args: { anchorSide: 'inside-top', role: 'dialog', + open: false, }, argTypes: { anchorSide: { @@ -49,16 +48,14 @@ export default { role: { type: 'string', }, + open: { + control: false, + visible: false, + }, }, } as Meta -interface OverlayProps { - anchorSide?: AnchorSide - role?: AriaRole - right?: boolean -} - -export const DropdownOverlay = ({anchorSide}: OverlayProps) => { +export const DropdownOverlay = ({anchorSide, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) @@ -67,7 +64,7 @@ export const DropdownOverlay = ({anchorSide}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { role="none" > - Copy link - Quote reply - Reference in new issue - Edit + Copy link + Quote reply + Reference in new issue + Edit - Delete + + Delete + ) : null} @@ -92,7 +91,7 @@ export const DropdownOverlay = ({anchorSide}: OverlayProps) => { ) } -export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { +export const DialogOverlay = ({anchorSide, role, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) const containerRef = useRef(null) @@ -106,7 +105,7 @@ export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Confirmation screen' : undefined} ref={containerRef} > @@ -134,7 +134,7 @@ export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { ) } -export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { +export const OverlayOnTopOfOverlay = ({anchorSide, role, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const [isSecondaryOpen, setIsSecondaryOpen] = useState(false) const buttonRef = useRef(null) @@ -161,7 +161,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Open overlay' : undefined} ref={primaryContainer} preventOverflow={false} > @@ -188,6 +189,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Options' : undefined} ref={secondaryContainer} preventOverflow={false} > @@ -218,7 +220,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { ) } -export const MemexNestedOverlays = ({role}: OverlayProps) => { +export const MemexNestedOverlays = ({role, open}: Args) => { const [overlayOpen, setOverlayOpen] = React.useState(false) const buttonRef = useRef(null) const containerRef = useRef(null) @@ -238,7 +240,7 @@ export const MemexNestedOverlays = ({role}: OverlayProps) => { icon={TriangleDownIcon} /> - {overlayOpen && ( + {(overlayOpen || open) && ( setOverlayOpen(false)} @@ -249,15 +251,21 @@ export const MemexNestedOverlays = ({role}: OverlayProps) => { left={16} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Add iteration' : undefined} ref={containerRef} preventOverflow={false} > - setOverlayOpen(false)} sx={{display: 'flex', flexDirection: 'column', py: 2}}> + setOverlayOpen(false)} + sx={{display: 'flex', flexDirection: 'column', py: 2}} + aria-label="Set Duration Form" + >
(externalProps: P): P & FormControlForwardedProps { const context = useContext(FormControlContext) - if (!context) return externalProps + if (!context) return externalProps as P & FormControlForwardedProps return { disabled: context.disabled, id: context.id, required: context.required, - validationStatus: context.validationStatus, ['aria-describedby']: [context.validationMessageId, context.captionId].filter(Boolean).join(' ') || undefined, ...externalProps, } diff --git a/packages/react/src/FormControl/_FormControlLeadingVisual.tsx b/packages/react/src/FormControl/_FormControlLeadingVisual.tsx deleted file mode 100644 index 80551681704..00000000000 --- a/packages/react/src/FormControl/_FormControlLeadingVisual.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import Box from '../Box' -import {get} from '../constants' -import type {SxProp} from '../sx' -import {useFormControlContext} from './_FormControlContext' - -const FormControlLeadingVisual: React.FC> = ({children, sx}) => { - const {disabled, captionId} = useFormControlContext() - return ( - *': { - minWidth: captionId ? get('fontSizes.4') : get('fontSizes.2'), - minHeight: captionId ? get('fontSizes.4') : get('fontSizes.2'), - fill: 'currentColor', - }, - ...sx, - }} - ml={2} - > - {children} - - ) -} - -export default FormControlLeadingVisual diff --git a/packages/react/src/Header/Header.tsx b/packages/react/src/Header/Header.tsx index 3c7c194ca43..e36b2d983b1 100644 --- a/packages/react/src/Header/Header.tsx +++ b/packages/react/src/Header/Header.tsx @@ -15,7 +15,7 @@ type StyledHeaderProps = React.ComponentProps<'header'> & SxProp type StyledHeaderItemProps = React.ComponentProps<'div'> & SxProp & {full?: boolean} type StyledHeaderLinkProps = React.ComponentProps<'a'> & SxProp & {to?: Location | Pathname} -const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff' const StyledHeader = toggleStyledComponent( CSS_MODULES_FEATURE_FLAG, diff --git a/packages/react/src/Hidden/Hidden.docs.json b/packages/react/src/Hidden/Hidden.docs.json index ab4ecf2edef..2820003d38c 100644 --- a/packages/react/src/Hidden/Hidden.docs.json +++ b/packages/react/src/Hidden/Hidden.docs.json @@ -1,9 +1,19 @@ { - "id": "drafts_hidden", + "id": "hidden", "name": "Hidden", "status": "draft", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "drafts-components-hidden--default" + }, + { + "id": "drafts-components-hidden-features--hide-content" + }, + { + "id": "drafts-components-hidden-features--render-content-responsively" + } + ], "importPath": "@primer/react/experimental", "props": [ { diff --git a/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx b/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx new file mode 100644 index 00000000000..95c6d281cac --- /dev/null +++ b/packages/react/src/InlineMessage/InlineMessage.dev.stories.tsx @@ -0,0 +1,15 @@ +import type {Meta} from '@storybook/react' +import React from 'react' +import {InlineMessage} from '.' + +const meta = { + title: 'Experimental/Components/InlineMessage/Dev', + component: InlineMessage, +} satisfies Meta + +export default meta + +// Previous Styled version of the component didn't accept an sx prop so no need to test if that works. +export const DevDefault = () => { + return An example inline message +} diff --git a/packages/react/src/InlineMessage/InlineMessage.docs.json b/packages/react/src/InlineMessage/InlineMessage.docs.json index dbdbb463b70..4547cfe57d5 100644 --- a/packages/react/src/InlineMessage/InlineMessage.docs.json +++ b/packages/react/src/InlineMessage/InlineMessage.docs.json @@ -6,16 +6,22 @@ "importPath": "@primer/react/experimental", "stories": [ { - "id": "experimental-components-inlinemessage-features--critical" + "id": "components-inlinemessage--default" }, { - "id": "experimental-components-inlinemessage-features--success" + "id": "components-inlinemessage-features--critical" }, { - "id": "experimental-components-inlinemessage-features--unavailable" + "id": "components-inlinemessage-features--success" }, { - "id": "experimental-components-inlinemessage-features--warning" + "id": "components-inlinemessage-features--unavailable" + }, + { + "id": "components-inlinemessage-features--warning" + }, + { + "id": "components-inlinemessage-features--multiline" } ], "props": [ diff --git a/packages/react/src/InlineMessage/InlineMessage.module.css b/packages/react/src/InlineMessage/InlineMessage.module.css new file mode 100644 index 00000000000..0ddbea7498b --- /dev/null +++ b/packages/react/src/InlineMessage/InlineMessage.module.css @@ -0,0 +1,42 @@ +.InlineMessage { + display: grid; + /* stylelint-disable-next-line primer/typography */ + font-size: var(--inline-message-fontSize); + /* stylelint-disable-next-line primer/typography */ + line-height: var(--inline-message-lineHeight); + /* stylelint-disable-next-line primer/colors */ + color: var(--inline-message-fgColor); + column-gap: 0.5rem; + grid-template-columns: auto 1fr; + align-items: start; + + &[data-size='small'] { + --inline-message-fontSize: var(--text-body-size-small); + --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + } + + &[data-size='medium'] { + --inline-message-fontSize: var(--text-body-size-medium); + --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); + } + + &[data-variant='warning'] { + --inline-message-fgColor: var(--fgColor-attention); + } + + &[data-variant='critical'] { + --inline-message-fgColor: var(--fgColor-danger); + } + + &[data-variant='success'] { + --inline-message-fgColor: var(--fgColor-success); + } + + &[data-variant='unavailable'] { + --inline-message-fgColor: var(--fgColor-muted); + } +} + +.InlineMessageIcon { + min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); +} diff --git a/packages/react/src/InlineMessage/InlineMessage.tsx b/packages/react/src/InlineMessage/InlineMessage.tsx index 55f2296a6fd..173c9502f1b 100644 --- a/packages/react/src/InlineMessage/InlineMessage.tsx +++ b/packages/react/src/InlineMessage/InlineMessage.tsx @@ -1,80 +1,105 @@ import {AlertFillIcon, AlertIcon, CheckCircleFillIcon, CheckCircleIcon} from '@primer/octicons-react' +import {clsx} from 'clsx' import React from 'react' import styled from 'styled-components' import {get} from '../constants' - +import {toggleStyledComponent} from '../internal/utils/toggleStyledComponent' +import {useFeatureFlag} from '../FeatureFlags' +import classes from './InlineMessage.module.css' +import type {SxProp} from '../sx' type MessageVariant = 'critical' | 'success' | 'unavailable' | 'warning' -export type InlineMessageProps = React.ComponentPropsWithoutRef<'div'> & { - /** - * Specify the size of the InlineMessage - */ - size?: 'small' | 'medium' +const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' - /** - * Specify the type of the InlineMessage - */ - variant: MessageVariant -} +export type InlineMessageProps = React.ComponentPropsWithoutRef<'div'> & + SxProp & { + /** + * Specify the size of the InlineMessage + */ + size?: 'small' | 'medium' -const StyledMessage = styled.div` - display: grid; - column-gap: 0.5rem; - grid-template-columns: auto 1fr; - align-items: start; - color: var(--inline-message-fgColor, ${get('colors.fg.muted')}); - line-height: var(--inline-message-lineHeight); - font-size: var(--inline-message-fontSize, ${get('fontSizes.1')}); - - &[data-size='small'] { - --inline-message-fontSize: var(--text-body-size-small, ${get('fontSizes.0')}); - --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + /** + * Specify the type of the InlineMessage + */ + variant: MessageVariant } - &[data-size='medium'] { - --inline-message-fontSize: var(--text-body-size-medium, ${get('fontSizes.1')}); - --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); - } +const StyledMessage = toggleStyledComponent( + CSS_MODULES_FEATURE_FLAG, + 'div', + styled.div` + display: grid; + column-gap: 0.5rem; + grid-template-columns: auto 1fr; + align-items: start; + color: var(--inline-message-fgColor, ${get('colors.fg.muted')}); + line-height: var(--inline-message-lineHeight); + font-size: var(--inline-message-fontSize, ${get('fontSizes.1')}); - &[data-variant='warning'] { - --inline-message-fgColor: ${get('colors.attention.fg')}; - } + &[data-size='small'] { + --inline-message-fontSize: var(--text-body-size-small, ${get('fontSizes.0')}); + --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666); + } - &[data-variant='critical'] { - --inline-message-fgColor: ${get('colors.danger.fg')}; - } + &[data-size='medium'] { + --inline-message-fontSize: var(--text-body-size-medium, ${get('fontSizes.1')}); + --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285); + } - &[data-variant='success'] { - --inline-message-fgColor: ${get('colors.success.fg')}; - } + &[data-variant='warning'] { + --inline-message-fgColor: ${get('colors.attention.fg')}; + } - &[data-variant='unavailable'] { - --inline-message-fgColor: ${get('colors.fg.muted')}; - } + &[data-variant='critical'] { + --inline-message-fgColor: ${get('colors.danger.fg')}; + } + + &[data-variant='success'] { + --inline-message-fgColor: ${get('colors.success.fg')}; + } + + &[data-variant='unavailable'] { + --inline-message-fgColor: ${get('colors.fg.muted')}; + } - & .InlineMessageIcon { - min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); + & .InlineMessageIcon { + min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize)); + } + `, +) + +const variantToIcon = (enabled: boolean, variant: MessageVariant): React.ReactNode => { + const icons = { + warning: , + critical: , + success: , + unavailable: , } -` -const variantToIcon: Record = { - warning: , - critical: , - success: , - unavailable: , + return icons[variant] } -const variantToSmallIcon: Record = { - warning: , - critical: , - success: , - unavailable: , +const variantToSmallIcon = (enabled: boolean, variant: MessageVariant): React.ReactNode => { + const icons = { + warning: , + critical: , + success: , + unavailable: , + } + return icons[variant] } -export function InlineMessage({children, size = 'medium', variant, ...rest}: InlineMessageProps) { - const icon = size === 'small' ? variantToSmallIcon[variant] : variantToIcon[variant] +export function InlineMessage({children, className, size = 'medium', variant, ...rest}: InlineMessageProps) { + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + + const icon = size === 'small' ? variantToSmallIcon(enabled, variant) : variantToIcon(enabled, variant) return ( - + {icon} {children} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.docs.json b/packages/react/src/KeybindingHint/KeybindingHint.docs.json index 136c41954ef..46d1d975f44 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.docs.json +++ b/packages/react/src/KeybindingHint/KeybindingHint.docs.json @@ -22,6 +22,12 @@ "type": "'normal' | 'onEmphasis'", "defaultValue": "'normal'", "description": "Set to `onEmphasis` for display on 'emphasis' colors." + }, + { + "name": "size", + "type": "'small' | 'normal'", + "defaultValue": "'normal'", + "description": "Control the size of the hint." } ], "subcomponents": [] diff --git a/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx b/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx index 37e92d203ce..a9a20a0ca21 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx +++ b/packages/react/src/KeybindingHint/KeybindingHint.features.stories.tsx @@ -28,3 +28,5 @@ export const OnEmphasis: StoryObj = { ), args: {keys: chord, variant: 'onEmphasis'}, } + +export const Small = {args: {keys: chord, size: 'small'}} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.module.css b/packages/react/src/KeybindingHint/KeybindingHint.module.css new file mode 100644 index 00000000000..980830b0e8f --- /dev/null +++ b/packages/react/src/KeybindingHint/KeybindingHint.module.css @@ -0,0 +1,15 @@ +.KeybindingHint { + position: relative; + padding: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + /* stylelint-disable-next-line primer/typography */ + line-height: unset; + color: inherit; + white-space: nowrap; + vertical-align: baseline; + background: none; + border: none; + box-shadow: none; +} diff --git a/packages/react/src/KeybindingHint/KeybindingHint.tsx b/packages/react/src/KeybindingHint/KeybindingHint.tsx index 82338b748ca..4b7a820aada 100644 --- a/packages/react/src/KeybindingHint/KeybindingHint.tsx +++ b/packages/react/src/KeybindingHint/KeybindingHint.tsx @@ -3,34 +3,48 @@ import {memo} from 'react' import Text from '../Text' import type {KeybindingHintProps} from './props' import {accessibleSequenceString, Sequence} from './components/Sequence' +import {useFeatureFlag} from '../FeatureFlags' + +import classes from './KeybindingHint.module.css' +import {clsx} from 'clsx' /** `kbd` element with style resets. */ -const Kbd = ({children}: {children: ReactNode}) => ( - - {children} - -) +const Kbd = ({children, className}: {children: ReactNode; className?: string}) => { + const enabled = useFeatureFlag('primer_react_css_modules_team') + + return ( + + {children} + + ) +} /** Indicates the presence of an available keybinding. */ // KeybindingHint is a good candidate for memoizing since props will rarely change -export const KeybindingHint = memo((props: KeybindingHintProps) => ( - +export const KeybindingHint = memo(({className, ...props}: KeybindingHintProps) => ( + )) diff --git a/packages/react/src/KeybindingHint/components/Chord.tsx b/packages/react/src/KeybindingHint/components/Chord.tsx index d12ce8f44ff..280769db16d 100644 --- a/packages/react/src/KeybindingHint/components/Chord.tsx +++ b/packages/react/src/KeybindingHint/components/Chord.tsx @@ -29,24 +29,26 @@ const splitChord = (chord: string) => .map(k => k.toLowerCase()) .sort(compareLowercaseKeys) -export const Chord = ({keys, format = 'condensed', variant = 'normal'}: KeybindingHintProps) => ( +export const Chord = ({keys, format = 'condensed', variant = 'normal', size = 'normal'}: KeybindingHintProps) => ( {splitChord(keys).map((k, i) => ( diff --git a/packages/react/src/KeybindingHint/components/Sequence.tsx b/packages/react/src/KeybindingHint/components/Sequence.tsx index aaa4ba00f0f..d2b6ab5ce9f 100644 --- a/packages/react/src/KeybindingHint/components/Sequence.tsx +++ b/packages/react/src/KeybindingHint/components/Sequence.tsx @@ -5,7 +5,7 @@ import {accessibleChordString, Chord} from './Chord' const splitSequence = (sequence: string) => sequence.split(' ') -export const Sequence = ({keys, format = 'condensed', variant = 'normal'}: KeybindingHintProps) => +export const Sequence = ({keys, ...chordProps}: KeybindingHintProps) => splitSequence(keys).map((c, i) => ( { @@ -16,7 +16,7 @@ export const Sequence = ({keys, format = 'condensed', variant = 'normal'}: Keybi > ) } - + )) diff --git a/packages/react/src/KeybindingHint/props.ts b/packages/react/src/KeybindingHint/props.ts index 72584086435..bc384fafd08 100644 --- a/packages/react/src/KeybindingHint/props.ts +++ b/packages/react/src/KeybindingHint/props.ts @@ -27,4 +27,12 @@ export interface KeybindingHintProps { * Set to `onEmphasis` for display on emphasis colors. */ variant?: KeybindingHintVariant + /** + * Control the size of the hint. + */ + size?: 'small' | 'normal' + /** + * Additional class name to apply to the hint. + */ + className?: string } diff --git a/packages/react/src/Label/Label.docs.json b/packages/react/src/Label/Label.docs.json index 078e03a9ff3..9abc9b394aa 100644 --- a/packages/react/src/Label/Label.docs.json +++ b/packages/react/src/Label/Label.docs.json @@ -3,7 +3,44 @@ "name": "Label", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-label--default" + }, + { + "id": "components-label-features--primary" + }, + { + "id": "components-label-features--secondary" + }, + { + "id": "components-label-features--accent" + }, + { + "id": "components-label-features--success" + }, + { + "id": "components-label-features--attention" + }, + { + "id": "components-label-features--severe" + }, + { + "id": "components-label-features--danger" + }, + { + "id": "components-label-features--done" + }, + { + "id": "components-label-features--sponsors" + }, + { + "id": "components-label-features--size-large" + }, + { + "id": "components-label-features--size-small" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/LabelGroup/LabelGroup.docs.json b/packages/react/src/LabelGroup/LabelGroup.docs.json index 51e64eef176..578d7fa40fe 100644 --- a/packages/react/src/LabelGroup/LabelGroup.docs.json +++ b/packages/react/src/LabelGroup/LabelGroup.docs.json @@ -3,7 +3,26 @@ "name": "LabelGroup", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-labelgroup--default" + }, + { + "id": "components-labelgroup-features--truncate-auto" + }, + { + "id": "components-labelgroup-features--truncate-auto-with-interactive-tokens" + }, + { + "id": "components-labelgroup-features--truncate-after-five" + }, + { + "id": "components-labelgroup-features--truncate-auto-expand-inline" + }, + { + "id": "components-labelgroup-features--truncate-auto-expand-inline-with-interactive-tokens" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Link/Link.docs.json b/packages/react/src/Link/Link.docs.json index 40506efbdf9..49ffe0d6f77 100644 --- a/packages/react/src/Link/Link.docs.json +++ b/packages/react/src/Link/Link.docs.json @@ -3,7 +3,20 @@ "name": "Link", "status": "alpha", "a11yReviewed": false, - "stories": [], + "stories": [ + { + "id": "components-link--default" + }, + { + "id": "components-link-features--muted" + }, + { + "id": "components-link-features--underline" + }, + { + "id": "components-link-features--inline" + } + ], "importPath": "@primer/react", "props": [ { diff --git a/packages/react/src/Link/Link.tsx b/packages/react/src/Link/Link.tsx index 9c27320a776..8e98db69c24 100644 --- a/packages/react/src/Link/Link.tsx +++ b/packages/react/src/Link/Link.tsx @@ -17,7 +17,7 @@ type StyledLinkProps = { inline?: boolean } & SxProp -const Link = forwardRef(({as: Component = 'a', className, inline, underline, ...props}, forwardedRef) => { +const Link = forwardRef(({as: Component = 'a', className, inline, underline, hoverColor, ...props}, forwardedRef) => { const innerRef = React.useRef(null) useRefObjectAsForwardedRef(forwardedRef, innerRef) @@ -53,6 +53,7 @@ const Link = forwardRef(({as: Component = 'a', className, inline, underline, ... data-muted={props.muted} data-inline={inline} data-underline={underline} + data-hover-color={hoverColor} {...props} // @ts-ignore shh ref={innerRef} @@ -66,6 +67,7 @@ const Link = forwardRef(({as: Component = 'a', className, inline, underline, ... data-muted={props.muted} data-inline={inline} data-underline={underline} + data-hover-color={hoverColor} {...props} // @ts-ignore shh ref={innerRef} diff --git a/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap b/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap index 8b8d5ef784c..33636ed0777 100644 --- a/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap +++ b/packages/react/src/Link/__tests__/__snapshots__/Link.test.tsx.snap @@ -16,7 +16,7 @@ exports[`Link passes href down to link element 1`] = ` exports[`Link respects hoverColor prop 1`] = ` `; diff --git a/packages/react/src/NavList/NavList.docs.json b/packages/react/src/NavList/NavList.docs.json index c6df5c21b99..6e2cfbd407a 100644 --- a/packages/react/src/NavList/NavList.docs.json +++ b/packages/react/src/NavList/NavList.docs.json @@ -53,6 +53,12 @@ "type": "boolean", "description": "The open state of the item when it is initially rendered if the item has a SubNav." }, + { + "name": "inactiveText", + "type": "string", + "description": "Text to explain why this item is currently inactive and cannot be activated.", + "defaultValue": "" + }, { "name": "ref", "type": "React.RefObject" @@ -114,6 +120,13 @@ { "name": "NavList.Group", "props": [ + { + "name": "children", + "type": "ReactNode", + "required": true, + "description": "A related set of NavList.Items", + "defaultValue": "" + }, { "name": "title", "type": "string", @@ -132,6 +145,27 @@ { "name": "NavList.GroupHeading", "props": [ + { + "name": "auxiliaryText", + "type": "string", + "required": false, + "description": "Secondary text which provides additional information about a `Group`.", + "defaultValue": "" + }, + { + "name": "variant", + "type": "'subtle' | 'filled'", + "required": false, + "description": "Style variations. Usage is discretionary.\n\n- `\"filled\"` - Superimposed on a background, offset from nearby content\n- `\"subtle\"` - Relatively less offset from nearby content", + "defaultValue": "" + }, + { + "name": "visuallyHidden", + "type": "boolean", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap b/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap index 1d4bccc1f5a..0310e28f437 100644 --- a/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap +++ b/packages/react/src/NavList/__snapshots__/NavList.test.tsx.snap @@ -46,6 +46,7 @@ exports[`NavList renders a simple list 1`] = ` flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c7 { @@ -55,6 +56,7 @@ exports[`NavList renders a simple list 1`] = ` flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c0 { @@ -114,6 +116,11 @@ exports[`NavList renders a simple list 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c2[aria-disabled] [data-component="ActionList.Selection"], +.c2[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c2 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -222,6 +229,11 @@ exports[`NavList renders a simple list 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c6[aria-disabled] [data-component="ActionList.Selection"], +.c6[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c6 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -420,6 +432,8 @@ exports[`NavList renders with groups 1`] = ` margin-top: calc(8px - 1px); margin-bottom: 8px; list-style: none; + margin-right: calc(-1 * var(--base-size-8)); + margin-left: calc(-1 * var(--base-size-8)); } .c1:first-child { @@ -511,6 +525,7 @@ exports[`NavList renders with groups 1`] = ` flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c11 { @@ -520,6 +535,7 @@ exports[`NavList renders with groups 1`] = ` flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c0 { @@ -579,6 +595,11 @@ exports[`NavList renders with groups 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c6[aria-disabled] [data-component="ActionList.Selection"], +.c6[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c6 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -687,6 +708,11 @@ exports[`NavList renders with groups 1`] = ` border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c10[aria-disabled] [data-component="ActionList.Selection"], +.c10[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c10 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -943,6 +969,7 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav flex-grow: 1; font-weight: 400; word-break: break-word; + line-height: 20px; } .c8 { @@ -953,6 +980,10 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav color: var(--fgColor-muted,var(--color-fg-muted,#656d76)); margin-left: 8px; font-weight: initial; + display: grid; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; } [data-variant="danger"]:hover .c1, @@ -992,6 +1023,7 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c10 { @@ -1066,6 +1098,11 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c11[aria-disabled] [data-component="ActionList.Selection"], +.c11[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c11 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1174,6 +1211,11 @@ exports[`NavList.Item with NavList.SubNav does not have active styles if SubNav border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c4[aria-disabled] [data-component="ActionList.Selection"], +.c4[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c4 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1428,6 +1470,10 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t color: var(--fgColor-muted,var(--color-fg-muted,#656d76)); margin-left: 8px; font-weight: initial; + display: grid; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; } [data-variant="danger"]:hover .c1, @@ -1473,6 +1519,7 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t flex-grow: 1; font-weight: 600; word-break: break-word; + line-height: 20px; } .c0 { @@ -1541,6 +1588,11 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c11[aria-disabled] [data-component="ActionList.Selection"], +.c11[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c11 [data-component="ActionList.Item--DividerContainer"] { position: relative; } @@ -1659,6 +1711,11 @@ exports[`NavList.Item with NavList.SubNav has active styles if SubNav contains t border-color: var(--color-input-disabled-bg,rgba(175,184,193,0.2)); } +.c4[aria-disabled] [data-component="ActionList.Selection"], +.c4[data-inactive] [data-component="ActionList.Selection"] { + color: var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f)); +} + .c4 [data-component="ActionList.Item--DividerContainer"] { position: relative; } diff --git a/packages/react/src/Overlay/Overlay.dev.stories.tsx b/packages/react/src/Overlay/Overlay.dev.stories.tsx new file mode 100644 index 00000000000..1f848d4d6c2 --- /dev/null +++ b/packages/react/src/Overlay/Overlay.dev.stories.tsx @@ -0,0 +1,91 @@ +import React, {useRef, useState} from 'react' +import type {Args, Meta} from '@storybook/react' +import Text from '../Text' +import {Button, IconButton} from '../Button' +import Overlay from './Overlay' +import {useFocusTrap} from '../hooks/useFocusTrap' +import Box from '../Box' +import {XIcon} from '@primer/octicons-react' + +export default { + title: 'Private/Components/Overlay/Dev', + component: Overlay, + args: { + open: false, + }, + argTypes: { + open: { + control: false, + visible: false, + }, + }, +} as Meta + +export const SxProps = (args: Args) => { + const [isOpen, setIsOpen] = useState(false) + const buttonRef = useRef(null) + const confirmButtonRef = useRef(null) + const anchorRef = useRef(null) + const closeOverlay = () => setIsOpen(false) + const containerRef = useRef(null) + useFocusTrap({ + containerRef, + disabled: !isOpen, + }) + return ( + + { + setIsOpen(!isOpen) + }} + > + Open overlay + + {isOpen || args.open ? ( + + + + Look! an overlay + + + ) : null} + + ) +} diff --git a/packages/react/src/Overlay/Overlay.docs.json b/packages/react/src/Overlay/Overlay.docs.json index 8187889934b..6091b66b5c7 100644 --- a/packages/react/src/Overlay/Overlay.docs.json +++ b/packages/react/src/Overlay/Overlay.docs.json @@ -4,6 +4,7 @@ "status": "alpha", "a11yReviewed": false, "stories": [ + {"id": "private-components-overlay--default"}, {"id": "private-components-overlay-features--dialog-overlay"}, {"id": "private-components-overlay-features--positioned-overlays"} ], @@ -112,12 +113,33 @@ "defaultValue": "", "description": "If defined, Overlays will be rendered in the named portal. See also `Portal`." }, + { + "name": "overflow", + "type": "'hidden' | 'scroll' | 'auto' | 'visible'", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "preventOverflow", "type": "boolean", "defaultValue": "true", "description": "Determines if the Overlay width should be adjusted responsively if `width` is set to either `auto`, `medium` or lower and there is not enough space to display the Overlay. If `preventOverflow` is set to `false`, the Overlay will be displayed at the maximum width that fits within the viewport." }, + { + "name": "role", + "type": "ARIA role - will most often be 'dialog' or 'menu'", + "required": false, + "description": "ARIA role to use for the overlay", + "defaultValue": "" + }, + { + "name": "data-test-id", + "type": "unknown", + "required": false, + "description": "", + "defaultValue": "" + }, { "name": "sx", "type": "SystemStyleObject" diff --git a/packages/react/src/Overlay/Overlay.features.stories.tsx b/packages/react/src/Overlay/Overlay.features.stories.tsx index 6b31bdbb7ca..af4c93bc5e3 100644 --- a/packages/react/src/Overlay/Overlay.features.stories.tsx +++ b/packages/react/src/Overlay/Overlay.features.stories.tsx @@ -1,5 +1,5 @@ import React, {useState, useRef, useCallback} from 'react' -import type {Meta} from '@storybook/react' +import type {Args, Meta} from '@storybook/react' import {TriangleDownIcon, PlusIcon, IssueDraftIcon, XIcon} from '@primer/octicons-react' import { Overlay, @@ -18,8 +18,6 @@ import { ActionMenu, useFocusTrap, } from '..' -import type {AnchorSide} from '@primer/behaviors' -import type {AriaRole} from '../utils/types' import {Tooltip} from '../TooltipV2' export default { @@ -28,6 +26,7 @@ export default { args: { anchorSide: 'inside-top', role: 'dialog', + open: false, }, argTypes: { anchorSide: { @@ -49,16 +48,14 @@ export default { role: { type: 'string', }, + open: { + control: false, + visible: false, + }, }, } as Meta -interface OverlayProps { - anchorSide?: AnchorSide - role?: AriaRole - right?: boolean -} - -export const DropdownOverlay = ({anchorSide}: OverlayProps) => { +export const DropdownOverlay = ({anchorSide, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) @@ -67,7 +64,7 @@ export const DropdownOverlay = ({anchorSide}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { role="none" > - Copy link - Quote reply - Reference in new issue - Edit + Copy link + Quote reply + Reference in new issue + Edit - Delete + + Delete + ) : null} @@ -92,7 +91,7 @@ export const DropdownOverlay = ({anchorSide}: OverlayProps) => { ) } -export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { +export const DialogOverlay = ({anchorSide, role, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) const containerRef = useRef(null) @@ -106,7 +105,7 @@ export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Confirmation screen' : undefined} ref={containerRef} > @@ -134,7 +134,7 @@ export const DialogOverlay = ({anchorSide, role}: OverlayProps) => { ) } -export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { +export const OverlayOnTopOfOverlay = ({anchorSide, role, open}: Args) => { const [isOpen, setIsOpen] = useState(false) const [isSecondaryOpen, setIsSecondaryOpen] = useState(false) const buttonRef = useRef(null) @@ -161,7 +161,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { setIsOpen(!isOpen)}> open overlay - {isOpen ? ( + {isOpen || open ? ( { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Open overlay' : undefined} ref={primaryContainer} preventOverflow={false} > @@ -188,6 +189,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { anchorSide={anchorSide} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Options' : undefined} ref={secondaryContainer} preventOverflow={false} > @@ -218,7 +220,7 @@ export const OverlayOnTopOfOverlay = ({anchorSide, role}: OverlayProps) => { ) } -export const MemexNestedOverlays = ({role}: OverlayProps) => { +export const MemexNestedOverlays = ({role, open}: Args) => { const [overlayOpen, setOverlayOpen] = React.useState(false) const buttonRef = useRef(null) const containerRef = useRef(null) @@ -238,7 +240,7 @@ export const MemexNestedOverlays = ({role}: OverlayProps) => { icon={TriangleDownIcon} /> - {overlayOpen && ( + {(overlayOpen || open) && ( setOverlayOpen(false)} @@ -249,15 +251,21 @@ export const MemexNestedOverlays = ({role}: OverlayProps) => { left={16} role={role} aria-modal={role === 'dialog' ? 'true' : undefined} + aria-label={role === 'dialog' ? 'Add iteration' : undefined} ref={containerRef} preventOverflow={false} > - setOverlayOpen(false)} sx={{display: 'flex', flexDirection: 'column', py: 2}}> + setOverlayOpen(false)} + sx={{display: 'flex', flexDirection: 'column', py: 2}} + aria-label="Set Duration Form" + >