@statistikzh/leu 0.18.0 → 0.19.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.
Files changed (106) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +15 -0
  3. package/dist/Accordion.js +1 -1
  4. package/dist/Button.js +1 -1
  5. package/dist/ButtonGroup.js +1 -1
  6. package/dist/ChartWrapper.js +1 -1
  7. package/dist/Checkbox.js +1 -1
  8. package/dist/CheckboxGroup.js +1 -1
  9. package/dist/Chip.js +1 -1
  10. package/dist/ChipGroup.js +1 -1
  11. package/dist/ChipLink.js +1 -1
  12. package/dist/ChipRemovable.js +1 -1
  13. package/dist/ChipSelectable.js +1 -1
  14. package/dist/Dialog.js +1 -1
  15. package/dist/Dropdown.js +1 -1
  16. package/dist/FileInput.d.ts +59 -0
  17. package/dist/FileInput.js +383 -0
  18. package/dist/Icon.js +1 -1
  19. package/dist/Input.d.ts +0 -9
  20. package/dist/Input.js +4 -25
  21. package/dist/{LeuElement-DlQXnrk8.js → LeuElement-CKq5epyY.js} +1 -1
  22. package/dist/Menu.js +1 -1
  23. package/dist/MenuItem.js +1 -1
  24. package/dist/Message.js +1 -1
  25. package/dist/Pagination.js +1 -1
  26. package/dist/Placeholder.js +1 -1
  27. package/dist/Popup.js +1 -1
  28. package/dist/ProgressBar.d.ts +29 -0
  29. package/dist/ProgressBar.js +166 -0
  30. package/dist/Radio.js +1 -1
  31. package/dist/RadioGroup.js +1 -1
  32. package/dist/Range.js +1 -1
  33. package/dist/ScrollTop.js +1 -1
  34. package/dist/Select.js +1 -1
  35. package/dist/Spinner.js +1 -1
  36. package/dist/Table.js +1 -1
  37. package/dist/Tag.js +1 -1
  38. package/dist/VisuallyHidden.js +1 -1
  39. package/dist/components/file-input/FileInput.d.ts +54 -0
  40. package/dist/components/file-input/FileInput.d.ts.map +1 -0
  41. package/dist/components/file-input/leu-file-input.d.ts +3 -0
  42. package/dist/components/file-input/leu-file-input.d.ts.map +1 -0
  43. package/dist/components/file-input/stories/file-input.stories.d.ts +30 -0
  44. package/dist/components/file-input/stories/file-input.stories.d.ts.map +1 -0
  45. package/dist/components/file-input/test/file-input.test.d.ts +2 -0
  46. package/dist/components/file-input/test/file-input.test.d.ts.map +1 -0
  47. package/dist/components/input/Input.d.ts +0 -9
  48. package/dist/components/input/Input.d.ts.map +1 -1
  49. package/dist/components/progress-bar/ProgressBar.d.ts +25 -0
  50. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -0
  51. package/dist/components/progress-bar/leu-progress-bar.d.ts +3 -0
  52. package/dist/components/progress-bar/leu-progress-bar.d.ts.map +1 -0
  53. package/dist/components/progress-bar/stories/progress-bar.stories.d.ts +48 -0
  54. package/dist/components/progress-bar/stories/progress-bar.stories.d.ts.map +1 -0
  55. package/dist/components/progress-bar/test/progress-bar.test.d.ts +2 -0
  56. package/dist/components/progress-bar/test/progress-bar.test.d.ts.map +1 -0
  57. package/dist/index.js +1 -1
  58. package/dist/leu-accordion.js +1 -1
  59. package/dist/leu-button-group.js +1 -1
  60. package/dist/leu-button.js +1 -1
  61. package/dist/leu-chart-wrapper.js +1 -1
  62. package/dist/leu-checkbox-group.js +1 -1
  63. package/dist/leu-checkbox.js +1 -1
  64. package/dist/leu-chip-group.js +1 -1
  65. package/dist/leu-chip-link.js +1 -1
  66. package/dist/leu-chip-removable.js +1 -1
  67. package/dist/leu-chip-selectable.js +1 -1
  68. package/dist/leu-dialog.js +1 -1
  69. package/dist/leu-dropdown.js +1 -1
  70. package/dist/leu-file-input.d.ts +8 -0
  71. package/dist/leu-file-input.js +42 -0
  72. package/dist/leu-icon.js +1 -1
  73. package/dist/leu-input.js +1 -1
  74. package/dist/leu-menu-item.js +1 -1
  75. package/dist/leu-menu.js +1 -1
  76. package/dist/leu-message.js +1 -1
  77. package/dist/leu-pagination.js +1 -1
  78. package/dist/leu-placeholder.js +1 -1
  79. package/dist/leu-popup.js +1 -1
  80. package/dist/leu-progress-bar.d.ts +4 -0
  81. package/dist/leu-progress-bar.js +10 -0
  82. package/dist/leu-radio-group.js +1 -1
  83. package/dist/leu-radio.js +1 -1
  84. package/dist/leu-range.js +1 -1
  85. package/dist/leu-scroll-top.js +1 -1
  86. package/dist/leu-select.js +1 -1
  87. package/dist/leu-spinner.js +1 -1
  88. package/dist/leu-table.js +1 -1
  89. package/dist/leu-tag.js +1 -1
  90. package/dist/leu-visually-hidden.js +1 -1
  91. package/dist/vscode.html-custom-data.json +65 -0
  92. package/dist/vue/index.d.ts +48 -0
  93. package/dist/web-types.json +119 -1
  94. package/package.json +1 -1
  95. package/scripts/generate-component/templates/test/[name].test.ts +4 -3
  96. package/src/components/file-input/FileInput.ts +266 -0
  97. package/src/components/file-input/file-input.css +118 -0
  98. package/src/components/file-input/leu-file-input.ts +5 -0
  99. package/src/components/file-input/stories/file-input.stories.ts +38 -0
  100. package/src/components/file-input/test/file-input.test.ts +25 -0
  101. package/src/components/input/Input.ts +3 -29
  102. package/src/components/progress-bar/ProgressBar.ts +52 -0
  103. package/src/components/progress-bar/leu-progress-bar.ts +5 -0
  104. package/src/components/progress-bar/progress-bar.css +97 -0
  105. package/src/components/progress-bar/stories/progress-bar.stories.ts +39 -0
  106. package/src/components/progress-bar/test/progress-bar.test.ts +61 -0
