@spectrum-web-components/overlay 0.41.0 → 0.41.2

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 (100) hide show
  1. package/custom-elements.json +996 -314
  2. package/package.json +31 -7
  3. package/src/AbstractOverlay.d.ts +13 -3
  4. package/src/AbstractOverlay.dev.js +54 -19
  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/ClickController.d.ts +14 -0
  9. package/src/ClickController.dev.js +42 -0
  10. package/src/ClickController.dev.js.map +7 -0
  11. package/src/ClickController.js +2 -0
  12. package/src/ClickController.js.map +7 -0
  13. package/src/HoverController.d.ts +19 -0
  14. package/src/HoverController.dev.js +141 -0
  15. package/src/HoverController.dev.js.map +7 -0
  16. package/src/HoverController.js +2 -0
  17. package/src/HoverController.js.map +7 -0
  18. package/src/InteractionController.d.ts +23 -0
  19. package/src/InteractionController.dev.js +45 -0
  20. package/src/InteractionController.dev.js.map +7 -0
  21. package/src/InteractionController.js +2 -0
  22. package/src/InteractionController.js.map +7 -0
  23. package/src/LongpressController.d.ts +21 -0
  24. package/src/LongpressController.dev.js +157 -0
  25. package/src/LongpressController.dev.js.map +7 -0
  26. package/src/LongpressController.js +2 -0
  27. package/src/LongpressController.js.map +7 -0
  28. package/src/Overlay.d.ts +17 -50
  29. package/src/Overlay.dev.js +86 -363
  30. package/src/Overlay.dev.js.map +2 -2
  31. package/src/Overlay.js +10 -10
  32. package/src/Overlay.js.map +3 -3
  33. package/src/OverlayDialog.dev.js +8 -1
  34. package/src/OverlayDialog.dev.js.map +2 -2
  35. package/src/OverlayDialog.js +1 -1
  36. package/src/OverlayDialog.js.map +3 -3
  37. package/src/OverlayNoPopover.dev.js +9 -3
  38. package/src/OverlayNoPopover.dev.js.map +2 -2
  39. package/src/OverlayNoPopover.js +1 -1
  40. package/src/OverlayNoPopover.js.map +3 -3
  41. package/src/OverlayPopover.dev.js +10 -1
  42. package/src/OverlayPopover.dev.js.map +2 -2
  43. package/src/OverlayPopover.js +1 -1
  44. package/src/OverlayPopover.js.map +3 -3
  45. package/src/OverlayStack.dev.js +3 -0
  46. package/src/OverlayStack.dev.js.map +2 -2
  47. package/src/OverlayStack.js +1 -1
  48. package/src/OverlayStack.js.map +2 -2
  49. package/src/index.d.ts +1 -0
  50. package/src/index.dev.js +1 -0
  51. package/src/index.dev.js.map +2 -2
  52. package/src/index.js +1 -1
  53. package/src/index.js.map +2 -2
  54. package/src/overlay-trigger-directive.d.ts +31 -0
  55. package/src/overlay-trigger-directive.dev.js +102 -0
  56. package/src/overlay-trigger-directive.dev.js.map +7 -0
  57. package/src/overlay-trigger-directive.js +2 -0
  58. package/src/overlay-trigger-directive.js.map +7 -0
  59. package/src/overlay-trigger.css.dev.js +1 -1
  60. package/src/overlay-trigger.css.dev.js.map +1 -1
  61. package/src/overlay-trigger.css.js +1 -1
  62. package/src/overlay-trigger.css.js.map +1 -1
  63. package/src/overlay-types.d.ts +7 -0
  64. package/src/overlay-types.dev.js.map +1 -1
  65. package/src/overlay-types.js.map +1 -1
  66. package/src/overlay.css.dev.js +1 -3
  67. package/src/overlay.css.dev.js.map +2 -2
  68. package/src/overlay.css.js +1 -3
  69. package/src/overlay.css.js.map +2 -2
  70. package/src/slottable-request-event.d.ts +7 -0
  71. package/src/slottable-request-event.dev.js +28 -0
  72. package/src/slottable-request-event.dev.js.map +7 -0
  73. package/src/slottable-request-event.js +2 -0
  74. package/src/slottable-request-event.js.map +7 -0
  75. package/stories/overlay-directive.stories.js +203 -0
  76. package/stories/overlay-directive.stories.js.map +7 -0
  77. package/stories/overlay-element.stories.js +44 -1
  78. package/stories/overlay-element.stories.js.map +2 -2
  79. package/stories/overlay.stories.js +9 -9
  80. package/stories/overlay.stories.js.map +2 -2
  81. package/test/benchmark/basic-test.js +24 -1
  82. package/test/benchmark/basic-test.js.map +2 -2
  83. package/test/benchmark/directive-test.js +42 -0
  84. package/test/benchmark/directive-test.js.map +7 -0
  85. package/test/benchmark/element-test.js +40 -0
  86. package/test/benchmark/element-test.js.map +7 -0
  87. package/test/benchmark/lazy-test.js +48 -0
  88. package/test/benchmark/lazy-test.js.map +7 -0
  89. package/test/index.js +11 -176
  90. package/test/index.js.map +2 -2
  91. package/test/overlay-directive.test-vrt.js +5 -0
  92. package/test/overlay-directive.test-vrt.js.map +7 -0
  93. package/test/overlay-directive.test.js +147 -0
  94. package/test/overlay-directive.test.js.map +7 -0
  95. package/test/overlay-element.test.js +152 -1
  96. package/test/overlay-element.test.js.map +2 -2
  97. package/test/overlay-trigger-directive.test.js +75 -0
  98. package/test/overlay-trigger-directive.test.js.map +7 -0
  99. package/test/overlay-trigger-extended.test.js +1 -1
  100. package/test/overlay-trigger-extended.test.js.map +2 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/overlay",
3
- "version": "0.41.0",
3
+ "version": "0.41.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -29,6 +29,22 @@
29
29
  "development": "./src/AbstractOverlay.dev.js",
