@statistikzh/leu 0.13.1 → 0.14.1

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.
Files changed (201) hide show
  1. package/.eslintrc.json +8 -0
  2. package/.github/workflows/ci.yml +78 -0
  3. package/.github/workflows/deploy-github-pages.yaml +2 -1
  4. package/.github/workflows/release-please.yml +2 -1
  5. package/.nvmrc +1 -0
  6. package/.prettierignore +1 -0
  7. package/.storybook/main.js +19 -3
  8. package/.storybook/preview.js +11 -0
  9. package/CHANGELOG.md +27 -0
  10. package/README.md +0 -67
  11. package/custom-elements-manifest.config.js +2 -2
  12. package/dist/Accordion.d.ts +1 -1
  13. package/dist/Accordion.js +8 -8
  14. package/dist/Button.d.ts +2 -2
  15. package/dist/Button.js +2 -2
  16. package/dist/ButtonGroup.d.ts +1 -1
  17. package/dist/ButtonGroup.js +1 -1
  18. package/dist/Checkbox.d.ts +1 -1
  19. package/dist/Checkbox.d.ts.map +1 -1
  20. package/dist/Checkbox.js +2 -3
  21. package/dist/CheckboxGroup.d.ts +1 -1
  22. package/dist/CheckboxGroup.d.ts.map +1 -1
  23. package/dist/CheckboxGroup.js +1 -3
  24. package/dist/Chip.d.ts +1 -1
  25. package/dist/Chip.d.ts.map +1 -1
  26. package/dist/Chip.js +1 -3
  27. package/dist/ChipGroup.d.ts +1 -1
  28. package/dist/ChipGroup.d.ts.map +1 -1
  29. package/dist/ChipGroup.js +2 -2
  30. package/dist/ChipLink.js +1 -1
  31. package/dist/ChipRemovable.js +1 -1
  32. package/dist/ChipSelectable.js +1 -1
  33. package/dist/Dialog.d.ts +1 -1
  34. package/dist/Dialog.d.ts.map +1 -1
  35. package/dist/Dialog.js +3 -5
  36. package/dist/Dropdown.d.ts +1 -1
  37. package/dist/Dropdown.js +3 -3
  38. package/dist/Icon.d.ts +2 -98
  39. package/dist/Icon.d.ts.map +1 -1
  40. package/dist/Icon.js +1 -1
  41. package/dist/Input.d.ts +8 -3
  42. package/dist/Input.d.ts.map +1 -1
  43. package/dist/Input.js +18 -12
  44. package/dist/{LeuElement-b670d77c.d.ts → LeuElement-DH0PPSMq.d.ts} +1 -1
  45. package/dist/LeuElement-DH0PPSMq.d.ts.map +1 -0
  46. package/dist/{LeuElement-b670d77c.js → LeuElement-DH0PPSMq.js} +2 -2
  47. package/dist/Menu.d.ts +2 -2
  48. package/dist/Menu.js +1 -1
  49. package/dist/MenuItem.d.ts +3 -3
  50. package/dist/MenuItem.js +1 -1
  51. package/dist/Pagination.d.ts +1 -1
  52. package/dist/Pagination.js +3 -3
  53. package/dist/Popup.d.ts +2 -2
  54. package/dist/Popup.d.ts.map +1 -1
  55. package/dist/Popup.js +1 -3
  56. package/dist/Radio.d.ts +1 -1
  57. package/dist/Radio.d.ts.map +1 -1
  58. package/dist/Radio.js +1 -3
  59. package/dist/RadioGroup.d.ts +1 -1
  60. package/dist/RadioGroup.d.ts.map +1 -1
  61. package/dist/RadioGroup.js +1 -3
  62. package/dist/Range.d.ts +1 -1
  63. package/dist/Range.d.ts.map +1 -1
  64. package/dist/Range.js +17 -19
  65. package/dist/ScrollTop.d.ts +1 -1
  66. package/dist/ScrollTop.d.ts.map +1 -1
  67. package/dist/ScrollTop.js +27 -3
  68. package/dist/Select.d.ts +3 -7
  69. package/dist/Select.d.ts.map +1 -1
  70. package/dist/Select.js +7 -18
  71. package/dist/Spinner.d.ts +1 -1
  72. package/dist/Spinner.js +1 -1
  73. package/dist/Table.d.ts +1 -1
  74. package/dist/Table.d.ts.map +1 -1
  75. package/dist/Table.js +3 -4
  76. package/dist/VisuallyHidden.d.ts +1 -1
  77. package/dist/VisuallyHidden.d.ts.map +1 -1
  78. package/dist/VisuallyHidden.js +3 -5
  79. package/dist/{hasSlotController-c09741c5.d.ts → hasSlotController-CYd5tWew.d.ts} +1 -1
  80. package/dist/hasSlotController-CYd5tWew.d.ts.map +1 -0
  81. package/dist/{hasSlotController-c09741c5.js → hasSlotController-CYd5tWew.js} +1 -1
  82. package/dist/index.d.ts +1 -2
  83. package/dist/index.js +5 -7
  84. package/dist/leu-accordion.js +1 -1
  85. package/dist/leu-button-group.js +1 -1
  86. package/dist/leu-button.js +2 -2
  87. package/dist/leu-checkbox-group.js +1 -1
  88. package/dist/leu-checkbox.js +1 -1
  89. package/dist/leu-chip-group.js +1 -1
  90. package/dist/leu-chip-link.js +1 -1
  91. package/dist/leu-chip-removable.js +1 -1
  92. package/dist/leu-chip-selectable.js +1 -1
  93. package/dist/leu-dialog.js +2 -2
  94. package/dist/leu-dropdown.js +2 -2
  95. package/dist/leu-icon.js +1 -1
  96. package/dist/leu-input.js +1 -1
  97. package/dist/leu-menu-item.js +1 -1
  98. package/dist/leu-menu.js +1 -1
  99. package/dist/leu-pagination.js +2 -2
  100. package/dist/leu-popup.js +1 -1
  101. package/dist/leu-radio-group.js +1 -1
  102. package/dist/leu-radio.js +1 -1
  103. package/dist/leu-range.js +1 -1
  104. package/dist/leu-scroll-top.js +2 -3
  105. package/dist/leu-select.js +2 -2
  106. package/dist/leu-spinner.js +1 -1
  107. package/dist/leu-table.js +2 -2
  108. package/dist/leu-visually-hidden.js +1 -1
  109. package/dist/theme.css +143 -107
  110. package/dist/vscode.html-custom-data.json +4 -33
  111. package/dist/vue/index.d.ts +11 -78
  112. package/dist/web-types.json +247 -243
  113. package/index.js +0 -1
  114. package/package.json +55 -51
  115. package/rollup.config.js +3 -3
  116. package/scripts/generate-component/generate.js +5 -5
  117. package/scripts/generate-component/templates/stories/[name].stories.js +1 -1
  118. package/src/components/accordion/Accordion.js +1 -1
  119. package/src/components/accordion/accordion.css +6 -3
  120. package/src/components/accordion/stories/accordion.stories.js +7 -6
  121. package/src/components/accordion/test/accordion.test.js +24 -20
  122. package/src/components/button/Button.js +1 -1
  123. package/src/components/button/stories/button.stories.js +44 -46
  124. package/src/components/button/test/button.test.js +10 -10
  125. package/src/components/button-group/ButtonGroup.js +1 -1
  126. package/src/components/button-group/stories/button-group.stories.js +3 -3
  127. package/src/components/checkbox/checkbox.css +1 -0
  128. package/src/components/checkbox/stories/checkbox-group.stories.js +1 -1
  129. package/src/components/checkbox/stories/checkbox.stories.js +1 -1
  130. package/src/components/chip/ChipSelectable.js +1 -1
  131. package/src/components/chip/stories/chip-group.stories.js +5 -5
  132. package/src/components/chip/stories/chip-link.stories.js +1 -1
  133. package/src/components/chip/stories/chip-removable.stories.js +1 -1
  134. package/src/components/chip/stories/chip-selectable.stories.js +1 -1
  135. package/src/components/chip/test/chip-group.test.js +25 -33
  136. package/src/components/chip/test/chip-link.test.js +5 -5
  137. package/src/components/chip/test/chip-removable.test.js +6 -8
  138. package/src/components/chip/test/chip-selectable.test.js +9 -11
  139. package/src/components/dialog/stories/dialog.stories.js +1 -1
  140. package/src/components/dialog/test/dialog.test.js +1 -1
  141. package/src/components/dropdown/stories/dropdown.stories.js +1 -1
  142. package/src/components/dropdown/test/dropdown.test.js +12 -13
  143. package/src/components/icon/stories/icon.stories.js +1 -1
  144. package/src/components/input/Input.js +26 -18
  145. package/src/components/input/input.css +2 -2
  146. package/src/components/input/stories/input.stories.js +1 -4
  147. package/src/components/input/test/input.test.js +26 -0
  148. package/src/components/menu/stories/menu-item.stories.js +3 -1
  149. package/src/components/menu/stories/menu.stories.js +1 -1
  150. package/src/components/menu/test/menu-item.test.js +3 -2
  151. package/src/components/menu/test/menu.test.js +24 -22
  152. package/src/components/pagination/Pagination.js +1 -1
  153. package/src/components/pagination/pagination.css +1 -1
  154. package/src/components/pagination/stories/pagination.stories.js +3 -2
  155. package/src/components/pagination/test/pagination.test.js +8 -6
  156. package/src/components/popup/Popup.js +4 -4
  157. package/src/components/popup/stories/popup.stories.js +1 -1
  158. package/src/components/popup/test/popup.test.js +6 -8
  159. package/src/components/radio/RadioGroup.js +2 -2
  160. package/src/components/radio/stories/radio-group.stories.js +1 -1
  161. package/src/components/radio/stories/radio.stories.js +1 -1
  162. package/src/components/range/Range.js +20 -21
  163. package/src/components/range/stories/range-slider.stories.js +1 -1
  164. package/src/components/scroll-top/stories/scroll-top.stories.js +1 -1
  165. package/src/components/select/Select.js +7 -18
  166. package/src/components/select/stories/select.stories.js +3 -3
  167. package/src/components/select/test/select.test.js +18 -16
  168. package/src/components/spinner/stories/spinner.stories.js +1 -1
  169. package/src/components/table/Table.js +4 -4
  170. package/src/components/table/stories/table.stories.js +1 -1
  171. package/src/components/table/test/table.test.js +3 -2
  172. package/src/components/visually-hidden/stories/visually-hidden.stories.js +1 -1
  173. package/src/components/visually-hidden/test/visually-hidden.test.js +6 -8
  174. package/src/docs/contributing.mdx +154 -0
  175. package/src/docs/installation.mdx +35 -0
  176. package/src/docs/theme.mdx +349 -0
  177. package/src/docs/usage.mdx +73 -0
  178. package/src/lib/LeuElement.js +2 -2
  179. package/src/lib/hasSlotController.js +1 -1
  180. package/src/styles/style.stories.js +4 -2
  181. package/tsconfig.build.json +4 -3
  182. package/web-dev-server.config.mjs +1 -0
  183. package/web-test-runner.config.mjs +1 -1
  184. package/.github/workflows/test.yml +0 -38
  185. package/.storybook/preview-head.html +0 -2
  186. package/dist/Breadcrumb.d.ts +0 -69
  187. package/dist/Breadcrumb.d.ts.map +0 -1
  188. package/dist/Breadcrumb.js +0 -391
  189. package/dist/LeuElement-b670d77c.d.ts.map +0 -1
  190. package/dist/hasSlotController-c09741c5.d.ts.map +0 -1
  191. package/dist/leu-breadcrumb.d.ts +0 -3
  192. package/dist/leu-breadcrumb.d.ts.map +0 -1
  193. package/dist/leu-breadcrumb.js +0 -17
  194. package/dist/utils-65469421.d.ts +0 -16
  195. package/dist/utils-65469421.d.ts.map +0 -1
  196. package/dist/utils-65469421.js +0 -35
  197. package/src/components/breadcrumb/Breadcrumb.js +0 -324
  198. package/src/components/breadcrumb/breadcrumb.css +0 -98
  199. package/src/components/breadcrumb/leu-breadcrumb.js +0 -5
  200. package/src/components/breadcrumb/stories/breadcrumb.stories.js +0 -73
  201. package/src/components/breadcrumb/test/breadcrumb.test.js +0 -141
