@brightspace-ui/core 3.16.0 → 3.17.1
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/filter/demo/filter.html +8 -3
- package/components/filter/filter-dimension-set-date-time-range-value.js +134 -0
- package/components/filter/filter-dimension-set.js +8 -1
- package/components/filter/filter.js +26 -6
- package/components/table/table-wrapper.js +47 -0
- package/custom-elements.json +61 -0
- package/lang/ar.js +1 -0
- package/lang/cy.js +1 -0
- package/lang/da.js +1 -0
- package/lang/de.js +1 -0
- package/lang/en-gb.js +1 -0
- package/lang/en.js +1 -0
- package/lang/es-es.js +1 -0
- package/lang/es.js +1 -0
- package/lang/fr-fr.js +1 -0
- package/lang/fr.js +1 -0
- package/lang/hi.js +1 -0
- package/lang/ja.js +1 -0
- package/lang/ko.js +1 -0
- package/lang/nl.js +1 -0
- package/lang/pt.js +1 -0
- package/lang/sv.js +1 -0
- package/lang/tr.js +1 -0
- package/lang/zh-cn.js +1 -0
- package/lang/zh-tw.js +1 -0
- package/package.json +1 -1
@@ -11,9 +11,13 @@
|
|
11
11
|
import '../../filter/filter-dimension-set-empty-state.js';
|
12
12
|
import '../../filter/filter-dimension-set-value.js';
|
13
13
|
import '../../filter/filter-dimension-set-date-text-value.js';
|
14
|
+
import '../../filter/filter-dimension-set-date-time-range-value.js';
|
14
15
|
import './filter-search-demo.js';
|
15
16
|
import './filter-load-more-demo.js';
|
16
17
|
</script>
|
18
|
+
<script>
|
19
|
+
window.D2L = { LP: { Web: { UI: { Flags: { Flag: () => true } } } } };
|
20
|
+
</script>
|
17
21
|
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1.0">
|
18
22
|
<meta charset="UTF-8">
|
19
23
|
</head>
|
@@ -162,11 +166,12 @@
|
|
162
166
|
<template>
|
163
167
|
<d2l-filter id="filter-single">
|
164
168
|
<d2l-filter-dimension-set key="dates" text="Dates">
|
165
|
-
<d2l-filter-dimension-set-value key="lastweek" text="Last
|
166
|
-
<d2l-filter-dimension-set-date-text-value key="lastHour" range="lastHour"
|
169
|
+
<d2l-filter-dimension-set-value key="lastweek" text="Last 7 days"></d2l-filter-dimension-set-value>
|
170
|
+
<d2l-filter-dimension-set-date-text-value key="lastHour" range="lastHour" ></d2l-filter-dimension-set-date-text-value>
|
167
171
|
<d2l-filter-dimension-set-date-text-value key="48hours" range="48hours" disabled></d2l-filter-dimension-set-date-text-value>
|
168
|
-
<d2l-filter-dimension-set-date-text-value key="
|
172
|
+
<d2l-filter-dimension-set-date-text-value key="today" range="today"></d2l-filter-dimension-set-date-text-value>
|
169
173
|
<d2l-filter-dimension-set-date-text-value key="6months" range="6months"></d2l-filter-dimension-set-date-text-value>
|
174
|
+
<d2l-filter-dimension-set-date-time-range-value key="custom" ></d2l-filter-dimension-set-date-time-range-value>
|
170
175
|
</d2l-filter-dimension-set>
|
171
176
|
</d2l-filter>
|
172
177
|
</template>
|
@@ -0,0 +1,134 @@
|
|
1
|
+
import '../inputs/input-date-time-range.js';
|
2
|
+
import { html, LitElement } from 'lit';
|
3
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
4
|
+
import { LocalizeCoreElement } from '../../helpers/localize-core-element.js';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* A component to represent a possible custom date range or date-time range value that can be selected for a dimension set (the main filter dimension type).
|
8
|
+
* The start-value and end-value will be included in the d2l-filter-change event and formatted as an ISO string in UTC time.
|
9
|
+
* This component does not render anything, but instead gathers data needed for the d2l-filter.
|
10
|
+
*/
|
11
|
+
class FilterDimensionSetDateTimeRangeValue extends LocalizeCoreElement(LitElement) {
|
12
|
+
|
13
|
+
static get properties() {
|
14
|
+
return {
|
15
|
+
/**
|
16
|
+
* Whether this value in the filter is disabled or not
|
17
|
+
* @type {boolean}
|
18
|
+
*/
|
19
|
+
disabled: { type: Boolean, reflect: true },
|
20
|
+
/**
|
21
|
+
* @ignore
|
22
|
+
*/
|
23
|
+
endValue: { type: String, attribute: 'end-value' },
|
24
|
+
/**
|
25
|
+
* REQUIRED: Unique key to represent this value in the dimension
|
26
|
+
* @type {string}
|
27
|
+
*/
|
28
|
+
key: { type: String },
|
29
|
+
/**
|
30
|
+
* Whether this value in the filter is selected or not
|
31
|
+
* @type {boolean}
|
32
|
+
*/
|
33
|
+
selected: { type: Boolean, reflect: true },
|
34
|
+
/**
|
35
|
+
* @ignore
|
36
|
+
*/
|
37
|
+
startValue: { type: String, attribute: 'start-value' },
|
38
|
+
/**
|
39
|
+
* Defaults to "Custom Date Range" (localized). Can be overridden if desired.
|
40
|
+
* @type {string}
|
41
|
+
*/
|
42
|
+
text: { type: String, reflect: true }
|
43
|
+
};
|
44
|
+
}
|
45
|
+
|
46
|
+
constructor() {
|
47
|
+
super();
|
48
|
+
this.disabled = false;
|
49
|
+
this.selected = false;
|
50
|
+
this._dispatchFilterChangeEvent = false;
|
51
|
+
this._enforceSingleSelection = true;
|
52
|
+
this._filterSetValue = true;
|
53
|
+
this._minWidth = 375;
|
54
|
+
this._noSearchSupport = true;
|
55
|
+
|
56
|
+
this._handleDateChange = this._handleDateChange.bind(this);
|
57
|
+
}
|
58
|
+
|
59
|
+
firstUpdated(changedProperties) {
|
60
|
+
super.firstUpdated(changedProperties);
|
61
|
+
|
62
|
+
this.text = this.text || this.localize('components.filter-dimension-set-date-time-range-value.text');
|
63
|
+
}
|
64
|
+
|
65
|
+
updated(changedProperties) {
|
66
|
+
super.updated(changedProperties);
|
67
|
+
|
68
|
+
const changes = new Map();
|
69
|
+
let shouldDispatchChangeEvent = false;
|
70
|
+
changedProperties.forEach((oldValue, prop) => {
|
71
|
+
if (oldValue === undefined && (prop === 'selected' || prop === 'disabled')) return;
|
72
|
+
if (this._dispatchFilterChangeEvent && (prop === 'startValue' || prop === 'endValue')) shouldDispatchChangeEvent = true;
|
73
|
+
|
74
|
+
if (prop === 'disabled' || prop === 'selected' || prop === 'startValue' || prop === 'endValue' || prop === 'text') {
|
75
|
+
changes.set(prop, this[prop]);
|
76
|
+
}
|
77
|
+
});
|
78
|
+
if (changes.size > 0) {
|
79
|
+
/** @ignore */
|
80
|
+
this.dispatchEvent(new CustomEvent('d2l-filter-dimension-set-value-data-change', {
|
81
|
+
detail: { valueKey: this.key, changes: changes, dispatchChangeEvent: shouldDispatchChangeEvent },
|
82
|
+
bubbles: true,
|
83
|
+
composed: false
|
84
|
+
}));
|
85
|
+
this._dispatchFilterChangeEvent = false;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
getValueDetails() {
|
90
|
+
return {
|
91
|
+
disabled: this.disabled,
|
92
|
+
key: this.key,
|
93
|
+
selected: this.selected,
|
94
|
+
text: this.text,
|
95
|
+
additionalContent: this._getAdditionalContent.bind(this),
|
96
|
+
getAdditionalEventDetails: this._getAdditionalEventDetails.bind(this),
|
97
|
+
clearProperties: this._clearProperties.bind(this)
|
98
|
+
};
|
99
|
+
}
|
100
|
+
|
101
|
+
_clearProperties() {
|
102
|
+
this.startValue = undefined;
|
103
|
+
this.endValue = undefined;
|
104
|
+
}
|
105
|
+
|
106
|
+
_getAdditionalContent() {
|
107
|
+
return html`
|
108
|
+
<d2l-input-date-time-range
|
109
|
+
@change="${this._handleDateChange}"
|
110
|
+
child-labels-hidden
|
111
|
+
data-dimensionvaluekey="${this.key}"
|
112
|
+
end-value="${ifDefined(this.endValue)}"
|
113
|
+
label="Custom Range"
|
114
|
+
label-hidden
|
115
|
+
prefer-fixed-positioning
|
116
|
+
start-value="${ifDefined(this.startValue)}"
|
117
|
+
></d2l-input-date-time-range>
|
118
|
+
`;
|
119
|
+
}
|
120
|
+
|
121
|
+
_getAdditionalEventDetails(selected) {
|
122
|
+
if (!selected) return {};
|
123
|
+
return { startValue: this.startValue, endValue: this.endValue };
|
124
|
+
}
|
125
|
+
|
126
|
+
async _handleDateChange(e) {
|
127
|
+
this.startValue = e.target.startValue;
|
128
|
+
this.endValue = e.target.endValue;
|
129
|
+
|
130
|
+
this._dispatchFilterChangeEvent = true;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
customElements.define('d2l-filter-dimension-set-date-time-range-value', FilterDimensionSetDateTimeRangeValue);
|
@@ -36,6 +36,10 @@ class FilterDimensionSet extends LitElement {
|
|
36
36
|
* @type {boolean}
|
37
37
|
*/
|
38
38
|
loading: { type: Boolean },
|
39
|
+
/**
|
40
|
+
* @ignore
|
41
|
+
*/
|
42
|
+
minWidth: { type: Number },
|
39
43
|
/**
|
40
44
|
* Whether to hide the search input, perform a simple text search, or fire an event on search
|
41
45
|
* @type {'none'|'automatic'|'manual'}
|
@@ -138,14 +142,17 @@ class FilterDimensionSet extends LitElement {
|
|
138
142
|
const valueNodes = this._getSlottedNodes();
|
139
143
|
let noSearchSupport = false;
|
140
144
|
let enforceSingleSelection = false;
|
145
|
+
let minWidth = undefined;
|
141
146
|
const values = valueNodes.map(value => {
|
142
147
|
if (value._noSearchSupport) noSearchSupport = true;
|
143
148
|
if (value._enforceSingleSelection) enforceSingleSelection = true;
|
149
|
+
if (value._minWidth) minWidth = value._minWidth;
|
144
150
|
|
145
151
|
return value.getValueDetails();
|
146
152
|
});
|
147
153
|
if (noSearchSupport) this.searchType = 'none';
|
148
154
|
if (enforceSingleSelection) this.selectionSingle = true;
|
155
|
+
if (minWidth) this.minWidth = minWidth;
|
149
156
|
return values;
|
150
157
|
}
|
151
158
|
|
@@ -182,7 +189,7 @@ class FilterDimensionSet extends LitElement {
|
|
182
189
|
|
183
190
|
_handleDimensionSetValueDataChange(e) {
|
184
191
|
e.stopPropagation();
|
185
|
-
this._dispatchDataChangeEvent({ dimensionKey: this.key, valueKey: e.detail.valueKey, changes: e.detail.changes });
|
192
|
+
this._dispatchDataChangeEvent({ dimensionKey: this.key, valueKey: e.detail.valueKey, changes: e.detail.changes, dispatchChangeEvent: e.detail.dispatchChangeEvent });
|
186
193
|
}
|
187
194
|
|
188
195
|
_handleSearchEmptyStateSlotChange(e) {
|
@@ -34,6 +34,7 @@ import { SubscriberRegistryController } from '../../controllers/subscriber/subsc
|
|
34
34
|
|
35
35
|
const ARROWLEFT_KEY_CODE = 37;
|
36
36
|
const ESCAPE_KEY_CODE = 27;
|
37
|
+
const FILTER_CONTENT_CLASS = 'd2l-filter-dropdown-content';
|
37
38
|
const SET_DIMENSION_ID_PREFIX = 'list-';
|
38
39
|
|
39
40
|
/**
|
@@ -67,6 +68,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
67
68
|
text: { type: String },
|
68
69
|
_activeDimensionKey: { type: String, attribute: false },
|
69
70
|
_dimensions: { type: Array, attribute: false },
|
71
|
+
_minWidth: { type: Number, attribute: false },
|
70
72
|
_totalAppliedCount: { type: Number, attribute: false }
|
71
73
|
};
|
72
74
|
}
|
@@ -144,8 +146,8 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
144
146
|
flex-shrink: 0;
|
145
147
|
}
|
146
148
|
d2l-expand-collapse-content[expanded] {
|
149
|
+
margin-inline-start: -2rem;
|
147
150
|
padding-block: 0.5rem;
|
148
|
-
padding-inline: 0.2rem;
|
149
151
|
}
|
150
152
|
|
151
153
|
.d2l-filter-dimension-set-value-text {
|
@@ -206,6 +208,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
206
208
|
this.opened = false;
|
207
209
|
this._changeEventsToDispatch = new Map();
|
208
210
|
this._dimensions = [];
|
211
|
+
this._minWidth = 285;
|
209
212
|
this._openedDimensions = [];
|
210
213
|
this._totalAppliedCount = 0;
|
211
214
|
|
@@ -244,27 +247,29 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
244
247
|
|
245
248
|
const dropdownContent = singleDimension ? html`
|
246
249
|
<d2l-dropdown-content
|
247
|
-
class="vdiff-target"
|
248
|
-
min-width="
|
250
|
+
class="vdiff-target ${FILTER_CONTENT_CLASS}"
|
251
|
+
min-width="${this._minWidth}"
|
249
252
|
max-width="420"
|
250
253
|
mobile-tray="right"
|
251
254
|
mobile-breakpoint="768"
|
252
255
|
no-padding-header
|
253
256
|
no-padding
|
254
257
|
?opened="${this.opened}"
|
258
|
+
prefer-fixed-positioning
|
255
259
|
?trap-focus="${!this._isDimensionEmpty(this._dimensions[0])}">
|
256
260
|
${header}
|
257
261
|
${dimensions}
|
258
262
|
</d2l-dropdown-content>`
|
259
263
|
: html`
|
260
264
|
<d2l-dropdown-menu
|
261
|
-
class="vdiff-target"
|
262
|
-
min-width="
|
265
|
+
class="vdiff-target ${FILTER_CONTENT_CLASS}"
|
266
|
+
min-width="${this._minWidth}"
|
263
267
|
max-width="420"
|
264
268
|
mobile-tray="right"
|
265
269
|
mobile-breakpoint="768"
|
266
270
|
no-padding-header
|
267
271
|
?opened="${this.opened}"
|
272
|
+
prefer-fixed-positioning
|
268
273
|
trap-focus>
|
269
274
|
${header}
|
270
275
|
<d2l-menu label="${this.localize('components.filter.filters')}">
|
@@ -289,7 +294,8 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
289
294
|
@d2l-dropdown-open="${this._handleDropdownOpen}"
|
290
295
|
@d2l-dropdown-position="${this._stopPropagation}"
|
291
296
|
class="vdiff-target"
|
292
|
-
?disabled="${this.disabled}"
|
297
|
+
?disabled="${this.disabled}"
|
298
|
+
prefer-fixed-positioning>
|
293
299
|
<d2l-button-subtle
|
294
300
|
class="d2l-dropdown-opener"
|
295
301
|
description="${description}"
|
@@ -496,6 +502,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
496
502
|
`;
|
497
503
|
}
|
498
504
|
|
505
|
+
if (dimension.minWidth) this._minWidth = dimension.minWidth;
|
499
506
|
if (this._isDimensionEmpty(dimension)) {
|
500
507
|
const emptyState = dimension.setEmptyState
|
501
508
|
? this._createEmptyState(dimension.setEmptyState, dimension.key)
|
@@ -633,6 +640,12 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
633
640
|
this._activeFiltersSubscribers.updateSubscribers();
|
634
641
|
}
|
635
642
|
|
643
|
+
_dispatchChangeEventValueDataChange(dimension, value, valueKey) {
|
644
|
+
const details = { valueKey: valueKey, selected: value.selected };
|
645
|
+
if (value.getAdditionalEventDetails) Object.assign(details, value.getAdditionalEventDetails(value.selected));
|
646
|
+
this._dispatchChangeEvent(dimension, details);
|
647
|
+
}
|
648
|
+
|
636
649
|
_dispatchDimensionFirstOpenEvent(dimension) {
|
637
650
|
if (!this._openedDimensions.includes(dimension.key)) {
|
638
651
|
this.dispatchEvent(new CustomEvent('d2l-filter-dimension-first-open', { bubbles: true, composed: false, detail: { key: dimension.key } }));
|
@@ -746,6 +759,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
746
759
|
if (shouldResizeDropdown) {
|
747
760
|
this._requestDropdownResize();
|
748
761
|
}
|
762
|
+
if (e.detail.dispatchChangeEvent) this._dispatchChangeEventValueDataChange(dimension, value, e.detail.valueKey);
|
749
763
|
}
|
750
764
|
|
751
765
|
_handleDimensionHide() {
|
@@ -798,12 +812,16 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
798
812
|
}
|
799
813
|
|
800
814
|
_handleDropdownClose(e) {
|
815
|
+
if (!e.target.classList?.contains(FILTER_CONTENT_CLASS)) return;
|
816
|
+
|
801
817
|
this.opened = false;
|
802
818
|
this._activeDimensionKey = null;
|
803
819
|
this._stopPropagation(e);
|
804
820
|
}
|
805
821
|
|
806
822
|
_handleDropdownOpen(e) {
|
823
|
+
if (!e.target.classList?.contains(FILTER_CONTENT_CLASS)) return;
|
824
|
+
|
807
825
|
this.opened = true;
|
808
826
|
if (this._dimensions.length === 1) {
|
809
827
|
const dimension = this._dimensions[0];
|
@@ -846,6 +864,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
846
864
|
info.headerText = dimension.headerText;
|
847
865
|
info.introductoryText = dimension.introductoryText;
|
848
866
|
info.hasMore = dimension.hasMore;
|
867
|
+
info.minWidth = dimension.minWidth;
|
849
868
|
info.searchType = dimension.searchType;
|
850
869
|
info.searchValue = '';
|
851
870
|
info.selectedFirst = dimension.selectedFirst;
|
@@ -907,6 +926,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
907
926
|
value.selected = false;
|
908
927
|
this._setDimensionChangeEvent(dimension, { valueKey: value.key, selected: false }, true);
|
909
928
|
}
|
929
|
+
if (value.clearProperties) value.clearProperties();
|
910
930
|
});
|
911
931
|
break;
|
912
932
|
}
|
@@ -2,6 +2,7 @@ import '../colors/colors.js';
|
|
2
2
|
import '../scroll-wrapper/scroll-wrapper.js';
|
3
3
|
import { css, html, LitElement, nothing } from 'lit';
|
4
4
|
import { cssSizes } from '../inputs/input-checkbox.js';
|
5
|
+
import { getComposedParent } from '../../helpers/dom.js';
|
5
6
|
import { PageableMixin } from '../paging/pageable-mixin.js';
|
6
7
|
import ResizeObserver from 'resize-observer-polyfill/dist/ResizeObserver.es.js';
|
7
8
|
import { RtlMixin } from '../../mixins/rtl/rtl-mixin.js';
|
@@ -252,6 +253,10 @@ export const tableStyles = css`
|
|
252
253
|
d2l-table-wrapper[sticky-headers][sticky-headers-scroll-wrapper] .d2l-table > tbody {
|
253
254
|
display: block;
|
254
255
|
}
|
256
|
+
|
257
|
+
[data-popover-count] {
|
258
|
+
z-index: 6 !important; /* if opened above, we want to stack on top of sticky table-controls */
|
259
|
+
}
|
255
260
|
`;
|
256
261
|
|
257
262
|
/**
|
@@ -370,9 +375,19 @@ export class TableWrapper extends RtlMixin(PageableMixin(SelectionMixin(LitEleme
|
|
370
375
|
this._tableScrollers = {};
|
371
376
|
}
|
372
377
|
|
378
|
+
connectedCallback() {
|
379
|
+
super.connectedCallback();
|
380
|
+
|
381
|
+
this.addEventListener('d2l-dropdown-open', this._handlePopoverOpen);
|
382
|
+
this.addEventListener('d2l-dropdown-close', this._handlePopoverClose);
|
383
|
+
}
|
384
|
+
|
373
385
|
disconnectedCallback() {
|
374
386
|
super.disconnectedCallback();
|
375
387
|
|
388
|
+
this.removeEventListener('d2l-dropdown-open', this._handlePopoverOpen);
|
389
|
+
this.removeEventListener('d2l-dropdown-close', this._handlePopoverClose);
|
390
|
+
|
376
391
|
this._controlsMutationObserver?.disconnect();
|
377
392
|
this._controlsScrolledMutationObserver?.disconnect();
|
378
393
|
this._tableMutationObserver?.disconnect();
|
@@ -499,6 +514,14 @@ export class TableWrapper extends RtlMixin(PageableMixin(SelectionMixin(LitEleme
|
|
499
514
|
this._handleControlsChange();
|
500
515
|
}
|
501
516
|
|
517
|
+
_handlePopoverClose(e) {
|
518
|
+
this._updateStickyAncestor(e.target, false);
|
519
|
+
}
|
520
|
+
|
521
|
+
_handlePopoverOpen(e) {
|
522
|
+
this._updateStickyAncestor(e.target, true);
|
523
|
+
}
|
524
|
+
|
502
525
|
_handleSlotChange(e) {
|
503
526
|
this._table = e.target.assignedNodes({ flatten: true }).find(
|
504
527
|
node => (node.nodeType === Node.ELEMENT_NODE && node.tagName === 'TABLE' && node.classList.contains('d2l-table'))
|
@@ -589,6 +612,30 @@ export class TableWrapper extends RtlMixin(PageableMixin(SelectionMixin(LitEleme
|
|
589
612
|
}
|
590
613
|
}
|
591
614
|
|
615
|
+
_updateStickyAncestor(node, popoverOpened) {
|
616
|
+
if (!this.stickyHeaders) return;
|
617
|
+
|
618
|
+
node = getComposedParent(node);
|
619
|
+
while (node) {
|
620
|
+
if (node === this) break;
|
621
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
622
|
+
const style = window.getComputedStyle(node, null);
|
623
|
+
if (style.getPropertyValue('position') === 'sticky') {
|
624
|
+
|
625
|
+
let popoverCount = Number.parseInt(node.getAttribute('data-popover-count'));
|
626
|
+
if (Number.isNaN(popoverCount)) popoverCount = 0;
|
627
|
+
popoverOpened ? popoverCount++ : popoverCount--;
|
628
|
+
|
629
|
+
if (popoverCount > 0) node.setAttribute('data-popover-count', popoverCount);
|
630
|
+
else node.removeAttribute('data-popover-count');
|
631
|
+
|
632
|
+
return;
|
633
|
+
}
|
634
|
+
}
|
635
|
+
node = getComposedParent(node);
|
636
|
+
}
|
637
|
+
}
|
638
|
+
|
592
639
|
_updateStickyTops() {
|
593
640
|
const hasStickyControls = this._controls && !this._controls.noSticky;
|
594
641
|
let rowTop = hasStickyControls ? this._controls.offsetHeight + 6 : 0; // +6 for the internal `margin-bottom`.
|
package/custom-elements.json
CHANGED
@@ -3868,6 +3868,67 @@
|
|
3868
3868
|
}
|
3869
3869
|
]
|
3870
3870
|
},
|
3871
|
+
{
|
3872
|
+
"name": "d2l-filter-dimension-set-date-time-range-value",
|
3873
|
+
"path": "./components/filter/filter-dimension-set-date-time-range-value.js",
|
3874
|
+
"description": "A component to represent a possible custom date range or date-time range value that can be selected for a dimension set (the main filter dimension type).\nThe start-value and end-value will be included in the d2l-filter-change event and formatted as an ISO string in UTC time.\nThis component does not render anything, but instead gathers data needed for the d2l-filter.",
|
3875
|
+
"attributes": [
|
3876
|
+
{
|
3877
|
+
"name": "key",
|
3878
|
+
"description": "REQUIRED: Unique key to represent this value in the dimension",
|
3879
|
+
"type": "string"
|
3880
|
+
},
|
3881
|
+
{
|
3882
|
+
"name": "text",
|
3883
|
+
"description": "Defaults to \"Custom Date Range\" (localized). Can be overridden if desired.",
|
3884
|
+
"type": "string"
|
3885
|
+
},
|
3886
|
+
{
|
3887
|
+
"name": "disabled",
|
3888
|
+
"description": "Whether this value in the filter is disabled or not",
|
3889
|
+
"type": "boolean",
|
3890
|
+
"default": "false"
|
3891
|
+
},
|
3892
|
+
{
|
3893
|
+
"name": "selected",
|
3894
|
+
"description": "Whether this value in the filter is selected or not",
|
3895
|
+
"type": "boolean",
|
3896
|
+
"default": "false"
|
3897
|
+
}
|
3898
|
+
],
|
3899
|
+
"properties": [
|
3900
|
+
{
|
3901
|
+
"name": "key",
|
3902
|
+
"attribute": "key",
|
3903
|
+
"description": "REQUIRED: Unique key to represent this value in the dimension",
|
3904
|
+
"type": "string"
|
3905
|
+
},
|
3906
|
+
{
|
3907
|
+
"name": "text",
|
3908
|
+
"attribute": "text",
|
3909
|
+
"description": "Defaults to \"Custom Date Range\" (localized). Can be overridden if desired.",
|
3910
|
+
"type": "string"
|
3911
|
+
},
|
3912
|
+
{
|
3913
|
+
"name": "disabled",
|
3914
|
+
"attribute": "disabled",
|
3915
|
+
"description": "Whether this value in the filter is disabled or not",
|
3916
|
+
"type": "boolean",
|
3917
|
+
"default": "false"
|
3918
|
+
},
|
3919
|
+
{
|
3920
|
+
"name": "selected",
|
3921
|
+
"attribute": "selected",
|
3922
|
+
"description": "Whether this value in the filter is selected or not",
|
3923
|
+
"type": "boolean",
|
3924
|
+
"default": "false"
|
3925
|
+
},
|
3926
|
+
{
|
3927
|
+
"name": "documentLocaleSettings",
|
3928
|
+
"default": "\"getDocumentLocaleSettings()\""
|
3929
|
+
}
|
3930
|
+
]
|
3931
|
+
},
|
3871
3932
|
{
|
3872
3933
|
"name": "d2l-filter-dimension-set-empty-state",
|
3873
3934
|
"path": "./components/filter/filter-dimension-set-empty-state.js",
|
package/lang/ar.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} غير صالحة.",
|
32
33
|
"components.form-element.defaultFieldLabel": "الحقل",
|
33
34
|
"components.form-element.input.email.typeMismatch": "البريد الإلكتروني غير صالح",
|
package/lang/cy.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "Mae {label} yn annilys.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Maes",
|
33
34
|
"components.form-element.input.email.typeMismatch": "Nid yw'r e-bost yn ddilys",
|
package/lang/da.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} er ugyldigt.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Felt",
|
33
34
|
"components.form-element.input.email.typeMismatch": "E-mail er ikke gyldig",
|
package/lang/de.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} ist ungültig.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Feld",
|
33
34
|
"components.form-element.input.email.typeMismatch": "Die E-Mail-Adresse ist ungültig",
|
package/lang/en-gb.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} is invalid.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Field",
|
33
34
|
"components.form-element.input.email.typeMismatch": "Email is not valid",
|
package/lang/en.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} is invalid.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Field",
|
33
34
|
"components.form-element.input.email.typeMismatch": "Email is not valid",
|
package/lang/es-es.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} no es válido.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Campo",
|
33
34
|
"components.form-element.input.email.typeMismatch": "El correo electrónico no es válido",
|
package/lang/es.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} no es válida.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Campo",
|
33
34
|
"components.form-element.input.email.typeMismatch": "El correo electrónico no es válido",
|
package/lang/fr-fr.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} n'est pas valide.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Champ",
|
33
34
|
"components.form-element.input.email.typeMismatch": "L'adresse e-mail n'est pas valide.",
|
package/lang/fr.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} n'est pas valide.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Champ",
|
33
34
|
"components.form-element.input.email.typeMismatch": "L'adresse courriel n'est pas valide",
|
package/lang/hi.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} अमान्य है।",
|
32
33
|
"components.form-element.defaultFieldLabel": "फ़ील्ड",
|
33
34
|
"components.form-element.input.email.typeMismatch": "ईमेल मान्य नहीं है",
|
package/lang/ja.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} は無効です。",
|
32
33
|
"components.form-element.defaultFieldLabel": "フィールド",
|
33
34
|
"components.form-element.input.email.typeMismatch": "電子メールが無効です",
|
package/lang/ko.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label}이(가) 잘못되었습니다.",
|
32
33
|
"components.form-element.defaultFieldLabel": "필드",
|
33
34
|
"components.form-element.input.email.typeMismatch": "이메일이 유효하지 않습니다.",
|
package/lang/nl.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} is ongeldig.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Veld",
|
33
34
|
"components.form-element.input.email.typeMismatch": "E-mailadres is ongeldig",
|
package/lang/pt.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} é inválido.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Campo",
|
33
34
|
"components.form-element.input.email.typeMismatch": "E-mail inválido",
|
package/lang/sv.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} är ogiltig.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Fält",
|
33
34
|
"components.form-element.input.email.typeMismatch": "E-postadressen är ogiltig",
|
package/lang/tr.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} geçersiz.",
|
32
33
|
"components.form-element.defaultFieldLabel": "Alan",
|
33
34
|
"components.form-element.input.email.typeMismatch": "E-posta geçerli değil",
|
package/lang/zh-cn.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} 无效。",
|
32
33
|
"components.form-element.defaultFieldLabel": "字段",
|
33
34
|
"components.form-element.input.email.typeMismatch": "电子邮件无效",
|
package/lang/zh-tw.js
CHANGED
@@ -28,6 +28,7 @@ export default {
|
|
28
28
|
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
29
|
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
30
|
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
31
|
+
"components.filter-dimension-set-date-time-range-value.text": "Custom date range",
|
31
32
|
"components.form-element.defaultError": "{label} 無效。",
|
32
33
|
"components.form-element.defaultFieldLabel": "欄位",
|
33
34
|
"components.form-element.input.email.typeMismatch": "電子郵件無效",
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@brightspace-ui/core",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.17.1",
|
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",
|