30
30
  "default": "./src/AbstractOverlay.js"
31
31
  },
32
+ "./src/ClickController.js": {
33
+ "development": "./src/ClickController.dev.js",
34
+ "default": "./src/ClickController.js"
35
+ },
36
+ "./src/HoverController.js": {
37
+ "development": "./src/HoverController.dev.js",
38
+ "default": "./src/HoverController.js"
39
+ },
40
+ "./src/InteractionController.js": {
41
+ "development": "./src/InteractionController.dev.js",
42
+ "default": "./src/InteractionController.js"
43
+ },
44
+ "./src/LongpressController.js": {
45
+ "development": "./src/LongpressController.dev.js",
46
+ "default": "./src/LongpressController.js"
47
+ },
32
48
  "./src/Overlay.js": {
33
49
  "development": "./src/Overlay.dev.js",
34
50
  "default": "./src/Overlay.js"
@@ -81,12 +97,20 @@
81
97
  "development": "./src/overlay-timer.dev.js",
82
98
  "default": "./src/overlay-timer.js"
83
99
  },
100
+ "./src/overlay-trigger-directive.js": {
101
+ "development": "./src/overlay-trigger-directive.dev.js",
102
+ "default": "./src/overlay-trigger-directive.js"
103
+ },
84
104
  "./src/overlay-trigger.css.js": "./src/overlay-trigger.css.js",
85
105
  "./src/overlay-types.js": {
86
106
  "development": "./src/overlay-types.dev.js",
87
107
  "default": "./src/overlay-types.js"
88
108
  },
89
109
  "./src/overlay.css.js": "./src/overlay.css.js",
110
+ "./src/slottable-request-event.js": {
111
+ "development": "./src/slottable-request-event.dev.js",
112
+ "default": "./src/slottable-request-event.js"
113
+ },
90
114
  "./active-overlay.js": {
91
115
  "development": "./active-overlay.dev.js",
92
116
  "default": "./active-overlay.js"
@@ -124,11 +148,11 @@
124
148
  "dependencies": {
125
149
  "@floating-ui/dom": "^1.6.1",
126
150
  "@floating-ui/utils": "^0.2.1",
127
- "@spectrum-web-components/action-button": "^0.41.0",
128
- "@spectrum-web-components/base": "^0.41.0",
129
- "@spectrum-web-components/reactive-controllers": "^0.41.0",
130
- "@spectrum-web-components/shared": "^0.41.0",
131
- "@spectrum-web-components/theme": "^0.41.0"
151
+ "@spectrum-web-components/action-button": "^0.41.2",
152
+ "@spectrum-web-components/base": "^0.41.2",
153
+ "@spectrum-web-components/reactive-controllers": "^0.41.2",
154
+ "@spectrum-web-components/shared": "^0.41.2",
155
+ "@spectrum-web-components/theme": "^0.41.2"
132
156
  },
133
157
  "types": "./src/index.d.ts",
134
158
  "customElements": "custom-elements.json",
@@ -140,5 +164,5 @@
140
164
  "./stories/overlay-story-components.js",
141
165
  "./**/*.dev.js"
142
166
  ],
143
- "gitHead": "0bf38fd427adc39804b228a4c61de623e5ebb82e"
167
+ "gitHead": "78c3f16b08c9133c9e5ca88d0c9fef5ea7d2ab87"
144
168
  }
