@brightspace-ui/core 2.147.1 → 2.149.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,8 @@
1
1
  import './alert.js';
2
2
  import { css, html, LitElement } from 'lit';
3
+ import { classMap } from 'lit/directives/class-map.js';
3
4
  import { ifDefined } from 'lit/directives/if-defined.js';
5
+ import { styleMap } from 'lit/directives/style-map.js';
4
6
 
5
7
  const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
6
8
 
@@ -9,14 +11,18 @@ const states = {
9
11
  CLOSING: 'closing', // the close animation is running
10
12
  PREOPENING: 'preopening', // a pause before running the opening animation because transitions won't run when changing from 'diplay: none' to 'display: block'
11
13
  OPENING: 'opening', // the opening animation is running
12
- OPEN: 'open' // the toast is open
14
+ OPEN: 'open', // the toast is open
15
+ SLIDING: 'sliding' // the transform animation when multiple alerts are on the page is running
13
16
  };
14
17
 
18
+ const TOAST_SPACING = 0.6;
19
+
15
20
  /**
16
21
  * A component for communicating important information relating to the state of the system and the user's work flow, displayed as a pop-up at the bottom of the screen that automatically dismisses itself by default.
17
22
  * @slot - Default content placed inside of the component
18
23
  * @fires d2l-alert-toast-button-press - Dispatched when the toast's action button is clicked
19
24
  * @fires d2l-alert-toast-close - Dispatched when the toast is closed
25
+ * @fires d2l-alert-toast-open - Dispatched when the toast is opened
20
26
  */
21
27
  class AlertToast extends LitElement {
22
28
 
@@ -58,6 +64,9 @@ class AlertToast extends LitElement {
58
64
  * @default "default"
59
65
  */
60
66
  type: { type: String, reflect: true },
67
+ _bottomHeight: { state: true },
68
+ _bottomMargin: { state: true },
69
+ _closeClicked: { state: true },
61
70
  _state: { type: String }
62
71
  };
63
72
  }
