@statistikzh/leu 0.4.0 → 0.5.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/.storybook/preview.js +1 -2
- package/CHANGELOG.md +24 -0
- package/custom-elements-manifest.config.js +46 -0
- package/dist/Accordion.d.ts +31 -0
- package/dist/Accordion.d.ts.map +1 -0
- package/dist/Accordion.js +257 -0
- package/dist/Breadcrumb.d.ts +69 -0
- package/dist/Breadcrumb.d.ts.map +1 -0
- package/dist/Breadcrumb.js +392 -0
- package/dist/Button-da11d064.d.ts +84 -0
- package/dist/Button-da11d064.d.ts.map +1 -0
- package/dist/Button-da11d064.js +542 -0
- package/dist/Button.d.ts +2 -0
- package/dist/Button.d.ts.map +1 -0
- package/dist/Button.js +6 -420
- package/dist/ButtonGroup.d.ts +24 -0
- package/dist/ButtonGroup.d.ts.map +1 -0
- package/dist/ButtonGroup.js +70 -39
- package/dist/Checkbox.d.ts +13 -0
- package/dist/Checkbox.d.ts.map +1 -0
- package/dist/Checkbox.js +2 -2
- package/dist/CheckboxGroup.d.ts +13 -0
- package/dist/CheckboxGroup.d.ts.map +1 -0
- package/dist/CheckboxGroup.js +3 -3
- package/dist/Chip.d.ts +5 -0
- package/dist/Chip.d.ts.map +1 -0
- package/dist/{Chip-dac7337d.js → Chip.js} +16 -5
- package/dist/ChipGroup.d.ts +28 -0
- package/dist/ChipGroup.d.ts.map +1 -0
- package/dist/ChipGroup.js +62 -5
- package/dist/ChipLink.d.ts +15 -0
- package/dist/ChipLink.d.ts.map +1 -0
- package/dist/ChipLink.js +1 -1
- package/dist/ChipRemovable.d.ts +13 -0
- package/dist/ChipRemovable.d.ts.map +1 -0
- package/dist/ChipRemovable.js +2 -2
- package/dist/ChipSelectable.d.ts +22 -0
- package/dist/ChipSelectable.d.ts.map +1 -0
- package/dist/ChipSelectable.js +5 -5
- package/dist/Dropdown.d.ts +15 -0
- package/dist/Dropdown.d.ts.map +1 -0
- package/dist/Dropdown.js +25 -7
- package/dist/Input.d.ts +154 -0
- package/dist/Input.d.ts.map +1 -0
- package/dist/Input.js +13 -7
- package/dist/Menu.d.ts +8 -0
- package/dist/Menu.d.ts.map +1 -0
- package/dist/MenuItem.d.ts +21 -0
- package/dist/MenuItem.d.ts.map +1 -0
- package/dist/MenuItem.js +3 -3
- package/dist/Pagination.d.ts +27 -0
- package/dist/Pagination.d.ts.map +1 -0
- package/dist/Pagination.js +93 -61
- package/dist/Popup.d.ts +18 -0
- package/dist/Popup.d.ts.map +1 -0
- package/dist/{leu-popup-4bf6f1f4.js → Popup.js} +4 -5
- package/dist/Radio.d.ts +12 -0
- package/dist/Radio.d.ts.map +1 -0
- package/dist/Radio.js +2 -2
- package/dist/RadioGroup.d.ts +20 -0
- package/dist/RadioGroup.d.ts.map +1 -0
- package/dist/RadioGroup.js +3 -3
- package/dist/ScrollTop.d.ts +19 -0
- package/dist/ScrollTop.d.ts.map +1 -0
- package/dist/ScrollTop.js +122 -0
- package/dist/Select.d.ts +98 -0
- package/dist/Select.d.ts.map +1 -0
- package/dist/Select.js +27 -82
- package/dist/Table.d.ts +48 -0
- package/dist/Table.d.ts.map +1 -0
- package/dist/Table.js +7 -4
- package/dist/VisuallyHidden.d.ts +8 -0
- package/dist/VisuallyHidden.d.ts.map +1 -0
- package/dist/VisuallyHidden.js +28 -0
- package/dist/_rollupPluginBabelHelpers-20f659f4.d.ts +3 -0
- package/dist/_rollupPluginBabelHelpers-20f659f4.d.ts.map +1 -0
- package/dist/defineElement-40372b4b.d.ts +9 -0
- package/dist/defineElement-40372b4b.d.ts.map +1 -0
- package/dist/{defineElement-47d4f665.js → defineElement-40372b4b.js} +1 -1
- package/dist/icon-03e86700.d.ts +11 -0
- package/dist/icon-03e86700.d.ts.map +1 -0
- package/dist/index.js.d.ts +21 -0
- package/dist/index.js.d.ts.map +1 -0
- package/dist/{index.js → index.js.js} +14 -8
- package/dist/leu-accordion.d.ts +3 -0
- package/dist/leu-accordion.d.ts.map +1 -0
- package/dist/leu-accordion.js +9 -0
- package/dist/leu-breadcrumb.d.ts +3 -0
- package/dist/leu-breadcrumb.d.ts.map +1 -0
- package/dist/leu-breadcrumb.js +23 -0
- package/dist/leu-button-group.d.ts +3 -0
- package/dist/leu-button-group.d.ts.map +1 -0
- package/dist/leu-button-group.js +1 -5
- package/dist/leu-button.d.ts +3 -0
- package/dist/leu-button.d.ts.map +1 -0
- package/dist/leu-button.js +3 -2
- package/dist/leu-checkbox-group.d.ts +3 -0
- package/dist/leu-checkbox-group.d.ts.map +1 -0
- package/dist/leu-checkbox-group.js +1 -1
- package/dist/leu-checkbox.d.ts +3 -0
- package/dist/leu-checkbox.d.ts.map +1 -0
- package/dist/leu-checkbox.js +1 -1
- package/dist/leu-chip-group.d.ts +3 -0
- package/dist/leu-chip-group.d.ts.map +1 -0
- package/dist/leu-chip-group.js +2 -1
- package/dist/leu-chip-link.d.ts +3 -0
- package/dist/leu-chip-link.d.ts.map +1 -0
- package/dist/leu-chip-link.js +2 -2
- package/dist/leu-chip-removable.d.ts +3 -0
- package/dist/leu-chip-removable.d.ts.map +1 -0
- package/dist/leu-chip-removable.js +2 -2
- package/dist/leu-chip-selectable.d.ts +3 -0
- package/dist/leu-chip-selectable.d.ts.map +1 -0
- package/dist/leu-chip-selectable.js +2 -2
- package/dist/leu-dropdown.d.ts +3 -0
- package/dist/leu-dropdown.d.ts.map +1 -0
- package/dist/leu-dropdown.js +5 -4
- package/dist/leu-input.d.ts +3 -0
- package/dist/leu-input.d.ts.map +1 -0
- package/dist/leu-input.js +1 -1
- package/dist/leu-menu-item.d.ts +3 -0
- package/dist/leu-menu-item.d.ts.map +1 -0
- package/dist/leu-menu-item.js +1 -1
- package/dist/leu-menu.d.ts +3 -0
- package/dist/leu-menu.d.ts.map +1 -0
- package/dist/leu-menu.js +1 -1
- package/dist/leu-pagination.d.ts +3 -0
- package/dist/leu-pagination.d.ts.map +1 -0
- package/dist/leu-pagination.js +5 -2
- package/dist/leu-popup.d.ts +3 -0
- package/dist/leu-popup.d.ts.map +1 -0
- package/dist/leu-popup.js +9 -0
- package/dist/leu-radio-group.d.ts +3 -0
- package/dist/leu-radio-group.d.ts.map +1 -0
- package/dist/leu-radio-group.js +1 -1
- package/dist/leu-radio.d.ts +3 -0
- package/dist/leu-radio.d.ts.map +1 -0
- package/dist/leu-radio.js +1 -1
- package/dist/leu-scroll-top.d.ts +3 -0
- package/dist/leu-scroll-top.d.ts.map +1 -0
- package/dist/leu-scroll-top.js +14 -0
- package/dist/leu-select.d.ts +3 -0
- package/dist/leu-select.d.ts.map +1 -0
- package/dist/leu-select.js +4 -3
- package/dist/leu-table.d.ts +3 -0
- package/dist/leu-table.d.ts.map +1 -0
- package/dist/leu-table.js +5 -2
- package/dist/leu-visually-hidden.d.ts +3 -0
- package/dist/leu-visually-hidden.d.ts.map +1 -0
- package/dist/leu-visually-hidden.js +8 -0
- package/dist/theme.css +386 -2
- package/dist/utils-65469421.d.ts +16 -0
- package/dist/utils-65469421.d.ts.map +1 -0
- package/dist/utils-65469421.js +35 -0
- package/index.js +3 -0
- package/package.json +30 -12
- package/postcss.config.cjs +2 -0
- package/rollup.config.js +21 -40
- package/scripts/generate-component/templates/[name].css +2 -2
- package/scripts/postcss-leu-font-styles.cjs +160 -0
- package/src/components/accordion/accordion.css +2 -2
- package/src/components/accordion/stories/accordion.stories.js +2 -1
- package/src/components/accordion/test/accordion.test.js +4 -2
- package/src/components/breadcrumb/Breadcrumb.js +2 -1
- package/src/components/breadcrumb/breadcrumb.css +2 -13
- package/src/components/button/Button.js +69 -8
- package/src/components/button/button.css +10 -2
- package/src/components/button/stories/button.stories.js +43 -90
- package/src/components/button/test/button.test.js +90 -19
- package/src/components/button-group/ButtonGroup.js +76 -34
- package/src/components/button-group/stories/button-group.stories.js +13 -6
- package/src/components/button-group/test/button-group.test.js +38 -31
- package/src/components/checkbox/checkbox-group.css +2 -2
- package/src/components/checkbox/checkbox.css +1 -1
- package/src/components/chip/ChipGroup.js +42 -2
- package/src/components/chip/ChipRemovable.js +1 -1
- package/src/components/chip/ChipSelectable.js +4 -4
- package/src/components/chip/chip-group.css +12 -2
- package/src/components/chip/chip.css +14 -3
- package/src/components/chip/stories/chip-group.stories.js +100 -46
- package/src/components/chip/test/chip-removable.test.js +3 -3
- package/src/components/dropdown/Dropdown.js +23 -3
- package/src/components/input/Input.js +7 -4
- package/src/components/input/input.css +2 -2
- package/src/components/input/stories/input.stories.js +13 -0
- package/src/components/input/test/input.test.js +1 -0
- package/src/components/menu/menu-item.css +3 -3
- package/src/components/pagination/Pagination.js +91 -60
- package/src/components/pagination/pagination.css +6 -1
- package/src/components/pagination/stories/pagination.stories.js +15 -2
- package/src/components/pagination/test/pagination.test.js +15 -15
- package/src/components/popup/popup.css +2 -2
- package/src/components/popup/stories/popup.stories.js +1 -1
- package/src/components/radio/radio-group.css +2 -2
- package/src/components/radio/radio.css +1 -1
- package/src/components/scroll-top/ScrollTop.js +87 -0
- package/src/components/scroll-top/leu-scroll-top.js +6 -0
- package/src/components/scroll-top/scroll-top.css +34 -0
- package/src/components/scroll-top/stories/scroll-top.stories.js +217 -0
- package/src/components/scroll-top/test/scroll-top.test.js +22 -0
- package/src/components/select/Select.js +24 -6
- package/src/components/select/select.css +2 -2
- package/src/components/table/table.css +2 -2
- package/src/components/visually-hidden/VisuallyHidden.js +13 -0
- package/src/components/visually-hidden/leu-visually-hidden.js +6 -0
- package/src/components/visually-hidden/stories/visually-hidden.stories.js +22 -0
- package/src/components/visually-hidden/test/visually-hidden.test.js +36 -0
- package/src/components/visually-hidden/visually-hidden.css +10 -0
- package/src/lib/defineElement.js +1 -1
- package/src/lib/hasSlotController.js +5 -3
- package/src/lib/utils.js +21 -3
- package/src/styles/custom-properties.css +6 -2
- package/src/styles/font-definitions.json +202 -0
- package/stylelint.config.mjs +2 -0
- package/tsconfig.build.json +21 -0
- package/tsconfig.json +16 -0
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { html } from "lit"
|
|
2
|
+
import { action } from "@storybook/addon-actions"
|
|
3
|
+
|
|
2
4
|
import "../leu-pagination.js"
|
|
3
5
|
|
|
4
6
|
// https://stackoverflow.com/questions/72566428/storybook-angular-how-to-dynamically-update-args-from-the-template
|
|
5
7
|
import { UPDATE_STORY_ARGS } from "@storybook/core-events" // eslint-disable-line
|
|
8
|
+
import { ifDefined } from "lit/directives/if-defined.js"
|
|
6
9
|
function updateStorybookArgss(id, args) {
|
|
7
10
|
const channel = window.__STORYBOOK_ADDONS_CHANNEL__
|
|
8
11
|
channel.emit(UPDATE_STORY_ARGS, {
|
|
@@ -56,6 +59,9 @@ const items = [
|
|
|
56
59
|
export default {
|
|
57
60
|
title: "Pagination",
|
|
58
61
|
component: "leu-pagination",
|
|
62
|
+
args: {
|
|
63
|
+
onPageChange: action("leu:pagechange"),
|
|
64
|
+
},
|
|
59
65
|
parameters: {
|
|
60
66
|
design: {
|
|
61
67
|
type: "figma",
|
|
@@ -64,15 +70,20 @@ export default {
|
|
|
64
70
|
},
|
|
65
71
|
}
|
|
66
72
|
|
|
67
|
-
function Template(
|
|
73
|
+
function Template(
|
|
74
|
+
{ startIndex, endIndex, onPageChange, itemsPerPage, defaultPage },
|
|
75
|
+
{ id }
|
|
76
|
+
) {
|
|
68
77
|
return html`
|
|
69
78
|
${items
|
|
70
79
|
.slice(startIndex, endIndex)
|
|
71
80
|
.map((item) => html`<div>${item.label}</div>`)}
|
|
72
81
|
<leu-pagination
|
|
73
82
|
numOfItems=${items.length}
|
|
74
|
-
itemsPerPage
|
|
83
|
+
itemsPerPage=${ifDefined(itemsPerPage)}
|
|
84
|
+
defaultPage=${ifDefined(defaultPage)}
|
|
75
85
|
@leu:pagechange=${(e) => {
|
|
86
|
+
onPageChange(e)
|
|
76
87
|
updateStorybookArgss(id, {
|
|
77
88
|
startIndex: e.detail.startIndex,
|
|
78
89
|
endIndex: e.detail.endIndex,
|
|
@@ -87,4 +98,6 @@ export const Regular = Template.bind({})
|
|
|
87
98
|
Regular.args = {
|
|
88
99
|
startIndex: 0,
|
|
89
100
|
endIndex: 5,
|
|
101
|
+
itemsPerPage: 5,
|
|
102
|
+
// defaultPage: 2,
|
|
90
103
|
}
|
|
@@ -10,7 +10,7 @@ async function defaultFixture(args = {}) {
|
|
|
10
10
|
return fixture(html`<leu-pagination
|
|
11
11
|
numOfItems=${ifDefined(args.numOfItems)}
|
|
12
12
|
itemsPerPage=${ifDefined(args.itemsPerPage)}
|
|
13
|
-
|
|
13
|
+
defaultPage=${ifDefined(args.defaultPage)}
|
|
14
14
|
>
|
|
15
15
|
</leu-pagination>`)
|
|
16
16
|
}
|
|
@@ -26,7 +26,7 @@ describe("LeuPagination", () => {
|
|
|
26
26
|
const el = await defaultFixture({
|
|
27
27
|
numOfItems: 98,
|
|
28
28
|
itemsPerPage: 7,
|
|
29
|
-
|
|
29
|
+
defaultPage: 1,
|
|
30
30
|
})
|
|
31
31
|
|
|
32
32
|
await expect(el).shadowDom.to.be.accessible()
|
|
@@ -36,7 +36,7 @@ describe("LeuPagination", () => {
|
|
|
36
36
|
const el = await defaultFixture({
|
|
37
37
|
numOfItems: 98,
|
|
38
38
|
itemsPerPage: 7,
|
|
39
|
-
|
|
39
|
+
defaultPage: 1,
|
|
40
40
|
})
|
|
41
41
|
|
|
42
42
|
const previous = el.shadowRoot.querySelectorAll("leu-button")[0]
|
|
@@ -48,7 +48,7 @@ describe("LeuPagination", () => {
|
|
|
48
48
|
const el = await defaultFixture({
|
|
49
49
|
numOfItems: 98,
|
|
50
50
|
itemsPerPage: 7,
|
|
51
|
-
|
|
51
|
+
defaultPage: 14,
|
|
52
52
|
})
|
|
53
53
|
|
|
54
54
|
const next = el.shadowRoot.querySelectorAll("leu-button")[1]
|
|
@@ -60,7 +60,7 @@ describe("LeuPagination", () => {
|
|
|
60
60
|
const el = await defaultFixture({
|
|
61
61
|
numOfItems: 98,
|
|
62
62
|
itemsPerPage: 7,
|
|
63
|
-
|
|
63
|
+
defaultPage: 1,
|
|
64
64
|
})
|
|
65
65
|
|
|
66
66
|
const label = el.shadowRoot.querySelectorAll(".label")
|
|
@@ -72,7 +72,7 @@ describe("LeuPagination", () => {
|
|
|
72
72
|
const el = await defaultFixture({
|
|
73
73
|
numOfItems: 98,
|
|
74
74
|
itemsPerPage: 7,
|
|
75
|
-
|
|
75
|
+
defaultPage: 2,
|
|
76
76
|
})
|
|
77
77
|
|
|
78
78
|
const input = el.shadowRoot.querySelector("input")
|
|
@@ -84,7 +84,7 @@ describe("LeuPagination", () => {
|
|
|
84
84
|
const el = await defaultFixture({
|
|
85
85
|
numOfItems: 98,
|
|
86
86
|
itemsPerPage: 7,
|
|
87
|
-
|
|
87
|
+
defaultPage: 1,
|
|
88
88
|
})
|
|
89
89
|
|
|
90
90
|
const next = el.shadowRoot.querySelectorAll("leu-button")[1]
|
|
@@ -99,7 +99,7 @@ describe("LeuPagination", () => {
|
|
|
99
99
|
const el = await defaultFixture({
|
|
100
100
|
numOfItems: 98,
|
|
101
101
|
itemsPerPage: 7,
|
|
102
|
-
|
|
102
|
+
defaultPage: 10,
|
|
103
103
|
})
|
|
104
104
|
|
|
105
105
|
const next = el.shadowRoot.querySelectorAll("leu-button")[0]
|
|
@@ -114,7 +114,7 @@ describe("LeuPagination", () => {
|
|
|
114
114
|
const el = await defaultFixture({
|
|
115
115
|
numOfItems: 98,
|
|
116
116
|
itemsPerPage: 7,
|
|
117
|
-
|
|
117
|
+
defaultPage: 1,
|
|
118
118
|
})
|
|
119
119
|
|
|
120
120
|
el.focus()
|
|
@@ -131,7 +131,7 @@ describe("LeuPagination", () => {
|
|
|
131
131
|
const el = await defaultFixture({
|
|
132
132
|
numOfItems: 98,
|
|
133
133
|
itemsPerPage: 7,
|
|
134
|
-
|
|
134
|
+
defaultPage: 13,
|
|
135
135
|
})
|
|
136
136
|
|
|
137
137
|
el.focus()
|
|
@@ -148,18 +148,18 @@ describe("LeuPagination", () => {
|
|
|
148
148
|
const el = await defaultFixture({
|
|
149
149
|
numOfItems: 50,
|
|
150
150
|
itemsPerPage: 10,
|
|
151
|
-
|
|
151
|
+
defaultPage: 6,
|
|
152
152
|
})
|
|
153
153
|
|
|
154
154
|
const input = el.shadowRoot.querySelector("input")
|
|
155
155
|
|
|
156
|
-
expect(el.
|
|
156
|
+
expect(el.page).to.equal(5)
|
|
157
157
|
expect(input.value).to.equal("5")
|
|
158
158
|
|
|
159
159
|
el.page = 0
|
|
160
160
|
await elementUpdated(el)
|
|
161
161
|
|
|
162
|
-
expect(el.
|
|
162
|
+
expect(el.page).to.equal(1)
|
|
163
163
|
expect(input.value).to.equal("1")
|
|
164
164
|
|
|
165
165
|
el.focus()
|
|
@@ -169,7 +169,7 @@ describe("LeuPagination", () => {
|
|
|
169
169
|
})
|
|
170
170
|
await elementUpdated(el)
|
|
171
171
|
|
|
172
|
-
expect(el.
|
|
172
|
+
expect(el.page).to.equal(1)
|
|
173
173
|
expect(input.value).to.equal("1")
|
|
174
174
|
|
|
175
175
|
await sendKeys({ press: "ArrowUp" })
|
|
@@ -178,7 +178,7 @@ describe("LeuPagination", () => {
|
|
|
178
178
|
await sendKeys({ press: "ArrowUp" })
|
|
179
179
|
await sendKeys({ press: "ArrowUp" })
|
|
180
180
|
|
|
181
|
-
expect(el.
|
|
181
|
+
expect(el.page).to.equal(5)
|
|
182
182
|
expect(input.value).to.equal("5")
|
|
183
183
|
})
|
|
184
184
|
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
:host {
|
|
7
|
-
--popup-font-regular: var(--leu-font-regular);
|
|
8
|
-
--popup-font-black: var(--leu-font-black);
|
|
7
|
+
--popup-font-regular: var(--leu-font-family-regular);
|
|
8
|
+
--popup-font-black: var(--leu-font-family-black);
|
|
9
9
|
|
|
10
10
|
font-family: var(--popup-font-regular);
|
|
11
11
|
}
|
|
@@ -44,7 +44,7 @@ function Template(args = {}) {
|
|
|
44
44
|
?shift=${args.shift}
|
|
45
45
|
placement=${ifDefined(args.placement)}
|
|
46
46
|
>
|
|
47
|
-
<leu-button slot="anchor"
|
|
47
|
+
<leu-button slot="anchor">Open popup</leu-button>
|
|
48
48
|
<div style=${styleMap(popupStyles)}>Popup content</div>
|
|
49
49
|
</leu-popup>`
|
|
50
50
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
--radio-label-color: var(--leu-color-black-100);
|
|
7
7
|
--radio-label-color-disabled: var(--radio-color-disabled);
|
|
8
8
|
|
|
9
|
-
--radio-font-regular: var(--leu-font-regular);
|
|
9
|
+
--radio-font-regular: var(--leu-font-family-regular);
|
|
10
10
|
|
|
11
11
|
display: inline-flex;
|
|
12
12
|
align-items: flex-start;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { html, LitElement } from "lit"
|
|
2
|
+
import { classMap } from "lit/directives/class-map.js"
|
|
3
|
+
|
|
4
|
+
import styles from "./scroll-top.css"
|
|
5
|
+
import "../button/leu-button.js"
|
|
6
|
+
import { throttle } from "../../lib/utils.js"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @tagname leu-scroll-top
|
|
10
|
+
*/
|
|
11
|
+
export class LeuScrollTop extends LitElement {
|
|
12
|
+
static styles = styles
|
|
13
|
+
|
|
14
|
+
static properties = {
|
|
15
|
+
_showButton: { state: true },
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
constructor() {
|
|
19
|
+
super()
|
|
20
|
+
/** @internal */
|
|
21
|
+
this._prevYPos = 0
|
|
22
|
+
/** @internal */
|
|
23
|
+
this._showButton = false
|
|
24
|
+
/** @internal */
|
|
25
|
+
this._scrollDown = false
|
|
26
|
+
|
|
27
|
+
/** @internal */
|
|
28
|
+
this._scrollListener = undefined
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
scroll = () => {
|
|
32
|
+
const delta = window.scrollY - this._prevYPos
|
|
33
|
+
|
|
34
|
+
if (this._scrollDown) {
|
|
35
|
+
if (delta < 0) {
|
|
36
|
+
this._scrollDown = false
|
|
37
|
+
}
|
|
38
|
+
} else if (delta > 0) {
|
|
39
|
+
this._scrollDown = true
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Only show the button when
|
|
44
|
+
* ... the current scroll position is greater than the window height (below-the-fold) and when
|
|
45
|
+
* ... scrolling up
|
|
46
|
+
*/
|
|
47
|
+
this._showButton = window.scrollY > window.innerHeight && !this._scrollDown
|
|
48
|
+
this._prevYPos = window.scrollY
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
connectedCallback() {
|
|
52
|
+
super.connectedCallback()
|
|
53
|
+
this._scrollListener = throttle(this.scroll, 100)
|
|
54
|
+
document.addEventListener("scroll", this._scrollListener, true)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
disconnectedCallback() {
|
|
58
|
+
document.removeEventListener("scroll", this._scrollListener, true)
|
|
59
|
+
super.disconnectedCallback()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static scrollToTop() {
|
|
63
|
+
window.scrollTo({
|
|
64
|
+
top: 0,
|
|
65
|
+
left: 0,
|
|
66
|
+
behavior: "smooth",
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
render() {
|
|
71
|
+
const cssClasses = {
|
|
72
|
+
"scroll-top": true,
|
|
73
|
+
hide: !this._showButton,
|
|
74
|
+
}
|
|
75
|
+
return html`
|
|
76
|
+
<div class=${classMap(cssClasses)}>
|
|
77
|
+
<leu-button
|
|
78
|
+
icon="arrowUp"
|
|
79
|
+
label="Zum Seitenanfang"
|
|
80
|
+
round
|
|
81
|
+
@click="${() => LeuScrollTop.scrollToTop()}"
|
|
82
|
+
>
|
|
83
|
+
</leu-button>
|
|
84
|
+
</div>
|
|
85
|
+
`
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.scroll-top {
|
|
2
|
+
overflow: hidden;
|
|
3
|
+
position: fixed;
|
|
4
|
+
right: 1.5rem;
|
|
5
|
+
z-index: 1099;
|
|
6
|
+
bottom: 8.125rem;
|
|
7
|
+
|
|
8
|
+
/* show */
|
|
9
|
+
height: 50px;
|
|
10
|
+
pointer-events: auto;
|
|
11
|
+
transition: height, bottom 0.9s, 0.6s ease;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.hide {
|
|
15
|
+
height: 0;
|
|
16
|
+
pointer-events: none;
|
|
17
|
+
transition: height, top 0.9s, 0.6s ease;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@keyframes hide-animation {
|
|
21
|
+
0% {
|
|
22
|
+
transform: rotate(0deg);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
100% {
|
|
26
|
+
transform: rotate(90deg);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.hide leu-button {
|
|
31
|
+
animation-name: hide-animation;
|
|
32
|
+
animation-duration: 0.45s;
|
|
33
|
+
animation-timing-function: ease;
|
|
34
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { html } from "lit"
|
|
2
|
+
import "../leu-scroll-top.js"
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: "ScrollTop",
|
|
6
|
+
component: "leu-scroll-top",
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function Template() {
|
|
10
|
+
return html`
|
|
11
|
+
<p>
|
|
12
|
+
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
|
|
13
|
+
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
|
|
14
|
+
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
|
15
|
+
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
16
|
+
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
|
|
17
|
+
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed
|
|
18
|
+
diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
|
|
19
|
+
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor
|
|
20
|
+
sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
|
|
21
|
+
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
|
|
22
|
+
erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
|
|
23
|
+
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
|
|
24
|
+
dolor sit amet.
|
|
25
|
+
</p>
|
|
26
|
+
<p>
|
|
27
|
+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
|
|
28
|
+
molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero
|
|
29
|
+
eros et accumsan et iusto odio dignissim qui blandit praesent luptatum
|
|
30
|
+
zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum
|
|
31
|
+
dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
|
|
32
|
+
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
|
|
33
|
+
</p>
|
|
34
|
+
<p>
|
|
35
|
+
Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper
|
|
36
|
+
suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel
|
|
37
|
+
eum iriure dolor in hendrerit in vulputate velit esse molestie consequat,
|
|
38
|
+
vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et
|
|
39
|
+
iusto odio dignissim qui blandit praesent luptatum zzril delenit augue
|
|
40
|
+
duis dolore te feugait nulla facilisi.
|
|
41
|
+
</p>
|
|
42
|
+
<p>
|
|
43
|
+
Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet
|
|
44
|
+
doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit
|
|
45
|
+
amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
|
|
46
|
+
tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad
|
|
47
|
+
minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
|
|
48
|
+
nisl ut aliquip ex ea commodo consequat.
|
|
49
|
+
</p>
|
|
50
|
+
<p>
|
|
51
|
+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
|
|
52
|
+
molestie consequat, vel illum dolore eu feugiat nulla facilisis.
|
|
53
|
+
</p>
|
|
54
|
+
<p>
|
|
55
|
+
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
|
|
56
|
+
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem
|
|
57
|
+
ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
|
|
58
|
+
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
|
|
59
|
+
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
|
60
|
+
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
61
|
+
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam
|
|
62
|
+
aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed
|
|
63
|
+
tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna
|
|
64
|
+
no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor
|
|
65
|
+
sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
|
|
66
|
+
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
|
|
67
|
+
erat.
|
|
68
|
+
</p>
|
|
69
|
+
<p>
|
|
70
|
+
Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
|
|
71
|
+
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
|
|
72
|
+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
|
|
73
|
+
sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
|
|
74
|
+
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
|
|
75
|
+
ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
|
|
76
|
+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
|
|
77
|
+
sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
|
|
78
|
+
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
|
|
79
|
+
ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
|
|
80
|
+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
|
|
81
|
+
sea takimata sanctus.
|
|
82
|
+
</p>
|
|
83
|
+
<p>
|
|
84
|
+
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
|
|
85
|
+
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
|
|
86
|
+
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
|
87
|
+
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
88
|
+
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
|
|
89
|
+
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed
|
|
90
|
+
diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
|
|
91
|
+
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor
|
|
92
|
+
sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
|
|
93
|
+
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
|
|
94
|
+
erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
|
|
95
|
+
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
|
|
96
|
+
dolor sit amet.
|
|
97
|
+
</p>
|
|
98
|
+
<p>
|
|
99
|
+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
|
|
100
|
+
molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero
|
|
101
|
+
eros et accumsan et iusto odio dignissim qui blandit praesent luptatum
|
|
102
|
+
zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum
|
|
103
|
+
dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
|
|
104
|
+
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
|
|
105
|
+
</p>
|
|
106
|
+
<p>
|
|
107
|
+
Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper
|
|
108
|
+
suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel
|
|
109
|
+
eum iriure dolor in hendrerit in vulputate velit esse molestie consequat,
|
|
110
|
+
vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et
|
|
111
|
+
iusto odio dignissim qui blandit praesent luptatum zzril delenit augue
|
|
112
|
+
duis dolore te feugait nulla facilisi.
|
|
113
|
+
</p>
|
|
114
|
+
<p>
|
|
115
|
+
Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet
|
|
116
|
+
doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit
|
|
117
|
+
amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
|
|
118
|
+
tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad
|
|
119
|
+
minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
|
|
120
|
+
nisl ut aliquip ex ea commodo consequat.
|
|
121
|
+
</p>
|
|
122
|
+
<p>
|
|
123
|
+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
|
|
124
|
+
molestie consequat, vel illum dolore eu feugiat nulla facilisis.
|
|
125
|
+
</p>
|
|
126
|
+
<p>
|
|
127
|
+
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
|
|
128
|
+
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem
|
|
129
|
+
ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
|
|
130
|
+
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
|
|
131
|
+
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
|
132
|
+
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
133
|
+
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam
|
|
134
|
+
aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed
|
|
135
|
+
tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna
|
|
136
|
+
no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor
|
|
137
|
+
sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
|
|
138
|
+
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
|
|
139
|
+
erat.
|
|
140
|
+
</p>
|
|
141
|
+
<p>
|
|
142
|
+
Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
|
|
143
|
+
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
|
|
144
|
+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
|
|
145
|
+
sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
|
|
146
|
+
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
|
|
147
|
+
ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
|
|
148
|
+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
|
|
149
|
+
sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
|
|
150
|
+
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
|
|
151
|
+
ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
|
|
152
|
+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no
|
|
153
|
+
sea takimata sanctus.
|
|
154
|
+
</p>
|
|
155
|
+
<p>
|
|
156
|
+
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
|
|
157
|
+
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
|
|
158
|
+
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
|
159
|
+
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
160
|
+
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
|
|
161
|
+
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed
|
|
162
|
+
diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
|
|
163
|
+
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor
|
|
164
|
+
sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
|
|
165
|
+
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
|
|
166
|
+
erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
|
|
167
|
+
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
|
|
168
|
+
dolor sit amet.
|
|
169
|
+
</p>
|
|
170
|
+
<p>
|
|
171
|
+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
|
|
172
|
+
molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero
|
|
173
|
+
eros et accumsan et iusto odio dignissim qui blandit praesent luptatum
|
|
174
|
+
zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum
|
|
175
|
+
dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
|
|
176
|
+
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
|
|
177
|
+
</p>
|
|
178
|
+
<p>
|
|
179
|
+
Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper
|
|
180
|
+
suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel
|
|
181
|
+
eum iriure dolor in hendrerit in vulputate velit esse molestie consequat,
|
|
182
|
+
vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et
|
|
183
|
+
iusto odio dignissim qui blandit praesent luptatum zzril delenit augue
|
|
184
|
+
duis dolore te feugait nulla facilisi.
|
|
185
|
+
</p>
|
|
186
|
+
<p>
|
|
187
|
+
Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet
|
|
188
|
+
doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit
|
|
189
|
+
amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod
|
|
190
|
+
tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad
|
|
191
|
+
minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
|
|
192
|
+
nisl ut aliquip ex ea commodo consequat.
|
|
193
|
+
</p>
|
|
194
|
+
<p>
|
|
195
|
+
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
|
|
196
|
+
molestie consequat, vel illum dolore eu feugiat nulla facilisis.
|
|
197
|
+
</p>
|
|
198
|
+
<p>
|
|
199
|
+
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
|
|
200
|
+
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem
|
|
201
|
+
ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
|
|
202
|
+
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
|
|
203
|
+
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
|
204
|
+
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
|
205
|
+
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam
|
|
206
|
+
aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed
|
|
207
|
+
tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna
|
|
208
|
+
no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor
|
|
209
|
+
sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
|
|
210
|
+
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
|
|
211
|
+
erat.
|
|
212
|
+
</p>
|
|
213
|
+
<leu-scroll-top />
|
|
214
|
+
`
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export const Regular = Template.bind({})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { html } from "lit"
|
|
2
|
+
import { fixture, expect } from "@open-wc/testing"
|
|
3
|
+
|
|
4
|
+
import "../leu-scroll-top.js"
|
|
5
|
+
|
|
6
|
+
async function defaultFixture() {
|
|
7
|
+
return fixture(html` <leu-scroll-top /> `)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
describe("LeuScrollTop", () => {
|
|
11
|
+
it("is a defined element", async () => {
|
|
12
|
+
const el = await customElements.get("leu-scroll-top")
|
|
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
|
+
})
|
|
@@ -13,6 +13,7 @@ import "../menu/leu-menu-item.js"
|
|
|
13
13
|
import "../input/leu-input.js"
|
|
14
14
|
import "../popup/leu-popup.js"
|
|
15
15
|
|
|
16
|
+
// @ts-ignore
|
|
16
17
|
import styles from "./select.css"
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -25,8 +26,7 @@ export class LeuSelect extends LitElement {
|
|
|
25
26
|
|
|
26
27
|
static get properties() {
|
|
27
28
|
return {
|
|
28
|
-
open: { type: Boolean,
|
|
29
|
-
|
|
29
|
+
open: { type: Boolean, reflect: true },
|
|
30
30
|
label: { type: String, reflect: true },
|
|
31
31
|
options: { type: Array },
|
|
32
32
|
value: { type: Array },
|
|
@@ -53,9 +53,14 @@ export class LeuSelect extends LitElement {
|
|
|
53
53
|
constructor() {
|
|
54
54
|
super()
|
|
55
55
|
this.open = false
|
|
56
|
+
this.disabled = false
|
|
57
|
+
this.open = false
|
|
58
|
+
this.multiple = false
|
|
56
59
|
this.clearable = false
|
|
60
|
+
this.filterable = false
|
|
57
61
|
this.value = []
|
|
58
62
|
this.options = []
|
|
63
|
+
this.label = ""
|
|
59
64
|
|
|
60
65
|
/** @internal */
|
|
61
66
|
this._arrowIcon = Icon("angleDropDown")
|
|
@@ -69,8 +74,17 @@ export class LeuSelect extends LitElement {
|
|
|
69
74
|
/** @internal */
|
|
70
75
|
this.deferedChangeEvent = false
|
|
71
76
|
|
|
77
|
+
/**
|
|
78
|
+
* @type {import("lit/directives/ref").Ref<import("../menu/Menu").LeuMenu>}
|
|
79
|
+
*/
|
|
72
80
|
this.menuRef = createRef()
|
|
81
|
+
/**
|
|
82
|
+
* @type {import("lit/directives/ref").Ref<import("../input/Input").LeuInput>}
|
|
83
|
+
*/
|
|
73
84
|
this.optionFilterRef = createRef()
|
|
85
|
+
/**
|
|
86
|
+
* @type {import("lit/directives/ref").Ref<HTMLButtonElement>}
|
|
87
|
+
*/
|
|
74
88
|
this.toggleButtonRef = createRef()
|
|
75
89
|
}
|
|
76
90
|
|
|
@@ -102,7 +116,11 @@ export class LeuSelect extends LitElement {
|
|
|
102
116
|
* @param {MouseEvent} event
|
|
103
117
|
*/
|
|
104
118
|
handleDocumentClick = (event) => {
|
|
105
|
-
if (
|
|
119
|
+
if (
|
|
120
|
+
event.target instanceof Node &&
|
|
121
|
+
!this.contains(event.target) &&
|
|
122
|
+
this.open
|
|
123
|
+
) {
|
|
106
124
|
this.closeDropdown()
|
|
107
125
|
}
|
|
108
126
|
}
|
|
@@ -289,9 +307,9 @@ export class LeuSelect extends LitElement {
|
|
|
289
307
|
type="button"
|
|
290
308
|
class="apply-button"
|
|
291
309
|
@click=${this.handleApplyClick}
|
|
292
|
-
label="Anwenden"
|
|
293
310
|
fluid
|
|
294
|
-
|
|
311
|
+
>Anwenden</leu-button
|
|
312
|
+
>
|
|
295
313
|
`
|
|
296
314
|
}
|
|
297
315
|
|
|
@@ -320,7 +338,7 @@ export class LeuSelect extends LitElement {
|
|
|
320
338
|
<span class="label" id="select-label">${this.label}</span>
|
|
321
339
|
<span class="value"> ${this.getDisplayValue(this.value)} </span>
|
|
322
340
|
<span class="arrow-icon"> ${this._arrowIcon} </span>
|
|
323
|
-
${this.clearable && this.value
|
|
341
|
+
${this.clearable && this.value.length !== 0
|
|
324
342
|
? html`<button
|
|
325
343
|
type="button"
|
|
326
344
|
class="clear-button"
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
|
|
27
27
|
--select-clear-color: var(--leu-color-black-60);
|
|
28
28
|
|
|
29
|
-
--select-font-regular: var(--leu-font-regular);
|
|
30
|
-
--select-font-black: var(--leu-font-black);
|
|
29
|
+
--select-font-regular: var(--leu-font-family-regular);
|
|
30
|
+
--select-font-black: var(--leu-font-family-black);
|
|
31
31
|
|
|
32
32
|
--select-apply-button-color: var(--leu-color-black-100);
|
|
33
33
|
--select-apply-button-color-focus: var(--leu-color-black-80);
|