@statistikzh/leu 0.0.2

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 (141) hide show
  1. package/.editorconfig +29 -0
  2. package/.eslintrc.json +27 -0
  3. package/.github/workflows/publish.yml +19 -0
  4. package/.github/workflows/release-please.yml +19 -0
  5. package/.github/workflows/test.yml +38 -0
  6. package/.husky/commit-msg +4 -0
  7. package/.husky/pre-commit +4 -0
  8. package/.prettierignore +1 -0
  9. package/.storybook/main.js +11 -0
  10. package/.storybook/preview-head.html +5 -0
  11. package/.storybook/preview.js +23 -0
  12. package/CHANGELOG.md +63 -0
  13. package/CODE_OF_CONDUCT.md +128 -0
  14. package/CONTRIBUTING.md +31 -0
  15. package/LICENSE +21 -0
  16. package/README.md +170 -0
  17. package/commitlint.config.cjs +1 -0
  18. package/dist/Button-83c6df93.js +403 -0
  19. package/dist/Checkbox.js +144 -0
  20. package/dist/CheckboxGroup.js +82 -0
  21. package/dist/Chip-60af1402.js +162 -0
  22. package/dist/ChipGroup.js +79 -0
  23. package/dist/ChipLink.js +46 -0
  24. package/dist/ChipRemovable.js +43 -0
  25. package/dist/ChipSelectable.js +92 -0
  26. package/dist/Input.js +686 -0
  27. package/dist/Radio.js +156 -0
  28. package/dist/RadioGroup.js +194 -0
  29. package/dist/Select.js +859 -0
  30. package/dist/Table-72d305d7.js +506 -0
  31. package/dist/Table.js +8 -0
  32. package/dist/defineElement-47d4f665.js +15 -0
  33. package/dist/icon-b68c7e1e.js +202 -0
  34. package/dist/index.js +21 -0
  35. package/dist/leu-checkbox-group.js +6 -0
  36. package/dist/leu-checkbox.js +6 -0
  37. package/dist/leu-chip-group.js +5 -0
  38. package/dist/leu-chip-link.js +6 -0
  39. package/dist/leu-chip-removable.js +7 -0
  40. package/dist/leu-chip-selectable.js +6 -0
  41. package/dist/leu-input.js +9 -0
  42. package/dist/leu-radio-group.js +6 -0
  43. package/dist/leu-radio.js +5 -0
  44. package/dist/leu-select.js +12 -0
  45. package/dist/leu-table.js +10 -0
  46. package/dist/theme.css +51 -0
  47. package/index.js +10 -0
  48. package/package.json +85 -0
  49. package/postcss.config.cjs +14 -0
  50. package/rollup.config.js +54 -0
  51. package/scripts/generate-component/generate.js +167 -0
  52. package/scripts/generate-component/templates/[Name].js +33 -0
  53. package/scripts/generate-component/templates/[name].css +11 -0
  54. package/scripts/generate-component/templates/[namespace]-[name].js +3 -0
  55. package/scripts/generate-component/templates/stories/[name].stories.js +13 -0
  56. package/scripts/generate-component/templates/test/[name].test.js +22 -0
  57. package/src/components/button/Button.js +150 -0
  58. package/src/components/button/button.css +232 -0
  59. package/src/components/button/leu-button.js +3 -0
  60. package/src/components/button/stories/button.stories.js +333 -0
  61. package/src/components/button/test/button.test.js +22 -0
  62. package/src/components/button-group/ButtonGroup.js +63 -0
  63. package/src/components/button-group/button-group.css +10 -0
  64. package/src/components/button-group/leu-button-group.js +3 -0
  65. package/src/components/button-group/stories/button-group.stories.js +41 -0
  66. package/src/components/button-group/test/button-group.test.js +22 -0
  67. package/src/components/checkbox/Checkbox.js +142 -0
  68. package/src/components/checkbox/CheckboxGroup.js +80 -0
  69. package/src/components/checkbox/leu-checkbox-group.js +3 -0
  70. package/src/components/checkbox/leu-checkbox.js +3 -0
  71. package/src/components/checkbox/stories/checkbox-group.stories.js +52 -0
  72. package/src/components/checkbox/stories/checkbox.stories.js +43 -0
  73. package/src/components/checkbox/test/checkbox.test.js +101 -0
  74. package/src/components/chip/Chip.js +24 -0
  75. package/src/components/chip/ChipGroup.js +71 -0
  76. package/src/components/chip/ChipLink.js +45 -0
  77. package/src/components/chip/ChipRemovable.js +42 -0
  78. package/src/components/chip/ChipSelectable.js +91 -0
  79. package/src/components/chip/chip-group.css +5 -0
  80. package/src/components/chip/chip.css +130 -0
  81. package/src/components/chip/exports.js +10 -0
  82. package/src/components/chip/leu-chip-group.js +3 -0
  83. package/src/components/chip/leu-chip-link.js +3 -0
  84. package/src/components/chip/leu-chip-removable.js +3 -0
  85. package/src/components/chip/leu-chip-selectable.js +3 -0
  86. package/src/components/chip/stories/chip-group.stories.js +99 -0
  87. package/src/components/chip/stories/chip-link.stories.js +37 -0
  88. package/src/components/chip/stories/chip-removable.stories.js +28 -0
  89. package/src/components/chip/stories/chip-selectable.stories.js +46 -0
  90. package/src/components/chip/test/chip.test.js +22 -0
  91. package/src/components/dropdown/Dropdown.js +55 -0
  92. package/src/components/dropdown/dropdown.css +17 -0
  93. package/src/components/dropdown/leu-dropdown.js +3 -0
  94. package/src/components/dropdown/stories/dropdown.stories.js +25 -0
  95. package/src/components/dropdown/test/dropdown.test.js +31 -0
  96. package/src/components/icon/icon.js +201 -0
  97. package/src/components/input/Input.js +421 -0
  98. package/src/components/input/input.css +231 -0
  99. package/src/components/input/leu-input.js +3 -0
  100. package/src/components/input/stories/input.stories.js +185 -0
  101. package/src/components/input/test/input.test.js +22 -0
  102. package/src/components/menu/Menu.js +18 -0
  103. package/src/components/menu/MenuItem.js +95 -0
  104. package/src/components/menu/leu-menu-item.js +3 -0
  105. package/src/components/menu/leu-menu.js +3 -0
  106. package/src/components/menu/menu-item.css +72 -0
  107. package/src/components/menu/menu.css +14 -0
  108. package/src/components/menu/stories/menu-item.stories.js +51 -0
  109. package/src/components/menu/stories/menu.stories.js +21 -0
  110. package/src/components/menu/test/menu.test.js +22 -0
  111. package/src/components/pagination/Pagination.js +152 -0
  112. package/src/components/pagination/leu-pagination.js +3 -0
  113. package/src/components/pagination/pagination.css +49 -0
  114. package/src/components/pagination/stories/pagination.stories.js +82 -0
  115. package/src/components/pagination/test/pagination.test.js +22 -0
  116. package/src/components/radio/Radio.js +62 -0
  117. package/src/components/radio/RadioGroup.js +193 -0
  118. package/src/components/radio/leu-radio-group.js +3 -0
  119. package/src/components/radio/leu-radio.js +3 -0
  120. package/src/components/radio/radio.css +76 -0
  121. package/src/components/radio/stories/radio-group.stories.js +49 -0
  122. package/src/components/radio/stories/radio.stories.js +48 -0
  123. package/src/components/radio/test/radio.test.js +38 -0
  124. package/src/components/select/Select.js +350 -0
  125. package/src/components/select/leu-select.js +3 -0
  126. package/src/components/select/select.css +215 -0
  127. package/src/components/select/stories/select.stories.js +302 -0
  128. package/src/components/select/test/select.test.js +29 -0
  129. package/src/components/table/Table.js +301 -0
  130. package/src/components/table/leu-table.js +3 -0
  131. package/src/components/table/stories/table.stories.js +116 -0
  132. package/src/components/table/test/table.test.js +36 -0
  133. package/src/lib/defineElement.js +13 -0
  134. package/src/lib/hasSlotController.js +85 -0
  135. package/src/styles/custom-media.css +5 -0
  136. package/src/styles/custom-properties.css +51 -0
  137. package/src/styles/theme.css +1 -0
  138. package/stat_zh.png +0 -0
  139. package/stylelint.config.mjs +21 -0
  140. package/web-dev-server-storybook.config.mjs +19 -0
  141. package/web-test-runner.config.mjs +49 -0
