Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhancement: Accessibility enhancement of accordion #1503

Open
wants to merge 18 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
1f84a8f
feat(1264): Add keyboard support to accordion
pfafffabian-ifx Jul 26, 2024
3288d4f
feat(1264): Add focus indication to accordion
pfafffabian-ifx Jul 29, 2024
928b954
feat(1264): Add aria-attributes to accordion
pfafffabian-ifx Jul 29, 2024
2b18076
Merge 928b9546391adf4d5793134d4ca0c00b837c2bb5 into 5984adbd092810956…
pfafffabian-ifx Sep 26, 2024
95b09f2
Update Stencil library version to 25.3.0--canary.1503.2b18076b0791ed5…
invalid-email-address Sep 26, 2024
73b199d
Merge branch 'master' into 1264-accessibility-enhancement-of-accordion
pfafffabian-ifx Sep 30, 2024
c97fcd6
Merge 73b199d9d0f189d6c566e2a9536e6bdf6ab3d048 into 310a4ea8956da7302…
pfafffabian-ifx Sep 30, 2024
43c76c2
Update Stencil library version to 25.3.0--canary.1503.c97fcd6e9ffc0b4…
invalid-email-address Sep 30, 2024
2e1fd3f
Merge branch 'master' into 1264-accessibility-enhancement-of-accordion
tishoyanchev Oct 3, 2024
cc39321
Merge 2e1fd3f2743b88835b355aa29e2a6ea51f5c2147 into ab4a3b42c1acd5c35…
pfafffabian-ifx Oct 3, 2024
10d826d
Update Stencil library version to 25.7.0--canary.1503.cc39321f5f50423…
invalid-email-address Oct 3, 2024
a12b387
Merge branch 'master' into 1264-accessibility-enhancement-of-accordion
pfafffabian-ifx Oct 17, 2024
fc56b0f
Merge a12b387ca00ecf8608947d6bfdc1d4055a12d501 into 1e29b525c3597ef81…
pfafffabian-ifx Oct 17, 2024
8e0bcd0
Update Stencil library version to 25.11.0--canary.1503.fc56b0f91a644d…
invalid-email-address Oct 17, 2024
f594c81
feat(1264): customizable aria-level of accordion-item
pfafffabian-ifx Oct 17, 2024
0908674
fix(1264): rename ariaLevel prop to ifxAriaLevel
pfafffabian-ifx Oct 17, 2024
c812d7c
Merge 0908674621be43b7c650d09061c797c91539ed66 into 1e29b525c3597ef81…
pfafffabian-ifx Oct 17, 2024
b696e37
Update Stencil library version to 25.11.0--canary.1503.c812d7c741baa3…
invalid-email-address Oct 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/wrapper-components/react-vite-js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"test:local": "run-p preview:link watch:library"
},
"dependencies": {
"@infineon/infineon-design-system-react": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"@infineon/infineon-design-system-react": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"path": "^0.12.7",
"react": "^18.3.1",
"react-dom": "^18.3.1"
Expand Down
2 changes: 1 addition & 1 deletion examples/wrapper-components/vue-javascript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"test:local": "run-p preview:link watch:library"
},
"dependencies": {
"@infineon/infineon-design-system-vue": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"@infineon/infineon-design-system-vue": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"@vitejs/plugin-vue": "^4.0.0",
"@vitejs/plugin-vue-jsx": "^3.0.1",
"vite": "^5.0.12",
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"version": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"command": {
"publish": {
"verifyAccess": false
Expand Down
24 changes: 12 additions & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/components-angular/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "components-angular",
"version": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"version": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
Expand All @@ -26,7 +26,7 @@
"@angular/platform-browser": "^18.0.0",
"@angular/platform-browser-dynamic": "^18.0.0",
"@angular/router": "^18.0.0",
"@infineon/infineon-design-system-angular": "^25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"@infineon/infineon-design-system-angular": "^25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"typescript": "~5.4.4",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@infineon/infineon-design-system-angular",
"version": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"version": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"description": "Infineon design system Stencil web components for Angular",
"author": "Verena Lechner",
"license": "MIT",
Expand All @@ -11,7 +11,7 @@
"@angular/common": "^18.0.0",
"@angular/core": "^18.0.0",
"@infineon/design-system-tokens": "3.3.3",
"@infineon/infineon-design-system-stencil": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0"
"@infineon/infineon-design-system-stencil": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0"
},
"dependencies": {
"tslib": "^2.3.0"
Expand Down
4 changes: 2 additions & 2 deletions packages/components-react/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@infineon/infineon-design-system-react",
"version": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"version": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"description": "Infineon design system Stencil web components for React",
"main": "./dist/index.js",
"types": "./dist/types/index.d.ts",
Expand Down Expand Up @@ -28,7 +28,7 @@
},
"dependencies": {
"@infineon/design-system-tokens": "3.3.3",
"@infineon/infineon-design-system-stencil": "^25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"@infineon/infineon-design-system-stencil": "^25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"@stencil/react-output-target": "^0.7.1"
},
"auto": {
Expand Down
4 changes: 2 additions & 2 deletions packages/components-vue/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@infineon/infineon-design-system-vue",
"version": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"version": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"description": "Infineon design system Stencil web components for Vue",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
Expand Down Expand Up @@ -31,7 +31,7 @@
},
"dependencies": {
"@infineon/design-system-tokens": "3.3.3",
"@infineon/infineon-design-system-stencil": "^25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0"
"@infineon/infineon-design-system-stencil": "^25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0"
},
"auto": {
"plugins": [
Expand Down
2 changes: 1 addition & 1 deletion packages/components/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@infineon/infineon-design-system-stencil",
"version": "25.10.0--canary.1533.c0d964bf3ea3f65d8ace03aba6f8f7c7d5574689.0",
"version": "25.11.0--canary.1503.c812d7c741baa37be49fd723b88a0cda142c1bdb.0",
"private": false,
"description": "Infineon design system Stencil web components",
"homepage": "https://infineon.github.io/infineon-design-system-stencil",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,17 @@ export default {

args: {
autoCollapse: false,
ifxAriaLevel: 3,
},

argTypes: {
amountOfItems: { control: 'number' },
ifxAriaLevel: {
control: 'number',
min: 1,
max: 6,
description: 'The aria-level attribute for the accordion item header.'
},
},
};

Expand All @@ -19,6 +26,7 @@ const Template = args => {
const initialItem = document.createElement('ifx-accordion-item');
initialItem.setAttribute('caption', `Label`);
initialItem.setAttribute('open', `true`);
initialItem.setAttribute('ifx-aria-level', args.ifxAriaLevel);

initialItem.innerHTML = `
Content for Initial Item. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent volutpat, ligula eu aliquam bibendum, orci nisl cursus ipsum, nec egestas odio sapien eget neque.
Expand All @@ -35,9 +43,12 @@ const Template = args => {
const item = document.createElement('ifx-accordion-item');
item.setAttribute('caption', `Label`);
item.setAttribute('open', `false`);
item.setAttribute('aria-level', args.ifxAriaLevel);

item.innerHTML = `
Content for Item #${i + 1}. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent volutpat, ligula eu aliquam bibendum, orci nisl cursus ipsum, nec egestas odio sapien eget neque.
Content for Item #${
i + 1
}. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent volutpat, ligula eu aliquam bibendum, orci nisl cursus ipsum, nec egestas odio sapien eget neque.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent volutpat, ligula eu aliquam bibendum, orci nisl cursus ipsum, nec egestas odio sapien eget neque.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent volutpat, ligula eu aliquam bibendum, orci nisl cursus ipsum, nec egestas odio sapien eget neque.
`;
Expand All @@ -53,4 +64,5 @@ const Template = args => {
export const Default = Template.bind({});
Default.args = {
amountOfItems: 3,
ariaLevel: 3,
};
2 changes: 1 addition & 1 deletion packages/components/src/components/accordion/accordion.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Component, h, Listen, Element, Prop } from '@stencil/core';
@Component({
tag: 'ifx-accordion',
styleUrl: 'accordion.scss',
shadow: true,
shadow: { delegatesFocus: true },
})
export class Accordion {
@Element() el: HTMLElement;
Expand Down
20 changes: 20 additions & 0 deletions packages/components/src/components/accordion/accordionItem.scss
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,24 @@

}

.accordion-title:focus {
outline: none;
}

// workaround to add corner radius to outline
.accordion-title:focus::after {
content: '';
display: block;
position: absolute;
top: -4px;
bottom: -4px;
left: -4px;
right: -4px;
border-radius: 5px;
border: 2px solid tokens.$ifxColorOcean500;
box-sizing: border-box;
}

.accordion-title:hover {
border: 1px solid tokens.$ifxColorEngineering200;
color: tokens.$ifxColorOcean600;
Expand All @@ -19,12 +37,14 @@
.accordion-title {
display: flex;
align-items: center;
position: relative;
padding: tokens.$ifxSpace150 tokens.$ifxSpace200;
gap: tokens.$ifxSpace150;
color: tokens.$ifxColorOcean500;
background-color: tokens.$ifxColorBaseWhite;
border: 1px solid tokens.$ifxColorEngineering200;
cursor: pointer;
margin: 4px;
}

.accordion-caption {
Expand Down
29 changes: 22 additions & 7 deletions packages/components/src/components/accordion/accordionItem.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//ifxAccordionItem
import { Component, Prop, h, State, Event, EventEmitter, Watch } from '@stencil/core';
import { Component, Prop, h, State, Event, EventEmitter, Watch, Listen } from '@stencil/core';

@Component({
tag: 'ifx-accordion-item',
Expand All @@ -11,6 +11,7 @@ export class IfxAccordionItem {
@Prop({
mutable: true,
}) open: boolean = false;
@Prop() ifxAriaLevel = 3;
@State() internalOpen: boolean = false;
@Event() ifxItemOpen: EventEmitter;
@Event() ifxItemClose: EventEmitter;
Expand Down Expand Up @@ -79,16 +80,30 @@ export class IfxAccordionItem {
}
}



@Listen('keydown')
handleKeydown(ev: KeyboardEvent) {
switch (ev.key) {
case 'Enter': // fallthrough
case ' ': // space
ev.preventDefault();
this.toggleOpen();
break;
}
}


render() {
return (
<div aria-label={this.caption} class={`accordion-item ${this.internalOpen ? 'open' : ''}`}>
<div class="accordion-title" onClick={() => this.toggleOpen()}>
<span class="accordion-icon">
<ifx-icon icon="chevron-down-12" />
<div class={`accordion-item ${this.internalOpen ? 'open' : ''}`}>
<div role="button" aria-expanded={this.internalOpen} aria-controls="accordion-content" class="accordion-title" onClick={() => this.toggleOpen()} tabindex='0'>
<span aria-hidden="true" role="heading" aria-level={String(this.ifxAriaLevel) as string} class="accordion-icon">
<ifx-icon icon="chevron-down-12"/>
</span>
<span class="accordion-caption">{this.caption}</span>
<span id="accordion-caption" class="accordion-caption">{this.caption}</span>
</div>
<div class="accordion-content" ref={(el) => (this.contentEl = el as HTMLElement)}>
<div id="accordion-content" class="accordion-content" ref={(el) => (this.contentEl = el as HTMLElement)} role="region" aria-labelledby="accordion-caption">
<div class="inner-content">
<slot onSlotchange={(e) => this.handleSlotChange(e)} />
</div>
Expand Down
9 changes: 5 additions & 4 deletions packages/components/src/components/accordion/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@

## Properties

| Property | Attribute | Description | Type | Default |
| --------- | --------- | ----------- | --------- | ----------- |
| `caption` | `caption` | | `string` | `undefined` |
| `open` | `open` | | `boolean` | `false` |
| Property | Attribute | Description | Type | Default |
| -------------- | ---------------- | ----------- | --------- | ----------- |
| `caption` | `caption` | | `string` | `undefined` |
| `ifxAriaLevel` | `ifx-aria-level` | | `number` | `3` |
| `open` | `open` | | `boolean` | `false` |


## Events
Expand Down