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

feat: sbb autocomplete grid #2512

Merged
merged 81 commits into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
bafaf5a
feat: introduce base class for mini-button
DavideMininni-Fincons Mar 12, 2024
298706b
feat: autocomplete-grid 1st commit
DavideMininni-Fincons Mar 13, 2024
9d3f025
feat: add autocomplete-grid-optgroup
DavideMininni-Fincons Mar 13, 2024
34f5863
fix: remove toggleDatasetEntry, fix test
DavideMininni-Fincons Mar 13, 2024
da18e61
fix: annotations order
DavideMininni-Fincons Mar 14, 2024
740ba14
test: regenerate snap
DavideMininni-Fincons Mar 14, 2024
fee9ced
feat: introduce option common class, add method on button to retrieve…
DavideMininni-Fincons Mar 14, 2024
2d3640a
feat: introduce base class for optgroup and autocomplete
DavideMininni-Fincons Mar 15, 2024
6e5469d
docs: add docs
DavideMininni-Fincons Mar 18, 2024
500f421
fix: add styles, minor fix in ts and stories
DavideMininni-Fincons Mar 21, 2024
c4449f4
fix: button interaction, stories
DavideMininni-Fincons Mar 21, 2024
448aa9b
fix: chromatic stories, add tests
DavideMininni-Fincons Mar 22, 2024
11e9e45
fix: rebase
DavideMininni-Fincons Mar 22, 2024
626d13b
fix: recreate snapshot
DavideMininni-Fincons Mar 22, 2024
9b46ea8
fix: chromatic
DavideMininni-Fincons Mar 25, 2024
773236e
test: add tests, minor fixes
DavideMininni-Fincons Mar 25, 2024
8d5cf97
fix: test, stories, docs
DavideMininni-Fincons Mar 26, 2024
e604b2f
fix: improve stories
DavideMininni-Fincons Mar 26, 2024
43aa8fe
fix: improve stories
DavideMininni-Fincons Mar 26, 2024
2a9255e
style: fixes after Figma changes
DavideMininni-Fincons Mar 28, 2024
0d3f067
style: fix focus-visible firefox/safari
DavideMininni-Fincons Mar 28, 2024
e3562c4
fix: review
DavideMininni-Fincons Mar 28, 2024
d916124
fix: review
DavideMininni-Fincons Mar 28, 2024
6c6131f
fix: rebase
DavideMininni-Fincons Mar 28, 2024
f84c0ac
fix: regenerate snap files
DavideMininni-Fincons Mar 28, 2024
d783be6
fix: snap
DavideMininni-Fincons Mar 28, 2024
ee5c003
fix: snap
DavideMininni-Fincons Mar 28, 2024
965ae10
fix: snap
DavideMininni-Fincons Mar 28, 2024
070ec42
fix: review
DavideMininni-Fincons Apr 3, 2024
1756197
fix: rebase
DavideMininni-Fincons Apr 3, 2024
7ae74b0
fix: rebase
DavideMininni-Fincons Apr 3, 2024
b7f32d2
fix: rebase
DavideMininni-Fincons Apr 8, 2024
4918ca0
fix: rebase
DavideMininni-Fincons Apr 9, 2024
f4efc12
fix: rebase
DavideMininni-Fincons Apr 10, 2024
eb55779
fix: review
DavideMininni-Fincons Apr 11, 2024
dae697e
fix: rebase
DavideMininni-Fincons Apr 11, 2024
4b9b065
fix: move hostAttributes to base class
DavideMininni-Fincons Apr 12, 2024
88e3576
fix: build
DavideMininni-Fincons Apr 12, 2024
b367300
fix: focus button safari/firefox
DavideMininni-Fincons Apr 17, 2024
5a89146
fix: remove old mixin
DavideMininni-Fincons Apr 17, 2024
c5c3c22
fix: build
DavideMininni-Fincons Apr 18, 2024
a8d1d8d
fix: accessibility
DavideMininni-Fincons Apr 22, 2024
b923ba9
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons Apr 23, 2024
d6d9d0e
fix: review + cleanup after merge from main
DavideMininni-Fincons Apr 23, 2024
2d56057
Merge branch 'main' into feat/sbb-autocomplete-grid
DavideMininni-Fincons Apr 24, 2024
bdb5470
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons May 6, 2024
f7d8572
fix: merge
DavideMininni-Fincons May 6, 2024
3bcef04
fix: a11y refactoring of grid-action
DavideMininni-Fincons May 6, 2024
2d4ae57
chore: story improvement
DavideMininni-Fincons May 6, 2024
ee4d5ec
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons May 7, 2024
b77607c
fix: tab-focused state
DavideMininni-Fincons May 7, 2024
cf13310
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons May 7, 2024
bbf76c8
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons May 28, 2024
6d2a1ad
fix: disabled state
DavideMininni-Fincons May 30, 2024
e3bc8cf
docs: add doc to get option from button click
DavideMininni-Fincons May 30, 2024
9a27795
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons May 30, 2024
94325f1
fix: replace 'components' with 'elements'
DavideMininni-Fincons May 30, 2024
16ddbb5
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons Jun 4, 2024
ae340f9
fix: refactor grid button
DavideMininni-Fincons Jun 4, 2024
8fc250a
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons Jun 5, 2024
14aeb20
fix: merge
DavideMininni-Fincons Jun 5, 2024
9a0fef0
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons Jun 10, 2024
e81101a
test: update test structure
DavideMininni-Fincons Jun 10, 2024
0c443db
fix: test
DavideMininni-Fincons Jun 11, 2024
5f69018
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons Jul 2, 2024
cfe5e8f
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons Jul 3, 2024
6903b95
test: add visual tests
DavideMininni-Fincons Jul 3, 2024
f17b650
test: add visual tests
DavideMininni-Fincons Jul 3, 2024
aa32139
test: add visual tests
DavideMininni-Fincons Jul 3, 2024
7f5c9a8
test: add visual tests
DavideMininni-Fincons Jul 3, 2024
2207343
test: add visual tests
DavideMininni-Fincons Jul 3, 2024
7067373
test: add visual tests
DavideMininni-Fincons Jul 3, 2024
5483591
test: add visual tests
DavideMininni-Fincons Jul 4, 2024
8211441
fix: tests
DavideMininni-Fincons Jul 4, 2024
41e047f
fix: tests
DavideMininni-Fincons Jul 4, 2024
89538b1
fix: enable autocomplete behavior
DavideMininni-Fincons Jul 4, 2024
1966a22
Merge remote-tracking branch 'origin/main' into feat/sbb-autocomplete…
DavideMininni-Fincons Jul 8, 2024
860b4e9
fix: review (partial)
DavideMininni-Fincons Jul 8, 2024
059a750
fix: remove useless API
DavideMininni-Fincons Jul 9, 2024
a7a7c59
Merge branch 'refs/heads/main' into feat/sbb-autocomplete-grid
jeripeierSBB Jul 9, 2024
2b3b8a8
fix: snapshot formatting
jeripeierSBB Jul 9, 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
6 changes: 6 additions & 0 deletions src/elements/autocomplete-grid.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export * from './autocomplete-grid/autocomplete-grid.js';
export * from './autocomplete-grid/autocomplete-grid-button.js';
export * from './autocomplete-grid/autocomplete-grid-cell.js';
export * from './autocomplete-grid/autocomplete-grid-optgroup.js';
export * from './autocomplete-grid/autocomplete-grid-option.js';
export * from './autocomplete-grid/autocomplete-grid-row.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './autocomplete-grid-button/autocomplete-grid-button.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/* @web/test-runner snapshot v1 */
export const snapshots = {};