@@ -0,0 +1,10 @@
1
+ export { LeuChipGroup, defineChipGroupElements } from "./ChipGroup.js"
2
+ export { LeuChipLink, defineChipLinkElements } from "./ChipLink.js"
3
+ export {
4
+ LeuChipRemovable,
5
+ defineChipRemovableElements,
6
+ } from "./ChipRemovable.js"
7
+ export {
8
+ LeuChipSelectable,
9
+ defineChipSelectableElements,
10
+ } from "./ChipSelectable.js"
@@ -0,0 +1,3 @@
1
+ import { defineChipGroupElements } from "./ChipGroup.js"
2
+
3
+ defineChipGroupElements()
@@ -0,0 +1,3 @@
1
+ import { defineChipLinkElements } from "./ChipLink.js"
2
+
3
+ defineChipLinkElements()
@@ -0,0 +1,3 @@
1
+ import { defineChipRemovableElements } from "./ChipRemovable.js"
2
+
3
+ defineChipRemovableElements()
@@ -0,0 +1,3 @@
1
+ import { defineChipSelectableElements } from "./ChipSelectable.js"
2
+
3
+ defineChipSelectableElements()
@@ -0,0 +1,99 @@
1
+ import { html } from "lit"
2
+
3
+ import "../leu-chip-selectable.js"
4
+ import "../leu-chip-removable.js"
5
+ import "../leu-chip-group.js"
6
+
7
+ import { SELECTION_MODES } from "../ChipGroup.js"
8
+ import { VARIANTS as SELECTABLE_VARIANTS } from "../ChipSelectable.js"
9
+
10
+ export default {
11
+ title: "Chip Group",
12
+ component: "leu-chip-group",
13
+ argTypes: {
14
+ selectionMode: {
15
+ control: "select",
16
+ options: Object.values(SELECTION_MODES),
17
+ },
18
+ inverted: { control: "boolean" },
19
+ },
20
+ args: {
21
+ selectionMode: "",
22
+ inverted: false,
23
+ },
24
+ }
25
+
26
+ const chips = ["Chip 1", "Chip 2", "Chip 3"]
27
+
28
+ function invertedBackground(args, content) {
29
+ return html`
30
+ <div
31
+ style="background: ${args.inverted
32
+ ? "hsla(209, 83%, 59%, 1)"
33
+ : "var(--leu-color-black-5)"}; padding: 1rem;"
34
+ >
35
+ ${content}
36
+ </div>
37
+ `
38
+ }
39
+
40
+ function DefaultTemplate(args) {
41
+ const content = html`
42
+ <leu-chip-group selection-mode=${args.selectionMode}>
43
+ ${chips.map(
44
+ (chip) => html`
45
+ <leu-chip-removable ?inverted=${args.inverted}>
46
+ ${chip}
47
+ </leu-chip-removable>
48
+ `
49
+ )}
50
+ </leu-chip-group>
51
+ `
52
+
53
+ return invertedBackground(args, content)
54
+ }
55
+
56
+ function SingleTemplate(args) {
57
+ const content = html`
58
+ <leu-chip-group selection-mode=${args.selectionMode}>
59
+ ${chips.map(
60
+ (chip) => html`
61
+ <leu-chip-selectable
62
+ ?inverted=${args.inverted}
63
+ variant=${SELECTABLE_VARIANTS.radio}
64
+ value="chip-${chip}"
65
+ >
66
+ ${chip}
67
+ </leu-chip-selectable>
68
+ `
69
+ )}
70
+ </leu-chip-group>
71
+ `
72
+
73
+ return invertedBackground(args, content)
74
+ }
75
+
76
+ function MultipleTemplate(args) {
77
+ const content = html`
78
+ <leu-chip-group selection-mode=${args.selectionMode}>
79
+ ${chips.map(
80
+ (chip) => html`
81
+ <leu-chip-selectable ?inverted=${args.inverted} value="chip-${chip}">
82
+ ${chip}
83
+ </leu-chip-selectable>
84
+ `
85
+ )}
86
+ </leu-chip-group>
87
+ `
88
+
89
+ return invertedBackground(args, content)
90
+ }
91
+
92
+ export const Default = DefaultTemplate.bind({})
93
+ Default.args = {}
94
+
95
+ export const Single = SingleTemplate.bind({})
96
+ Single.args = { selectionMode: SELECTION_MODES.single }
97
+
98
+ export const Multiple = MultipleTemplate.bind({})
99
+ Multiple.args = { selectionMode: SELECTION_MODES.multiple }
@@ -0,0 +1,37 @@
1
+ import { html } from "lit"
2
+ import { ifDefined } from "lit/directives/if-defined.js"
3
+
4
+ import "../leu-chip-link.js"
5
+
6
+ import { SIZES } from "../ChipLink.js"
7
+
8
+ export default {
9
+ title: "Chip Link",
10
+ component: "leu-chip-link",
11
+ argTypes: {
12
+ size: { control: "select", options: Object.values(SIZES) },
13
+ },
14
+ args: {
15
+ label: "Publikationen",
16
+ },
17
+ }
18
+
19
+ function Template(args) {
20
+ return html`
21
+ <div
22
+ style="background: ${args.inverted
23
+ ? "hsla(209, 83%, 59%, 1)"
24
+ : "var(--leu-color-black-5)"}; padding: 1rem;"
25
+ >
26
+ <leu-chip-link size=${ifDefined(args.size)} ?inverted=${args.inverted}
27
+ >${args.label}</leu-chip-link
28
+ >
29
+ </div>
30
+ `
31
+ }
32
+
33
+ export const Default = Template.bind({})
34
+ Default.args = {}
35
+
36
+ export const Large = Template.bind({})
37
+ Large.args = { size: SIZES.large }
@@ -0,0 +1,28 @@
1
+ import { html } from "lit"
2
+
3
+ import "../leu-chip-removable.js"
4
+
5
+ export default {
6
+ title: "Chip Removable",
7
+ component: "leu-chip-removable",
8
+ args: {
9
+ label: "Publikationen",
10
+ },
11
+ }
12
+
13
+ function Template(args) {
14
+ return html`
15
+ <div
16
+ style="background: ${args.inverted
17
+ ? "hsla(209, 83%, 59%, 1)"
18
+ : "var(--leu-color-black-5)"}; padding: 1rem;"
19
+ >
20
+ <leu-chip-removable ?inverted=${args.inverted}
21
+ >${args.label}</leu-chip-removable
22
+ >
23
+ </div>
24
+ `
25
+ }
26
+
27
+ export const Default = Template.bind({})
28
+ Default.args = {}
@@ -0,0 +1,46 @@
1
+ import { html } from "lit"
2
+ import { ifDefined } from "lit/directives/if-defined.js"
3
+
4
+ import "../leu-chip-selectable.js"
5
+
6
+ import { SIZES, VARIANTS } from "../ChipSelectable.js"
7
+
8
+ export default {
9
+ title: "Chip Selectable",
10
+ component: "leu-chip-selectable",
11
+ argTypes: {
12
+ variant: { control: "select", options: Object.values(VARIANTS) },
13
+ size: { control: "select", options: Object.values(SIZES) },
14
+ label: { control: "text" },
15
+ },
16
+ args: {
17
+ label: "Publikationen",
18
+ },
19
+ }
20
+
21
+ function Template(args) {
22
+ return html`
23
+ <div
24
+ style="background: ${args.inverted
25
+ ? "hsla(209, 83%, 59%, 1)"
26
+ : "var(--leu-color-black-5)"}; padding: 1rem;"
27
+ >
28
+ <leu-chip-selectable
29
+ size=${ifDefined(args.size)}
30
+ variant=${ifDefined(args.variant)}
31
+ ?selected=${args.selected}
32
+ ?inverted=${args.inverted}
33
+ >${args.label}</leu-chip-selectable
34
+ >
35
+ </div>
36
+ `
37
+ }
38
+
39
+ export const Default = Template.bind({})
40
+ Default.args = {}
41
+
42
+ export const Small = Template.bind({})
43
+ Small.args = { size: SIZES.small }
44
+
45
+ export const Radio = Template.bind({})
46
+ Radio.args = { variant: VARIANTS.radio }
@@ -0,0 +1,22 @@
1
+ import { html } from "lit"
2
+ import { fixture, expect } from "@open-wc/testing"
3
+
4
+ import "../leu-chip-link.js"
5
+
6
+ async function defaultFixture() {
7
+ return fixture(html` <leu-chip /> `)
8
+ }
9
+
10
+ describe("LeuChipLink", () => {
11
+ it("is a defined element", async () => {
12
+ const el = await customElements.get("leu-chip-link")
13
+
14
+ await expect(el).not.to.be.undefined
15
+ })
16
+
17
+ it("passes the a11y audit", async () => {
18
+ const el = await defaultFixture()
19
+
20
+ await expect(el).shadowDom.to.be.accessible()
21
+ })
22
+ })
@@ -0,0 +1,55 @@
1
+ import { html, LitElement } from "lit"
2
+ import { defineElement } from "../../lib/defineElement.js"
3
+ import styles from "./dropdown.css"
4
+
5
+ import { defineButtonElements } from "../button/Button.js"
6
+ import { defineMenuElements } from "../menu/Menu.js"
7
+ import { defineMenuItemElements } from "../menu/MenuItem.js"
8
+
9
+ /**
10
+ * @tagname leu-dropdown
11
+ */
12
+ export class LeuDropdown extends LitElement {
13
+ static styles = styles
14
+
15
+ static properties = {
16
+ label: { type: String },
17
+ expanded: { type: Boolean, reflect: true },
18
+ }
19
+
20
+ constructor() {
21
+ super()
22
+
23
+ this.label = ""
24
+ this.expanded = false
25
+ }
26
+
27
+ handleClick() {
28
+ this.expanded = !this.expanded
29
+ }
30
+
31
+ render() {
32
+ return html`
33
+ <leu-button
34
+ icon="download"
35
+ variant="ghost"
36
+ label=${this.label}
37
+ expanded=${this.expanded ? "open" : "closed"}
38
+ aria-expanded=${this.expanded ? "true" : "false"}
39
+ aria-controls="content"
40
+ ?active=${this.expanded}
41
+ @click=${this.handleClick}
42
+ ></leu-button>
43
+ <div id="content" class="content" ?hidden=${!this.expanded}>
44
+ <slot></slot>
45
+ </div>
46
+ `
47
+ }
48
+ }
49
+
50
+ export function defineDropdownElements() {
51
+ defineElement("dropdown", LeuDropdown)
52
+ defineButtonElements()
53
+ defineMenuElements()
54
+ defineMenuItemElements()
55
+ }
@@ -0,0 +1,17 @@
1
+ :host,
2
+ :host * {
3
+ box-sizing: border-box;
4
+ }
5
+
6
+ :host {
7
+ position: relative;
8
+ }
9
+
10
+ .content {
11
+ overflow: hidden;
12
+ box-shadow: var(--leu-box-shadow-short);
13
+ border-radius: 2px;
14
+
15
+ position: absolute;
16
+ top: calc(100% + 0.5rem);
17
+ }
@@ -0,0 +1,3 @@
1
+ import { defineDropdownElements } from "./Dropdown.js"
2
+
3
+ defineDropdownElements()
@@ -0,0 +1,25 @@
1
+ import { html } from "lit"
2
+ import "../leu-dropdown.js"
3
+
4
+ export default {
5
+ title: "Dropdown",
6
+ component: "leu-dropdown",
7
+ }
8
+
9
+ function Template({ label, expanded }) {
10
+ return html` <leu-dropdown label=${label} ?expanded=${expanded}>
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>`
20
+ }
21
+
22
+ export const Regular = Template.bind({})
23
+ Regular.args = {
24
+ label: "Download",
25
+ }
@@ -0,0 +1,31 @@
1
+ import { html } from "lit"
2
+ import { fixture, expect } from "@open-wc/testing"
3
+
4
+ import "../leu-dropdown.js"
5
+
6
+ async function defaultFixture() {
7
+ return fixture(html` <leu-dropdown label="Download">
8
+ <leu-menu>
9
+ <leu-menu-item>Als CSV Tabelle</leu-menu-item>
10
+ <leu-menu-item>Als XLS Tabelle</leu-menu-item>
11
+ <hr />
12
+ <leu-menu-item>Als PNG exportieren</leu-menu-item>
13
+ <leu-menu-item>Als SVG exportieren</leu-menu-item>
14
+ <leu-menu-item>Als PDF exportieren</leu-menu-item>
15
+ </leu-menu>
16
+ </leu-dropdown>`)
17
+ }
18
+
19
+ describe("LeuDropdown", () => {
20
+ it("is a defined element", async () => {
21
+ const el = await customElements.get("leu-dropdown")
22
+
23
+ await expect(el).not.to.be.undefined
24
+ })
25
+
26
+ it("passes the a11y audit", async () => {
27
+ const el = await defaultFixture()
28
+
29
+ await expect(el).shadowDom.to.be.accessible()
30
+ })
31
+ })