@brightspace-ui/core 2.22.1 → 2.23.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/components/dialog/dialog-mixin.js +3 -1
- package/components/filter/README.md +71 -11
- package/components/filter/demo/filter-tags.html +86 -0
- package/components/filter/filter-tags.js +144 -0
- package/components/filter/filter.js +1 -0
- package/components/focus-trap/focus-trap.js +21 -3
- package/components/tag-list/README.md +12 -0
- package/components/tag-list/tag-list-item-mixin.js +4 -2
- package/components/tag-list/tag-list.js +19 -4
- package/custom-elements.json +53 -2
- package/lang/ar.js +2 -0
- package/lang/cy.js +2 -0
- package/lang/da.js +2 -0
- package/lang/de.js +2 -0
- package/lang/en.js +2 -0
- package/lang/es-es.js +2 -0
- package/lang/es.js +2 -0
- package/lang/fr-fr.js +2 -0
- package/lang/fr.js +2 -0
- package/lang/hi.js +2 -0
- package/lang/ja.js +2 -0
- package/lang/ko.js +2 -0
- package/lang/nl.js +2 -0
- package/lang/pt.js +2 -0
- package/lang/sv.js +2 -0
- package/lang/tr.js +2 -0
- package/lang/zh-cn.js +2 -0
- package/lang/zh-tw.js +2 -0
- package/package.json +1 -1
|
@@ -17,7 +17,9 @@ window.D2L.DialogMixin = window.D2L.DialogMixin || {};
|
|
|
17
17
|
|
|
18
18
|
// while implemented in Webkit, native <dialog> focus mangement across slotted content is buggy
|
|
19
19
|
// https://bugs.webkit.org/show_bug.cgi?id=233320
|
|
20
|
-
|
|
20
|
+
// starting in Chrome 102, all elements inside <dialog>s that are inside shadow roots have null offsetParent
|
|
21
|
+
// https://bugs.chromium.org/p/chromium/issues/detail?id=1331803
|
|
22
|
+
window.D2L.DialogMixin.hasNative = false && (window.HTMLDialogElement !== undefined)
|
|
21
23
|
&& (navigator.vendor && navigator.vendor.toLowerCase().indexOf('apple') === -1);
|
|
22
24
|
if (window.D2L.DialogMixin.preferNative === undefined) {
|
|
23
25
|
window.D2L.DialogMixin.preferNative = true;
|
|
@@ -140,13 +140,13 @@ If you are going to be constructing your dimensions and/or dimension values by i
|
|
|
140
140
|
import { repeat } from 'lit/directives/repeat.js';
|
|
141
141
|
...
|
|
142
142
|
return html`<d2l-filter>
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
143
|
+
${repeat(this._dimensions, (dim) => dim.key, dim => html`
|
|
144
|
+
<d2l-filter-dimension-set key="${dim.key}" text=${dim.text}>
|
|
145
|
+
${repeat(dim._values, (value) => value.key, value => html`
|
|
146
|
+
<d2l-filter-dimension-set-value key="${value.kay}" text="${value.text}" ?selected="${value.selected}"></d2l-filter-dimension-set-value>
|
|
147
|
+
`)}
|
|
148
|
+
</d2l-filter-dimension-set>
|
|
149
|
+
`)}
|
|
150
150
|
</d2l-filter>`;
|
|
151
151
|
```
|
|
152
152
|
|
|
@@ -224,14 +224,74 @@ This component is built to be used alongside the [d2l-filter-dimension-set](#fil
|
|
|
224
224
|
| `text` | String, required | Text for the value in the list |
|
|
225
225
|
| `selected` | Boolean, default: `false` | Whether the value in the filter is selected or not |
|
|
226
226
|
|
|
227
|
+
## Tags for Applied Filters [d2l-filter-tags]
|
|
227
228
|
|
|
228
|
-
|
|
229
|
+
A tag-list allowing the user to see (and remove) the currently applied filters. Works with the `d2l-filter`. It supports hooking up to multiple filters.
|
|
229
230
|
|
|
230
|
-
|
|
231
|
+
<!-- docs: demo live name:d2l-filter-tags align:start display:block autoSize:false size:medium -->
|
|
232
|
+
```html
|
|
233
|
+
<script type="module">
|
|
234
|
+
import '@brightspace-ui/core/components/filter/filter.js';
|
|
235
|
+
import '@brightspace-ui/core/components/filter/filter-dimension-set.js';
|
|
236
|
+
import '@brightspace-ui/core/components/filter/filter-dimension-set-value.js';
|
|
237
|
+
import '@brightspace-ui/core/components/filter/filter-tags.js';
|
|
238
|
+
</script>
|
|
239
|
+
<style>
|
|
240
|
+
d2l-filter-tags {
|
|
241
|
+
max-width: calc(100% - 300px);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
@media(max-width: 600px) {
|
|
245
|
+
d2l-filter-tags {
|
|
246
|
+
display: block;
|
|
247
|
+
max-width: 100%;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
</style>
|
|
231
251
|
|
|
232
|
-
|
|
252
|
+
<d2l-filter-tags filter-ids="core-filter core-filter-2"></d2l-filter-tags>
|
|
253
|
+
|
|
254
|
+
<d2l-filter id="core-filter">
|
|
255
|
+
<d2l-filter-dimension-set key="1" text="Dim 1">
|
|
256
|
+
<d2l-filter-dimension-set-value selected text="Option 1 - 1" key="1" ></d2l-filter-dimension-set-value>
|
|
257
|
+
<d2l-filter-dimension-set-value text="Option 1 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
258
|
+
<d2l-filter-dimension-set-value text="Option 1 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
259
|
+
<d2l-filter-dimension-set-value text="Option 1 - 4" key="4"></d2l-filter-dimension-set-value>
|
|
260
|
+
</d2l-filter-dimension-set>
|
|
261
|
+
<d2l-filter-dimension-set key="2" text="Dim 2">
|
|
262
|
+
<d2l-filter-dimension-set-value selected text="Option 2 - 1" key="1"></d2l-filter-dimension-set-value>
|
|
263
|
+
<d2l-filter-dimension-set-value text="Option 2 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
264
|
+
<d2l-filter-dimension-set-value text="Option 2 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
265
|
+
</d2l-filter-dimension-set>
|
|
266
|
+
</d2l-filter>
|
|
267
|
+
|
|
268
|
+
<d2l-filter id="core-filter-2">
|
|
269
|
+
<d2l-filter-dimension-set key="1" text="Dim 1" value-only-active-filter-text>
|
|
270
|
+
<d2l-filter-dimension-set-value selected text="Option 1 - 1" key="1" ></d2l-filter-dimension-set-value>
|
|
271
|
+
<d2l-filter-dimension-set-value text="Option 1 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
272
|
+
<d2l-filter-dimension-set-value text="Option 1 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
273
|
+
<d2l-filter-dimension-set-value text="Option 1 - 4" key="4"></d2l-filter-dimension-set-value>
|
|
274
|
+
</d2l-filter-dimension-set>
|
|
275
|
+
<d2l-filter-dimension-set key="2" text="Dim 2" value-only-active-filter-text>
|
|
276
|
+
<d2l-filter-dimension-set-value selected text="Option 2 - 1" key="1"></d2l-filter-dimension-set-value>
|
|
277
|
+
<d2l-filter-dimension-set-value text="Option 2 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
278
|
+
<d2l-filter-dimension-set-value text="Option 2 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
279
|
+
</d2l-filter-dimension-set>
|
|
280
|
+
</d2l-filter>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
<!-- docs: start hidden content -->
|
|
284
|
+
### Properties
|
|
285
|
+
|
|
286
|
+
| Property | Type | Description |
|
|
287
|
+
|---|---|---|
|
|
288
|
+
| `filter-ids` | String, required | Id(s) (space-delimited) of the filter component(s) to subscribe to |
|
|
289
|
+
| `label-text` | String | The text displayed in this component's label |
|
|
290
|
+
<!-- docs: end hidden content -->
|
|
291
|
+
|
|
292
|
+
## Filter Dimension: Date [d2l-filter-dimension-date]
|
|
233
293
|
|
|
234
|
-
**
|
|
294
|
+
**Coming Soon!**
|
|
235
295
|
|
|
236
296
|
<!-- docs: start hidden content -->
|
|
237
297
|
## Future Improvements
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes">
|
|
6
|
+
<link rel="stylesheet" href="../../demo/styles.css" type="text/css">
|
|
7
|
+
<script type="module">
|
|
8
|
+
import '../../demo/demo-page.js';
|
|
9
|
+
import '../filter.js';
|
|
10
|
+
import '../filter-dimension-set.js';
|
|
11
|
+
import '../filter-dimension-set-value.js';
|
|
12
|
+
import '../filter-tags.js';
|
|
13
|
+
</script>
|
|
14
|
+
</head>
|
|
15
|
+
<body unresolved class="d2l-typography">
|
|
16
|
+
|
|
17
|
+
<d2l-demo-page page-title="d2l-filter-tags">
|
|
18
|
+
|
|
19
|
+
<div class="d2l-body-compact">
|
|
20
|
+
Use these d2l-filters to control the applied filters in the demos below. The first filter is set up to send the dimension and value to the subscribers. The second filter only sends the value.
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<d2l-filter id="core-filter">
|
|
24
|
+
<d2l-filter-dimension-set key="1" text="Dim 1">
|
|
25
|
+
<d2l-filter-dimension-set-value selected text="Option 1 - 1" key="1" ></d2l-filter-dimension-set-value>
|
|
26
|
+
<d2l-filter-dimension-set-value text="Option 1 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
27
|
+
<d2l-filter-dimension-set-value text="Option 1 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
28
|
+
<d2l-filter-dimension-set-value text="Option 1 - 4" key="4"></d2l-filter-dimension-set-value>
|
|
29
|
+
</d2l-filter-dimension-set>
|
|
30
|
+
<d2l-filter-dimension-set key="2" text="Dim 2">
|
|
31
|
+
<d2l-filter-dimension-set-value selected text="Option 2 - 1" key="1"></d2l-filter-dimension-set-value>
|
|
32
|
+
<d2l-filter-dimension-set-value text="Option 2 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
33
|
+
<d2l-filter-dimension-set-value text="Option 2 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
34
|
+
</d2l-filter-dimension-set>
|
|
35
|
+
</d2l-filter>
|
|
36
|
+
|
|
37
|
+
<d2l-filter id="core-filter-2">
|
|
38
|
+
<d2l-filter-dimension-set key="1" text="Dim 1" value-only-active-filter-text>
|
|
39
|
+
<d2l-filter-dimension-set-value selected text="Option 1 - 1" key="1" ></d2l-filter-dimension-set-value>
|
|
40
|
+
<d2l-filter-dimension-set-value text="Option 1 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
41
|
+
<d2l-filter-dimension-set-value text="Option 1 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
42
|
+
<d2l-filter-dimension-set-value text="Option 1 - 4" key="4"></d2l-filter-dimension-set-value>
|
|
43
|
+
</d2l-filter-dimension-set>
|
|
44
|
+
<d2l-filter-dimension-set key="2" text="Dim 2" value-only-active-filter-text>
|
|
45
|
+
<d2l-filter-dimension-set-value selected text="Option 2 - 1" key="1"></d2l-filter-dimension-set-value>
|
|
46
|
+
<d2l-filter-dimension-set-value text="Option 2 - 2" key="2"></d2l-filter-dimension-set-value>
|
|
47
|
+
<d2l-filter-dimension-set-value text="Option 2 - 3" key="3"></d2l-filter-dimension-set-value>
|
|
48
|
+
</d2l-filter-dimension-set>
|
|
49
|
+
</d2l-filter>
|
|
50
|
+
<script>
|
|
51
|
+
const coreFilter = document.querySelector('#core-filter');
|
|
52
|
+
coreFilter.addEventListener('d2l-filter-dimension-first-open', (e) => {
|
|
53
|
+
logEvent(e, 'Filter dimension opened!');
|
|
54
|
+
});
|
|
55
|
+
coreFilter.addEventListener('d2l-filter-dimension-search', (e) => {
|
|
56
|
+
logEvent(e, 'Filter dimension searched!');
|
|
57
|
+
});
|
|
58
|
+
coreFilter.addEventListener('d2l-filter-change', (e) => {
|
|
59
|
+
logEvent(e, 'Filter value(s) changed!');
|
|
60
|
+
});
|
|
61
|
+
/* eslint-disable no-console */
|
|
62
|
+
function logEvent(e, text) {
|
|
63
|
+
console.group(text);
|
|
64
|
+
console.log('event', e);
|
|
65
|
+
if (e.detail) console.log('detail', e.detail);
|
|
66
|
+
console.groupEnd();
|
|
67
|
+
}
|
|
68
|
+
/* eslint-enable no-console */
|
|
69
|
+
</script>
|
|
70
|
+
|
|
71
|
+
<h2>Default label and registered to both filters</h2>
|
|
72
|
+
|
|
73
|
+
<d2l-demo-snippet>
|
|
74
|
+
<d2l-filter-tags filter-ids="core-filter core-filter-2"></d2l-filter-tags>
|
|
75
|
+
</d2l-demo-snippet>
|
|
76
|
+
|
|
77
|
+
<h2>Custom label and registered to only the first filter</h2>
|
|
78
|
+
|
|
79
|
+
<d2l-demo-snippet>
|
|
80
|
+
<d2l-filter-tags filter-ids="core-filter" label-text="Filters selected:"></d2l-filter-tags>
|
|
81
|
+
</d2l-demo-snippet>
|
|
82
|
+
|
|
83
|
+
</d2l-demo-page>
|
|
84
|
+
|
|
85
|
+
</body>
|
|
86
|
+
</html>
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import '../colors/colors.js';
|
|
2
|
+
import '../tag-list/tag-list.js';
|
|
3
|
+
import '../tag-list/tag-list-item.js';
|
|
4
|
+
import { css, html, LitElement } from 'lit';
|
|
5
|
+
import { bodyCompactStyles } from '../typography/styles.js';
|
|
6
|
+
import { IdSubscriberController } from '../../controllers/subscriber/subscriberControllers.js';
|
|
7
|
+
import { LocalizeCoreElement } from '../../helpers/localize-core-element.js';
|
|
8
|
+
import { RtlMixin } from '../../mixins/rtl-mixin.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A tag-list allowing the user to see (and remove) the currently applied filters.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const CLEAR_TIMEOUT = 210; /** Corresponds to timeout in _dispatchChangeEvent in filter + 10 ms */
|
|
15
|
+
|
|
16
|
+
class FilterTags extends RtlMixin(LocalizeCoreElement(LitElement)) {
|
|
17
|
+
static get properties() {
|
|
18
|
+
return {
|
|
19
|
+
/**
|
|
20
|
+
* REQUIRED: Id(s) (space-delimited) of the filter component(s) to subscribe to
|
|
21
|
+
* @type {string}
|
|
22
|
+
*/
|
|
23
|
+
filterIds: { type: String, attribute: 'filter-ids' },
|
|
24
|
+
/**
|
|
25
|
+
* The text displayed in this component's label
|
|
26
|
+
* @default "Applied Filters:"
|
|
27
|
+
* @type {string}
|
|
28
|
+
*/
|
|
29
|
+
label: { type: String }
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static get styles() {
|
|
34
|
+
return [bodyCompactStyles, css`
|
|
35
|
+
:host {
|
|
36
|
+
display: inline-block;
|
|
37
|
+
width: 100%;
|
|
38
|
+
}
|
|
39
|
+
:host([hidden]) {
|
|
40
|
+
display: none;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.d2l-filter-tags-wrapper {
|
|
44
|
+
display: flex;
|
|
45
|
+
}
|
|
46
|
+
d2l-tag-list {
|
|
47
|
+
flex: 1;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.d2l-filter-tags-label {
|
|
51
|
+
display: inline-block;
|
|
52
|
+
font-weight: bold;
|
|
53
|
+
margin-right: 0.25rem;
|
|
54
|
+
padding-top: 0.15rem;
|
|
55
|
+
}
|
|
56
|
+
:host([dir="rtl"]) .d2l-filter-tags-label {
|
|
57
|
+
margin-left: 0.25rem;
|
|
58
|
+
margin-right: 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.d2l-filter-tags-none-label {
|
|
62
|
+
color: var(--d2l-color-corundum);
|
|
63
|
+
display: inline-block;
|
|
64
|
+
font-style: italic;
|
|
65
|
+
padding-top: 0.15rem;
|
|
66
|
+
}
|
|
67
|
+
`];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
constructor() {
|
|
71
|
+
super();
|
|
72
|
+
this.label = '';
|
|
73
|
+
|
|
74
|
+
this._allActiveFilters = new Map();
|
|
75
|
+
this._filters = new IdSubscriberController(this,
|
|
76
|
+
{ onUnsubscribe: this._removeLostFilter.bind(this) },
|
|
77
|
+
{ idPropertyName: 'filterIds' }
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
render() {
|
|
82
|
+
let numActiveFilters = 0;
|
|
83
|
+
const allActiveFilters = Array.from(this._allActiveFilters);
|
|
84
|
+
const tagListItems = allActiveFilters.map(filter => filter[1].map((value, index) => {
|
|
85
|
+
numActiveFilters++;
|
|
86
|
+
return html`
|
|
87
|
+
<d2l-tag-list-item
|
|
88
|
+
@d2l-tag-list-item-clear="${this._tagListItemDeleted}"
|
|
89
|
+
data-filter-id="${filter[0]}"
|
|
90
|
+
data-index="${index}"
|
|
91
|
+
text="${value.text}">
|
|
92
|
+
</d2l-tag-list-item>
|
|
93
|
+
`;
|
|
94
|
+
}));
|
|
95
|
+
let filters = html``;
|
|
96
|
+
if (numActiveFilters === 0) filters = html`<span class="d2l-filter-tags-none-label d2l-body-compact">${this.localize('components.filter.noActiveFilters')}</span>`;
|
|
97
|
+
else {
|
|
98
|
+
filters = html`
|
|
99
|
+
<d2l-tag-list
|
|
100
|
+
clearable
|
|
101
|
+
clear-focus-timeout="${CLEAR_TIMEOUT}"
|
|
102
|
+
@d2l-tag-list-clear="${this._clearFiltersClicked}"
|
|
103
|
+
description="${this.label || this.localize('components.filter.activeFilters')}">
|
|
104
|
+
${tagListItems}
|
|
105
|
+
</d2l-tag-list>
|
|
106
|
+
`;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return html`
|
|
110
|
+
<div class="d2l-filter-tags-wrapper">
|
|
111
|
+
${this.label ? html`<span class="d2l-filter-tags-label d2l-body-compact">${this.label}</span>` : null}
|
|
112
|
+
${filters}
|
|
113
|
+
</div>
|
|
114
|
+
`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
updateActiveFilters(filterId, activeFilters) {
|
|
118
|
+
this._allActiveFilters.set(filterId, activeFilters);
|
|
119
|
+
this.requestUpdate();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
_clearFiltersClicked() {
|
|
123
|
+
this._filters.registries.forEach((filter, index) => {
|
|
124
|
+
if (index === 0) filter.focus();
|
|
125
|
+
filter.requestFilterClearAll();
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
_removeLostFilter(filterId) {
|
|
130
|
+
this._allActiveFilters.delete(filterId);
|
|
131
|
+
this.requestUpdate();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
_tagListItemDeleted(e) {
|
|
135
|
+
const filterId = e.target.getAttribute('data-filter-id');
|
|
136
|
+
const filterValueIndex = e.target.getAttribute('data-index');
|
|
137
|
+
const filterValue = this._allActiveFilters.get(filterId)[filterValueIndex];
|
|
138
|
+
const filter = this._filters.registries.find(filter => filter.id === filterId);
|
|
139
|
+
filter.requestFilterValueClear(filterValue.keyObject);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
customElements.define('d2l-filter-tags', FilterTags);
|
|
@@ -428,6 +428,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
|
428
428
|
this._setDimensionChangeEvent(dimension, change, false);
|
|
429
429
|
|
|
430
430
|
if (!this._changeEventTimeout) {
|
|
431
|
+
/** 200 ms timeout used in filter-tags CLEAR_TIMEOUT. If the timeout here changes, update that as well */
|
|
431
432
|
this._changeEventTimeout = setTimeout(() => {
|
|
432
433
|
this._dispatchChangeEventNow(false);
|
|
433
434
|
}, 200);
|
|
@@ -16,7 +16,8 @@ class FocusTrap extends FocusMixin(LitElement) {
|
|
|
16
16
|
* Whether the component should trap user focus.
|
|
17
17
|
* @type {boolean}
|
|
18
18
|
*/
|
|
19
|
-
trap: { type: Boolean }
|
|
19
|
+
trap: { type: Boolean },
|
|
20
|
+
_legacyPromptIds: { state: true }
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
23
|
|
|
@@ -35,6 +36,9 @@ class FocusTrap extends FocusMixin(LitElement) {
|
|
|
35
36
|
super();
|
|
36
37
|
this.trap = false;
|
|
37
38
|
this._handleBodyFocus = this._handleBodyFocus.bind(this);
|
|
39
|
+
this._handleLegacyPromptOpen = this._handleLegacyPromptOpen.bind(this);
|
|
40
|
+
this._handleLegacyPromptClose = this._handleLegacyPromptClose.bind(this);
|
|
41
|
+
this._legacyPromptIds = new Set();
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
static get focusElementSelector() {
|
|
@@ -44,15 +48,19 @@ class FocusTrap extends FocusMixin(LitElement) {
|
|
|
44
48
|
connectedCallback() {
|
|
45
49
|
super.connectedCallback();
|
|
46
50
|
document.body.addEventListener('focus', this._handleBodyFocus, true);
|
|
51
|
+
document.body.addEventListener('d2l-legacy-prompt-open', this._handleLegacyPromptOpen);
|
|
52
|
+
document.body.addEventListener('d2l-legacy-prompt-close', this._handleLegacyPromptClose);
|
|
47
53
|
}
|
|
48
54
|
|
|
49
55
|
disconnectedCallback() {
|
|
50
56
|
super.disconnectedCallback();
|
|
51
57
|
document.body.removeEventListener('focus', this._handleBodyFocus, true);
|
|
58
|
+
document.body.removeEventListener('d2l-legacy-prompt-open', this._handleLegacyPromptOpen);
|
|
59
|
+
document.body.removeEventListener('d2l-legacy-prompt-close', this._handleLegacyPromptClose);
|
|
52
60
|
}
|
|
53
61
|
|
|
54
62
|
render() {
|
|
55
|
-
const tabindex = this.trap ? '0' : undefined;
|
|
63
|
+
const tabindex = (this.trap && this._legacyPromptIds.size === 0) ? '0' : undefined;
|
|
56
64
|
return html`
|
|
57
65
|
<span class="d2l-focus-trap-start" @focusin="${this._handleStartFocusIn}" tabindex="${ifDefined(tabindex)}"></span>
|
|
58
66
|
<slot></slot>
|
|
@@ -72,7 +80,7 @@ class FocusTrap extends FocusMixin(LitElement) {
|
|
|
72
80
|
}
|
|
73
81
|
|
|
74
82
|
_handleBodyFocus(e) {
|
|
75
|
-
if (!this.trap) return;
|
|
83
|
+
if (!this.trap || this._legacyPromptIds.size > 0) return;
|
|
76
84
|
const container = this._getContainer();
|
|
77
85
|
const target = e.composedPath()[0];
|
|
78
86
|
if (isComposedAncestor(container, target)) return;
|
|
@@ -95,6 +103,16 @@ class FocusTrap extends FocusMixin(LitElement) {
|
|
|
95
103
|
this._focusFirst();
|
|
96
104
|
}
|
|
97
105
|
|
|
106
|
+
_handleLegacyPromptClose(e) {
|
|
107
|
+
this._legacyPromptIds.delete(e.detail.id);
|
|
108
|
+
this.requestUpdate();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
_handleLegacyPromptOpen(e) {
|
|
112
|
+
this._legacyPromptIds.add(e.detail.id);
|
|
113
|
+
this.requestUpdate();
|
|
114
|
+
}
|
|
115
|
+
|
|
98
116
|
_handleStartFocusIn(e) {
|
|
99
117
|
const container = this._getContainer();
|
|
100
118
|
if (this.shadowRoot && isComposedAncestor(container, e.relatedTarget)) {
|
|
@@ -26,6 +26,10 @@ Tag lists are used to present a list of compact, discrete pieces of information.
|
|
|
26
26
|
|
|
27
27
|
The `d2l-tag-list` element can take a combination of any type of `d2l-tag-list-item` and adds the appropriate keyboard navigation, list semantics, clearing behaviour and responsive behaviour.
|
|
28
28
|
|
|
29
|
+
### Clearable
|
|
30
|
+
|
|
31
|
+
The corresponding `*-clear` event must be listened to for whatever component (`d2l-tag-list` or `d2l-tag-list-item`) has `clearable` on it and that listener must handle individual `d2l-tag-list-item` deletion as well as potentially focus behavior (see individual event descriptions).
|
|
32
|
+
|
|
29
33
|
<!-- docs: demo live name:d2l-tag-list autoSize:false display:block size:small -->
|
|
30
34
|
```html
|
|
31
35
|
<script type="module">
|
|
@@ -36,6 +40,14 @@ The `d2l-tag-list` element can take a combination of any type of `d2l-tag-list-i
|
|
|
36
40
|
e.target.parentNode.removeChild(e.target);
|
|
37
41
|
console.log(`d2l-tag-list-item-clear event dispatched. Value: ${e.detail.value}, handleFocus: ${e.detail.handleFocus}`);
|
|
38
42
|
});
|
|
43
|
+
|
|
44
|
+
document.addEventListener('d2l-tag-list-clear', (e) => {
|
|
45
|
+
const items = e.target.querySelectorAll('[role="listitem"]');
|
|
46
|
+
items.forEach((item) => {
|
|
47
|
+
item.parentNode.removeChild(item);
|
|
48
|
+
});
|
|
49
|
+
console.log('d2l-tag-list-clear event dispatched');
|
|
50
|
+
});
|
|
39
51
|
</script>
|
|
40
52
|
<d2l-tag-list description="Example Tags">
|
|
41
53
|
<d2l-tag-list-item text="Lorem ipsum dolor"></d2l-tag-list-item>
|
|
@@ -166,9 +166,11 @@ export const TagListItemMixin = superclass => class extends LocalizeCoreElement(
|
|
|
166
166
|
handleFocus = listItemParent ? true : false;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
if (
|
|
169
|
+
if (clearAll) return;
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
announce(this.localize('components.tag-list.cleared-item', { value: this.text }));
|
|
172
|
+
|
|
173
|
+
/** Dispatched when a user selects to delete an individual tag list item. The consumer must handle the actual element deletion and focus behaviour if there are no remaining list items. */
|
|
172
174
|
this.dispatchEvent(new CustomEvent(
|
|
173
175
|
'd2l-tag-list-item-clear',
|
|
174
176
|
{ bubbles: true, composed: true, detail: { value: this.text, handleFocus } }
|
|
@@ -34,8 +34,14 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
|
34
34
|
return {
|
|
35
35
|
/**
|
|
36
36
|
* Enables the option to clear all inner tag list items. The `d2l-tag-list-item-clear` event will be dispatched for each list item when the user selects to Clear All. The consumer must handle the actual item deletion.
|
|
37
|
+
* @type {boolean}
|
|
37
38
|
*/
|
|
38
39
|
clearable: { type: Boolean },
|
|
40
|
+
/**
|
|
41
|
+
* ADVANCED: When an item is `clearable`, optionally add a timeout before the focus happens on clear. This is useful if the consumer has some operations that will reload the list items prior to wanting focus to occur.
|
|
42
|
+
* @type {number}
|
|
43
|
+
*/
|
|
44
|
+
clearFocusTimeout: { type: Number, attribute: 'clear-focus-timeout' },
|
|
39
45
|
/**
|
|
40
46
|
* REQUIRED: A description of the tag list for additional accessibility context
|
|
41
47
|
* @type {string}
|
|
@@ -88,6 +94,8 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
|
88
94
|
/** @ignore */
|
|
89
95
|
this.arrowKeysDirection = 'leftrightupdown';
|
|
90
96
|
this.clearable = false;
|
|
97
|
+
this.clearFocusTimeout = 0;
|
|
98
|
+
|
|
91
99
|
this._chompIndex = 10000;
|
|
92
100
|
this._clearButtonHeight = 0;
|
|
93
101
|
this._clearButtonWidth = 0;
|
|
@@ -326,6 +334,12 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
|
326
334
|
_handleClearAll(e) {
|
|
327
335
|
if (!this._items) return;
|
|
328
336
|
|
|
337
|
+
/** Dispatched when a user selects to delete all tag list items. The consumer must handle the actual element deletion and focus behaviour. */
|
|
338
|
+
this.dispatchEvent(new CustomEvent(
|
|
339
|
+
'd2l-tag-list-clear',
|
|
340
|
+
{ bubbles: true, composed: true }
|
|
341
|
+
));
|
|
342
|
+
|
|
329
343
|
announce(this.localize('components.tag-list.cleared-all'));
|
|
330
344
|
|
|
331
345
|
this._items.forEach((item) => {
|
|
@@ -340,10 +354,11 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
|
340
354
|
const rootTarget = e.composedPath()[0];
|
|
341
355
|
const children = this._getVisibleEffectiveChildren();
|
|
342
356
|
const itemIndex = children.indexOf(rootTarget);
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
357
|
+
|
|
358
|
+
if (children.length <= 1) return;
|
|
359
|
+
const focusableElem = children[itemIndex - 1] || children[itemIndex + 1];
|
|
360
|
+
|
|
361
|
+
setTimeout(() => focusableElem.focus(), this.clearFocusTimeout);
|
|
347
362
|
}
|
|
348
363
|
|
|
349
364
|
_handleKeyboardTooltipShown() {
|
package/custom-elements.json
CHANGED
|
@@ -3154,6 +3154,38 @@
|
|
|
3154
3154
|
}
|
|
3155
3155
|
]
|
|
3156
3156
|
},
|
|
3157
|
+
{
|
|
3158
|
+
"name": "d2l-filter-tags",
|
|
3159
|
+
"path": "./components/filter/filter-tags.js",
|
|
3160
|
+
"attributes": [
|
|
3161
|
+
{
|
|
3162
|
+
"name": "filter-ids",
|
|
3163
|
+
"description": "REQUIRED: Id(s) (space-delimited) of the filter component(s) to subscribe to",
|
|
3164
|
+
"type": "string"
|
|
3165
|
+
},
|
|
3166
|
+
{
|
|
3167
|
+
"name": "label",
|
|
3168
|
+
"description": "The text displayed in this component's label",
|
|
3169
|
+
"type": "string",
|
|
3170
|
+
"default": "\"\\\"Applied Filters:\\\"\""
|
|
3171
|
+
}
|
|
3172
|
+
],
|
|
3173
|
+
"properties": [
|
|
3174
|
+
{
|
|
3175
|
+
"name": "filterIds",
|
|
3176
|
+
"attribute": "filter-ids",
|
|
3177
|
+
"description": "REQUIRED: Id(s) (space-delimited) of the filter component(s) to subscribe to",
|
|
3178
|
+
"type": "string"
|
|
3179
|
+
},
|
|
3180
|
+
{
|
|
3181
|
+
"name": "label",
|
|
3182
|
+
"attribute": "label",
|
|
3183
|
+
"description": "The text displayed in this component's label",
|
|
3184
|
+
"type": "string",
|
|
3185
|
+
"default": "\"\\\"Applied Filters:\\\"\""
|
|
3186
|
+
}
|
|
3187
|
+
]
|
|
3188
|
+
},
|
|
3157
3189
|
{
|
|
3158
3190
|
"name": "d2l-filter",
|
|
3159
3191
|
"path": "./components/filter/filter.js",
|
|
@@ -9875,7 +9907,7 @@
|
|
|
9875
9907
|
"events": [
|
|
9876
9908
|
{
|
|
9877
9909
|
"name": "d2l-tag-list-item-clear",
|
|
9878
|
-
"description": "Dispatched when a user selects to delete
|
|
9910
|
+
"description": "Dispatched when a user selects to delete an individual tag list item. The consumer must handle the actual element deletion and focus behaviour if there are no remaining list items."
|
|
9879
9911
|
}
|
|
9880
9912
|
]
|
|
9881
9913
|
},
|
|
@@ -9893,6 +9925,12 @@
|
|
|
9893
9925
|
"description": "Enables the option to clear all inner tag list items. The `d2l-tag-list-item-clear` event will be dispatched for each list item when the user selects to Clear All. The consumer must handle the actual item deletion.",
|
|
9894
9926
|
"type": "boolean",
|
|
9895
9927
|
"default": "false"
|
|
9928
|
+
},
|
|
9929
|
+
{
|
|
9930
|
+
"name": "clear-focus-timeout",
|
|
9931
|
+
"description": "ADVANCED: When an item is `clearable`, optionally add a timeout before the focus happens on clear. This is useful if the consumer has some operations that will reload the list items prior to wanting focus to occur.",
|
|
9932
|
+
"type": "number",
|
|
9933
|
+
"default": "0"
|
|
9896
9934
|
}
|
|
9897
9935
|
],
|
|
9898
9936
|
"properties": [
|
|
@@ -9909,6 +9947,13 @@
|
|
|
9909
9947
|
"type": "boolean",
|
|
9910
9948
|
"default": "false"
|
|
9911
9949
|
},
|
|
9950
|
+
{
|
|
9951
|
+
"name": "clearFocusTimeout",
|
|
9952
|
+
"attribute": "clear-focus-timeout",
|
|
9953
|
+
"description": "ADVANCED: When an item is `clearable`, optionally add a timeout before the focus happens on clear. This is useful if the consumer has some operations that will reload the list items prior to wanting focus to occur.",
|
|
9954
|
+
"type": "number",
|
|
9955
|
+
"default": "0"
|
|
9956
|
+
},
|
|
9912
9957
|
{
|
|
9913
9958
|
"name": "arrowKeysDirection",
|
|
9914
9959
|
"type": "string",
|
|
@@ -9919,6 +9964,12 @@
|
|
|
9919
9964
|
"type": "boolean",
|
|
9920
9965
|
"default": "false"
|
|
9921
9966
|
}
|
|
9967
|
+
],
|
|
9968
|
+
"events": [
|
|
9969
|
+
{
|
|
9970
|
+
"name": "d2l-tag-list-clear",
|
|
9971
|
+
"description": "Dispatched when a user selects to delete all tag list items. The consumer must handle the actual element deletion and focus behaviour."
|
|
9972
|
+
}
|
|
9922
9973
|
]
|
|
9923
9974
|
},
|
|
9924
9975
|
{
|
|
@@ -9953,7 +10004,7 @@
|
|
|
9953
10004
|
"events": [
|
|
9954
10005
|
{
|
|
9955
10006
|
"name": "d2l-tag-list-item-clear",
|
|
9956
|
-
"description": "Dispatched when a user selects to delete
|
|
10007
|
+
"description": "Dispatched when a user selects to delete an individual tag list item. The consumer must handle the actual element deletion and focus behaviour if there are no remaining list items."
|
|
9957
10008
|
}
|
|
9958
10009
|
]
|
|
9959
10010
|
},
|
package/lang/ar.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "إغلاق مربع الحوار هذا",
|
|
11
11
|
"components.dropdown.close": "إغلاق",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "مسح",
|
|
13
14
|
"components.filter.clearAll": "مسح الكل",
|
|
14
15
|
"components.filter.clearAllAnnounce": "جارٍ مسح كل عوامل التصفية",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "يتم تحميل عوامل التصفية",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, zero {لم يتم تطبيق عوامل تصفية.} one {تم تطبيق عامل تصفية واحد.} other {{number} من عوامل التصفية التي تم تطبيقها.}}",
|
|
22
23
|
"components.filter.filters": "عوامل التصفية",
|
|
24
|
+
"components.filter.noActiveFilters": "لا توجد عوامل تصفية نشطة",
|
|
23
25
|
"components.filter.noFilters": "ما من عوامل تصفية متوفرة",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, zero {ما من نتائج بحث} one {نتيجة بحث واحدة} other {{number} من نتائج البحث}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "التصفية حسب: {filterName}",
|
package/lang/cy.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Cau'r dialog hwn",
|
|
11
11
|
"components.dropdown.close": "Cau",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Clirio",
|
|
13
14
|
"components.filter.clearAll": "Clirio’r Cyfan",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Wrthi’n clirio’r holl hidlwyr",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Wrthi’n llwytho hidlyddion",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, zero {Dim hildwyr wedi'u gweithredu.} one {1 hidlydd wedi'i weithredu.} other {{number} hidlydd wedi'u gweithredu.}}",
|
|
22
23
|
"components.filter.filters": "Hidlyddion",
|
|
24
|
+
"components.filter.noActiveFilters": "Dim hidlwyr gweithredol",
|
|
23
25
|
"components.filter.noFilters": "Dim hidlyddion ar gael",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, zero {Dim canlyniadau chwilio} one {1 canlyniad chwilio} other {{number} canlyniad chwilio}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Hidlo yn ôl: {filterName}",
|
package/lang/da.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Luk denne dialogboks",
|
|
11
11
|
"components.dropdown.close": "Luk",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Ryd",
|
|
13
14
|
"components.filter.clearAll": "Ryd alle",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Rydder alle filtre",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Indlæser filtre",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Ingen filtre anvendt.} one {1 filter anvendt.} other {{number} filtre anvendt.}}",
|
|
22
23
|
"components.filter.filters": "Filtre",
|
|
24
|
+
"components.filter.noActiveFilters": "Ingen aktive filtre",
|
|
23
25
|
"components.filter.noFilters": "Ingen tilgængelige filtre",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Ingen søgeresultater} one {1 søgeresultat} other {{number} søgeresultater}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtrer efter: {filterName}",
|
package/lang/de.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Dieses Dialogfeld schließen",
|
|
11
11
|
"components.dropdown.close": "Schließen",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Löschen",
|
|
13
14
|
"components.filter.clearAll": "Alle löschen",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Alle Filter werden gelöscht",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Filter werden geladen",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Keine Filter angewendet.} one {1 Filter angewendet.} other {{number} Filter angewendet.}}",
|
|
22
23
|
"components.filter.filters": "Filter",
|
|
24
|
+
"components.filter.noActiveFilters": "Keine Filter aktiv",
|
|
23
25
|
"components.filter.noFilters": "Keine verfügbaren Filter",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Keine Suchergebnisse} one {1 Suchergebnis} other {{number} Suchergebnisse}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtern nach: {filterName}",
|
package/lang/en.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Close this dialog",
|
|
11
11
|
"components.dropdown.close": "Close",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Clear",
|
|
13
14
|
"components.filter.clearAll": "Clear All",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Clearing all filters",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Loading filters",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {No filters applied.} one {{number} filter applied.} other {{number} filters applied.}}",
|
|
22
23
|
"components.filter.filters": "Filters",
|
|
24
|
+
"components.filter.noActiveFilters": "No active filters",
|
|
23
25
|
"components.filter.noFilters": "No available filters",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {No search results} one {{number} search result} other {{number} search results}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filter by: {filterName}",
|
package/lang/es-es.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Cerrar este cuadro de diálogo",
|
|
11
11
|
"components.dropdown.close": "Cerrar",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Borrar",
|
|
13
14
|
"components.filter.clearAll": "Borrar todo",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Borrando todos los filtros",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Cargando filtros",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Sin filtros aplicados.} one {1 filtro aplicado.} other {{number} filtros aplicados.}}",
|
|
22
23
|
"components.filter.filters": "Filtros",
|
|
24
|
+
"components.filter.noActiveFilters": "No hay filtros activos",
|
|
23
25
|
"components.filter.noFilters": "No hay filtros disponibles",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {No hay resultados de búsqueda} one {1 resultado de búsqueda} other {{number} resultados de búsqueda}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtrar por: {filterName}",
|
package/lang/es.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Cerrar este cuadro de diálogo",
|
|
11
11
|
"components.dropdown.close": "Cerrar",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Borrar",
|
|
13
14
|
"components.filter.clearAll": "Borrar todo",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Borrando todos los filtros",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Cargando filtros",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Sin filtros aplicados.} one {1 filtro aplicado.} other {{number} filtros aplicados.}}",
|
|
22
23
|
"components.filter.filters": "Filtros",
|
|
24
|
+
"components.filter.noActiveFilters": "No hay filtros activos",
|
|
23
25
|
"components.filter.noFilters": "No hay filtros disponibles",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {No se encontraron resultados de búsqueda} one {1 resultado de búsqueda} other {{number} resultados de búsqueda}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtrar por: {filterName}",
|
package/lang/fr-fr.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Fermer cette boîte de dialogue",
|
|
11
11
|
"components.dropdown.close": "Fermer",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Effacer",
|
|
13
14
|
"components.filter.clearAll": "Tout effacer",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Suppression de tous les filtres",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Chargement des filtres",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Aucun filtre appliqué.} one {1 filtre appliqué.} other {{number} filtres appliqués.}}",
|
|
22
23
|
"components.filter.filters": "Filtres",
|
|
24
|
+
"components.filter.noActiveFilters": "Aucun filtre actif",
|
|
23
25
|
"components.filter.noFilters": "Aucun filtre disponible",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Aucun résultat de recherche} one {1 résultat de recherche} other {{number} résultats de recherche}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtrer par : {filterName}",
|
package/lang/fr.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Fermer cette boîte de dialogue",
|
|
11
11
|
"components.dropdown.close": "Fermer",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Effacer",
|
|
13
14
|
"components.filter.clearAll": "Effacer tout",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Effacement de tous les filtres en cours",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Chargement des filtres",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Aucun filtre appliqué.} one {1 filtre appliqué.} other {{number} filtres appliqués.}}",
|
|
22
23
|
"components.filter.filters": "Filtres",
|
|
24
|
+
"components.filter.noActiveFilters": "Aucun filtre actif",
|
|
23
25
|
"components.filter.noFilters": "Aucun filtre disponible",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Aucun résultat de recherche} one {1 résultat de recherche} other {{number} résultats de recherche}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtrer par : {filterName}",
|
package/lang/hi.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "यह संवाद बंद करें",
|
|
11
11
|
"components.dropdown.close": "बंद करें",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "साफ़ करें",
|
|
13
14
|
"components.filter.clearAll": "सभी साफ़ करें",
|
|
14
15
|
"components.filter.clearAllAnnounce": "सभी फिल्टर साफ़ किए जा रहे हैं",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "फिल्टर्स लोड किए जा रहे हैं",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {कोई फ़िल्टर लागू नहीं किए गए} one {1 फ़िल्टर लागू किया गया।} other {{number} फ़िल्टर्स लागू किए गए।}}",
|
|
22
23
|
"components.filter.filters": "फ़िल्टर्स",
|
|
24
|
+
"components.filter.noActiveFilters": "कोई सक्रिय फ़िल्टर नहीं हैं",
|
|
23
25
|
"components.filter.noFilters": "कोई उपलब्ध फ़िल्टर्स नहीं",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {कोई खोज परिणाम नहीं} one {1 खोज परिणाम} other {{number} खोज परिणाम}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "इसके अनुसार फ़िल्टर करें: {filterName}",
|
package/lang/ja.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "このダイアログを閉じる",
|
|
11
11
|
"components.dropdown.close": "閉じる",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "クリア",
|
|
13
14
|
"components.filter.clearAll": "すべてをクリア",
|
|
14
15
|
"components.filter.clearAllAnnounce": "すべてのフィルタのクリア",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "フィルタのロード中",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {フィルタは適用されていません。} other {{number} 個のフィルタが適用されています。}}",
|
|
22
23
|
"components.filter.filters": "フィルタ",
|
|
24
|
+
"components.filter.noActiveFilters": "アクティブフィルタなし",
|
|
23
25
|
"components.filter.noFilters": "使用可能なフィルタはありません",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {検索結果なし} other {{number} 件の検索結果}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "フィルタ条件: {filterName}",
|
package/lang/ko.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "이 대화 상자 닫기",
|
|
11
11
|
"components.dropdown.close": "닫기",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "지우기",
|
|
13
14
|
"components.filter.clearAll": "모두 지우기",
|
|
14
15
|
"components.filter.clearAllAnnounce": "모든 필터 지우기",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "필터 로드 중",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {적용된 필터 없음.} other {{number}개 필터 적용됨.}}",
|
|
22
23
|
"components.filter.filters": "개 필터",
|
|
24
|
+
"components.filter.noActiveFilters": "활성 필터가 없음",
|
|
23
25
|
"components.filter.noFilters": "사용 가능한 필터가 없습니다",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {검색 결과 없음} other {{number}개 검색 결과}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "필터 기준: {filterName}",
|
package/lang/nl.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Dit dialoogvenster sluiten",
|
|
11
11
|
"components.dropdown.close": "Sluiten",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Wissen",
|
|
13
14
|
"components.filter.clearAll": "Alles wissen",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Alle filters wissen",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Laden van filters",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Geen filters toegepast.} one {1 filter toegepast.} other {{number} filters toegepast.}}",
|
|
22
23
|
"components.filter.filters": "Filters", // mfv-translated
|
|
24
|
+
"components.filter.noActiveFilters": "Geen actieve filters",
|
|
23
25
|
"components.filter.noFilters": "Geen beschikbare filters",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Geen zoekresultaten} one {1 zoekresultaat} other {{number} zoekresultaten}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filter op {filterName}",
|
package/lang/pt.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Fechar esta caixa de diálogo",
|
|
11
11
|
"components.dropdown.close": "Fechar",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Limpar",
|
|
13
14
|
"components.filter.clearAll": "Limpar tudo",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Limpando todos os filtros",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Carregar filtros",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Nenhum filtro aplicado.} one {1 filtro aplicado.} other {{number} filtros aplicados.}}",
|
|
22
23
|
"components.filter.filters": "Filtros",
|
|
24
|
+
"components.filter.noActiveFilters": "Nenhum filtro ativo",
|
|
23
25
|
"components.filter.noFilters": "Não há filtros disponíveis",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Sem resultados para a pesquisa} one {1 resultado para a pesquisa} other {{number} resultados para a pesquisa}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtrar por: {filterName}",
|
package/lang/sv.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Stäng dialogrutan",
|
|
11
11
|
"components.dropdown.close": "Stäng",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Rensa",
|
|
13
14
|
"components.filter.clearAll": "Rensa alla",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Rensar alla filter",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Läser in filter",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Inga filter tillämpade.} one {1 filter tillämpat.} other {{number} filter tillämpade.}}",
|
|
22
23
|
"components.filter.filters": "Filter",
|
|
24
|
+
"components.filter.noActiveFilters": "Inga aktiva filter",
|
|
23
25
|
"components.filter.noFilters": "Inga tillgängliga filter",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Inga sökresultat} one {1 sökresultat} other {{number} sökresultat}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtrera efter: {filterName}",
|
package/lang/tr.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "Bu iletişim kutusunu kapat",
|
|
11
11
|
"components.dropdown.close": "Kapat",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "Temizle",
|
|
13
14
|
"components.filter.clearAll": "Tümünü Temizle",
|
|
14
15
|
"components.filter.clearAllAnnounce": "Tüm filtreler temizleniyor",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "Filtreler yükleniyor",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {Filtre uygulanmadı.} one {1 filtre uygulandı.} other {{number} filtre uygulandı.}}",
|
|
22
23
|
"components.filter.filters": "Filtre",
|
|
24
|
+
"components.filter.noActiveFilters": "Etkin filtre yok",
|
|
23
25
|
"components.filter.noFilters": "Uygun filtre yok",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {Arama sonucu yok} one {1 arama sonucu} other {{number} arama sonucu}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "Filtreleme ölçütü: {filterName}",
|
package/lang/zh-cn.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "关闭此对话框",
|
|
11
11
|
"components.dropdown.close": "关闭",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "清除",
|
|
13
14
|
"components.filter.clearAll": "全部清除",
|
|
14
15
|
"components.filter.clearAllAnnounce": "清除所有筛选器",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "正在加载筛选器",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {未应用筛选器。} other {已应用 {number} 个筛选器。}}",
|
|
22
23
|
"components.filter.filters": "个筛选条件",
|
|
24
|
+
"components.filter.noActiveFilters": "没有活动的筛选器",
|
|
23
25
|
"components.filter.noFilters": "无可用筛选器",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {无搜索结果} other {{number} 个搜索结果}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "筛选依据:{filterName}",
|
package/lang/zh-tw.js
CHANGED
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
"components.count-badge.plus" : "{number}+",
|
|
10
10
|
"components.dialog.close": "關閉此對話方塊",
|
|
11
11
|
"components.dropdown.close": "關閉",
|
|
12
|
+
"components.filter.activeFilters": "Active Filters:",
|
|
12
13
|
"components.filter.clear": "清除",
|
|
13
14
|
"components.filter.clearAll": "全部清除",
|
|
14
15
|
"components.filter.clearAllAnnounce": "正在清除所有篩選器",
|
|
@@ -20,6 +21,7 @@ export default {
|
|
|
20
21
|
"components.filter.loading": "正在載入篩選條件",
|
|
21
22
|
"components.filter.filterCountDescription": "{number, plural, =0 {未套用篩選條件。} other {已套用 {number} 項篩選條件。}}",
|
|
22
23
|
"components.filter.filters": "篩選器",
|
|
24
|
+
"components.filter.noActiveFilters": "沒有啟用中的篩選器",
|
|
23
25
|
"components.filter.noFilters": "沒有可用的篩選條件",
|
|
24
26
|
"components.filter.searchResults": "{number, plural, =0 {無搜尋結果} other {{number} 個搜尋結果}}",
|
|
25
27
|
"components.filter.singleDimensionDescription": "按此條件篩選:{filterName}",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brightspace-ui/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.23.2",
|
|
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",
|