@@ -3,7 +3,8 @@ import type { OpenableElement, OverlayOptions, OverlayOptionsV1, OverlayState, O
3
3
  import type { Overlay } from './Overlay.js';
4
4
  import type { VirtualTrigger } from './VirtualTrigger.js';
5
5
  import { OverlayTimer } from './overlay-timer.js';
6
- import { PlacementController } from './PlacementController.js';
6
+ import type { PlacementController } from './PlacementController.js';
7
+ import type { ElementResolutionController } from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';
7
8
  export declare const overlayTimer: OverlayTimer;
8
9
  export declare const noop: () => void;
9
10
  export declare class BeforetoggleClosedEvent extends Event {
@@ -44,7 +45,6 @@ declare global {
44
45
  */
45
46
  export declare const guaranteedAllTransitionend: (el: HTMLElement, action: () => void, cb: () => void) => void;
46
47
  export declare function nextFrame(): Promise<void>;
47
- export declare function forcePaint(): void;
48
48
  /**
49
49
  * Abstract Overlay base class so that property tyings and imperative API
50
50
  * interfaces can be held separate from the actual class definition.
@@ -57,7 +57,12 @@ export declare class AbstractOverlay extends SpectrumElement {
57
57
  showPopover(): void;
58
58
  hidePopover(): void;
59
59
  };
60
+ get disabled(): boolean;
61
+ set disabled(_disabled: boolean);
60
62
  dispose: () => void;
63
+ protected get elementResolver(): ElementResolutionController;
64
+ protected set elementResolver(controller: ElementResolutionController);
65
+ protected _elementResolver: ElementResolutionController;
61
66
  protected ensureOnDOM(_targetOpenState: boolean): Promise<void>;
62
67
  elements: OpenableElement[];
63
68
  protected makeTransition(_targetOpenState: boolean): Promise<HTMLElement | null>;
@@ -69,8 +74,12 @@ export declare class AbstractOverlay extends SpectrumElement {
69
74
  get open(): boolean;
70
75
  set open(_open: boolean);
71
76
  placement?: Placement;
72
- protected placementController: PlacementController;
77
+ protected get placementController(): PlacementController;
78
+ protected set placementController(controller: PlacementController);
79
+ protected _placementController: PlacementController;
73
80
  receivesFocus: 'true' | 'false' | 'auto';
81
+ protected requestSlottable(): void;
82
+ protected returnFocus(): void;
74
83
  get state(): OverlayState;
75
84
  set state(_state: OverlayState);
76
85
  protected _state: OverlayState;
@@ -87,4 +96,5 @@ export declare class AbstractOverlay extends SpectrumElement {
87
96
  */
88
97
  static open(trigger: HTMLElement, interaction: TriggerInteractionsV1, content: HTMLElement, optionsV1: OverlayOptionsV1): Promise<() => void>;
89
98
  static open(content: HTMLElement, options?: OverlayOptions): Promise<Overlay>;
99
+ static applyOptions(overlay: Overlay, options: OverlayOptions): void;
90
100
  }
@@ -103,55 +103,85 @@ export const guaranteedAllTransitionend = (el, action, cb) => {
103
103
  export function nextFrame() {
104
104
  return new Promise((res) => requestAnimationFrame(() => res()));
105
105
  }
106
- export function forcePaint() {
107
- document.body.offsetHeight;
108
- }
109
106
  export class AbstractOverlay extends SpectrumElement {
110
107
  constructor() {
111
108
  super(...arguments);
112
109
  this.dispose = noop;
113
- this.offset = 6;
110
+ this.offset = 0;
114
111
  this.willPreventClose = false;
115
112
  }
116
113
  async applyFocus(_targetOpenState, _focusEl) {
117
114
  return;
118
115
  }
116
+ /* c8 ignore next 6 */
119
117
  get delayed() {
120
118
  return false;
121
119
  }
122
120
  set delayed(_delayed) {
123
121
  return;
124
122
  }
123
+ /* c8 ignore next 6 */
124
+ get disabled() {
125
+ return false;
126
+ }
127
+ set disabled(_disabled) {
128
+ return;
129
+ }
130
+ get elementResolver() {
131
+ return this._elementResolver;
132
+ }
133
+ set elementResolver(controller) {
134
+ this._elementResolver = controller;
135
+ }
136
+ /* c8 ignore next 3 */
125
137
  async ensureOnDOM(_targetOpenState) {
126
138
  return;
127
139
  }
140
+ /* c8 ignore next 5 */
128
141
  async makeTransition(_targetOpenState) {
129
142
  return null;
130
143
  }
131
144
  async manageDelay(_targetOpenState) {
132
145
  return;
133
146
  }
147
+ /* c8 ignore next 3 */
134
148
  async manageDialogOpen() {
135
149
  return;
136
150
  }
151
+ /* c8 ignore next 3 */
137
152
  async managePopoverOpen() {
138
153
  return;
139
154
  }
155
+ /* c8 ignore next 3 */
140
156
  managePosition() {
141
157
  return;
142
158
  }
159
+ /* c8 ignore next 6 */
143
160
  get open() {
144
161
  return false;
145
162
  }
146
163
  set open(_open) {
147
164
  return;
148
165
  }
166
+ get placementController() {
167
+ return this._placementController;
168
+ }
169
+ set placementController(controller) {
170
+ this._placementController = controller;
171
+ }
172
+ requestSlottable() {
173
+ }
174
+ returnFocus() {
175
+ return;
176
+ }
177
+ /* c8 ignore next 6 */
149
178
  get state() {
150
179
  return "closed";
151
180
  }
152
181
  set state(_state) {
153
182
  return;
154
183
  }
184
+ /* c8 ignore next 3 */
155
185
  manuallyKeepOpen() {
156
186
  return;
157
187
  }
@@ -164,7 +194,6 @@ export class AbstractOverlay extends SpectrumElement {
164
194
  document.dispatchEvent(overlayUpdateEvent);
165
195
  }
166
196
  static async open(triggerOrContent, interactionOrOptions, content, optionsV1) {
167
- var _a, _b, _c, _d;
168
197
  await import("@spectrum-web-components/overlay/sp-overlay.js");
169
198
  const v2 = arguments.length === 2;
170
199
  const overlayContent = content || triggerOrContent;
@@ -206,13 +235,12 @@ export class AbstractOverlay extends SpectrumElement {
206
235
  const trigger = triggerOrContent;
207
236
  const interaction = interactionOrOptions;
208
237
  const options2 = optionsV1;
209
- overlay.delayed = options2.delayed || overlayContent.hasAttribute("delayed");
210
- overlay.receivesFocus = (_a = options2.receivesFocus) != null ? _a : "auto";
211
- overlay.triggerElement = options2.virtualTrigger || trigger;
212
- overlay.type = interaction === "modal" ? "modal" : interaction === "hover" ? "hint" : "auto";
213
- overlay.offset = (_b = options2.offset) != null ? _b : 6;
214
- overlay.placement = options2.placement;
215
- overlay.willPreventClose = !!options2.notImmediatelyClosable;
238
+ AbstractOverlay.applyOptions(overlay, {
239
+ ...options2,
240
+ delayed: options2.delayed || overlayContent.hasAttribute("delayed"),
241
+ trigger: options2.virtualTrigger || trigger,
242
+ type: interaction === "modal" ? "modal" : interaction === "hover" ? "hint" : "auto"
243
+ });
216
244
  trigger.insertAdjacentElement("afterend", overlay);
217
245
  await overlay.updateComplete;
218
246
  overlay.open = true;
@@ -220,17 +248,24 @@ export class AbstractOverlay extends SpectrumElement {
220
248
  }
221
249
  const options = interactionOrOptions;
222
250
  overlay.append(overlayContent);
223
- overlay.delayed = options.delayed || overlayContent.hasAttribute("delayed");
224
- overlay.receivesFocus = (_c = options.receivesFocus) != null ? _c : "auto";
225
- overlay.triggerElement = options.trigger || null;
226
- overlay.type = options.type || "modal";
227
- overlay.offset = (_d = options.offset) != null ? _d : 6;
228
- overlay.placement = options.placement;
229
- overlay.willPreventClose = !!options.notImmediatelyClosable;
251
+ AbstractOverlay.applyOptions(overlay, {
252
+ ...options,
253
+ delayed: options.delayed || overlayContent.hasAttribute("delayed")
254
+ });
230
255
  overlay.updateComplete.then(() => {
231
256
  overlay.open = true;
232
257
  });
233
258
  return overlay;
234
259
  }
260
+ static applyOptions(overlay, options) {
261
+ var _a, _b;
262
+ overlay.delayed = !!options.delayed;
263
+ overlay.receivesFocus = (_a = options.receivesFocus) != null ? _a : "auto";
264
+ overlay.triggerElement = options.trigger || null;
265
+ overlay.type = options.type || "modal";
266
+ overlay.offset = (_b = options.offset) != null ? _b : 0;
267
+ overlay.placement = options.placement;
268
+ overlay.willPreventClose = !!options.notImmediatelyClosable;
269
+ }
235
270
  }
236
271
  //# sourceMappingURL=AbstractOverlay.dev.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 OverlayState,\n OverlayTypes,\n Placement,\n TriggerInteractions,\n TriggerInteractionsV1,\n} from './overlay-types.dev.js'\nimport type { 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\nexport class OverlayStateEvent extends Event {\n detail!: {\n interaction: string;\n reason?: 'external-click';\n };\n\n constructor(\n type: string,\n public overlay: HTMLElement,\n {\n publish,\n interaction,\n reason,\n }: {\n publish?: boolean;\n interaction: TriggerInteractions;\n reason?: 'external-click';\n }\n ) {\n super(type, {\n bubbles: publish,\n composed: publish,\n });\n this.detail = {\n interaction,\n reason,\n };\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-open': OverlayStateEvent;\n 'sp-close': OverlayStateEvent;\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 abortController = new AbortController();\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n abortController.abort();\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 signal: abortController.signal,\n });\n el.addEventListener('transitionend', handleTransitionend, {\n signal: abortController.signal,\n });\n el.addEventListener('transitioncancel', handleTransitionend, {\n signal: abortController.signal,\n });\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport function forcePaint(): void {\n // force the browser to paint\n document.body.offsetHeight;\n}\n\n/**\n * Abstract Overlay base class so that property tyings and imperative API\n * interfaces can be held separate from the actual class definition.\n */\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n get delayed(): boolean {\n return false;\n }\n set delayed(_delayed: boolean) {\n return;\n }\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 protected offset: number | [number, number] = 6;\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n placement?: Placement;\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 willPreventClose = false;\n\n public manuallyKeepOpen(): void {\n return;\n }\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 /**\n * Overloaded imperative API entry point that allows for both the pre-0.37.0\n * argument signature as well as the post-0.37.0 signature. This allows for\n * consumers to continue to leverage it as they had been in previous releases\n * while also surfacing the more feature-rich API that has been made available.\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 await import('@spectrum-web-components/overlay/sp-overlay.js');\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n // Use the `this` from the `static` method context rather than a\n // specific imported constructor to prevent opening a circular dependency.\n const overlay = new this() as 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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",
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 Placement,\n TriggerInteractions,\n TriggerInteractionsV1,\n} from './overlay-types.dev.js'\nimport type { Overlay } from './Overlay.dev.js'\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { OverlayTimer } from './overlay-timer.dev.js'\nimport type { PlacementController } from './PlacementController.dev.js'\nimport type { ElementResolutionController } from '@spectrum-web-components/reactive-controllers/src/ElementResolution.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\nexport class OverlayStateEvent extends Event {\n detail!: {\n interaction: string;\n reason?: 'external-click';\n };\n\n constructor(\n type: string,\n public overlay: HTMLElement,\n {\n publish,\n interaction,\n reason,\n }: {\n publish?: boolean;\n interaction: TriggerInteractions;\n reason?: 'external-click';\n }\n ) {\n super(type, {\n bubbles: publish,\n composed: publish,\n });\n this.detail = {\n interaction,\n reason,\n };\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-open': OverlayStateEvent;\n 'sp-close': OverlayStateEvent;\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 abortController = new AbortController();\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n abortController.abort();\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 signal: abortController.signal,\n });\n el.addEventListener('transitionend', handleTransitionend, {\n signal: abortController.signal,\n });\n el.addEventListener('transitioncancel', handleTransitionend, {\n signal: abortController.signal,\n });\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\n/**\n * Abstract Overlay base class so that property tyings and imperative API\n * interfaces can be held separate from the actual class definition.\n */\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n /* c8 ignore next 6 */\n get delayed(): boolean {\n return false;\n }\n set delayed(_delayed: boolean) {\n return;\n }\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n /* c8 ignore next 6 */\n get disabled(): boolean {\n return false;\n }\n set disabled(_disabled: boolean) {\n return;\n }\n dispose = noop;\n protected get elementResolver(): ElementResolutionController {\n return this._elementResolver;\n }\n protected set elementResolver(controller) {\n this._elementResolver = controller;\n }\n protected _elementResolver!: ElementResolutionController;\n /* c8 ignore next 3 */\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n /* c8 ignore next 5 */\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 /* c8 ignore next 3 */\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n /* c8 ignore next 3 */\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n /* c8 ignore next 3 */\n protected managePosition(): void {\n return;\n }\n protected offset: number | [number, number] = 0;\n /* c8 ignore next 6 */\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n placement?: Placement;\n protected get placementController(): PlacementController {\n return this._placementController;\n }\n protected set placementController(controller) {\n this._placementController = controller;\n }\n protected _placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n protected requestSlottable(): void {}\n protected returnFocus(): void {\n return;\n }\n /* c8 ignore next 6 */\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 willPreventClose = false;\n /* c8 ignore next 3 */\n public manuallyKeepOpen(): void {\n return;\n }\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 /**\n * Overloaded imperative API entry point that allows for both the pre-0.37.0\n * argument signature as well as the post-0.37.0 signature. This allows for\n * consumers to continue to leverage it as they had been in previous releases\n * while also surfacing the more feature-rich API that has been made available.\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 await import('@spectrum-web-components/overlay/sp-overlay.js');\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n // Use the `this` from the `static` method context rather than a\n // specific imported constructor to prevent opening a circular dependency.\n const overlay = new this() as 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 AbstractOverlay.applyOptions(overlay, {\n ...options,\n delayed: options.delayed || overlayContent.hasAttribute('delayed'),\n trigger: options.virtualTrigger || trigger,\n type: interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto'\n });\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 AbstractOverlay.applyOptions(overlay, {\n ...options,\n delayed: options.delayed || overlayContent.hasAttribute('delayed')\n });\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 static applyOptions(overlay: Overlay, options: OverlayOptions): void {\n overlay.delayed = !!options.delayed;\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 0;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\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 O}from"@spectrum-web-components/base";import{reparentChildren as T}from"@spectrum-web-components/shared/src/reparent-children.js";import{OverlayTimer as P}from"./overlay-timer.js";export const overlayTimer=new P,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 class OverlayStateEvent extends Event{constructor(t,a,{publish:r,interaction:l,reason:p}){super(t,{bubbles:r,composed:r});this.overlay=a;this.detail={interaction:l,reason:p}}}export const guaranteedAllTransitionend=(o,d,t)=>{const a=new AbortController,r=new Map,l=()=>{a.abort(),t()};let p,s;const e=requestAnimationFrame(()=>{p=requestAnimationFrame(()=>{s=requestAnimationFrame(()=>{l()})})}),u=n=>{n.target===o&&(r.set(n.propertyName,r.get(n.propertyName)-1),r.get(n.propertyName)||r.delete(n.propertyName),r.size===0&&l())},y=n=>{n.target===o&&(r.has(n.propertyName)||r.set(n.propertyName,0),r.set(n.propertyName,r.get(n.propertyName)+1),cancelAnimationFrame(e),cancelAnimationFrame(p),cancelAnimationFrame(s))};o.addEventListener("transitionrun",y,{signal:a.signal}),o.addEventListener("transitionend",u,{signal:a.signal}),o.addEventListener("transitioncancel",u,{signal:a.signal}),d()};export function nextFrame(){return new Promise(o=>requestAnimationFrame(()=>o()))}export function forcePaint(){document.body.offsetHeight}export class AbstractOverlay extends O{constructor(){super(...arguments);this.dispose=noop;this.offset=6;this.willPreventClose=!1}async applyFocus(t,a){}get delayed(){return!1}set delayed(t){}async ensureOnDOM(t){}async makeTransition(t){return null}async manageDelay(t){}async manageDialogOpen(){}async managePopoverOpen(){}managePosition(){}get open(){return!1}set open(t){}get state(){return"closed"}set state(t){}manuallyKeepOpen(){}static update(){const t=new CustomEvent("sp-update-overlays",{bubbles:!0,composed:!0,cancelable:!0});document.dispatchEvent(t)}static async open(t,a,r,l){var g,b,f,E;await import("@spectrum-web-components/overlay/sp-overlay.js");const p=arguments.length===2,s=r||t,e=new this;let u=!1;e.dispose=()=>{e.addEventListener("sp-closed",()=>{u||(y(),u=!0),requestAnimationFrame(()=>{e.remove()})}),e.open=!1,e.dispose=noop};const y=T([s],e,{position:"beforeend",prepareCallback:c=>{const v=c.slot;return c.removeAttribute("slot"),()=>{c.slot=v}}});if(!p&&s&&l){const c=t,v=a,m=l;return e.delayed=m.delayed||s.hasAttribute("delayed"),e.receivesFocus=(g=m.receivesFocus)!=null?g:"auto",e.triggerElement=m.virtualTrigger||c,e.type=v==="modal"?"modal":v==="hover"?"hint":"auto",e.offset=(b=m.offset)!=null?b:6,e.placement=m.placement,e.willPreventClose=!!m.notImmediatelyClosable,c.insertAdjacentElement("afterend",e),await e.updateComplete,e.open=!0,e.dispose}const i=a;return e.append(s),e.delayed=i.delayed||s.hasAttribute("delayed"),e.receivesFocus=(f=i.receivesFocus)!=null?f:"auto",e.triggerElement=i.trigger||null,e.type=i.type||"modal",e.offset=(E=i.offset)!=null?E:6,e.placement=i.placement,e.willPreventClose=!!i.notImmediatelyClosable,e.updateComplete.then(()=>{e.open=!0}),e}}
1
+ "use strict";import{SpectrumElement as y}from"@spectrum-web-components/base";import{reparentChildren as b}from"@spectrum-web-components/shared/src/reparent-children.js";import{OverlayTimer as f}from"./overlay-timer.js";export const overlayTimer=new f,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 class OverlayStateEvent extends Event{constructor(e,r,{publish:n,interaction:l,reason:i}){super(e,{bubbles:n,composed:n});this.overlay=r;this.detail={interaction:l,reason:i}}}export const guaranteedAllTransitionend=(a,c,e)=>{const r=new AbortController,n=new Map,l=()=>{r.abort(),e()};let i,s;const t=requestAnimationFrame(()=>{i=requestAnimationFrame(()=>{s=requestAnimationFrame(()=>{l()})})}),m=o=>{o.target===a&&(n.set(o.propertyName,n.get(o.propertyName)-1),n.get(o.propertyName)||n.delete(o.propertyName),n.size===0&&l())},u=o=>{o.target===a&&(n.has(o.propertyName)||n.set(o.propertyName,0),n.set(o.propertyName,n.get(o.propertyName)+1),cancelAnimationFrame(t),cancelAnimationFrame(i),cancelAnimationFrame(s))};a.addEventListener("transitionrun",u,{signal:r.signal}),a.addEventListener("transitionend",m,{signal:r.signal}),a.addEventListener("transitioncancel",m,{signal:r.signal}),c()};export function nextFrame(){return new Promise(a=>requestAnimationFrame(()=>a()))}export class AbstractOverlay extends y{constructor(){super(...arguments);this.dispose=noop;this.offset=0;this.willPreventClose=!1}async applyFocus(e,r){}get delayed(){return!1}set delayed(e){}get disabled(){return!1}set disabled(e){}get elementResolver(){return this._elementResolver}set elementResolver(e){this._elementResolver=e}async ensureOnDOM(e){}async makeTransition(e){return null}async manageDelay(e){}async manageDialogOpen(){}async managePopoverOpen(){}managePosition(){}get open(){return!1}set open(e){}get placementController(){return this._placementController}set placementController(e){this._placementController=e}requestSlottable(){}returnFocus(){}get state(){return"closed"}set state(e){}manuallyKeepOpen(){}static update(){const e=new CustomEvent("sp-update-overlays",{bubbles:!0,composed:!0,cancelable:!0});document.dispatchEvent(e)}static async open(e,r,n,l){await import("@spectrum-web-components/overlay/sp-overlay.js");const i=arguments.length===2,s=n||e,t=new this;let m=!1;t.dispose=()=>{t.addEventListener("sp-closed",()=>{m||(u(),m=!0),requestAnimationFrame(()=>{t.remove()})}),t.open=!1,t.dispose=noop};const u=b([s],t,{position:"beforeend",prepareCallback:p=>{const d=p.slot;return p.removeAttribute("slot"),()=>{p.slot=d}}});if(!i&&s&&l){const p=e,d=r,v=l;return AbstractOverlay.applyOptions(t,{...v,delayed:v.delayed||s.hasAttribute("delayed"),trigger:v.virtualTrigger||p,type:d==="modal"?"modal":d==="hover"?"hint":"auto"}),p.insertAdjacentElement("afterend",t),await t.updateComplete,t.open=!0,t.dispose}const g=r;return t.append(s),AbstractOverlay.applyOptions(t,{...g,delayed:g.delayed||s.hasAttribute("delayed")}),t.updateComplete.then(()=>{t.open=!0}),t}static applyOptions(e,r){var n,l;e.delayed=!!r.delayed,e.receivesFocus=(n=r.receivesFocus)!=null?n:"auto",e.triggerElement=r.trigger||null,e.type=r.type||"modal",e.offset=(l=r.offset)!=null?l:0,e.placement=r.placement,e.willPreventClose=!!r.notImmediatelyClosable}}
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 OverlayState,\n OverlayTypes,\n Placement,\n TriggerInteractions,\n TriggerInteractionsV1,\n} from './overlay-types.js';\nimport type { 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\nexport class OverlayStateEvent extends Event {\n detail!: {\n interaction: string;\n reason?: 'external-click';\n };\n\n constructor(\n type: string,\n public overlay: HTMLElement,\n {\n publish,\n interaction,\n reason,\n }: {\n publish?: boolean;\n interaction: TriggerInteractions;\n reason?: 'external-click';\n }\n ) {\n super(type, {\n bubbles: publish,\n composed: publish,\n });\n this.detail = {\n interaction,\n reason,\n };\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-open': OverlayStateEvent;\n 'sp-close': OverlayStateEvent;\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 abortController = new AbortController();\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n abortController.abort();\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 signal: abortController.signal,\n });\n el.addEventListener('transitionend', handleTransitionend, {\n signal: abortController.signal,\n });\n el.addEventListener('transitioncancel', handleTransitionend, {\n signal: abortController.signal,\n });\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport function forcePaint(): void {\n // force the browser to paint\n document.body.offsetHeight;\n}\n\n/**\n * Abstract Overlay base class so that property tyings and imperative API\n * interfaces can be held separate from the actual class definition.\n */\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n get delayed(): boolean {\n return false;\n }\n set delayed(_delayed: boolean) {\n return;\n }\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 protected offset: number | [number, number] = 6;\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n placement?: Placement;\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 willPreventClose = false;\n\n public manuallyKeepOpen(): void {\n return;\n }\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 /**\n * Overloaded imperative API entry point that allows for both the pre-0.37.0\n * argument signature as well as the post-0.37.0 signature. This allows for\n * consumers to continue to leverage it as they had been in previous releases\n * while also surfacing the more feature-rich API that has been made available.\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 await import('@spectrum-web-components/overlay/sp-overlay.js');\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n // Use the `this` from the `static` method context rather than a\n // specific imported constructor to prevent opening a circular dependency.\n const overlay = new this() as 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", "OverlayTimer", "type", "overlay", "publish", "interaction", "reason", "el", "action", "cb", "abortController", "runningTransitions", "cleanup", "guarantee2", "guarantee3", "guarantee1", "handleTransitionend", "event", "handleTransitionrun", "res", "_targetOpenState", "_focusEl", "_delayed", "_open", "_state", "overlayUpdateEvent", "triggerOrContent", "interactionOrOptions", "content", "optionsV1", "_a", "_b", "_c", "_d", "v2", "overlayContent", "restored", "restoreContent", "slot", "trigger", "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 Placement,\n TriggerInteractions,\n TriggerInteractionsV1,\n} from './overlay-types.js';\nimport type { Overlay } from './Overlay.js';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport { OverlayTimer } from './overlay-timer.js';\nimport type { PlacementController } from './PlacementController.js';\nimport type { ElementResolutionController } from '@spectrum-web-components/reactive-controllers/src/ElementResolution.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\nexport class OverlayStateEvent extends Event {\n detail!: {\n interaction: string;\n reason?: 'external-click';\n };\n\n constructor(\n type: string,\n public overlay: HTMLElement,\n {\n publish,\n interaction,\n reason,\n }: {\n publish?: boolean;\n interaction: TriggerInteractions;\n reason?: 'external-click';\n }\n ) {\n super(type, {\n bubbles: publish,\n composed: publish,\n });\n this.detail = {\n interaction,\n reason,\n };\n }\n}\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-open': OverlayStateEvent;\n 'sp-close': OverlayStateEvent;\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 abortController = new AbortController();\n const runningTransitions = new Map<string, number>();\n const cleanup = (): void => {\n abortController.abort();\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 signal: abortController.signal,\n });\n el.addEventListener('transitionend', handleTransitionend, {\n signal: abortController.signal,\n });\n el.addEventListener('transitioncancel', handleTransitionend, {\n signal: abortController.signal,\n });\n action();\n};\n\nexport function nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\n/**\n * Abstract Overlay base class so that property tyings and imperative API\n * interfaces can be held separate from the actual class definition.\n */\nexport class AbstractOverlay extends SpectrumElement {\n protected async applyFocus(\n _targetOpenState: boolean,\n _focusEl: HTMLElement | null\n ): Promise<void> {\n return;\n }\n /* c8 ignore next 6 */\n get delayed(): boolean {\n return false;\n }\n set delayed(_delayed: boolean) {\n return;\n }\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n /* c8 ignore next 6 */\n get disabled(): boolean {\n return false;\n }\n set disabled(_disabled: boolean) {\n return;\n }\n dispose = noop;\n protected get elementResolver(): ElementResolutionController {\n return this._elementResolver;\n }\n protected set elementResolver(controller) {\n this._elementResolver = controller;\n }\n protected _elementResolver!: ElementResolutionController;\n /* c8 ignore next 3 */\n protected async ensureOnDOM(_targetOpenState: boolean): Promise<void> {\n return;\n }\n elements!: OpenableElement[];\n /* c8 ignore next 5 */\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 /* c8 ignore next 3 */\n protected async manageDialogOpen(): Promise<void> {\n return;\n }\n /* c8 ignore next 3 */\n protected async managePopoverOpen(): Promise<void> {\n return;\n }\n /* c8 ignore next 3 */\n protected managePosition(): void {\n return;\n }\n protected offset: number | [number, number] = 0;\n /* c8 ignore next 6 */\n get open(): boolean {\n return false;\n }\n set open(_open: boolean) {\n return;\n }\n placement?: Placement;\n protected get placementController(): PlacementController {\n return this._placementController;\n }\n protected set placementController(controller) {\n this._placementController = controller;\n }\n protected _placementController!: PlacementController;\n receivesFocus!: 'true' | 'false' | 'auto';\n protected requestSlottable(): void {}\n protected returnFocus(): void {\n return;\n }\n /* c8 ignore next 6 */\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 willPreventClose = false;\n /* c8 ignore next 3 */\n public manuallyKeepOpen(): void {\n return;\n }\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 /**\n * Overloaded imperative API entry point that allows for both the pre-0.37.0\n * argument signature as well as the post-0.37.0 signature. This allows for\n * consumers to continue to leverage it as they had been in previous releases\n * while also surfacing the more feature-rich API that has been made available.\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 await import('@spectrum-web-components/overlay/sp-overlay.js');\n const v2 = arguments.length === 2;\n const overlayContent = content || triggerOrContent;\n // Use the `this` from the `static` method context rather than a\n // specific imported constructor to prevent opening a circular dependency.\n const overlay = new this() as 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 AbstractOverlay.applyOptions(overlay, {\n ...options,\n delayed: options.delayed || overlayContent.hasAttribute('delayed'),\n trigger: options.virtualTrigger || trigger,\n type: interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto'\n });\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 AbstractOverlay.applyOptions(overlay, {\n ...options,\n delayed: options.delayed || overlayContent.hasAttribute('delayed')\n });\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 static applyOptions(overlay: Overlay, options: OverlayOptions): void {\n overlay.delayed = !!options.delayed;\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset ?? 0;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SpectrumElement", "reparentChildren", "OverlayTimer", "type", "overlay", "publish", "interaction", "reason", "el", "action", "cb", "abortController", "runningTransitions", "cleanup", "guarantee2", "guarantee3", "guarantee1", "handleTransitionend", "event", "handleTransitionrun", "res", "_targetOpenState", "_focusEl", "_delayed", "_disabled", "controller", "_open", "_state", "overlayUpdateEvent", "triggerOrContent", "interactionOrOptions", "content", "optionsV1", "v2", "overlayContent", "restored", "restoreContent", "slot", "trigger", "options", "_a", "_b"]
7
7
  }
@@ -0,0 +1,14 @@
1
+ import { InteractionController, InteractionTypes } from './InteractionController.js';
2
+ export declare class ClickController extends InteractionController {
3
+ type: InteractionTypes;
4
+ /**
5
+ * An overlay with a `click` interaction should not close on click `triggerElement`.
6
+ * When a click is initiated (`pointerdown`), apply `preventNextToggle` when the
7
+ * overlay is `open` to prevent from toggling the overlay when the click event
8
+ * propagates later in the interaction.
9
+ */
10
+ private preventNextToggle;
11
+ handleClick(): void;
12
+ handlePointerdown(): void;
13
+ init(): void;
14
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ import {
3
+ InteractionController,
4
+ InteractionTypes
5
+ } from "./InteractionController.dev.js";
6
+ export class ClickController extends InteractionController {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.type = InteractionTypes.click;
10
+ /**
11
+ * An overlay with a `click` interaction should not close on click `triggerElement`.
12
+ * When a click is initiated (`pointerdown`), apply `preventNextToggle` when the
13
+ * overlay is `open` to prevent from toggling the overlay when the click event
14
+ * propagates later in the interaction.
15
+ */
16
+ this.preventNextToggle = false;
17
+ }
18
+ handleClick() {
19
+ if (!this.preventNextToggle) {
20
+ this.host.open = !this.host.open;
21
+ }
22
+ this.preventNextToggle = false;
23
+ }
24
+ handlePointerdown() {
25
+ this.preventNextToggle = this.host.open;
26
+ }
27
+ init() {
28
+ var _a;
29
+ (_a = this.abortController) == null ? void 0 : _a.abort();
30
+ this.abortController = new AbortController();
31
+ const { signal } = this.abortController;
32
+ this.target.addEventListener("click", () => this.handleClick(), {
33
+ signal
34
+ });
35
+ this.target.addEventListener(
36
+ "pointerdown",
37
+ () => this.handlePointerdown(),
38
+ { signal }
39
+ );
40
+ }
41
+ }
42
+ //# sourceMappingURL=ClickController.dev.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["ClickController.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2024 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*/\n\nimport {\n InteractionController,\n InteractionTypes,\n} from './InteractionController.dev.js'\n\nexport class ClickController extends InteractionController {\n override type = InteractionTypes.click;\n\n /**\n * An overlay with a `click` interaction should not close on click `triggerElement`.\n * When a click is initiated (`pointerdown`), apply `preventNextToggle` when the\n * overlay is `open` to prevent from toggling the overlay when the click event\n * propagates later in the interaction.\n */\n private preventNextToggle = false;\n\n handleClick(): void {\n if (!this.preventNextToggle) {\n this.host.open = !this.host.open;\n }\n this.preventNextToggle = false;\n }\n\n handlePointerdown(): void {\n this.preventNextToggle = this.host.open;\n }\n\n override init(): void {\n // Clean up listeners if they've already been bound\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.target.addEventListener('click', () => this.handleClick(), {\n signal,\n });\n this.target.addEventListener(\n 'pointerdown',\n () => this.handlePointerdown(),\n { signal }\n );\n }\n}\n"],
5
+ "mappings": ";AAYA;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAEA,aAAM,wBAAwB,sBAAsB;AAAA,EAApD;AAAA;AACH,SAAS,OAAO,iBAAiB;AAQjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAQ,oBAAoB;AAAA;AAAA,EAE5B,cAAoB;AAChB,QAAI,CAAC,KAAK,mBAAmB;AACzB,WAAK,KAAK,OAAO,CAAC,KAAK,KAAK;AAAA,IAChC;AACA,SAAK,oBAAoB;AAAA,EAC7B;AAAA,EAEA,oBAA0B;AACtB,SAAK,oBAAoB,KAAK,KAAK;AAAA,EACvC;AAAA,EAES,OAAa;AAvC1B;AAyCQ,eAAK,oBAAL,mBAAsB;AACtB,SAAK,kBAAkB,IAAI,gBAAgB;AAC3C,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,SAAK,OAAO,iBAAiB,SAAS,MAAM,KAAK,YAAY,GAAG;AAAA,MAC5D;AAAA,IACJ,CAAC;AACD,SAAK,OAAO;AAAA,MACR;AAAA,MACA,MAAM,KAAK,kBAAkB;AAAA,MAC7B,EAAE,OAAO;AAAA,IACb;AAAA,EACJ;AACJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";import{InteractionController as o,InteractionTypes as r}from"./InteractionController.js";export class ClickController extends o{constructor(){super(...arguments);this.type=r.click;this.preventNextToggle=!1}handleClick(){this.preventNextToggle||(this.host.open=!this.host.open),this.preventNextToggle=!1}handlePointerdown(){this.preventNextToggle=this.host.open}init(){var e;(e=this.abortController)==null||e.abort(),this.abortController=new AbortController;const{signal:t}=this.abortController;this.target.addEventListener("click",()=>this.handleClick(),{signal:t}),this.target.addEventListener("pointerdown",()=>this.handlePointerdown(),{signal:t})}}
2
+ //# sourceMappingURL=ClickController.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["ClickController.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2024 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*/\n\nimport {\n InteractionController,\n InteractionTypes,\n} from './InteractionController.js';\n\nexport class ClickController extends InteractionController {\n override type = InteractionTypes.click;\n\n /**\n * An overlay with a `click` interaction should not close on click `triggerElement`.\n * When a click is initiated (`pointerdown`), apply `preventNextToggle` when the\n * overlay is `open` to prevent from toggling the overlay when the click event\n * propagates later in the interaction.\n */\n private preventNextToggle = false;\n\n handleClick(): void {\n if (!this.preventNextToggle) {\n this.host.open = !this.host.open;\n }\n this.preventNextToggle = false;\n }\n\n handlePointerdown(): void {\n this.preventNextToggle = this.host.open;\n }\n\n override init(): void {\n // Clean up listeners if they've already been bound\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.target.addEventListener('click', () => this.handleClick(), {\n signal,\n });\n this.target.addEventListener(\n 'pointerdown',\n () => this.handlePointerdown(),\n { signal }\n );\n }\n}\n"],
5
+ "mappings": "aAYA,OACI,yBAAAA,EACA,oBAAAC,MACG,6BAEA,aAAM,wBAAwBD,CAAsB,CAApD,kCACH,KAAS,KAAOC,EAAiB,MAQjC,KAAQ,kBAAoB,GAE5B,aAAoB,CACX,KAAK,oBACN,KAAK,KAAK,KAAO,CAAC,KAAK,KAAK,MAEhC,KAAK,kBAAoB,EAC7B,CAEA,mBAA0B,CACtB,KAAK,kBAAoB,KAAK,KAAK,IACvC,CAES,MAAa,CAvC1B,IAAAC,GAyCQA,EAAA,KAAK,kBAAL,MAAAA,EAAsB,QACtB,KAAK,gBAAkB,IAAI,gBAC3B,KAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,gBACxB,KAAK,OAAO,iBAAiB,QAAS,IAAM,KAAK,YAAY,EAAG,CAC5D,OAAAA,CACJ,CAAC,EACD,KAAK,OAAO,iBACR,cACA,IAAM,KAAK,kBAAkB,EAC7B,CAAE,OAAAA,CAAO,CACb,CACJ,CACJ",
6
+ "names": ["InteractionController", "InteractionTypes", "_a", "signal"]
7
+ }
@@ -0,0 +1,19 @@
1
+ import { InteractionController, InteractionTypes } from './InteractionController.js';
2
+ export declare class HoverController extends InteractionController {
3
+ type: InteractionTypes;
4
+ private elementIds;
5
+ focusedin: boolean;
6
+ private hoverTimeout?;
7
+ pointerentered: boolean;
8
+ handleTargetFocusin(): void;
9
+ handleTargetFocusout(): void;
10
+ handleTargetPointerenter(): void;
11
+ handleTargetPointerleave(): void;
12
+ handleHostPointerenter(): void;
13
+ handleHostPointerleave(): void;
14
+ prepareDescription(): void;
15
+ private prepareOverlayRelativeDescription;
16
+ private prepareContentRelativeDescription;
17
+ protected doPointerleave(): void;
18
+ init(): void;
19
+ }