@spectrum-web-components/overlay 0.35.1-rc.15 → 0.35.1-rc.24

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.
Files changed (50) hide show
  1. package/README.md +72 -69
  2. package/package.json +7 -7
  3. package/src/AbstractOverlay.d.ts +4 -2
  4. package/src/AbstractOverlay.dev.js +6 -0
  5. package/src/AbstractOverlay.dev.js.map +2 -2
  6. package/src/AbstractOverlay.js +1 -1
  7. package/src/AbstractOverlay.js.map +3 -3
  8. package/src/Overlay.d.ts +5 -3
  9. package/src/Overlay.dev.js +62 -28
  10. package/src/Overlay.dev.js.map +3 -3
  11. package/src/Overlay.js +7 -7
  12. package/src/Overlay.js.map +3 -3
  13. package/src/OverlayDialog.dev.js +5 -2
  14. package/src/OverlayDialog.dev.js.map +2 -2
  15. package/src/OverlayDialog.js +1 -1
  16. package/src/OverlayDialog.js.map +2 -2
  17. package/src/OverlayNoPopover.dev.js +1 -1
  18. package/src/OverlayNoPopover.dev.js.map +2 -2
  19. package/src/OverlayNoPopover.js +1 -1
  20. package/src/OverlayNoPopover.js.map +2 -2
  21. package/src/OverlayPopover.dev.js +4 -3
  22. package/src/OverlayPopover.dev.js.map +2 -2
  23. package/src/OverlayPopover.js +1 -1
  24. package/src/OverlayPopover.js.map +2 -2
  25. package/src/OverlayStack.d.ts +7 -0
  26. package/src/OverlayStack.dev.js +11 -0
  27. package/src/OverlayStack.dev.js.map +2 -2
  28. package/src/OverlayStack.js +1 -1
  29. package/src/OverlayStack.js.map +3 -3
  30. package/src/OverlayTrigger.dev.js +1 -1
  31. package/src/OverlayTrigger.dev.js.map +2 -2
  32. package/src/OverlayTrigger.js +1 -1
  33. package/src/OverlayTrigger.js.map +2 -2
  34. package/src/overlay-types.d.ts +1 -0
  35. package/src/overlay-types.dev.js.map +1 -1
  36. package/src/overlay-types.js.map +1 -1
  37. package/src/overlay.css.dev.js +1 -1
  38. package/src/overlay.css.dev.js.map +1 -1
  39. package/src/overlay.css.js +1 -1
  40. package/src/overlay.css.js.map +1 -1
  41. package/src/topLayerOverTransforms.dev.js +0 -2
  42. package/src/topLayerOverTransforms.dev.js.map +2 -2
  43. package/src/topLayerOverTransforms.js.map +2 -2
  44. package/test/overlay-trigger-extended.test.js +34 -29
  45. package/test/overlay-trigger-extended.test.js.map +2 -2
  46. package/test/overlay-trigger-hover-click.test.js +5 -2
  47. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  48. package/test/overlay-trigger-longpress.test.js +55 -7
  49. package/test/overlay-trigger-longpress.test.js.map +2 -2
  50. package/custom-elements.json +0 -2262
package/README.md CHANGED
@@ -68,76 +68,79 @@ By leveraging the `trigger` attribute to pass an ID reference to another element
68
68
  <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
69
69
  </sp-action-button>
70
70
  </sp-action-group>
71
+ <sp-overlay trigger="trigger-1@hover">
72
+ <sp-tooltip>Hover</sp-tooltip>
73
+ </sp-overlay>
74
+ <sp-overlay
75
+ trigger="trigger-1@longpress"
76
+ type="auto"
77
+ placement="right-start"
78
+ >
79
+ <sp-popover class="overlay-demo-popover" tip>
80
+ <sp-action-group vertical quiet>
81
+ <sp-action-button>
82
+ <sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
83
+ </sp-action-button>
84
+ <sp-action-button>
85
+ <sp-icon-polygon-select
86
+ slot="icon"
87
+ ></sp-icon-polygon-select>
88
+ </sp-action-button>
89
+ <sp-action-button>
90
+ <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
91
+ </sp-action-button>
92
+ </sp-action-group>
93
+ </sp-popover>
94
+ </sp-overlay>
95
+ <sp-overlay trigger="trigger-2@hover">
96
+ <sp-tooltip>Hover</sp-tooltip>
97
+ </sp-overlay>
98
+ <sp-overlay
99
+ trigger="trigger-2@longpress"
100
+ type="auto"
101
+ placement="right-start"
102
+ >
103
+ <sp-popover class="overlay-demo-popover" tip>
104
+ <sp-action-group vertical quiet>
105
+ <sp-action-button>
106
+ <sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
107
+ </sp-action-button>
108
+ <sp-action-button>
109
+ <sp-icon-polygon-select
110
+ slot="icon"
111
+ ></sp-icon-polygon-select>
112
+ </sp-action-button>
113
+ <sp-action-button>
114
+ <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
115
+ </sp-action-button>
116
+ </sp-action-group>
117
+ </sp-popover>
118
+ </sp-overlay>
119
+ <sp-overlay trigger="trigger-3@hover">
120
+ <sp-tooltip>Hover</sp-tooltip>
121
+ </sp-overlay>
122
+ <sp-overlay
123
+ trigger="trigger-3@longpress"
124
+ type="auto"
125
+ placement="right-start"
126
+ >
127
+ <sp-popover class="overlay-demo-popover" tip>
128
+ <sp-action-group vertical quiet>
129
+ <sp-action-button>
130
+ <sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
131
+ </sp-action-button>
132
+ <sp-action-button>
133
+ <sp-icon-polygon-select
134
+ slot="icon"
135
+ ></sp-icon-polygon-select>
136
+ </sp-action-button>
137
+ <sp-action-button>
138
+ <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
139
+ </sp-action-button>
140
+ </sp-action-group>
141
+ </sp-popover>
142
+ </sp-overlay>
71
143
  </sp-popover>
