@brightspace-ui/core 2.180.7 → 2.180.9
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.
@@ -172,8 +172,8 @@ export const TagListItemMixin = superclass => class extends LocalizeCoreElement(
|
|
172
172
|
}
|
173
173
|
|
174
174
|
await this.updateComplete;
|
175
|
-
|
176
|
-
container.focus();
|
175
|
+
// delay the focus to allow focusin to fire
|
176
|
+
setTimeout(() => container.focus());
|
177
177
|
});
|
178
178
|
|
179
179
|
this.addEventListener('keydown', this._handleKeydown);
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import '../button/button-subtle.js';
|
2
2
|
import { css, html, LitElement } from 'lit';
|
3
|
+
import { getOffsetParent, isComposedAncestor } from '../../helpers/dom.js';
|
3
4
|
import { announce } from '../../helpers/announce.js';
|
4
5
|
import { ArrowKeysMixin } from '../../mixins/arrow-keys/arrow-keys-mixin.js';
|
5
6
|
import { classMap } from 'lit/directives/class-map.js';
|
6
7
|
import { getComposedActiveElement } from '../../helpers/focus.js';
|
7
|
-
import { getOffsetParent } from '../../helpers/dom.js';
|
8
8
|
import { InteractiveMixin } from '../../mixins/interactive/interactive-mixin.js';
|
9
9
|
import { LocalizeCoreElement } from '../../helpers/localize-core-element.js';
|
10
10
|
import ResizeObserver from 'resize-observer-polyfill/dist/ResizeObserver.es.js';
|
@@ -109,6 +109,7 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
109
109
|
this._listContainerObserver = null;
|
110
110
|
this._resizeObserver = null;
|
111
111
|
this._showHiddenTags = false;
|
112
|
+
this._refocus = null;
|
112
113
|
}
|
113
114
|
|
114
115
|
disconnectedCallback() {
|
@@ -197,7 +198,7 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
197
198
|
aria-roledescription="${this.localize('components.tag-list.role-description')}"
|
198
199
|
@d2l-tag-list-item-clear="${this._handleItemDeleted}"
|
199
200
|
@d2l-tag-list-item-tooltip-show="${this._handleKeyboardTooltipShown}">
|
200
|
-
<slot @slotchange="${this._handleSlotChange}"></slot>
|
201
|
+
<slot @slotchange="${this._handleSlotChange}" @focusout="${this._handleSlotFocusOut}" @focusin="${this._handleSlotFocusIn}"></slot>
|
201
202
|
${overflowButton}
|
202
203
|
<d2l-button-subtle
|
203
204
|
class="${classMap(clearableClasses)}"
|
@@ -219,9 +220,10 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
219
220
|
<d2l-button-subtle aria-hidden="true" slim text="${this.localize('components.tag-list.num-hidden', { count: '##' })}" class="d2l-tag-list-hidden-button"></d2l-button-subtle>
|
220
221
|
${this.arrowKeysContainer(list)}
|
221
222
|
</div>
|
222
|
-
`,
|
223
|
+
`,
|
224
|
+
this.localize('components.tag-list.interactive-label', { count: this._items ? this._items.length : 0 }),
|
223
225
|
() => {
|
224
|
-
|
226
|
+
this._items?.[0]?.focus?.();
|
225
227
|
}
|
226
228
|
);
|
227
229
|
}
|
@@ -350,9 +352,11 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
350
352
|
const itemIndex = children.indexOf(rootTarget);
|
351
353
|
|
352
354
|
if (children.length <= 1) return;
|
353
|
-
const focusableElem = children[itemIndex - 1] || children[itemIndex + 1];
|
354
355
|
|
355
|
-
setTimeout(() =>
|
356
|
+
setTimeout(() => {
|
357
|
+
const focusableElem = children[itemIndex - 1] || (children[itemIndex] === e.target ? children[itemIndex + 1] : children[itemIndex]);
|
358
|
+
focusableElem.focus();
|
359
|
+
}, this.clearFocusTimeout);
|
356
360
|
}
|
357
361
|
|
358
362
|
_handleKeyboardTooltipShown() {
|
@@ -406,7 +410,22 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
406
410
|
this._items[0].setAttribute('keyboard-tooltip-item', true);
|
407
411
|
if (this._hasShownKeyboardTooltip) this._items[0].setAttribute('keyboard-tooltip-shown', true);
|
408
412
|
await this.updateComplete;
|
409
|
-
|
413
|
+
if (this._refocus?.classList.contains('d2l-tag-list-button')) {
|
414
|
+
this._refocus = this.shadowRoot.querySelector('.d2l-tag-list-button');
|
415
|
+
}
|
416
|
+
await this._refocus?.updateComplete;
|
417
|
+
(this._refocus || refocus).focus?.();
|
418
|
+
this._refocus = null;
|
419
|
+
}
|
420
|
+
|
421
|
+
_handleSlotFocusIn() {
|
422
|
+
this._items[0].setAttribute('tabindex', '-1');
|
423
|
+
}
|
424
|
+
|
425
|
+
_handleSlotFocusOut(e) {
|
426
|
+
if (!isComposedAncestor(e.currentTarget, e.relatedTarget)) {
|
427
|
+
this._items[0].setAttribute('tabindex', '0');
|
428
|
+
}
|
410
429
|
}
|
411
430
|
|
412
431
|
async _toggleHiddenTagVisibility(e) {
|
@@ -417,10 +436,11 @@ class TagList extends LocalizeCoreElement(InteractiveMixin(ArrowKeysMixin(LitEle
|
|
417
436
|
const isMoreButton = e.target.classList.contains('d2l-tag-list-button-show-more');
|
418
437
|
await this.updateComplete;
|
419
438
|
if (isMoreButton) {
|
420
|
-
this._items[this._chompIndex]
|
439
|
+
this._refocus = this._items[this._chompIndex];
|
421
440
|
} else {
|
422
|
-
this.shadowRoot.querySelector('.d2l-tag-list-button')
|
441
|
+
this._refocus = this.shadowRoot.querySelector('.d2l-tag-list-button');
|
423
442
|
}
|
443
|
+
this._refocus.focus();
|
424
444
|
}
|
425
445
|
}
|
426
446
|
|
@@ -582,18 +582,17 @@ class Tooltip extends RtlMixin(LitElement) {
|
|
582
582
|
this._openDir = space.dir;
|
583
583
|
|
584
584
|
// Compute the x and y position of the tooltip relative to its target
|
585
|
-
let
|
586
|
-
let parentLeft;
|
585
|
+
let offsetTop, offsetLeft;
|
587
586
|
if (offsetParent && offsetParent.tagName !== 'BODY') {
|
588
|
-
const
|
589
|
-
|
590
|
-
|
587
|
+
const offsetRect = offsetParent.getBoundingClientRect();
|
588
|
+
offsetTop = offsetRect.top + offsetParent.clientTop - offsetParent.scrollTop;
|
589
|
+
offsetLeft = offsetRect.left + offsetParent.clientLeft - offsetParent.scrollLeft;
|
591
590
|
} else {
|
592
|
-
|
593
|
-
|
591
|
+
offsetTop = -document.documentElement.scrollTop;
|
592
|
+
offsetLeft = -document.documentElement.scrollLeft;
|
594
593
|
}
|
595
|
-
const top = targetRect.top -
|
596
|
-
const left = targetRect.left -
|
594
|
+
const top = targetRect.top - offsetTop;
|
595
|
+
const left = targetRect.left - offsetLeft;
|
597
596
|
|
598
597
|
let positionRect;
|
599
598
|
if (this._isAboveOrBelow()) {
|
@@ -699,18 +698,18 @@ class Tooltip extends RtlMixin(LitElement) {
|
|
699
698
|
});
|
700
699
|
|
701
700
|
if (this.boundary && offsetParent) {
|
702
|
-
const
|
701
|
+
const offsetRect = offsetParent.getBoundingClientRect();
|
703
702
|
if (!isNaN(this.boundary.left)) {
|
704
|
-
spaceAround.left = Math.min(targetRect.left -
|
703
|
+
spaceAround.left = Math.min(targetRect.left - offsetRect.left - this.boundary.left, spaceAround.left);
|
705
704
|
}
|
706
705
|
if (!isNaN(this.boundary.right)) {
|
707
|
-
spaceAround.right = Math.min(
|
706
|
+
spaceAround.right = Math.min(offsetRect.right - targetRect.right - this.boundary.right, spaceAround.right);
|
708
707
|
}
|
709
708
|
if (!isNaN(this.boundary.top)) {
|
710
|
-
spaceAround.above = Math.min(targetRect.top -
|
709
|
+
spaceAround.above = Math.min(targetRect.top - offsetRect.top - this.boundary.top, spaceAround.above);
|
711
710
|
}
|
712
711
|
if (!isNaN(this.boundary.bottom)) {
|
713
|
-
spaceAround.below = Math.min(
|
712
|
+
spaceAround.below = Math.min(offsetRect.bottom - targetRect.bottom - this.boundary.bottom, spaceAround.below);
|
714
713
|
}
|
715
714
|
}
|
716
715
|
const isRTL = this.getAttribute('dir') === 'rtl';
|
@@ -729,8 +728,9 @@ class Tooltip extends RtlMixin(LitElement) {
|
|
729
728
|
if (this.for) {
|
730
729
|
const targetSelector = `#${cssEscape(this.for)}`;
|
731
730
|
target = ownerRoot.querySelector(targetSelector);
|
732
|
-
target = target ||
|
731
|
+
target = target || ownerRoot?.host?.querySelector(targetSelector);
|
733
732
|
} else {
|
733
|
+
console.warn('<d2l-tooltip>: missing required attribute "for"');
|
734
734
|
const parentNode = this.parentNode;
|
735
735
|
target = parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? ownerRoot.host : parentNode;
|
736
736
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@brightspace-ui/core",
|
3
|
-
"version": "2.180.
|
3
|
+
"version": "2.180.9",
|
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",
|