@@ -2,7 +2,7 @@ import { html } from "lit"
2
2
  import "../leu-checkbox.js"
3
3
 
4
4
  export default {
5
- title: "Checkbox",
5
+ title: "Components/Checkbox",
6
6
  component: "leu-checkbox",
7
7
  argTypes: {
8
8
  label: {
@@ -69,7 +69,7 @@ export class LeuChipSelectable extends LeuChipBase {
69
69
  },
70
70
  bubbles: true,
71
71
  composed: true,
72
- })
72
+ }),
73
73
  )
74
74
  }
75
75
  }
@@ -11,7 +11,7 @@ import { SELECTION_MODES } from "../ChipGroup.js"
11
11
  import { VARIANTS as SELECTABLE_VARIANTS } from "../ChipSelectable.js"
12
12
 
13
13
  export default {
14
- title: "Chip/Group",
14
+ title: "Components/Chip/Group",
15
15
  component: "leu-chip-group",
16
16
  argTypes: {
17
17
  selectionMode: {
@@ -98,7 +98,7 @@ function DefaultTemplate(args) {
98
98
  <leu-chip-removable ?inverted=${args.inverted}>
99
99
  ${chip}
100
100
  </leu-chip-removable>
101
- `
101
+ `,
102
102
  )}
103
103
  `
104
104
 
@@ -116,7 +116,7 @@ function SingleTemplate(args) {
116
116
  >
117
117
  ${chip}
118
118
  </leu-chip-selectable>
119
- `
119
+ `,
120
120
  )}
121
121
  `
122
122
 
@@ -130,7 +130,7 @@ function MultipleTemplate(args) {
130
130
  <leu-chip-selectable ?inverted=${args.inverted} value="chip-${chip}">
131
131
  ${chip}
132
132
  </leu-chip-selectable>
133
- `
133
+ `,
134
134
  )}
135
135
  `
136
136
 
@@ -142,7 +142,7 @@ function LabeledTemplate(args) {
142
142
  ${links.map(
143
143
  (chip) => html`
144
144
  <leu-chip-link ?inverted=${args.inverted}> ${chip} </leu-chip-link>
145
- `
145
+ `,
146
146
  )}