72
- <sp-overlay ?delayed="${delayed}" trigger="trigger-1@hover">
73
- <sp-tooltip>Hover</sp-tooltip>
74
- </sp-overlay>
75
- <sp-overlay
76
- trigger="trigger-1@longpress"
77
- type="auto"
78
- placement="right-start"
79
- .offset="${popoverOffset}"
80
- >
81
- <sp-popover class="overlay-demo-popover" tip>
82
- <sp-action-group vertical quiet>
83
- <sp-action-button>
84
- <sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
85
- </sp-action-button>
86
- <sp-action-button>
87
- <sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
88
- </sp-action-button>
89
- <sp-action-button>
90
- <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
91
- </sp-action-button>
92
- </sp-action-group>
93
- </sp-popover>
94
- </sp-overlay>
95
- <sp-overlay ?delayed="${delayed}" trigger="trigger-2@hover">
96
- <sp-tooltip>Hover</sp-tooltip>
97
- </sp-overlay>
98
- <sp-overlay
99
- trigger="trigger-2@longpress"
100
- type="auto"
101
- placement="right-start"
102
- .offset="${popoverOffset}"
103
- >
104
- <sp-popover class="overlay-demo-popover" tip>
105
- <sp-action-group vertical quiet>
106
- <sp-action-button>
107
- <sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
108
- </sp-action-button>
109
- <sp-action-button>
110
- <sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
111
- </sp-action-button>
112
- <sp-action-button>
113
- <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
114
- </sp-action-button>
115
- </sp-action-group>
116
- </sp-popover>
117
- </sp-overlay>
118
- <sp-overlay ?delayed="${delayed}" trigger="trigger-3@hover">
119
- <sp-tooltip>Hover</sp-tooltip>
120
- </sp-overlay>
121
- <sp-overlay
122
- trigger="trigger-3@longpress"
123
- type="auto"
124
- placement="right-start"
125
- .offset="${popoverOffset}"
126
- >
127
- <sp-popover class="overlay-demo-popover" tip>
128
- <sp-action-group vertical quiet>
129
- <sp-action-button>
130
- <sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
131
- </sp-action-button>
132
- <sp-action-button>
133
- <sp-icon-polygon-select slot="icon"></sp-icon-polygon-select>
134
- </sp-action-button>
135
- <sp-action-button>
136
- <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
137
- </sp-action-button>
138
- </sp-action-group>
139
- </sp-popover>
140
- </sp-overlay>
141
144
  ```
142
145
 
143
146
  ## API
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/overlay",
3
- "version": "0.35.1-rc.15+9b76319e4",
3
+ "version": "0.35.1-rc.24+e3649e123",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -128,11 +128,11 @@
128
128
  "dependencies": {
129
129
  "@floating-ui/dom": "^1.5.1",
130
130
  "@floating-ui/utils": "0.1.1",
131
- "@spectrum-web-components/action-button": "^0.35.1-rc.15+9b76319e4",
132
- "@spectrum-web-components/base": "^0.35.1-rc.15+9b76319e4",
133
- "@spectrum-web-components/reactive-controllers": "^0.35.1-rc.15+9b76319e4",
134
- "@spectrum-web-components/shared": "^0.35.1-rc.15+9b76319e4",
135
- "@spectrum-web-components/theme": "^0.35.1-rc.15+9b76319e4"
131
+ "@spectrum-web-components/action-button": "^0.35.1-rc.24+e3649e123",
132
+ "@spectrum-web-components/base": "^0.35.1-rc.24+e3649e123",
133
+ "@spectrum-web-components/reactive-controllers": "^0.35.1-rc.24+e3649e123",
134
+ "@spectrum-web-components/shared": "^0.35.1-rc.24+e3649e123",
135
+ "@spectrum-web-components/theme": "^0.35.1-rc.24+e3649e123"
136
136
  },
137
137
  "types": "./src/index.d.ts",
138
138
  "customElements": "custom-elements.json",
@@ -144,5 +144,5 @@
144
144
  "./stories/overlay-story-components.js",
145
145
  "./**/*.dev.js"
146
146
  ],
147
- "gitHead": "9b76319e4f1cc7cb0dd03e9d9debf544e5bed4e9"
147
+ "gitHead": "e3649e1230ed727048988a452969c38ced5467ac"
148
148
  }
@@ -1,5 +1,5 @@
1
1
  import { SpectrumElement } from '@spectrum-web-components/base';
2
- import type { OpenableElement, OverlayOptions, OverlayOptionsV1, OverlayTypes, TriggerInteractionsV1 } from './overlay-types.js';
2
+ import type { OpenableElement, OverlayOptions, OverlayOptionsV1, OverlayState, OverlayTypes, TriggerInteractionsV1 } from './overlay-types.js';
3
3
  import { Overlay } from './Overlay.js';
4
4
  import type { VirtualTrigger } from './VirtualTrigger.js';
5
5
  import { OverlayTimer } from './overlay-timer.js';
@@ -36,7 +36,6 @@ export declare class AbstractOverlay extends SpectrumElement {
36
36
  dispose: () => void;
37
37
  protected ensureOnDOM(_targetOpenState: boolean): Promise<void>;
38
38
  elements: OpenableElement[];
39
- isVisible: boolean;
40
39
  protected makeTransition(_targetOpenState: boolean): Promise<HTMLElement | null>;
41
40
  protected manageDelay(_targetOpenState: boolean): Promise<void>;
42
41
  protected manageDialogOpen(): Promise<void>;
@@ -46,6 +45,9 @@ export declare class AbstractOverlay extends SpectrumElement {
46
45
  set open(_open: boolean);
47
46
  protected placementController: PlacementController;
48
47
  receivesFocus: 'true' | 'false' | 'auto';
48
+ get state(): OverlayState;
49
+ set state(_state: OverlayState);
50
+ protected _state: OverlayState;
49
51
  triggerElement: HTMLElement | VirtualTrigger | null;
50
52
  type: OverlayTypes;
51
53
  static update(): void;
@@ -112,6 +112,12 @@ export class AbstractOverlay extends SpectrumElement {
112
112
  set open(_open) {
113
113
  return;
114
114
  }
115
+ get state() {
116
+ return "closed";
117
+ }
118
+ set state(_state) {
119
+ return;
120
+ }
115
121
  static update() {
116
122
  const overlayUpdateEvent = new CustomEvent("sp-update-overlays", {
117
123
  bubbles: true,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["AbstractOverlay.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { SpectrumElement } from '@spectrum-web-components/base';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\n\nimport type {\n OpenableElement,\n OverlayOptions,\n OverlayOptionsV1,\n OverlayTypes,\n TriggerInteractionsV1,\n} from './overlay-types.dev.js'\nimport { Overlay } from './Overlay.dev.js'\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { OverlayTimer } from './overlay-timer.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\n\nexport const overlayTimer = new OverlayTimer();\n\nexport const noop = (): void => {\n return;\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedAllTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, the multiple guarantees here\n // allow WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) - 1\n );\n if (!runningTransitions.get(event.propertyName)) {\n runningTransitions.delete(event.propertyName);\n }\n if (runningTransitions.size === 0) {\n cleanup();\n }\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n if (!runningTransitions.has(event.propertyName)) {\n runningTransitions.set(event.propertyName, 0);\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) + 1\n );\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n delayed!: boolean;\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n dispose = noop;\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n isVisible!: boolean;\n protected async makeTransition(\n _targetOpenState: boolean\n ): Promise<HTMLElement | null> {\n return null;\n }\n protected async manageDelay(_targetOpenState: boolean): Promise<void> {\n return;\n }\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n protected managePosition(): void {\n return;\n }\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n protected placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n triggerElement!: HTMLElement | VirtualTrigger | null;\n type!: OverlayTypes;\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n trigger: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n optionsV1: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n triggerOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n optionsV1?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n const overlay = new Overlay();\n let restored = false;\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n /**\n * Since content must exist in an <sp-overlay>, we need a way to get it there.\n * The best & most-direct way is to declaratively use an <sp-overlay> element,\n * but for imperative users, we'll reparent content into an overlay that we've created for them.\n **/\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n // Ensure that content to be overlaid is no longer targetted to a specific `slot`.\n // This allow for it to be visible in the overlaid context.\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n\n const v1 = !v2 && overlayContent && optionsV1;\n if (v1) {\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n overlay,\n `You are interacting with an ${overlay.localName} element via a deprecated imperative API. This API will be removed in a future version of the SWC library. Consider leveraging an ${overlay.localName} directly.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/overlay/',\n { level: 'deprecation' }\n );\n }\n const trigger = triggerOrContent;\n const interaction = interactionOrOptions;\n const options = optionsV1;\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || trigger;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n trigger.insertAdjacentElement('afterend', overlay);\n await overlay.updateComplete;\n overlay.open = true;\n return overlay.dispose;\n }\n\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n overlay.updateComplete.then(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n return overlay;\n }\n}\n"],
