@brightspace-ui/core 3.8.1 → 3.9.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/README.md +32 -2
- package/components/filter/demo/filter.html +18 -2
- package/components/filter/filter-dimension-set-date-text-value.js +156 -0
- package/components/filter/filter-dimension-set-value.js +13 -0
- package/components/filter/filter-dimension-set.js +12 -8
- package/components/filter/filter.js +6 -2
- package/custom-elements.json +66 -0
- package/helpers/dateTime.js +47 -0
- package/helpers/error.js +5 -3
- package/lang/ar.js +3 -0
- package/lang/cy.js +3 -0
- package/lang/da.js +3 -0
- package/lang/de.js +3 -0
- package/lang/en-gb.js +3 -0
- package/lang/en.js +3 -0
- package/lang/es-es.js +3 -0
- package/lang/es.js +3 -0
- package/lang/fr-fr.js +3 -0
- package/lang/fr.js +3 -0
- package/lang/hi.js +3 -0
- package/lang/ja.js +3 -0
- package/lang/ko.js +3 -0
- package/lang/nl.js +3 -0
- package/lang/pt.js +3 -0
- package/lang/sv.js +3 -0
- package/lang/tr.js +3 -0
- package/lang/zh-cn.js +3 -0
- package/lang/zh-tw.js +3 -0
- package/package.json +1 -1
@@ -204,7 +204,7 @@ The `d2l-filter-dimension-set` component is the main dimension type that will wo
|
|
204
204
|
|
205
205
|
## Dimension Set Value [d2l-filter-dimension-set-value]
|
206
206
|
|
207
|
-
This component is built to be used alongside the [d2l-filter-dimension-set](#d2l-filter-dimension-set) component
|
207
|
+
This component is built to be used alongside the [d2l-filter-dimension-set](#d2l-filter-dimension-set) component. It will give you a selectable list of filter values.
|
208
208
|
|
209
209
|
<!-- docs: demo code properties name:d2l-filter-dimension-set-value align:start autoOpen:true autoSize:false size:large -->
|
210
210
|
```html
|
@@ -233,11 +233,41 @@ This component is built to be used alongside the [d2l-filter-dimension-set](#d2l
|
|
233
233
|
| `selected` | Boolean, default: `false` | Whether the value in the filter is selected or not |
|
234
234
|
<!-- docs: end hidden content -->
|
235
235
|
|
236
|
+
## Dimension Set Value: Preset Date Range [d2l-filter-dimension-set-date-text-value]
|
237
|
+
|
238
|
+
This component is built to be used alongside the [d2l-filter-dimension-set](#d2l-filter-dimension-set) component. It will give you a selectable filter value based on the `range` defined on the component, which is to be one of a set of pre-defined range options. Selection triggers the `d2l-filter-change` event, with `start-value` and `end-value` (in UTC) being included in the changes for the `selected` item.
|
239
|
+
|
240
|
+
<!-- docs: demo code properties name:d2l-filter-dimension-set-date-text-value align:start autoOpen:true autoSize:false size:large -->
|
241
|
+
```html
|
242
|
+
<script type="module">
|
243
|
+
import '@brightspace-ui/core/components/filter/filter.js';
|
244
|
+
import '@brightspace-ui/core/components/filter/filter-dimension-set.js';
|
245
|
+
import '@brightspace-ui/core/components/filter/filter-dimension-set-date-text-value.js';
|
246
|
+
</script>
|
247
|
+
<d2l-filter>
|
248
|
+
<d2l-filter-dimension-set key="dates" text="Dates">
|
249
|
+
<d2l-filter-dimension-set-date-text-value key="lastHour" range="lastHour" selected></d2l-filter-dimension-set-date-text-value>
|
250
|
+
<d2l-filter-dimension-set-date-text-value key="48hours" range="48hours" disabled></d2l-filter-dimension-set-date-text-value>
|
251
|
+
<d2l-filter-dimension-set-date-text-value key="14days" range="14days"></d2l-filter-dimension-set-date-text-value>
|
252
|
+
</d2l-filter-dimension-set>
|
253
|
+
</d2l-filter>
|
254
|
+
```
|
255
|
+
<!-- docs: start hidden content -->
|
256
|
+
### Properties
|
257
|
+
|
258
|
+
| Property | Type | Description |
|
259
|
+
|---|---|---|
|
260
|
+
| `key` | String, required | Unique identifier within a dimension for the value |
|
261
|
+
| `range` | String, required | The preset date/time range that the list item represents. Value is to be one of 'today', 'lastHour', '24hours', '48hours', '7days', '14days', '30days', or '6months'. |
|
262
|
+
| `disabled` | Boolean, default: `false` | Whether the value in the filter is disabled or not |
|
263
|
+
| `selected` | Boolean, default: `false` | Whether the value in the filter is selected or not |
|
264
|
+
<!-- docs: end hidden content -->
|
265
|
+
|
236
266
|
## Search and Paging
|
237
267
|
|
238
268
|
Most filters will not need search or paging features since filter value lists are generally short. For longer lists of filter values when Search is necessary, it can be enabled by setting search-type to `automatic` or `manual`.
|
239
269
|
|
240
|
-
`automatic` search runs a basic case-insensitive text comparison on the dimension values that are loaded in the browser, having no awareness of server-side values that are not yet loaded.
|
270
|
+
`automatic` search runs a basic case-insensitive text comparison on the dimension values that are loaded in the browser, having no awareness of server-side values that are not yet loaded.
|
241
271
|
|
242
272
|
`manual` search dispatches a `d2l-filter-dimension-search` event delegating the search to the component's consumer. The event's detail will contain the key of the dimension from where the event was dispatched (`key`), the text value used for the search (`value`) and a callback (`searchCompleteCallback`). This callback gives the consumer control of which keys to display, either by setting `displayAllKeys` to `true` or passing a list of the keys to display as `keysToDisplay` (all other keys will be hidden). The dimension will be in a loading state until the callback is called.
|
243
273
|
```js
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
2
|
+
<html lang="en" data-timezone='{"name":"Canada - Toronto", "identifier":"America/Toronto"}'>
|
3
3
|
|
4
4
|
<head>
|
5
5
|
<link rel="stylesheet" href="../../demo/styles.css" type="text/css">
|
@@ -10,6 +10,7 @@
|
|
10
10
|
import '../../filter/filter-dimension-set.js';
|
11
11
|
import '../../filter/filter-dimension-set-empty-state.js';
|
12
12
|
import '../../filter/filter-dimension-set-value.js';
|
13
|
+
import '../../filter/filter-dimension-set-date-text-value.js';
|
13
14
|
import './filter-search-demo.js';
|
14
15
|
import './filter-load-more-demo.js';
|
15
16
|
</script>
|
@@ -127,7 +128,7 @@
|
|
127
128
|
<d2l-filter-dimension-set-value key="stats" text="Statistics"></d2l-filter-dimension-set-value>
|
128
129
|
<d2l-filter-dimension-set-value key="writerscraft" text="Writer's Craft"></d2l-filter-dimension-set-value>
|
129
130
|
</d2l-filter-dimension-set>
|
130
|
-
|
131
|
+
|
131
132
|
</d2l-filter>
|
132
133
|
<d2l-filter text="More Filters">
|
133
134
|
<d2l-filter-dimension-set key="course" text="Course" loading select-all></d2l-filter-dimension-set>
|
@@ -155,6 +156,21 @@
|
|
155
156
|
<d2l-filter-search-demo></d2l-filter-search-demo>
|
156
157
|
</template>
|
157
158
|
</d2l-demo-snippet>
|
159
|
+
|
160
|
+
<h2>Date Filter</h2>
|
161
|
+
<d2l-demo-snippet>
|
162
|
+
<template>
|
163
|
+
<d2l-filter id="filter-single">
|
164
|
+
<d2l-filter-dimension-set key="dates" text="Dates">
|
165
|
+
<d2l-filter-dimension-set-value key="lastweek" text="Last Week"></d2l-filter-dimension-set-value>
|
166
|
+
<d2l-filter-dimension-set-date-text-value key="lastHour" range="lastHour" selected></d2l-filter-dimension-set-date-text-value>
|
167
|
+
<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="14days" range="14days"></d2l-filter-dimension-set-date-text-value>
|
169
|
+
<d2l-filter-dimension-set-date-text-value key="6months" range="6months"></d2l-filter-dimension-set-date-text-value>
|
170
|
+
</d2l-filter-dimension-set>
|
171
|
+
</d2l-filter>
|
172
|
+
</template>
|
173
|
+
</d2l-demo-snippet>
|
158
174
|
</d2l-demo-page>
|
159
175
|
|
160
176
|
<script type="module">
|
@@ -0,0 +1,156 @@
|
|
1
|
+
import { getUTCDateTimeRange } from '../../helpers/dateTime.js';
|
2
|
+
import { LitElement } from 'lit';
|
3
|
+
import { LocalizeCoreElement } from '../../helpers/localize-core-element.js';
|
4
|
+
|
5
|
+
/**
|
6
|
+
* A component to represent a possible date value that can be selected for a dimension set (the main filter dimension type) for predefined date ranges.
|
7
|
+
* A range property is used to define the preset text shown, as well as the start and end date values formatted as UTC strings.
|
8
|
+
* This component does not render anything, but instead gathers data needed for the d2l-filter.
|
9
|
+
*/
|
10
|
+
class FilterDimensionSetDateTextValue extends LocalizeCoreElement(LitElement) {
|
11
|
+
|
12
|
+
static get properties() {
|
13
|
+
return {
|
14
|
+
/**
|
15
|
+
* Whether this value in the filter is disabled or not
|
16
|
+
* @type {boolean}
|
17
|
+
*/
|
18
|
+
disabled: { type: Boolean, reflect: true },
|
19
|
+
/**
|
20
|
+
* @ignore
|
21
|
+
*/
|
22
|
+
endValue: { type: String },
|
23
|
+
/**
|
24
|
+
* REQUIRED: Unique key to represent this value in the dimension
|
25
|
+
* @type {string}
|
26
|
+
*/
|
27
|
+
key: { type: String },
|
28
|
+
/**
|
29
|
+
* REQUIRED: The preset date/time range that the list item represents
|
30
|
+
* @type {'today'|'lastHour'|'24hours'|'48hours'|'7days'|'14days'|'30days'|'6months'}
|
31
|
+
*/
|
32
|
+
range: { type: String },
|
33
|
+
/**
|
34
|
+
* Whether this value in the filter is selected or not
|
35
|
+
* @type {boolean}
|
36
|
+
*/
|
37
|
+
selected: { type: Boolean, reflect: true },
|
38
|
+
/**
|
39
|
+
* @ignore
|
40
|
+
*/
|
41
|
+
startValue: { type: String },
|
42
|
+
/**
|
43
|
+
* @ignore
|
44
|
+
*/
|
45
|
+
text: { type: String, reflect: true }
|
46
|
+
};
|
47
|
+
}
|
48
|
+
|
49
|
+
constructor() {
|
50
|
+
super();
|
51
|
+
this.disabled = false;
|
52
|
+
this.selected = false;
|
53
|
+
this.text = '';
|
54
|
+
this._enforceSingleSelection = true;
|
55
|
+
this._filterSetValue = true;
|
56
|
+
this._noSearchSupport = true;
|
57
|
+
}
|
58
|
+
|
59
|
+
firstUpdated(changedProperties) {
|
60
|
+
super.firstUpdated(changedProperties);
|
61
|
+
|
62
|
+
if (this.selected && this.range) {
|
63
|
+
// if the value is initially selected, startValue and endValue should be set in case used by consumer
|
64
|
+
const dateTimeRange = getUTCDateTimeRange(this._rangeDetails?.rangeType, this._rangeDetails?.rangeNum);
|
65
|
+
this.startValue = dateTimeRange?.startValue;
|
66
|
+
this.endValue = dateTimeRange?.endValue;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
updated(changedProperties) {
|
71
|
+
super.updated(changedProperties);
|
72
|
+
|
73
|
+
const changes = new Map();
|
74
|
+
changedProperties.forEach((oldValue, prop) => {
|
75
|
+
if (oldValue === undefined && prop !== 'text') return;
|
76
|
+
|
77
|
+
if (prop === 'disabled' || prop === 'selected' || prop === 'text') {
|
78
|
+
changes.set(prop, this[prop]);
|
79
|
+
} else if (prop === 'range') {
|
80
|
+
changes.set('rangeType', this._rangeDetails?.rangeType);
|
81
|
+
changes.set('rangeNum', this._rangeDetails?.rangeNum);
|
82
|
+
}
|
83
|
+
});
|
84
|
+
if (changes.size > 0) {
|
85
|
+
/** @ignore */
|
86
|
+
this.dispatchEvent(new CustomEvent('d2l-filter-dimension-set-value-data-change', {
|
87
|
+
detail: { valueKey: this.key, changes: changes },
|
88
|
+
bubbles: true,
|
89
|
+
composed: false
|
90
|
+
}));
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
willUpdate(changedProperties) {
|
95
|
+
super.willUpdate(changedProperties);
|
96
|
+
|
97
|
+
if (changedProperties.has('range')) this._handleRangeUpdated();
|
98
|
+
}
|
99
|
+
|
100
|
+
getValueDetails() {
|
101
|
+
this._handleRangeUpdated();
|
102
|
+
|
103
|
+
return {
|
104
|
+
disabled: this.disabled,
|
105
|
+
key: this.key,
|
106
|
+
selected: this.selected,
|
107
|
+
text: this.text,
|
108
|
+
getAdditionalEventDetails: this._getAdditionalEventDetails.bind(this)
|
109
|
+
};
|
110
|
+
}
|
111
|
+
|
112
|
+
_getAdditionalEventDetails(selected) {
|
113
|
+
if (!selected) return {};
|
114
|
+
const dateTimeRange = getUTCDateTimeRange(this._rangeDetails?.rangeType, this._rangeDetails?.rangeNum);
|
115
|
+
return { startValue: dateTimeRange.startValue, endValue: dateTimeRange.endValue };
|
116
|
+
}
|
117
|
+
|
118
|
+
_handleRangeUpdated() {
|
119
|
+
switch (this.range) {
|
120
|
+
case 'today':
|
121
|
+
this._rangeDetails = { rangeType: 'days', rangeNum: 0 };
|
122
|
+
break;
|
123
|
+
case 'lastHour':
|
124
|
+
this._rangeDetails = { rangeType: 'hours', rangeNum: -1 };
|
125
|
+
break;
|
126
|
+
case '24hours':
|
127
|
+
this._rangeDetails = { rangeType: 'hours', rangeNum: -24 };
|
128
|
+
break;
|
129
|
+
case '48hours':
|
130
|
+
this._rangeDetails = { rangeType: 'hours', rangeNum: -48 };
|
131
|
+
break;
|
132
|
+
case '7days':
|
133
|
+
this._rangeDetails = { rangeType: 'days', rangeNum: -7 };
|
134
|
+
break;
|
135
|
+
case '14days':
|
136
|
+
this._rangeDetails = { rangeType: 'days', rangeNum: -14 };
|
137
|
+
break;
|
138
|
+
case '30days':
|
139
|
+
this._rangeDetails = { rangeType: 'days', rangeNum: -30 };
|
140
|
+
break;
|
141
|
+
case '6months':
|
142
|
+
this._rangeDetails = { rangeType: 'months', rangeNum: -6 };
|
143
|
+
break;
|
144
|
+
default:
|
145
|
+
console.warn('d2l-filter-dimension-set-date-text-value: Invalid range value');
|
146
|
+
this._rangeDetails = {};
|
147
|
+
break;
|
148
|
+
}
|
149
|
+
|
150
|
+
if (this._rangeDetails.rangeType === 'hours') this.text = this.localize('components.filter-dimension-set-date-text-value.textHours', { num: Math.abs(this._rangeDetails.rangeNum) });
|
151
|
+
else if (this._rangeDetails.rangeType === 'days') this.text = this.localize('components.filter-dimension-set-date-text-value.textDays', { num: Math.abs(this._rangeDetails.rangeNum) });
|
152
|
+
else if (this._rangeDetails.rangeType === 'months') this.text = this.localize('components.filter-dimension-set-date-text-value.textMonths', { num: Math.abs(this._rangeDetails.rangeNum) });
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
customElements.define('d2l-filter-dimension-set-date-text-value', FilterDimensionSetDateTextValue);
|
@@ -41,6 +41,9 @@ class FilterDimensionSetValue extends LitElement {
|
|
41
41
|
this.disabled = false;
|
42
42
|
this.selected = false;
|
43
43
|
this.text = '';
|
44
|
+
this._enforceSingleSelection = false;
|
45
|
+
this._filterSetValue = true;
|
46
|
+
this._noSearchSupport = false;
|
44
47
|
}
|
45
48
|
|
46
49
|
get count() {
|
@@ -78,6 +81,16 @@ class FilterDimensionSetValue extends LitElement {
|
|
78
81
|
}));
|
79
82
|
}
|
80
83
|
}
|
84
|
+
|
85
|
+
getValueDetails() {
|
86
|
+
return {
|
87
|
+
count: this.count,
|
88
|
+
disabled: this.disabled,
|
89
|
+
key: this.key,
|
90
|
+
selected: this.selected,
|
91
|
+
text: this.text
|
92
|
+
};
|
93
|
+
}
|
81
94
|
}
|
82
95
|
|
83
96
|
customElements.define('d2l-filter-dimension-set-value', FilterDimensionSetValue);
|
@@ -136,15 +136,16 @@ class FilterDimensionSet extends LitElement {
|
|
136
136
|
|
137
137
|
getValues() {
|
138
138
|
const valueNodes = this._getSlottedNodes();
|
139
|
+
let noSearchSupport = false;
|
140
|
+
let enforceSingleSelection = false;
|
139
141
|
const values = valueNodes.map(value => {
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
selected: value.selected,
|
145
|
-
text: value.text
|
146
|
-
};
|
142
|
+
if (value._noSearchSupport) noSearchSupport = true;
|
143
|
+
if (value._enforceSingleSelection) enforceSingleSelection = true;
|
144
|
+
|
145
|
+
return value.getValueDetails();
|
147
146
|
});
|
147
|
+
if (noSearchSupport) this.searchType = 'none';
|
148
|
+
if (enforceSingleSelection) this.selectionSingle = true;
|
148
149
|
return values;
|
149
150
|
}
|
150
151
|
|
@@ -173,7 +174,10 @@ class FilterDimensionSet extends LitElement {
|
|
173
174
|
_getSlottedNodes() {
|
174
175
|
if (!this._slot) return [];
|
175
176
|
const nodes = this._slot.assignedNodes({ flatten: true });
|
176
|
-
return nodes.filter((node) =>
|
177
|
+
return nodes.filter((node) => {
|
178
|
+
if (node.nodeType !== Node.ELEMENT_NODE) return false;
|
179
|
+
return node._filterSetValue;
|
180
|
+
});
|
177
181
|
}
|
178
182
|
|
179
183
|
_handleDimensionSetValueDataChange(e) {
|
@@ -686,7 +686,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
686
686
|
_handleDimensionDataChange(e) {
|
687
687
|
const changes = e.detail.changes;
|
688
688
|
const dimension = this._getDimensionByKey(e.detail.dimensionKey);
|
689
|
-
const value = e.detail.valueKey && dimension
|
689
|
+
const value = e.detail.valueKey && dimension?.values.find(value => value.key === e.detail.valueKey);
|
690
690
|
const toUpdate = e.detail.valueKey ? value : dimension;
|
691
691
|
|
692
692
|
if (!toUpdate) return;
|
@@ -869,7 +869,11 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
|
|
869
869
|
this._totalAppliedCount--;
|
870
870
|
}
|
871
871
|
|
872
|
-
|
872
|
+
const details = { valueKey: valueKey, selected: selected };
|
873
|
+
|
874
|
+
if (value.getAdditionalEventDetails) Object.assign(details, value.getAdditionalEventDetails(selected));
|
875
|
+
|
876
|
+
this._dispatchChangeEvent(dimension, details);
|
873
877
|
}
|
874
878
|
|
875
879
|
_performDimensionClear(dimension) {
|
package/custom-elements.json
CHANGED
@@ -3802,6 +3802,72 @@
|
|
3802
3802
|
"name": "d2l-filter-search-demo",
|
3803
3803
|
"path": "./components/filter/demo/filter-search-demo.js"
|
3804
3804
|
},
|
3805
|
+
{
|
3806
|
+
"name": "d2l-filter-dimension-set-date-text-value",
|
3807
|
+
"path": "./components/filter/filter-dimension-set-date-text-value.js",
|
3808
|
+
"description": "A component to represent a possible date value that can be selected for a dimension set (the main filter dimension type) for predefined date ranges.\nA range property is used to define the preset text shown, as well as the start and end date values formatted as UTC strings.\nThis component does not render anything, but instead gathers data needed for the d2l-filter.",
|
3809
|
+
"attributes": [
|
3810
|
+
{
|
3811
|
+
"name": "key",
|
3812
|
+
"description": "REQUIRED: Unique key to represent this value in the dimension",
|
3813
|
+
"type": "string"
|
3814
|
+
},
|
3815
|
+
{
|
3816
|
+
"name": "range",
|
3817
|
+
"description": "REQUIRED: The preset date/time range that the list item represents",
|
3818
|
+
"type": "'today'|'lastHour'|'24hours'|'48hours'|'7days'|'14days'|'30days'|'6months'"
|
3819
|
+
},
|
3820
|
+
{
|
3821
|
+
"name": "disabled",
|
3822
|
+
"description": "Whether this value in the filter is disabled or not",
|
3823
|
+
"type": "boolean",
|
3824
|
+
"default": "false"
|
3825
|
+
},
|
3826
|
+
{
|
3827
|
+
"name": "selected",
|
3828
|
+
"description": "Whether this value in the filter is selected or not",
|
3829
|
+
"type": "boolean",
|
3830
|
+
"default": "false"
|
3831
|
+
}
|
3832
|
+
],
|
3833
|
+
"properties": [
|
3834
|
+
{
|
3835
|
+
"name": "key",
|
3836
|
+
"attribute": "key",
|
3837
|
+
"description": "REQUIRED: Unique key to represent this value in the dimension",
|
3838
|
+
"type": "string"
|
3839
|
+
},
|
3840
|
+
{
|
3841
|
+
"name": "range",
|
3842
|
+
"attribute": "range",
|
3843
|
+
"description": "REQUIRED: The preset date/time range that the list item represents",
|
3844
|
+
"type": "'today'|'lastHour'|'24hours'|'48hours'|'7days'|'14days'|'30days'|'6months'"
|
3845
|
+
},
|
3846
|
+
{
|
3847
|
+
"name": "disabled",
|
3848
|
+
"attribute": "disabled",
|
3849
|
+
"description": "Whether this value in the filter is disabled or not",
|
3850
|
+
"type": "boolean",
|
3851
|
+
"default": "false"
|
3852
|
+
},
|
3853
|
+
{
|
3854
|
+
"name": "selected",
|
3855
|
+
"attribute": "selected",
|
3856
|
+
"description": "Whether this value in the filter is selected or not",
|
3857
|
+
"type": "boolean",
|
3858
|
+
"default": "false"
|
3859
|
+
},
|
3860
|
+
{
|
3861
|
+
"name": "text",
|
3862
|
+
"type": "string",
|
3863
|
+
"default": "\"\""
|
3864
|
+
},
|
3865
|
+
{
|
3866
|
+
"name": "documentLocaleSettings",
|
3867
|
+
"default": "\"getDocumentLocaleSettings()\""
|
3868
|
+
}
|
3869
|
+
]
|
3870
|
+
},
|
3805
3871
|
{
|
3806
3872
|
"name": "d2l-filter-dimension-set-empty-state",
|
3807
3873
|
"path": "./components/filter/filter-dimension-set-empty-state.js",
|
package/helpers/dateTime.js
CHANGED
@@ -161,6 +161,53 @@ export function getUTCDateTimeFromLocalDateTime(date, time) {
|
|
161
161
|
return formatDateTimeInISO(utcDateTime);
|
162
162
|
}
|
163
163
|
|
164
|
+
export function getUTCDateTimeRange(type, diff) {
|
165
|
+
if (!type || (!diff && diff !== 0) || (diff === 0 && type !== 'days')) return {};
|
166
|
+
if (type !== 'seconds' && type !== 'minutes' && type !== 'hours' && type !== 'days' && type !== 'months' && type !== 'years') return {};
|
167
|
+
|
168
|
+
if (type === 'days' && diff === 0) {
|
169
|
+
// assume "today" (midnight in user's time to 23:59:59 in user's time)
|
170
|
+
const today = formatDateInISO(getToday());
|
171
|
+
const startValue = getUTCDateTimeFromLocalDateTime(today, '0:0:0');
|
172
|
+
const endValue = getUTCDateTimeFromLocalDateTime(today, '23:59:59');
|
173
|
+
return { startValue, endValue };
|
174
|
+
}
|
175
|
+
|
176
|
+
/**
|
177
|
+
* If diff is positive, range is in the future. Start date is now and end date is in the future.
|
178
|
+
* If diff is negative, range is in the past. End date is now and start date is in the past.
|
179
|
+
*/
|
180
|
+
|
181
|
+
const rangeDate = new Date();
|
182
|
+
const nowUTCString = rangeDate.toISOString();
|
183
|
+
|
184
|
+
if (type === 'seconds') {
|
185
|
+
const newSeconds = rangeDate.getUTCSeconds() + diff;
|
186
|
+
rangeDate.setUTCSeconds(newSeconds);
|
187
|
+
} else if (type === 'minutes') {
|
188
|
+
const newMinutes = rangeDate.getUTCMinutes() + diff;
|
189
|
+
rangeDate.setUTCMinutes(newMinutes);
|
190
|
+
} else if (type === 'hours') {
|
191
|
+
const newHours = rangeDate.getUTCHours() + diff;
|
192
|
+
rangeDate.setUTCHours(newHours);
|
193
|
+
} else if (type === 'days') {
|
194
|
+
const newDate = rangeDate.getUTCDate() + diff;
|
195
|
+
rangeDate.setUTCDate(newDate);
|
196
|
+
} else if (type === 'months') {
|
197
|
+
const newMonth = rangeDate.getUTCMonth() + diff;
|
198
|
+
rangeDate.setUTCMonth(newMonth);
|
199
|
+
} else if (type === 'years') {
|
200
|
+
const newYear = rangeDate.getUTCFullYear() + diff;
|
201
|
+
rangeDate.setUTCFullYear(newYear);
|
202
|
+
}
|
203
|
+
|
204
|
+
if (diff > 0) {
|
205
|
+
return { startValue: nowUTCString, endValue: rangeDate.toISOString() };
|
206
|
+
} else {
|
207
|
+
return { startValue: rangeDate.toISOString(), endValue: nowUTCString };
|
208
|
+
}
|
209
|
+
}
|
210
|
+
|
164
211
|
export function isDateInRange(date, min, max) {
|
165
212
|
if (!date) return false;
|
166
213
|
const afterMin = !min || (min && date.getTime() >= min.getTime());
|
package/helpers/error.js
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
import { getComposedParent } from './dom.js';
|
2
2
|
|
3
|
+
const numParentLevels = 10;
|
4
|
+
|
3
5
|
function getComposedPath(elem, opts) {
|
4
6
|
|
5
7
|
if (!opts?.composedPath) return '';
|
6
8
|
|
7
9
|
const composedParents = [];
|
8
|
-
let parent = elem;
|
10
|
+
let parent = getComposedParent(elem);
|
9
11
|
while (parent !== null && parent?.tagName?.toLowerCase() !== 'body') {
|
10
12
|
if (parent?.tagName) {
|
11
13
|
composedParents.push(parent.tagName.toLowerCase());
|
@@ -15,8 +17,8 @@ function getComposedPath(elem, opts) {
|
|
15
17
|
|
16
18
|
if (composedParents.length === 0) return '';
|
17
19
|
|
18
|
-
composedParents.
|
19
|
-
const path = `
|
20
|
+
const slicedParents = composedParents.slice(0, numParentLevels);
|
21
|
+
const path = ` ${slicedParents.length} parent nodes: "${slicedParents.join(', ')}".`;
|
20
22
|
return path;
|
21
23
|
|
22
24
|
}
|
package/lang/ar.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {ما من نتائج بحث} one {{number} نتيجة بحث} other {{number} من نتائج البحث}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. تظهر عوامل التصفية المحددة أولاً.",
|
27
27
|
"components.filter.singleDimensionDescription": "التصفية حسب: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} غير صالحة.",
|
29
32
|
"components.form-element.defaultFieldLabel": "الحقل",
|
30
33
|
"components.form-element.input.email.typeMismatch": "البريد الإلكتروني غير صالح",
|
package/lang/cy.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Dim canlyniadau chwilio} one {{number} canlyniad chwilio} other {{number} canlyniadau chwilio}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Mae'r hidlyddion a ddewiswyd yn ymddangos gyntaf.",
|
27
27
|
"components.filter.singleDimensionDescription": "Hidlo yn ôl: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "Mae {label} yn annilys.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Maes",
|
30
33
|
"components.form-element.input.email.typeMismatch": "Nid yw'r e-bost yn ddilys",
|
package/lang/da.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Ingen søgeresultater} one {{number} søgeresultat} other {{number} søgeresultater}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Valgte filtre vises først.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtrer efter: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} er ugyldigt.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Felt",
|
30
33
|
"components.form-element.input.email.typeMismatch": "E-mail er ikke gyldig",
|
package/lang/de.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Kein Suchergebnis} one {{number} Suchergebnis} other {{number} Suchergebnisse}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Ausgewählte Filter werden zuerst angezeigt.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtern nach: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} ist ungültig.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Feld",
|
30
33
|
"components.form-element.input.email.typeMismatch": "Die E-Mail-Adresse ist ungültig",
|
package/lang/en-gb.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {No search results} one {{number} search result} other {{number} search results}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Selected filters appear first.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filter by: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} is invalid.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Field",
|
30
33
|
"components.form-element.input.email.typeMismatch": "Email is not valid",
|
package/lang/en.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {No search results} one {{number} search result} other {{number} search results}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Selected filters appear first.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filter by: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} is invalid.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Field",
|
30
33
|
"components.form-element.input.email.typeMismatch": "Email is not valid",
|
package/lang/es-es.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {No hay resultados de búsqueda} one {{number} resultado de búsqueda} other {{number} resultados de búsqueda}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Los filtros seleccionados aparecen primero.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtrar por: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} no es válido.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Campo",
|
30
33
|
"components.form-element.input.email.typeMismatch": "El correo electrónico no es válido",
|
package/lang/es.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {No se encontraron resultados de búsqueda} one {{number} resultado de búsqueda} other {{number} resultados de búsqueda}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Los filtros seleccionados aparecen primero.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtrar por: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} no es válida.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Campo",
|
30
33
|
"components.form-element.input.email.typeMismatch": "El correo electrónico no es válido",
|
package/lang/fr-fr.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Aucun résultat de recherche} one {{number} résultat de recherche} other {{number} résultats de recherche}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Les filtres sélectionnés s’affichent en premier.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtrer par : {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} n'est pas valide.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Champ",
|
30
33
|
"components.form-element.input.email.typeMismatch": "L'adresse e-mail n'est pas valide.",
|
package/lang/fr.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Aucun résultat de recherche} one {{number} résultat de recherche} other {{number} résultats de recherche}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Les filtres sélectionnés s’affichent en premier.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtrer par : {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} n'est pas valide.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Champ",
|
30
33
|
"components.form-element.input.email.typeMismatch": "L'adresse courriel n'est pas valide",
|
package/lang/hi.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {कोई खोज परिणाम नहीं} one {{number} खोज परिणाम} other {{number} खोज परिणाम}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. चुने गए फ़िल्टर सबसे पहले दिखाई देते हैं।",
|
27
27
|
"components.filter.singleDimensionDescription": "इसके अनुसार फ़िल्टर करें: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} अमान्य है।",
|
29
32
|
"components.form-element.defaultFieldLabel": "फ़ील्ड",
|
30
33
|
"components.form-element.input.email.typeMismatch": "ईमेल मान्य नहीं है",
|
package/lang/ja.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {検索結果なし} other {{number} 件の検索結果}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}。選択したフィルタが最初に表示されます。",
|
27
27
|
"components.filter.singleDimensionDescription": "フィルタ条件: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} は無効です。",
|
29
32
|
"components.form-element.defaultFieldLabel": "フィールド",
|
30
33
|
"components.form-element.input.email.typeMismatch": "電子メールが無効です",
|
package/lang/ko.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {검색 결과 없음} other {{number}개 검색 결과}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. 선택한 필터가 먼저 나타납니다.",
|
27
27
|
"components.filter.singleDimensionDescription": "필터 기준: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label}이(가) 잘못되었습니다.",
|
29
32
|
"components.form-element.defaultFieldLabel": "필드",
|
30
33
|
"components.form-element.input.email.typeMismatch": "이메일이 유효하지 않습니다.",
|
package/lang/nl.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Geen zoekresultaten} one {{number} zoekresultaat} other {{number} zoekresultaten}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Geselecteerde filters verschijnen als eerste.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filter op {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} is ongeldig.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Veld",
|
30
33
|
"components.form-element.input.email.typeMismatch": "E-mailadres is ongeldig",
|
package/lang/pt.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Sem resultados para a pesquisa} one {{number} resultado para a pesquisa} other {{number} resultados para a pesquisa}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Os filtros selecionados aparecem primeiro.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtrar por: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} é inválido.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Campo",
|
30
33
|
"components.form-element.input.email.typeMismatch": "E-mail inválido",
|
package/lang/sv.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Inga sökresultat} one {{number} sökresultat} other {{number} sökresultat}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Valda filter visas först.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtrera efter: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} är ogiltig.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Fält",
|
30
33
|
"components.form-element.input.email.typeMismatch": "E-postadressen är ogiltig",
|
package/lang/tr.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {Arama sonucu yok} one {{number} arama sonucu} other {{number} arama sonucu}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}. Seçilen filtreler önce görünür.",
|
27
27
|
"components.filter.singleDimensionDescription": "Filtreleme ölçütü: {filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, one {Last hour} other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} one {Last {num} days} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} geçersiz.",
|
29
32
|
"components.form-element.defaultFieldLabel": "Alan",
|
30
33
|
"components.form-element.input.email.typeMismatch": "E-posta geçerli değil",
|
package/lang/zh-cn.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {无搜索结果} other {{number} 个搜索结果}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}。先显示所选筛选器。",
|
27
27
|
"components.filter.singleDimensionDescription": "筛选依据:{filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} 无效。",
|
29
32
|
"components.form-element.defaultFieldLabel": "字段",
|
30
33
|
"components.form-element.input.email.typeMismatch": "电子邮件无效",
|
package/lang/zh-tw.js
CHANGED
@@ -25,6 +25,9 @@ export default {
|
|
25
25
|
"components.filter.searchResults": "{number, plural, =0 {無搜尋結果} other {{number} 個搜尋結果}}",
|
26
26
|
"components.filter.selectedFirstListLabel": "{headerText}。所選篩選器會先顯示。",
|
27
27
|
"components.filter.singleDimensionDescription": "按此條件篩選:{filterName}",
|
28
|
+
"components.filter-dimension-set-date-text-value.textHours": "{num, plural, other {Last {num} hours}}",
|
29
|
+
"components.filter-dimension-set-date-text-value.textDays": "{num, plural, =0 {Today} other {Last {num} days}}",
|
30
|
+
"components.filter-dimension-set-date-text-value.textMonths": "Last {num} months",
|
28
31
|
"components.form-element.defaultError": "{label} 無效。",
|
29
32
|
"components.form-element.defaultFieldLabel": "欄位",
|
30
33
|
"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.9.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",
|