147
147
  `
148
148
 
@@ -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/Link",
9
+ title: "Components/Chip/Link",
10
10
  component: "leu-chip-link",
11
11
  argTypes: {
12
12
  size: { control: "select", options: Object.values(SIZES) },
@@ -4,7 +4,7 @@ import { action } from "@storybook/addon-actions"
4
4
  import "../leu-chip-removable.js"
5
5
 
6
6
  export default {
7
- title: "Chip/Removable",
7
+ title: "Components/Chip/Removable",
8
8
  component: "leu-chip-removable",
9
9
  args: {
10
10
  label: "Daten",
@@ -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/Selectable",
9
+ title: "Components/Chip/Selectable",
10
10
  component: "leu-chip-selectable",
11
11
  argTypes: {
12
12
  variant: { control: "select", options: Object.values(VARIANTS) },
@@ -6,45 +6,37 @@ import "../leu-chip-removable.js"
6
6
  import "../leu-chip-group.js"
7
7
 
8
8
  async function removableFixture() {
9
- return fixture(
10
- html`
11
- <leu-chip-group>
12
- <leu-chip-removable>Publikationen</leu-chip-removable>
13
- <leu-chip-removable value="2">Daten</leu-chip-removable>
14
- <leu-chip-removable value="3">Schnittstellen</leu-chip-removable>
15
- </leu-chip-group>
16
- `
17
- )
9
+ return fixture(html`
10
+ <leu-chip-group>
11
+ <leu-chip-removable>Publikationen</leu-chip-removable>
12
+ <leu-chip-removable value="2">Daten</leu-chip-removable>
13
+ <leu-chip-removable value="3">Schnittstellen</leu-chip-removable>
14
+ </leu-chip-group>
15
+ `)
18
16
  }
19
17
 
20
18
  async function singleSelectionFixture() {
21
- return fixture(
22
- html`
23
- <leu-chip-group selection-mode="single">
24
- <leu-chip-selectable value="1" variant="radio"
25
- >Publikationen</leu-chip-selectable
26
- >
27
- <leu-chip-selectable value="2" variant="radio"
28
- >Daten</leu-chip-selectable
29
- >
30
- <leu-chip-selectable value="3" variant="radio"
31
- >Schnittstellen</leu-chip-selectable
32
- >
33
- </leu-chip-group>
34
- `
35
- )
19
+ return fixture(html`
20
+ <leu-chip-group selection-mode="single">
21
+ <leu-chip-selectable value="1" variant="radio"
22
+ >Publikationen</leu-chip-selectable
23
+ >
24
+ <leu-chip-selectable value="2" variant="radio">Daten</leu-chip-selectable>
25
+ <leu-chip-selectable value="3" variant="radio"
26
+ >Schnittstellen</leu-chip-selectable
27
+ >
28
+ </leu-chip-group>
29
+ `)
36
30
  }
37
31
 
38
32
  async function multipleSelectionFixture() {
39
- return fixture(
40
- html`
41
- <leu-chip-group selection-mode="multiple">
42
- <leu-chip-selectable value="1">Publikationen</leu-chip-selectable>
43
- <leu-chip-selectable value="2">Daten</leu-chip-selectable>
44
- <leu-chip-selectable value="3">Schnittstellen</leu-chip-selectable>
45
- </leu-chip-group>
46
- `
47
- )
33
+ return fixture(html`
34
+ <leu-chip-group selection-mode="multiple">
35
+ <leu-chip-selectable value="1">Publikationen</leu-chip-selectable>
36
+ <leu-chip-selectable value="2">Daten</leu-chip-selectable>
37
+ <leu-chip-selectable value="3">Schnittstellen</leu-chip-selectable>
38
+ </leu-chip-group>
39
+ `)
48
40
  }
49
41
 
50
42
  describe("LeuChipGroup", () => {
@@ -4,9 +4,9 @@ import { fixture, expect } from "@open-wc/testing"
4
4
  import "../leu-chip-link.js"
5
5
 
6
6
  async function defaultFixture() {
7
- return fixture(
8
- html` <leu-chip-link href="https://zh.ch/daten">Daten</leu-chip-link> `
9
- )
7
+ return fixture(html`
8
+ <leu-chip-link href="https://zh.ch/daten">Daten</leu-chip-link>
9
+ `)
10
10
  }
11
11
 
12
12
  describe("LeuChipLink", () => {
@@ -38,7 +38,7 @@ describe("LeuChipLink", () => {
38
38
  const el = await defaultFixture()
39
39
 
40
40
  expect(el.shadowRoot.querySelector("a").getAttribute("href")).to.equal(
41
- "https://zh.ch/daten"
41
+ "https://zh.ch/daten",
42
42
  )
43
43
  })
44
44
 
@@ -48,7 +48,7 @@ describe("LeuChipLink", () => {
48
48
  el.focus()
49
49
 
50
50
  expect(el.shadowRoot.querySelector("a")).to.equal(
51
- el.shadowRoot.activeElement
51
+ el.shadowRoot.activeElement,
52
52
  )
53
53
  })
54
54
  })
@@ -6,13 +6,11 @@ import { ifDefined } from "lit/directives/if-defined.js"
6
6
  import "../leu-chip-removable.js"
7
7
 
8
8
  async function defaultFixture(args = {}) {
9
- return fixture(
10
- html`
11
- <leu-chip-removable value=${ifDefined(args.value)}
12
- >${args.label ?? "Daten"}</leu-chip-removable
13
- >
14
- `
15
- )
9
+ return fixture(html`
10
+ <leu-chip-removable value=${ifDefined(args.value)}
11
+ >${args.label ?? "Daten"}</leu-chip-removable
12
+ >
13
+ `)
16
14
  }
17
15
 
18
16
  describe("LeuChipRemovable", () => {
@@ -54,7 +52,7 @@ describe("LeuChipRemovable", () => {
54
52
  el.focus()
55
53
 
56
54
  expect(el.shadowRoot.querySelector("button")).to.equal(
57
- el.shadowRoot.activeElement
55
+ el.shadowRoot.activeElement,
58
56
  )
59
57
  })
60
58
 
@@ -6,16 +6,14 @@ import { sendKeys } from "@web/test-runner-commands"
6
6
  import "../leu-chip-selectable.js"
7
7
 
8
8
  async function defaultFixture(args = {}) {
9
- return fixture(
10
- html`
11
- <leu-chip-selectable
12
- value=${ifDefined(args.value)}
13
- variant=${ifDefined(args.variant)}
14
- ?checked=${args.checked}
15
- >Publikationen</leu-chip-selectable
16
- >
17
- `
18
- )
9
+ return fixture(html`
10
+ <leu-chip-selectable
11
+ value=${ifDefined(args.value)}
12
+ variant=${ifDefined(args.variant)}
13
+ ?checked=${args.checked}
14
+ >Publikationen</leu-chip-selectable
15
+ >
16
+ `)
19
17
  }
20
18
 
21
19
  describe("LeuChipSelectable", () => {
@@ -49,7 +47,7 @@ describe("LeuChipSelectable", () => {
49
47
  el.focus()
50
48
 
51
49
  expect(el.shadowRoot.querySelector("button")).to.equal(
52
- el.shadowRoot.activeElement
50
+ el.shadowRoot.activeElement,
53
51
  )
54
52
  })
55
53
 
@@ -4,7 +4,7 @@ import "../../input/leu-input.js"
4
4
  import "../../button/leu-button.js"
5
5
 
6
6
  export default {
7
- title: "Dialog",
7
+ title: "Components/Dialog",
8
8
  component: "leu-dialog",
9
9
  parameters: {
10
10
  design: {
@@ -7,7 +7,7 @@ async function defaultFixture() {
7
7
  return fixture(
8
8
  html`<leu-dialog label="Title" sublabel="Category">