5
- "mappings": ";AAWA,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AASjC,SAAS,eAAe;AAExB,SAAS,oBAAoB;AAGtB,aAAM,eAAe,IAAI,aAAa;AAEtC,aAAM,OAAO,MAAY;AAC5B;AACJ;AAEO,aAAM,gCAAgC,MAAM;AAAA,EAG/C,cAAc;AACV,UAAM,gBAAgB;AAAA,MAClB,SAAS;AAAA,MACT,UAAU;AAAA,IACd,CAAC;AANL,wBAAe;AACf,oBAAW;AAAA,EAMX;AACJ;AAEO,aAAM,8BAA8B,MAAM;AAAA,EAG7C,cAAc;AACV,UAAM,gBAAgB;AAAA,MAClB,SAAS;AAAA,MACT,UAAU;AAAA,IACd,CAAC;AANL,wBAAe;AACf,oBAAW;AAAA,EAMX;AACJ;AAUO,aAAM,6BAA6B,CACtC,IACA,QACA,OACO;AACP,QAAM,qBAAqB,oBAAI,IAAoB;AACnD,QAAM,UAAU,MAAY;AACxB,OAAG,oBAAoB,iBAAiB,mBAAmB;AAC3D,OAAG,oBAAoB,iBAAiB,mBAAmB;AAC3D,OAAG;AAAA,EACP;AACA,MAAI;AACJ,MAAI;AAIJ,QAAM,aAAa,sBAAsB,MAAM;AAC3C,iBAAa,sBAAsB,MAAM;AACrC,mBAAa,sBAAsB,MAAM;AACrC,gBAAQ;AAAA,MACZ,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC;AACD,QAAM,sBAAsB,CAAC,UAAiC;AAC1D,QAAI,MAAM,WAAW,IAAI;AACrB;AAAA,IACJ;AACA,uBAAmB;AAAA,MACf,MAAM;AAAA,MACL,mBAAmB,IAAI,MAAM,YAAY,IAAe;AAAA,IAC7D;AACA,QAAI,CAAC,mBAAmB,IAAI,MAAM,YAAY,GAAG;AAC7C,yBAAmB,OAAO,MAAM,YAAY;AAAA,IAChD;AACA,QAAI,mBAAmB,SAAS,GAAG;AAC/B,cAAQ;AAAA,IACZ;AAAA,EACJ;AACA,QAAM,sBAAsB,CAAC,UAAiC;AAC1D,QAAI,MAAM,WAAW,IAAI;AACrB;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB,IAAI,MAAM,YAAY,GAAG;AAC7C,yBAAmB,IAAI,MAAM,cAAc,CAAC;AAAA,IAChD;AACA,uBAAmB;AAAA,MACf,MAAM;AAAA,MACL,mBAAmB,IAAI,MAAM,YAAY,IAAe;AAAA,IAC7D;AACA,yBAAqB,UAAU;AAC/B,yBAAqB,UAAU;AAC/B,yBAAqB,UAAU;AAAA,EACnC;AACA,KAAG,iBAAiB,iBAAiB,mBAAmB;AACxD,KAAG,iBAAiB,iBAAiB,mBAAmB;AACxD,SAAO;AACX;AAEO,gBAAS,YAA2B;AACvC,SAAO,IAAI,QAAQ,CAAC,QAAQ,sBAAsB,MAAM,IAAI,CAAC,CAAC;AAClE;AAEO,aAAM,wBAAwB,gBAAgB;AAAA,EAA9C;AAAA;AAYH,mBAAU;AAAA;AAAA,EAXV,MAAgB,WACZ,kBACA,UACa;AACb;AAAA,EACJ;AAAA,EAOA,MAAgB,YAAY,kBAA0C;AAClE;AAAA,EACJ;AAAA,EAGA,MAAgB,eACZ,kBAC2B;AAC3B,WAAO;AAAA,EACX;AAAA,EACA,MAAgB,YAAY,kBAA0C;AAClE;AAAA,EACJ;AAAA,EACA,MAAgB,mBAAkC;AAC9C;AAAA,EACJ;AAAA,EACA,MAAgB,oBAAmC;AAC/C;AAAA,EACJ;AAAA,EACU,iBAAuB;AAC7B;AAAA,EACJ;AAAA,EACA,IAAI,OAAgB;AAChB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,KAAK,OAAgB;AACrB;AAAA,EACJ;AAAA,EAMA,OAAc,SAAe;AACzB,UAAM,qBAAqB,IAAI,YAAY,sBAAsB;AAAA,MAC7D,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,IAChB,CAAC;AACD,aAAS,cAAc,kBAAkB;AAAA,EAC7C;AAAA,EAYA,aAAoB,KAChB,kBACA,sBAIA,SACA,WAC+B;AArMvC;AAsMQ,UAAM,KAAK,UAAU,WAAW;AAChC,UAAM,iBAAiB,WAAW;AAClC,UAAM,UAAU,IAAI,QAAQ;AAC5B,QAAI,WAAW;AACf,YAAQ,UAAU,MAAM;AACpB,cAAQ,iBAAiB,aAAa,MAAM;AACxC,YAAI,CAAC,UAAU;AACX,yBAAe;AACf,qBAAW;AAAA,QACf;AACA,8BAAsB,MAAM;AACxB,kBAAQ,OAAO;AAAA,QACnB,CAAC;AAAA,MACL,CAAC;AACD,cAAQ,OAAO;AACf,cAAQ,UAAU;AAAA,IACtB;AAMA,UAAM,iBAAiB,iBAAiB,CAAC,cAAc,GAAG,SAAS;AAAA,MAC/D,UAAU;AAAA,MACV,iBAAiB,CAAC,OAAO;AAGrB,cAAM,OAAO,GAAG;AAChB,WAAG,gBAAgB,MAAM;AACzB,eAAO,MAAM;AACT,aAAG,OAAO;AAAA,QACd;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,UAAM,KAAK,CAAC,MAAM,kBAAkB;AACpC,QAAI,IAAI;AACJ,UAAI,MAAoB;AACpB,eAAO,MAAM;AAAA,UACT;AAAA,UACA,+BAA+B,QAAQ,8IAA8I,QAAQ;AAAA,UAC7L;AAAA,UACA,EAAE,OAAO,cAAc;AAAA,QAC3B;AAAA,MACJ;AACA,YAAM,UAAU;AAChB,YAAM,cAAc;AACpB,YAAMA,WAAU;AAChB,cAAQ,UACJA,SAAQ,WAAW,eAAe,aAAa,SAAS;AAC5D,cAAQ,iBAAgB,KAAAA,SAAQ,kBAAR,YAAyB;AACjD,cAAQ,iBAAiBA,SAAQ,kBAAkB;AACnD,cAAQ,OACJ,gBAAgB,UACV,UACA,gBAAgB,UAChB,SACA;AACV,cAAQ,UAAS,KAAAA,SAAQ,WAAR,YAAkB;AACnC,cAAQ,YAAYA,SAAQ;AAC5B,cAAQ,mBAAmB,CAAC,CAACA,SAAQ;AACrC,cAAQ,sBAAsB,YAAY,OAAO;AACjD,YAAM,QAAQ;AACd,cAAQ,OAAO;AACf,aAAO,QAAQ;AAAA,IACnB;AAEA,UAAM,UAAU;AAChB,YAAQ,OAAO,cAAc;AAC7B,YAAQ,UACJ,QAAQ,WAAW,eAAe,aAAa,SAAS;AAC5D,YAAQ,iBAAgB,aAAQ,kBAAR,YAAyB;AACjD,YAAQ,iBAAiB,QAAQ,WAAW;AAC5C,YAAQ,OAAO,QAAQ,QAAQ;AAC/B,YAAQ,UAAS,aAAQ,WAAR,YAAkB;AACnC,YAAQ,YAAY,QAAQ;AAC5B,YAAQ,mBAAmB,CAAC,CAAC,QAAQ;AACrC,YAAQ,eAAe,KAAK,MAAM;AAE9B,cAAQ,OAAO;AAAA,IACnB,CAAC;AACD,WAAO;AAAA,EACX;AACJ;",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { SpectrumElement } from '@spectrum-web-components/base';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\n\nimport type {\n OpenableElement,\n OverlayOptions,\n OverlayOptionsV1,\n OverlayState,\n OverlayTypes,\n TriggerInteractionsV1,\n} from './overlay-types.dev.js'\nimport { Overlay } from './Overlay.dev.js'\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { OverlayTimer } from './overlay-timer.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\n\nexport const overlayTimer = new OverlayTimer();\n\nexport const noop = (): void => {\n return;\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedAllTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, the multiple guarantees here\n // allow WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) - 1\n );\n if (!runningTransitions.get(event.propertyName)) {\n runningTransitions.delete(event.propertyName);\n }\n if (runningTransitions.size === 0) {\n cleanup();\n }\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n if (!runningTransitions.has(event.propertyName)) {\n runningTransitions.set(event.propertyName, 0);\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) + 1\n );\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n delayed!: boolean;\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n dispose = noop;\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n protected async makeTransition(\n _targetOpenState: boolean\n ): Promise<HTMLElement | null> {\n return null;\n }\n protected async manageDelay(_targetOpenState: boolean): Promise<void> {\n return;\n }\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n protected managePosition(): void {\n return;\n }\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n protected placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n get state(): OverlayState {\n return 'closed';\n }\n set state(_state: OverlayState) {\n return;\n }\n protected _state!: OverlayState;\n triggerElement!: HTMLElement | VirtualTrigger | null;\n type!: OverlayTypes;\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n trigger: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n optionsV1: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n triggerOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n optionsV1?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n const overlay = new Overlay();\n let restored = false;\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n /**\n * Since content must exist in an <sp-overlay>, we need a way to get it there.\n * The best & most-direct way is to declaratively use an <sp-overlay> element,\n * but for imperative users, we'll reparent content into an overlay that we've created for them.\n **/\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n // Ensure that content to be overlaid is no longer targetted to a specific `slot`.\n // This allow for it to be visible in the overlaid context.\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n\n const v1 = !v2 && overlayContent && optionsV1;\n if (v1) {\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n overlay,\n `You are interacting with an ${overlay.localName} element via a deprecated imperative API. This API will be removed in a future version of the SWC library. Consider leveraging an ${overlay.localName} directly.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/overlay/',\n { level: 'deprecation' }\n );\n }\n const trigger = triggerOrContent;\n const interaction = interactionOrOptions;\n const options = optionsV1;\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || trigger;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n trigger.insertAdjacentElement('afterend', overlay);\n await overlay.updateComplete;\n overlay.open = true;\n return overlay.dispose;\n }\n\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n overlay.updateComplete.then(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n return overlay;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["options"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";import{SpectrumElement as E}from"@spectrum-web-components/base";import{reparentChildren as O}from"@spectrum-web-components/shared/src/reparent-children.js";import{Overlay as T}from"./Overlay.js";import{OverlayTimer as w}from"./overlay-timer.js";export const overlayTimer=new w,noop=()=>{};export class BeforetoggleClosedEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="open";this.newState="closed"}}export class BeforetoggleOpenEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="closed";this.newState="open"}}export const guaranteedAllTransitionend=(o,c,n)=>{const t=new Map,d=()=>{o.removeEventListener("transitionrun",m),o.removeEventListener("transitionend",e),n()};let p,u;const a=requestAnimationFrame(()=>{p=requestAnimationFrame(()=>{u=requestAnimationFrame(()=>{d()})})}),e=r=>{r.target===o&&(t.set(r.propertyName,t.get(r.propertyName)-1),t.get(r.propertyName)||t.delete(r.propertyName),t.size===0&&d())},m=r=>{r.target===o&&(t.has(r.propertyName)||t.set(r.propertyName,0),t.set(r.propertyName,t.get(r.propertyName)+1),cancelAnimationFrame(a),cancelAnimationFrame(p),cancelAnimationFrame(u))};o.addEventListener("transitionrun",m),o.addEventListener("transitionend",e),c()};export function nextFrame(){return new Promise(o=>requestAnimationFrame(()=>o()))}export class AbstractOverlay extends E{constructor(){super(...arguments);this.dispose=noop}async applyFocus(n,t){}async ensureOnDOM(n){}async makeTransition(n){return null}async manageDelay(n){}async manageDialogOpen(){}async managePopoverOpen(){}managePosition(){}get open(){return!1}set open(n){}static update(){const n=new CustomEvent("sp-update-overlays",{bubbles:!0,composed:!0,cancelable:!0});document.dispatchEvent(n)}static async open(n,t,d,p){var y,g,b,f;const u=arguments.length===2,a=d||n,e=new T;let m=!1;e.dispose=()=>{e.addEventListener("sp-closed",()=>{m||(r(),m=!0),requestAnimationFrame(()=>{e.remove()})}),e.open=!1,e.dispose=noop};const r=O([a],e,{position:"beforeend",prepareCallback:i=>{const v=i.slot;return i.removeAttribute("slot"),()=>{i.slot=v}}});if(!u&&a&&p){const i=n,v=t,l=p;return e.delayed=l.delayed||a.hasAttribute("delayed"),e.receivesFocus=(y=l.receivesFocus)!=null?y:"auto",e.triggerElement=l.virtualTrigger||i,e.type=v==="modal"?"modal":v==="hover"?"hint":"auto",e.offset=(g=l.offset)!=null?g:6,e.placement=l.placement,e.willPreventClose=!!l.notImmediatelyClosable,i.insertAdjacentElement("afterend",e),await e.updateComplete,e.open=!0,e.dispose}const s=t;return e.append(a),e.delayed=s.delayed||a.hasAttribute("delayed"),e.receivesFocus=(b=s.receivesFocus)!=null?b:"auto",e.triggerElement=s.trigger||null,e.type=s.type||"modal",e.offset=(f=s.offset)!=null?f:6,e.placement=s.placement,e.willPreventClose=!!s.notImmediatelyClosable,e.updateComplete.then(()=>{e.open=!0}),e}}
1
+ "use strict";import{SpectrumElement as E}from"@spectrum-web-components/base";import{reparentChildren as O}from"@spectrum-web-components/shared/src/reparent-children.js";import{Overlay as T}from"./Overlay.js";import{OverlayTimer as w}from"./overlay-timer.js";export const overlayTimer=new w,noop=()=>{};export class BeforetoggleClosedEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="open";this.newState="closed"}}export class BeforetoggleOpenEvent extends Event{constructor(){super("beforetoggle",{bubbles:!1,composed:!1});this.currentState="closed";this.newState="open"}}export const guaranteedAllTransitionend=(n,c,o)=>{const t=new Map,d=()=>{n.removeEventListener("transitionrun",m),n.removeEventListener("transitionend",e),o()};let p,u;const a=requestAnimationFrame(()=>{p=requestAnimationFrame(()=>{u=requestAnimationFrame(()=>{d()})})}),e=r=>{r.target===n&&(t.set(r.propertyName,t.get(r.propertyName)-1),t.get(r.propertyName)||t.delete(r.propertyName),t.size===0&&d())},m=r=>{r.target===n&&(t.has(r.propertyName)||t.set(r.propertyName,0),t.set(r.propertyName,t.get(r.propertyName)+1),cancelAnimationFrame(a),cancelAnimationFrame(p),cancelAnimationFrame(u))};n.addEventListener("transitionrun",m),n.addEventListener("transitionend",e),c()};export function nextFrame(){return new Promise(n=>requestAnimationFrame(()=>n()))}export class AbstractOverlay extends E{constructor(){super(...arguments);this.dispose=noop}async applyFocus(o,t){}async ensureOnDOM(o){}async makeTransition(o){return null}async manageDelay(o){}async manageDialogOpen(){}async managePopoverOpen(){}managePosition(){}get open(){return!1}set open(o){}get state(){return"closed"}set state(o){}static update(){const o=new CustomEvent("sp-update-overlays",{bubbles:!0,composed:!0,cancelable:!0});document.dispatchEvent(o)}static async open(o,t,d,p){var y,g,b,f;const u=arguments.length===2,a=d||o,e=new T;let m=!1;e.dispose=()=>{e.addEventListener("sp-closed",()=>{m||(r(),m=!0),requestAnimationFrame(()=>{e.remove()})}),e.open=!1,e.dispose=noop};const r=O([a],e,{position:"beforeend",prepareCallback:i=>{const v=i.slot;return i.removeAttribute("slot"),()=>{i.slot=v}}});if(!u&&a&&p){const i=o,v=t,l=p;return e.delayed=l.delayed||a.hasAttribute("delayed"),e.receivesFocus=(y=l.receivesFocus)!=null?y:"auto",e.triggerElement=l.virtualTrigger||i,e.type=v==="modal"?"modal":v==="hover"?"hint":"auto",e.offset=(g=l.offset)!=null?g:6,e.placement=l.placement,e.willPreventClose=!!l.notImmediatelyClosable,i.insertAdjacentElement("afterend",e),await e.updateComplete,e.open=!0,e.dispose}const s=t;return e.append(a),e.delayed=s.delayed||a.hasAttribute("delayed"),e.receivesFocus=(b=s.receivesFocus)!=null?b:"auto",e.triggerElement=s.trigger||null,e.type=s.type||"modal",e.offset=(f=s.offset)!=null?f:6,e.placement=s.placement,e.willPreventClose=!!s.notImmediatelyClosable,e.updateComplete.then(()=>{e.open=!0}),e}}
2
2
  //# sourceMappingURL=AbstractOverlay.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["AbstractOverlay.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { SpectrumElement } from '@spectrum-web-components/base';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\n\nimport type {\n OpenableElement,\n OverlayOptions,\n OverlayOptionsV1,\n OverlayTypes,\n TriggerInteractionsV1,\n} from './overlay-types.js';\nimport { Overlay } from './Overlay.js';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport { OverlayTimer } from './overlay-timer.js';\nimport { PlacementController } from './PlacementController.js';\n\nexport const overlayTimer = new OverlayTimer();\n\nexport const noop = (): void => {\n return;\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedAllTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, the multiple guarantees here\n // allow WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) - 1\n );\n if (!runningTransitions.get(event.propertyName)) {\n runningTransitions.delete(event.propertyName);\n }\n if (runningTransitions.size === 0) {\n cleanup();\n }\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n if (!runningTransitions.has(event.propertyName)) {\n runningTransitions.set(event.propertyName, 0);\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) + 1\n );\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n delayed!: boolean;\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n dispose = noop;\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n isVisible!: boolean;\n protected async makeTransition(\n _targetOpenState: boolean\n ): Promise<HTMLElement | null> {\n return null;\n }\n protected async manageDelay(_targetOpenState: boolean): Promise<void> {\n return;\n }\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n protected managePosition(): void {\n return;\n }\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n protected placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n triggerElement!: HTMLElement | VirtualTrigger | null;\n type!: OverlayTypes;\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n trigger: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n optionsV1: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n triggerOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n optionsV1?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n const overlay = new Overlay();\n let restored = false;\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n /**\n * Since content must exist in an <sp-overlay>, we need a way to get it there.\n * The best & most-direct way is to declaratively use an <sp-overlay> element,\n * but for imperative users, we'll reparent content into an overlay that we've created for them.\n **/\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n // Ensure that content to be overlaid is no longer targetted to a specific `slot`.\n // This allow for it to be visible in the overlaid context.\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n\n const v1 = !v2 && overlayContent && optionsV1;\n if (v1) {\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n overlay,\n `You are interacting with an ${overlay.localName} element via a deprecated imperative API. This API will be removed in a future version of the SWC library. Consider leveraging an ${overlay.localName} directly.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/overlay/',\n { level: 'deprecation' }\n );\n }\n const trigger = triggerOrContent;\n const interaction = interactionOrOptions;\n const options = optionsV1;\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || trigger;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n trigger.insertAdjacentElement('afterend', overlay);\n await overlay.updateComplete;\n overlay.open = true;\n return overlay.dispose;\n }\n\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n overlay.updateComplete.then(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n return overlay;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["SpectrumElement", "reparentChildren", "Overlay", "OverlayTimer", "el", "action", "cb", "runningTransitions", "cleanup", "handleTransitionrun", "handleTransitionend", "guarantee2", "guarantee3", "guarantee1", "event", "res", "_targetOpenState", "_focusEl", "_open", "overlayUpdateEvent", "triggerOrContent", "interactionOrOptions", "content", "optionsV1", "_a", "_b", "_c", "_d", "v2", "overlayContent", "overlay", "restored", "restoreContent", "slot", "trigger", "interaction", "options"]
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { SpectrumElement } from '@spectrum-web-components/base';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\n\nimport type {\n OpenableElement,\n OverlayOptions,\n OverlayOptionsV1,\n OverlayState,\n OverlayTypes,\n TriggerInteractionsV1,\n} from './overlay-types.js';\nimport { Overlay } from './Overlay.js';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport { OverlayTimer } from './overlay-timer.js';\nimport { PlacementController } from './PlacementController.js';\n\nexport const overlayTimer = new OverlayTimer();\n\nexport const noop = (): void => {\n return;\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedAllTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, the multiple guarantees here\n // allow WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) - 1\n );\n if (!runningTransitions.get(event.propertyName)) {\n runningTransitions.delete(event.propertyName);\n }\n if (runningTransitions.size === 0) {\n cleanup();\n }\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.target !== el) {\n return;\n }\n if (!runningTransitions.has(event.propertyName)) {\n runningTransitions.set(event.propertyName, 0);\n }\n runningTransitions.set(\n event.propertyName,\n (runningTransitions.get(event.propertyName) as number) + 1\n );\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n delayed!: boolean;\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n dispose = noop;\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n protected async makeTransition(\n _targetOpenState: boolean\n ): Promise<HTMLElement | null> {\n return null;\n }\n protected async manageDelay(_targetOpenState: boolean): Promise<void> {\n return;\n }\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n protected managePosition(): void {\n return;\n }\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n protected placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n get state(): OverlayState {\n return 'closed';\n }\n set state(_state: OverlayState) {\n return;\n }\n protected _state!: OverlayState;\n triggerElement!: HTMLElement | VirtualTrigger | null;\n type!: OverlayTypes;\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n trigger: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n optionsV1: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n triggerOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n optionsV1?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n const overlay = new Overlay();\n let restored = false;\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n /**\n * Since content must exist in an <sp-overlay>, we need a way to get it there.\n * The best & most-direct way is to declaratively use an <sp-overlay> element,\n * but for imperative users, we'll reparent content into an overlay that we've created for them.\n **/\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n // Ensure that content to be overlaid is no longer targetted to a specific `slot`.\n // This allow for it to be visible in the overlaid context.\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n\n const v1 = !v2 && overlayContent && optionsV1;\n if (v1) {\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n overlay,\n `You are interacting with an ${overlay.localName} element via a deprecated imperative API. This API will be removed in a future version of the SWC library. Consider leveraging an ${overlay.localName} directly.`,\n 'https://opensource.adobe.com/spectrum-web-components/components/overlay/',\n { level: 'deprecation' }\n );\n }\n const trigger = triggerOrContent;\n const interaction = interactionOrOptions;\n const options = optionsV1;\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || trigger;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n trigger.insertAdjacentElement('afterend', overlay);\n await overlay.updateComplete;\n overlay.open = true;\n return overlay.dispose;\n }\n\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.delayed =\n options.delayed || overlayContent.hasAttribute('delayed');\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n overlay.updateComplete.then(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n return overlay;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SpectrumElement", "reparentChildren", "Overlay", "OverlayTimer", "el", "action", "cb", "runningTransitions", "cleanup", "handleTransitionrun", "handleTransitionend", "guarantee2", "guarantee3", "guarantee1", "event", "res", "_targetOpenState", "_focusEl", "_open", "_state", "overlayUpdateEvent", "triggerOrContent", "interactionOrOptions", "content", "optionsV1", "_a", "_b", "_c", "_d", "v2", "overlayContent", "overlay", "restored", "restoreContent", "slot", "trigger", "interaction", "options"]
7
7
  }
