@statistikzh/leu 0.28.0 → 0.28.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.
- package/dist/{Accordion-D9kLsiBW.js → Accordion-CaDTUDJG.js} +1 -1
- package/dist/Accordion.js +2 -2
- package/dist/{Button-DyNVOHCd.js → Button-BF3_6xgs.js} +3 -3
- package/dist/Button.js +4 -4
- package/dist/{ButtonGroup-MEh4vb5a.js → ButtonGroup-grJiWGHI.js} +2 -2
- package/dist/ButtonGroup.js +5 -5
- package/dist/{ChartWrapper-DAl91BIN.js → ChartWrapper-CeolXijF.js} +2 -2
- package/dist/ChartWrapper.js +3 -3
- package/dist/{Checkbox-CGGyUW9U.js → Checkbox-DGUZ1XtB.js} +2 -2
- package/dist/Checkbox.js +3 -3
- package/dist/{CheckboxGroup-DXt5iMdj.js → CheckboxGroup-CGdyk_RP.js} +2 -2
- package/dist/CheckboxGroup.js +4 -4
- package/dist/{Chip-BGs71WGH.js → Chip-BpKH3_Nk.js} +1 -1
- package/dist/Chip.js +2 -2
- package/dist/{ChipGroup-BcGyusP-.js → ChipGroup-dSAMpfy1.js} +1 -1
- package/dist/ChipGroup.js +3 -3
- package/dist/ChipLink.js +2 -2
- package/dist/ChipRemovable.js +3 -3
- package/dist/ChipSelectable.js +2 -2
- package/dist/{Dialog-BzuyL1U3.js → Dialog-CC674l80.js} +2 -2
- package/dist/Dialog.js +3 -3
- package/dist/{Dropdown-plyBTM15.js → Dropdown-B9YTM5N_.js} +5 -5
- package/dist/Dropdown.d.ts +2 -2
- package/dist/Dropdown.js +8 -8
- package/dist/{FileInput-BT3Fe-0J.js → FileInput-D4kyWFkL.js} +8 -6
- package/dist/FileInput.d.ts +1 -1
- package/dist/FileInput.js +6 -6
- package/dist/{Icon-D83qesg5.js → Icon-DOcb_NlX.js} +1 -1
- package/dist/Icon.js +2 -2
- package/dist/{Input-D7zS50oz.js → Input-6Xu1N2sA.js} +2 -2
- package/dist/Input.js +3 -3
- package/dist/{LeuElement-DQI8cqZV.js → LeuElement-C3HedxlQ.js} +1 -1
- package/dist/{Menu-DRU1LiMM.js → Menu-CJtyuUvP.js} +2 -2
- package/dist/{Menu-Z2b7dsB5.d.ts → Menu-txbYINTW.d.ts} +1 -1
- package/dist/Menu.d.ts +1 -1
- package/dist/Menu.js +4 -4
- package/dist/{MenuItem-LY4TRIho.d.ts → MenuItem-9TTOrL0Z.d.ts} +1 -1
- package/dist/{MenuItem-DCttylRO.js → MenuItem-ClSE3auh.js} +2 -2
- package/dist/MenuItem.d.ts +1 -1
- package/dist/MenuItem.js +3 -3
- package/dist/{Message-0NxnKEqw.js → Message-C55ydBaU.js} +2 -2
- package/dist/Message.js +3 -3
- package/dist/{Pagination-CIy7YvWE.js → Pagination-BVwKLcd5.js} +4 -4
- package/dist/Pagination.js +6 -6
- package/dist/{Placeholder-Dol_X5Hp.js → Placeholder-DFNppiVf.js} +1 -1
- package/dist/Placeholder.js +2 -2
- package/dist/{Popup-nJrJHGSy.js → Popup-D91ZiFWh.js} +1 -1
- package/dist/Popup.js +2 -2
- package/dist/{ProgressBar-Dmq9veqU.js → ProgressBar-DQGO2we8.js} +1 -1
- package/dist/ProgressBar.js +2 -2
- package/dist/{Radio-W5ck_IJI.js → Radio-BetZNoUQ.js} +1 -1
- package/dist/Radio.js +2 -2
- package/dist/{RadioGroup-De5x2YCO.js → RadioGroup-DzW5z_SD.js} +2 -2
- package/dist/RadioGroup.js +3 -3
- package/dist/{Range-NCdfDkeD.js → Range-9ijUzrty.js} +1 -1
- package/dist/Range.js +2 -2
- package/dist/{ScrollTop-DwcNIKmN.js → ScrollTop-uDL4K_C6.js} +3 -3
- package/dist/ScrollTop.js +5 -5
- package/dist/{Select-Bpicra9q.js → Select-ClGNTYfp.js} +7 -7
- package/dist/Select.d.ts +2 -2
- package/dist/Select.js +9 -9
- package/dist/{Spinner-BBiVZxFH.js → Spinner-B7ikVfUZ.js} +1 -1
- package/dist/Spinner.js +2 -2
- package/dist/{Tab-Ce9nrDok.js → Tab-CSHR71IX.js} +1 -1
- package/dist/Tab.js +2 -2
- package/dist/{TabGroup-C-cd4Wcx.js → TabGroup-D7YbKXm8.js} +3 -3
- package/dist/TabGroup.js +4 -4
- package/dist/{TabPanel-BW1ydVBT.js → TabPanel-D_RHF3lv.js} +1 -1
- package/dist/TabPanel.js +2 -2
- package/dist/{Table-DiYqIzBu.js → Table-CdosaNFb.js} +3 -3
- package/dist/Table.js +7 -7
- package/dist/{Tag-Ct8Hhv7W.js → Tag-BQBgkkAs.js} +1 -1
- package/dist/Tag.js +2 -2
- package/dist/{VisuallyHidden-CpYXyuC7.js → VisuallyHidden-CEBTA6hv.js} +1 -1
- package/dist/VisuallyHidden.js +2 -2
- package/dist/custom-elements.json +6445 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +30 -30
- package/dist/leu-accordion.js +2 -2
- package/dist/leu-button-group.js +5 -5
- package/dist/leu-button.js +4 -4
- package/dist/leu-chart-wrapper.js +3 -3
- package/dist/leu-checkbox-group.js +4 -4
- package/dist/leu-checkbox.js +3 -3
- package/dist/leu-chip-group.js +3 -3
- package/dist/leu-chip-link.js +2 -2
- package/dist/leu-chip-removable.js +3 -3
- package/dist/leu-chip-selectable.js +2 -2
- package/dist/leu-dialog.js +3 -3
- package/dist/leu-dropdown.js +8 -8
- package/dist/leu-file-input.js +6 -6
- package/dist/leu-icon.js +2 -2
- package/dist/leu-input.js +3 -3
- package/dist/leu-menu-item.d.ts +1 -1
- package/dist/leu-menu-item.js +3 -3
- package/dist/leu-menu.d.ts +1 -1
- package/dist/leu-menu.js +4 -4
- package/dist/leu-message.js +3 -3
- package/dist/leu-pagination.js +6 -6
- package/dist/leu-placeholder.js +2 -2
- package/dist/leu-popup.js +2 -2
- package/dist/leu-progress-bar.js +2 -2
- package/dist/leu-radio-group.js +3 -3
- package/dist/leu-radio.js +2 -2
- package/dist/leu-range.js +2 -2
- package/dist/leu-scroll-top.js +5 -5
- package/dist/leu-select.js +9 -9
- package/dist/leu-spinner.js +2 -2
- package/dist/leu-tab-group.js +4 -4
- package/dist/leu-tab-panel.js +2 -2
- package/dist/leu-tab.js +2 -2
- package/dist/leu-table.js +7 -7
- package/dist/leu-tag.js +2 -2
- package/dist/leu-visually-hidden.js +2 -2
- package/dist/web-types.json +1 -1
- package/package.json +9 -4
- package/.editorconfig +0 -29
- package/.github/workflows/ci.yml +0 -81
- package/.github/workflows/deploy-github-pages.yaml +0 -34
- package/.github/workflows/publish.yml +0 -30
- package/.github/workflows/release-please.yml +0 -19
- package/.husky/commit-msg +0 -1
- package/.husky/pre-commit +0 -1
- package/.nvmrc +0 -1
- package/.prettierignore +0 -2
- package/.release-please-manifest.json +0 -3
- package/.storybook/main.ts +0 -34
- package/.storybook/manager-head.html +0 -1
- package/.storybook/manager.ts +0 -6
- package/.storybook/preview.ts +0 -96
- package/.storybook/static/fonts/Inter-Black.woff2 +0 -0
- package/.storybook/static/fonts/Inter-Regular.woff2 +0 -0
- package/.storybook/static/fonts.css +0 -11
- package/.storybook/static/global.css +0 -5
- package/.storybook/static/logo.svg +0 -19
- package/.storybook/theme.ts +0 -8
- package/CHANGELOG.md +0 -594
- package/CODE_OF_CONDUCT.md +0 -128
- package/CONTRIBUTING.md +0 -42
- package/commitlint.config.cjs +0 -1
- package/custom-elements-manifest.config.js +0 -46
- package/eslint.config.mjs +0 -79
- package/postcss.config.cjs +0 -16
- package/release-please-config.json +0 -9
- package/scripts/generate-component/generate.js +0 -167
- package/scripts/generate-component/templates/[Name].ts +0 -31
- package/scripts/generate-component/templates/[name].css +0 -6
- package/scripts/generate-component/templates/[namespace]-[name].ts +0 -11
- package/scripts/generate-component/templates/stories/[name].stories.ts +0 -26
- package/scripts/generate-component/templates/test/[name].test.ts +0 -23
- package/scripts/postcss-leu-font-styles.cjs +0 -154
- package/src/components/accordion/Accordion.ts +0 -108
- package/src/components/accordion/accordion.css +0 -150
- package/src/components/accordion/leu-accordion.ts +0 -11
- package/src/components/accordion/stories/accordion.stories.ts +0 -62
- package/src/components/accordion/test/accordion.test.ts +0 -118
- package/src/components/button/Button.ts +0 -286
- package/src/components/button/button.css +0 -317
- package/src/components/button/leu-button.ts +0 -11
- package/src/components/button/stories/button.stories.ts +0 -366
- package/src/components/button/test/button.test.ts +0 -417
- package/src/components/button-group/ButtonGroup.ts +0 -97
- package/src/components/button-group/button-group.css +0 -5
- package/src/components/button-group/leu-button-group.ts +0 -11
- package/src/components/button-group/stories/button-group.stories.ts +0 -54
- package/src/components/button-group/test/button-group.test.ts +0 -105
- package/src/components/chart-wrapper/ChartWrapper.ts +0 -78
- package/src/components/chart-wrapper/chart-wrapper.css +0 -87
- package/src/components/chart-wrapper/leu-chart-wrapper.ts +0 -11
- package/src/components/chart-wrapper/stories/chart-wrapper.stories.ts +0 -58
- package/src/components/chart-wrapper/test/chart-wrapper.test.ts +0 -77
- package/src/components/checkbox/Checkbox.ts +0 -129
- package/src/components/checkbox/CheckboxGroup.ts +0 -57
- package/src/components/checkbox/checkbox-group.css +0 -29
- package/src/components/checkbox/checkbox.css +0 -81
- package/src/components/checkbox/leu-checkbox-group.ts +0 -11
- package/src/components/checkbox/leu-checkbox.ts +0 -11
- package/src/components/checkbox/stories/checkbox-group.stories.ts +0 -59
- package/src/components/checkbox/stories/checkbox.stories.ts +0 -72
- package/src/components/checkbox/test/checkbox-group.test.ts +0 -109
- package/src/components/checkbox/test/checkbox.test.ts +0 -247
- package/src/components/chip/Chip.ts +0 -19
- package/src/components/chip/ChipGroup.ts +0 -122
- package/src/components/chip/ChipLink.ts +0 -24
- package/src/components/chip/ChipRemovable.ts +0 -45
- package/src/components/chip/ChipSelectable.ts +0 -80
- package/src/components/chip/chip-group.css +0 -15
- package/src/components/chip/chip.css +0 -139
- package/src/components/chip/exports.ts +0 -4
- package/src/components/chip/leu-chip-group.ts +0 -11
- package/src/components/chip/leu-chip-link.ts +0 -11
- package/src/components/chip/leu-chip-removable.ts +0 -11
- package/src/components/chip/leu-chip-selectable.ts +0 -11
- package/src/components/chip/stories/chip-group.stories.ts +0 -159
- package/src/components/chip/stories/chip-link.stories.ts +0 -45
- package/src/components/chip/stories/chip-removable.stories.ts +0 -42
- package/src/components/chip/stories/chip-selectable.stories.ts +0 -54
- package/src/components/chip/test/chip-group.test.ts +0 -171
- package/src/components/chip/test/chip-link.test.ts +0 -54
- package/src/components/chip/test/chip-removable.test.ts +0 -105
- package/src/components/chip/test/chip-selectable.test.ts +0 -101
- package/src/components/chip/test/chip.test.ts +0 -22
- package/src/components/dialog/Dialog.ts +0 -86
- package/src/components/dialog/dialog.css +0 -157
- package/src/components/dialog/leu-dialog.ts +0 -11
- package/src/components/dialog/stories/dialog.stories.ts +0 -142
- package/src/components/dialog/test/dialog.test.ts +0 -85
- package/src/components/dropdown/Dropdown.ts +0 -152
- package/src/components/dropdown/dropdown.css +0 -16
- package/src/components/dropdown/leu-dropdown.ts +0 -11
- package/src/components/dropdown/stories/dropdown.stories.ts +0 -58
- package/src/components/dropdown/test/dropdown.test.ts +0 -59
- package/src/components/file-input/FileInput.ts +0 -322
- package/src/components/file-input/file-input.css +0 -118
- package/src/components/file-input/leu-file-input.ts +0 -11
- package/src/components/file-input/stories/file-input.stories.ts +0 -45
- package/src/components/file-input/test/file-input.test.ts +0 -38
- package/src/components/icon/Icon.ts +0 -47
- package/src/components/icon/icon.css +0 -10
- package/src/components/icon/leu-icon.ts +0 -11
- package/src/components/icon/paths.ts +0 -219
- package/src/components/icon/stories/icon.stories.ts +0 -79
- package/src/components/icon/test/icon.test.ts +0 -50
- package/src/components/input/Input.ts +0 -469
- package/src/components/input/input.css +0 -238
- package/src/components/input/leu-input.ts +0 -11
- package/src/components/input/stories/input.stories.ts +0 -204
- package/src/components/input/test/input.test.ts +0 -603
- package/src/components/menu/Menu.ts +0 -149
- package/src/components/menu/MenuItem.ts +0 -168
- package/src/components/menu/leu-menu-item.ts +0 -11
- package/src/components/menu/leu-menu.ts +0 -11
- package/src/components/menu/menu-item.css +0 -77
- package/src/components/menu/menu.css +0 -19
- package/src/components/menu/stories/menu-item.stories.ts +0 -81
- package/src/components/menu/stories/menu.stories.ts +0 -54
- package/src/components/menu/test/menu-item.test.ts +0 -210
- package/src/components/menu/test/menu.test.ts +0 -125
- package/src/components/message/Message.ts +0 -118
- package/src/components/message/leu-message.ts +0 -11
- package/src/components/message/message.css +0 -163
- package/src/components/message/stories/message.mdx +0 -76
- package/src/components/message/stories/message.stories.ts +0 -149
- package/src/components/message/test/message.test.ts +0 -96
- package/src/components/pagination/Pagination.ts +0 -192
- package/src/components/pagination/leu-pagination.ts +0 -11
- package/src/components/pagination/pagination.css +0 -54
- package/src/components/pagination/stories/pagination.stories.ts +0 -115
- package/src/components/pagination/test/pagination.test.ts +0 -210
- package/src/components/placeholder/Placeholder.ts +0 -33
- package/src/components/placeholder/leu-placeholder.ts +0 -11
- package/src/components/placeholder/placeholder.css +0 -59
- package/src/components/placeholder/stories/placeholder.stories.ts +0 -34
- package/src/components/placeholder/test/placeholder.test.ts +0 -31
- package/src/components/popup/Popup.ts +0 -264
- package/src/components/popup/leu-popup.ts +0 -11
- package/src/components/popup/popup.css +0 -24
- package/src/components/popup/stories/popup.stories.ts +0 -117
- package/src/components/popup/test/popup.test.ts +0 -90
- package/src/components/progress-bar/ProgressBar.ts +0 -52
- package/src/components/progress-bar/leu-progress-bar.ts +0 -11
- package/src/components/progress-bar/progress-bar.css +0 -97
- package/src/components/progress-bar/stories/progress-bar.stories.ts +0 -39
- package/src/components/progress-bar/test/progress-bar.test.ts +0 -61
- package/src/components/radio/Radio.ts +0 -59
- package/src/components/radio/RadioGroup.ts +0 -181
- package/src/components/radio/leu-radio-group.ts +0 -11
- package/src/components/radio/leu-radio.ts +0 -11
- package/src/components/radio/radio-group.css +0 -29
- package/src/components/radio/radio.css +0 -76
- package/src/components/radio/stories/radio-group.stories.ts +0 -54
- package/src/components/radio/stories/radio.stories.ts +0 -55
- package/src/components/radio/test/radio-group.test.ts +0 -83
- package/src/components/radio/test/radio.test.ts +0 -119
- package/src/components/range/Range.ts +0 -400
- package/src/components/range/leu-range.ts +0 -11
- package/src/components/range/range.css +0 -227
- package/src/components/range/stories/range.stories.ts +0 -185
- package/src/components/range/test/range.test.ts +0 -228
- package/src/components/scroll-top/ScrollTop.ts +0 -91
- package/src/components/scroll-top/leu-scroll-top.ts +0 -11
- package/src/components/scroll-top/scroll-top.css +0 -50
- package/src/components/scroll-top/stories/scroll-top.stories.ts +0 -217
- package/src/components/scroll-top/test/scroll-top.test.ts +0 -22
- package/src/components/select/Select.ts +0 -570
- package/src/components/select/leu-select.ts +0 -11
- package/src/components/select/select.css +0 -222
- package/src/components/select/stories/select.stories.ts +0 -173
- package/src/components/select/test/fixtures.ts +0 -162
- package/src/components/select/test/select.test.ts +0 -937
- package/src/components/spinner/Spinner.ts +0 -31
- package/src/components/spinner/leu-spinner.ts +0 -11
- package/src/components/spinner/spinner.css +0 -20
- package/src/components/spinner/stories/spinner.stories.ts +0 -29
- package/src/components/spinner/test/spinner.test.ts +0 -30
- package/src/components/tab/Tab.ts +0 -72
- package/src/components/tab/TabGroup.ts +0 -267
- package/src/components/tab/TabPanel.ts +0 -59
- package/src/components/tab/leu-tab-group.ts +0 -11
- package/src/components/tab/leu-tab-panel.ts +0 -11
- package/src/components/tab/leu-tab.ts +0 -11
- package/src/components/tab/stories/tab.stories.ts +0 -97
- package/src/components/tab/tab-group.css +0 -63
- package/src/components/tab/tab-panel.css +0 -10
- package/src/components/tab/tab.css +0 -54
- package/src/components/tab/test/tab-group.test.ts +0 -426
- package/src/components/tab/test/tab-panel.test.ts +0 -102
- package/src/components/tab/test/tab.test.ts +0 -139
- package/src/components/table/Table.ts +0 -253
- package/src/components/table/leu-table.ts +0 -11
- package/src/components/table/stories/table.stories.ts +0 -131
- package/src/components/table/table.css +0 -112
- package/src/components/table/test/table.test.ts +0 -37
- package/src/components/tag/Tag.ts +0 -28
- package/src/components/tag/leu-tag.ts +0 -11
- package/src/components/tag/stories/tag.stories.ts +0 -107
- package/src/components/tag/tag.css +0 -42
- package/src/components/tag/test/tag.test.ts +0 -28
- package/src/components/visually-hidden/VisuallyHidden.ts +0 -16
- package/src/components/visually-hidden/leu-visually-hidden.ts +0 -11
- package/src/components/visually-hidden/stories/visually-hidden.stories.ts +0 -22
- package/src/components/visually-hidden/test/visually-hidden.test.ts +0 -34
- package/src/components/visually-hidden/visually-hidden.css +0 -10
- package/src/docs/contributing.mdx +0 -154
- package/src/docs/installation.mdx +0 -35
- package/src/docs/theme.mdx +0 -400
- package/src/docs/usage.mdx +0 -73
- package/src/global.d.ts +0 -11
- package/src/index.ts +0 -29
- package/src/lib/LeuElement.ts +0 -43
- package/src/lib/a11y.ts +0 -26
- package/src/lib/hasSlotController.ts +0 -74
- package/src/lib/mixins/FormAssociatedMixin.ts +0 -115
- package/src/lib/styleMap.ts +0 -139
- package/src/lib/utils.ts +0 -45
- package/src/styles/common-styles.css +0 -14
- package/src/styles/custom-media.css +0 -6
- package/src/styles/font-definitions.json +0 -210
- package/src/styles/style.stories.ts +0 -64
- package/src/styles/theme.css +0 -90
- package/stat_zh.png +0 -0
- package/stylelint.config.mjs +0 -23
- package/tsconfig.build.json +0 -24
- package/tsconfig.json +0 -14
- package/tsdown.config.ts +0 -35
- package/web-test-runner.config.mjs +0 -102
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { html } from "lit"
|
|
2
|
-
import { fixture, expect, oneEvent, elementUpdated } from "@open-wc/testing"
|
|
3
|
-
import { ifDefined } from "lit/directives/if-defined.js"
|
|
4
|
-
import { spy } from "sinon"
|
|
5
|
-
|
|
6
|
-
import "../leu-menu.js"
|
|
7
|
-
import "../leu-menu-item.js"
|
|
8
|
-
|
|
9
|
-
async function defaultFixture(args = {}) {
|
|
10
|
-
return fixture(html`
|
|
11
|
-
<leu-menu-item
|
|
12
|
-
href=${ifDefined(args.href)}
|
|
13
|
-
componentRole=${ifDefined(args.componentRole)}
|
|
14
|
-
value=${ifDefined(args.value)}
|
|
15
|
-
?active=${args.active}
|
|
16
|
-
?disabled=${args.disabled}
|
|
17
|
-
?tabbable=${args.tabbable}
|
|
18
|
-
?multipleSelection=${args.multipleSelection}
|
|
19
|
-
>
|
|
20
|
-
${args.label}
|
|
21
|
-
</leu-menu-item>
|
|
22
|
-
`)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async function wrappedFixture(args = {}) {
|
|
26
|
-
return fixture(html`
|
|
27
|
-
<leu-menu role=${ifDefined(args.menuRole)}>
|
|
28
|
-
${await defaultFixture(args)}
|
|
29
|
-
</leu-menu>
|
|
30
|
-
`)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
describe("LeuMenuItem", () => {
|
|
34
|
-
it("is a defined element", async () => {
|
|
35
|
-
const el = customElements.get("leu-menu-item")
|
|
36
|
-
|
|
37
|
-
await expect(el).not.to.be.undefined
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it("passes the a11y audit", async () => {
|
|
41
|
-
const el = await wrappedFixture({ label: "Download" })
|
|
42
|
-
|
|
43
|
-
await expect(el).dom.to.be.accessible()
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
it("passes the a11y audit with a link", async () => {
|
|
47
|
-
const el = await wrappedFixture({
|
|
48
|
-
label: "Download",
|
|
49
|
-
href: "https://zh.ch",
|
|
50
|
-
menuRole: "none",
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
await expect(el).dom.to.be.accessible()
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
it("renders a label", async () => {
|
|
57
|
-
const el = await defaultFixture({ label: "Download" })
|
|
58
|
-
|
|
59
|
-
expect(el).to.have.trimmed.text("Download")
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
it("renders a button", async () => {
|
|
63
|
-
const el = await defaultFixture({ label: "Download" })
|
|
64
|
-
|
|
65
|
-
const button = el.shadowRoot.querySelector("button")
|
|
66
|
-
|
|
67
|
-
expect(button).to.exist
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
it("renders a link", async () => {
|
|
71
|
-
const el = await defaultFixture({
|
|
72
|
-
label: "Kanton Zürich",
|
|
73
|
-
href: "https://zh.ch",
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
const link = el.shadowRoot.querySelector("a")
|
|
77
|
-
|
|
78
|
-
expect(link).to.exist
|
|
79
|
-
expect(link).to.have.attribute("href", "https://zh.ch")
|
|
80
|
-
expect(el).to.have.trimmed.text("Kanton Zürich")
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it("sets the aria-disabled attribute to the button", async () => {
|
|
84
|
-
const el = await defaultFixture({ label: "Download", disabled: true })
|
|
85
|
-
|
|
86
|
-
const button = el.shadowRoot.querySelector("button")
|
|
87
|
-
expect(button).to.have.attribute("aria-disabled", "true")
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
it("sets the defined role on the button", async () => {
|
|
91
|
-
const el = await defaultFixture({
|
|
92
|
-
label: "Download",
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
const button = el.shadowRoot.querySelector("button")
|
|
96
|
-
expect(button).to.have.attribute("role", "menuitem")
|
|
97
|
-
|
|
98
|
-
el.componentRole = "menuitemcheckbox"
|
|
99
|
-
await elementUpdated(el)
|
|
100
|
-
expect(button).to.have.attribute("role", "menuitemcheckbox")
|
|
101
|
-
|
|
102
|
-
el.componentRole = "menuitemradio"
|
|
103
|
-
await elementUpdated(el)
|
|
104
|
-
expect(button).to.have.attribute("role", "menuitemradio")
|
|
105
|
-
|
|
106
|
-
el.componentRole = "option"
|
|
107
|
-
await elementUpdated(el)
|
|
108
|
-
expect(button).to.have.attribute("role", "option")
|
|
109
|
-
|
|
110
|
-
el.componentRole = "none"
|
|
111
|
-
await elementUpdated(el)
|
|
112
|
-
expect(button).to.not.have.attribute("role")
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
it("adds either the aria-checked or aria-selected attribute to the button when the item is active", async () => {
|
|
116
|
-
const el = await defaultFixture({
|
|
117
|
-
label: "Download",
|
|
118
|
-
componentRole: "option",
|
|
119
|
-
active: true,
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
const button = el.shadowRoot.querySelector("button")
|
|
123
|
-
expect(button).to.have.attribute("aria-selected", "true")
|
|
124
|
-
expect(button).not.to.have.attribute("aria-checked")
|
|
125
|
-
|
|
126
|
-
el.componentRole = "menuitemcheckbox"
|
|
127
|
-
await elementUpdated(el)
|
|
128
|
-
expect(button).to.have.attribute("aria-checked", "true")
|
|
129
|
-
expect(button).not.to.have.attribute("aria-selected")
|
|
130
|
-
|
|
131
|
-
el.componentRole = "menuitemradio"
|
|
132
|
-
await elementUpdated(el)
|
|
133
|
-
expect(button).to.have.attribute("aria-checked", "true")
|
|
134
|
-
expect(button).not.to.have.attribute("aria-selected")
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
it("lets the click event bubble up", async () => {
|
|
138
|
-
const el = await defaultFixture({ label: "Download" })
|
|
139
|
-
|
|
140
|
-
const button = el.shadowRoot.querySelector("button")
|
|
141
|
-
|
|
142
|
-
setTimeout(() => {
|
|
143
|
-
button.click()
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
const event = await oneEvent(el, "click")
|
|
147
|
-
|
|
148
|
-
expect(event).to.exist
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
it("does not let the click event bubble up when disabled", async () => {
|
|
152
|
-
const el = await defaultFixture({ label: "Download", disabled: true })
|
|
153
|
-
|
|
154
|
-
const button = el.shadowRoot.querySelector("button")
|
|
155
|
-
const clickSpy = spy()
|
|
156
|
-
button.addEventListener("click", clickSpy)
|
|
157
|
-
|
|
158
|
-
el.click()
|
|
159
|
-
|
|
160
|
-
expect(clickSpy).to.have.not.been.called
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
it("reflects the tabbable property as tabindex to the button", async () => {
|
|
164
|
-
const el = await defaultFixture({ label: "Download", tabbable: true })
|
|
165
|
-
|
|
166
|
-
const button = el.shadowRoot.querySelector("button")
|
|
167
|
-
expect(button).to.have.attribute("tabindex", "0")
|
|
168
|
-
|
|
169
|
-
el.tabbable = false
|
|
170
|
-
await elementUpdated(el)
|
|
171
|
-
expect(button).to.have.attribute("tabindex", "-1")
|
|
172
|
-
|
|
173
|
-
el.tabbable = undefined
|
|
174
|
-
await elementUpdated(el)
|
|
175
|
-
expect(button).to.not.have.attribute("tabindex")
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
it("returns the value or label when getValue is called", async () => {
|
|
179
|
-
const el = await defaultFixture({ label: "Download " })
|
|
180
|
-
|
|
181
|
-
expect(el.getValue()).to.equal("Download")
|
|
182
|
-
|
|
183
|
-
el.value = "download-01"
|
|
184
|
-
|
|
185
|
-
expect(el.getValue()).to.equal("download-01")
|
|
186
|
-
})
|
|
187
|
-
|
|
188
|
-
it("renders a placeholder icon when the menu item is part of multiple selection but not active", async () => {
|
|
189
|
-
const el = await defaultFixture({
|
|
190
|
-
label: "Download",
|
|
191
|
-
multipleSelection: true,
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
const icon = el.shadowRoot.querySelector("leu-icon")
|
|
195
|
-
expect(icon).to.exist
|
|
196
|
-
expect(icon).to.have.attribute("name", "")
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
it("renders a check icon when the menu item is part of multiple selection and is active", async () => {
|
|
200
|
-
const el = await defaultFixture({
|
|
201
|
-
label: "Download",
|
|
202
|
-
multipleSelection: true,
|
|
203
|
-
active: true,
|
|
204
|
-
})
|
|
205
|
-
|
|
206
|
-
const icon = el.shadowRoot.querySelector("leu-icon")
|
|
207
|
-
expect(icon).to.exist
|
|
208
|
-
expect(icon).to.have.attribute("name", "check")
|
|
209
|
-
})
|
|
210
|
-
})
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { html } from "lit"
|
|
2
|
-
import { ifDefined } from "lit/directives/if-defined.js"
|
|
3
|
-
import { fixture, expect } from "@open-wc/testing"
|
|
4
|
-
import { sendKeys } from "@web/test-runner-commands"
|
|
5
|
-
|
|
6
|
-
import "../leu-menu.js"
|
|
7
|
-
import "../leu-menu-item.js"
|
|
8
|
-
import "../../icon/leu-icon.js"
|
|
9
|
-
|
|
10
|
-
async function defaultFixture(args = {}) {
|
|
11
|
-
return fixture(
|
|
12
|
-
html` <leu-menu
|
|
13
|
-
role=${ifDefined(args.role)}
|
|
14
|
-
selects=${ifDefined(args.selects)}
|
|
15
|
-
>
|
|
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
|
-
)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
describe("LeuMenu", () => {
|
|
39
|
-
it("is a defined element", async () => {
|
|
40
|
-
const el = customElements.get("leu-menu")
|
|
41
|
-
|
|
42
|
-
await expect(el).not.to.be.undefined
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
it("passes the a11y audit", async () => {
|
|
46
|
-
const el = await defaultFixture()
|
|
47
|
-
|
|
48
|
-
await expect(el).dom.to.be.accessible()
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
it("sets 'menu' as the default role", async () => {
|
|
52
|
-
const el = await defaultFixture()
|
|
53
|
-
|
|
54
|
-
expect(el.getAttribute("role")).to.equal("menu")
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it("sets 'menuitem' as the default role for menu items", async () => {
|
|
58
|
-
const el = await defaultFixture()
|
|
59
|
-
|
|
60
|
-
const menuItems = el.querySelectorAll("leu-menu-item")
|
|
61
|
-
|
|
62
|
-
menuItems.forEach((menuItem) => {
|
|
63
|
-
expect(menuItem.componentRole).to.equal("menuitem")
|
|
64
|
-
})
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
it("sets 'menuitemradio' as the role for menu items when only one item can be selected", async () => {
|
|
68
|
-
const el = await defaultFixture({ selects: "single" })
|
|
69
|
-
|
|
70
|
-
const menuItems = el.querySelectorAll("leu-menu-item")
|
|
71
|
-
|
|
72
|
-
menuItems.forEach((menuItem) => {
|
|
73
|
-
expect(menuItem.componentRole).to.equal("menuitemradio")
|
|
74
|
-
})
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
it("sets 'menuitemcheckbox' as the role for menu items when multiple items can be selected", async () => {
|
|
78
|
-
const el = await defaultFixture({ selects: "multiple" })
|
|
79
|
-
|
|
80
|
-
const menuItems = el.querySelectorAll("leu-menu-item")
|
|
81
|
-
|
|
82
|
-
menuItems.forEach((menuItem) => {
|
|
83
|
-
expect(menuItem.componentRole).to.equal("menuitemcheckbox")
|
|
84
|
-
})
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
it("sets 'option' as the role for menu items when the menu role is 'listbox'", async () => {
|
|
88
|
-
const el = await defaultFixture({ role: "listbox" })
|
|
89
|
-
|
|
90
|
-
const menuItems = el.querySelectorAll("leu-menu-item")
|
|
91
|
-
|
|
92
|
-
menuItems.forEach((menuItem) => {
|
|
93
|
-
expect(menuItem.componentRole).to.equal("option")
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
it("moves the focus when the arrow keys are pressed", async () => {
|
|
98
|
-
const el = await defaultFixture()
|
|
99
|
-
|
|
100
|
-
const menuItems = Array.from(el.querySelectorAll("leu-menu-item"))
|
|
101
|
-
|
|
102
|
-
await sendKeys({ press: "Tab" })
|
|
103
|
-
expect(document.activeElement).to.equal(menuItems[0])
|
|
104
|
-
|
|
105
|
-
await sendKeys({ press: "ArrowDown" })
|
|
106
|
-
await sendKeys({ press: "ArrowDown" })
|
|
107
|
-
|
|
108
|
-
expect(document.activeElement).to.equal(menuItems[2])
|
|
109
|
-
|
|
110
|
-
await sendKeys({ press: "ArrowUp" })
|
|
111
|
-
await sendKeys({ press: "ArrowUp" })
|
|
112
|
-
await sendKeys({ press: "ArrowUp" })
|
|
113
|
-
|
|
114
|
-
expect(document.activeElement).to.equal(menuItems.at(-1))
|
|
115
|
-
|
|
116
|
-
await sendKeys({ press: "Home" })
|
|
117
|
-
expect(document.activeElement).to.equal(menuItems[0])
|
|
118
|
-
|
|
119
|
-
await sendKeys({ press: "End" })
|
|
120
|
-
expect(document.activeElement).to.equal(menuItems.at(-1))
|
|
121
|
-
|
|
122
|
-
await sendKeys({ press: "ArrowDown" })
|
|
123
|
-
expect(document.activeElement).to.equal(menuItems[0])
|
|
124
|
-
})
|
|
125
|
-
})
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { html, nothing } from "lit"
|
|
2
|
-
import { property } from "lit/decorators.js"
|
|
3
|
-
import { classMap } from "lit/directives/class-map.js"
|
|
4
|
-
|
|
5
|
-
import { LeuElement } from "../../lib/LeuElement.js"
|
|
6
|
-
|
|
7
|
-
import styles from "./message.css?inline"
|
|
8
|
-
import { LeuIcon } from "../icon/Icon.js"
|
|
9
|
-
import { HasSlotController } from "../../lib/hasSlotController.js"
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @tagname leu-message
|
|
13
|
-
* @cssprop --leu-message-accent-color - Sets the color of the message. According to the design system, it is only allowd for `info`
|
|
14
|
-
* @slot [default] - The content of the message. The title of the message should marked up with a `<strong>` tag.
|
|
15
|
-
* @slot cta - A call to action button that is only allowed for `size=large`
|
|
16
|
-
* @fires leu:remove - Fired when the close button is clicked.
|
|
17
|
-
*/
|
|
18
|
-
export class LeuMessage extends LeuElement {
|
|
19
|
-
static styles = [LeuElement.styles, styles]
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @internal
|
|
23
|
-
*/
|
|
24
|
-
static shadowRootOptions = {
|
|
25
|
-
...LeuElement.shadowRootOptions,
|
|
26
|
-
delegatesFocus: true,
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @internal
|
|
31
|
-
*/
|
|
32
|
-
static dependencies = {
|
|
33
|
-
"leu-icon": LeuIcon,
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @internal
|
|
38
|
-
*/
|
|
39
|
-
static iconToTypeMap = {
|
|
40
|
-
info: "getInformation",
|
|
41
|
-
error: "caution",
|
|
42
|
-
success: "confirm",
|
|
43
|
-
warning: "caution",
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* The type of the message. `error` and `success` will be displayed as filled boxes.
|
|
48
|
-
*/
|
|
49
|
-
@property({ type: String, reflect: true })
|
|
50
|
-
type: "error" | "success" | "info" | "warning" = "success"
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* The size of the message. A call to action button is only allowed for `large` messages.
|
|
54
|
-
*/
|
|
55
|
-
@property({ type: String, reflect: true })
|
|
56
|
-
size: "regular" | "large" = "regular"
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Wheter the message is removable or not. The component will not remove itself when the close button is clicked.
|
|
60
|
-
*/
|
|
61
|
-
@property({ type: Boolean, reflect: true })
|
|
62
|
-
removable: boolean = false
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Wheter the message is used as a popup or not. This will add a drop shadow but will not position the message absolutely.
|
|
66
|
-
*/
|
|
67
|
-
@property({ type: Boolean, reflect: true })
|
|
68
|
-
popup: boolean = false
|
|
69
|
-
|
|
70
|
-
private hasSlotController = new HasSlotController(this, ["cta"])
|
|
71
|
-
|
|
72
|
-
protected renderIcon() {
|
|
73
|
-
const name = LeuMessage.iconToTypeMap[this.type]
|
|
74
|
-
|
|
75
|
-
return html`<leu-icon class="message__icon" name=${name}></leu-icon>`
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
protected handleRemove() {
|
|
79
|
-
this.dispatchEvent(
|
|
80
|
-
new CustomEvent("leu:remove", {
|
|
81
|
-
bubbles: true,
|
|
82
|
-
composed: true,
|
|
83
|
-
}),
|
|
84
|
-
)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
render() {
|
|
88
|
-
const hasCta = this.hasSlotController.test("cta")
|
|
89
|
-
const classes = classMap({
|
|
90
|
-
message: true,
|
|
91
|
-
"message--filled": this.type === "error" || this.type === "success",
|
|
92
|
-
"message--popup": this.popup,
|
|
93
|
-
[`message--${this.size}`]: true,
|
|
94
|
-
[`message--${this.type}`]: true,
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
return html`
|
|
98
|
-
<div class="${classes}">
|
|
99
|
-
${this.renderIcon()}
|
|
100
|
-
<p class="message__content">
|
|
101
|
-
<slot></slot>
|
|
102
|
-
</p>
|
|
103
|
-
${hasCta
|
|
104
|
-
? html`<slot class="message__cta" name="cta"></slot>`
|
|
105
|
-
: nothing}
|
|
106
|
-
${this.removable
|
|
107
|
-
? html`<button
|
|
108
|
-
class="message__remove"
|
|
109
|
-
aria-label="Meldung schliessen"
|
|
110
|
-
@click=${this.handleRemove}
|
|
111
|
-
>
|
|
112
|
-
<leu-icon class="message__remove-icon" name="close"></leu-icon>
|
|
113
|
-
</button>`
|
|
114
|
-
: nothing}
|
|
115
|
-
</div>
|
|
116
|
-
`
|
|
117
|
-
}
|
|
118
|
-
}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
@import url("../../styles/custom-media.css");
|
|
2
|
-
|
|
3
|
-
:host {
|
|
4
|
-
font-family: var(--leu-font-family-regular);
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
.message {
|
|
8
|
-
position: relative;
|
|
9
|
-
display: flex;
|
|
10
|
-
flex-flow: row nowrap;
|
|
11
|
-
align-items: center;
|
|
12
|
-
|
|
13
|
-
padding: var(--_padding);
|
|
14
|
-
border-radius: 0.25rem;
|
|
15
|
-
overflow: hidden;
|
|
16
|
-
|
|
17
|
-
background-color: var(--leu-color-black-0);
|
|
18
|
-
color: var(--_accent-color);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.message::before {
|
|
22
|
-
content: "";
|
|
23
|
-
position: absolute;
|
|
24
|
-
inset-block-start: 0;
|
|
25
|
-
inset-inline-start: 0;
|
|
26
|
-
width: 0.25rem;
|
|
27
|
-
height: 100%;
|
|
28
|
-
background-color: var(--_accent-color);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.message--error {
|
|
32
|
-
--_accent-color: var(--leu-message-accent-color, var(--leu-color-func-red));
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.message--warning {
|
|
36
|
-
--_accent-color: var(--leu-message-accent-color, var(--leu-color-func-red));
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.message--success {
|
|
40
|
-
--_accent-color: var(--leu-message-accent-color, var(--leu-color-func-green));
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.message--info {
|
|
44
|
-
--_accent-color: var(
|
|
45
|
-
--leu-message-accent-color,
|
|
46
|
-
var(--leu-color-accent-violet)
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.message--filled {
|
|
51
|
-
background-color: var(--_accent-color);
|
|
52
|
-
color: var(--leu-color-black-0);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.message--filled::before {
|
|
56
|
-
content: none;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.message--regular {
|
|
60
|
-
--_padding: 0.75rem;
|
|
61
|
-
--_icon-size: 24px;
|
|
62
|
-
|
|
63
|
-
@media (--viewport-large) {
|
|
64
|
-
--_padding: 1rem;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.message--large {
|
|
69
|
-
--_padding: 1rem;
|
|
70
|
-
--_icon-size: 32px;
|
|
71
|
-
|
|
72
|
-
@media (--viewport-small-max) {
|
|
73
|
-
flex-flow: column;
|
|
74
|
-
align-items: start;
|
|
75
|
-
gap: 0.75rem;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
@media (--viewport-regular) {
|
|
79
|
-
--_padding: 1.25rem;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@media (--viewport-large) {
|
|
83
|
-
--_padding: 1.5rem;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.message--popup {
|
|
88
|
-
box-shadow: var(--leu-box-shadow-regular);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.message__icon {
|
|
92
|
-
--leu-icon-size: var(--_icon-size);
|
|
93
|
-
|
|
94
|
-
display: block;
|
|
95
|
-
flex: 0 0 min-content;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.message__content {
|
|
99
|
-
flex: 1 1 auto;
|
|
100
|
-
font: var(--leu-t-curve-small-regular-font);
|
|
101
|
-
margin: 0 0.5rem;
|
|
102
|
-
|
|
103
|
-
@media (--viewport-regular) {
|
|
104
|
-
margin-inline: 0.75rem;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
@media (--viewport-large) {
|
|
108
|
-
margin-inline: 1rem;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
.message--large .message__content {
|
|
113
|
-
@media (--viewport-small-max) {
|
|
114
|
-
margin-inline: 0;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.message__content ::slotted(strong) {
|
|
119
|
-
font-family: var(--leu-font-family-black);
|
|
120
|
-
font-weight: normal;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.message__cta {
|
|
124
|
-
display: block;
|
|
125
|
-
flex: 0 0 min-content;
|
|
126
|
-
margin-inline-end: 0.5rem;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.message__remove {
|
|
130
|
-
flex: 0 0 min-content;
|
|
131
|
-
border: none;
|
|
132
|
-
background: none;
|
|
133
|
-
padding: 0;
|
|
134
|
-
color: var(--leu-color-black-60);
|
|
135
|
-
cursor: pointer;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.message__remove:where(:hover, :focus-visible) {
|
|
139
|
-
color: var(--leu-color-black-40);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
.message--filled .message__remove {
|
|
143
|
-
color: var(--leu-color-black-0);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
.message--filled .message__remove:where(:hover, :focus-visible) {
|
|
147
|
-
color: var(--leu-color-white-transp-70);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
.message--large .message__remove {
|
|
151
|
-
position: absolute;
|
|
152
|
-
inset-block-start: var(--_padding);
|
|
153
|
-
inset-inline-end: var(--_padding);
|
|
154
|
-
|
|
155
|
-
@media (--viewport-regular) {
|
|
156
|
-
position: static;
|
|
157
|
-
inset: auto;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.message__remove-icon {
|
|
162
|
-
--leu-icon-size: 1.5rem;
|
|
163
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { Canvas, Meta, Controls } from "@storybook/addon-docs/blocks"
|
|
2
|
-
|
|
3
|
-
import * as MessageStories from "./message.stories"
|
|
4
|
-
|
|
5
|
-
<Meta of={MessageStories} />
|
|
6
|
-
|
|
7
|
-
# Message
|
|
8
|
-
|
|
9
|
-
A message component that can be used to display feedback, alerts, or important information to the user.
|
|
10
|
-
|
|
11
|
-
[Meldungen | Design System | zh.ch](https://www.zh.ch/de/webangebote-entwickeln-und-gestalten/inhalt/designsystem/komponenten/meldungen.zhweb-noredirect.zhweb-cache.html?node-id=18369%3A164719&node-id=18369%3A163396&node-id=18369%3A166594&search=meldung) <br />
|
|
12
|
-
|
|
13
|
-
## Background
|
|
14
|
-
|
|
15
|
-
The message can appear with a colored background or with a white background. The appearance depends on the `type` attribute:
|
|
16
|
-
|
|
17
|
-
`success` and `warning` will have a colored background.
|
|
18
|
-
|
|
19
|
-
<Canvas of={MessageStories.Success} />
|
|
20
|
-
<Canvas of={MessageStories.Error} />
|
|
21
|
-
|
|
22
|
-
While `error` and `info` will have a white background.
|
|
23
|
-
|
|
24
|
-
<Canvas of={MessageStories.Warning} />
|
|
25
|
-
<Canvas of={MessageStories.Info} />
|
|
26
|
-
|
|
27
|
-
## Content
|
|
28
|
-
|
|
29
|
-
The text content can simply be passed into the default slot. The optional title of the message has to be marked up with a `<strong>` tag.
|
|
30
|
-
|
|
31
|
-
```html
|
|
32
|
-
<leu-message>
|
|
33
|
-
<strong>Title of the message</strong><br />
|
|
34
|
-
This is the content of the message. It can span multiple lines.
|
|
35
|
-
</leu-message>
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Size
|
|
39
|
-
|
|
40
|
-
The message component can be rendered in two sizes: `small` and `large`.
|
|
41
|
-
The `small` size does not allow for a call to action button and a title.
|
|
42
|
-
|
|
43
|
-
## Call to action button
|
|
44
|
-
|
|
45
|
-
A call to action button can added to the message by using the `cta` slot. This is only allowed for the `large` size.
|
|
46
|
-
Be aware that you have to set the `inverted` attribute on the button if you use it on a colored background.
|
|
47
|
-
The component does not handle any events of the button.
|
|
48
|
-
|
|
49
|
-
## Remove button
|
|
50
|
-
|
|
51
|
-
With setting the `removable` attribute, a close button will be displayed in the top right corner of the message.
|
|
52
|
-
The component does not remove itself from the DOM, but it will dispatch a `leu:remove` event when the close button is clicked.
|
|
53
|
-
|
|
54
|
-
## Popup / Toast
|
|
55
|
-
|
|
56
|
-
If you use the message as a toast or lay it over other content, you can set the `popup` attribute.
|
|
57
|
-
This will add box shadow to the message.
|
|
58
|
-
|
|
59
|
-
<Canvas of={MessageStories.Popup} />
|
|
60
|
-
|
|
61
|
-
## Custom accent colored
|
|
62
|
-
|
|
63
|
-
While `success`, `warning`, and `error` have a predefined accent color, you can set a custom accent color for the `info` type.
|
|
64
|
-
Just set the `--leu-message-accent-color` css custom property on the message element.
|
|
65
|
-
|
|
66
|
-
<Canvas of={MessageStories.CustomColor} />
|
|
67
|
-
|
|
68
|
-
## Accessibility
|
|
69
|
-
|
|
70
|
-
We have decided to not use the `role="alert"` or the
|
|
71
|
-
`aria-live` attribute as the message component can be used in various contexts.
|
|
72
|
-
We simply can't predict which role or which `aria-live` value would make sense.
|
|
73
|
-
Please ensure that you add the appropriate role or attribute yourself.
|
|
74
|
-
|
|
75
|
-
<Controls />
|
|
76
|
-
```
|