diff --git a/docs/guides/support.md b/docs/guides/support.md index 912e98158d4c..963ce5a18d0a 100644 --- a/docs/guides/support.md +++ b/docs/guides/support.md @@ -6,7 +6,8 @@ ## Table of Contents - [Overview](#overview) - - [What does "ongoing support" mean?](#what-does-ongoing-support-mean) + - [What does "ongoing support" mean regarding GitHub?](#what-does-ongoing-support-mean-regarding-github) + - [What does "ongoing support" mean regarding Slack?](#what-does-ongoing-support-mean-regarding-slack) - [What repositories do we support?](#what-repositories-do-we-support) - [Issues](#issues) - [Types of issues](#types-of-issues) @@ -16,7 +17,7 @@ - [type: question ❓](#type-question-) - [type: enhancement πŸ’‘](#type-enhancement-) - [Severity](#severity) - - [Impact](#impact) + - [Project](#project) - [Other labels](#other-labels) - [Alerting a team or subject matter expert](#alerting-a-team-or-subject-matter-expert) - [Pull requests](#pull-requests) @@ -29,22 +30,71 @@ ## Overview -Ongoing support for Carbon and previous version (which will be prioritized in -that order) +Ongoing support for the latest version Carbon and the previous version (which +will be prioritized in that order) -### What does "ongoing support" mean? +Whether you are triaging new issues in GitHub or responding to Slack threads in +our support channels, here are some responses that can help get the conversation +started in case you get stuck. + +- β€œCould you share more about what you’ve already tried?” +- β€œCan you share more about your usecase?” +- β€œCan you add a repro (reproduction) using Stackblitz?” +- β€œAfter searching through [FILL IN RESOURCE HERE], I was able to find this and + thought it might be helpful... Let me know if that works.” + +### What does "ongoing support" mean regarding GitHub? - Incoming pull requests (code review, initial communication, ongoing - discussion, rejection or merge) from the community (i.e. not from the core - team) -- Triage and shepherd issues to close. Answer questions and help our users find - solutions to their problems + discussion, rejection or merge) from the maintainer team and the community (in + that order). +- Triage + [new issues](https://github.com/orgs/carbon-design-system/projects/39/views/6) + on your support day. +- Designers triage design issues and developers triage dev issues. - Does not include feature enhancements or new feature requests +### What does "ongoing support" mean regarding Slack? + +- A minimum of twice per day that maintainers monitor #carbon-design-system and + #carbon-react Slack support channels and respond to questions. Help our users + find solutions to their problems. +- The goal is to _respond_ to every thread on your day. +- Go into threads where members of the community answer a question and validate + the person in the community that answered it by adding an emoji or response + reiterating the answer and acknowledging the community member. +- Use discretion to respond to applicable threads. Lean on the maintainer team's + private #carbon-support channel to look for subject matter experts when a + question goes beyond your skillset. When you ask in this channel, take a leap + of faith in your skills and propose a response, such as, "This is how I want + to respond ... YOUR REPLY HERE". Follow the question by practicing humility, + "How far off am I"? "What am I missing"? Remember, you're acting as an + advocate for the person who originally asked the question. Respresent their + needs to the best of your ability. +- If a question is Carbon-related, but not necessarily related to the core + components, route the person to the correct Slack channel where they might + receive support. + - [ibmproducts-pal-dev](https://ibm.enterprise.slack.com/archives/C013ZTX0N6B) + - [ibmproducts-pal](https://ibm.enterprise.slack.com/archives/CQGR0HC05) + - [carbon-ng](https://ibm.enterprise.slack.com/archives/CBZC0LM2N) + - [carbon-for-cloud](https://ibm.enterprise.slack.com/archives/C0603NZDXRD) + - [carbon-charts](https://ibm.enterprise.slack.com/archives/CCA7L4MS9) + - [carbon-for-ibm-dotcom](https://ibm.enterprise.slack.com/archives/C2PLX8GQ6) + - [carbon-web-components](https://ibm.enterprise.slack.com/archives/CL83LMKSA) + - [carbon-wg-typescript](https://ibm.enterprise.slack.com/archives/C03C8VASVED) + +### Configuring the GitHub Slack integration + +`/github subscribe carbon-design-system/carbon` + +For additional guidance checkout their +[docs](https://github.com/integrations/slack). + ### What repositories do we support? - carbon-design-system/carbon - carbon-design-system/carbon-website +- carbon-design-system/carbon-design-kit ## Issues @@ -64,14 +114,20 @@ to define the issue their having._ Using these templates also helps Project-Bot automatically move issues and new pull requests to the right workstreams by auto labeling the issues according to -the template type. There are three types of issues The Support and Maintenance -team are concerned with: +the template type. There are three types of issues the maintainer team is +concerned with: -- type: a11y β™Ώ - type: question ❓ - type: bug πŸ› - type: enhancement πŸ’‘ +In addition to the types above, the issue may also fit one or more of the +following types of issues based on the work being performed. + +- type: a11y β™Ώ +- type: docs πŸ“– +- type: infrastructure πŸ€– + ### Triaging a new issue Triage is the process of determining the severity and priority of issues _as @@ -81,11 +137,9 @@ quickly it should be addressed. ### Triage Process For the different types of issues, we have created the process to triaging each -one so that they can be moved into our Backlog. For all types of issues, assign -yourself to the issue until it's moved to the Backlog pipeline so that others -know the issue is being addressed. +one so that they can be moved into our Backlog. -#### type: bug πŸ› & type: a11y β™Ώ +#### type: bug πŸ› _Process to triaged_ @@ -110,9 +164,8 @@ close the issue. Sometimes people mark their issues as a bug when in reality, they are an enhancement request or a question. -If you find this to be the case, remove the bug label, add the -`type: question ❓` or `type: enhancement πŸ’‘` label, and then follow the -directions in that section. +If you find this to be the case, remove the bug label, add the appropriate +label, and then follow the directions in that section. @@ -136,8 +189,7 @@ browser or version info. -After all that, move the issue to the backlog pipeline in zenhub and then you're -done! πŸŽ‰ +After all that, move the issue to the backlog and then you're done! πŸŽ‰ #### type: question ❓ @@ -294,7 +346,7 @@ business impact that the feature will bring with future research done. ### Severity -There are 4 levels of severity for issues in the Carbon core repositories: +There are 4 levels of severity for bugs in the Carbon core repositories: - https://github.com/carbon-design-system/carbon/labels/severity%3A%201 - _"Must be fixed ASAP"_ @@ -374,6 +426,28 @@ workaround, a https://github.com/carbon-design-system/carbon/labels/severity%3A%202 or lower is more appropriate. +After applying the severity label, be sure to also apply the appropriate role to +the issue. Either `role: dev πŸ€–` or `role: design :pencil2:`, depending on which +discipline should be working on it. + +### Project + +After assigning the role and severity, be sure to apply the correct categories +in the GitHub Project: + +- Status + - Triage - Issues that need triaging + - Needs Refined - Issues that will be worked on in future sprints, but need to + be broken down into smaller chunks and discussed. + - Needs a11y review - Issues that need to be brought to the Carbon + Accessibility Guild for further refinement and clarity. + - Backlog - Issues that have been refined move into the Backlog, where they + will be sized and assigned for a future sprint. + - In progress - Issues that are being actively worked on in a given sprint. + - Area - The part of the system that the issue effects. + - Role - The discipline that will take the lead and deliver the issue to + completion. + ### Other labels There is a large collection of labels that can help communicate the nature of an diff --git a/e2e/components/Accordion/Accordion-test.avt.e2e.js b/e2e/components/Accordion/Accordion-test.avt.e2e.js index 44fa7dd98755..ee836745df7d 100644 --- a/e2e/components/Accordion/Accordion-test.avt.e2e.js +++ b/e2e/components/Accordion/Accordion-test.avt.e2e.js @@ -57,29 +57,33 @@ test.describe('Accordion @avt', () => { }, }); - const accordin_btn1 = page.getByRole('button', { name: 'Section 1 title' }); - const accordin_btn2 = page.getByRole('button', { name: 'Section 2 title' }); + const accordion_btn1 = page.getByRole('button', { + name: 'Section 1 title', + }); + const accordion_btn2 = page.getByRole('button', { + name: 'Section 2 title', + }); - await expect(accordin_btn1).toBeVisible(); + await expect(accordion_btn1).toBeVisible(); await page.keyboard.press('Tab'); // Check the focus on Accordion 1 - await expect(accordin_btn1).toBeFocused(); + await expect(accordion_btn1).toBeFocused(); await page.keyboard.press('Enter'); // Open the Accordion 1 - await expect(accordin_btn1).toHaveAttribute('aria-expanded', 'true'); + await expect(accordion_btn1).toHaveAttribute('aria-expanded', 'true'); await page.keyboard.press('Enter'); - await expect(accordin_btn1).toHaveAttribute('aria-expanded', 'false'); + await expect(accordion_btn1).toHaveAttribute('aria-expanded', 'false'); await page.keyboard.press('Tab'); // Check the focus and open state on Accordion 2 - await expect(accordin_btn2).toBeFocused(); + await expect(accordion_btn2).toBeFocused(); await page.keyboard.press('Space'); - await expect(accordin_btn2).toHaveAttribute('aria-expanded', 'true'); + await expect(accordion_btn2).toHaveAttribute('aria-expanded', 'true'); await page.keyboard.press('Escape'); - await expect(accordin_btn2).toHaveAttribute('aria-expanded', 'false'); + await expect(accordion_btn2).toHaveAttribute('aria-expanded', 'false'); }); test('@avt-advanced-states mouse click', async ({ page }) => { @@ -90,16 +94,18 @@ test.describe('Accordion @avt', () => { theme: 'white', }, }); - const accordin_btn1 = page.getByRole('button', { name: 'Section 1 title' }); - await accordin_btn1.click(); - await expect(accordin_btn1).toHaveAttribute('aria-expanded', 'true'); + const accordion_btn1 = page.getByRole('button', { + name: 'Section 1 title', + }); + await accordion_btn1.click(); + await expect(accordion_btn1).toHaveAttribute('aria-expanded', 'true'); // Checking for ACViolation await expect(page).toHaveNoACViolations( 'Accordion @avt-advanced-states mouse click' ); - await accordin_btn1.click(); - await expect(accordin_btn1).toHaveAttribute('aria-expanded', 'false'); + await accordion_btn1.click(); + await expect(accordion_btn1).toHaveAttribute('aria-expanded', 'false'); }); test('@avt-advanced-states mouse hover', async ({ page }) => { @@ -110,8 +116,10 @@ test.describe('Accordion @avt', () => { theme: 'white', }, }); - const accordin_btn1 = page.getByRole('button', { name: 'Section 1 title' }); - await accordin_btn1.hover(); + const accordion_btn1 = page.getByRole('button', { + name: 'Section 1 title', + }); + await accordion_btn1.hover(); await expect(page).toHaveNoACViolations( 'Accordion @avt-advanced-states mouse hover' ); @@ -128,8 +136,10 @@ test.describe('Accordion @avt', () => { disabled: true, }, }); - const accordin_btn1 = page.getByRole('button', { name: 'Section 1 title' }); - await expect(accordin_btn1).toBeDisabled(); + const accordion_btn1 = page.getByRole('button', { + name: 'Section 1 title', + }); + await expect(accordion_btn1).toBeDisabled(); await expect(page).toHaveNoACViolations( 'Accordion @avt-advanced-states disabled' ); diff --git a/e2e/components/FluidComboBox/FluidComboBox-test.avt.e2e.js b/e2e/components/FluidComboBox/FluidComboBox-test.avt.e2e.js index a2207c8199cf..b8004070f044 100644 --- a/e2e/components/FluidComboBox/FluidComboBox-test.avt.e2e.js +++ b/e2e/components/FluidComboBox/FluidComboBox-test.avt.e2e.js @@ -1,5 +1,5 @@ /** - * Copyright IBM Corp. 2022 + * Copyright IBM Corp. 2016, 2023 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. @@ -19,6 +19,100 @@ test.describe('FluidComboBox @avt', () => { theme: 'white', }, }); - await expect(page).toHaveNoACViolations('FluidComboBox @avt-default-state'); + await expect(page).toHaveNoACViolations('FluidComboBox'); + }); + + // Skipping now due to AVT violation, possible false positive + test.skip('@avt-advanced-states open', async ({ page }) => { + await visitStory(page, { + component: 'FluidComboBox', + id: 'experimental-unstable-fluidcombobox--default', + globals: { + theme: 'white', + }, + }); + const combobox = page.getByRole('combobox'); + + await expect(combobox).toBeVisible(); + // Tab and open the ComboBox + await page.keyboard.press('Tab'); + await expect(combobox).toBeFocused(); + await page.keyboard.press('Enter'); + await expect(page.getByRole('combobox', { expanded: true })).toBeVisible; + await expect(combobox).toBeFocused(); + + await expect(page).toHaveNoACViolations('FluidComboBox-open'); + }); + + test('@avt-keyboard-nav', async ({ page }) => { + await visitStory(page, { + component: 'FluidComboBox', + id: 'experimental-unstable-fluidcombobox--default', + globals: { + theme: 'white', + }, + }); + const combobox = page.getByRole('combobox'); + const menu = page.getByRole('listbox'); + const clearButton = page.getByRole('button', { + name: 'Clear selected item', + }); + const optionOne = page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + }); + const optionTwo = page.getByRole('option', { + name: 'Option 2', + }); + + await expect(combobox).toBeVisible(); + await expect(clearButton).not.toBeVisible(); + // Tab and open the ComboBox with Arrow Down + await page.keyboard.press('Tab'); + await expect(combobox).toBeFocused(); + await page.keyboard.press('ArrowDown'); + await expect(menu).toBeVisible(); + // Close with Escape, retain focus, and open with Spacebar + await page.keyboard.press('Escape'); + await expect(menu).not.toBeVisible(); + await expect(combobox).toBeFocused(); + await page.keyboard.press('Space'); + await expect(menu).toBeVisible(); + // Close and clear with Escape, retain focus, and open with Enter + await page.keyboard.press('Escape'); + await page.keyboard.press('Escape'); + await expect(menu).not.toBeVisible(); + await expect(combobox).toBeFocused(); + await page.keyboard.press('Enter'); + await expect(menu).toBeVisible(); + // Navigation inside the menu + // move to first option + await page.keyboard.press('ArrowDown'); + await expect(optionOne).toHaveClass( + 'cds--list-box__menu-item cds--list-box__menu-item--highlighted' + ); + // select first option (should only select with enter) + await page.keyboard.press('Space'); + await expect(combobox).toHaveValue(' '); + await page.keyboard.press('Enter'); + await expect(combobox).toHaveValue( + 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.' + ); + // focus comes back to the toggle button after selecting + await expect(combobox).toBeFocused(); + await expect(menu).not.toBeVisible(); + await expect(clearButton).toBeVisible(); + // should only clear selection when escape is pressed when the menu is closed + await page.keyboard.press('Escape'); + await expect(clearButton).not.toBeVisible(); + await expect(combobox).toHaveValue(''); + // should highlight menu items based on text input + await page.keyboard.press('2'); + await expect(menu).toBeVisible(); + await expect(optionTwo).toHaveClass( + 'cds--list-box__menu-item cds--list-box__menu-item--highlighted' + ); + // Should select and populate combobox with current filtered item + await page.keyboard.press('Enter'); + await expect(combobox).toHaveValue('Option 2'); }); }); diff --git a/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js b/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js index 36c7a9a3db1b..0391adf85450 100644 --- a/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js +++ b/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js @@ -1,5 +1,5 @@ /** - * Copyright IBM Corp. 2022 + * Copyright IBM Corp. 2016, 2023 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. @@ -19,6 +19,7 @@ test.describe('FluidDatePicker @avt', () => { theme: 'white', }, }); + await expect(page).toHaveNoACViolations('FluidDatePicker'); }); test('@avt-advanced-states single', async ({ page }) => { @@ -29,6 +30,7 @@ test.describe('FluidDatePicker @avt', () => { theme: 'white', }, }); + await expect(page).toHaveNoACViolations('FluidDatePicker-single'); }); test('@avt-advanced-states simple', async ({ page }) => { @@ -39,6 +41,80 @@ test.describe('FluidDatePicker @avt', () => { theme: 'white', }, }); - await expect(page).toHaveNoACViolations('FluidDatePicker'); + await expect(page).toHaveNoACViolations('FluidDatePicker-simple'); + }); + + test('@avt-advanced-states skeleton', async ({ page }) => { + await visitStory(page, { + component: 'FluidDatePicker', + id: 'experimental-unstable-fluiddatepicker--skeleton', + globals: { + theme: 'white', + }, + }); + await expect(page).toHaveNoACViolations('FluidDatePicker-skeleton'); + }); + + test('@avt-keyboard-nav single', async ({ page }) => { + await visitStory(page, { + component: 'FluidDatePicker', + id: 'experimental-unstable-fluiddatepicker--single', + globals: { + theme: 'white', + }, + }); + // for some reason the firs tab is not working to focus the first tabstop, so focusing manually + await page.getByRole('textbox', { name: 'Label' }).focus(); + await expect(page.getByRole('textbox', { name: 'Label' })).toBeFocused(); + await expect(page.locator('div.flatpickr-calendar')).toHaveClass(/open/); + await page.keyboard.press('ArrowDown'); + await expect(page.locator('span.today')).toBeFocused(); + await page.keyboard.press('Escape'); + await expect(page.getByRole('textbox', { name: 'Label' })).toBeFocused(); + await expect(page.locator('div.flatpickr-calendar')).not.toHaveClass( + /open/ + ); + }); + + test('@avt-keyboard-nav range', async ({ page }) => { + await visitStory(page, { + component: 'FluidDatePicker', + id: 'experimental-unstable-fluiddatepicker--range-with-calendar', + globals: { + theme: 'white', + }, + }); + + // for some reason the firs tab is not working to focus the first tabstop, so focusing manually + await page.locator('input#date-picker-input-id-start').focus(); + await expect( + page.locator('input#date-picker-input-id-start') + ).toBeFocused(); + await expect(page.locator('div.flatpickr-calendar')).toHaveClass(/open/); + await page.keyboard.press('ArrowDown'); + await expect(page.locator('span.today')).toBeFocused(); + await page.keyboard.press('Enter'); + await expect(page.locator('span.today')).toBeFocused(); + await expect(page.locator('div.flatpickr-calendar')).toHaveClass(/open/); + await page.keyboard.press('ArrowDown'); + await page.keyboard.press('Enter'); + await expect( + page.locator('input#date-picker-input-id-start') + ).toBeFocused(); + await expect(page.locator('div.flatpickr-calendar')).not.toHaveClass( + /open/ + ); + await page.keyboard.press('Tab'); + await expect( + page.locator('input#date-picker-input-id-finish') + ).toBeFocused(); + await expect(page.locator('div.flatpickr-calendar')).toHaveClass(/open/); + await page.keyboard.press('Escape'); + await expect( + page.locator('input#date-picker-input-id-start') + ).toBeFocused(); + await expect(page.locator('div.flatpickr-calendar')).not.toHaveClass( + /open/ + ); }); }); diff --git a/e2e/components/FluidMultiSelect/FluidMultiSelect-test.avt.e2e.js b/e2e/components/FluidMultiSelect/FluidMultiSelect-test.avt.e2e.js index 6d5e8ffc89e8..a72e416b4dd0 100644 --- a/e2e/components/FluidMultiSelect/FluidMultiSelect-test.avt.e2e.js +++ b/e2e/components/FluidMultiSelect/FluidMultiSelect-test.avt.e2e.js @@ -23,4 +23,216 @@ test.describe('FluidMultiSelect @avt', () => { 'FluidMultiSelect @avt-default-state' ); }); + + test('@avt-advanced-states condensed', async ({ page }) => { + await visitStory(page, { + component: 'FluidMultiSelect', + id: 'experimental-unstable-fluidmultiselect--condensed', + globals: { + theme: 'white', + }, + }); + await expect(page).toHaveNoACViolations('FluidMultiSelect-condensed'); + }); + + test('@avt-advanced-states skeleton', async ({ page }) => { + await visitStory(page, { + component: 'FluidMultiSelect', + id: 'experimental-unstable-fluidmultiselect--skeleton', + globals: { + theme: 'white', + }, + }); + await expect(page).toHaveNoACViolations('FluidMultiSelect-skeleton'); + }); + + test('@avt-keyboard-nav FluidMultiSelect', async ({ page }) => { + await visitStory(page, { + component: 'FluidMultiSelect', + id: 'experimental-unstable-fluidmultiselect--default', + globals: { + theme: 'white', + }, + }); + const toggleButton = page.getByRole('combobox', { + expanded: false, + }); + const selection = page.getByRole('button', { + name: 'Clear all selected items', + }); + const menu = page.getByRole('listbox'); + + await expect(toggleButton).toBeVisible(); + await expect(selection).not.toBeVisible(); + // Tab and open the MultiSelect with Arrow Down + await page.keyboard.press('Tab'); + await expect(toggleButton).toBeFocused(); + await page.keyboard.press('ArrowDown'); + await expect(menu).toBeVisible(); + // Close with Escape, retain focus, and open with Enter + await page.keyboard.press('Escape'); + await expect(menu).not.toBeVisible(); + await expect(toggleButton).toBeFocused(); + await page.keyboard.press('Enter'); + await expect(menu).toBeVisible(); + // Close with Escape, retain focus, and open with Spacebar + await page.keyboard.press('Escape'); + await expect(menu).not.toBeVisible(); + await expect(toggleButton).toBeFocused(); + await page.keyboard.press('Space'); + await expect(menu).toBeVisible(); + // Navigation inside the menu + // move to first option + await page.keyboard.press('ArrowDown'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + }) + ).toHaveClass( + 'cds--list-box__menu-item cds--list-box__menu-item--highlighted' + ); + // select first option (should select with enter and space) + await page.keyboard.press('Enter'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + selected: true, + }) + ).toBeVisible(); + await page.keyboard.press('Enter'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + selected: false, + }) + ).toBeVisible(); + await page.keyboard.press('Space'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + selected: true, + }) + ).toBeVisible(); + // move to second option + await page.keyboard.press('ArrowDown'); + await expect( + page.getByRole('option', { + name: 'Option 1', + }) + ).toHaveClass( + 'cds--list-box__menu-item cds--list-box__menu-item--highlighted' + ); + // select second option + await page.keyboard.press('Space'); + await expect( + page.getByRole('option', { + name: 'Option 1', + selected: true, + }) + ).toBeVisible(); + // focus comes back to the toggle button after closing + await page.keyboard.press('Escape'); + await expect(toggleButton).toBeFocused(); + // should show count of selected items when closed + await expect(menu).not.toBeVisible(); + await expect(selection).toBeVisible(); + // should only clear selection when escape is pressed when the menu is closed + await page.keyboard.press('Escape'); + await expect(selection).not.toBeVisible(); + }); + + test('@avt-keyboard-nav FluidMultiSelect condensed', async ({ page }) => { + await visitStory(page, { + component: 'FluidMultiSelect', + id: 'experimental-unstable-fluidmultiselect--condensed', + globals: { + theme: 'white', + }, + }); + const toggleButton = page.getByRole('combobox', { + expanded: false, + }); + const selection = page.getByRole('button', { + name: 'Clear all selected items', + }); + const menu = page.getByRole('listbox'); + + await expect(toggleButton).toBeVisible(); + await expect(selection).not.toBeVisible(); + // Tab and open the MultiSelect with Arrow Down + await page.keyboard.press('Tab'); + await expect(toggleButton).toBeFocused(); + await page.keyboard.press('ArrowDown'); + await expect(menu).toBeVisible(); + // Close with Escape, retain focus, and open with Enter + await page.keyboard.press('Escape'); + await expect(menu).not.toBeVisible(); + await expect(toggleButton).toBeFocused(); + await page.keyboard.press('Enter'); + await expect(menu).toBeVisible(); + // Close with Escape, retain focus, and open with Spacebar + await page.keyboard.press('Escape'); + await expect(menu).not.toBeVisible(); + await expect(toggleButton).toBeFocused(); + await page.keyboard.press('Space'); + await expect(menu).toBeVisible(); + // Navigation inside the menu + // move to first option + await page.keyboard.press('ArrowDown'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + }) + ).toHaveClass( + 'cds--list-box__menu-item cds--list-box__menu-item--highlighted' + ); + // select first option (should select with enter and space) + await page.keyboard.press('Enter'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + selected: true, + }) + ).toBeVisible(); + await page.keyboard.press('Enter'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + selected: false, + }) + ).toBeVisible(); + await page.keyboard.press('Space'); + await expect( + page.getByRole('option', { + name: 'Lorem, ipsum dolor sit amet consectetur adipisicing elit.', + selected: true, + }) + ).toBeVisible(); + // move to second option + await page.keyboard.press('ArrowDown'); + await expect( + page.getByRole('option', { + name: 'Option 1', + }) + ).toHaveClass( + 'cds--list-box__menu-item cds--list-box__menu-item--highlighted' + ); + // select second option + await page.keyboard.press('Space'); + await expect( + page.getByRole('option', { + name: 'Option 1', + selected: true, + }) + ).toBeVisible(); + // focus comes back to the toggle button after closing + await page.keyboard.press('Escape'); + await expect(toggleButton).toBeFocused(); + // should show count of selected items when closed + await expect(menu).not.toBeVisible(); + await expect(selection).toBeVisible(); + // should only clear selection when escape is pressed when the menu is closed + await page.keyboard.press('Escape'); + await expect(selection).not.toBeVisible(); + }); }); diff --git a/e2e/components/FluidTimePicker/FluidTimePicker-test.avt.e2e.js b/e2e/components/FluidTimePicker/FluidTimePicker-test.avt.e2e.js index c64bc38c63bf..d8add32441eb 100644 --- a/e2e/components/FluidTimePicker/FluidTimePicker-test.avt.e2e.js +++ b/e2e/components/FluidTimePicker/FluidTimePicker-test.avt.e2e.js @@ -23,4 +23,56 @@ test.describe('FluidTimePicker @avt', () => { 'FluidTimePicker @avt-default-state' ); }); + + test('@avt-advanced-states skeleton', async ({ page }) => { + await visitStory(page, { + component: 'FluidTimePicker', + id: 'experimental-unstable-fluidtimepicker--skeleton', + globals: { + theme: 'white', + }, + }); + await expect(page).toHaveNoACViolations('FluidTimePicker-skeleton'); + }); + + test('@avt-keyboard-nav TimePicker', async ({ page }) => { + await visitStory(page, { + component: 'TimePicker', + id: 'experimental-unstable-fluidtimepicker--default', + globals: { + theme: 'white', + }, + }); + + const inputTime = page.locator('#time-picker-1'); + await expect(inputTime).toBeVisible(); + await page.keyboard.press('Tab'); + + // Checking input time interaction + await expect(inputTime).toBeFocused(); + await inputTime.fill('11:45'); + await expect(inputTime).toHaveValue('11:45'); + + // Checking info icon + await page.keyboard.press('Tab'); + await expect(page.getByLabel('Show information').first()).toBeFocused(); + await page.keyboard.press('Enter'); + await expect( + page.getByLabel('Additional field information here.').first() + ).toBeVisible(); + + // Checking select time interaction + await page.keyboard.press('Tab'); + const selectTime = page.locator('#select-1'); + await page.keyboard.press('Space'); + await selectTime.selectOption('am'); + await expect(selectTime).toHaveValue('am'); + + // Checking select time zone interaction + await page.keyboard.press('Tab'); + const selectTimeZone = page.locator('#select-2'); + await page.keyboard.press('Space'); + await selectTimeZone.selectOption('et'); + await expect(selectTimeZone).toHaveValue('et'); + }); }); diff --git a/e2e/components/MultiSelect/MultiSelect-test.avt.e2e.js b/e2e/components/MultiSelect/MultiSelect-test.avt.e2e.js index c580386979d4..989a31d4accf 100644 --- a/e2e/components/MultiSelect/MultiSelect-test.avt.e2e.js +++ b/e2e/components/MultiSelect/MultiSelect-test.avt.e2e.js @@ -22,7 +22,7 @@ test.describe('MultiSelect @avt', () => { await expect(page).toHaveNoACViolations('MultiSelect'); }); - test('@avt-default-state filterable multiselect', async ({ page }) => { + test('@avt-advanced-states filterable multiselect', async ({ page }) => { await visitStory(page, { component: 'FilterableMultiSelect', id: 'components-multiselect--filterable', diff --git a/e2e/components/Notifications/Notifications-test.avt.e2e.js b/e2e/components/Notifications/Notifications-test.avt.e2e.js index 544f25fee4a6..4599edb420c6 100644 --- a/e2e/components/Notifications/Notifications-test.avt.e2e.js +++ b/e2e/components/Notifications/Notifications-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Notifications @avt', () => { - test('accessibility-checker Notifications actionable', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-actionable--default', @@ -51,9 +51,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable low contrast', async ({ - page, - }) => { + test('@avt-advanced-states actionable low contrast', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-actionable--default', @@ -69,9 +67,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable info', async ({ - page, - }) => { + test('@avt-advanced-states actionable info', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-actionable--playground', @@ -85,9 +81,7 @@ test.describe('Notifications @avt', () => { await expect(page).toHaveNoACViolations('Notifications actionable info'); }); - test('accessibility-checker Notifications actionable info-square', async ({ - page, - }) => { + test('@avt-advanced-states actionable info-square', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-actionable--playground', @@ -103,9 +97,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable success', async ({ - page, - }) => { + test('@avt-advanced-states actionable success', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-actionable--playground', @@ -119,9 +111,7 @@ test.describe('Notifications @avt', () => { await expect(page).toHaveNoACViolations('Notifications actionable success'); }); - test('accessibility-checker Notifications actionable warning', async ({ - page, - }) => { + test('@avt-advanced-states actionable warning', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-actionable--playground', @@ -135,9 +125,7 @@ test.describe('Notifications @avt', () => { await expect(page).toHaveNoACViolations('Notifications actionable warning'); }); - test('accessibility-checker Notifications actionable warning-alt', async ({ - page, - }) => { + test('@avt-advanced-states actionable warning-alt', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-actionable--playground', @@ -153,7 +141,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable info low contrast', async ({ + test('@avt-advanced-states actionable info low contrast', async ({ page, }) => { await visitStory(page, { @@ -172,7 +160,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable info-squar low contraste', async ({ + test('@avt-advanced-states actionable info-square low contrast', async ({ page, }) => { await visitStory(page, { @@ -191,7 +179,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable success low contrast', async ({ + test('@avt-advanced-states actionable success low contrast', async ({ page, }) => { await visitStory(page, { @@ -210,7 +198,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable warning low contrast', async ({ + test('@avt-advanced-states actionable warning low contrast', async ({ page, }) => { await visitStory(page, { @@ -229,7 +217,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications actionable warning-alt low contrast', async ({ + test('@avt-advanced-states actionable warning-alt low contrast', async ({ page, }) => { await visitStory(page, { @@ -248,7 +236,7 @@ test.describe('Notifications @avt', () => { ); }); - test('accessibility-checker Notifications inline', async ({ page }) => { + test('@avt-advanced-states inline', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-inline--default', @@ -259,7 +247,7 @@ test.describe('Notifications @avt', () => { await expect(page).toHaveNoACViolations('Notifications inline'); }); - test('accessibility-checker Notifications toast', async ({ page }) => { + test('@avt-advanced-states toast', async ({ page }) => { await visitStory(page, { component: 'Notifications', id: 'components-notifications-toast--default', diff --git a/e2e/components/NumberInput/NumberInput-test.avt.e2e.js b/e2e/components/NumberInput/NumberInput-test.avt.e2e.js index 40276f1fd69b..744126d06978 100644 --- a/e2e/components/NumberInput/NumberInput-test.avt.e2e.js +++ b/e2e/components/NumberInput/NumberInput-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('NumberInput @avt', () => { - test('accessibility-checker default', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'NumberInput', id: 'components-numberinput--default', @@ -22,7 +22,7 @@ test.describe('NumberInput @avt', () => { await expect(page).toHaveNoACViolations('components-numberinput--default'); }); - test('accessibility-checker skeleton', async ({ page }) => { + test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'NumberInput', id: 'components-numberinput--skeleton', @@ -33,7 +33,7 @@ test.describe('NumberInput @avt', () => { await expect(page).toHaveNoACViolations('components-numberinput--skeleton'); }); - test('number input - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'NumberInput', id: 'components-numberinput--default', diff --git a/e2e/components/OrderedList/OrderedList-test.avt.e2e.js b/e2e/components/OrderedList/OrderedList-test.avt.e2e.js index 15629ec67eaf..26033f929b89 100644 --- a/e2e/components/OrderedList/OrderedList-test.avt.e2e.js +++ b/e2e/components/OrderedList/OrderedList-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('OrderedList @avt', () => { - test('accessibility-checker default', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'OrderedList', id: 'components-orderedlist--default', @@ -22,7 +22,7 @@ test.describe('OrderedList @avt', () => { await expect(page).toHaveNoACViolations('components-orderedlist--default'); }); - test('accessibility-checker nested', async ({ page }) => { + test('@avt-advanced-states nested', async ({ page }) => { await visitStory(page, { component: 'OrderedList', id: 'components-orderedlist--nested', diff --git a/e2e/components/OverflowMenu/OverflowMenu-test.avt.e2e.js b/e2e/components/OverflowMenu/OverflowMenu-test.avt.e2e.js index a57df3b9971d..d40d7f769d58 100644 --- a/e2e/components/OverflowMenu/OverflowMenu-test.avt.e2e.js +++ b/e2e/components/OverflowMenu/OverflowMenu-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('OverflowMenu @avt', () => { - test('accessibility-checker', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'OverflowMenu', id: 'components-overflowmenu--default', @@ -22,7 +22,7 @@ test.describe('OverflowMenu @avt', () => { await expect(page).toHaveNoACViolations('OverflowMenu'); }); - test('accessibility-checker render custom icon', async ({ page }) => { + test('@avt-advanced-states render custom icon', async ({ page }) => { await visitStory(page, { component: 'OverflowMenu', id: 'components-overflowmenu--render-custom-icon', @@ -33,7 +33,7 @@ test.describe('OverflowMenu @avt', () => { await expect(page).toHaveNoACViolations('OverflowMenu-custom-icon'); }); - test('accessibility-checker open menu', async ({ page }) => { + test('@avt-advanced-states open menu', async ({ page }) => { await visitStory(page, { component: 'OverflowMenu', id: 'components-overflowmenu--default', @@ -53,7 +53,7 @@ test.describe('OverflowMenu @avt', () => { await expect(page).toHaveNoACViolations('OverflowMenu-open'); }); - test('accessibility-checker render custom icon open', async ({ page }) => { + test('@avt-advanced-states render custom icon open', async ({ page }) => { await visitStory(page, { component: 'OverflowMenu', id: 'components-overflowmenu--render-custom-icon', @@ -73,7 +73,7 @@ test.describe('OverflowMenu @avt', () => { await expect(page).toHaveNoACViolations('OverflowMenu-custom-icon-open'); }); - test('overflow-menu - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav overflow-menu', async ({ page }) => { await visitStory(page, { component: 'OverflowMenu', id: 'components-overflowmenu--default', diff --git a/e2e/components/Pagination/Pagination-test.avt.e2e.js b/e2e/components/Pagination/Pagination-test.avt.e2e.js index 5a5f216f99ba..391464a96793 100644 --- a/e2e/components/Pagination/Pagination-test.avt.e2e.js +++ b/e2e/components/Pagination/Pagination-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Pagination @avt', () => { - test('accessibility-checker default', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Pagination', id: 'components-pagination--default', @@ -22,7 +22,7 @@ test.describe('Pagination @avt', () => { await expect(page).toHaveNoACViolations('components-pagination--default'); }); - test('accessibility-checker multiple-pagination-components', async ({ + test('@avt-advanced-states multiple-pagination-components', async ({ page, }) => { await visitStory(page, { @@ -37,7 +37,7 @@ test.describe('Pagination @avt', () => { ); }); - test('pagination - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav - pagination', async ({ page }) => { await visitStory(page, { component: 'Pagination', id: 'components-pagination--default', diff --git a/e2e/components/ProgressBar/ProgressBar-test.avt.e2e.js b/e2e/components/ProgressBar/ProgressBar-test.avt.e2e.js index a638f54fc20b..c9e9abf66a04 100644 --- a/e2e/components/ProgressBar/ProgressBar-test.avt.e2e.js +++ b/e2e/components/ProgressBar/ProgressBar-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('ProgressBar @avt', () => { - test('accessibility-checker ProgressBar', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'ProgressBar', id: 'components-progressbar--default', @@ -22,7 +22,7 @@ test.describe('ProgressBar @avt', () => { await expect(page).toHaveNoACViolations('ProgressBar'); }); - test('accessibility-checker ProgressBar indeterminate', async ({ page }) => { + test('@avt-advanced-states ProgressBar indeterminate', async ({ page }) => { await visitStory(page, { component: 'ProgressBar', id: 'components-progressbar--indeterminate', @@ -33,7 +33,7 @@ test.describe('ProgressBar @avt', () => { await expect(page).toHaveNoACViolations('ProgressBar indeterminate'); }); - test('accessibility-checker ProgressBar example', async ({ page }) => { + test('@avt-advanced-states ProgressBar example', async ({ page }) => { await visitStory(page, { component: 'ProgressBar', id: 'components-progressbar--example', @@ -44,7 +44,7 @@ test.describe('ProgressBar @avt', () => { await expect(page).toHaveNoACViolations('ProgressBar example'); }); - test('accessibility-checker ProgressBar layer', async ({ page }) => { + test('@avt-advanced-states ProgressBar layer', async ({ page }) => { await visitStory(page, { component: 'ProgressBar', id: 'components-progressbar--with-layer', diff --git a/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js b/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js index 10feb86a78f7..3f6ee2dc1c59 100644 --- a/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js +++ b/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js @@ -10,7 +10,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); -test.describe('ProgressIndicator @avt', () => { +test.describe('ProgressIndicator', () => { test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', @@ -22,9 +22,7 @@ test.describe('ProgressIndicator @avt', () => { await expect(page).toHaveNoACViolations('ProgressIndicator'); }); - test('@avt-advanced-states interactive progressindicator', async ({ - page, - }) => { + test('@avt-advanced-states interactive', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', id: 'components-progressindicator--interactive', @@ -35,7 +33,7 @@ test.describe('ProgressIndicator @avt', () => { await expect(page).toHaveNoACViolations('ProgressIndicator-interactive'); }); - test('@avt-advanced-states skeleton progressindicator', async ({ page }) => { + test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', id: 'components-progressindicator--skeleton', @@ -46,7 +44,7 @@ test.describe('ProgressIndicator @avt', () => { await expect(page).toHaveNoACViolations('ProgressIndicator-skeleton'); }); - test('@avt-advanced-states onHover', async ({ page }) => { + test('@avt-advanced-states - onHover', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', id: 'components-progressindicator--default', @@ -62,7 +60,7 @@ test.describe('ProgressIndicator @avt', () => { await expect(page).toHaveNoACViolations('ProgressIndicator-onhover'); }); - test('@avt-advanced-states complete', async ({ page }) => { + test('@avt-advanced-states - complete', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', id: 'components-progressindicator--default', @@ -75,7 +73,7 @@ test.describe('ProgressIndicator @avt', () => { expect(page.locator('.cds--progress-step--complete')).toBeTruthy(); }); - test('@avt-advanced-states current', async ({ page }) => { + test('@avt-advanced-states', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', id: 'components-progressindicator--default', @@ -88,7 +86,7 @@ test.describe('ProgressIndicator @avt', () => { expect(page.locator('.cds--progress-step--current')).toBeTruthy(); }); - test('@avt-advanced-states interactive onHover', async ({ page }) => { + test('@avt-advanced-states - interactive onHover', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', id: 'components-progressindicator--interactive', @@ -106,7 +104,7 @@ test.describe('ProgressIndicator @avt', () => { ); }); - test('@avt-keyboard-nav', async ({ page }) => { + test('@avt-keyboard-nav progress indicator', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', id: 'components-progressindicator--interactive', diff --git a/e2e/components/RadioButton/RadioButton-test.avt.e2e.js b/e2e/components/RadioButton/RadioButton-test.avt.e2e.js index f020a26e8b94..6a109bbf0335 100644 --- a/e2e/components/RadioButton/RadioButton-test.avt.e2e.js +++ b/e2e/components/RadioButton/RadioButton-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('RadioButton @avt', () => { - test('accessibility-checker', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'RadioButton', id: 'components-radiobutton--default', @@ -22,7 +22,7 @@ test.describe('RadioButton @avt', () => { await expect(page).toHaveNoACViolations('RadioButton'); }); - test('accessibility-checker - skeleton', async ({ page }) => { + test('@avt-advanced-states - skeleton', async ({ page }) => { await visitStory(page, { component: 'RadioButton', id: 'components-radiobutton--skeleton', @@ -33,7 +33,7 @@ test.describe('RadioButton @avt', () => { await expect(page).toHaveNoACViolations('RadioButton-skeleton'); }); - test('accessibility-checker - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'RadioButton', id: 'components-radiobutton--default', @@ -48,7 +48,7 @@ test.describe('RadioButton @avt', () => { await expect(page.locator('input#radio-2')).toBeChecked(); }); - test('accessibility-checker - invalid state', async ({ page }) => { + test('@avt-advanced-states - invalid state', async ({ page }) => { await visitStory(page, { component: 'RadioButton', id: 'components-radiobutton--playground', @@ -65,7 +65,7 @@ test.describe('RadioButton @avt', () => { await expect(page).toHaveNoACViolations('RadioButton-invalid'); }); - test('accessibility-checker - warn state', async ({ page }) => { + test('@avt-advanced-states - warn state', async ({ page }) => { await visitStory(page, { component: 'RadioButton', id: 'components-radiobutton--playground', @@ -82,7 +82,7 @@ test.describe('RadioButton @avt', () => { await expect(page).toHaveNoACViolations('RadioButton-warn'); }); - test('accessibility-checker - disabled state', async ({ page }) => { + test('@avt-advanced-states - disabled state', async ({ page }) => { await visitStory(page, { component: 'RadioButton', id: 'components-radiobutton--playground', @@ -98,7 +98,7 @@ test.describe('RadioButton @avt', () => { await expect(page).toHaveNoACViolations('RadioButton-disabled'); }); - test('accessibility-checker - read only state', async ({ page }) => { + test('@avt-advanced-states - read only state', async ({ page }) => { await visitStory(page, { component: 'RadioButton', id: 'components-radiobutton--playground', diff --git a/e2e/components/Search/Search-test.avt.e2e.js b/e2e/components/Search/Search-test.avt.e2e.js index 1a0a690bb867..5ccce813640b 100644 --- a/e2e/components/Search/Search-test.avt.e2e.js +++ b/e2e/components/Search/Search-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Search @avt', () => { - test('accessibility-checker', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Search', id: 'components-search--default', @@ -22,7 +22,7 @@ test.describe('Search @avt', () => { await expect(page).toHaveNoACViolations('components-search--default'); }); - test('accessibility-checker expandable', async ({ page }) => { + test('@avt-advanced-states expandable', async ({ page }) => { await visitStory(page, { component: 'Search', id: 'components-search--expandable', @@ -33,7 +33,7 @@ test.describe('Search @avt', () => { await expect(page).toHaveNoACViolations('components-search--expandable'); }); - test('search - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav - search', async ({ page }) => { await visitStory(page, { component: 'Search', id: 'components-search--default', @@ -67,7 +67,7 @@ test.describe('Search @avt', () => { await expect(search).toBeFocused(); }); - test('expandable search - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav - expandable search', async ({ page }) => { await visitStory(page, { component: 'Search', id: 'components-search--expandable', diff --git a/e2e/components/Select/Select-test.avt.e2e.js b/e2e/components/Select/Select-test.avt.e2e.js index 100ec4c6f45e..44f92f172245 100644 --- a/e2e/components/Select/Select-test.avt.e2e.js +++ b/e2e/components/Select/Select-test.avt.e2e.js @@ -10,8 +10,8 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); -test.describe('Select @avt', () => { - test('accessibility-checker default', async ({ page }) => { +test.describe('Select @avt', () => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Select', id: 'components-select--default', @@ -22,7 +22,7 @@ test.describe('Select @avt', () => { await expect(page).toHaveNoACViolations('components-select--default'); }); - test('accessibility-checker inline', async ({ page }) => { + test('@avt-advanced-states inline', async ({ page }) => { await visitStory(page, { component: 'Select', id: 'components-select--inline', @@ -33,7 +33,7 @@ test.describe('Select @avt', () => { await expect(page).toHaveNoACViolations('components-select--inline'); }); - test('accessibility-checker skeleton', async ({ page }) => { + test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'Select', id: 'components-select--skeleton', @@ -44,7 +44,7 @@ test.describe('Select @avt', () => { await expect(page).toHaveNoACViolations('components-select--skeleton'); }); - test('select - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'Select', id: 'components-select--default', diff --git a/e2e/components/Slider/Slider-test.avt.e2e.js b/e2e/components/Slider/Slider-test.avt.e2e.js index 5cc3467ae7be..12d93947f476 100644 --- a/e2e/components/Slider/Slider-test.avt.e2e.js +++ b/e2e/components/Slider/Slider-test.avt.e2e.js @@ -11,9 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Slider @avt', () => { - test('accessibility-checker @avt - Slider default state', async ({ - page, - }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-slider--default', @@ -24,7 +22,7 @@ test.describe('Slider @avt', () => { await expect(page).toHaveNoACViolations('Slider'); }); - test('accessibility-checker controlled slider', async ({ page }) => { + test('@avt-advanced-states controlled slider', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-slider--controlled-slider', @@ -35,7 +33,7 @@ test.describe('Slider @avt', () => { await expect(page).toHaveNoACViolations('Slider-controlled'); }); - test('accessibility-checker controlled slider with layer', async ({ + test('@avt-advanced-states controlled slider with layer', async ({ page, }) => { await visitStory(page, { @@ -50,7 +48,7 @@ test.describe('Slider @avt', () => { ); }); - test('accessibility-checker two handle slider', async ({ page }) => { + test('@avt-advanced-states two handle slider', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-slider--two-handle-slider', @@ -61,7 +59,7 @@ test.describe('Slider @avt', () => { await expect(page).toHaveNoACViolations('Slider-two-handle-slider'); }); - test('accessibility-checker skeleton', async ({ page }) => { + test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-slider--skeleton', @@ -72,7 +70,7 @@ test.describe('Slider @avt', () => { await expect(page).toHaveNoACViolations('Slider-skeleton'); }); - test('accessibility-checker two handle skeleton', async ({ page }) => { + test('@avt-advanced-states two handle skeleton', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-slider--two-handle-skeleton', @@ -83,7 +81,7 @@ test.describe('Slider @avt', () => { await expect(page).toHaveNoACViolations('Slider-two-handle-skeleton'); }); - test('accessibility-checker slider with layer', async ({ page }) => { + test('@avt-advanced-states slider with layer', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-slider--with-layer', @@ -95,7 +93,7 @@ test.describe('Slider @avt', () => { }); // Prevent timeout - test.slow('default state - keyboard nav', async ({ page }) => { + test.slow('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-slider--default', diff --git a/e2e/components/StructuredList/StructuredList-test.avt.e2e.js b/e2e/components/StructuredList/StructuredList-test.avt.e2e.js index 7746b9c9d3c6..f4f1e0a28261 100644 --- a/e2e/components/StructuredList/StructuredList-test.avt.e2e.js +++ b/e2e/components/StructuredList/StructuredList-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('StructuredList @avt', () => { - test('accessibility-checker', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'StructuredList', id: 'components-structuredlist--default', @@ -22,7 +22,7 @@ test.describe('StructuredList @avt', () => { await expect(page).toHaveNoACViolations('StructuredList'); }); - test('accessibility-checker selection', async ({ page }) => { + test('@avt-advanced-states selection', async ({ page }) => { await visitStory(page, { component: 'StructuredList', id: 'components-structuredlist--selection', @@ -33,7 +33,7 @@ test.describe('StructuredList @avt', () => { await expect(page).toHaveNoACViolations('StructuredList-selection'); }); - test('accessibility-checker skeleton', async ({ page }) => { + test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'StructuredList', id: 'components-structuredlist--skeleton', @@ -44,7 +44,7 @@ test.describe('StructuredList @avt', () => { await expect(page).toHaveNoACViolations('StructuredList-skeleton'); }); - test('accessibility-checker keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'StructuredList', id: 'components-structuredlist--selection', @@ -67,7 +67,7 @@ test.describe('StructuredList @avt', () => { await expect(page).toHaveNoACViolations('StructuredList-keyboardnav'); }); - test('accessibility-checker mouse interaction', async ({ page }) => { + test('@avt-keyboard-nav mouse interaction', async ({ page }) => { await visitStory(page, { component: 'StructuredList', id: 'components-structuredlist--selection', diff --git a/e2e/components/Tabs/Tabs-test.avt.e2e.js b/e2e/components/Tabs/Tabs-test.avt.e2e.js index 948be56ce6e2..ba4c68d68932 100644 --- a/e2e/components/Tabs/Tabs-test.avt.e2e.js +++ b/e2e/components/Tabs/Tabs-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Tabs @avt', () => { - test('accessibility-checker @avt - Tabs default state', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--default', @@ -22,7 +22,7 @@ test.describe('Tabs @avt', () => { await expect(page).toHaveNoACViolations('Tabs'); }); - test('accessibility-checker tabs contained', async ({ page }) => { + test('@avt-advanced-states tabs contained', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--contained', @@ -33,7 +33,7 @@ test.describe('Tabs @avt', () => { await expect(page).toHaveNoACViolations('Tabs-contained'); }); - test('accessibility-checker tabs contained with icons', async ({ page }) => { + test('@avt-advanced-states tabs contained with icons', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--contained-with-icons', @@ -44,7 +44,7 @@ test.describe('Tabs @avt', () => { await expect(page).toHaveNoACViolations('Tabs-contained-with-icons'); }); - test('accessibility-checker tabs contained with secondary labels', async ({ + test('@avt-advanced-states tabs contained with secondary labels', async ({ page, }) => { await visitStory(page, { @@ -59,9 +59,7 @@ test.describe('Tabs @avt', () => { ); }); - test('accessibility-checker tabs dismissable with icons', async ({ - page, - }) => { + test('@avt-advanced-states tabs dismissable with icons', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--dismissable-with-icons', @@ -72,7 +70,7 @@ test.describe('Tabs @avt', () => { await expect(page).toHaveNoACViolations('Tabs--dismissable-with-icons'); }); - test('accessibility-checker tabs icon 20 only', async ({ page }) => { + test('@avt-advanced-states tabs icon 20 only', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--icon-20-only', @@ -83,7 +81,7 @@ test.describe('Tabs @avt', () => { await expect(page).toHaveNoACViolations('Tabs--icon-20-only'); }); - test('accessibility-checker tabs manual', async ({ page }) => { + test('@avt-advanced-states tabs manual', async ({ page }) => { await visitStory(page, { component: 'Slider', id: 'components-tabs--manual', @@ -94,7 +92,7 @@ test.describe('Tabs @avt', () => { await expect(page).toHaveNoACViolations('Tabs--manual'); }); - test('accessibility-checker tabs skeleton', async ({ page }) => { + test('@avt-advanced-states tabs skeleton', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--skeleton', @@ -105,7 +103,7 @@ test.describe('Tabs @avt', () => { await expect(page).toHaveNoACViolations('Tabs-skeleton'); }); - test.slow('default state - keyboard nav', async ({ page }) => { + test.slow('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--default', @@ -152,7 +150,7 @@ test.describe('Tabs @avt', () => { await expect(page.getByRole('tab', { name: 'Tab label 4' })).toBeFocused(); }); - test.slow('dismissable state - keyboard nav', async ({ page }) => { + test.slow('@avt-keyboard-nav - dismissable state', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-tabs--dismissable', diff --git a/e2e/components/TextArea/TextArea-test.avt.e2e.js b/e2e/components/TextArea/TextArea-test.avt.e2e.js index 6ccba15fd2ab..6d7215369932 100644 --- a/e2e/components/TextArea/TextArea-test.avt.e2e.js +++ b/e2e/components/TextArea/TextArea-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('TextArea @avt', () => { - test('accessibility-checker TextArea', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'TextArea', id: 'components-textarea--default', @@ -22,7 +22,7 @@ test.describe('TextArea @avt', () => { await expect(page).toHaveNoACViolations('TextArea'); }); - test('accessibility-checker TextArea invalid', async ({ page }) => { + test('@avt-advanced-states invalid', async ({ page }) => { await visitStory(page, { component: 'TextArea', id: 'components-textarea--playground', @@ -36,7 +36,7 @@ test.describe('TextArea @avt', () => { await expect(page).toHaveNoACViolations('TextArea invalid'); }); - test('accessibility-checker TextArea warn', async ({ page }) => { + test('@avt-advanced-states warn', async ({ page }) => { await visitStory(page, { component: 'TextArea', id: 'components-textarea--playground', @@ -50,7 +50,7 @@ test.describe('TextArea @avt', () => { await expect(page).toHaveNoACViolations('TextArea warn'); }); - test('accessibility-checker TextArea skeleton', async ({ page }) => { + test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'TextArea', id: 'components-textarea--skeleton', @@ -61,7 +61,7 @@ test.describe('TextArea @avt', () => { await expect(page).toHaveNoACViolations('TextArea skeleton'); }); - test('accessibility-checker TextArea keyboard counter', async ({ page }) => { + test('@avt-keyboard-nav TextArea keyboard counter', async ({ page }) => { await visitStory(page, { component: 'TextArea', id: 'components-textarea--playground', diff --git a/e2e/components/TextInput/TextInput-test.avt.e2e.js b/e2e/components/TextInput/TextInput-test.avt.e2e.js index 3b351447aa2b..0b3aa029ae08 100644 --- a/e2e/components/TextInput/TextInput-test.avt.e2e.js +++ b/e2e/components/TextInput/TextInput-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('TextInput @avt', () => { - test('default state', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'TextInput', id: 'components-textinput--default', @@ -22,7 +22,7 @@ test.describe('TextInput @avt', () => { await expect(page).toHaveNoACViolations('TextInput'); }); - test('disabled state', async ({ page }) => { + test('@avt-advanced-states - disabled', async ({ page }) => { await visitStory(page, { component: 'TextInput', id: 'components-textinput--playground', @@ -38,7 +38,7 @@ test.describe('TextInput @avt', () => { await expect(page).toHaveNoACViolations('TextInput-Disabled'); }); - test('accessibility-checker keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'TextInput', id: 'components-textinput--default', @@ -60,7 +60,7 @@ test.describe('TextInput @avt', () => { await expect(input).toHaveValue('Tex'); }); - test('accessibility-checker keyboard nav for password', async ({ page }) => { + test('@avt-keyboard-nav for password', async ({ page }) => { await visitStory(page, { component: 'TextInput', id: 'components-textinput--toggle-password-visibility', diff --git a/e2e/components/Tile/Tile-test.avt.e2e.js b/e2e/components/Tile/Tile-test.avt.e2e.js index 69eb217b2485..5ff8dc9f190b 100644 --- a/e2e/components/Tile/Tile-test.avt.e2e.js +++ b/e2e/components/Tile/Tile-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Tile @avt', () => { - test('Tile default state', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Tile', id: 'components-tile--default', @@ -22,7 +22,7 @@ test.describe('Tile @avt', () => { await expect(page).toHaveNoACViolations('Tile'); }); - test('ClickableTile default state', async ({ page }) => { + test('ClickableTile @avt-default-state', async ({ page }) => { await visitStory(page, { component: 'ClickableTile', id: 'components-tile--clickable', @@ -33,7 +33,7 @@ test.describe('Tile @avt', () => { await expect(page).toHaveNoACViolations('ClickableTile'); }); - test('ExpandableTile default state', async ({ page }) => { + test('ExpandableTile @avt-default-state', async ({ page }) => { await visitStory(page, { component: 'ExpandableTile', id: 'components-tile--expandable', @@ -44,7 +44,7 @@ test.describe('Tile @avt', () => { await expect(page).toHaveNoACViolations('ExpandableTile'); }); - test('SelectableTile default state', async ({ page }) => { + test('SelectableTile @avt-default-state', async ({ page }) => { await visitStory(page, { component: 'SelectableTile', id: 'components-tile--selectable', @@ -55,7 +55,7 @@ test.describe('Tile @avt', () => { await expect(page).toHaveNoACViolations('SelectableTile'); }); - test('SelectableTile multi-select default state', async ({ page }) => { + test('SelectableTile multi-select @avt-default-state', async ({ page }) => { await visitStory(page, { component: 'SelectableTile', id: 'components-tile--multi-select', @@ -66,7 +66,7 @@ test.describe('Tile @avt', () => { await expect(page).toHaveNoACViolations('SelectableTile multi-select'); }); - test('RadioTile default state', async ({ page }) => { + test('RadioTile @avt-default-state', async ({ page }) => { await visitStory(page, { component: 'RadioTile', id: 'components-tile--radio', @@ -77,7 +77,7 @@ test.describe('Tile @avt', () => { await expect(page).toHaveNoACViolations('RadioTile'); }); - test('ClickableTile disabled state', async ({ page }) => { + test('ClickableTile - @avt-advanced-states', async ({ page }) => { await visitStory(page, { component: 'Tile', id: 'components-tile--clickable', @@ -92,7 +92,7 @@ test.describe('Tile @avt', () => { await expect(page).toHaveNoACViolations('ClickableTile-Disabled'); }); - test('ExpandableTile keyboard expanded state', async ({ page }) => { + test('ExpandableTile - @avt-advanced-states', async ({ page }) => { await visitStory(page, { component: 'ExpandableTile', id: 'components-tile--expandable', @@ -109,7 +109,7 @@ test.describe('Tile @avt', () => { ); }); - test('SelectableTile keyboard', async ({ page }) => { + test('SelectableTile @avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'SelectableTile', id: 'components-tile--selectable', @@ -126,7 +126,7 @@ test.describe('Tile @avt', () => { ); }); - test('RadioTile keyboard', async ({ page }) => { + test('RadioTile @avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'RadioTile', id: 'components-tile--radio', diff --git a/e2e/components/Toggle/Toggle-test.avt.e2e.js b/e2e/components/Toggle/Toggle-test.avt.e2e.js index ceca317d4413..84442569a74c 100644 --- a/e2e/components/Toggle/Toggle-test.avt.e2e.js +++ b/e2e/components/Toggle/Toggle-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Toggle @avt', () => { - test('accessibility-checker', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Toggle', id: 'components-toggle--default', @@ -22,7 +22,7 @@ test.describe('Toggle @avt', () => { await expect(page).toHaveNoACViolations('Toggle'); }); - test('accessibility-checker skeleton', async ({ page }) => { + test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-toggle--skeleton', @@ -33,7 +33,7 @@ test.describe('Toggle @avt', () => { await expect(page).toHaveNoACViolations('Toggle-skeleton'); }); - test('accessibility-checker small toggle', async ({ page }) => { + test('@avt-advanced-states small toggle', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-toggle--small-toggle', @@ -44,7 +44,7 @@ test.describe('Toggle @avt', () => { await expect(page).toHaveNoACViolations('Toggle-small'); }); - test('accessibility-checker with accessible labels', async ({ page }) => { + test('@avt-advanced-states with accessible labels', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-toggle--with-accessible-labels', @@ -55,7 +55,7 @@ test.describe('Toggle @avt', () => { await expect(page).toHaveNoACViolations('Toggle-accessible-labels'); }); - test('default Toggle state - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav - keyboard nav', async ({ page }) => { await visitStory(page, { component: 'Tabs', id: 'components-toggle--default', diff --git a/e2e/components/Tooltip/Tooltip-test.avt.e2e.js b/e2e/components/Tooltip/Tooltip-test.avt.e2e.js index cf238a6857cd..95dfa3059f35 100644 --- a/e2e/components/Tooltip/Tooltip-test.avt.e2e.js +++ b/e2e/components/Tooltip/Tooltip-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('Tooltip @avt', () => { - test('accessibility-checker - tooltip default', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'Tooltip', id: 'components-tooltip--default', @@ -22,7 +22,7 @@ test.describe('Tooltip @avt', () => { await expect(page).toHaveNoACViolations('Tooltip'); }); - test('accessibility-checker - tooltip alignment', async ({ page }) => { + test('@avt-advanced-states - tooltip alignment', async ({ page }) => { await visitStory(page, { component: 'Tooltip', id: 'components-tooltip--alignment', @@ -33,7 +33,7 @@ test.describe('Tooltip @avt', () => { await expect(page).toHaveNoACViolations('Tooltip - alignment'); }); - test('accessibility-checker - tooltip duration', async ({ page }) => { + test('@avt-advanced-states - tooltip duration', async ({ page }) => { await visitStory(page, { component: 'Tooltip', id: 'components-tooltip--duration', @@ -45,7 +45,7 @@ test.describe('Tooltip @avt', () => { }); // Prevent timeout - test.slow('tooltip default - keyboard nav', async ({ page }) => { + test.slow('tooltip default - @avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'Tooltip', id: 'components-tooltip--default', diff --git a/e2e/components/TreeView/TreeView-test.avt.e2e.js b/e2e/components/TreeView/TreeView-test.avt.e2e.js index d468c727e059..1e12d685226d 100644 --- a/e2e/components/TreeView/TreeView-test.avt.e2e.js +++ b/e2e/components/TreeView/TreeView-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('TreeView @avt', () => { - test('accessibility-checker default', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'TreeView', id: 'components-treeview--default', @@ -22,7 +22,7 @@ test.describe('TreeView @avt', () => { await expect(page).toHaveNoACViolations('components-treeview--default'); }); - test('accessibility-checker with-icons', async ({ page }) => { + test('@avt-advanced-states with-icons', async ({ page }) => { await visitStory(page, { component: 'TreeView', id: 'components-treeview--with-icons', @@ -33,7 +33,7 @@ test.describe('TreeView @avt', () => { await expect(page).toHaveNoACViolations('components-treeview--with-icons'); }); - test('treeview - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav', async ({ page }) => { await visitStory(page, { component: 'TreeView', id: 'components-treeview--with-icons', diff --git a/e2e/components/UIShell/UIShell-test.avt.e2e.js b/e2e/components/UIShell/UIShell-test.avt.e2e.js index bce6d2bdb829..5a7df84be13b 100644 --- a/e2e/components/UIShell/UIShell-test.avt.e2e.js +++ b/e2e/components/UIShell/UIShell-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('UIShell @avt', () => { - test('header', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'UIShell', id: 'components-ui-shell-header--header-w-navigation', @@ -22,7 +22,7 @@ test.describe('UIShell @avt', () => { await expect(page).toHaveNoACViolations('UIShell'); }); - test('sidenav rail w/header', async ({ page }) => { + test('@avt-advanced-states sidenav rail w/header', async ({ page }) => { await visitStory(page, { component: 'UIShell', id: 'components-ui-shell-sidenav--side-nav-rail-w-header', @@ -33,7 +33,7 @@ test.describe('UIShell @avt', () => { await expect(page).toHaveNoACViolations('UIShell-side-nav-rail-w-header'); }); - test('sidenav rail w/header - expanded state open category sidenav', async ({ + test('@avt-advanced-states sidenav rail w/header - expanded state open category sidenav', async ({ page, }) => { await visitStory(page, { @@ -59,7 +59,7 @@ test.describe('UIShell @avt', () => { ); }); - test('sidenav rail w/header - expanded state header link', async ({ + test('@avt-advanced-states sidenav rail w/header - expanded state header link', async ({ page, }) => { await visitStory(page, { @@ -80,7 +80,7 @@ test.describe('UIShell @avt', () => { ); }); - test('sidenav rail w/header - keyboard nav', async ({ page }) => { + test('@avt-keyboard-nav sidenav rail w/header', async ({ page }) => { await visitStory(page, { component: 'UIShell', id: 'components-ui-shell-sidenav--side-nav-rail-w-header', diff --git a/e2e/components/UnorderedList/UnorderedList-test.avt.e2e.js b/e2e/components/UnorderedList/UnorderedList-test.avt.e2e.js index 4d24151233c2..35cc30f069b3 100644 --- a/e2e/components/UnorderedList/UnorderedList-test.avt.e2e.js +++ b/e2e/components/UnorderedList/UnorderedList-test.avt.e2e.js @@ -11,7 +11,7 @@ const { expect, test } = require('@playwright/test'); const { visitStory } = require('../../test-utils/storybook'); test.describe('UnorderedList @avt', () => { - test('accessibility-checker default', async ({ page }) => { + test('@avt-default-state', async ({ page }) => { await visitStory(page, { component: 'UnorderedList', id: 'components-unorderedlist--default', @@ -24,7 +24,7 @@ test.describe('UnorderedList @avt', () => { ); }); - test('accessibility-checker nested', async ({ page }) => { + test('@avt-advanced-states nested', async ({ page }) => { await visitStory(page, { component: 'UnorderedList', id: 'components-unorderedlist--nested', diff --git a/examples/class-prefix/package.json b/examples/class-prefix/package.json index 9047eadd4f45..f0689049bdbb 100644 --- a/examples/class-prefix/package.json +++ b/examples/class-prefix/package.json @@ -1,7 +1,7 @@ { "name": "class-prefix", "private": true, - "version": "0.39.0", + "version": "0.40.0-rc.0", "type": "module", "scripts": { "dev": "vite", @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/codesandbox-styles/package.json b/examples/codesandbox-styles/package.json index cff9c9f205be..5c089b3571a9 100644 --- a/examples/codesandbox-styles/package.json +++ b/examples/codesandbox-styles/package.json @@ -1,7 +1,7 @@ { "name": "codesandbox-styles", "private": true, - "version": "0.45.0", + "version": "0.46.0-rc.0", "type": "module", "scripts": { "dev": "vite" @@ -11,6 +11,6 @@ "vite": "^4.3.8" }, "dependencies": { - "@carbon/styles": "^1.42.0" + "@carbon/styles": "^1.43.0-rc.0" } } diff --git a/examples/custom-theme/package.json b/examples/custom-theme/package.json index 3905cfc7ab86..d8742022e221 100644 --- a/examples/custom-theme/package.json +++ b/examples/custom-theme/package.json @@ -1,7 +1,7 @@ { "name": "custom-theme", "private": true, - "version": "0.40.0", + "version": "0.41.0-rc.0", "type": "module", "scripts": { "dev": "vite", @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/id-prefix/package.json b/examples/id-prefix/package.json index 6fd278779cb3..96597d0166b6 100644 --- a/examples/id-prefix/package.json +++ b/examples/id-prefix/package.json @@ -1,7 +1,7 @@ { "name": "id-prefix", "private": true, - "version": "0.39.0", + "version": "0.40.0-rc.0", "type": "module", "scripts": { "dev": "vite", @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/incremental-migration-vite/package.json b/examples/incremental-migration-vite/package.json index f8071023d1db..c68fab024553 100644 --- a/examples/incremental-migration-vite/package.json +++ b/examples/incremental-migration-vite/package.json @@ -1,7 +1,7 @@ { "name": "incremental-migration-vite", "private": true, - "version": "0.7.0", + "version": "0.8.0-rc.0", "scripts": { "dev": "vite", "build": "vite build", @@ -12,7 +12,7 @@ }, "dependencies": { "@carbon/icons-react": "^10.49.0", - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "carbon-components": "^10.57.0", "carbon-components-react": "^7.57.0", "carbon-icons": "^7.0.7", diff --git a/examples/light-dark-mode/package.json b/examples/light-dark-mode/package.json index f50d43895630..e9de942ebc05 100644 --- a/examples/light-dark-mode/package.json +++ b/examples/light-dark-mode/package.json @@ -1,7 +1,7 @@ { "name": "examples-light-dark", "private": true, - "version": "0.40.0", + "version": "0.41.0-rc.0", "scripts": { "build": "next build", "dev": "next dev", @@ -9,7 +9,7 @@ "start": "next start" }, "dependencies": { - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "next": "12.1.4", "react": "18.2.0", "react-dom": "18.2.0" diff --git a/examples/nextjs/package.json b/examples/nextjs/package.json index 99cf97b341cd..b956e050a6a5 100644 --- a/examples/nextjs/package.json +++ b/examples/nextjs/package.json @@ -1,7 +1,7 @@ { "name": "examples-nextjs", "private": true, - "version": "0.42.0", + "version": "0.43.0-rc.0", "scripts": { "build": "next build", "dev": "next dev", @@ -9,7 +9,7 @@ "start": "next start" }, "dependencies": { - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "next": "13.5.6", "react": "18.2.0", "react-dom": "18.2.0" diff --git a/examples/v10-token-compat-in-v11/package.json b/examples/v10-token-compat-in-v11/package.json index 35a05c1fcf52..4695867ef5c8 100644 --- a/examples/v10-token-compat-in-v11/package.json +++ b/examples/v10-token-compat-in-v11/package.json @@ -1,7 +1,7 @@ { "name": "v10-token-compat-in-v11", "private": true, - "version": "0.40.0", + "version": "0.41.0-rc.0", "type": "module", "scripts": { "dev": "vite", @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/vite/package.json b/examples/vite/package.json index 94c5fb62aed2..70ac2b514ae1 100644 --- a/examples/vite/package.json +++ b/examples/vite/package.json @@ -1,7 +1,7 @@ { "name": "vite", "private": true, - "version": "0.40.0", + "version": "0.41.0-rc.0", "type": "module", "scripts": { "dev": "vite", @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@carbon/react": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/carbon-components-react/package.json b/packages/carbon-components-react/package.json index a82907da2d92..b15ca589ed54 100644 --- a/packages/carbon-components-react/package.json +++ b/packages/carbon-components-react/package.json @@ -1,7 +1,7 @@ { "name": "carbon-components-react", "description": "The Carbon Design System is IBM’s open-source design system for products and experiences.", - "version": "8.42.0", + "version": "8.43.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", @@ -41,8 +41,8 @@ "sass": "^1.33.0" }, "dependencies": { - "@carbon/react": "^1.42.0", - "@carbon/styles": "^1.42.0", + "@carbon/react": "^1.43.0-rc.0", + "@carbon/styles": "^1.43.0-rc.0", "@carbon/telemetry": "0.1.0", "chalk": "1.1.3" }, diff --git a/packages/carbon-components-react/scss/utilities/_ai-gradient.scss b/packages/carbon-components-react/scss/utilities/_ai-gradient.scss new file mode 100644 index 000000000000..0ad5c4f89ee5 --- /dev/null +++ b/packages/carbon-components-react/scss/utilities/_ai-gradient.scss @@ -0,0 +1,9 @@ +// Code generated by carbon-components-react. DO NOT EDIT. +// +// Copyright IBM Corp. 2018, 2023 +// +// This source code is licensed under the Apache-2.0 license found in the +// LICENSE file in the root directory of this source tree. +// + +@forward '@carbon/styles/scss/utilities/ai-gradient'; diff --git a/packages/carbon-components/package.json b/packages/carbon-components/package.json index 4b8bccc44b06..63aca0ff62e2 100644 --- a/packages/carbon-components/package.json +++ b/packages/carbon-components/package.json @@ -1,7 +1,7 @@ { "name": "carbon-components", "description": "The Carbon Design System is IBM’s open-source design system for products and experiences.", - "version": "11.42.0", + "version": "11.43.0-rc.0", "license": "Apache-2.0", "repository": { "type": "git", @@ -42,7 +42,7 @@ "sass": "^1.33.0" }, "dependencies": { - "@carbon/styles": "^1.42.0", + "@carbon/styles": "^1.43.0-rc.0", "@carbon/telemetry": "0.1.0", "chalk": "1.1.3" }, diff --git a/packages/carbon-components/scss/utilities/_ai-gradient.scss b/packages/carbon-components/scss/utilities/_ai-gradient.scss new file mode 100644 index 000000000000..42b92483de5a --- /dev/null +++ b/packages/carbon-components/scss/utilities/_ai-gradient.scss @@ -0,0 +1,9 @@ +// Code generated by carbon-components. DO NOT EDIT. +// +// Copyright IBM Corp. 2018, 2023 +// +// This source code is licensed under the Apache-2.0 license found in the +// LICENSE file in the root directory of this source tree. +// + +@forward '@carbon/styles/scss/utilities/ai-gradient'; diff --git a/packages/elements/package.json b/packages/elements/package.json index 77f046972ddd..3406fb717b3d 100644 --- a/packages/elements/package.json +++ b/packages/elements/package.json @@ -1,7 +1,7 @@ { "name": "@carbon/elements", "description": "A collection of design elements in code for the IBM Design Language", - "version": "11.33.0", + "version": "11.34.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", @@ -38,7 +38,7 @@ "dependencies": { "@carbon/colors": "^11.20.0", "@carbon/grid": "^11.21.0", - "@carbon/icons": "^11.30.0", + "@carbon/icons": "^11.31.0-rc.0", "@carbon/layout": "^11.20.0", "@carbon/motion": "^11.16.0", "@carbon/themes": "^11.27.0", diff --git a/packages/icons-react/package.json b/packages/icons-react/package.json index 84d4a3d80929..baf1016199ea 100644 --- a/packages/icons-react/package.json +++ b/packages/icons-react/package.json @@ -1,7 +1,7 @@ { "name": "@carbon/icons-react", "description": "React components for icons in digital and software products using the Carbon Design System", - "version": "11.30.0", + "version": "11.31.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", @@ -43,7 +43,7 @@ }, "devDependencies": { "@carbon/icon-build-helpers": "^1.20.0", - "@carbon/icons": "^11.30.0", + "@carbon/icons": "^11.31.0-rc.0", "rimraf": "^5.0.0" }, "sideEffects": false diff --git a/packages/icons-vue/package.json b/packages/icons-vue/package.json index 3ff2a185a75c..57ebc61f7060 100644 --- a/packages/icons-vue/package.json +++ b/packages/icons-vue/package.json @@ -1,7 +1,7 @@ { "name": "@carbon/icons-vue", "description": "Vue components for icons in digital and software products using the Carbon Design System", - "version": "10.79.0", + "version": "10.80.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", @@ -33,7 +33,7 @@ }, "devDependencies": { "@carbon/cli-reporter": "^10.7.0", - "@carbon/icons": "^11.30.0", + "@carbon/icons": "^11.31.0-rc.0", "fs-extra": "^11.0.0", "prettier": "^2.8.8", "rimraf": "^5.0.0", diff --git a/packages/icons/icons.yml b/packages/icons/icons.yml index d37be172e554..0549e3af659d 100644 --- a/packages/icons/icons.yml +++ b/packages/icons/icons.yml @@ -16551,9 +16551,6 @@ - revert - undo sizes: - - 16 - - 20 - - 24 - 32 - name: ref-evapotranspiration friendly_name: Ref evapotranspiration @@ -20940,9 +20937,6 @@ - revert - back sizes: - - 16 - - 20 - - 24 - 32 - name: ungroup-objects friendly_name: Ungroup objects diff --git a/packages/icons/package.json b/packages/icons/package.json index 43e93c8e1299..10953d7bb91d 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -1,7 +1,7 @@ { "name": "@carbon/icons", "description": "Icons for digital and software products using the Carbon Design System", - "version": "11.30.0", + "version": "11.31.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", diff --git a/packages/icons/src/svg/16/redo.svg b/packages/icons/src/svg/16/redo.svg deleted file mode 100755 index 5d3da118e0f9..000000000000 --- a/packages/icons/src/svg/16/redo.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/packages/icons/src/svg/16/undo.svg b/packages/icons/src/svg/16/undo.svg deleted file mode 100755 index 4c2ca3bc72d1..000000000000 --- a/packages/icons/src/svg/16/undo.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/packages/icons/src/svg/20/redo.svg b/packages/icons/src/svg/20/redo.svg deleted file mode 100755 index f8574179182c..000000000000 --- a/packages/icons/src/svg/20/redo.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/packages/icons/src/svg/20/undo.svg b/packages/icons/src/svg/20/undo.svg deleted file mode 100755 index 86e94855026a..000000000000 --- a/packages/icons/src/svg/20/undo.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/packages/icons/src/svg/24/redo.svg b/packages/icons/src/svg/24/redo.svg deleted file mode 100644 index cf5012852ecb..000000000000 --- a/packages/icons/src/svg/24/redo.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - diff --git a/packages/icons/src/svg/24/undo.svg b/packages/icons/src/svg/24/undo.svg deleted file mode 100644 index 159a46789007..000000000000 --- a/packages/icons/src/svg/24/undo.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/packages/pictograms-react/package.json b/packages/pictograms-react/package.json index 700ebc94f3e4..79c7dea5a16e 100644 --- a/packages/pictograms-react/package.json +++ b/packages/pictograms-react/package.json @@ -1,7 +1,7 @@ { "name": "@carbon/pictograms-react", "description": "React components for pictograms in digital and software products using the Carbon Design System", - "version": "11.52.0", + "version": "11.53.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", @@ -44,7 +44,7 @@ }, "devDependencies": { "@carbon/icon-build-helpers": "^1.20.0", - "@carbon/pictograms": "^12.26.0", + "@carbon/pictograms": "^12.27.0-rc.0", "rimraf": "^5.0.0" }, "sideEffects": false diff --git a/packages/pictograms/deprecated.yml b/packages/pictograms/deprecated.yml index 71eb7f938967..3b05493fcf3c 100644 --- a/packages/pictograms/deprecated.yml +++ b/packages/pictograms/deprecated.yml @@ -7,3 +7,7 @@ deprecated: reason: This icon should no longer be used - name: ibm--z--partition reason: This icon should no longer be used + - name: watson--logo + reason: + This pictogram should no longer be used, as it represents the old avatar + for the Watson brand, which is retired since the watsonx brand launch. diff --git a/packages/pictograms/package.json b/packages/pictograms/package.json index b9decfd655db..aa403241af5d 100644 --- a/packages/pictograms/package.json +++ b/packages/pictograms/package.json @@ -1,7 +1,7 @@ { "name": "@carbon/pictograms", "description": "Pictograms for digital and software products using the Carbon Design System", - "version": "12.26.0", + "version": "12.27.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", diff --git a/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap b/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap index 0ad9cb74e2f4..d3b9d6479051 100644 --- a/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap +++ b/packages/react/__tests__/__snapshots__/PublicAPI-test.js.snap @@ -1309,6 +1309,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "titleText": Object { "type": "node", }, @@ -2720,6 +2723,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "type": Object { "type": "string", }, @@ -2902,6 +2908,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "titleText": Object { "isRequired": true, "type": "node", @@ -3603,6 +3612,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "sortItems": Object { "type": "func", }, @@ -4674,6 +4686,23 @@ Map { ], "type": "oneOfType", }, + "loadingDescription": Object { + "type": "string", + }, + "loadingIconDescription": Object { + "type": "string", + }, + "loadingStatus": Object { + "args": Array [ + Array [ + "inactive", + "active", + "finished", + "error", + ], + ], + "type": "oneOf", + }, "modalAriaLabel": Object { "type": "string", }, @@ -4686,6 +4715,9 @@ Map { "onKeyDown": Object { "type": "func", }, + "onLoadingSuccess": Object { + "type": "func", + }, "onRequestClose": Object { "type": "func", }, @@ -4797,6 +4829,26 @@ Map { ], "type": "oneOfType", }, + "loadingDescription": Object { + "type": "string", + }, + "loadingIconDescription": Object { + "type": "string", + }, + "loadingStatus": Object { + "args": Array [ + Array [ + "inactive", + "active", + "finished", + "error", + ], + ], + "type": "oneOf", + }, + "onLoadingSuccess": Object { + "type": "func", + }, "onRequestClose": Object { "type": "func", }, @@ -5186,6 +5238,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "sortItems": Object { "type": "func", }, @@ -5304,6 +5359,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "sortItems": Object { "type": "func", }, @@ -5472,6 +5530,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "step": Object { "type": "number", }, @@ -6501,6 +6562,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "warn": Object { "type": "bool", }, @@ -8086,6 +8150,9 @@ Map { "rows": Object { "type": "number", }, + "slug": Object { + "type": "node", + }, "value": Object { "args": Array [ Array [ @@ -8423,6 +8490,9 @@ Map { ], "type": "oneOf", }, + "slug": Object { + "type": "node", + }, "type": Object { "type": "string", }, @@ -10091,6 +10161,118 @@ Map { }, }, }, + "unstable__Slug" => Object { + "$$typeof": Symbol(react.forward_ref), + "propTypes": Object { + "aiText": Object { + "type": "string", + }, + "aiTextLabel": Object { + "type": "string", + }, + "align": Object { + "args": Array [ + Array [ + "top", + "top-left", + "top-right", + "bottom", + "bottom-left", + "bottom-right", + "left", + "left-bottom", + "left-top", + "right", + "right-bottom", + "right-top", + ], + ], + "type": "oneOf", + }, + "autoAlign": Object { + "type": "bool", + }, + "children": Object { + "type": "node", + }, + "className": Object { + "type": "string", + }, + "dotType": Object { + "args": Array [ + Array [ + "default", + "hollow", + ], + ], + "type": "oneOf", + }, + "kind": Object { + "args": Array [ + Array [ + "default", + "hollow", + "inline", + ], + ], + "type": "oneOf", + }, + "onRevertClick": Object { + "type": "func", + }, + "revertActive": Object { + "type": "bool", + }, + "revertLabel": Object { + "type": "string", + }, + "size": Object { + "args": Array [ + Array [ + "mini", + "2xs", + "xs", + "sm", + "md", + "lg", + "xl", + ], + ], + "type": "oneOf", + }, + "slugContent": Object { + "type": "node", + }, + "slugLabel": Object { + "type": "string", + }, + }, + "render": [Function], + }, + "unstable__SlugActions" => Object { + "$$typeof": Symbol(react.forward_ref), + "propTypes": Object { + "children": Object { + "type": "node", + }, + "className": Object { + "type": "string", + }, + }, + "render": [Function], + }, + "unstable__SlugContent" => Object { + "$$typeof": Symbol(react.forward_ref), + "propTypes": Object { + "children": Object { + "type": "node", + }, + "className": Object { + "type": "string", + }, + }, + "render": [Function], + }, "unstable_useFeatureFlag" => Object {}, "unstable_useFeatureFlags" => Object {}, "unstable_useLayoutDirection" => Object {}, diff --git a/packages/react/package.json b/packages/react/package.json index 81bb50064988..e49913111fd4 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,7 +1,7 @@ { "name": "@carbon/react", "description": "React components for the Carbon Design System", - "version": "1.42.0", + "version": "1.43.0-rc.0", "license": "Apache-2.0", "main": "lib/index.js", "module": "es/index.js", @@ -48,9 +48,9 @@ "dependencies": { "@babel/runtime": "^7.18.3", "@carbon/feature-flags": "^0.16.0", - "@carbon/icons-react": "^11.30.0", + "@carbon/icons-react": "^11.31.0-rc.0", "@carbon/layout": "^11.20.0", - "@carbon/styles": "^1.42.0", + "@carbon/styles": "^1.43.0-rc.0", "@carbon/telemetry": "0.1.0", "classnames": "2.3.2", "copy-to-clipboard": "^3.3.1", diff --git a/packages/react/scss/utilities/_ai-gradient.scss b/packages/react/scss/utilities/_ai-gradient.scss new file mode 100644 index 000000000000..0c467c424a56 --- /dev/null +++ b/packages/react/scss/utilities/_ai-gradient.scss @@ -0,0 +1,9 @@ +// Code generated by @carbon/react. DO NOT EDIT. +// +// Copyright IBM Corp. 2018, 2023 +// +// This source code is licensed under the Apache-2.0 license found in the +// LICENSE file in the root directory of this source tree. +// + +@forward '@carbon/styles/scss/utilities/ai-gradient'; diff --git a/packages/react/src/__tests__/index-test.js b/packages/react/src/__tests__/index-test.js index bfd9a98818d6..29c76a85e43e 100644 --- a/packages/react/src/__tests__/index-test.js +++ b/packages/react/src/__tests__/index-test.js @@ -262,6 +262,9 @@ describe('Carbon Components React', () => { "unstable__FluidTimePicker", "unstable__FluidTimePickerSelect", "unstable__FluidTimePickerSkeleton", + "unstable__Slug", + "unstable__SlugActions", + "unstable__SlugContent", "unstable_useFeatureFlag", "unstable_useFeatureFlags", "unstable_useLayoutDirection", diff --git a/packages/react/src/components/ComboBox/ComboBox.tsx b/packages/react/src/components/ComboBox/ComboBox.tsx index 00060d69c922..6771ef8be1bf 100644 --- a/packages/react/src/components/ComboBox/ComboBox.tsx +++ b/packages/react/src/components/ComboBox/ComboBox.tsx @@ -10,7 +10,7 @@ import Downshift, { ControllerStateAndHelpers, StateChangeOptions, } from 'downshift'; -import PropTypes from 'prop-types'; +import PropTypes, { ReactNodeLike } from 'prop-types'; import React, { useContext, useEffect, @@ -281,6 +281,11 @@ export interface ComboBoxProps */ size?: ListBoxSize; + /** + * Provide a `Slug` component to be rendered inside the `ComboBox` component + */ + slug?: ReactNodeLike; + /** * Provide text to be used in a `