From 44ffcf0d6160c94463384c579bedbaf8732b3950 Mon Sep 17 00:00:00 2001 From: Westbrook Johnson Date: Thu, 27 Jan 2022 16:34:14 -0500 Subject: [PATCH 1/3] feat(picker): support responsive delivery of menu --- .storybook/main.js | 3 + .storybook/preview-head.html | 10 +- package.json | 2 +- packages/dialog/src/DialogWrapper.ts | 50 ++++++++- packages/dialog/test/dialog-wrapper.test.ts | 55 ++++++++-- packages/menu/src/menu.css | 5 + packages/modal/src/modal-wrapper.css | 13 +++ packages/modal/src/modal.css | 1 - packages/overlay/src/ActiveOverlay.ts | 40 ++++++- packages/overlay/src/active-overlay.css | 9 +- packages/overlay/src/overlay-stack.ts | 30 +++++- packages/overlay/stories/overlay.stories.ts | 5 +- packages/overlay/test/overlay.test.ts | 96 +++++++++++------ packages/picker/package.json | 2 + packages/picker/src/Picker.ts | 75 ++++++++----- .../picker/test/picker-responsive.test.ts | 102 ++++++++++++++++++ packages/picker/test/picker-sync.test.ts | 31 +++--- packages/picker/test/picker.test.ts | 33 +++--- packages/tray/src/Tray.ts | 75 ++++++++++++- packages/tray/src/spectrum-config.js | 13 +++ packages/tray/src/spectrum-tray-wrapper.css | 31 ++++++ packages/tray/src/tray.css | 22 ++++ packages/tray/test/tray.test.ts | 18 +++- .../story-decorator/src/StoryDecorator.ts | 1 + tools/reactive-controllers/README.md | 1 + tools/reactive-controllers/match-media.md | 47 ++++++++ tools/reactive-controllers/src/MatchMedia.ts | 48 +++++++++ tools/reactive-controllers/src/index.ts | 1 + .../test/match-media.test.ts | 37 +++++++ ...ts => roving-tabindex-integration.test.ts} | 0 ...ollers.test.ts => roving-tabindex.test.ts} | 2 +- yarn.lock | 31 +++++- 32 files changed, 763 insertions(+), 126 deletions(-) create mode 100644 packages/modal/src/modal-wrapper.css create mode 100644 packages/picker/test/picker-responsive.test.ts create mode 100644 packages/tray/src/spectrum-tray-wrapper.css create mode 100644 tools/reactive-controllers/match-media.md create mode 100644 tools/reactive-controllers/src/MatchMedia.ts create mode 100644 tools/reactive-controllers/test/match-media.test.ts rename tools/reactive-controllers/test/{reactive-controllers-integration.test.ts => roving-tabindex-integration.test.ts} (100%) rename tools/reactive-controllers/test/{reactive-controllers.test.ts => roving-tabindex.test.ts} (95%) diff --git a/.storybook/main.js b/.storybook/main.js index 5e1d7b1b929..63ab1ecb387 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -2,6 +2,9 @@ const rollupJson = require('@rollup/plugin-json'); module.exports = { stories: ['../packages/*/stories/*.stories.js'], + nodeResolve: { + exportConditions: ['browser', 'development'], + }, rollupConfig(config) { // add a new plugin to the build diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html index 77a7fe37914..e4e6cb0c2b5 100644 --- a/.storybook/preview-head.html +++ b/.storybook/preview-head.html @@ -7,7 +7,6 @@ - + diff --git a/package.json b/package.json index 19954056a24..55ecf550c7d 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "node-fetch": "^3.1.0", "npm-run-all": "^4.1.5", "patch-package": "^6.4.7", - "playwright": "^1.16.3", + "playwright": "^1.18.1", "postcss": "^8.4.5", "postcss-custom-properties": "^12.1.2", "postcss-focus-visible": "^6.0.3", diff --git a/packages/dialog/src/DialogWrapper.ts b/packages/dialog/src/DialogWrapper.ts index 418c38154e6..c3c71a1edc6 100644 --- a/packages/dialog/src/DialogWrapper.ts +++ b/packages/dialog/src/DialogWrapper.ts @@ -27,7 +27,8 @@ import '@spectrum-web-components/underlay/sp-underlay.js'; import '@spectrum-web-components/button/sp-button.js'; import '../sp-dialog.js'; -import styles from '@spectrum-web-components/modal/src/modal.css.js'; +import modalWrapperStyles from '@spectrum-web-components/modal/src/modal-wrapper.css.js'; +import modalStyles from '@spectrum-web-components/modal/src/modal.css.js'; import { Dialog } from './Dialog.js'; import { FocusVisiblePolyfillMixin } from '@spectrum-web-components/shared'; import { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js'; @@ -43,7 +44,7 @@ import { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focu */ export class DialogWrapper extends FocusVisiblePolyfillMixin(SpectrumElement) { public static get styles(): CSSResultArray { - return [styles]; + return [modalWrapperStyles, modalStyles]; } @property({ type: Boolean, reflect: true }) @@ -88,6 +89,10 @@ export class DialogWrapper extends FocusVisiblePolyfillMixin(SpectrumElement) { @property({ type: Boolean }) public responsive = false; + private transitionPromise = Promise.resolve(); + + private resolveTransitionPromise!: () => void; + @property({ type: Boolean }) public underlay = false; @@ -156,6 +161,27 @@ export class DialogWrapper extends FocusVisiblePolyfillMixin(SpectrumElement) { ); } + protected handleUnderlayTransitionend(): void { + if (!this.open) { + this.resolveTransitionPromise(); + } + } + + protected handleModalTransitionend(): void { + if (this.open || !this.underlay) { + this.resolveTransitionPromise(); + } + } + + protected update(changes: PropertyValues): void { + if (changes.has('open') && changes.get('open') !== undefined) { + this.transitionPromise = new Promise( + (res) => (this.resolveTransitionPromise = res) + ); + } + super.update(changes); + } + protected render(): TemplateResult { return html` ${this.underlay @@ -163,10 +189,14 @@ export class DialogWrapper extends FocusVisiblePolyfillMixin(SpectrumElement) { ` : html``} -