package/src/Overlay.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { PropertyValues, TemplateResult } from '@spectrum-web-components/base';
2
2
  import { AbstractOverlay } from './AbstractOverlay.js';
3
- import { OpenableElement, OverlayTypes, Placement } from './overlay-types.js';
3
+ import { OpenableElement, OverlayState, OverlayTypes, Placement } from './overlay-types.js';
4
4
  import { VirtualTrigger } from './VirtualTrigger.js';
5
5
  import { PlacementController } from './PlacementController.js';
6
6
  export declare const LONGPRESS_INSTRUCTIONS: {
@@ -40,9 +40,8 @@ export declare class Overlay extends OverlayFeatures {
40
40
  elements: OpenableElement[];
41
41
  parentOverlayToForceClose?: Overlay;
42
42
  private get hasNonVirtualTrigger();
43
- protected longpressed: boolean;
43
+ protected longpressState: 'null' | 'potential' | 'opening' | 'pressed';
44
44
  private longressTimeout;
45
- isVisible: boolean;
46
45
  /**
47
46
  * The `offset` property accepts either a single number, to
48
47
  * define the offset of the Overlay along the main axis from
@@ -65,6 +64,9 @@ export declare class Overlay extends OverlayFeatures {
65
64
  private releaseAriaDescribedby;
66
65
  private releaseLongpressDescribedby;
67
66
  slotEl: HTMLSlotElement;
67
+ get state(): OverlayState;
68
+ set state(state: OverlayState);
69
+ _state: OverlayState;
68
70
  tipPadding?: number;
69
71
  /**
70
72
  * An optional ID reference for the trigger element combined with the optional
@@ -59,14 +59,14 @@ const _Overlay = class extends OverlayFeatures {
59
59
  super(...arguments);
60
60
  this.delayed = false;
61
61
  this._disabled = false;
62
- this.longpressed = false;
63
- this.isVisible = false;
62
+ this.longpressState = "null";
64
63
  this.offset = 6;
65
64
  this.placementController = new PlacementController(this);
66
65
  this._open = false;
67
66
  this.receivesFocus = "auto";
68
67
  this.releaseAriaDescribedby = noop;
69
68
  this.releaseLongpressDescribedby = noop;
69
+ this._state = "closed";
70
70
  this.triggerElement = null;
71
71
  this.type = "hint";
72
72
  this.wasOpen = false;
@@ -78,9 +78,12 @@ const _Overlay = class extends OverlayFeatures {
78
78
  if (event.button !== 0)
79
79
  return;
80
80
  const triggerElement = this.triggerElement;
81
- this.longpressed = false;
81
+ this.longpressState = "potential";
82
82
  triggerElement.addEventListener("pointerup", this.handlePointerup);
83
83
  triggerElement.addEventListener("pointercancel", this.handlePointerup);
84
+ if (triggerElement.holdAffordance) {
85
+ return;
86
+ }
84
87
  this.longressTimeout = setTimeout(() => {
85
88
  if (!triggerElement)
86
89
  return;
@@ -99,12 +102,7 @@ const _Overlay = class extends OverlayFeatures {
99
102
  clearTimeout(this.longressTimeout);
100
103
  if (!this.triggerElement)
101
104
  return;
102
- if (this.longpressed) {
103
- this.open = true;
104
- }
105
- setTimeout(() => {
106
- this.longpressed = false;
107
- });
105
+ this.longpressState = this.state === "opening" ? "pressed" : "null";
108
106
  const triggerElement = this.triggerElement;
109
107
  triggerElement.removeEventListener("pointerup", this.handlePointerup);
110
108
  triggerElement.removeEventListener(
@@ -127,8 +125,11 @@ const _Overlay = class extends OverlayFeatures {
127
125
  this.handleKeyup = (event) => {
128
126
  const { code, altKey } = event;
129
127
  if (code === "Space" || altKey && code === "ArrowDown") {
128
+ if (!this.triggerElement || !this.hasNonVirtualTrigger) {
129
+ return;
130
+ }
130
131
  event.stopPropagation();
131
- this.dispatchEvent(
132
+ this.triggerElement.dispatchEvent(
132
133
  new CustomEvent("longpress", {
133
134
  bubbles: true,
134
135
  composed: true,
@@ -137,6 +138,9 @@ const _Overlay = class extends OverlayFeatures {
137
138
  }
138
139
  })
139
140
  );
141
+ setTimeout(() => {
142
+ this.longpressState = "null";
143
+ });
140
144
  }
141
145
  };
142
146
  /**
@@ -150,8 +154,9 @@ const _Overlay = class extends OverlayFeatures {
150
154
  this.preventNextToggle = this.open;
151
155
  };
152
156
  this.handleClick = () => {
153
- if (this.longpressed)
157
+ if (this.longpressState === "opening" || this.longpressState === "pressed") {
154
158
  return;
159
+ }
155
160
  if (!this.preventNextToggle) {
156
161
  this.open = !this.open;
157
162
  }
@@ -198,7 +203,7 @@ const _Overlay = class extends OverlayFeatures {
198
203
  };
199
204
  this.handleLongpress = () => {
200
205
  this.open = true;
201
- this.longpressed = true;
206
+ this.longpressState = this.longpressState === "potential" ? "opening" : "pressed";
202
207
  };
203
208
  this.willPreventClose = false;
204
209
  }
@@ -230,17 +235,35 @@ const _Overlay = class extends OverlayFeatures {
230
235
  return;
231
236
  if (open === this.open)
232
237
  return;
238
+ if ((this.longpressState === "opening" || this.longpressState === "pressed") && !open)
239
+ return;
233
240
  this._open = open;
234
241
  if (this.open) {
235
242
  _Overlay.openCount += 1;
236
- this.isVisible = true;
237
243
  }
238
244
  this.requestUpdate("open", !this.open);
239
245
  }
246
+ get state() {
247
+ return this._state;
248
+ }
249
+ set state(state2) {
250
+ if (state2 === this.state)
251
+ return;
252
+ const oldState = this.state;
253
+ this._state = state2;
254
+ if (this.state === "opened" || this.state === "closed") {
255
+ this.longpressState = this.longpressState === "pressed" ? "null" : this.longpressState;
256
+ }
257
+ this.requestUpdate("state", oldState);
258
+ }
240
259
  get usesDialog() {
241
260
  return this.type === "modal" || this.type === "page";
242
261
  }
243
262
  get popoverValue() {
263
+ const hasPopoverAttribute = "popover" in this;
264
+ if (!hasPopoverAttribute) {
265
+ return void 0;
266
+ }
244
267
  switch (this.type) {
245
268
  case "modal":
246
269
  case "page":
@@ -339,6 +362,11 @@ const _Overlay = class extends OverlayFeatures {
339
362
  }
340
363
  overlayStack.remove(this);
341
364
  }
365
+ if (this.open && this.state !== "opened") {
366
+ this.state = "opening";
367
+ } else if (!this.open && this.state !== "closed") {
368
+ this.state = "closing";
369
+ }
342
370
  if (this.usesDialog) {
343
371
  this.manageDialogOpen();
344
372
  } else {
@@ -401,18 +429,21 @@ const _Overlay = class extends OverlayFeatures {
401
429
  bindLongpressEvents(triggerElement) {
402
430
  const options = { signal: this.abortController.signal };
403
431
  triggerElement.addEventListener(
404
- "pointerdown",
405
- this.handlePointerdown,
432
+ "longpress",
433
+ this.handleLongpress,
406
434
  options
407
435
  );
408
- triggerElement.addEventListener("keydown", this.handleKeydown, options);
409
- triggerElement.addEventListener("keyup", this.handleKeyup, options);
410
436
  triggerElement.addEventListener(
411
- "longpress",
412
- this.handleLongpress,
437
+ "pointerdown",
438
+ this.handlePointerdown,
413
439
  options
414
440
  );
415
441
  this.prepareLongpressDescription(triggerElement);
442
+ if (triggerElement.holdAffordance) {
443
+ return;
444
+ }
445
+ triggerElement.addEventListener("keydown", this.handleKeydown, options);
446
+ triggerElement.addEventListener("keyup", this.handleKeyup, options);
416
447
  }
417
448
  bindHoverEvents(triggerElement) {
418
449
  const options = { signal: this.abortController.signal };
@@ -535,7 +566,12 @@ const _Overlay = class extends OverlayFeatures {
535
566
  }
536
567
  }
537
568
  handleBrowserClose() {
538
- this.open = false;
569
+ if (this.longpressState !== "opening" && this.longpressState !== "pressed") {
570
+ this.open = false;
571
+ return;
572
+ }
573
+ this.open = true;
574
+ this.manageOpen(false);
539
575
  }
540
576
  handleSlotchange() {
541
577
  if (this.triggerElement) {
@@ -635,23 +671,21 @@ const _Overlay = class extends OverlayFeatures {
635
671
  @close=${this.handleBrowserClose}
636
672
  @cancel=${this.handleBrowserClose}
637
673
  @beforetoggle=${this.handleBeforetoggle}
638
- ?is-visible=${this.isVisible}
674
+ ?is-visible=${this.state !== "closed"}
639
675
  >
640
676
  ${this.renderContent()}
641
677
  </dialog>
642
678
  `;
643
679
  }
644
680
  renderPopover() {
645
- const hasPopoverAttribute = "popover" in this;
646
- const popoverValue = hasPopoverAttribute ? this.popoverValue : void 0;
647
681
  return html`
648
682
  <div
649
683
  class="dialog"
650
684
  part="dialog"
651
- popover=${ifDefined(popoverValue)}
685
+ popover=${ifDefined(this.popoverValue)}
652
686
  @beforetoggle=${this.handleBeforetoggle}
653
687
  @close=${this.handleBrowserClose}
654
- ?is-visible=${this.isVisible}
688
+ ?is-visible=${this.state !== "closed"}
655
689
  >
656
690
  ${this.renderContent()}
657
691
  </div>
@@ -700,9 +734,6 @@ __decorateClass([
700
734
  // gather only elements slotted into the default slot
701
735
  })
702
736
  ], Overlay.prototype, "elements", 2);
703
- __decorateClass([
704
- state()
705
- ], Overlay.prototype, "isVisible", 2);
706
737
  __decorateClass([
707
738
  property({ type: Number })
708
739
  ], Overlay.prototype, "offset", 2);
@@ -718,6 +749,9 @@ __decorateClass([
718
749
  __decorateClass([
719
750
  query("slot")
720
751
  ], Overlay.prototype, "slotEl", 2);
752
+ __decorateClass([
753
+ state()
754
+ ], Overlay.prototype, "state", 1);
721
755
  __decorateClass([
722
756
  property({ type: Number, attribute: "tip-padding" })
723
757
  ], Overlay.prototype, "tipPadding", 2);