@@ -70,11 +79,10 @@ class AlertToast extends LitElement {
70
79
 
71
80
  .d2l-alert-toast-container {
72
81
  border-radius: 0.3rem;
73
- bottom: 1.5rem;
74
82
  box-shadow: 0 0.1rem 0.6rem 0 rgba(0, 0, 0, 0.1);
75
83
  display: none;
76
84
  left: 0;
77
- margin: 0 auto;
85
+ margin: 0 auto 1.5rem;
78
86
  max-width: 600px;
79
87
  position: fixed;
80
88
  right: 0;
@@ -88,15 +96,26 @@ class AlertToast extends LitElement {
88
96
 
89
97
  .d2l-alert-toast-container[data-state="opening"],
90
98
  .d2l-alert-toast-container[data-state="closing"] {
91
- transition-duration: 250ms;
92
- transition-property: transform, opacity;
93
- transition-timing-function: ease-in;
99
+ transition-duration: 600ms;
100
+ transition-property: opacity;
101
+ transition-timing-function: ease;
102
+ }
103
+ .d2l-alert-toast-container[data-state="opening"],
104
+ .d2l-alert-toast-container.d2l-alert-toast-container-lowest[data-state="closing"] {
105
+ transition-property: opacity, transform;
106
+ }
107
+
108
+ .d2l-alert-toast-container.d2l-alert-toast-container-close-clicked[data-state="closing"] {
109
+ transition-duration: 200ms;
94
110
  }
95
111
 
96
112
  .d2l-alert-toast-container[data-state="preopening"],
97
113
  .d2l-alert-toast-container[data-state="closing"] {
98
114
  opacity: 0;
99
- transform: translateY(0.5rem);
115
+ }
116
+ .d2l-alert-toast-container[data-state="preopening"],
117
+ .d2l-alert-toast-container.d2l-alert-toast-container-lowest[data-state="closing"] {
118
+ transform: translateY(calc(100% + 1.5rem));
100
119
  }
101
120
 
102
121
  .d2l-alert-toast-container[data-state="opening"] {
@@ -104,13 +123,17 @@ class AlertToast extends LitElement {
104
123
  transform: translateY(0);
105
124
  }
106
125
 
126
+ .d2l-alert-toast-container[data-state="sliding"] {
127
+ transition: bottom 600ms ease;
128
+ }
129
+
107
130
  d2l-alert {
108
131
  animation: none;
109
132
  }
110
133
 
111
134
  @media (max-width: 615px) {
112
135
  .d2l-alert-toast-container {
113
- bottom: 12px;
136
+ margin-bottom: 12px;
114
137
  width: calc(100% - 16px);
115
138
  }
116
139
  }
@@ -123,9 +146,15 @@ class AlertToast extends LitElement {
123
146
  this.noAutoClose = false;
124
147
  this.open = false;
125
148
 
149
+ this._bottomHeight = 0;
150
+ this._bottomMargin = 0;
151
+ this._closeClicked = false;
126
152
  this._hasFocus = false;
127
153
  this._hasMouse = false;
128
154
  this._state = states.CLOSED;
155
+
156
+ this._handleAlertOpen = this._handleAlertOpen.bind(this);
157
+ this._handleAlertClose = this._handleAlertClose.bind(this);
129
158
  }
130
159
 
131
160
  get open() {
@@ -141,11 +170,39 @@ class AlertToast extends LitElement {
141
170
  }
142
171
  }
143
172
 
173
+ connectedCallback() {
174
+ super.connectedCallback();
175
+ document.body.addEventListener('d2l-alert-toast-open', this._handleAlertOpen);
176
+ document.body.addEventListener('d2l-alert-toast-close', this._handleAlertClose);
177
+ }
178
+
179
+ disconnectedCallback() {
180
+ super.disconnectedCallback();
181
+ document.body.removeEventListener('d2l-alert-toast-open', this._handleAlertOpen);
182
+ document.body.removeEventListener('d2l-alert-toast-close', this._handleAlertClose);
183
+ }
184
+
185
+ firstUpdated(changedProperties) {
186
+ super.firstUpdated(changedProperties);
187
+
188
+ this._innerContainer = this.shadowRoot.querySelector('.d2l-alert-toast-container');
189
+ }
190
+
144
191
  render() {
192
+ const containerStyles = {
193
+ bottom: (this._bottomHeight || this._bottomMargin) ? `calc(${this._bottomHeight}px + ${this._bottomMargin}rem)` : 0
194
+ };
195
+ const containerClasses = {
196
+ 'd2l-alert-toast-container': true,
197
+ 'd2l-alert-toast-container-close-clicked': this._closeClicked,
198
+ 'd2l-alert-toast-container-lowest': !this._bottomHeight,
199
+ 'vdiff-target': true
200
+ };
145
201
  return html`
146
202
  <div
147
- class="d2l-alert-toast-container vdiff-target"
203
+ class="${classMap(containerClasses)}"
148
204
  data-state="${this._state}"
205
+ style="${styleMap(containerStyles)}"
149
206
  @transitionend=${this._onTransitionEnd}>
150
207
  <d2l-alert
151
208
  @blur=${this._onBlur}
@@ -200,6 +257,26 @@ class AlertToast extends LitElement {
200
257
  clearTimeout(this._setTimeoutId);
201
258
  }
202
259
 
260
+ _handleAlertClose(e) {
261
+ if (e?.target === this || !this.open) return;
262
+
263
+ const containerBottom = parseFloat(getComputedStyle(this._innerContainer).getPropertyValue('bottom'));
264
+ const closingContainerBottom = e.detail.bottom;
265
+ if (closingContainerBottom > containerBottom) return; // closing alert is above this alert, no need to adjust bottom spacing
266
+
267
+ this._bottomHeight -= e.detail.height;
268
+ this._bottomMargin -= TOAST_SPACING;
269
+ if (!reduceMotion) this._state = states.SLIDING;
270
+ }
271
+
272
+ _handleAlertOpen(e) {
273
+ if (e?.target === this || !this.open) return;
274
+
275
+ this._bottomHeight += e.detail.height;
276
+ this._bottomMargin += TOAST_SPACING;
277
+ if (!reduceMotion) this._state = states.SLIDING;
278
+ }
279
+
203
280
  _handleButtonPress(e) {
204
281
  e.stopPropagation();
205
282
  this.dispatchEvent(new CustomEvent('d2l-alert-toast-button-press'));
@@ -212,6 +289,7 @@ class AlertToast extends LitElement {
212
289
 
213
290
  _onCloseClicked(e) {
214
291
  e.preventDefault();
292
+ this._closeClicked = true;
215
293
  this.open = false;
216
294
  }
217
295
 
@@ -231,10 +309,13 @@ class AlertToast extends LitElement {
231
309
  }
232
310
 
233
311
  _onTransitionEnd() {
234
- if (this._state === states.OPENING) {
312
+ if (this._state === states.OPENING || this._state === states.SLIDING) {
235
313
  this._state = states.OPEN;
236
314
  } else if (this._state === states.CLOSING) {
237
315
  this._state = states.CLOSED;
316
+ this._bottomHeight = 0;
317
+ this._bottomMargin = 0;
318
+ this._closeClicked = false;
238
319
  }
239
320
  }
240
321
 
@@ -256,21 +337,44 @@ class AlertToast extends LitElement {
256
337
  }
257
338
  }
258
339
  this.setAttribute('role', 'alert');
340
+ requestAnimationFrame(() => {
341
+ const height = this._innerContainer.offsetHeight;
342
+ this.dispatchEvent(new CustomEvent(
343
+ 'd2l-alert-toast-open', {
344
+ bubbles: true,
345
+ composed: false,
346
+ detail: { height }
347
+ }
348
+ ));
349
+ });
259
350
  } else {
351
+ if (!this._innerContainer) return;
352
+
260
353
  if (reduceMotion || this._state === states.PREOPENING) {
261
354
  cancelAnimationFrame(this._preopenFrame);
262
355
  this.removeAttribute('role');
263
- this._state = states.CLOSED;
264
- } else if (this._state === states.OPENING || this._state === states.OPEN) {
356
+ } else if (this._state === states.OPENING || this._state === states.OPEN || this._state === states.SLIDING) {
265
357
  this._state = states.CLOSING;
266
358
  }
267
- this.dispatchEvent(new CustomEvent(
268
- 'd2l-alert-toast-close', {
269
- bubbles: true,
270
- composed: false,
271
- detail: { action: this._action }
359
+ requestAnimationFrame(() => {
360
+ const height = this._innerContainer.offsetHeight;
361
+ const bottom = parseFloat(getComputedStyle(this._innerContainer).getPropertyValue('bottom'));
362
+
363
+ if (reduceMotion || this._state === states.PREOPENING) {
364
+ this._state = states.CLOSED;
365
+ this._bottomHeight = 0;
366
+ this._bottomMargin = 0;
367
+ this._closeClicked = false;
272
368
  }
273
- ));
369
+
370
+ this.dispatchEvent(new CustomEvent(
371
+ 'd2l-alert-toast-close', {
372
+ bubbles: true,
373
+ composed: false,
374
+ detail: { bottom, height }
375
+ }
376
+ ));
377
+ });
274
378
  }
275
379
  }
276
380
 
@@ -10,6 +10,11 @@
10
10
  import '../../demo/demo-page.js';
11
11
  import '../alert-toast.js';
12
12
  </script>
13
+ <style>
14
+ d2l-button {
15
+ padding-bottom: 1rem;
16
+ }
17
+ </style>
13
18
  </head>
14
19
 
15
20
  <body unresolved>
@@ -50,6 +55,26 @@
50
55
  <d2l-button primary data-toast="toast4">Open alert</d2l-button>
51
56
  </template>
52
57
  </d2l-demo-snippet>
58
+
59
+ <h2>Multiple Alerts</h2>
60
+ <d2l-demo-snippet>
61
+ <template>
62
+ <d2l-alert-toast id="toast5" no-auto-close>A default toast alert.</d2l-alert-toast>
63
+ <d2l-button primary data-toast="toast5">Open alert</d2l-button>
64
+
65
+ <d2l-alert-toast id="toast6" no-auto-close>A default toast alert.</d2l-alert-toast>
66
+ <d2l-button primary data-toast="toast6">Open alert</d2l-button>
67
+
68
+ <d2l-alert-toast id="toast7" no-auto-close>A default toast alert.</d2l-alert-toast>
69
+ <d2l-button primary data-toast="toast7">Open alert</d2l-button>
70
+
71
+ <d2l-alert-toast id="toast8" type="success" button-text="Do it!" has-close-button no-auto-close
72
+ subtext="I am subtext. I'm here to test the wrapping capabilities of adding subtext to these alerts, as well as other styling issues. Feel free to add to me!">
73
+ A message.
74
+ </d2l-alert-toast>
75
+ <d2l-button primary data-toast="toast8">Open alert</d2l-button>
76
+ </template>
77
+ </d2l-demo-snippet>
53
78
  </d2l-demo-page>
54
79
 
55
80
  </body>
@@ -89,7 +89,7 @@ class FilterOverflowGroup extends OverflowGroupMixin(RtlMixin(LitElement)) {
89
89
 
90
90
  getOverflowContainer(overflowItems) {
91
91
  return html`
92
- <d2l-filter class="${OVERFLOW_CLASS}" @d2l-filter-change="${this._handleFilterChange}">
92
+ <d2l-filter class="${OVERFLOW_CLASS} vdiff-target" @d2l-filter-change="${this._handleFilterChange}">
93
93
  ${overflowItems}
94
94
  </d2l-filter>
95
95
  `;
@@ -236,6 +236,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
236
236
 
237
237
  const dropdownContent = singleDimension ? html`
238
238
  <d2l-dropdown-content
239
+ class="vdiff-target"
239
240
  min-width="285"
240
241
  max-width="420"
241
242
  mobile-tray="right"
@@ -249,6 +250,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
249
250
  </d2l-dropdown-content>`
250
251
  : html`
251
252
  <d2l-dropdown-menu
253
+ class="vdiff-target"
252
254
  min-width="285"
253
255
  max-width="420"
254
256
  mobile-tray="right"
@@ -265,6 +267,7 @@ class Filter extends FocusMixin(LocalizeCoreElement(RtlMixin(LitElement))) {
265
267
 
266
268
  return html`
267
269
  <d2l-dropdown-button-subtle
270
+ class="vdiff-target"
268
271
  @d2l-dropdown-close="${this._handleDropdownClose}"
269
272
  @d2l-dropdown-open="${this._handleDropdownOpen}"
270
273
  @d2l-dropdown-position="${this._stopPropagation}"
@@ -199,6 +199,9 @@ class HtmlBlock extends LitElement {
199
199
  this._contextObserverControllerResolve = resolve;
200
200
  });
201
201
 
202
+ this._renderersProcessedResolve = undefined;
203
+ this._renderersProcessedPromise = new Promise(resolve => this._renderersProcessedResolve = resolve);
204
+
202
205
  getRenderers().then(renderers => renderers.reduce((attrs, currentRenderer) => {
203
206
  if (currentRenderer.contextAttributes) currentRenderer.contextAttributes.forEach(attr => attrs.push(attr));
204
207
  return attrs;
@@ -242,6 +245,10 @@ class HtmlBlock extends LitElement {
242
245
  }
243
246
  }
244
247
 
248
+ async getLoadingComplete() {
249
+ return this._renderersProcessedPromise;
250
+ }
251
+
245
252
  async _contextChanged() {
246
253
  await this._contextObserverControllerInitialized;
247
254
  if (!this._contextKeys) {
@@ -265,6 +272,7 @@ class HtmlBlock extends LitElement {
265
272
  async _processRenderers(elem) {
266
273
  await this._contextObserverControllerInitialized;
267
274
  const renderers = await getRenderers();
275
+ const loadingCompletePromises = [];
268
276
  for (const renderer of renderers) {
269
277
  if (renderer.contextAttributes) {
270
278
  const contextValues = new Map();
@@ -278,7 +286,11 @@ class HtmlBlock extends LitElement {
278
286
  noDeferredRendering: this.noDeferredRendering
279
287
  });
280
288
  }
289
+ if (typeof renderer.getLoadingComplete === 'function') {
290
+ loadingCompletePromises.push(renderer.getLoadingComplete());
291
+ }
281
292
  }
293
+ Promise.all(loadingCompletePromises).then(() => this._renderersProcessedResolve());
282
294
  }
283
295
 
284
296
  async _renderInline(slot) {
@@ -288,7 +300,10 @@ class HtmlBlock extends LitElement {
288
300
  const noDeferredRenderingContainer = slot.assignedNodes({ flatten: true })
289
301
  .find(node => (node.nodeType === Node.ELEMENT_NODE && node.tagName === 'DIV'));
290
302
 
291
- if (!noDeferredRenderingContainer) return;
303
+ if (!noDeferredRenderingContainer) {
304
+ this._renderersProcessedResolve();
305
+ return;
306
+ }
292
307
  await this._processRenderers(noDeferredRenderingContainer);
293
308
  }
294
309
 
@@ -466,6 +466,7 @@ export const ListItemMixin = superclass => class extends composeMixins(
466
466
  const oldValue = this._color;
467
467
  this._color = getValidHexColor(value, true);
468
468
  this.requestUpdate('value', oldValue);
469
+ /** @ignore */
469
470
  this.dispatchEvent(new CustomEvent('d2l-list-item-property-change', { bubbles: true, composed: true, detail: { name: 'color', value: this._color } }));
470
471
  }
471
472
 
@@ -160,7 +160,7 @@ class OverflowGroup extends OverflowGroupMixin(RtlMixin(LitElement)) {
160
160
 
161
161
  getOverflowContainer(overflowItems, mini) {
162
162
  const moreActionsText = this.localize('components.overflow-group.moreActions');
163
- const menu = html`<d2l-dropdown-menu>
163
+ const menu = html`<d2l-dropdown-menu class="vdiff-target">
164
164
  <d2l-menu label="${moreActionsText}">
165
165
  ${overflowItems}
166
166
  </d2l-menu>
@@ -79,7 +79,7 @@ class TestScrollWrapper extends RtlMixin(LitElement) {
79
79
  ` : html`<div class="d2l-scroll-wrapper-gradient" style="${styleMap(style)}"></div>`;
80
80
 
81
81
  return html`
82
- <d2l-scroll-wrapper ?hide-actions="${this.hideActions}" .customScrollers="${this._customScrollers}">
82
+ <d2l-scroll-wrapper class="vdiff-target" ?hide-actions="${this.hideActions}" .customScrollers="${this._customScrollers}">
83
83
  ${contents}
84
84
  </d2l-scroll-wrapper>
85
85
  `;
@@ -194,10 +194,10 @@ class ScrollWrapper extends RtlMixin(LitElement) {
194
194
 
195
195
  const actions = !this.hideActions ? html`
196
196
  <div class="d2l-scroll-wrapper-actions">
197
- <div class="d2l-scroll-wrapper-button d2l-scroll-wrapper-button-left" @click="${this._scrollLeft}">
197
+ <div class="d2l-scroll-wrapper-button d2l-scroll-wrapper-button-left vdiff-target" @click="${this._scrollLeft}">
198
198
  <d2l-icon icon="tier1:chevron-left"></d2l-icon>
199
199
  </div>
200
- <div class="d2l-scroll-wrapper-button d2l-scroll-wrapper-button-right" @click="${this._scrollRight}">
200
+ <div class="d2l-scroll-wrapper-button d2l-scroll-wrapper-button-right vdiff-target" @click="${this._scrollRight}">
201
201
  <d2l-icon icon="tier1:chevron-right"></d2l-icon>
202
202
  </div>
203
203
  </div>` : null;
@@ -1,7 +1,16 @@
1
- import { html, LitElement } from 'lit';
1
+ import { css, html, LitElement } from 'lit';
2
2
  import { SkeletonGroupMixin } from '../skeleton-group-mixin.js';
3
3
 
4
4
  class SkeletonGroupTestWrapper extends SkeletonGroupMixin(LitElement) {
5
+ static get styles() {
6
+ return css`
7
+ :host {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: 0.3rem;
11
+ }
12
+ `;
13
+ }
5
14
  render() {
6
15
  return html`<slot></slot>`;
7
16
  }
@@ -71,7 +71,8 @@ class VisibilitySwitch extends LocalizeCoreElement(SwitchMixin(LitElement)) {
71
71
 
72
72
  const tooltipHelpClasses = {
73
73
  'switch-visibility-conditions-show': this.on && this._hasConditions,
74
- 'd2l-switch-text': true
74
+ 'd2l-switch-text': true,
75
+ 'vdiff-target': true
75
76
  };
76
77
 
77
78
  const conditions = html`
@@ -112,7 +112,7 @@ class TooltipHelp extends SkeletonMixin(FocusMixin(LitElement)) {
112
112
  ${this.text}
113
113
  </button>
114
114
  ${!this.skeleton ? html`
115
- <d2l-tooltip for="d2l-tooltip-help-text" delay="0" offset="13" position="${ifDefined(this.position)}" ?showing="${this.showing}">
115
+ <d2l-tooltip class="vdiff-target" for="d2l-tooltip-help-text" delay="0" offset="13" position="${ifDefined(this.position)}" ?showing="${this.showing}">
116
116
  <slot></slot>
117
117
  </d2l-tooltip>
118
118
  ` : nothing }
@@ -91,6 +91,10 @@
91
91
  {
92
92
  "name": "d2l-alert-toast-close",
93
93
  "description": "Dispatched when the toast is closed"
94
+ },
95
+ {
96
+ "name": "d2l-alert-toast-open",
97
+ "description": "Dispatched when the toast is opened"
94
98
  }
95
99
  ],
96
100
  "slots": [
@@ -8124,9 +8128,6 @@
8124
8128
  }
8125
8129
  ],
8126
8130
  "events": [
8127
- {
8128
- "name": "d2l-list-item-property-change"
8129
- },
8130
8131
  {
8131
8132
  "name": "d2l-list-item-selected",
8132
8133
  "description": "Dispatched when the component item is selected"
@@ -8492,9 +8493,6 @@
8492
8493
  "name": "d2l-list-item-button-click",
8493
8494
  "description": "Dispatched when the item's primary button action is clicked"
8494
8495
  },
8495
- {
8496
- "name": "d2l-list-item-property-change"
8497
- },
8498
8496
  {
8499
8497
  "name": "d2l-list-item-selected",
8500
8498
  "description": "Dispatched when the component item is selected"
@@ -8983,9 +8981,6 @@
8983
8981
  "name": "d2l-list-item-link-click",
8984
8982
  "description": "Dispatched when the item's primary link action is clicked"
8985
8983
  },
8986
- {
8987
- "name": "d2l-list-item-property-change"
8988
- },
8989
8984
  {
8990
8985
  "name": "d2l-list-item-selected",
8991
8986
  "description": "Dispatched when the component item is selected"
@@ -12125,22 +12120,10 @@
12125
12120
  }
12126
12121
  ]
12127
12122
  },
12128
- {
12129
- "name": "d2l-test-table-controls-visual-diff",
12130
- "path": "./components/table/test/table-test-controls-visual-diff.js"
12131
- },
12132
- {
12133
- "name": "d2l-test-table-paging-visual-diff",
12134
- "path": "./components/table/test/table-test-paging-visual-diff.js"
12135
- },
12136
12123
  {
12137
12124
  "name": "d2l-test-table-sticky-visual-diff",
12138
12125
  "path": "./components/table/test/table-test-sticky-visual-diff.js"
12139
12126
  },
12140
- {
12141
- "name": "d2l-test-table-visual-diff",
12142
- "path": "./components/table/test/table-test-visual-diff.js"
12143
- },
12144
12127
  {
12145
12128
  "name": "d2l-tab-internal",
12146
12129
  "path": "./components/tabs/tab-internal.js",
@@ -75,6 +75,10 @@ class HtmlBlockMathRenderer {
75
75
  await window.D2L.renderingPromise;
76
76
  }
77
77
 
78
+ async getLoadingComplete() {
79
+ return new Promise(resolve => setTimeout(resolve, 100));
80
+ }
81
+
78
82
  }
79
83
 
80
84
  export function createHtmlBlockRenderer() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightspace-ui/core",
3
- "version": "2.147.1",
3
+ "version": "2.149.0",
4
4
  "description": "A collection of accessible, free, open-source web components for building Brightspace applications",
5
5
  "type": "module",
6
6
  "repository": "https://github.com/BrightspaceUI/core.git",
@@ -46,7 +46,7 @@
46
46
  "devDependencies": {
47
47
  "@babel/eslint-parser": "^7",
48
48
  "@brightspace-ui/stylelint-config": "^0.8",
49
- "@brightspace-ui/testing": "^0.34",
49
+ "@brightspace-ui/testing": "^1",
50
50
  "@open-wc/semantic-dom-diff": "^0.20",
51
51
  "@rollup/plugin-dynamic-import-vars": "^2",
52
52
  "@rollup/plugin-node-resolve": "^15",
@@ -63,7 +63,7 @@
63
63
  "rollup": "^3",
64
64
  "rollup-plugin-copy": "^3",
65
65
  "rollup-plugin-delete": "^2",
66
- "sinon": "^15",
66
+ "sinon": "^16",
67
67
  "stylelint": "^15"
68
68
  },
69
69
  "dependencies": {