diff --git a/.changeset/tricky-mugs-switch.md b/.changeset/tricky-mugs-switch.md new file mode 100644 index 000000000..b04da9606 --- /dev/null +++ b/.changeset/tricky-mugs-switch.md @@ -0,0 +1,5 @@ +--- +'@lion/overlays': patch +--- + +Keep transitionShow and transitionHide as user hooks diff --git a/packages/combobox/test/lion-combobox.test.js b/packages/combobox/test/lion-combobox.test.js index c9927468b..00de36613 100644 --- a/packages/combobox/test/lion-combobox.test.js +++ b/packages/combobox/test/lion-combobox.test.js @@ -302,8 +302,8 @@ describe('lion-combobox', () => { expect(document.activeElement).to.equal(el._inputNode); // step [4] - el._inputNode.value = ''; - el._inputNode.dispatchEvent(new KeyboardEvent('keydown', { key: 'c' })); + await el.updateComplete; + mimicUserTyping(el, 'c'); await el.updateComplete; expect(el.opened).to.equal(true); }); diff --git a/packages/input-datepicker/test-helpers/DatepickerInputObject.js b/packages/input-datepicker/test-helpers/DatepickerInputObject.js index a3c921079..4da2b8a4c 100644 --- a/packages/input-datepicker/test-helpers/DatepickerInputObject.js +++ b/packages/input-datepicker/test-helpers/DatepickerInputObject.js @@ -26,6 +26,7 @@ export class DatepickerInputObject { async closeCalendar() { this.overlayCloseButtonEl.click(); + await this.overlayEl.updateComplete; } /** diff --git a/packages/overlays/src/OverlayController.js b/packages/overlays/src/OverlayController.js index 6f6ec0588..0381d2618 100644 --- a/packages/overlays/src/OverlayController.js +++ b/packages/overlays/src/OverlayController.js @@ -681,7 +681,10 @@ export class OverlayController extends EventTargetShim { await this._handlePosition({ phase: 'show' }); this.__elementToFocusAfterHide = elementToFocusAfterHide; this.dispatchEvent(new Event('show')); - await this.transitionShow({ backdropNode: this.backdropNode, contentNode: this.contentNode }); + await this._transitionShow({ + backdropNode: this.backdropNode, + contentNode: this.contentNode, + }); } /** @type {function} */ (this._showResolve)(); @@ -787,7 +790,11 @@ export class OverlayController extends EventTargetShim { const event = new CustomEvent('before-hide', { cancelable: true }); this.dispatchEvent(event); if (!event.defaultPrevented) { - await this.transitionHide({ backdropNode: this.backdropNode, contentNode: this.contentNode }); + await this._transitionHide({ + backdropNode: this.backdropNode, + contentNode: this.contentNode, + }); + this.contentWrapperNode.style.display = 'none'; this._handleFeatures({ phase: 'hide' }); this._keepBodySize({ phase: 'hide' }); @@ -798,10 +805,21 @@ export class OverlayController extends EventTargetShim { } /** + * Method to be overriden by subclassers + * * @param {{backdropNode:HTMLElement, contentNode:HTMLElement}} hideConfig */ // eslint-disable-next-line class-methods-use-this, no-empty-function, no-unused-vars - async transitionHide(hideConfig) { + async transitionHide(hideConfig) {} + + /** + * @param {{backdropNode:HTMLElement, contentNode:HTMLElement}} hideConfig + */ + // eslint-disable-next-line class-methods-use-this, no-empty-function, no-unused-vars + async _transitionHide(hideConfig) { + // `this.transitionHide` is a hook for our users + await this.transitionHide({ backdropNode: this.backdropNode, contentNode: this.contentNode }); + if (hideConfig.backdropNode) { hideConfig.backdropNode.classList.remove( `${this.placementMode}-overlays__backdrop--animation-in`, @@ -831,10 +849,21 @@ export class OverlayController extends EventTargetShim { } /** + * To be overridden by subclassers + * * @param {{backdropNode:HTMLElement, contentNode:HTMLElement}} showConfig */ // eslint-disable-next-line class-methods-use-this, no-empty-function, no-unused-vars - async transitionShow(showConfig) { + async transitionShow(showConfig) {} + + /** + * @param {{backdropNode:HTMLElement, contentNode:HTMLElement}} showConfig + */ + // eslint-disable-next-line class-methods-use-this, no-empty-function, no-unused-vars + async _transitionShow(showConfig) { + // `this.transitionShow` is a hook for our users + await this.transitionShow({ backdropNode: this.backdropNode, contentNode: this.contentNode }); + if (showConfig.backdropNode) { showConfig.backdropNode.classList.add( `${this.placementMode}-overlays__backdrop--animation-in`,