feat(lib): Add List item component - #3618
Conversation
✅ Deploy Preview for boosted ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Pull request overview
This PR introduces the new List item component to OUDS Web, including its core SCSS implementation, brand token additions (icons), and the documentation page + site plumbing needed to surface it in the docs.
Changes:
- Added the new
scss/_list-item.scsscomponent and wired it into all 3 brand entrypoints. - Added documentation for List item (new MDX page) and new Astro shortcodes to render “asset” tabs in the docs.
- Updated skeleton styling/docs and adjusted docs-site configuration (anchors depth, sidebar/cards, bundlewatch thresholds).
Reviewed changes
Copilot reviewed 21 out of 22 changed files in this pull request and generated 20 comments.
Show a summary per file
| File | Description |
|---|---|
| site/src/types/auto-import.d.ts | Registers new shortcodes for auto-import in MDX/docs. |
| site/src/scss/_component-examples.scss | Adds docs-only chip styling for tab UI (currently duplicates chip selected styles). |
| site/src/content/docs/components/skeleton.mdx | Adds List item markup to skeleton documentation examples. |
| site/src/content/docs/components/list-item.mdx | New List item documentation page and examples. |
| site/src/components/shortcodes/AssetsTab.astro | New shortcode representing a single tab panel section. |
| site/src/components/shortcodes/AssetsNavTab.astro | New shortcode rendering the tablist + tabpanels and hash navigation behavior. |
| site/data/sidebar-components.yml | Adds “List item” to the components sidebar. |
| site/data/components-details.ts | Adds component cards/snippets for List item variants. |
| site/data/_components-versions.yml | Updates component “added in version” data (currently missing list-item types). |
| scss/_skeleton.scss | Extends skeleton placeholder styling to .item-wrapper. |
| scss/_list-item.scss | New SCSS implementation of the List item component. |
| packages/sosh/scss/tokens/_composite.scss | Adds list-item navigation icons (brand-specific SVG data URLs). |
| packages/sosh/scss/ouds-web.scss | Imports the new list-item component into the Sosh bundle. |
| packages/sosh/config.yml | Increases docs anchors max depth to 6. |
| packages/orange/scss/tokens/_composite.scss | Adds list-item navigation icons (brand-specific SVG data URLs). |
| packages/orange/scss/tokens/_component.scss | Modifies auto-generated token output (should not be edited manually). |
| packages/orange/scss/ouds-web.scss | Imports the new list-item component into the Orange bundle. |
| packages/orange/config.yml | Increases docs anchors max depth to 6. |
| packages/orange-compact/scss/tokens/_composite.scss | Adds list-item navigation icons (brand-specific SVG data URLs). |
| packages/orange-compact/scss/ouds-web.scss | Imports the new list-item component into the Orange Compact bundle. |
| packages/orange-compact/config.yml | Increases docs anchors max depth to 6. |
| .bundlewatch.config.json | Raises bundle size limits to account for added CSS. |
| </div> | ||
| </div>`} /> | ||
|
|
||
| ### Sizes |
There was a problem hiding this comment.
I know there is a common template to component pages.
However, sizes section is mentioned repeatedly before being read.
Maybe we should invert sizes and variants section to clarify the available sizes ?
There was a problem hiding this comment.
Yes maybe, let's discuss it with other people
There was a problem hiding this comment.
I'm not sure, in the Sizes paragraph we reference other variant so we would have the same problem but reversed... Although Sizes are always short paragraphs compared to Variants so it could make sense to switch
There was a problem hiding this comment.
I understand the reasons, but we should keep the same order everywhere.
I have the intuition that when we develop, we rather choose first the variant and then the size ? Though I have a small preference for keeping the current order.
MaxLardenois
left a comment
There was a problem hiding this comment.
Just some comment on my first pass, I have opinions ;)
I will try to suggest something for the approach section
I definitely think this group is not named correctly, it should be Items
| @@ -39,6 +39,7 @@ | |||
| @import "@ouds/web-common/scss/alert"; | |||
| @import "@ouds/web-common/scss/progress"; | |||
| @import "@ouds/web-common/scss/list-group"; | |||
There was a problem hiding this comment.
Don't we remove list group?
| @@ -0,0 +1,1061 @@ | |||
| --- | |||
| title: List item | |||
There was a problem hiding this comment.
In the end, I think the name of the group should be Items
Yes it is not very descriptive but it's the common thing with these components.
Right now we have list item components that can be outside a list ! This is not understandable.
I understand the name of the design group is List item but I think we should still rename this page to Items without changing the design name (even though I think we should try to convince Maxime)
In any case we should have a plural like we determined for groups pages (like Badges, Buttons...)
There was a problem hiding this comment.
It's a problem to break the plural rule that we had until now... And yes, the name is hard to understand.
4c2ad89 to
3d1d201
Compare
hannahiss
left a comment
There was a problem hiding this comment.
I had to stop at #leading-container but it appears there that the texts about sizes is not very clear...
| @@ -39,6 +39,7 @@ | |||
| @import "@ouds/web-common/scss/alert"; | |||
| @import "@ouds/web-common/scss/progress"; | |||
| @import "@ouds/web-common/scss/list-group"; | |||
| @@ -0,0 +1,1061 @@ | |||
| --- | |||
| title: List item | |||
There was a problem hiding this comment.
It's a problem to break the plural rule that we had until now... And yes, the name is hard to understand.
| - Navigation items, which allow navigation. | ||
| - Static items, which are not interactive. |
There was a problem hiding this comment.
Should have static items first to respect the presentation order? (and static is simpler than interactive)
| The following table summarizes the different types of items and their categories. | ||
|
|
||
| <BsTable> | ||
| | Categories | Card | List | | ||
| | -------------- | -------------------- | -------------------- | | ||
| | *Static* | [Static card item](#static-card-item) | [Static list item](#static-list-item) | | ||
| | *Navigation* | [Navigation card item](#navigation-card-item) | [Navigation list item](#navigation-list-item) | | ||
| </BsTable> |
There was a problem hiding this comment.
Ins't it redundant with the text just above?
|
|
||
| For navigation items, a wrapping `<nav>` element can be added if it is an important navigation in the page. | ||
|
|
||
| In case of a complex navigation list item, you probably should link all the texts and components together by adding `[aria-describedby]` on the link in order to provide a valid accessible name for the link. The `[aria-describedby]` should point to the id of the element that contains the texts of the link. |
There was a problem hiding this comment.
| In case of a complex navigation list item, you probably should link all the texts and components together by adding `[aria-describedby]` on the link in order to provide a valid accessible name for the link. The `[aria-describedby]` should point to the id of the element that contains the texts of the link. | |
| In case of a complex navigation list item, you probably should link all the texts and components together by adding `[aria-describedby]` on the link in order to provide a valid accessible name for the link. The `[aria-describedby]` should point to the ids of the elements that contain the texts of the link. |
| Add `.item-external` to the `.item-navigation` to indicate that the item is an external link. This will add an external link icon to the end of the item. | ||
|
|
||
| <Callout type="info"> | ||
| For accessibility reasons, it is recommended to add a visually hidden text (or a visible one if the icon is far from the text) to indicate that the link opens an external resource. Take a look at [some more complete accessibility guidelines](https://a11y-guidelines.orange.com/en/web/develop/common-navigation/#warn-the-user-when-opening-a-new-window). |
There was a problem hiding this comment.
| For accessibility reasons, it is recommended to add a visually hidden text (or a visible one if the icon is far from the text) to indicate that the link opens an external resource. Take a look at [some more complete accessibility guidelines](https://a11y-guidelines.orange.com/en/web/develop/common-navigation/#warn-the-user-when-opening-a-new-window). | |
| For accessibility reasons, it is recommended to add a `.visually-hidden` text (or a visible one if the icon is far from the text) to indicate that the link opens an external resource. Take a look at [some more complete accessibility guidelines](https://a11y-guidelines.orange.com/en/web/develop/common-navigation/#warn-the-user-when-opening-a-new-window). |
| Optionally, the `<a>` element can wrap the entire `.item` instead of just the label. | ||
|
|
||
| <Callout type="info" title="Accessibility"> | ||
| ATs will read the entire item as a link. You can use the visually hidden text to provide additional context if needed. You won't need any `[aria-describedby]` as stated in our [accessibility section](#accessibility). |
There was a problem hiding this comment.
| ATs will read the entire item as a link. You can use the visually hidden text to provide additional context if needed. You won't need any `[aria-describedby]` as stated in our [accessibility section](#accessibility). | |
| Screen readers will read the entire item as a link. You can use the `.visually-hidden` text to provide additional context if needed. You won't need any `[aria-describedby]` as stated in our [accessibility section](#accessibility). |
| <Callout type="info" title="Accessibility"> | ||
| ATs will read the entire item as a link. You can use the visually hidden text to provide additional context if needed. You won't need any `[aria-describedby]` as stated in our [accessibility section](#accessibility). | ||
|
|
||
| Make sure to not use any interactive elements inside the item when using this variant, as it will create nested interactive elements which is not valid HTML and can cause accessibility issues. |
There was a problem hiding this comment.
| Make sure to not use any interactive elements inside the item when using this variant, as it will create nested interactive elements which is not valid HTML and can cause accessibility issues. | |
| Make sure not to use any interactive elements inside the item when using this variant, as it will create nested interactive elements which is not valid HTML and can cause accessibility issues. |
|
|
||
| Navigation card item is a UI element that displays a unit of information in an interactive, self-contained card, taking users to an internal or external destination. | ||
|
|
||
| The navigation card item is used when the content requires stronger visual grouping or prominence than a standard [navigation list item](#navigation-list-item). It may be displayed independently or within a card-based layout. Each card acts as a single navigation target and supports the necessary hover, pressed, and keyboard focus states. |
There was a problem hiding this comment.
I did not understand this phrase... I thought navigation card item was for single usage whereas navigation list item was for a list?
|
|
||
| Here is a list of the different assets that we support in the leading container, along with their corresponding classes and notes. | ||
|
|
||
| You can navigate through the different assets using the tabs below. |
There was a problem hiding this comment.
| You can navigate through the different assets using the tabs below. | |
| You can navigate through the different assets using the filters below. |
Types of change
Related issues
Closes #2783.
Context & Motivation
Add the list-item to the component we officially support.
Description
TODO
Checklists
Checklist (for Core Team only)
Progression (for Core Team only)
ouds/mainfollowing conventional commitLive previews