snapshots["sbb-autocomplete-grid-button renders DOM"] =
`<sbb-autocomplete-grid-button
aria-disabled="false"
data-action=""
data-button=""
dir="ltr"
icon-name="pie-small"
id="sbb-autocomplete-grid-button-1"
role="button"
>
</sbb-autocomplete-grid-button>
`;
/* end snapshot sbb-autocomplete-grid-button renders DOM */

snapshots["sbb-autocomplete-grid-button renders Shadow DOM"] =
`<span class="sbb-action-base sbb-autocomplete-grid-button">
<slot name="icon">
<sbb-icon
aria-hidden="true"
data-namespace="default"
name="pie-small"
role="img"
>
</sbb-icon>
</slot>
</span>
`;
/* end snapshot sbb-autocomplete-grid-button renders Shadow DOM */

snapshots["sbb-autocomplete-grid-button renders disabled DOM"] =
`<sbb-autocomplete-grid-button
aria-disabled="true"
data-action=""
data-button=""
dir="ltr"
disabled=""
icon-name="pie-small"
id="sbb-autocomplete-grid-button-3"
role="button"
>
</sbb-autocomplete-grid-button>
`;
/* end snapshot sbb-autocomplete-grid-button renders disabled DOM */

snapshots["sbb-autocomplete-grid-button renders disabled Shadow DOM"] =
`<span class="sbb-action-base sbb-autocomplete-grid-button">
<slot name="icon">
<sbb-icon
aria-hidden="true"
data-namespace="default"
name="pie-small"
role="img"
>
</sbb-icon>
</slot>
</span>
`;
/* end snapshot sbb-autocomplete-grid-button renders disabled Shadow DOM */

