@brightspace-ui/core 3.21.1 → 3.21.3

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.
@@ -70,7 +70,7 @@ class FilterDimensionSetDateTimeRangeValue extends LocalizeCoreElement(LitElemen
70
70
  this._dispatchFilterChangeEvent = false;
71
71
  this._enforceSingleSelection = true;
72
72
  this._filterSetValue = true;
73
- this._minWidth = 375;
73
+ this._minWidth = 390;
74
74
  this._noSearchSupport = true;
75
75
 
76
76
  this._handleDateChange = this._handleDateChange.bind(this);
@@ -149,6 +149,9 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
149
149
  margin-inline-start: -2rem;
150
150
  padding-block: 0.5rem;
151
151
  }
152
+ d2l-list-item.expanding-content {
153
+ overflow-y: hidden;
154
+ }
152
155
 
153
156
  .d2l-filter-dimension-set-value-text {
154
157
  -webkit-box-orient: vertical;
@@ -605,7 +608,10 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
605
608
  : nothing}
606
609
  </div>
607
610
  ${item.additionalContent ? html`
608
- <d2l-expand-collapse-content ?expanded="${item.selected}">
611
+ <d2l-expand-collapse-content
612
+ ?expanded="${item.selected}"
613
+ @d2l-expand-collapse-content-collapse="${this._handleExpandCollapse}"
614
+ @d2l-expand-collapse-content-expand="${this._handleExpandCollapse}">
609
615
  ${item.additionalContent()}
610
616
  </d2l-expand-collapse-content>
611
617
  ` : nothing}
@@ -841,6 +847,15 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
841
847
  ));
842
848
  }
843
849
 
