@statistikzh/leu 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/deploy-github-pages.yaml +33 -0
- package/.storybook/main.js +27 -1
- package/.storybook/manager-head.html +1 -0
- package/.storybook/manager.js +9 -0
- package/.storybook/preview-head.html +1 -1
- package/.storybook/preview.js +59 -5
- package/.storybook/static/logo.svg +19 -0
- package/.storybook/theme.js +7 -0
- package/CHANGELOG.md +30 -0
- package/README.md +1 -1
- package/dist/Button.js +15 -18
- package/dist/ButtonGroup.js +5 -7
- package/dist/Checkbox.js +101 -84
- package/dist/CheckboxGroup.js +41 -37
- package/dist/{Chip-5f70d04f.js → Chip-dac7337d.js} +5 -1
- package/dist/ChipGroup.js +2 -5
- package/dist/ChipLink.js +4 -7
- package/dist/ChipRemovable.js +4 -7
- package/dist/ChipSelectable.js +4 -7
- package/dist/Dropdown.js +55 -26
- package/dist/Input.js +29 -28
- package/dist/Menu.js +2 -5
- package/dist/MenuItem.js +30 -15
- package/dist/Pagination.js +54 -54
- package/dist/Radio.js +7 -6
- package/dist/RadioGroup.js +41 -39
- package/dist/Select.js +55 -43
- package/dist/Table.js +137 -120
- package/dist/{defineElement-ba770aed.js → _rollupPluginBabelHelpers-20f659f4.js} +1 -15
- package/dist/defineElement-47d4f665.js +15 -0
- package/dist/index.js +29 -19
- package/dist/leu-button-group.js +7 -3
- package/dist/leu-button.js +6 -3
- package/dist/leu-checkbox-group.js +6 -3
- package/dist/leu-checkbox.js +6 -3
- package/dist/leu-chip-group.js +6 -3
- package/dist/leu-chip-link.js +7 -4
- package/dist/leu-chip-removable.js +7 -4
- package/dist/leu-chip-selectable.js +7 -4
- package/dist/leu-dropdown.js +13 -3
- package/dist/leu-input.js +7 -3
- package/dist/leu-menu-item.js +8 -3
- package/dist/leu-menu.js +6 -3
- package/dist/leu-pagination.js +8 -3
- package/dist/leu-popup-4bf6f1f4.js +216 -0
- package/dist/leu-radio-group.js +6 -3
- package/dist/leu-radio.js +6 -3
- package/dist/leu-select.js +14 -3
- package/dist/leu-table.js +9 -3
- package/package.json +24 -12
- package/scripts/generate-component/templates/[Name].js +0 -5
- package/scripts/generate-component/templates/[name].css +1 -1
- package/scripts/generate-component/templates/[namespace]-[name].js +5 -2
- package/src/components/accordion/Accordion.js +0 -6
- package/src/components/accordion/leu-accordion.js +5 -2
- package/src/components/accordion/stories/accordion.stories.js +7 -4
- package/src/components/accordion/test/accordion.test.js +92 -2
- package/src/components/breadcrumb/Breadcrumb.js +310 -0
- package/src/components/breadcrumb/breadcrumb.css +114 -0
- package/src/components/breadcrumb/leu-breadcrumb.js +6 -0
- package/src/components/breadcrumb/stories/breadcrumb.stories.js +73 -0
- package/src/components/breadcrumb/test/breadcrumb.test.js +141 -0
- package/src/components/button/Button.js +10 -15
- package/src/components/button/button.css +3 -3
- package/src/components/button/leu-button.js +5 -2
- package/src/components/button/stories/button.stories.js +58 -37
- package/src/components/button/test/button.test.js +112 -2
- package/src/components/button-group/ButtonGroup.js +1 -7
- package/src/components/button-group/leu-button-group.js +5 -2
- package/src/components/button-group/stories/button-group.stories.js +6 -0
- package/src/components/button-group/test/button-group.test.js +79 -3
- package/src/components/checkbox/Checkbox.js +6 -85
- package/src/components/checkbox/CheckboxGroup.js +8 -38
- package/src/components/checkbox/checkbox-group.css +29 -0
- package/src/components/checkbox/checkbox.css +76 -0
- package/src/components/checkbox/leu-checkbox-group.js +5 -2
- package/src/components/checkbox/leu-checkbox.js +5 -2
- package/src/components/checkbox/stories/checkbox-group.stories.js +44 -21
- package/src/components/checkbox/stories/checkbox.stories.js +7 -1
- package/src/components/checkbox/test/checkbox-group.test.js +124 -0
- package/src/components/checkbox/test/checkbox.test.js +72 -59
- package/src/components/chip/Chip.js +1 -0
- package/src/components/chip/ChipGroup.js +0 -5
- package/src/components/chip/ChipLink.js +1 -6
- package/src/components/chip/ChipRemovable.js +1 -6
- package/src/components/chip/ChipSelectable.js +1 -6
- package/src/components/chip/exports.js +4 -10
- package/src/components/chip/leu-chip-group.js +5 -2
- package/src/components/chip/leu-chip-link.js +5 -2
- package/src/components/chip/leu-chip-removable.js +5 -2
- package/src/components/chip/leu-chip-selectable.js +5 -2
- package/src/components/chip/stories/chip-group.stories.js +18 -6
- package/src/components/chip/stories/chip-link.stories.js +16 -4
- package/src/components/chip/stories/chip-removable.stories.js +15 -4
- package/src/components/chip/stories/chip-selectable.stories.js +13 -3
- package/src/components/chip/test/chip-group.test.js +124 -0
- package/src/components/chip/test/chip-link.test.js +58 -0
- package/src/components/chip/test/chip-removable.test.js +79 -0
- package/src/components/chip/test/chip-selectable.test.js +95 -0
- package/src/components/chip/test/chip.test.js +1 -1
- package/src/components/dropdown/Dropdown.js +52 -24
- package/src/components/dropdown/dropdown.css +1 -2
- package/src/components/dropdown/leu-dropdown.js +5 -2
- package/src/components/dropdown/stories/dropdown.stories.js +11 -5
- package/src/components/dropdown/test/dropdown.test.js +6 -6
- package/src/components/icon/icon.js +1 -1
- package/src/components/icon/test/icon.test.js +66 -0
- package/src/components/input/Input.js +18 -24
- package/src/components/input/input.css +9 -6
- package/src/components/input/leu-input.js +5 -2
- package/src/components/input/stories/input.stories.js +8 -2
- package/src/components/input/test/input.test.js +431 -4
- package/src/components/menu/Menu.js +0 -5
- package/src/components/menu/MenuItem.js +20 -13
- package/src/components/menu/leu-menu-item.js +5 -2
- package/src/components/menu/leu-menu.js +5 -2
- package/src/components/menu/menu-item.css +5 -2
- package/src/components/menu/stories/menu-item.stories.js +13 -4
- package/src/components/menu/stories/menu.stories.js +11 -5
- package/src/components/menu/test/menu-item.test.js +180 -0
- package/src/components/menu/test/menu.test.js +10 -2
- package/src/components/pagination/Pagination.js +53 -65
- package/src/components/pagination/leu-pagination.js +5 -2
- package/src/components/pagination/stories/pagination.stories.js +17 -9
- package/src/components/pagination/test/pagination.test.js +191 -5
- package/src/components/popup/Popup.js +200 -0
- package/src/components/popup/leu-popup.js +6 -0
- package/src/components/popup/popup.css +27 -0
- package/src/components/popup/stories/popup.stories.js +58 -0
- package/src/components/popup/test/popup.test.js +29 -0
- package/src/components/radio/Radio.js +2 -6
- package/src/components/radio/RadioGroup.js +6 -38
- package/src/components/radio/leu-radio-group.js +5 -2
- package/src/components/radio/leu-radio.js +5 -2
- package/src/components/radio/radio-group.css +29 -0
- package/src/components/radio/stories/radio-group.stories.js +38 -19
- package/src/components/radio/stories/radio.stories.js +7 -1
- package/src/components/radio/test/radio-group.test.js +86 -0
- package/src/components/radio/test/radio.test.js +108 -17
- package/src/components/select/Select.js +34 -31
- package/src/components/select/leu-select.js +5 -2
- package/src/components/select/select.css +13 -13
- package/src/components/select/stories/select.stories.js +15 -168
- package/src/components/select/test/fixtures.js +162 -0
- package/src/components/select/test/select.test.js +236 -12
- package/src/components/table/Table.js +43 -118
- package/src/components/table/leu-table.js +5 -2
- package/src/components/table/stories/table.stories.js +20 -10
- package/src/components/table/table.css +99 -0
- package/src/components/table/test/table.test.js +1 -1
- package/src/lib/utils.js +17 -0
- package/{web-dev-server-storybook.config.mjs → web-dev-server.config.mjs} +1 -2
- package/web-test-runner.config.mjs +15 -2
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
import { html } from "lit"
|
|
2
|
-
import { fixture, expect } from "@open-wc/testing"
|
|
2
|
+
import { fixture, expect, elementUpdated, oneEvent } from "@open-wc/testing"
|
|
3
|
+
import { sendKeys } from "@web/test-runner-commands"
|
|
3
4
|
|
|
4
5
|
import "../leu-checkbox.js"
|
|
5
|
-
import "../leu-checkbox-group.js"
|
|
6
6
|
|
|
7
7
|
async function defaultFixture() {
|
|
8
8
|
return fixture(html`
|
|
9
|
-
<leu-checkbox
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
`)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
async function checkedFixture() {
|
|
18
|
-
return fixture(html`
|
|
19
|
-
<leu-checkbox-group>
|
|
20
|
-
<leu-checkbox identifier="a" value="1" disabled>1</leu-checkbox>
|
|
21
|
-
<leu-checkbox identifier="b" value="2" checked>2</leu-checkbox>
|
|
22
|
-
<leu-checkbox identifier="c" value="3">3</leu-checkbox>
|
|
23
|
-
</leu-checkbox-group>
|
|
9
|
+
<leu-checkbox
|
|
10
|
+
identifier="b"
|
|
11
|
+
value="2"
|
|
12
|
+
label="Das ist ein Label"
|
|
13
|
+
></leu-checkbox>
|
|
24
14
|
`)
|
|
25
15
|
}
|
|
26
16
|
|
|
27
17
|
describe("LeuCheckbox", () => {
|
|
28
18
|
it("is a defined element", async () => {
|
|
29
|
-
const el =
|
|
19
|
+
const el = customElements.get("leu-checkbox")
|
|
30
20
|
|
|
31
21
|
await expect(el).not.to.be.undefined
|
|
32
22
|
})
|
|
@@ -37,65 +27,88 @@ describe("LeuCheckbox", () => {
|
|
|
37
27
|
await expect(el).shadowDom.to.be.accessible()
|
|
38
28
|
})
|
|
39
29
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const el = await customElements.get("leu-checkbox-group")
|
|
30
|
+
it("is not checked by default", async () => {
|
|
31
|
+
const el = await defaultFixture()
|
|
43
32
|
|
|
44
|
-
|
|
45
|
-
|
|
33
|
+
expect(el.checked).to.be.false
|
|
34
|
+
})
|
|
46
35
|
|
|
47
|
-
|
|
48
|
-
|
|
36
|
+
it("toggles the checked property when clicked", async () => {
|
|
37
|
+
const el = await defaultFixture()
|
|
38
|
+
const checkbox = el.shadowRoot.querySelector("input")
|
|
39
|
+
const label = el.shadowRoot.querySelector("label")
|
|
49
40
|
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
checkbox.click()
|
|
42
|
+
await elementUpdated(el)
|
|
52
43
|
|
|
53
|
-
|
|
54
|
-
const el = await defaultFixture()
|
|
55
|
-
const leuCheckbox = el.querySelector('leu-checkbox[value="2"]')
|
|
56
|
-
const checkbox = leuCheckbox.shadowRoot.querySelector("input")
|
|
44
|
+
expect(el.checked).to.be.true
|
|
57
45
|
|
|
58
|
-
|
|
46
|
+
label.click()
|
|
47
|
+
await elementUpdated(el)
|
|
59
48
|
|
|
60
|
-
|
|
61
|
-
|
|
49
|
+
expect(el.checked).to.be.false
|
|
50
|
+
})
|
|
62
51
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
it("does not toggle the checked property when disabled", async () => {
|
|
53
|
+
const el = await defaultFixture()
|
|
54
|
+
const checkbox = el.shadowRoot.querySelector("input")
|
|
55
|
+
const label = el.shadowRoot.querySelector("label")
|
|
67
56
|
|
|
68
|
-
|
|
69
|
-
|
|
57
|
+
el.disabled = true
|
|
58
|
+
await elementUpdated(el)
|
|
70
59
|
|
|
71
|
-
|
|
72
|
-
|
|
60
|
+
checkbox.click()
|
|
61
|
+
await elementUpdated(el)
|
|
62
|
+
|
|
63
|
+
expect(el.checked).to.be.false
|
|
64
|
+
|
|
65
|
+
label.click()
|
|
66
|
+
await elementUpdated(el)
|
|
73
67
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const leuCheckbox = el.querySelector('leu-checkbox[value="1"]')
|
|
77
|
-
const checkbox = leuCheckbox.shadowRoot.querySelector("input")
|
|
68
|
+
expect(el.checked).to.be.false
|
|
69
|
+
})
|
|
78
70
|
|
|
79
|
-
|
|
71
|
+
it("toggles the checked property when the space key is pressed", async () => {
|
|
72
|
+
const el = await defaultFixture()
|
|
73
|
+
el.focus()
|
|
80
74
|
|
|
81
|
-
|
|
75
|
+
await sendKeys({
|
|
76
|
+
press: "Space",
|
|
82
77
|
})
|
|
83
78
|
|
|
84
|
-
|
|
85
|
-
const el = await checkedFixture()
|
|
79
|
+
expect(el.checked).to.be.true
|
|
86
80
|
|
|
87
|
-
|
|
81
|
+
await sendKeys({
|
|
82
|
+
press: "Space",
|
|
88
83
|
})
|
|
89
84
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
85
|
+
expect(el.checked).to.be.false
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it("fires a change event when clicked", async () => {
|
|
89
|
+
const el = await defaultFixture()
|
|
90
|
+
const checkbox = el.shadowRoot.querySelector("input")
|
|
94
91
|
|
|
95
|
-
|
|
92
|
+
setTimeout(() => checkbox.click())
|
|
93
|
+
const event = await oneEvent(el, "change")
|
|
96
94
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
expect(event).to.exist
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
it("fires an input event when clicked", async () => {
|
|
99
|
+
const el = await defaultFixture()
|
|
100
|
+
const checkbox = el.shadowRoot.querySelector("input")
|
|
101
|
+
|
|
102
|
+
setTimeout(() => checkbox.click())
|
|
103
|
+
const event = await oneEvent(el, "input")
|
|
104
|
+
|
|
105
|
+
expect(event).to.exist
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
it("applies the identifier to the input and the label", async () => {
|
|
109
|
+
const el = await defaultFixture()
|
|
110
|
+
|
|
111
|
+
expect(el.shadowRoot.querySelector("input").id).to.equal("b")
|
|
112
|
+
expect(el.shadowRoot.querySelector("label").htmlFor).to.equal("b")
|
|
100
113
|
})
|
|
101
114
|
})
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { LitElement, html } from "lit"
|
|
2
|
-
import { defineElement } from "../../lib/defineElement.js"
|
|
3
2
|
import styles from "./chip-group.css"
|
|
4
3
|
|
|
5
4
|
/* Figma https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=131766-248643&mode=design&t=Kjo5VDiqivihn8dh-11 */
|
|
@@ -65,7 +64,3 @@ export class LeuChipGroup extends LitElement {
|
|
|
65
64
|
return html`<slot @slotchange=${this.handleSlotChange}></slot>`
|
|
66
65
|
}
|
|
67
66
|
}
|
|
68
|
-
|
|
69
|
-
export function defineChipGroupElements() {
|
|
70
|
-
defineElement("chip-group", LeuChipGroup)
|
|
71
|
-
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { html } from "lit"
|
|
2
|
-
import { defineElement } from "../../lib/defineElement.js"
|
|
3
2
|
|
|
4
3
|
import { LeuChipBase } from "./Chip.js"
|
|
5
4
|
|
|
@@ -34,11 +33,7 @@ export class LeuChipLink extends LeuChipBase {
|
|
|
34
33
|
|
|
35
34
|
render() {
|
|
36
35
|
return html`<a href=${this.href} class="button">
|
|
37
|
-
<span class="label"
|
|
36
|
+
<span class="label">${this.label}</span>
|
|
38
37
|
</a>`
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
export function defineChipLinkElements() {
|
|
43
|
-
defineElement("chip-link", LeuChipLink)
|
|
44
|
-
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { html } from "lit"
|
|
2
|
-
import { defineElement } from "../../lib/defineElement.js"
|
|
3
2
|
|
|
4
3
|
import { LeuChipBase } from "./Chip.js"
|
|
5
4
|
import { Icon } from "../icon/icon.js"
|
|
@@ -31,12 +30,8 @@ export class LeuChipRemovable extends LeuChipBase {
|
|
|
31
30
|
|
|
32
31
|
render() {
|
|
33
32
|
return html`<button @click=${(e) => this.handleClick(e)} class="button">
|
|
34
|
-
<span class="label"
|
|
33
|
+
<span class="label">${this.label}</span>
|
|
35
34
|
<div class="icon">${this._removeIcon}</div>
|
|
36
35
|
</button>`
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
|
-
|
|
40
|
-
export function defineChipRemovableElements() {
|
|
41
|
-
defineElement("chip-removable", LeuChipRemovable)
|
|
42
|
-
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { html } from "lit"
|
|
2
|
-
import { defineElement } from "../../lib/defineElement.js"
|
|
3
2
|
|
|
4
3
|
import { LeuChipBase } from "./Chip.js"
|
|
5
4
|
|
|
@@ -81,11 +80,7 @@ export class LeuChipSelectable extends LeuChipBase {
|
|
|
81
80
|
class="button"
|
|
82
81
|
aria-selected=${this.selected ? "true" : "false"}
|
|
83
82
|
>
|
|
84
|
-
<span class="label"
|
|
83
|
+
<span class="label">${this.label}</span>
|
|
85
84
|
</button>`
|
|
86
85
|
}
|
|
87
86
|
}
|
|
88
|
-
|
|
89
|
-
export function defineChipSelectableElements() {
|
|
90
|
-
defineElement("chip-selectable", LeuChipSelectable)
|
|
91
|
-
}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
export { LeuChipGroup
|
|
2
|
-
export { LeuChipLink
|
|
3
|
-
export {
|
|
4
|
-
|
|
5
|
-
defineChipRemovableElements,
|
|
6
|
-
} from "./ChipRemovable.js"
|
|
7
|
-
export {
|
|
8
|
-
LeuChipSelectable,
|
|
9
|
-
defineChipSelectableElements,
|
|
10
|
-
} from "./ChipSelectable.js"
|
|
1
|
+
export { LeuChipGroup } from "./ChipGroup.js"
|
|
2
|
+
export { LeuChipLink } from "./ChipLink.js"
|
|
3
|
+
export { LeuChipRemovable } from "./ChipRemovable.js"
|
|
4
|
+
export { LeuChipSelectable } from "./ChipSelectable.js"
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineElement } from "../../lib/defineElement.js"
|
|
2
|
+
import { LeuChipGroup } from "./ChipGroup.js"
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
export { LeuChipGroup }
|
|
5
|
+
|
|
6
|
+
defineElement("chip-group", LeuChipGroup)
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineElement } from "../../lib/defineElement.js"
|
|
2
|
+
import { LeuChipRemovable } from "./ChipRemovable.js"
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
export { LeuChipRemovable }
|
|
5
|
+
|
|
6
|
+
defineElement("chip-removable", LeuChipRemovable)
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineElement } from "../../lib/defineElement.js"
|
|
2
|
+
import { LeuChipSelectable } from "./ChipSelectable.js"
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
export { LeuChipSelectable }
|
|
5
|
+
|
|
6
|
+
defineElement("chip-selectable", LeuChipSelectable)
|
|
@@ -8,7 +8,7 @@ import { SELECTION_MODES } from "../ChipGroup.js"
|
|
|
8
8
|
import { VARIANTS as SELECTABLE_VARIANTS } from "../ChipSelectable.js"
|
|
9
9
|
|
|
10
10
|
export default {
|
|
11
|
-
title: "Chip
|
|
11
|
+
title: "Chip/Group",
|
|
12
12
|
component: "leu-chip-group",
|
|
13
13
|
argTypes: {
|
|
14
14
|
selectionMode: {
|
|
@@ -21,6 +21,15 @@ export default {
|
|
|
21
21
|
selectionMode: "",
|
|
22
22
|
inverted: false,
|
|
23
23
|
},
|
|
24
|
+
parameters: {
|
|
25
|
+
design: {
|
|
26
|
+
type: "figma",
|
|
27
|
+
url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17340-81933&mode=design&t=lzVrtq8lxYVJU5TB-11",
|
|
28
|
+
},
|
|
29
|
+
html: {
|
|
30
|
+
root: "[data-root]",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
24
33
|
}
|
|
25
34
|
|
|
26
35
|
const chips = ["Chip 1", "Chip 2", "Chip 3"]
|
|
@@ -31,6 +40,7 @@ function invertedBackground(args, content) {
|
|
|
31
40
|
style="background: ${args.inverted
|
|
32
41
|
? "hsla(209, 83%, 59%, 1)"
|
|
33
42
|
: "var(--leu-color-black-5)"}; padding: 1rem;"
|
|
43
|
+
data-root
|
|
34
44
|
>
|
|
35
45
|
${content}
|
|
36
46
|
</div>
|
|
@@ -42,8 +52,7 @@ function DefaultTemplate(args) {
|
|
|
42
52
|
<leu-chip-group selection-mode=${args.selectionMode}>
|
|
43
53
|
${chips.map(
|
|
44
54
|
(chip) => html`
|
|
45
|
-
<leu-chip-removable ?inverted=${args.inverted}>
|
|
46
|
-
${chip}
|
|
55
|
+
<leu-chip-removable ?inverted=${args.inverted} label=${chip}>
|
|
47
56
|
</leu-chip-removable>
|
|
48
57
|
`
|
|
49
58
|
)}
|
|
@@ -62,8 +71,8 @@ function SingleTemplate(args) {
|
|
|
62
71
|
?inverted=${args.inverted}
|
|
63
72
|
variant=${SELECTABLE_VARIANTS.radio}
|
|
64
73
|
value="chip-${chip}"
|
|
74
|
+
label=${chip}
|
|
65
75
|
>
|
|
66
|
-
${chip}
|
|
67
76
|
</leu-chip-selectable>
|
|
68
77
|
`
|
|
69
78
|
)}
|
|
@@ -78,8 +87,11 @@ function MultipleTemplate(args) {
|
|
|
78
87
|
<leu-chip-group selection-mode=${args.selectionMode}>
|
|
79
88
|
${chips.map(
|
|
80
89
|
(chip) => html`
|
|
81
|
-
<leu-chip-selectable
|
|
82
|
-
|
|
90
|
+
<leu-chip-selectable
|
|
91
|
+
?inverted=${args.inverted}
|
|
92
|
+
value="chip-${chip}"
|
|
93
|
+
label=${chip}
|
|
94
|
+
>
|
|
83
95
|
</leu-chip-selectable>
|
|
84
96
|
`
|
|
85
97
|
)}
|
|
@@ -6,7 +6,7 @@ import "../leu-chip-link.js"
|
|
|
6
6
|
import { SIZES } from "../ChipLink.js"
|
|
7
7
|
|
|
8
8
|
export default {
|
|
9
|
-
title: "Chip
|
|
9
|
+
title: "Chip/Link",
|
|
10
10
|
component: "leu-chip-link",
|
|
11
11
|
argTypes: {
|
|
12
12
|
size: { control: "select", options: Object.values(SIZES) },
|
|
@@ -14,6 +14,15 @@ export default {
|
|
|
14
14
|
args: {
|
|
15
15
|
label: "Publikationen",
|
|
16
16
|
},
|
|
17
|
+
parameters: {
|
|
18
|
+
design: {
|
|
19
|
+
type: "figma",
|
|
20
|
+
url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17340-81933&mode=design&t=lzVrtq8lxYVJU5TB-11",
|
|
21
|
+
},
|
|
22
|
+
html: {
|
|
23
|
+
root: "[data-root]",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
17
26
|
}
|
|
18
27
|
|
|
19
28
|
function Template(args) {
|
|
@@ -22,10 +31,13 @@ function Template(args) {
|
|
|
22
31
|
style="background: ${args.inverted
|
|
23
32
|
? "hsla(209, 83%, 59%, 1)"
|
|
24
33
|
: "var(--leu-color-black-5)"}; padding: 1rem;"
|
|
34
|
+
data-root
|
|
25
35
|
>
|
|
26
|
-
<leu-chip-link
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
<leu-chip-link
|
|
37
|
+
size=${ifDefined(args.size)}
|
|
38
|
+
?inverted=${args.inverted}
|
|
39
|
+
label=${args.label}
|
|
40
|
+
></leu-chip-link>
|
|
29
41
|
</div>
|
|
30
42
|
`
|
|
31
43
|
}
|
|
@@ -3,11 +3,20 @@ import { html } from "lit"
|
|
|
3
3
|
import "../leu-chip-removable.js"
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
title: "Chip
|
|
6
|
+
title: "Chip/Removable",
|
|
7
7
|
component: "leu-chip-removable",
|
|
8
8
|
args: {
|
|
9
9
|
label: "Publikationen",
|
|
10
10
|
},
|
|
11
|
+
parameters: {
|
|
12
|
+
design: {
|
|
13
|
+
type: "figma",
|
|
14
|
+
url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17340-81933&mode=design&t=lzVrtq8lxYVJU5TB-11",
|
|
15
|
+
},
|
|
16
|
+
html: {
|
|
17
|
+
root: "[data-root]",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
11
20
|
}
|
|
12
21
|
|
|
13
22
|
function Template(args) {
|
|
@@ -16,10 +25,12 @@ function Template(args) {
|
|
|
16
25
|
style="background: ${args.inverted
|
|
17
26
|
? "hsla(209, 83%, 59%, 1)"
|
|
18
27
|
: "var(--leu-color-black-5)"}; padding: 1rem;"
|
|
28
|
+
data-root
|
|
19
29
|
>
|
|
20
|
-
<leu-chip-removable
|
|
21
|
-
|
|
22
|
-
|
|
30
|
+
<leu-chip-removable
|
|
31
|
+
?inverted=${args.inverted}
|
|
32
|
+
label=${args.label}
|
|
33
|
+
></leu-chip-removable>
|
|
23
34
|
</div>
|
|
24
35
|
`
|
|
25
36
|
}
|
|
@@ -6,7 +6,7 @@ import "../leu-chip-selectable.js"
|
|
|
6
6
|
import { SIZES, VARIANTS } from "../ChipSelectable.js"
|
|
7
7
|
|
|
8
8
|
export default {
|
|
9
|
-
title: "Chip
|
|
9
|
+
title: "Chip/Selectable",
|
|
10
10
|
component: "leu-chip-selectable",
|
|
11
11
|
argTypes: {
|
|
12
12
|
variant: { control: "select", options: Object.values(VARIANTS) },
|
|
@@ -16,6 +16,15 @@ export default {
|
|
|
16
16
|
args: {
|
|
17
17
|
label: "Publikationen",
|
|
18
18
|
},
|
|
19
|
+
parameters: {
|
|
20
|
+
design: {
|
|
21
|
+
type: "figma",
|
|
22
|
+
url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17340-81933&mode=design&t=lzVrtq8lxYVJU5TB-11",
|
|
23
|
+
},
|
|
24
|
+
html: {
|
|
25
|
+
root: "[data-root]",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
19
28
|
}
|
|
20
29
|
|
|
21
30
|
function Template(args) {
|
|
@@ -24,14 +33,15 @@ function Template(args) {
|
|
|
24
33
|
style="background: ${args.inverted
|
|
25
34
|
? "hsla(209, 83%, 59%, 1)"
|
|
26
35
|
: "var(--leu-color-black-5)"}; padding: 1rem;"
|
|
36
|
+
data-root
|
|
27
37
|
>
|
|
28
38
|
<leu-chip-selectable
|
|
29
39
|
size=${ifDefined(args.size)}
|
|
30
40
|
variant=${ifDefined(args.variant)}
|
|
41
|
+
label=${args.label}
|
|
31
42
|
?selected=${args.selected}
|
|
32
43
|
?inverted=${args.inverted}
|
|
33
|
-
|
|
34
|
-
>
|
|
44
|
+
></leu-chip-selectable>
|
|
35
45
|
</div>
|
|
36
46
|
`
|
|
37
47
|
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { html } from "lit"
|
|
2
|
+
import { fixture, expect, oneEvent } from "@open-wc/testing"
|
|
3
|
+
|
|
4
|
+
import "../leu-chip-selectable.js"
|
|
5
|
+
import "../leu-chip-removable.js"
|
|
6
|
+
import "../leu-chip-group.js"
|
|
7
|
+
|
|
8
|
+
async function removableFixture() {
|
|
9
|
+
return fixture(
|
|
10
|
+
html`
|
|
11
|
+
<leu-chip-group>
|
|
12
|
+
<leu-chip-removable label="Publikationen"></leu-chip-removable>
|
|
13
|
+
<leu-chip-removable label="Daten" value="2"></leu-chip-removable>
|
|
14
|
+
<leu-chip-removable
|
|
15
|
+
label="Schnittstellen"
|
|
16
|
+
value="3"
|
|
17
|
+
></leu-chip-removable>
|
|
18
|
+
</leu-chip-group>
|
|
19
|
+
`
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function singleSelectionFixture() {
|
|
24
|
+
return fixture(
|
|
25
|
+
html`
|
|
26
|
+
<leu-chip-group selection-mode="single">
|
|
27
|
+
<leu-chip-selectable
|
|
28
|
+
label="Publikationen"
|
|
29
|
+
value="1"
|
|
30
|
+
variant="radio"
|
|
31
|
+
></leu-chip-selectable>
|
|
32
|
+
<leu-chip-selectable
|
|
33
|
+
label="Daten"
|
|
34
|
+
value="2"
|
|
35
|
+
variant="radio"
|
|
36
|
+
></leu-chip-selectable>
|
|
37
|
+
<leu-chip-selectable
|
|
38
|
+
label="Schnittstellen"
|
|
39
|
+
value="3"
|
|
40
|
+
variant="radio"
|
|
41
|
+
></leu-chip-selectable>
|
|
42
|
+
</leu-chip-group>
|
|
43
|
+
`
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function multipleSelectionFixture() {
|
|
48
|
+
return fixture(
|
|
49
|
+
html`
|
|
50
|
+
<leu-chip-group selection-mode="multiple">
|
|
51
|
+
<leu-chip-selectable
|
|
52
|
+
label="Publikationen"
|
|
53
|
+
value="1"
|
|
54
|
+
></leu-chip-selectable>
|
|
55
|
+
<leu-chip-selectable label="Daten" value="2"></leu-chip-selectable>
|
|
56
|
+
<leu-chip-selectable
|
|
57
|
+
label="Schnittstellen"
|
|
58
|
+
value="3"
|
|
59
|
+
></leu-chip-selectable>
|
|
60
|
+
</leu-chip-group>
|
|
61
|
+
`
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
describe("LeuChipGroup", () => {
|
|
66
|
+
it("is a defined element", async () => {
|
|
67
|
+
const el = customElements.get("leu-chip-selectable")
|
|
68
|
+
|
|
69
|
+
await expect(el).not.to.be.undefined
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it("passes the a11y audit with removable chips", async () => {
|
|
73
|
+
const el = await removableFixture()
|
|
74
|
+
|
|
75
|
+
await expect(el).shadowDom.to.be.accessible()
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
it("passes the a11y audit with selectable chips", async () => {
|
|
79
|
+
const el = await multipleSelectionFixture()
|
|
80
|
+
|
|
81
|
+
await expect(el).shadowDom.to.be.accessible()
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it("passes the a11y audit with selectable radio chips", async () => {
|
|
85
|
+
const el = await singleSelectionFixture()
|
|
86
|
+
|
|
87
|
+
await expect(el).shadowDom.to.be.accessible()
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
it("updates the value when a chip is selected", async () => {
|
|
91
|
+
const el = await singleSelectionFixture()
|
|
92
|
+
const chip = el.querySelector("leu-chip-selectable")
|
|
93
|
+
const chipButton = chip.shadowRoot.querySelector("button")
|
|
94
|
+
chipButton.click()
|
|
95
|
+
|
|
96
|
+
await expect(el.value).to.deep.equal(["1"])
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
it("updates the value when multiple chips are selected", async () => {
|
|
100
|
+
const el = await multipleSelectionFixture()
|
|
101
|
+
const chips = el.querySelectorAll("leu-chip-selectable")
|
|
102
|
+
const chipButton2 = chips[1].shadowRoot.querySelector("button")
|
|
103
|
+
const chipButton3 = chips[2].shadowRoot.querySelector("button")
|
|
104
|
+
|
|
105
|
+
chipButton2.click()
|
|
106
|
+
chipButton3.click()
|
|
107
|
+
|
|
108
|
+
await expect(el.value).to.deep.equal(["2", "3"])
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it("fires an input event when a chip is selected", async () => {
|
|
112
|
+
const el = await singleSelectionFixture()
|
|
113
|
+
const chip = el.querySelector("leu-chip-selectable")
|
|
114
|
+
const chipButton = chip.shadowRoot.querySelector("button")
|
|
115
|
+
|
|
116
|
+
setTimeout(() => {
|
|
117
|
+
chipButton.click()
|
|
118
|
+
}, 0)
|
|
119
|
+
|
|
120
|
+
const event = await oneEvent(el, "input")
|
|
121
|
+
|
|
122
|
+
await expect(event).to.exist
|
|
123
|
+
})
|
|
124
|
+
})
|