snapshots["sbb-autocomplete-grid-button renders negative without icon DOM"] =
`<sbb-autocomplete-grid-button
aria-disabled="false"
data-action=""
data-button=""
dir="ltr"
id="sbb-autocomplete-grid-button-5"
negative=""
role="button"
>
</sbb-autocomplete-grid-button>
`;
/* end snapshot sbb-autocomplete-grid-button renders negative without icon DOM */

snapshots["sbb-autocomplete-grid-button renders negative without icon Shadow DOM"] =
`<span class="sbb-action-base sbb-autocomplete-grid-button">
<slot name="icon">
</slot>
</span>
`;
/* end snapshot sbb-autocomplete-grid-button renders negative without icon Shadow DOM */

snapshots["sbb-autocomplete-grid-button A11y tree Chrome"] =
`<p>
{
"role": "WebArea",
"name": "",
"children": [
{
"role": "button",
"name": ""
}
]
}
</p>
`;
/* end snapshot sbb-autocomplete-grid-button A11y tree Chrome */

snapshots["sbb-autocomplete-grid-button A11y tree Firefox"] =
`<p>
{
"role": "document",
"name": "",
"children": [
{
"role": "button",
"name": ""
}
]
}
</p>
`;
/* end snapshot sbb-autocomplete-grid-button A11y tree Firefox */

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
@use '../../core/styles' as sbb;

// Box-sizing rules contained in typography are not traversing Shadow DOM boundaries. We need to include box-sizing mixin in every component.
@include sbb.box-sizing;

:host {
// Use !important here to not interfere with Firefox focus ring definition
// which appears in normalize css of several frameworks.
outline: none !important;
display: block;

--sbb-button-display: flex;
}

@include sbb.icon-button('.sbb-autocomplete-grid-button', '::slotted(sbb-icon), sbb-icon');
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { expect } from '@open-wc/testing';
import { html } from 'lit/static-html.js';

import { fixture, testA11yTreeSnapshot } from '../../core/testing/private.js';
import { waitForLitRender } from '../../core/testing.js';

import type { SbbAutocompleteGridButtonElement } from './autocomplete-grid-button.js';
import '../../form-field.js';
import '../autocomplete-grid.js';
import '../autocomplete-grid-row.js';
import '../autocomplete-grid-cell.js';
import './autocomplete-grid-button.js';