850
+ async _handleExpandCollapse(e) {
851
+ const eventPromise = e.target.expanded ? e.detail.expandComplete : e.detail.collapseComplete;
852
+ const parentListItem = e.target.closest('d2l-list-item');
853
+ parentListItem.classList.add('expanding-content');
854
+
855
+ await eventPromise;
856
+ parentListItem.classList.remove('expanding-content');
857
+ }
858
+
844
859
  _handleSearch(e) {
845
860
  const dimension = this._getActiveDimension();
846
861
  const searchValue = e.detail.value.trim();
@@ -41,65 +41,48 @@ class InputDateTimeRangeTo extends SkeletonMixin(LocalizeCoreElement(LitElement)
41
41
  :host([top-margin]) {
42
42
  margin-top: calc(0.9rem - 7px);
43
43
  }
44
+ :host(:not([display-to])) .d2l-input-date-time-range-to-to {
45
+ display: none;
46
+ }
44
47
 
48
+ /* flex case (not wrapped) */
45
49
  .d2l-input-date-time-range-to-container {
50
+ column-gap: 1.5rem;
46
51
  display: flex;
47
52
  flex-wrap: wrap;
48
- margin-bottom: -1.2rem;
49
53
  }
54
+ :host([display-to]) div:not(.d2l-input-date-time-range-to-container-block).d2l-input-date-time-range-to-container {
55
+ column-gap: 0.9rem;
56
+ }
57
+ .d2l-input-date-time-range-end-container {
58
+ display: flex;
59
+ }
60
+ .d2l-input-date-time-range-end-container ::slotted(*) {
61
+ align-self: flex-end;
62
+ }
63
+
64
+ /* block case (wrapped) */
50
65
  .d2l-input-date-time-range-to-container-block.d2l-input-date-time-range-to-container {
51
66
  display: block;
67
+ margin-bottom: -1.2rem;
52
68
  }
53
-
54
- .d2l-input-date-time-range-start-container {
69
+ .d2l-input-date-time-range-to-container-block .d2l-input-date-time-range-start-container {
55
70
  margin-bottom: 1.2rem;
56
- margin-right: 1.5rem;
57
- }
58
- :host([dir="rtl"]) .d2l-input-date-time-range-start-container {
59
- margin-left: 1.5rem;
60
- margin-right: 0;
71
+ margin-inline: 0;
61
72
  }
62
- :host([display-to]) .d2l-input-date-time-range-start-container {
73
+ :host([display-to]) .d2l-input-date-time-range-to-container-block .d2l-input-date-time-range-start-container {
63
74
  margin-bottom: 0.6rem;
64
75
  }
65
- :host([display-to]) div:not(.d2l-input-date-time-range-to-container-block) > .d2l-input-date-time-range-start-container {
66
- margin-right: 0.9rem;
67
- }
68
- :host([display-to][dir="rtl"]) div:not(.d2l-input-date-time-range-to-container-block) > .d2l-input-date-time-range-start-container {
69
- margin-left: 0.9rem;
70
- margin-right: 0;
71
- }
72
- .d2l-input-date-time-range-to-container-block .d2l-input-date-time-range-start-container,
73
- :host([dir="rtl"]) .d2l-input-date-time-range-to-container-block .d2l-input-date-time-range-start-container {
74
- margin-left: 0;
75
- margin-right: 0;
76
- }
77
-
78
- :host(:not([display-to])) .d2l-input-date-time-range-to-to {
79
- display: none;
76
+ .d2l-input-date-time-range-to-container-block .d2l-input-date-time-range-end-container {
77
+ display: block;
78
+ margin-bottom: 1.2rem;
80
79
  }
81
- .d2l-input-date-time-range-to-to {
80
+ .d2l-input-date-time-range-to-container-block .d2l-input-date-time-range-to-to {
82
81
  display: inline-block;
83
82
  margin-bottom: 0.6rem;
84
- margin-right: 0.9rem;
85
83
  margin-top: auto;
86
84
  vertical-align: top;
87
85
  }
88
- :host([dir="rtl"]) .d2l-input-date-time-range-to-to {
89
- margin-left: 0.9rem;
90
- margin-right: 0;
91
- }
92
-
93
- .d2l-input-date-time-range-end-container {
94
- display: flex;
95
- margin-bottom: 1.2rem;
96
- }
97
- .d2l-input-date-time-range-to-container-block .d2l-input-date-time-range-end-container {
98
- display: block;
99
- }
100
- .d2l-input-date-time-range-end-container ::slotted(*) {
101
- align-self: flex-end;
102
- }
103
86
  `];
104
87
  }
105
88
 
@@ -131,10 +114,10 @@ class InputDateTimeRangeTo extends SkeletonMixin(LocalizeCoreElement(LitElement)
131
114
  <div class="d2l-input-date-time-range-start-container">
132
115
  <slot name="left"></slot>
133
116
  </div>
134
- <div class="d2l-input-date-time-range-end-container">
135
117
  <div class="d2l-body-small d2l-skeletize d2l-input-date-time-range-to-to">
136
118
  ${this.localize('components.input-date-time-range-to.to')}
137
119
  </div>
120
+ <div class="d2l-input-date-time-range-end-container">
138
121
  <slot name="right"></slot>
139
122
  </div>
140
123
  </div>
@@ -56,7 +56,8 @@ class MeterCircle extends MeterMixin(RtlMixin(LitElement)) {
56
56
  const dashOffset = 7 * Math.PI * 2 - 10; // approximation perimeter of circle divide by 3 subtract the rounded edges (5 pixels each)
57
57
 
58
58
  const primary = this._primary(this.value, this.max) || '';
59
- const secondary = this._secondary(this.value, this.max, this.text);
59
+ const primaryAria = this._primary(this.value, this.max, true) || '';
60
+ const secondaryAria = this._secondary(this.value, this.max, this.text, true);
60
61
  const textClasses = {
61
62
  'd2l-meter-circle-text-ltr': !this.percent,
62
63
  'd2l-body-standard': true,
@@ -64,7 +65,7 @@ class MeterCircle extends MeterMixin(RtlMixin(LitElement)) {
64
65
  };
65
66
 
66
67
  return html`
67
- <svg viewBox="0 0 48 48" shape-rendering="geometricPrecision" role="img" aria-label="${this._ariaLabel(primary, secondary)}">
68
+ <svg viewBox="0 0 48 48" shape-rendering="geometricPrecision" role="img" aria-label="${this._ariaLabel(primaryAria, secondaryAria)}">
68
69
  <circle class="d2l-meter-circle-full-bar" cx="24" cy="24" r="21"></circle>
69
70
  <circle
70
71
  class="d2l-meter-circle-progress-bar"
@@ -112,6 +112,8 @@ class MeterLinear extends MeterMixin(RtlMixin(LitElement)) {
112
112
  }
113
113
  const primary = this._primary(this.value, this.max);
114
114
  const secondary = this._secondary(this.value, this.max, this.text);
115
+ const primaryAria = this._primary(this.value, this.max, true);
116
+ const secondaryAria = this._secondary(this.value, this.max, this.text, true);
115
117
  const textClasses = {
116
118
  'd2l-meter-linear-text-space-between': !this.textInline && secondary !== this.text,
117
119
  'd2l-body-small': true,
@@ -126,7 +128,7 @@ class MeterLinear extends MeterMixin(RtlMixin(LitElement)) {
126
128
  return html `
127
129
  <div
128
130
  role="img"
129
- aria-label="${this._ariaLabel(primary, secondary)}">
131
+ aria-label="${this._ariaLabel(primaryAria, secondaryAria)}">
130
132
  <div class="d2l-meter-linear-full-bar">
131
133
  <div class="d2l-meter-linear-inner-bar" style="width:${percentage}%;"></div>
132
134
  </div>
@@ -40,26 +40,31 @@ export const MeterMixin = superclass => class extends LocalizeCoreElement(superc
40
40
  }
41
41
 
42
42
  _ariaLabel(primary, secondary) {
43
- const mainLabel = this.localize(`${this._namespace}.commaSeperatedAria`, 'term1', primary, 'term2', this.localize(`${this._namespace}.progressIndicator`));
44
- return secondary ? this.localize(`${this._namespace}.commaSeperatedAria`, 'term1', secondary, 'term2', mainLabel) : mainLabel;
43
+ // todo: these should be using CLDR data/patterns instead of translated message fragments
44
+ // example: https://www.unicode.org/cldr/cldr-aux/charts/37/summary/en.html#4480e9e541ba33de
45
+ const mainLabel = this.localize(`${this._namespace}.commaSeperatedAria`, { term1: primary, term2: this.localize(`${this._namespace}.progressIndicator`) });
46
+ return secondary ? this.localize(`${this._namespace}.commaSeperatedAria`, { term1: secondary, term2: mainLabel }) : mainLabel;
45
47
  }
46
48
 
47
- _primary(value, max) {
49
+ _primary(value, max, aria = false) {
48
50
  const percentage = max > 0 ? value / max : 0;
51
+ const key = aria ? 'fractionAria' : 'fraction';
49
52
 
50
53
  return this.percent
51
54
  ? formatPercent(percentage, { maximumFractionDigits: 0 })
52
- : this.localize(`${this._namespace}.fraction`, 'x', value, 'y', max);
55
+ : this.localize(`${this._namespace}.${key}`, { x: value, y: max });
53
56
  }
54
57
 
55
- _secondary(value, max, context) {
58
+ _secondary(value, max, context, aria = false) {
56
59
  if (!context) {
57
60
  return '';
58
61
  }
59
62
 
63
+ const key = aria ? 'fractionAria' : 'fraction';
64
+
60
65
  const percentage = this.max > 0 ? value / max : 0;
61
66
  context = context.replace('{%}', formatPercent(percentage, { maximumFractionDigits: 0 }));
62
- context = context.replace('{x/y}', this.localize(`${this._namespace}.fraction`, 'x', value, 'y', max));
67
+ context = context.replace('{x/y}', this.localize(`${this._namespace}.${key}`, { x: value, y: max }));
63
68
  context = context.replace('{x}', value);
64
69
  context = context.replace('{y}', max);
65
70
 
@@ -61,6 +61,8 @@ class MeterRadial extends MeterMixin(RtlMixin(LitElement)) {
61
61
  const progressFill = percent * lengthOfLine;
62
62
  const primary = this._primary(this.value, this.max);
63
63
  const secondary = this._secondary(this.value, this.max, this.text);
64
+ const primaryAria = this._primary(this.value, this.max, true) || '';
65
+ const secondaryAria = this._secondary(this.value, this.max, this.text, true) || '';
64
66
  const secondaryTextElement = this.text ? html`<div class="d2l-body-small d2l-meter-radial-text">${secondary}</div>` : nothing;
65
67
  const textClasses = {
66
68
  'd2l-meter-radial-text-ltr': !this.percent,
@@ -72,7 +74,7 @@ class MeterRadial extends MeterMixin(RtlMixin(LitElement)) {
72
74
  <div
73
75
  class="d2l-meter-radial"
74
76
  role="img"
75
- aria-label="${this._ariaLabel(primary, secondary)}">
77
+ aria-label="${this._ariaLabel(primaryAria, secondaryAria)}">
76
78
  <svg viewBox="0 0 84 46">
77
79
  <path class="d2l-meter-radial-full-bar" d="M5 40a37 35 0 0 1 74 0" />
78
80
  <path
@@ -25,9 +25,9 @@
25
25
  <d2l-button-subtle id="close1" text="Close"></d2l-button-subtle>
26
26
  </d2l-test-popover>
27
27
  <script>
28
- const popover = document.querySelector('#popover1');
29
- document.querySelector('#open1').addEventListener('click', () => popover.opened = true);
30
- document.querySelector('#close1').addEventListener('click', () => popover.opened = false);
28
+ const popover1 = document.querySelector('#popover1');
29
+ document.querySelector('#open1').addEventListener('click', () => popover1.opened = !popover1.opened);
30
+ document.querySelector('#close1').addEventListener('click', () => popover1.opened = false);
31
31
  </script>
32
32
  </template>
33
33
  </d2l-demo-snippet>
@@ -1,5 +1,7 @@
1
1
  import '../colors/colors.js';
2
2
  import { css, html } from 'lit';
3
+ import { getComposedActiveElement, getPreviousFocusableAncestor } from '../../helpers/focus.js';
4
+ import { isComposedAncestor } from '../../helpers/dom.js';
3
5
 
4
6
  const isSupported = ('popover' in HTMLElement.prototype);
5
7
 
@@ -15,7 +17,12 @@ export const PopoverMixin = superclass => class extends superclass {
15
17
  * @type {boolean}
16
18
  */
17
19
  opened: { type: Boolean, reflect: true },
18
- _useNativePopover: { type: Boolean, reflect: true, attribute: 'popover' }
20
+ /**
21
+ * Whether to disable auto-close/light-dismiss
22
+ * @type {boolean}
23
+ */
24
+ noAutoClose: { type: Boolean, reflect: true, attribute: 'no-auto-close' },
25
+ _useNativePopover: { type: String, reflect: true, attribute: 'popover' }
19
26
  };
20
27
  }
21
28
 
@@ -62,34 +69,101 @@ export const PopoverMixin = superclass => class extends superclass {
62
69
 
63
70
  constructor() {
64
71
  super();
72
+ this.noAutoClose = false;
65
73
  this.opened = false;
66
- this._useNativePopover = isSupported;
74
+ this._useNativePopover = isSupported ? 'manual' : undefined;
75
+ this._handleAutoCloseClick = this._handleAutoCloseClick.bind(this);
76
+ this._handleAutoCloseFocus = this._handleAutoCloseFocus.bind(this);
67
77
  }
68
78
 
69
79
  connectedCallback() {
70
80
  super.connectedCallback();
81
+ if (this.opened) this._addAutoCloseHandlers();
71
82
  }
72
83
 
73
84
  disconnectedCallback() {
74
85
  super.disconnectedCallback();
86
+ this._removeAutoCloseHandlers();
75
87
  }
76
88
 
77
89
  updated(changedProperties) {
78
90
  super.updated(changedProperties);
79
91
  if (changedProperties.has('opened')) {
80
92
 
93
+ if (this._useNativePopover) {
94
+ if (this.opened) this.showPopover();
95
+ else this.hidePopover();
96
+ }
97
+
98
+ this._previousFocusableAncestor = this.opened ? getPreviousFocusableAncestor(this, false, false) : null;
99
+
81
100
  if (this.opened) {
101
+ this._opener = getComposedActiveElement();
102
+ this._addAutoCloseHandlers();
82
103
  this.dispatchEvent(new CustomEvent('d2l-popover-open', { bubbles: true, composed: true }));
83
104
  } else if (changedProperties.get('opened') !== undefined) {
105
+ this._removeAutoCloseHandlers();
84
106
  this.dispatchEvent(new CustomEvent('d2l-popover-close', { bubbles: true, composed: true }));
85
107
  }
86
108
 
87
- if (this._useNativePopover) {
88
- if (this.opened) this.showPopover();
89
- else this.hidePopover();
90
- }
109
+ }
110
+ }
111
+
112
+ _addAutoCloseHandlers() {
113
+ this.addEventListener('blur', this._handleAutoCloseFocus, { capture: true });
114
+ document.body.addEventListener('focus', this._handleAutoCloseFocus, { capture: true });
115
+ document.addEventListener('click', this._handleAutoCloseClick, { capture: true });
116
+ }
91
117
 
118
+ _close() {
119
+ const hide = () => {
120
+ this.opened = false;
121
+ };
122
+
123
+ hide();
124
+ }
125
+
126
+ _handleAutoCloseClick(e) {
127
+
128
+ if (!this.opened || this.noAutoClose) return;
129
+
130
+ const rootTarget = e.composedPath()[0];
131
+ if (isComposedAncestor(this.shadowRoot.querySelector('.content'), rootTarget)
132
+ || (this._opener !== document.body && isComposedAncestor(this._opener, rootTarget))) {
133
+ return;
92
134
  }
135
+
136
+ this._close();
137
+ }
138
+
139
+ _handleAutoCloseFocus() {
140
+
141
+ // todo: try to use relatedTarget instead - this logic is largely copied as-is from dropdown simply to mitigate risk of this fragile code
142
+ setTimeout(() => {
143
+ // we ignore focusable ancestors othrwise the popover will close when user clicks empty space inside the popover
144
+ if (!this.opened
145
+ || this.noAutoClose
146
+ || !document.activeElement
147
+ || document.activeElement === this._previousFocusableAncestor
148
+ || document.activeElement === document.body) {
149
+ return;
150
+ }
151
+
152
+ const activeElement = getComposedActiveElement();
153
+ if (isComposedAncestor(this.shadowRoot.querySelector('.content'), activeElement)
154
+ || activeElement === this._opener) {
155
+ return;
156
+ }
157
+
158
+ this._close();
159
+ }, 0);
160
+
161
+ }
162
+
163
+ _removeAutoCloseHandlers() {
164
+ this.removeEventListener('blur', this._handleAutoCloseFocus, { capture: true });
165
+ document.body?.removeEventListener('focus', this._handleAutoCloseFocus, { capture: true }); // DE41322: document.body can be null in some scenarios
166
+ document.removeEventListener('click', this._handleAutoCloseClick, { capture: true });
93
167
  }
94
168
 
95
169
  _renderPopover() {
@@ -10717,6 +10717,12 @@
10717
10717
  "name": "d2l-test-popover",
10718
10718
  "path": "./components/popover/test/popover.js",
10719
10719
  "attributes": [
10720
+ {
10721
+ "name": "no-auto-close",
10722
+ "description": "Whether to disable auto-close/light-dismiss",
10723
+ "type": "boolean",
10724
+ "default": "false"
10725
+ },
10720
10726
  {
10721
10727
  "name": "opened",
10722
10728
  "description": "Whether the popover is open or not",
@@ -10725,6 +10731,13 @@
10725
10731
  }
10726
10732
  ],
10727
10733
  "properties": [
10734
+ {
10735
+ "name": "noAutoClose",
10736
+ "attribute": "no-auto-close",
10737
+ "description": "Whether to disable auto-close/light-dismiss",
10738
+ "type": "boolean",
10739
+ "default": "false"
10740
+ },
10728
10741
  {
10729
10742
  "name": "opened",
10730
10743
  "attribute": "opened",
package/lang/ar.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "العودة إلى القائمة السابقة. يتم عرض {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}، ‏{term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "مؤشر التقدم",
98
99
  "components.more-less.less": "أقل",
99
100
  "components.more-less.more": "المزيد",
package/lang/cy.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Dychwelyd i'r ddewislen flaenorol. Rydych chi'n edrych ar {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Dangosydd Cynnydd",
98
99
  "components.more-less.less": "llai",
99
100
  "components.more-less.more": "mwy",
package/lang/da.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Gå tilbage til forrige menu. Du ser på {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Statusindikator",
98
99
  "components.more-less.less": "færre",
99
100
  "components.more-less.more": "flere",
package/lang/de.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Zum vorherigen Menü zurückkehren. Sie betrachten gerade {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Fortschrittsanzeige",
98
99
  "components.more-less.less": "Weniger",
99
100
  "components.more-less.more": "mehr",
package/lang/en-gb.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Return to previous menu. You are viewing {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Progress Indicator",
98
99
  "components.more-less.less": "less",
99
100
  "components.more-less.more": "more",
package/lang/en.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Return to previous menu. You are viewing {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Progress Indicator",
98
99
  "components.more-less.less": "less",
99
100
  "components.more-less.more": "more",
package/lang/es-es.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Vuelva al menú anterior. Está en {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Indicador de progreso",
98
99
  "components.more-less.less": "menos",
99
100
  "components.more-less.more": "más",
package/lang/es.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Regresar al menú anterior. Está viendo {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Indicador de progreso",
98
99
  "components.more-less.less": "menos",
99
100
  "components.more-less.more": "más",
package/lang/fr-fr.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Revenir au menu précédent. Vous consultez {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Indicateur de progrès",
98
99
  "components.more-less.less": "moins",
99
100
  "components.more-less.more": "plus",
package/lang/fr.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Retour au menu précédent. Vous voyez actuellement {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Indicateur de progrès",
98
99
  "components.more-less.less": "moins",
99
100
  "components.more-less.more": "plus",
package/lang/hi.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "पिछले मेनू पर वापस जाएँ। आप {menuTitle} देख रहे हैं।",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "प्रगति संकेतक",
98
99
  "components.more-less.less": "कम",
99
100
  "components.more-less.more": "अधिक",
package/lang/ja.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "前のメニューに戻ります。{menuTitle} を表示しています。",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}、{term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "進捗状況インジケータ",
98
99
  "components.more-less.less": "減らす",
99
100
  "components.more-less.more": "増やす",
package/lang/ko.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "이전 메뉴로 돌아갑니다. {menuTitle}을(를) 보고 있습니다.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "진도 표시기",
98
99
  "components.more-less.less": "축소",
99
100
  "components.more-less.more": "더 보기",
package/lang/nl.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Keer terug naar het vorige menu. U bekijkt {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Voortgangsindicator",
98
99
  "components.more-less.less": "minder",
99
100
  "components.more-less.more": "meer",
package/lang/pt.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Voltar ao menu anterior. Você está visualizando {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Indicador de progresso",
98
99
  "components.more-less.less": "menos",
99
100
  "components.more-less.more": "mais",
package/lang/sv.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Återgå till föregående meny. Du visar {menuTitle}.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Förloppsindikator",
98
99
  "components.more-less.less": "mindre",
99
100
  "components.more-less.more": "mer",
package/lang/tr.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "Önceki menüye dönün. {menuTitle} başlığını görüntülüyorsunuz.",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}, {term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "Gelişim Göstergesi",
98
99
  "components.more-less.less": "daha az",
99
100
  "components.more-less.more": "daha fazla",
package/lang/zh-cn.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "返回至上级菜单。您正在浏览 {menuTitle}。",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1}、{term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "进度指示符",
98
99
  "components.more-less.less": "更少",
99
100
  "components.more-less.more": "更多",
package/lang/zh-tw.js CHANGED
@@ -94,6 +94,7 @@ export default {
94
94
  "components.menu-item-return.returnCurrentlyShowing": "返回上一個功能表。您正在檢視 {menuTitle}。",
95
95
  "components.meter-mixin.commaSeperatedAria": "{term1},{term2}",
96
96
  "components.meter-mixin.fraction": "{x}∕{y}",
97
+ "components.meter-mixin.fractionAria": "{x} out of {y}",
97
98
  "components.meter-mixin.progressIndicator": "進度指示器",
98
99
  "components.more-less.less": "較少",
99
100
  "components.more-less.more": "較多",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "3.21.1",
3
+ "version": "3.21.3",
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",