@brightspace-ui/core 2.21.7 → 2.23.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.
@@ -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
- ${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
- `)}
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
 
@@ -187,11 +187,11 @@ Set dimension on mobile:
187
187
  </script>
188
188
  <d2l-filter>
189
189
  <d2l-filter-dimension-set key="course" text="Course" >
190
- <d2l-filter-dimension-set-value key="art" text="Art" selected><d2l-filter-dimension-set-value>
191
- <d2l-filter-dimension-set-value key="biology" text="Biology"><d2l-filter-dimension-set-value>
190
+ <d2l-filter-dimension-set-value key="art" text="Art" selected></d2l-filter-dimension-set-value>
191
+ <d2l-filter-dimension-set-value key="biology" text="Biology"></d2l-filter-dimension-set-value>
192
192
  </d2l-filter-dimension-set>
193
193
  <d2l-filter-dimension-set key="role" text="Role" >
194
- <d2l-filter-dimension-set-value key="admin" text="Admin" selected><d2l-filter-dimension-set-value>
194
+ <d2l-filter-dimension-set-value key="admin" text="Admin" selected></d2l-filter-dimension-set-value>
195
195
  </d2l-filter-dimension-set>
196
196
  </d2l-filter>
197
197
  ```
@@ -219,18 +219,79 @@ This component is built to be used alongside the [d2l-filter-dimension-set](#fil
219
219
 
220
220
  | Property | Type | Description |
221
221
  |---|---|---|
222
+ | `disabled` | Boolean, default: `false` | Whether the value in the filter is disabled or not |
222
223
  | `key` | String, required | Unique identifier within a dimension for the value |
223
224
  | `text` | String, required | Text for the value in the list |
224
225
  | `selected` | Boolean, default: `false` | Whether the value in the filter is selected or not |
225
226
 
227
+ ## Tags for Applied Filters [d2l-filter-tags]
226
228
 
227
- ## Filter Dimension: Date [d2l-filter-dimension-date]
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.
228
230
 
229
- **Coming Soon!**
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>
230
251
 
231
- ## Tags for Applied Filters [d2l-filter-tags]
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]
232
293
 
233
- **This is in progress now! Stable API expected by May.**
294
+ **Coming Soon!**
234
295
 
235
296
  <!-- docs: start hidden content -->
236
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>
@@ -27,8 +27,8 @@
27
27
  <d2l-filter-dimension-set-value key="art" text="Art"></d2l-filter-dimension-set-value>
28
28
  <d2l-filter-dimension-set-value key="astronomy" text="Astronomy" selected></d2l-filter-dimension-set-value>
29
29
  <d2l-filter-dimension-set-value key="biology" text="Biology"></d2l-filter-dimension-set-value>
30
- <d2l-filter-dimension-set-value key="chemistry" text="Chemistry"></d2l-filter-dimension-set-value>
31
- <d2l-filter-dimension-set-value key="drama" text="Drama"></d2l-filter-dimension-set-value>
30
+ <d2l-filter-dimension-set-value key="chemistry" text="Chemistry" disabled></d2l-filter-dimension-set-value>
31
+ <d2l-filter-dimension-set-value key="drama" text="Drama" disabled></d2l-filter-dimension-set-value>
32
32
  <d2l-filter-dimension-set-value key="english" text="English"></d2l-filter-dimension-set-value>
33
33
  <d2l-filter-dimension-set-value key="how-to" text="How To Write a How To Article With a Flashy Title"></d2l-filter-dimension-set-value>
34
34
  <d2l-filter-dimension-set-value key="math" text="Math"></d2l-filter-dimension-set-value>
@@ -47,7 +47,7 @@
47
47
  <d2l-filter-dimension-set key="semester" text="Semester" selection-single>
48
48
  <d2l-filter-dimension-set-value key="fall" text="Fall"></d2l-filter-dimension-set-value>
49
49
  <d2l-filter-dimension-set-value key="winter" text="Winter" selected></d2l-filter-dimension-set-value>
50
- <d2l-filter-dimension-set-value key="spring" text="Spring"></d2l-filter-dimension-set-value>
50
+ <d2l-filter-dimension-set-value key="spring" text="Spring" disabled></d2l-filter-dimension-set-value>
51
51
  <d2l-filter-dimension-set-value key="summer" text="Summer"></d2l-filter-dimension-set-value>
52
52
  </d2l-filter-dimension-set>
53
53
  </d2l-filter>
@@ -8,6 +8,11 @@ class FilterDimensionSetValue extends LitElement {
8
8
 
9
9
  static get properties() {
10
10
  return {
11
+ /**
12
+ * Whether this value in the filter is disabled or not
13
+ * @type {boolean}
14
+ */
15
+ disabled: { type: Boolean, reflect: true },
11
16
  /**
12
17
  * REQUIRED: Unique key to represent this value in the dimension
13
18
  * @type {string}
@@ -28,6 +33,7 @@ class FilterDimensionSetValue extends LitElement {
28
33
 
29
34
  constructor() {
30
35
  super();
36
+ this.disabled = false;
31
37
  this.selected = false;
32
38
  this.text = '';
33
39
  }
@@ -39,7 +45,7 @@ class FilterDimensionSetValue extends LitElement {
39
45
  changedProperties.forEach((oldValue, prop) => {
40
46
  if (oldValue === undefined) return;
41
47
 
42
- if (prop === 'selected' || prop === 'text') {
48
+ if (prop === 'disabled' || prop === 'selected' || prop === 'text') {
43
49
  changes.set(prop, this[prop]);
44
50
  }
45
51
  });
@@ -103,6 +103,7 @@ class FilterDimensionSet extends LitElement {
103
103
  const valueNodes = this._getSlottedNodes();
104
104
  const values = valueNodes.map(value => {
105
105
  return {
106
+ disabled: value.disabled,
106
107
  key: value.key,
107
108
  selected: value.selected,
108
109
  text: value.text
@@ -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);
@@ -125,6 +125,10 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
125
125
  line-height: unset;
126
126
  }
127
127
 
128
+ d2l-list-item[disabled] .d2l-filter-dimension-set-value-text {
129
+ color: var(--d2l-color-chromite);
130
+ }
131
+
128
132
  .d2l-filter-dimension-info-message {
129
133
  padding: 0.9rem 0;
130
134
  text-align: center;
@@ -407,6 +411,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
407
411
  separators="between">
408
412
  ${dimension.values.map(item => html`
409
413
  <d2l-list-item
414
+ ?disabled="${item.disabled}"
410
415
  ?hidden="${item.hidden}"
411
416
  key="${item.key}"
412
417
  label="${item.text}"
@@ -423,6 +428,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
423
428
  this._setDimensionChangeEvent(dimension, change, false);
424
429
 
425
430
  if (!this._changeEventTimeout) {
431
+ /** 200 ms timeout used in filter-tags CLEAR_TIMEOUT. If the timeout here changes, update that as well */
426
432
  this._changeEventTimeout = setTimeout(() => {
427
433
  this._dispatchChangeEventNow(false);
428
434
  }, 200);
@@ -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 (!clearAll) announce(this.localize('components.tag-list.cleared-item', { value: this.text }));
169
+ if (clearAll) return;
170
170
 
171
- /** Dispatched when a user selects to delete a tag list item. The consumer must handle the actual element deletion and focus behaviour if there are no remaining list items. */
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
- if (children.length > 1) {
344
- if (children[itemIndex - 1]) children[itemIndex - 1].focus();
345
- else children[itemIndex + 1].focus();
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() {
@@ -3001,6 +3001,12 @@
3001
3001
  "description": "REQUIRED: Unique key to represent this value in the dimension",
3002
3002
  "type": "string"
3003
3003
  },
3004
+ {
3005
+ "name": "disabled",
3006
+ "description": "Whether this value in the filter is disabled or not",
3007
+ "type": "boolean",
3008
+ "default": "false"
3009
+ },
3004
3010
  {
3005
3011
  "name": "selected",
3006
3012
  "description": "Whether this value in the filter is selected or not",
@@ -3021,6 +3027,13 @@
3021
3027
  "description": "REQUIRED: Unique key to represent this value in the dimension",
3022
3028
  "type": "string"
3023
3029
  },
3030
+ {
3031
+ "name": "disabled",
3032
+ "attribute": "disabled",
3033
+ "description": "Whether this value in the filter is disabled or not",
3034
+ "type": "boolean",
3035
+ "default": "false"
3036
+ },
3024
3037
  {
3025
3038
  "name": "selected",
3026
3039
  "attribute": "selected",
@@ -3141,6 +3154,38 @@
3141
3154
  }
3142
3155
  ]
3143
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
+ },
3144
3189
  {
3145
3190
  "name": "d2l-filter",
3146
3191
  "path": "./components/filter/filter.js",
@@ -9862,7 +9907,7 @@
9862
9907
  "events": [
9863
9908
  {
9864
9909
  "name": "d2l-tag-list-item-clear",
9865
- "description": "Dispatched when a user selects to delete a tag list item. The consumer must handle the actual element deletion and focus behaviour if there are no remaining list items."
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."
9866
9911
  }
9867
9912
  ]
9868
9913
  },
@@ -9880,6 +9925,12 @@
9880
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.",
9881
9926
  "type": "boolean",
9882
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"
9883
9934
  }
9884
9935
  ],
9885
9936
  "properties": [
@@ -9896,6 +9947,13 @@
9896
9947
  "type": "boolean",
9897
9948
  "default": "false"
9898
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
+ },
9899
9957
  {
9900
9958
  "name": "arrowKeysDirection",
9901
9959
  "type": "string",
@@ -9906,6 +9964,12 @@
9906
9964
  "type": "boolean",
9907
9965
  "default": "false"
9908
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
+ }
9909
9973
  ]
9910
9974
  },
9911
9975
  {
@@ -9940,7 +10004,7 @@
9940
10004
  "events": [
9941
10005
  {
9942
10006
  "name": "d2l-tag-list-item-clear",
9943
- "description": "Dispatched when a user selects to delete a tag list item. The consumer must handle the actual element deletion and focus behaviour if there are no remaining list items."
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."
9944
10008
  }
9945
10009
  ]
9946
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.21.7",
3
+ "version": "2.23.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",