9
9
  This is the content of the dialog.
10
- </leu-dialog>`
10
+ </leu-dialog>`,
11
11
  )
12
12
  }
13
13
 
@@ -8,7 +8,7 @@ import { paths as iconPaths } from "../../icon/paths.js"
8
8
  * @type {import("@storybook/web-components").Meta}
9
9
  */
10
10
  export default {
11
- title: "Dropdown",
11
+ title: "Components/Dropdown",
12
12
  component: "leu-dropdown",
13
13
  parameters: {
14
14
  design: {
@@ -4,19 +4,18 @@ import { fixture, expect, elementUpdated } from "@open-wc/testing"
4
4
  import "../leu-dropdown.js"
5
5
 
6
6
  async function defaultFixture(args = { expanded: false }) {
7
- return fixture(html` <leu-dropdown
8
- label="Download"
9
- ?expanded=${args.expanded}
10
- >
11
- <leu-menu>
12
- <leu-menu-item>Als CSV Tabelle</leu-menu-item>
13
- <leu-menu-item>Als XLS Tabelle</leu-menu-item>
14
- <hr />
15
- <leu-menu-item>Als PNG exportieren</leu-menu-item>
16
- <leu-menu-item>Als SVG exportieren</leu-menu-item>
17
- <leu-menu-item>Als PDF exportieren</leu-menu-item>
18
- </leu-menu>
19
- </leu-dropdown>`)
7
+ return fixture(
8
+ html` <leu-dropdown label="Download" ?expanded=${args.expanded}>
9
+ <leu-menu>
10
+ <leu-menu-item>Als CSV Tabelle</leu-menu-item>
11
+ <leu-menu-item>Als XLS Tabelle</leu-menu-item>
12
+ <hr />
13
+ <leu-menu-item>Als PNG exportieren</leu-menu-item>
14
+ <leu-menu-item>Als SVG exportieren</leu-menu-item>
15
+ <leu-menu-item>Als PDF exportieren</leu-menu-item>
16
+ </leu-menu>
17
+ </leu-dropdown>`,
18
+ )
20
19
  }
21
20
 
22
21
  describe("LeuDropdown", () => {
@@ -4,7 +4,7 @@ import { ifDefined } from "lit/directives/if-defined.js"
4
4
  import { paths } from "../paths.js"
5
5
 
6
6
  export default {
7
- title: "Icon",
7
+ title: "Components/Icon",
8
8
  component: "leu-icon",
9
9
  argTypes: {
10
10
  name: {
@@ -171,7 +171,7 @@ export class LeuInput extends LeuElement {
171
171
  * Method for handling the blur event of the input element.
172
172
  * Checks validity of the input element and sets the validity state.
173
173
  * @private
174
- * @param {FocusEvent} event
174
+ * @param {FocusEvent & {target: HTMLInputElement}} event
175
175
  * @returns {void}
176
176
  */
177
177
  handleBlur(event) {
@@ -244,10 +244,10 @@ export class LeuInput extends LeuElement {
244
244
  this._inputRef.value.focus()
245
245
 
246
246
  this.dispatchEvent(
247
- new CustomEvent("input", { bubbles: true, composed: true })
247
+ new CustomEvent("input", { bubbles: true, composed: true }),
248
248
  )
249
249
  this.dispatchEvent(
250
- new CustomEvent("change", { bubbles: true, composed: true })
250
+ new CustomEvent("change", { bubbles: true, composed: true }),
251
251
  )
252
252
  }
253
253
 
@@ -296,24 +296,42 @@ export class LeuInput extends LeuElement {
296
296
 
297
297
  validationMessages.tooLong = LeuInput.resolveErrorMessage(
298
298
  tooLong,
299
- this.maxlength
299
+ this.maxlength,
300
300
  )
301
301
  validationMessages.tooShort = LeuInput.resolveErrorMessage(
302
302
  tooShort,
303
- this.minlength
303
+ this.minlength,
304
304
  )
305
305
  validationMessages.rangeOverflow = LeuInput.resolveErrorMessage(
306
306
  rangeOverflow,
307
- this.max
307
+ this.max,
308
308
  )
309
309
  validationMessages.rangeUnderflow = LeuInput.resolveErrorMessage(
310
310
  rangeUnderflow,
311
- this.min
311
+ this.min,
312
312
  )
313
313
 
314
314
  return validationMessages
315
315
  }
316
316
 
317
+ isInvalid() {
318
+ if (this.error) {
319
+ return true
320
+ }
321
+
322
+ return this._validity === null || this.novalidate
323
+ ? false
324
+ : !this._validity.valid
325
+ }
326
+
327
+ /**
328
+ * Check input validation
329
+ * @returns {boolean} if valid or not
330
+ */
331
+ checkValidity() {
332
+ return this._inputRef.value?.checkValidity() ?? false
333
+ }
334
+
317
335
  /**
318
336
  * Creates an error list with an item for the given validity state.
319
337
  * @returns {import("lit").TemplateResult | nothing}
@@ -337,7 +355,7 @@ export class LeuInput extends LeuElement {
337
355
  return html`
338
356
  <ul class="error" aria-errormessage=${`input-${this.getId()}`}>
339
357
  ${errorMessages.map(
340
- (message) => html`<li class="error-message">${message}</li>`
358
+ (message) => html`<li class="error-message">${message}</li>`,
341
359
  )}
342
360
  </ul>
343
361
  `
@@ -377,16 +395,6 @@ export class LeuInput extends LeuElement {
377
395
  return nothing
378
396
  }
379
397
 
380
- isInvalid() {
381
- if (this.error) {
382
- return true
383
- }
384
-
385
- return this._validity === null || this.novalidate
386
- ? false
387
- : !this._validity.valid
388
- }
389
-
390
398
  render() {
391
399
  const isInvalid = this.isInvalid()
392
400
 
@@ -95,8 +95,8 @@
95
95
 
96
96
  .prefix,
97
97
  .suffix {
98
- padding-block: 2rem 1rem;
99
-
98
+ padding-block: calc(2rem - var(--input-border-width))
99
+ calc(1rem - var(--input-border-width));
100
100
  font-size: 1rem;
101
101
  line-height: 1.5;
102
102
  color: var(--input-affix-color);
@@ -7,9 +7,8 @@ import { SIZES } from "../Input.js"
7
7
  import { paths as iconPaths } from "../../icon/paths.js"
8
8
 
9
9
  export default {
10
- title: "Input",
10
+ title: "Components/Input",
11
11
  component: "leu-input",
12
- tags: ["autodocs"],
13
12
  argTypes: {
14
13
  size: {
15
14
  control: {
@@ -49,8 +48,6 @@ function Template(args) {
49
48
  novalidate = false,
50
49
  } = args
51
50
 
52
- console.log(min, max)
53
-
54
51
  return html`
55
52
  <leu-input
56
53
  value=${ifDefined(value)}
@@ -469,4 +469,30 @@ describe("LeuInput", () => {
469
469
 
470
470
  expect(el.valueAsNumber).to.be.NaN
471
471
  })
472
+
473
+ it("check input is valid", async () => {
474
+ {
475
+ const el = await defaultFixture({ label: "Länge", type: "number" })
476
+ el.focus()
477
+
478
+ await sendKeys({ type: "text" })
479
+ expect(el.checkValidity()).to.be.false
480
+
481
+ await elementUpdated(el)
482
+ const error = el.shadowRoot.querySelector(".error")
483
+ expect(error).not.to.be.null
484
+ }
485
+
486
+ {
487
+ const el = await defaultFixture({ label: "Länge", type: "number" })
488
+ el.focus()
489
+
490
+ await sendKeys({ type: "123" })
491
+ expect(el.checkValidity()).to.be.true
492
+
493
+ await elementUpdated(el)
494
+ const error = el.shadowRoot.querySelector(".error")
495
+ expect(error).to.be.null
496
+ }
497
+ })
472
498
  })
@@ -10,7 +10,7 @@ function isIcon(name) {
10
10
  }
11
11
 
12
12
  export default {
13
- title: "Menu/Item",
13
+ title: "Components/Menu/Item",
14
14
  component: "leu-menu-item",
15
15
  args: {
16
16
  label: "Menu Item",
@@ -23,6 +23,7 @@ export default {
23
23
  },
24
24
  }
25
25
 
26
+ /* eslint-disable no-nested-ternary */
26
27
  function Template(args) {
27
28
  return html`
28
29
  <leu-menu-item
@@ -45,6 +46,7 @@ function Template(args) {
45
46
  </leu-menu-item>
46
47
  `
47
48
  }
49
+ /* eslint-enable no-nested-ternary */
48
50
 
49
51
  export const Regular = Template.bind({})
50
52
 
@@ -5,7 +5,7 @@ import "../../icon/leu-icon.js"
5
5
  import { ifDefined } from "lit/directives/if-defined.js"
6
6
 
7
7
  export default {
8
- title: "Menu",
8
+ title: "Components/Menu",
9
9
  component: "leu-menu",
10
10
  parameters: {
11
11
  design: {
@@ -185,7 +185,7 @@ describe("LeuMenuItem", () => {
185
185
  expect(el.getValue()).to.equal("download-01")
186
186
  })
187
187
 
188
- it("renders a palceholder icon when the menu item is part of multiple selection but not active", async () => {
188
+ it("renders a placeholder icon when the menu item is part of multiple selection but not active", async () => {
189
189
  const el = await defaultFixture({
190
190
  label: "Download",
191
191
  multipleSelection: true,
@@ -193,13 +193,14 @@ describe("LeuMenuItem", () => {
193
193
 
194
194
  const icon = el.shadowRoot.querySelector("leu-icon")
195
195
  expect(icon).to.exist
196
- expect(icon).to.have.attribute("name", "EMPTY")
196
+ expect(icon).to.have.attribute("name", "")
197
197
  })
198
198
 
199
199
  it("renders a check icon when the menu item is part of multiple selection and is active", async () => {
200
200
  const el = await defaultFixture({
201
201
  label: "Download",
202
202
  multipleSelection: true,
203
+ active: true,
203
204
  })
204
205
 
205
206
  const icon = el.shadowRoot.querySelector("leu-icon")
@@ -8,29 +8,31 @@ import "../leu-menu-item.js"
8
8
  import "../../icon/leu-icon.js"
9
9
 
10
10
  async function defaultFixture(args = {}) {
11
- return fixture(html` <leu-menu
12
- role=${ifDefined(args.role)}
13
- selects=${ifDefined(args.selects)}
14
- >
15
- <leu-menu-item
16
- ><leu-icon slot="before"></leu-icon>Menu Item 1</leu-menu-item
11
+ return fixture(
12
+ html` <leu-menu
13
+ role=${ifDefined(args.role)}
14
+ selects=${ifDefined(args.selects)}
17
15
  >
18
- <leu-menu-item active
19
- ><leu-icon slot="before" name="check"></leu-icon>Menu Item
20
- 2</leu-menu-item
21
- >
22
- <leu-menu-item
23
- ><leu-icon slot="before"></leu-icon>Menu Item 3</leu-menu-item
24
- >
25
- <hr />
26
- <leu-menu-item
27
- ><leu-icon name="pin" slot="before"></leu-icon>Menu Item 3<slot
28
- name="after"
29
- >CH</slot
30
- ></leu-menu-item
31
- >
32
- <leu-menu-item>Menu Item 4</leu-menu-item>
33
- </leu-menu>`)
16
+ <leu-menu-item
17
+ ><leu-icon slot="before"></leu-icon>Menu Item 1</leu-menu-item
18
+ >
19
+ <leu-menu-item active
20
+ ><leu-icon slot="before" name="check"></leu-icon>Menu Item
21
+ 2</leu-menu-item
22
+ >
23
+ <leu-menu-item
24
+ ><leu-icon slot="before"></leu-icon>Menu Item 3</leu-menu-item
25
+ >
26
+ <hr />
27
+ <leu-menu-item
28
+ ><leu-icon name="pin" slot="before"></leu-icon>Menu Item 3<slot
29
+ name="after"
30
+ >CH</slot
31
+ ></leu-menu-item
32
+ >
33
+ <leu-menu-item>Menu Item 4</leu-menu-item>
34
+ </leu-menu>`,
35
+ )
34
36
  }
35
37
 
36
38
  describe("LeuMenu", () => {
@@ -111,7 +111,7 @@ export class LeuPagination extends LeuElement {
111
111
  page: this.page,
112
112
  },
113
113
  bubbles: false,
114
- })
114
+ }),
115
115
  )
116
116
  }
117
117
  }
@@ -1,7 +1,7 @@
1
1
  :host {
2
2
  margin-top: 16px;
3
3
  display: flex;
4
- justify-content: end;
4
+ justify-content: flex-end;
5
5
  font-family: var(--leu-font-family-regular);
6
6
  }
7
7
 
@@ -6,6 +6,7 @@ import "../leu-pagination.js"
6
6
  // https://stackoverflow.com/questions/72566428/storybook-angular-how-to-dynamically-update-args-from-the-template
7
7
  import { UPDATE_STORY_ARGS } from "@storybook/core-events" // eslint-disable-line
8
8
  import { ifDefined } from "lit/directives/if-defined.js"
9
+
9
10
  function updateStorybookArgss(id, args) {
10
11
  const channel = window.__STORYBOOK_ADDONS_CHANNEL__
11
12
  channel.emit(UPDATE_STORY_ARGS, {
@@ -57,7 +58,7 @@ const items = [
57
58
  ]
58
59
 
59
60
  export default {
60
- title: "Pagination",
61
+ title: "Components/Pagination",
61
62
  component: "leu-pagination",
62
63
  args: {
63
64
  onPageChange: action("leu:pagechange"),
@@ -72,7 +73,7 @@ export default {
72
73
 
73
74
  function Template(
74
75
  { startIndex, endIndex, onPageChange, itemsPerPage, defaultPage },
75
- { id }
76
+ { id },
76
77
  ) {
77
78
  return html`
78
79
  ${items