describe('sbb-autocomplete-grid-button', () => {
describe('renders', () => {
let root: SbbAutocompleteGridButtonElement;
beforeEach(async () => {
root = (
await fixture(html`
<sbb-autocomplete-grid origin="anchor">
<sbb-autocomplete-grid-row>
<sbb-autocomplete-grid-cell>
<sbb-autocomplete-grid-button icon-name="pie-small"></sbb-autocomplete-grid-button>
</sbb-autocomplete-grid-cell>
</sbb-autocomplete-grid-row>
</sbb-autocomplete-grid>
<div id="anchor"></div>
`)
).querySelector('sbb-autocomplete-grid-button')!;
await waitForLitRender(root);
});

it('DOM', async () => {
await expect(root).dom.to.be.equalSnapshot();
});

it('Shadow DOM', async () => {
await expect(root).shadowDom.to.be.equalSnapshot();
});
});

describe('renders disabled', () => {
let root: SbbAutocompleteGridButtonElement;
beforeEach(async () => {
root = (
await fixture(html`
<sbb-autocomplete-grid origin="anchor">
<sbb-autocomplete-grid-row>
<sbb-autocomplete-grid-cell>
<sbb-autocomplete-grid-button
disabled
icon-name="pie-small"
></sbb-autocomplete-grid-button>
</sbb-autocomplete-grid-cell>
</sbb-autocomplete-grid-row>
</sbb-autocomplete-grid>
<div id="anchor"></div>
`)
).querySelector('sbb-autocomplete-grid-button')!;
await waitForLitRender(root);
});

it('DOM', async () => {
await expect(root).dom.to.be.equalSnapshot();
});

it('Shadow DOM', async () => {
await expect(root).shadowDom.to.be.equalSnapshot();
});
});

describe('renders negative without icon', () => {
let root: SbbAutocompleteGridButtonElement;
beforeEach(async () => {
root = (
await fixture(html`
<sbb-form-field negative>
<input />
<sbb-autocomplete-grid>
<sbb-autocomplete-grid-row>
<sbb-autocomplete-grid-cell>
<sbb-autocomplete-grid-button></sbb-autocomplete-grid-button>
</sbb-autocomplete-grid-cell>
</sbb-autocomplete-grid-row>
</sbb-autocomplete-grid>
</sbb-form-field>
`)
).querySelector('sbb-autocomplete-grid-button')!;
await waitForLitRender(root);
});

it('DOM', async () => {
await expect(root).dom.to.be.equalSnapshot();
});

it('Shadow DOM', async () => {
await expect(root).shadowDom.to.be.equalSnapshot();
});
});

testA11yTreeSnapshot(
html`<sbb-autocomplete-grid-button icon-name="pie-small"></sbb-autocomplete-grid-button>`,
);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { assert, expect } from '@open-wc/testing';
import { html } from 'lit/static-html.js';

import { fixture } from '../../core/testing/private.js';
import { EventSpy, waitForCondition, waitForLitRender } from '../../core/testing.js';

import { SbbAutocompleteGridButtonElement } from './autocomplete-grid-button.js';

describe(`sbb-autocomplete-grid-button`, () => {
let element: SbbAutocompleteGridButtonElement;

beforeEach(async () => {
element = await fixture(
html`<sbb-autocomplete-grid-button>Button</sbb-autocomplete-grid-button>`,
);
});

it('renders', async () => {
assert.instanceOf(element, SbbAutocompleteGridButtonElement);
});

describe('events', () => {
it('dispatches event on click', async () => {
const clickSpy = new EventSpy('click');

element.click();
await waitForCondition(() => clickSpy.events.length === 1);
expect(clickSpy.count).to.be.equal(1);
});

it('should not dispatch event on click if disabled', async () => {
element.setAttribute('disabled', 'true');

await waitForLitRender(element);

const clickSpy = new EventSpy('click');

element.click();
expect(clickSpy.count).not.to.be.greaterThan(0);
});

it('should stop propagating host click if disabled', async () => {
element.disabled = true;

const clickSpy = new EventSpy('click');

element.dispatchEvent(new CustomEvent('click'));
await waitForLitRender(element);

expect(clickSpy.count).not.to.be.greaterThan(0);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { assert } from '@open-wc/testing';
import { html } from 'lit/static-html.js';

import { fixture } from '../../core/testing/private.js';

import { SbbAutocompleteGridButtonElement } from './autocomplete-grid-button.js';

describe(`sbb-autocomplete-grid-button ssr`, () => {
let element: SbbAutocompleteGridButtonElement;

beforeEach(async () => {
element = await fixture(
html`<sbb-autocomplete-grid-button>Button</sbb-autocomplete-grid-button>`,
{ modules: ['./autocomplete-grid-button.ts'] },
);
});

it('renders', async () => {
assert.instanceOf(element, SbbAutocompleteGridButtonElement);
});
});
Loading
Loading