@@ -0,0 +1,52 @@
1
+ import { html, nothing } from "lit"
2
+ import { ifDefined } from "lit/directives/if-defined.js"
3
+ import { property } from "lit/decorators.js"
4
+
5
+ import { LeuElement } from "../../lib/LeuElement.js"
6
+
7
+ import styles from "./progress-bar.css"
8
+
9
+ /**
10
+ * An indicator showing the completion progress of a task
11
+ *
12
+ * @tagname leu-progress-bar
13
+ */
14
+ export class LeuProgressBar extends LeuElement {
15
+ static styles = [LeuElement.styles, styles]
16
+
17
+ static shadowRootOptions = {
18
+ ...LeuElement.shadowRootOptions,
19
+ delegatesFocus: true,
20
+ }
21
+
22
+ /** Progress as a percentage from 0 to 100 */
23
+ @property({ type: Number, reflect: true })
24
+ value: number = 0
25
+
26
+ /** Label that is displayed below the progress bar */
27
+ @property({ type: String, reflect: true })
28
+ label: string = ""
29
+
30
+ /** Whether the progress bar is in indeterminate state. */
31
+ @property({ type: Boolean, reflect: true })
32
+ indeterminate: boolean = false
33
+
34
+ render() {
35
+ return html`
36
+ <progress
37
+ class="progress"
38
+ max=${ifDefined(!this.indeterminate ? 100 : undefined)}
39
+ value=${ifDefined(!this.indeterminate ? this.value : undefined)}
40
+ id="progress"
41
+ ></progress>
42
+ <div class="info">
43
+ ${this.label
44
+ ? html`<label class="label" for="progress">${this.label}</label>`
45
+ : html`<div class="label label--placeholder"></div>`}
46
+ ${this.indeterminate
47
+ ? nothing
48
+ : html`<span class="value">${Math.round(this.value)}&#8239;%</span>`}
49
+ </div>
50
+ `
51
+ }
52
+ }
@@ -0,0 +1,5 @@
1
+ import { LeuProgressBar } from "./ProgressBar.js"
2
+
3
+ export { LeuProgressBar }
4
+
5
+ LeuProgressBar.define("leu-progress-bar")
@@ -0,0 +1,97 @@
1
+ /* :host {
2
+ --progress-bar-font-regular: var(--leu-font-family-regular);
3
+ --progress-bar-font-black: var(--leu-font-family-black);
4
+
5
+ font-family: var(--progress-bar-font-regular);
6
+ } */
7
+
8
+ .progress {
9
+ --_height: 0.5rem;
10
+ --_border-radius: 0.25rem;
11
+ --_progress-color: var(--leu-color-func-cyan);
12
+ --_indeterminate-animation: indeterminate 2s ease infinite;
13
+ --_indeterminate-width: 25%;
14
+
15
+ appearance: none;
16
+ display: block;
17
+ width: 100%;
18
+ height: var(--_height);
19
+
20
+ background-color: var(--leu-color-black-transp-10);
21
+ border: none;
22
+ border-radius: var(--_border-radius);
23
+ margin-bottom: 0.5rem;
24
+ }
25
+
26
+ .progress::-webkit-progress-bar {
27
+ background: transparent;
28
+ border-radius: var(--_border-radius);
29
+ }
30
+
31
+ /* Progress bar */
32
+ .progress::-moz-progress-bar {
33
+ background-color: var(--_progress-color);
34
+ border-radius: var(--_border-radius);
35
+ }
36
+
37
+ .progress::-webkit-progress-value {
38
+ background-color: var(--_progress-color);
39
+ border-radius: var(--_border-radius);
40
+ }
41
+
42
+ /* Indeterminate state */
43
+ .progress:indeterminate::-moz-progress-bar {
44
+ width: var(--_indeterminate-width);
45
+ animation: var(--_indeterminate-animation);
46
+ }
47
+
48
+ /* Safari */
49
+ .progress:indeterminate::-webkit-progress-value {
50
+ display: block;
51
+ width: var(--_indeterminate-width);
52
+ animation: var(--_indeterminate-animation);
53
+ }
54
+
55
+ /* Chrome */
56
+ .progress:indeterminate::before {
57
+ content: "";
58
+ display: block;
59
+ width: var(--_indeterminate-width);
60
+ height: var(--_height);
61
+ background-color: var(--_progress-color);
62
+ border-radius: var(--_border-radius);
63
+ animation: var(--_indeterminate-animation);
64
+ }
65
+
66
+ @keyframes indeterminate {
67
+ 0% {
68
+ margin-left: 0%;
69
+ }
70
+
71
+ 50% {
72
+ margin-left: 75%;
73
+ }
74
+
75
+ 100% {
76
+ margin-left: 0%;
77
+ }
78
+ }
79
+
80
+ /* Info section (text label and value) */
81
+ .info {
82
+ display: flex;
83
+ justify-content: space-between;
84
+ align-items: center;
85
+ flex-wrap: wrap;
86
+ gap: 0.25rem;
87
+ }
88
+
89
+ .label,
90
+ .value {
91
+ font: var(--leu-t-tiny-regular-font);
92
+ color: var(--leu-color-black-60);
93
+ }
94
+
95
+ .value {
96
+ /* margin-left: auto; */
97
+ }
@@ -0,0 +1,39 @@
1
+ import { Meta, StoryObj } from "@storybook/web-components"
2
+ import { html } from "lit"
3
+ import { ifDefined } from "lit/directives/if-defined.js"
4
+
5
+ import "../leu-progress-bar.js"
6
+ import { LeuProgressBar } from "../ProgressBar.js"
7
+
8
+ type StoryArgs = LeuProgressBar
9
+ type Story = StoryObj<StoryArgs>
10
+
11
+ export default {
12
+ title: "Components/ProgressBar",
13
+ component: "leu-progress-bar",
14
+ } satisfies Meta<StoryArgs>
15
+
16
+ const Template: Story = {
17
+ render: ({ label, value, indeterminate }) =>
18
+ html` <leu-progress-bar
19
+ .label="${ifDefined(label)}"
20
+ .value="${ifDefined(value)}"
21
+ ?indeterminate=${indeterminate}
22
+ ></leu-progress-bar>`,
23
+ }
24
+
25
+ export const Regular = {
26
+ ...Template,
27
+ args: {
28
+ value: 50,
29
+ label: "Datei hochladen",
30
+ },
31
+ }
32
+
33
+ export const Indeterminate = {
34
+ ...Template,
35
+ args: {
36
+ indeterminate: true,
37
+ label: "Datei hochladen",
38
+ },
39
+ }
@@ -0,0 +1,61 @@
1
+ import { html } from "lit"
2
+ import { fixture, expect } from "@open-wc/testing"
3
+ import { ifDefined } from "lit/directives/if-defined.js"
4
+
5
+ import "../leu-progress-bar.js"
6
+ import { type LeuProgressBar } from "../ProgressBar.js"
7
+
8
+ async function defaultFixture({
9
+ value,
10
+ label,
11
+ indeterminate,
12
+ }: { value?: number; label?: string; indeterminate?: boolean } = {}) {
13
+ return fixture<LeuProgressBar>(
14
+ html`<leu-progress-bar
15
+ value=${ifDefined(value)}
16
+ label=${ifDefined(label)}
17
+ ?indeterminate=${indeterminate}
18
+ ></leu-progress-bar>`,
19
+ )
20
+ }
21
+
22
+ describe("LeuProgressBar", () => {
23
+ it("is a defined element", async () => {
24
+ const el = customElements.get("leu-progress-bar")
25
+
26
+ expect(el).not.to.be.undefined
27
+ })
28
+
29
+ it("passes the a11y audit", async () => {
30
+ const el = await defaultFixture({ value: 65, label: "Datei hochladen" })
31
+
32
+ await expect(el).shadowDom.to.be.accessible()
33
+ })
34
+
35
+ it("renders the text labels and applies the value", async () => {
36
+ const el = await defaultFixture({ value: 65, label: "Datei hochladen" })
37
+
38
+ const label = el.shadowRoot?.querySelector(".label")
39
+ const value = el.shadowRoot?.querySelector(".value")
40
+ const progress = el.shadowRoot?.querySelector("progress")
41
+
42
+ expect(label?.textContent).to.equal("Datei hochladen")
43
+ expect(value?.textContent).to.equal("65 %")
44
+ expect(progress?.value).to.equal(65)
45
+ })
46
+
47
+ it("applies the indeterminate state", async () => {
48
+ const el = await defaultFixture({
49
+ value: 65,
50
+ label: "Datei hochladen",
51
+ indeterminate: true,
52
+ })
53
+
54
+ const value = el.shadowRoot?.querySelector(".value")
55
+ const progress = el.shadowRoot?.querySelector("progress")
56
+
57
+ expect(value).to.not.exist
58
+ expect(progress).to.not.have.attribute("value")
59
+ expect(progress).to.not.have.attribute("max")
60
+ })
61
+ })