chore(input): show example html inside label

This commit is contained in:
qa46hx 2020-02-03 10:52:56 +01:00
parent c2c5e7c299
commit 66b2a71550
2 changed files with 78 additions and 5 deletions

View file

@ -38,12 +38,21 @@ describe('FormControlMixin', () => {
const elElem = await fixture(html` const elElem = await fixture(html`
<${tag}> <${tag}>
<label slot="label">Email <span>address</span></label> <label slot="label">Email address</label>
${inputSlot} ${inputSlot}
</${tag}>`); </${tag}>`);
expect(elElem.label).to.equal('Email address', 'as an element'); expect(elElem.label).to.equal('Email address', 'as an element');
}); });
it('has a label that supports inner html', async () => {
const el = await fixture(html`
<${tag}>
<label slot="label">Email <span>address</span></label>
${inputSlot}
</${tag}>`);
expect(el.label).to.equal('Email address');
});
it('can have a help-text', async () => { it('can have a help-text', async () => {
const elAttr = await fixture(html` const elAttr = await fixture(html`
<${tag} help-text="We will not send you any spam">${inputSlot}</${tag}> <${tag} help-text="We will not send you any spam">${inputSlot}</${tag}>
@ -59,12 +68,21 @@ describe('FormControlMixin', () => {
const elElem = await fixture(html` const elElem = await fixture(html`
<${tag}> <${tag}>
<label slot="help-text">We will not send you any <span>spam</span></label> <label slot="help-text">We will not send you any spam</label>
${inputSlot} ${inputSlot}
</${tag}>`); </${tag}>`);
expect(elElem.helpText).to.equal('We will not send you any spam', 'as an element'); expect(elElem.helpText).to.equal('We will not send you any spam', 'as an element');
}); });
it('can have a help-text that supports inner html', async () => {
const el = await fixture(html`
<${tag}>
<label slot="help-text">We will not send you any spam</label>
${inputSlot}
</${tag}>`);
expect(el.helpText).to.equal('We will not send you any spam');
});
it('does not duplicate aria-describedby and aria-labelledby ids', async () => { it('does not duplicate aria-describedby and aria-labelledby ids', async () => {
const lionField = await fixture(` const lionField = await fixture(`
<${elem} help-text="This element will be disconnected/reconnected">${inputSlot}</${elem}> <${elem} help-text="This element will be disconnected/reconnected">${inputSlot}</${elem}>

View file

@ -10,7 +10,7 @@ import '../lion-input.js';
`lion-input` component is a webcomponent that enhances the functionality of the native `<input>` element. `lion-input` component is a webcomponent that enhances the functionality of the native `<input>` element.
<Story name="default"> <Story name="Default">
{html` {html`
<lion-input label="First Name"></lion-input> <lion-input label="First Name"></lion-input>
`} `}
@ -25,7 +25,7 @@ import '../lion-input.js';
- Based on [field](?path=/docs/forms-system-overview--page) - Based on [field](?path=/docs/forms-system-overview--page)
- Extra visual elements can be added via `slots` - Extra visual elements can be added via `slots`
- **label**: can also be provided via the `label` attribute, but the slot can be used to change the `html` and `CSS` of the label. - **label**: can also be provided via the `label` attribute, but the slot can be used to change the `html` and `CSS` of the label.
For example add an `sr-only` class to the label to make it visually hidden. For example add an `u-sr-only` class to the label to make it visually hidden.
A label is always needed for accessibility reasons. A label is always needed for accessibility reasons.
- **help-text**: a helper text shown below the label to give extra clarification. - **help-text**: a helper text shown below the label to give extra clarification.
- **prefix**: does not have an active use case yet, but the option is in place. - **prefix**: does not have an active use case yet, but the option is in place.
@ -49,9 +49,64 @@ import '@lion/input/lion-input.js';
## Examples ## Examples
### Label
Can be provided via the `label` attribute, but the slot can be used to change the `html` and `CSS` of the label.
For example add an `u-sr-only` class to the label to make it (partially) visually hidden.
A label is always needed for accessibility reasons.
<Story name="Label">
{html`
<style>
.u-sr-only {
position: absolute;
top: 0;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(100%);
clip: rect(1px, 1px, 1px, 1px);
white-space: nowrap;
border: 0;
margin: 0;
padding: 0;
}
</style>
<lion-input>
<label slot="label">Label <span class="u-sr-only">partially only visible for screen-readers</span></label>
</lion-input>
`}
</Story>
```html
<style>
.u-sr-only {
position: absolute;
top: 0;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(100%);
clip: rect(1px, 1px, 1px, 1px);
white-space: nowrap;
border: 0;
margin: 0;
padding: 0;
}
</style>
<lion-input>
<label slot="label">Label <span class="u-sr-only">partially only visible for screen-readers</span></label>
</lion-input>
```
### Help-text ### Help-text
<Story name="Help-text with html"> A helper text shown below the label to give extra clarification.
Just like the `label`, a `help-text` can be provided via the `help-text` attribute, a slot can be used to change the `html` and `CSS` of the help-text.
For example add an anchor with further explanation.
<Story name="Help-text">
{html` {html`
<lion-input> <lion-input>
<label slot="label">Label</label> <label slot="label">Label</label>