@brightspace-ui/core 3.56.0 → 3.58.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.
@@ -50,58 +50,81 @@ Toggling progressive disclosure is OK
|
|
50
50
|
|
51
51
|
Native `<select>` elements can be styled by importing `input-select-styles.js` into your LitElement and applying the `d2l-input-select` CSS class.
|
52
52
|
|
53
|
-
|
53
|
+
The styles support the pseudo-classes `disabled`, `focus`, and `hover`, as well as the `aria-invalid` attribute.
|
54
54
|
|
55
|
-
|
55
|
+
When applying styles to the native element, we also recommend using the [`SkeletonMixin`](https://github.com/BrightspaceUI/core/tree/main/components/skeleton) to help convey to users that the page, or at least a section of it, has not finished loading yet.
|
56
|
+
|
57
|
+
<!-- docs: demo code -->
|
56
58
|
```html
|
57
59
|
<script type="module">
|
58
|
-
import {
|
59
|
-
import { RtlMixin } from '@brightspace-ui/core/mixins/rtl/rtl-mixin.js';
|
60
|
+
import { html, LitElement } from 'lit';
|
60
61
|
import { selectStyles } from '@brightspace-ui/core/components/inputs/input-select-styles.js';
|
61
62
|
import { SkeletonMixin } from '@brightspace-ui/core/components/skeleton/skeleton-mixin.js';
|
62
63
|
|
63
|
-
class TestInputSelect extends SkeletonMixin(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
}
|
82
|
-
`
|
83
|
-
];
|
84
|
-
}
|
85
|
-
|
86
|
-
render() {
|
87
|
-
const invalid = this.invalid ? 'true' : 'false';
|
88
|
-
return html`
|
89
|
-
<div class="d2l-skeletize">
|
90
|
-
<select
|
91
|
-
aria-label="Choose a dinosaur:"
|
92
|
-
aria-invalid="${invalid}"
|
93
|
-
class="d2l-input-select"
|
94
|
-
?disabled="${this.disabled}">
|
95
|
-
<option>Tyrannosaurus</option>
|
96
|
-
<option>Velociraptor</option>
|
97
|
-
<option>Deinonychus</option>
|
98
|
-
</select>
|
99
|
-
</div>
|
100
|
-
`;
|
101
|
-
}
|
64
|
+
class TestInputSelect extends SkeletonMixin(LitElement) {
|
65
|
+
static get styles() {
|
66
|
+
return [ super.styles, selectStyles ];
|
67
|
+
}
|
68
|
+
|
69
|
+
render() {
|
70
|
+
return html`
|
71
|
+
<div class="d2l-skeletize">
|
72
|
+
<select
|
73
|
+
aria-label="Choose a dinosaur:"
|
74
|
+
class="d2l-input-select">
|
75
|
+
<option>Tyrannosaurus</option>
|
76
|
+
<option>Velociraptor</option>
|
77
|
+
<option>Deinonychus</option>
|
78
|
+
</select>
|
79
|
+
</div>
|
80
|
+
`;
|
81
|
+
}
|
102
82
|
|
103
83
|
}
|
104
84
|
customElements.define('d2l-test-input-select', TestInputSelect);
|
105
85
|
</script>
|
106
86
|
<d2l-test-input-select></d2l-test-input-select>
|
107
87
|
```
|
88
|
+
|
89
|
+
### Invalid
|
90
|
+
|
91
|
+
Use the [`aria-invalid`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-invalid) attribute to support screenreader users and apply our consistent error styles.
|
92
|
+
|
93
|
+
<!-- docs: demo -->
|
94
|
+
```html
|
95
|
+
<script type="module">
|
96
|
+
import { html, LitElement } from 'lit';
|
97
|
+
import { selectStyles } from '@brightspace-ui/core/components/inputs/input-select-styles.js';
|
98
|
+
|
99
|
+
class TestInputSelect extends LitElement {
|
100
|
+
|
101
|
+
static get styles() {
|
102
|
+
return [ selectStyles ];
|
103
|
+
}
|
104
|
+
|
105
|
+
render() {
|
106
|
+
return html`
|
107
|
+
<select
|
108
|
+
aria-label="Choose a dinosaur:"
|
109
|
+
aria-invalid="true"
|
110
|
+
class="d2l-input-select">
|
111
|
+
<option>Tyrannosaurus</option>
|
112
|
+
<option>Velociraptor</option>
|
113
|
+
<option>Deinonychus</option>
|
114
|
+
</select>
|
115
|
+
`;
|
116
|
+
}
|
117
|
+
|
118
|
+
}
|
119
|
+
customElements.define('d2l-test-input-select', TestInputSelect);
|
120
|
+
</script>
|
121
|
+
<d2l-test-input-select></d2l-test-input-select>
|
122
|
+
```
|
123
|
+
|
124
|
+
## Accessibility
|
125
|
+
|
126
|
+
- Due to applying styles based on a CSS class rather than being its own component, the accessibility provided by `selectStyles` comes purely in the way of following the guidelines for [contrast](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html) and [focus](https://www.w3.org/WAI/WCAG21/Understanding/focus-visible.html)
|
127
|
+
- There are several things that can be done to make sure your `select` component is accessible, including:
|
128
|
+
- Following the W3C [Combobox](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/) pattern
|
129
|
+
- Using either the `aria-label` or `aria-labelledby` to appropriately assign a label to your component
|
130
|
+
- Using `label` for `optgroup` if you choose to use that element within the select element, so that it can be read out to screenreaders
|
@@ -101,3 +101,4 @@ pager.addEventListener('d2l-pager-load-more', e => {
|
|
101
101
|
| Event | Description |
|
102
102
|
|---|---|
|
103
103
|
| `d2l-pager-load-more` | Dispatched when the user clicks the Load More button. The `pageSize` can be accessed from the event `target`. The consumer must call the `complete()` method on the event detail to signal completion after the new items have been loaded. |
|
104
|
+
| `d2l-pager-load-more-loaded` | Dispatched after more items have been loaded.
|
@@ -17,6 +17,7 @@ const nativeFocus = document.createElement('div').focus;
|
|
17
17
|
/**
|
18
18
|
* A pager component for load-more paging.
|
19
19
|
* @fires d2l-pager-load-more - Dispatched when the user clicks the load-more button. Consumers must call the provided "complete" method once items have been loaded.
|
20
|
+
* @fires d2l-pager-load-more-loaded - Dispatched after more items have been loaded.
|
20
21
|
*/
|
21
22
|
class LoadMore extends PageableSubscriberMixin(FocusMixin(LocalizeCoreElement(RtlMixin(LitElement)))) {
|
22
23
|
|
@@ -125,24 +126,34 @@ class LoadMore extends PageableSubscriberMixin(FocusMixin(LocalizeCoreElement(Rt
|
|
125
126
|
this._loading = false;
|
126
127
|
|
127
128
|
// wait a frame for async sub-components to render
|
128
|
-
await new Promise(
|
129
|
+
await new Promise(requestAnimationFrame);
|
129
130
|
|
130
131
|
const item = pageable._getItemByIndex(lastItemIndex + 1);
|
131
132
|
|
132
|
-
|
133
|
-
if (item
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
133
|
+
let itemToFocus;
|
134
|
+
if (item) {
|
135
|
+
if (item.updateComplete) await item.updateComplete;
|
136
|
+
if (item.focus !== nativeFocus) {
|
137
|
+
itemToFocus = item;
|
138
|
+
} else {
|
139
|
+
const firstFocusable = getFirstFocusableDescendant(item);
|
140
|
+
if (firstFocusable) {
|
141
|
+
itemToFocus = firstFocusable;
|
142
|
+
} else if (item.focus === nativeFocus) {
|
143
|
+
item.tabIndex = -1;
|
144
|
+
itemToFocus = item;
|
145
|
+
}
|
144
146
|
}
|
145
147
|
}
|
148
|
+
|
149
|
+
if (itemToFocus) {
|
150
|
+
await new Promise(requestAnimationFrame);
|
151
|
+
itemToFocus.focus();
|
152
|
+
}
|
153
|
+
|
154
|
+
await new Promise(requestAnimationFrame);
|
155
|
+
this.dispatchEvent(new CustomEvent('d2l-pager-load-more-loaded'));
|
156
|
+
|
146
157
|
}
|
147
158
|
|
148
159
|
}
|
package/custom-elements.json
CHANGED
@@ -10535,6 +10535,10 @@
|
|
10535
10535
|
{
|
10536
10536
|
"name": "d2l-pager-load-more",
|
10537
10537
|
"description": "Dispatched when the user clicks the load-more button. Consumers must call the provided \"complete\" method once items have been loaded."
|
10538
|
+
},
|
10539
|
+
{
|
10540
|
+
"name": "d2l-pager-load-more-loaded",
|
10541
|
+
"description": "Dispatched after more items have been loaded."
|
10538
10542
|
}
|
10539
10543
|
]
|
10540
10544
|
},
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@brightspace-ui/core",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.58.0",
|
4
4
|
"description": "A collection of accessible, free, open-source web components for building Brightspace applications",
|
5
5
|
"type": "module",
|
6
6
|
"repository": "https://github.com/BrightspaceUI/core.git",
|