@spectrum-web-components/overlay 0.18.0 → 0.18.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 (92) hide show
  1. package/active-overlay.dev.js +1 -0
  2. package/active-overlay.dev.js.map +1 -1
  3. package/active-overlay.js +1 -1
  4. package/active-overlay.js.map +2 -2
  5. package/overlay-trigger.dev.js +1 -0
  6. package/overlay-trigger.dev.js.map +1 -1
  7. package/overlay-trigger.js +1 -1
  8. package/overlay-trigger.js.map +2 -2
  9. package/package.json +4 -4
  10. package/src/ActiveOverlay.dev.js +60 -24
  11. package/src/ActiveOverlay.dev.js.map +3 -3
  12. package/src/ActiveOverlay.js +3 -3
  13. package/src/ActiveOverlay.js.map +3 -3
  14. package/src/OverlayTrigger.dev.js +51 -18
  15. package/src/OverlayTrigger.dev.js.map +1 -1
  16. package/src/OverlayTrigger.js +2 -2
  17. package/src/OverlayTrigger.js.map +2 -2
  18. package/src/VirtualTrigger.dev.js +1 -0
  19. package/src/VirtualTrigger.dev.js.map +1 -1
  20. package/src/VirtualTrigger.js +1 -1
  21. package/src/VirtualTrigger.js.map +2 -2
  22. package/src/active-overlay.css.dev.js +1 -0
  23. package/src/active-overlay.css.dev.js.map +1 -1
  24. package/src/active-overlay.css.js +1 -1
  25. package/src/active-overlay.css.js.map +2 -2
  26. package/src/index.dev.js +1 -0
  27. package/src/index.dev.js.map +1 -1
  28. package/src/index.js +1 -1
  29. package/src/index.js.map +1 -1
  30. package/src/loader.dev.js +1 -0
  31. package/src/loader.dev.js.map +1 -1
  32. package/src/loader.js +1 -1
  33. package/src/loader.js.map +2 -2
  34. package/src/overlay-events.dev.js +1 -0
  35. package/src/overlay-events.dev.js.map +1 -1
  36. package/src/overlay-events.js +1 -1
  37. package/src/overlay-events.js.map +2 -2
  38. package/src/overlay-stack.d.ts +1 -1
  39. package/src/overlay-stack.dev.js +97 -46
  40. package/src/overlay-stack.dev.js.map +3 -3
  41. package/src/overlay-stack.js +2 -2
  42. package/src/overlay-stack.js.map +3 -3
  43. package/src/overlay-timer.dev.js +1 -0
  44. package/src/overlay-timer.dev.js.map +1 -1
  45. package/src/overlay-timer.js +1 -1
  46. package/src/overlay-timer.js.map +2 -2
  47. package/src/overlay-trigger.css.dev.js +1 -0
  48. package/src/overlay-trigger.css.dev.js.map +1 -1
  49. package/src/overlay-trigger.css.js +1 -1
  50. package/src/overlay-trigger.css.js.map +2 -2
  51. package/src/overlay-types.dev.js +1 -0
  52. package/src/overlay-types.js +1 -0
  53. package/src/overlay-utils.dev.js +4 -1
  54. package/src/overlay-utils.dev.js.map +1 -1
  55. package/src/overlay-utils.js +1 -1
  56. package/src/overlay-utils.js.map +2 -2
  57. package/src/overlay.dev.js +1 -0
  58. package/src/overlay.dev.js.map +1 -1
  59. package/src/overlay.js +1 -1
  60. package/src/overlay.js.map +2 -2
  61. package/stories/overlay-story-components.js +219 -11
  62. package/stories/overlay-story-components.js.map +2 -2
  63. package/stories/overlay.stories.js +354 -55
  64. package/stories/overlay.stories.js.map +1 -1
  65. package/sync/overlay-trigger.dev.js +1 -0
  66. package/sync/overlay-trigger.dev.js.map +1 -1
  67. package/sync/overlay-trigger.js +1 -1
  68. package/sync/overlay-trigger.js.map +2 -2
  69. package/test/benchmark/basic-test.js +10 -2
  70. package/test/benchmark/basic-test.js.map +1 -1
  71. package/test/overlay-lifecycle.test.js +149 -6
  72. package/test/overlay-lifecycle.test.js.map +1 -1
  73. package/test/overlay-timer.test.js +117 -1
  74. package/test/overlay-timer.test.js.map +2 -2
  75. package/test/overlay-trigger-click.test.js +66 -7
  76. package/test/overlay-trigger-click.test.js.map +1 -1
  77. package/test/overlay-trigger-extended.test.js +187 -4
  78. package/test/overlay-trigger-extended.test.js.map +1 -1
  79. package/test/overlay-trigger-hover-click.test.js +68 -3
  80. package/test/overlay-trigger-hover-click.test.js.map +1 -1
  81. package/test/overlay-trigger-hover.test.js +172 -7
  82. package/test/overlay-trigger-hover.test.js.map +2 -2
  83. package/test/overlay-trigger-longpress.test.js +233 -9
  84. package/test/overlay-trigger-longpress.test.js.map +2 -2
  85. package/test/overlay-trigger-sync.test.js +536 -4
  86. package/test/overlay-trigger-sync.test.js.map +2 -2
  87. package/test/overlay-trigger.test.js +536 -4
  88. package/test/overlay-trigger.test.js.map +2 -2
  89. package/test/overlay.test-vrt.js +4 -1
  90. package/test/overlay.test-vrt.js.map +1 -1
  91. package/test/overlay.test.js +565 -11
  92. package/test/overlay.test.js.map +1 -1
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  import { ActiveOverlay } from "./src/ActiveOverlay.dev.js";
2
3
  customElements.define("active-overlay", ActiveOverlay);
3
4
  //# sourceMappingURL=active-overlay.dev.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["active-overlay.ts"],
4
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 { ActiveOverlay } from './src/ActiveOverlay.dev.js'\n\ncustomElements.define('active-overlay', ActiveOverlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'active-overlay': ActiveOverlay;\n }\n}\n"],
5
- "mappings": "AAWA;AAEA,eAAe,OAAO,kBAAkB,aAAa;",
5
+ "mappings": ";AAWA,SAAS,qBAAqB;AAE9B,eAAe,OAAO,kBAAkB,aAAa;",
6
6
  "names": []
7
7
  }
package/active-overlay.js CHANGED
@@ -1,2 +1,2 @@
1
- import{ActiveOverlay as e}from"./src/ActiveOverlay.js";customElements.define("active-overlay",e);
1
+ "use strict";import{ActiveOverlay as e}from"./src/ActiveOverlay.js";customElements.define("active-overlay",e);
2
2
  //# sourceMappingURL=active-overlay.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["active-overlay.ts"],
4
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 { ActiveOverlay } from './src/ActiveOverlay.js';\n\ncustomElements.define('active-overlay', ActiveOverlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'active-overlay': ActiveOverlay;\n }\n}\n"],
5
- "mappings": "AAWA,uDAEA,eAAe,OAAO,iBAAkB,CAAa",
6
- "names": []
5
+ "mappings": "aAWA,OAAS,iBAAAA,MAAqB,yBAE9B,eAAe,OAAO,iBAAkBA,CAAa",
6
+ "names": ["ActiveOverlay"]
7
7
  }
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  import { OverlayTrigger } from "./src/OverlayTrigger.dev.js";
2
3
  customElements.define("overlay-trigger", OverlayTrigger);
3
4
  //# sourceMappingURL=overlay-trigger.dev.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger.ts"],
4
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 { OverlayTrigger } from './src/OverlayTrigger.dev.js'\n\ncustomElements.define('overlay-trigger', OverlayTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'overlay-trigger': OverlayTrigger;\n }\n}\n"],
5
- "mappings": "AAWA;AAEA,eAAe,OAAO,mBAAmB,cAAc;",
5
+ "mappings": ";AAWA,SAAS,sBAAsB;AAE/B,eAAe,OAAO,mBAAmB,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- import{OverlayTrigger as e}from"./src/OverlayTrigger.js";customElements.define("overlay-trigger",e);
1
+ "use strict";import{OverlayTrigger as e}from"./src/OverlayTrigger.js";customElements.define("overlay-trigger",e);
2
2
  //# sourceMappingURL=overlay-trigger.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger.ts"],
4
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 { OverlayTrigger } from './src/OverlayTrigger.js';\n\ncustomElements.define('overlay-trigger', OverlayTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'overlay-trigger': OverlayTrigger;\n }\n}\n"],
5
- "mappings": "AAWA,yDAEA,eAAe,OAAO,kBAAmB,CAAc",
6
- "names": []
5
+ "mappings": "aAWA,OAAS,kBAAAA,MAAsB,0BAE/B,eAAe,OAAO,kBAAmBA,CAAc",
6
+ "names": ["OverlayTrigger"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/overlay",
3
- "version": "0.18.0",
3
+ "version": "0.18.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -103,10 +103,10 @@
103
103
  ],
104
104
  "dependencies": {
105
105
  "@floating-ui/dom": "^0.5.2",
106
- "@spectrum-web-components/action-button": "^0.10.0",
106
+ "@spectrum-web-components/action-button": "^0.10.2",
107
107
  "@spectrum-web-components/base": "^0.7.0",
108
108
  "@spectrum-web-components/shared": "^0.15.0",
109
- "@spectrum-web-components/theme": "^0.14.0",
109
+ "@spectrum-web-components/theme": "^0.14.2",
110
110
  "tslib": "^2.0.0"
111
111
  },
112
112
  "types": "./src/index.d.ts",
@@ -118,5 +118,5 @@
118
118
  "./stories/overlay-story-components.js",
119
119
  "./**/*.dev.js"
120
120
  ],
121
- "gitHead": "05c81318844160db3f8156144106e643507fef97"
121
+ "gitHead": "60b2d3b7d9020d72f9ae930568670321a1918e6f"
122
122
  }
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __decorateClass = (decorators, target, key, kind) => {
@@ -125,7 +126,10 @@ const _ActiveOverlay = class extends SpectrumElement {
125
126
  availableHeight,
126
127
  rects: { floating }
127
128
  }) => {
128
- const maxHeight = Math.max(MIN_OVERLAY_HEIGHT, Math.floor(availableHeight));
129
+ const maxHeight = Math.max(
130
+ MIN_OVERLAY_HEIGHT,
131
+ Math.floor(availableHeight)
132
+ );
129
133
  const actualHeight = floating.height;
130
134
  this.initialHeight = !this.isConstrained && !this.virtualTrigger ? actualHeight : this.initialHeight || actualHeight;
131
135
  this.isConstrained = actualHeight < this.initialHeight || maxHeight <= actualHeight;
@@ -141,10 +145,14 @@ const _ActiveOverlay = class extends SpectrumElement {
141
145
  if (this.overlayContentTip) {
142
146
  middleware.push(arrow({ element: this.overlayContentTip }));
143
147
  }
144
- const { x, y, placement, middlewareData } = await computePosition(this.virtualTrigger || this.trigger, this, {
145
- placement: this.placement,
146
- middleware
147
- });
148
+ const { x, y, placement, middlewareData } = await computePosition(
149
+ this.virtualTrigger || this.trigger,
150
+ this,
151
+ {
152
+ placement: this.placement,
153
+ middleware
154
+ }
155
+ );
148
156
  Object.assign(this.style, {
149
157
  top: "0px",
150
158
  left: "0px",
@@ -178,7 +186,9 @@ const _ActiveOverlay = class extends SpectrumElement {
178
186
  this.focus();
179
187
  };
180
188
  this.stealOverlayContentPromise = Promise.resolve();
181
- this.stealOverlayContentPromise = new Promise((res) => this.stealOverlayContentResolver = res);
189
+ this.stealOverlayContentPromise = new Promise(
190
+ (res) => this.stealOverlayContentResolver = res
191
+ );
182
192
  }
183
193
  get state() {
184
194
  return this._state;
@@ -220,7 +230,9 @@ const _ActiveOverlay = class extends SpectrumElement {
220
230
  return !!this._modalRoot;
221
231
  }
222
232
  feature() {
223
- this.tabIndex = -1;
233
+ if (!this.contains(document.activeElement)) {
234
+ this.tabIndex = -1;
235
+ }
224
236
  const parentOverlay = parentOverlayOf(this.trigger);
225
237
  const parentIsModal = parentOverlay && parentOverlay.slot === "open";
226
238
  if (parentIsModal) {
@@ -242,7 +254,9 @@ const _ActiveOverlay = class extends SpectrumElement {
242
254
  this.removeAttribute("aria-modal");
243
255
  if (this.interaction !== "modal") {
244
256
  const parentOverlay = parentOverlayOf(this.trigger);
245
- this._modalRoot = parentOverlay == null ? void 0 : parentOverlay.obscure(nextOverlayInteraction);
257
+ this._modalRoot = parentOverlay == null ? void 0 : parentOverlay.obscure(
258
+ nextOverlayInteraction
259
+ );
246
260
  return this._modalRoot;
247
261
  }
248
262
  return this;
@@ -254,14 +268,22 @@ const _ActiveOverlay = class extends SpectrumElement {
254
268
  return;
255
269
  if (!this.overlayContent || !this.trigger)
256
270
  return;
257
- this.stealOverlayContent(this.overlayContent);
271
+ this.stealOverlayContent(
272
+ this.overlayContent
273
+ );
258
274
  this.state = "active";
259
275
  this.feature();
260
276
  if (this.placement === "none") {
261
- this.style.setProperty("--swc-visual-viewport-height", `${window.innerHeight}px`);
277
+ this.style.setProperty(
278
+ "--swc-visual-viewport-height",
279
+ `${window.innerHeight}px`
280
+ );
262
281
  } else if (this.placement) {
263
282
  await this.updateOverlayPosition();
264
- document.addEventListener("sp-update-overlays", this.updateOverlayPosition);
283
+ document.addEventListener(
284
+ "sp-update-overlays",
285
+ this.updateOverlayPosition
286
+ );
265
287
  window.addEventListener("scroll", this.updateOverlayPosition);
266
288
  }
267
289
  const actions = [];
@@ -269,7 +291,9 @@ const _ActiveOverlay = class extends SpectrumElement {
269
291
  actions.push(this.applyContentAnimation("sp-overlay-fade-in"));
270
292
  }
271
293
  if (typeof this.overlayContent.updateComplete !== "undefined") {
272
- actions.push(this.overlayContent.updateComplete);
294
+ actions.push(
295
+ this.overlayContent.updateComplete
296
+ );
273
297
  }
274
298
  this.childrenReady = Promise.all(actions);
275
299
  }
@@ -279,14 +303,16 @@ const _ActiveOverlay = class extends SpectrumElement {
279
303
  await this.focus();
280
304
  }
281
305
  await lifecycleCallback();
282
- this.trigger.dispatchEvent(new CustomEvent("sp-opened", {
283
- bubbles: true,
284
- composed: true,
285
- cancelable: true,
286
- detail: {
287
- interaction: this.interaction
288
- }
289
- }));
306
+ this.trigger.dispatchEvent(
307
+ new CustomEvent("sp-opened", {
308
+ bubbles: true,
309
+ composed: true,
310
+ cancelable: true,
311
+ detail: {
312
+ interaction: this.interaction
313
+ }
314
+ })
315
+ );
290
316
  }
291
317
  open(openDetail) {
292
318
  this.extractDetail(openDetail);
@@ -311,7 +337,10 @@ const _ActiveOverlay = class extends SpectrumElement {
311
337
  clearTimeout(this.timeout);
312
338
  delete this.timeout;
313
339
  }
314
- this.trigger.removeEventListener("keydown", this.handleInlineTriggerKeydown);
340
+ this.trigger.removeEventListener(
341
+ "keydown",
342
+ this.handleInlineTriggerKeydown
343
+ );
315
344
  this.returnOverlayContent();
316
345
  this.state = "disposed";
317
346
  if (this.willNotifyClosed) {
@@ -355,7 +384,9 @@ const _ActiveOverlay = class extends SpectrumElement {
355
384
  }
356
385
  schedulePositionUpdate() {
357
386
  cancelAnimationFrame(this.positionAnimationFrame);
358
- this.positionAnimationFrame = requestAnimationFrame(() => this.updateOverlayPosition());
387
+ this.positionAnimationFrame = requestAnimationFrame(
388
+ () => this.updateOverlayPosition()
389
+ );
359
390
  }
360
391
  onSlotChange() {
361
392
  this.schedulePositionUpdate();
@@ -365,7 +396,9 @@ const _ActiveOverlay = class extends SpectrumElement {
365
396
  return Promise.resolve(true);
366
397
  }
367
398
  return new Promise((resolve) => {
368
- const contents = this.shadowRoot.querySelector("#contents");
399
+ const contents = this.shadowRoot.querySelector(
400
+ "#contents"
401
+ );
369
402
  const doneHandler = (event) => {
370
403
  if (animation !== event.animationName)
371
404
  return;
@@ -421,7 +454,10 @@ const _ActiveOverlay = class extends SpectrumElement {
421
454
  return complete;
422
455
  }
423
456
  disconnectedCallback() {
424
- document.removeEventListener("sp-update-overlays", this.updateOverlayPosition);
457
+ document.removeEventListener(
458
+ "sp-update-overlays",
459
+ this.updateOverlayPosition
460
+ );
425
461
  window.removeEventListener("scroll", this.updateOverlayPosition);
426
462
  super.disconnectedCallback();
427
463
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ActiveOverlay.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*/\n\nimport {\n CSSResultArray,\n html,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\nimport type {\n Color,\n Scale,\n ThemeVariant,\n} from '@spectrum-web-components/theme/src/Theme.js';\nimport styles from './active-overlay.css.js';\nimport { parentOverlayOf } from './overlay-utils.dev.js'\nimport {\n OverlayOpenCloseDetail,\n OverlayOpenDetail,\n Placement,\n TriggerInteractions,\n} from './overlay-types.dev.js'\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport {\n arrow,\n computePosition,\n flip,\n Placement as FloatingUIPlacement,\n offset,\n shift,\n size,\n} from '@floating-ui/dom';\n\nexport interface PositionResult {\n arrowOffsetLeft: number;\n arrowOffsetTop: number;\n maxHeight: number;\n placement: string;\n positionLeft: number;\n positionTop: number;\n}\n\ntype OverlayStateType = 'idle' | 'active' | 'hiding' | 'dispose' | 'disposed';\ntype ContentAnimation = 'sp-overlay-fade-in' | 'sp-overlay-fade-out';\n\nconst stateMachine: {\n initial: OverlayStateType;\n states: {\n [stateName: string]: {\n on: {\n [transitionName: string]: OverlayStateType;\n };\n };\n };\n} = {\n initial: 'idle',\n states: {\n idle: {\n on: {\n active: 'active',\n },\n },\n active: {\n on: {\n hiding: 'hiding',\n idle: 'idle',\n },\n },\n hiding: {\n on: {\n dispose: 'dispose',\n },\n },\n dispose: {\n on: {\n disposed: 'disposed',\n },\n },\n disposed: {\n on: {},\n },\n },\n};\n\nconst stateTransition = (\n state?: OverlayStateType,\n event?: string\n): OverlayStateType => {\n if (!state) return stateMachine.initial;\n /* c8 ignore next */\n if (!event) return state;\n return stateMachine.states[state].on[event] || state;\n};\n\nconst getFallbackPlacements = (\n placement: FloatingUIPlacement\n): FloatingUIPlacement[] => {\n const fallbacks: Record<FloatingUIPlacement, FloatingUIPlacement[]> = {\n left: ['right', 'bottom', 'top'],\n 'left-start': ['right-start', 'bottom', 'top'],\n 'left-end': ['right-end', 'bottom', 'top'],\n right: ['left', 'bottom', 'top'],\n 'right-start': ['left-start', 'bottom', 'top'],\n 'right-end': ['left-end', 'bottom', 'top'],\n top: ['bottom', 'left', 'right'],\n 'top-start': ['bottom-start', 'left', 'right'],\n 'top-end': ['bottom-end', 'left', 'right'],\n bottom: ['top', 'left', 'right'],\n 'bottom-start': ['top-start', 'left', 'right'],\n 'bottom-end': ['top-end', 'left', 'right'],\n };\n return fallbacks[placement] ?? [placement];\n};\n\n/**\n * @element active-overlay\n *\n * @slot - content to display in the overlay\n */\nexport class ActiveOverlay extends SpectrumElement {\n public overlayContent!: HTMLElement;\n public overlayContentTip?: HTMLElement;\n public trigger!: HTMLElement;\n public root?: HTMLElement;\n public virtualTrigger?: VirtualTrigger;\n\n protected childrenReady!: Promise<unknown[]>;\n\n @property()\n public _state = stateTransition();\n public get state(): OverlayStateType {\n return this._state;\n }\n public set state(state: OverlayStateType) {\n const nextState = stateTransition(this.state, state);\n if (nextState === this.state) {\n return;\n }\n this._state = nextState;\n if (this.state === 'active' || this.state === 'hiding') {\n this.setAttribute('state', this.state);\n } else {\n this.removeAttribute('state');\n }\n }\n\n @property({ reflect: true, type: Boolean })\n public animating = false;\n\n @property({ reflect: true })\n public placement?: Placement;\n @property({ attribute: false })\n public theme: {\n color?: Color;\n scale?: Scale;\n lang?: string;\n theme?: ThemeVariant;\n } = {};\n @property({ attribute: false })\n public receivesFocus?: 'auto';\n\n public tabbingAway = false;\n private originalPlacement?: Placement;\n private restoreContent?: () => Element[];\n\n public override async focus(): Promise<void> {\n const firstFocusable = firstFocusableIn(this);\n if (firstFocusable) {\n if ((firstFocusable as SpectrumElement).updateComplete) {\n await firstFocusable.updateComplete;\n }\n const activeElement = (this.getRootNode() as Document)\n .activeElement;\n if (activeElement === this || !this.contains(activeElement)) {\n firstFocusable.focus();\n }\n /* c8 ignore next 3 */\n } else {\n super.focus();\n }\n this.removeAttribute('tabindex');\n }\n\n private get hasTheme(): boolean {\n return !!this.theme.color || !!this.theme.scale || !!this.theme.lang;\n }\n\n public offset = 6;\n public skidding = 0;\n public interaction: TriggerInteractions = 'hover';\n private positionAnimationFrame = 0;\n\n private timeout?: number;\n\n public static override get styles(): CSSResultArray {\n return [styles];\n }\n\n public constructor() {\n super();\n this.stealOverlayContentPromise = new Promise(\n (res) => (this.stealOverlayContentResolver = res)\n );\n }\n\n private _modalRoot?: ActiveOverlay;\n\n public get hasModalRoot(): boolean {\n return !!this._modalRoot;\n }\n\n public feature(): void {\n this.tabIndex = -1;\n const parentOverlay = parentOverlayOf(this.trigger);\n const parentIsModal = parentOverlay && parentOverlay.slot === 'open';\n if (parentIsModal) {\n this._modalRoot = parentOverlay._modalRoot || parentOverlay;\n }\n // If an overlay it triggered from within a \"modal\" overlay, it needs to continue\n // to act like one to get treated correctly in regards to tab trapping.\n if (this.interaction === 'modal' || this._modalRoot) {\n this.slot = 'open';\n if (this.interaction === 'modal') {\n this.setAttribute('aria-modal', 'true');\n }\n // If this isn't a modal root, walk up the overlays to the next modal root\n // and \"feature\" each on of the intervening overlays.\n if (this._modalRoot) {\n parentOverlay?.feature();\n }\n }\n }\n\n public obscure(\n nextOverlayInteraction: TriggerInteractions\n ): ActiveOverlay | undefined {\n if (this.slot && nextOverlayInteraction === 'modal') {\n this.removeAttribute('slot');\n this.removeAttribute('aria-modal');\n // Obscure upto and including the next modal root.\n if (this.interaction !== 'modal') {\n const parentOverlay = parentOverlayOf(this.trigger);\n this._modalRoot = parentOverlay?.obscure(\n nextOverlayInteraction\n );\n return this._modalRoot;\n }\n return this;\n }\n return undefined;\n }\n\n public override async willUpdate(): Promise<void> {\n if (this.hasUpdated) return;\n\n /* c8 ignore next */\n if (!this.overlayContent || !this.trigger) return;\n\n this.stealOverlayContent(\n this.overlayContent as HTMLElement & { placement: Placement }\n );\n\n this.state = 'active';\n this.feature();\n if (this.placement === 'none') {\n this.style.setProperty(\n '--swc-visual-viewport-height',\n `${window.innerHeight}px`\n );\n } else if (this.placement) {\n await this.updateOverlayPosition();\n document.addEventListener(\n 'sp-update-overlays',\n this.updateOverlayPosition\n );\n window.addEventListener('scroll', this.updateOverlayPosition);\n }\n const actions: Promise<unknown>[] = [];\n if (this.placement && this.placement !== 'none') {\n actions.push(this.applyContentAnimation('sp-overlay-fade-in'));\n }\n if (\n typeof (this.overlayContent as SpectrumElement).updateComplete !==\n 'undefined'\n ) {\n actions.push(\n (this.overlayContent as SpectrumElement).updateComplete\n );\n }\n this.childrenReady = Promise.all(actions);\n }\n\n public async openCallback(\n lifecycleCallback: () => Promise<void> | void\n ): Promise<void> {\n await this.updateComplete;\n if (this.receivesFocus) {\n await this.focus();\n }\n\n await lifecycleCallback();\n\n this.trigger.dispatchEvent(\n new CustomEvent<OverlayOpenCloseDetail>('sp-opened', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n interaction: this.interaction,\n },\n })\n );\n }\n\n private open(openDetail: OverlayOpenDetail): void {\n this.extractDetail(openDetail);\n }\n\n private extractDetail(detail: OverlayOpenDetail): void {\n this.overlayContent = detail.content;\n this.overlayContentTip = detail.contentTip;\n this.trigger = detail.trigger;\n this.virtualTrigger = detail.virtualTrigger;\n this.placement = detail.placement;\n this.offset = detail.offset;\n this.skidding = detail.skidding || 0;\n this.interaction = detail.interaction;\n this.theme = detail.theme;\n this.receivesFocus = detail.receivesFocus;\n this.root = detail.root;\n }\n\n public dispose(): void {\n /* c8 ignore next */\n if (this.state !== 'dispose') return;\n\n /* c8 ignore next 4 */\n if (this.timeout) {\n clearTimeout(this.timeout);\n delete this.timeout;\n }\n\n this.trigger.removeEventListener(\n 'keydown',\n this.handleInlineTriggerKeydown\n );\n\n this.returnOverlayContent();\n this.state = 'disposed';\n\n if (this.willNotifyClosed) {\n this.overlayContent.dispatchEvent(new Event('sp-overlay-closed'));\n this.willNotifyClosed = false;\n }\n }\n\n private stealOverlayContent(\n element: HTMLElement & { placement: Placement }\n ): void {\n this.originalPlacement = element.getAttribute('placement') as Placement;\n this.restoreContent = reparentChildren([element], this, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slotName = el.slot;\n const placement = el.placement;\n el.removeAttribute('slot');\n return (el) => {\n el.slot = slotName;\n el.placement = placement;\n };\n },\n });\n this.stealOverlayContentResolver();\n }\n\n private willNotifyClosed = false;\n\n private returnOverlayContent(): void {\n /* c8 ignore next */\n if (!this.restoreContent) return;\n\n const [element] = this.restoreContent();\n this.restoreContent = undefined;\n this.willNotifyClosed = true;\n\n if (this.originalPlacement) {\n element.setAttribute('placement', this.originalPlacement);\n delete this.originalPlacement;\n }\n }\n\n private initialHeight!: number;\n private isConstrained = false;\n\n public updateOverlayPosition = async (): Promise<void> => {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n\n function roundByDPR(num: number): number {\n const dpr = window.devicePixelRatio || 1;\n return Math.round(num * dpr) / dpr || -10000;\n }\n\n // See: https://spectrum.adobe.com/page/popover/#Container-padding\n const REQUIRED_DISTANCE_TO_EDGE = 8;\n // See: https://github.com/adobe/spectrum-web-components/issues/910\n const MIN_OVERLAY_HEIGHT = 100;\n\n const flipMiddleware = this.virtualTrigger\n ? flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n fallbackPlacements: getFallbackPlacements(this.placement),\n })\n : flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n });\n\n const middleware = [\n offset({\n mainAxis: this.offset,\n crossAxis: this.skidding,\n }),\n shift({ padding: REQUIRED_DISTANCE_TO_EDGE }),\n flipMiddleware,\n size({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n apply: ({\n availableWidth,\n availableHeight,\n rects: { floating },\n }) => {\n const maxHeight = Math.max(\n MIN_OVERLAY_HEIGHT,\n Math.floor(availableHeight)\n );\n const actualHeight = floating.height;\n this.initialHeight =\n !this.isConstrained && !this.virtualTrigger\n ? actualHeight\n : this.initialHeight || actualHeight;\n this.isConstrained =\n actualHeight < this.initialHeight ||\n maxHeight <= actualHeight;\n const appliedHeight = this.isConstrained\n ? `${maxHeight}px`\n : '';\n Object.assign(this.style, {\n maxWidth: `${Math.floor(availableWidth)}px`,\n maxHeight: appliedHeight,\n height: appliedHeight,\n });\n },\n }),\n ];\n if (this.overlayContentTip) {\n middleware.push(arrow({ element: this.overlayContentTip }));\n }\n const { x, y, placement, middlewareData } = await computePosition(\n this.virtualTrigger || this.trigger,\n this,\n {\n placement: this.placement,\n middleware,\n }\n );\n\n Object.assign(this.style, {\n top: '0px',\n left: '0px',\n transform: `translate(${roundByDPR(x)}px, ${roundByDPR(y)}px)`,\n });\n\n if (placement !== this.getAttribute('actual-placement')) {\n this.setAttribute('actual-placement', placement);\n this.overlayContent.setAttribute('placement', placement);\n }\n\n if (this.overlayContentTip && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n Object.assign(this.overlayContentTip.style, {\n left: arrowX != null ? `${roundByDPR(arrowX)}px` : '',\n top: arrowY != null ? `${roundByDPR(arrowY)}px` : '',\n right: '',\n bottom: '',\n });\n }\n };\n\n public async hide(animated = true): Promise<void> {\n this.state = 'hiding';\n if (animated) {\n await this.applyContentAnimation('sp-overlay-fade-out');\n }\n this.state = 'dispose';\n }\n\n private schedulePositionUpdate(): void {\n // Edge needs a little time to update the DOM before computing the layout\n cancelAnimationFrame(this.positionAnimationFrame);\n this.positionAnimationFrame = requestAnimationFrame(() =>\n this.updateOverlayPosition()\n );\n }\n\n private onSlotChange(): void {\n this.schedulePositionUpdate();\n }\n\n public handleInlineTriggerKeydown = (event: KeyboardEvent): void => {\n const { code, shiftKey } = event;\n /* c8 ignore next */\n if (code !== 'Tab') return;\n if (shiftKey) {\n this.tabbingAway = true;\n this.dispatchEvent(new Event('close'));\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n this.focus();\n };\n\n public applyContentAnimation(\n animation: ContentAnimation\n ): Promise<boolean> {\n if (this.placement === 'none') {\n return Promise.resolve(true);\n }\n return new Promise((resolve): void => {\n const contents = this.shadowRoot.querySelector(\n '#contents'\n ) as HTMLElement;\n const doneHandler = (event: AnimationEvent): void => {\n if (animation !== event.animationName) return;\n contents.removeEventListener('animationend', doneHandler);\n contents.removeEventListener('animationcancel', doneHandler);\n this.animating = false;\n resolve(event.type === 'animationcancel');\n };\n contents.addEventListener('animationend', doneHandler);\n contents.addEventListener('animationcancel', doneHandler);\n\n contents.style.animationName = animation;\n this.animating = true;\n });\n }\n\n public renderTheme(content: TemplateResult): TemplateResult {\n const { color, scale, lang, theme } = this.theme;\n return html`\n <sp-theme\n theme=${ifDefined(theme)}\n color=${ifDefined(color)}\n scale=${ifDefined(scale)}\n lang=${ifDefined(lang)}\n part=\"theme\"\n >\n ${content}\n </sp-theme>\n `;\n }\n\n public override render(): TemplateResult {\n const content = html`\n <div id=\"contents\">\n <slot @slotchange=${this.onSlotChange}></slot>\n </div>\n `;\n return this.hasTheme ? this.renderTheme(content) : content;\n }\n\n public static create(details: OverlayOpenDetail): ActiveOverlay {\n const overlay = new ActiveOverlay();\n\n if (details.content) {\n overlay.open(details);\n }\n\n return overlay;\n }\n\n private stealOverlayContentPromise = Promise.resolve();\n private stealOverlayContentResolver!: () => void;\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const actions: Promise<unknown>[] = [\n super.getUpdateComplete(),\n this.stealOverlayContentPromise,\n ];\n if (this.childrenReady) {\n actions.push(this.childrenReady);\n }\n const [complete] = await Promise.all(actions);\n return complete as boolean;\n }\n\n override disconnectedCallback(): void {\n document.removeEventListener(\n 'sp-update-overlays',\n this.updateOverlayPosition\n );\n window.removeEventListener('scroll', this.updateOverlayPosition);\n super.disconnectedCallback();\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
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*/\n\nimport {\n CSSResultArray,\n html,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { reparentChildren } from '@spectrum-web-components/shared/src/reparent-children.js';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\nimport type {\n Color,\n Scale,\n ThemeVariant,\n} from '@spectrum-web-components/theme/src/Theme.js';\nimport styles from './active-overlay.css.js';\nimport { parentOverlayOf } from './overlay-utils.dev.js'\nimport {\n OverlayOpenCloseDetail,\n OverlayOpenDetail,\n Placement,\n TriggerInteractions,\n} from './overlay-types.dev.js'\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport {\n arrow,\n computePosition,\n flip,\n Placement as FloatingUIPlacement,\n offset,\n shift,\n size,\n} from '@floating-ui/dom';\n\nexport interface PositionResult {\n arrowOffsetLeft: number;\n arrowOffsetTop: number;\n maxHeight: number;\n placement: string;\n positionLeft: number;\n positionTop: number;\n}\n\ntype OverlayStateType = 'idle' | 'active' | 'hiding' | 'dispose' | 'disposed';\ntype ContentAnimation = 'sp-overlay-fade-in' | 'sp-overlay-fade-out';\n\nconst stateMachine: {\n initial: OverlayStateType;\n states: {\n [stateName: string]: {\n on: {\n [transitionName: string]: OverlayStateType;\n };\n };\n };\n} = {\n initial: 'idle',\n states: {\n idle: {\n on: {\n active: 'active',\n },\n },\n active: {\n on: {\n hiding: 'hiding',\n idle: 'idle',\n },\n },\n hiding: {\n on: {\n dispose: 'dispose',\n },\n },\n dispose: {\n on: {\n disposed: 'disposed',\n },\n },\n disposed: {\n on: {},\n },\n },\n};\n\nconst stateTransition = (\n state?: OverlayStateType,\n event?: string\n): OverlayStateType => {\n if (!state) return stateMachine.initial;\n /* c8 ignore next */\n if (!event) return state;\n return stateMachine.states[state].on[event] || state;\n};\n\nconst getFallbackPlacements = (\n placement: FloatingUIPlacement\n): FloatingUIPlacement[] => {\n const fallbacks: Record<FloatingUIPlacement, FloatingUIPlacement[]> = {\n left: ['right', 'bottom', 'top'],\n 'left-start': ['right-start', 'bottom', 'top'],\n 'left-end': ['right-end', 'bottom', 'top'],\n right: ['left', 'bottom', 'top'],\n 'right-start': ['left-start', 'bottom', 'top'],\n 'right-end': ['left-end', 'bottom', 'top'],\n top: ['bottom', 'left', 'right'],\n 'top-start': ['bottom-start', 'left', 'right'],\n 'top-end': ['bottom-end', 'left', 'right'],\n bottom: ['top', 'left', 'right'],\n 'bottom-start': ['top-start', 'left', 'right'],\n 'bottom-end': ['top-end', 'left', 'right'],\n };\n return fallbacks[placement] ?? [placement];\n};\n\n/**\n * @element active-overlay\n *\n * @slot - content to display in the overlay\n */\nexport class ActiveOverlay extends SpectrumElement {\n public overlayContent!: HTMLElement;\n public overlayContentTip?: HTMLElement;\n public trigger!: HTMLElement;\n public root?: HTMLElement;\n public virtualTrigger?: VirtualTrigger;\n\n protected childrenReady!: Promise<unknown[]>;\n\n @property()\n public _state = stateTransition();\n public get state(): OverlayStateType {\n return this._state;\n }\n public set state(state: OverlayStateType) {\n const nextState = stateTransition(this.state, state);\n if (nextState === this.state) {\n return;\n }\n this._state = nextState;\n if (this.state === 'active' || this.state === 'hiding') {\n this.setAttribute('state', this.state);\n } else {\n this.removeAttribute('state');\n }\n }\n\n @property({ reflect: true, type: Boolean })\n public animating = false;\n\n @property({ reflect: true })\n public placement?: Placement;\n @property({ attribute: false })\n public theme: {\n color?: Color;\n scale?: Scale;\n lang?: string;\n theme?: ThemeVariant;\n } = {};\n @property({ attribute: false })\n public receivesFocus?: 'auto';\n\n public tabbingAway = false;\n private originalPlacement?: Placement;\n private restoreContent?: () => Element[];\n\n public override async focus(): Promise<void> {\n const firstFocusable = firstFocusableIn(this);\n if (firstFocusable) {\n if ((firstFocusable as SpectrumElement).updateComplete) {\n await firstFocusable.updateComplete;\n }\n const activeElement = (this.getRootNode() as Document)\n .activeElement;\n if (activeElement === this || !this.contains(activeElement)) {\n firstFocusable.focus();\n }\n /* c8 ignore next 3 */\n } else {\n super.focus();\n }\n this.removeAttribute('tabindex');\n }\n\n private get hasTheme(): boolean {\n return !!this.theme.color || !!this.theme.scale || !!this.theme.lang;\n }\n\n public offset = 6;\n public skidding = 0;\n public interaction: TriggerInteractions = 'hover';\n private positionAnimationFrame = 0;\n\n private timeout?: number;\n\n public static override get styles(): CSSResultArray {\n return [styles];\n }\n\n public constructor() {\n super();\n this.stealOverlayContentPromise = new Promise(\n (res) => (this.stealOverlayContentResolver = res)\n );\n }\n\n private _modalRoot?: ActiveOverlay;\n\n public get hasModalRoot(): boolean {\n return !!this._modalRoot;\n }\n\n public feature(): void {\n // eslint-disable-next-line spectrum-web-components/document-active-element\n if (!this.contains(document.activeElement)) {\n this.tabIndex = -1;\n }\n const parentOverlay = parentOverlayOf(this.trigger);\n const parentIsModal = parentOverlay && parentOverlay.slot === 'open';\n if (parentIsModal) {\n this._modalRoot = parentOverlay._modalRoot || parentOverlay;\n }\n // If an overlay it triggered from within a \"modal\" overlay, it needs to continue\n // to act like one to get treated correctly in regards to tab trapping.\n if (this.interaction === 'modal' || this._modalRoot) {\n this.slot = 'open';\n if (this.interaction === 'modal') {\n this.setAttribute('aria-modal', 'true');\n }\n // If this isn't a modal root, walk up the overlays to the next modal root\n // and \"feature\" each on of the intervening overlays.\n if (this._modalRoot) {\n parentOverlay?.feature();\n }\n }\n }\n\n public obscure(\n nextOverlayInteraction: TriggerInteractions\n ): ActiveOverlay | undefined {\n if (this.slot && nextOverlayInteraction === 'modal') {\n this.removeAttribute('slot');\n this.removeAttribute('aria-modal');\n // Obscure upto and including the next modal root.\n if (this.interaction !== 'modal') {\n const parentOverlay = parentOverlayOf(this.trigger);\n this._modalRoot = parentOverlay?.obscure(\n nextOverlayInteraction\n );\n return this._modalRoot;\n }\n return this;\n }\n return undefined;\n }\n\n public override async willUpdate(): Promise<void> {\n if (this.hasUpdated) return;\n\n /* c8 ignore next */\n if (!this.overlayContent || !this.trigger) return;\n\n this.stealOverlayContent(\n this.overlayContent as HTMLElement & { placement: Placement }\n );\n\n this.state = 'active';\n this.feature();\n if (this.placement === 'none') {\n this.style.setProperty(\n '--swc-visual-viewport-height',\n `${window.innerHeight}px`\n );\n } else if (this.placement) {\n await this.updateOverlayPosition();\n document.addEventListener(\n 'sp-update-overlays',\n this.updateOverlayPosition\n );\n window.addEventListener('scroll', this.updateOverlayPosition);\n }\n const actions: Promise<unknown>[] = [];\n if (this.placement && this.placement !== 'none') {\n actions.push(this.applyContentAnimation('sp-overlay-fade-in'));\n }\n if (\n typeof (this.overlayContent as SpectrumElement).updateComplete !==\n 'undefined'\n ) {\n actions.push(\n (this.overlayContent as SpectrumElement).updateComplete\n );\n }\n this.childrenReady = Promise.all(actions);\n }\n\n public async openCallback(\n lifecycleCallback: () => Promise<void> | void\n ): Promise<void> {\n await this.updateComplete;\n if (this.receivesFocus) {\n await this.focus();\n }\n\n await lifecycleCallback();\n\n this.trigger.dispatchEvent(\n new CustomEvent<OverlayOpenCloseDetail>('sp-opened', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: {\n interaction: this.interaction,\n },\n })\n );\n }\n\n private open(openDetail: OverlayOpenDetail): void {\n this.extractDetail(openDetail);\n }\n\n private extractDetail(detail: OverlayOpenDetail): void {\n this.overlayContent = detail.content;\n this.overlayContentTip = detail.contentTip;\n this.trigger = detail.trigger;\n this.virtualTrigger = detail.virtualTrigger;\n this.placement = detail.placement;\n this.offset = detail.offset;\n this.skidding = detail.skidding || 0;\n this.interaction = detail.interaction;\n this.theme = detail.theme;\n this.receivesFocus = detail.receivesFocus;\n this.root = detail.root;\n }\n\n public dispose(): void {\n /* c8 ignore next */\n if (this.state !== 'dispose') return;\n\n /* c8 ignore next 4 */\n if (this.timeout) {\n clearTimeout(this.timeout);\n delete this.timeout;\n }\n\n this.trigger.removeEventListener(\n 'keydown',\n this.handleInlineTriggerKeydown\n );\n\n this.returnOverlayContent();\n this.state = 'disposed';\n\n if (this.willNotifyClosed) {\n this.overlayContent.dispatchEvent(new Event('sp-overlay-closed'));\n this.willNotifyClosed = false;\n }\n }\n\n private stealOverlayContent(\n element: HTMLElement & { placement: Placement }\n ): void {\n this.originalPlacement = element.getAttribute('placement') as Placement;\n this.restoreContent = reparentChildren([element], this, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slotName = el.slot;\n const placement = el.placement;\n el.removeAttribute('slot');\n return (el) => {\n el.slot = slotName;\n el.placement = placement;\n };\n },\n });\n this.stealOverlayContentResolver();\n }\n\n private willNotifyClosed = false;\n\n private returnOverlayContent(): void {\n /* c8 ignore next */\n if (!this.restoreContent) return;\n\n const [element] = this.restoreContent();\n this.restoreContent = undefined;\n this.willNotifyClosed = true;\n\n if (this.originalPlacement) {\n element.setAttribute('placement', this.originalPlacement);\n delete this.originalPlacement;\n }\n }\n\n private initialHeight!: number;\n private isConstrained = false;\n\n public updateOverlayPosition = async (): Promise<void> => {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n\n function roundByDPR(num: number): number {\n const dpr = window.devicePixelRatio || 1;\n return Math.round(num * dpr) / dpr || -10000;\n }\n\n // See: https://spectrum.adobe.com/page/popover/#Container-padding\n const REQUIRED_DISTANCE_TO_EDGE = 8;\n // See: https://github.com/adobe/spectrum-web-components/issues/910\n const MIN_OVERLAY_HEIGHT = 100;\n\n const flipMiddleware = this.virtualTrigger\n ? flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n fallbackPlacements: getFallbackPlacements(this.placement),\n })\n : flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n });\n\n const middleware = [\n offset({\n mainAxis: this.offset,\n crossAxis: this.skidding,\n }),\n shift({ padding: REQUIRED_DISTANCE_TO_EDGE }),\n flipMiddleware,\n size({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n apply: ({\n availableWidth,\n availableHeight,\n rects: { floating },\n }) => {\n const maxHeight = Math.max(\n MIN_OVERLAY_HEIGHT,\n Math.floor(availableHeight)\n );\n const actualHeight = floating.height;\n this.initialHeight =\n !this.isConstrained && !this.virtualTrigger\n ? actualHeight\n : this.initialHeight || actualHeight;\n this.isConstrained =\n actualHeight < this.initialHeight ||\n maxHeight <= actualHeight;\n const appliedHeight = this.isConstrained\n ? `${maxHeight}px`\n : '';\n Object.assign(this.style, {\n maxWidth: `${Math.floor(availableWidth)}px`,\n maxHeight: appliedHeight,\n height: appliedHeight,\n });\n },\n }),\n ];\n if (this.overlayContentTip) {\n middleware.push(arrow({ element: this.overlayContentTip }));\n }\n const { x, y, placement, middlewareData } = await computePosition(\n this.virtualTrigger || this.trigger,\n this,\n {\n placement: this.placement,\n middleware,\n }\n );\n\n Object.assign(this.style, {\n top: '0px',\n left: '0px',\n transform: `translate(${roundByDPR(x)}px, ${roundByDPR(y)}px)`,\n });\n\n if (placement !== this.getAttribute('actual-placement')) {\n this.setAttribute('actual-placement', placement);\n this.overlayContent.setAttribute('placement', placement);\n }\n\n if (this.overlayContentTip && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n Object.assign(this.overlayContentTip.style, {\n left: arrowX != null ? `${roundByDPR(arrowX)}px` : '',\n top: arrowY != null ? `${roundByDPR(arrowY)}px` : '',\n right: '',\n bottom: '',\n });\n }\n };\n\n public async hide(animated = true): Promise<void> {\n this.state = 'hiding';\n if (animated) {\n await this.applyContentAnimation('sp-overlay-fade-out');\n }\n this.state = 'dispose';\n }\n\n private schedulePositionUpdate(): void {\n // Edge needs a little time to update the DOM before computing the layout\n cancelAnimationFrame(this.positionAnimationFrame);\n this.positionAnimationFrame = requestAnimationFrame(() =>\n this.updateOverlayPosition()\n );\n }\n\n private onSlotChange(): void {\n this.schedulePositionUpdate();\n }\n\n public handleInlineTriggerKeydown = (event: KeyboardEvent): void => {\n const { code, shiftKey } = event;\n /* c8 ignore next */\n if (code !== 'Tab') return;\n if (shiftKey) {\n this.tabbingAway = true;\n this.dispatchEvent(new Event('close'));\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n this.focus();\n };\n\n public applyContentAnimation(\n animation: ContentAnimation\n ): Promise<boolean> {\n if (this.placement === 'none') {\n return Promise.resolve(true);\n }\n return new Promise((resolve): void => {\n const contents = this.shadowRoot.querySelector(\n '#contents'\n ) as HTMLElement;\n const doneHandler = (event: AnimationEvent): void => {\n if (animation !== event.animationName) return;\n contents.removeEventListener('animationend', doneHandler);\n contents.removeEventListener('animationcancel', doneHandler);\n this.animating = false;\n resolve(event.type === 'animationcancel');\n };\n contents.addEventListener('animationend', doneHandler);\n contents.addEventListener('animationcancel', doneHandler);\n\n contents.style.animationName = animation;\n this.animating = true;\n });\n }\n\n public renderTheme(content: TemplateResult): TemplateResult {\n const { color, scale, lang, theme } = this.theme;\n return html`\n <sp-theme\n theme=${ifDefined(theme)}\n color=${ifDefined(color)}\n scale=${ifDefined(scale)}\n lang=${ifDefined(lang)}\n part=\"theme\"\n >\n ${content}\n </sp-theme>\n `;\n }\n\n public override render(): TemplateResult {\n const content = html`\n <div id=\"contents\">\n <slot @slotchange=${this.onSlotChange}></slot>\n </div>\n `;\n return this.hasTheme ? this.renderTheme(content) : content;\n }\n\n public static create(details: OverlayOpenDetail): ActiveOverlay {\n const overlay = new ActiveOverlay();\n\n if (details.content) {\n overlay.open(details);\n }\n\n return overlay;\n }\n\n private stealOverlayContentPromise = Promise.resolve();\n private stealOverlayContentResolver!: () => void;\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const actions: Promise<unknown>[] = [\n super.getUpdateComplete(),\n this.stealOverlayContentPromise,\n ];\n if (this.childrenReady) {\n actions.push(this.childrenReady);\n }\n const [complete] = await Promise.all(actions);\n return complete as boolean;\n }\n\n override disconnectedCallback(): void {\n document.removeEventListener(\n 'sp-update-overlays',\n this.updateOverlayPosition\n );\n window.removeEventListener('scroll', this.updateOverlayPosition);\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;AAYA;AAAA,EAEI;AAAA,EACA;AAAA,OAEG;AACP,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AAMjC,OAAO,YAAY;AACnB,SAAS,uBAAuB;AAQhC;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAcP,MAAM,eASF;AAAA,EACA,SAAS;AAAA,EACT,QAAQ;AAAA,IACJ,MAAM;AAAA,MACF,IAAI;AAAA,QACA,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,MACJ,IAAI;AAAA,QACA,QAAQ;AAAA,QACR,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,MACJ,IAAI;AAAA,QACA,SAAS;AAAA,MACb;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,MACL,IAAI;AAAA,QACA,UAAU;AAAA,MACd;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,MACN,IAAI,CAAC;AAAA,IACT;AAAA,EACJ;AACJ;AAEA,MAAM,kBAAkB,CACpB,OACA,UACmB;AACnB,MAAI,CAAC;AAAO,WAAO,aAAa;AAEhC,MAAI,CAAC;AAAO,WAAO;AACnB,SAAO,aAAa,OAAO,OAAO,GAAG,UAAU;AACnD;AAEA,MAAM,wBAAwB,CAC1B,cACwB;AA7G5B;AA8GI,QAAM,YAAgE;AAAA,IAClE,MAAM,CAAC,SAAS,UAAU,KAAK;AAAA,IAC/B,cAAc,CAAC,eAAe,UAAU,KAAK;AAAA,IAC7C,YAAY,CAAC,aAAa,UAAU,KAAK;AAAA,IACzC,OAAO,CAAC,QAAQ,UAAU,KAAK;AAAA,IAC/B,eAAe,CAAC,cAAc,UAAU,KAAK;AAAA,IAC7C,aAAa,CAAC,YAAY,UAAU,KAAK;AAAA,IACzC,KAAK,CAAC,UAAU,QAAQ,OAAO;AAAA,IAC/B,aAAa,CAAC,gBAAgB,QAAQ,OAAO;AAAA,IAC7C,WAAW,CAAC,cAAc,QAAQ,OAAO;AAAA,IACzC,QAAQ,CAAC,OAAO,QAAQ,OAAO;AAAA,IAC/B,gBAAgB,CAAC,aAAa,QAAQ,OAAO;AAAA,IAC7C,cAAc,CAAC,WAAW,QAAQ,OAAO;AAAA,EAC7C;AACA,UAAO,eAAU,eAAV,YAAwB,CAAC,SAAS;AAC7C;AAOO,MAAM,iBAAN,cAA4B,gBAAgB;AAAA,EA+ExC,cAAc;AACjB,UAAM;AAtEV,SAAO,SAAS,gBAAgB;AAkBhC,SAAO,YAAY;AAKnB,SAAO,QAKH,CAAC;AAIL,SAAO,cAAc;AA0BrB,SAAO,SAAS;AAChB,SAAO,WAAW;AAClB,SAAO,cAAmC;AAC1C,SAAQ,yBAAyB;AA4LjC,SAAQ,mBAAmB;AAiB3B,SAAQ,gBAAgB;AAExB,SAAO,wBAAwB,YAA2B;AACtD,UAAI,CAAC,KAAK,aAAa,KAAK,cAAc,QAAQ;AAC9C;AAAA,MACJ;AACA,aAAO,SAAS,QAAQ,SAAS,MAAM,QAAQ,QAAQ,QAAQ;AAE/D,eAAS,WAAW,KAAqB;AACrC,cAAM,MAAM,OAAO,oBAAoB;AACvC,eAAO,KAAK,MAAM,MAAM,GAAG,IAAI,OAAO;AAAA,MAC1C;AAGA,YAAM,4BAA4B;AAElC,YAAM,qBAAqB;AAE3B,YAAM,iBAAiB,KAAK,iBACtB,KAAK;AAAA,QACD,SAAS;AAAA,QACT,oBAAoB,sBAAsB,KAAK,SAAS;AAAA,MAC5D,CAAC,IACD,KAAK;AAAA,QACD,SAAS;AAAA,MACb,CAAC;AAEP,YAAM,aAAa;AAAA,QACf,OAAO;AAAA,UACH,UAAU,KAAK;AAAA,UACf,WAAW,KAAK;AAAA,QACpB,CAAC;AAAA,QACD,MAAM,EAAE,SAAS,0BAA0B,CAAC;AAAA,QAC5C;AAAA,QACA,KAAK;AAAA,UACD,SAAS;AAAA,UACT,OAAO,CAAC;AAAA,YACJ;AAAA,YACA;AAAA,YACA,OAAO,EAAE,SAAS;AAAA,UACtB,MAAM;AACF,kBAAM,YAAY,KAAK;AAAA,cACnB;AAAA,cACA,KAAK,MAAM,eAAe;AAAA,YAC9B;AACA,kBAAM,eAAe,SAAS;AAC9B,iBAAK,gBACD,CAAC,KAAK,iBAAiB,CAAC,KAAK,iBACvB,eACA,KAAK,iBAAiB;AAChC,iBAAK,gBACD,eAAe,KAAK,iBACpB,aAAa;AACjB,kBAAM,gBAAgB,KAAK,gBACrB,GAAG,gBACH;AACN,mBAAO,OAAO,KAAK,OAAO;AAAA,cACtB,UAAU,GAAG,KAAK,MAAM,cAAc;AAAA,cACtC,WAAW;AAAA,cACX,QAAQ;AAAA,YACZ,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AAAA,MACL;AACA,UAAI,KAAK,mBAAmB;AACxB,mBAAW,KAAK,MAAM,EAAE,SAAS,KAAK,kBAAkB,CAAC,CAAC;AAAA,MAC9D;AACA,YAAM,EAAE,GAAG,GAAG,WAAW,eAAe,IAAI,MAAM;AAAA,QAC9C,KAAK,kBAAkB,KAAK;AAAA,QAC5B;AAAA,QACA;AAAA,UACI,WAAW,KAAK;AAAA,UAChB;AAAA,QACJ;AAAA,MACJ;AAEA,aAAO,OAAO,KAAK,OAAO;AAAA,QACtB,KAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAW,aAAa,WAAW,CAAC,QAAQ,WAAW,CAAC;AAAA,MAC5D,CAAC;AAED,UAAI,cAAc,KAAK,aAAa,kBAAkB,GAAG;AACrD,aAAK,aAAa,oBAAoB,SAAS;AAC/C,aAAK,eAAe,aAAa,aAAa,SAAS;AAAA,MAC3D;AAEA,UAAI,KAAK,qBAAqB,eAAe,OAAO;AAChD,cAAM,EAAE,GAAG,QAAQ,GAAG,OAAO,IAAI,eAAe;AAEhD,eAAO,OAAO,KAAK,kBAAkB,OAAO;AAAA,UACxC,MAAM,UAAU,OAAO,GAAG,WAAW,MAAM,QAAQ;AAAA,UACnD,KAAK,UAAU,OAAO,GAAG,WAAW,MAAM,QAAQ;AAAA,UAClD,OAAO;AAAA,UACP,QAAQ;AAAA,QACZ,CAAC;AAAA,MACL;AAAA,IACJ;AAsBA,SAAO,6BAA6B,CAAC,UAA+B;AAChE,YAAM,EAAE,MAAM,SAAS,IAAI;AAE3B,UAAI,SAAS;AAAO;AACpB,UAAI,UAAU;AACV,aAAK,cAAc;AACnB,aAAK,cAAc,IAAI,MAAM,OAAO,CAAC;AACrC;AAAA,MACJ;AAEA,YAAM,gBAAgB;AACtB,YAAM,eAAe;AACrB,WAAK,MAAM;AAAA,IACf;AA6DA,SAAQ,6BAA6B,QAAQ,QAAQ;AApYjD,SAAK,6BAA6B,IAAI;AAAA,MAClC,CAAC,QAAS,KAAK,8BAA8B;AAAA,IACjD;AAAA,EACJ;AAAA,EAzEA,IAAW,QAA0B;AACjC,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAW,MAAM,OAAyB;AACtC,UAAM,YAAY,gBAAgB,KAAK,OAAO,KAAK;AACnD,QAAI,cAAc,KAAK,OAAO;AAC1B;AAAA,IACJ;AACA,SAAK,SAAS;AACd,QAAI,KAAK,UAAU,YAAY,KAAK,UAAU,UAAU;AACpD,WAAK,aAAa,SAAS,KAAK,KAAK;AAAA,IACzC,OAAO;AACH,WAAK,gBAAgB,OAAO;AAAA,IAChC;AAAA,EACJ;AAAA,EAqBA,MAAsB,QAAuB;AACzC,UAAM,iBAAiB,iBAAiB,IAAI;AAC5C,QAAI,gBAAgB;AAChB,UAAK,eAAmC,gBAAgB;AACpD,cAAM,eAAe;AAAA,MACzB;AACA,YAAM,gBAAiB,KAAK,YAAY,EACnC;AACL,UAAI,kBAAkB,QAAQ,CAAC,KAAK,SAAS,aAAa,GAAG;AACzD,uBAAe,MAAM;AAAA,MACzB;AAAA,IAEJ,OAAO;AACH,YAAM,MAAM;AAAA,IAChB;AACA,SAAK,gBAAgB,UAAU;AAAA,EACnC;AAAA,EAEA,IAAY,WAAoB;AAC5B,WAAO,CAAC,CAAC,KAAK,MAAM,SAAS,CAAC,CAAC,KAAK,MAAM,SAAS,CAAC,CAAC,KAAK,MAAM;AAAA,EACpE;AAAA,EASA,WAA2B,SAAyB;AAChD,WAAO,CAAC,MAAM;AAAA,EAClB;AAAA,EAWA,IAAW,eAAwB;AAC/B,WAAO,CAAC,CAAC,KAAK;AAAA,EAClB;AAAA,EAEO,UAAgB;AAEnB,QAAI,CAAC,KAAK,SAAS,SAAS,aAAa,GAAG;AACxC,WAAK,WAAW;AAAA,IACpB;AACA,UAAM,gBAAgB,gBAAgB,KAAK,OAAO;AAClD,UAAM,gBAAgB,iBAAiB,cAAc,SAAS;AAC9D,QAAI,eAAe;AACf,WAAK,aAAa,cAAc,cAAc;AAAA,IAClD;AAGA,QAAI,KAAK,gBAAgB,WAAW,KAAK,YAAY;AACjD,WAAK,OAAO;AACZ,UAAI,KAAK,gBAAgB,SAAS;AAC9B,aAAK,aAAa,cAAc,MAAM;AAAA,MAC1C;AAGA,UAAI,KAAK,YAAY;AACjB,uDAAe;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEO,QACH,wBACyB;AACzB,QAAI,KAAK,QAAQ,2BAA2B,SAAS;AACjD,WAAK,gBAAgB,MAAM;AAC3B,WAAK,gBAAgB,YAAY;AAEjC,UAAI,KAAK,gBAAgB,SAAS;AAC9B,cAAM,gBAAgB,gBAAgB,KAAK,OAAO;AAClD,aAAK,aAAa,+CAAe;AAAA,UAC7B;AAAA;AAEJ,eAAO,KAAK;AAAA,MAChB;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAsB,aAA4B;AAC9C,QAAI,KAAK;AAAY;AAGrB,QAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK;AAAS;AAE3C,SAAK;AAAA,MACD,KAAK;AAAA,IACT;AAEA,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,QAAI,KAAK,cAAc,QAAQ;AAC3B,WAAK,MAAM;AAAA,QACP;AAAA,QACA,GAAG,OAAO;AAAA,MACd;AAAA,IACJ,WAAW,KAAK,WAAW;AACvB,YAAM,KAAK,sBAAsB;AACjC,eAAS;AAAA,QACL;AAAA,QACA,KAAK;AAAA,MACT;AACA,aAAO,iBAAiB,UAAU,KAAK,qBAAqB;AAAA,IAChE;AACA,UAAM,UAA8B,CAAC;AACrC,QAAI,KAAK,aAAa,KAAK,cAAc,QAAQ;AAC7C,cAAQ,KAAK,KAAK,sBAAsB,oBAAoB,CAAC;AAAA,IACjE;AACA,QACI,OAAQ,KAAK,eAAmC,mBAChD,aACF;AACE,cAAQ;AAAA,QACH,KAAK,eAAmC;AAAA,MAC7C;AAAA,IACJ;AACA,SAAK,gBAAgB,QAAQ,IAAI,OAAO;AAAA,EAC5C;AAAA,EAEA,MAAa,aACT,mBACa;AACb,UAAM,KAAK;AACX,QAAI,KAAK,eAAe;AACpB,YAAM,KAAK,MAAM;AAAA,IACrB;AAEA,UAAM,kBAAkB;AAExB,SAAK,QAAQ;AAAA,MACT,IAAI,YAAoC,aAAa;AAAA,QACjD,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,UACJ,aAAa,KAAK;AAAA,QACtB;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEQ,KAAK,YAAqC;AAC9C,SAAK,cAAc,UAAU;AAAA,EACjC;AAAA,EAEQ,cAAc,QAAiC;AACnD,SAAK,iBAAiB,OAAO;AAC7B,SAAK,oBAAoB,OAAO;AAChC,SAAK,UAAU,OAAO;AACtB,SAAK,iBAAiB,OAAO;AAC7B,SAAK,YAAY,OAAO;AACxB,SAAK,SAAS,OAAO;AACrB,SAAK,WAAW,OAAO,YAAY;AACnC,SAAK,cAAc,OAAO;AAC1B,SAAK,QAAQ,OAAO;AACpB,SAAK,gBAAgB,OAAO;AAC5B,SAAK,OAAO,OAAO;AAAA,EACvB;AAAA,EAEO,UAAgB;AAEnB,QAAI,KAAK,UAAU;AAAW;AAG9B,QAAI,KAAK,SAAS;AACd,mBAAa,KAAK,OAAO;AACzB,aAAO,KAAK;AAAA,IAChB;AAEA,SAAK,QAAQ;AAAA,MACT;AAAA,MACA,KAAK;AAAA,IACT;AAEA,SAAK,qBAAqB;AAC1B,SAAK,QAAQ;AAEb,QAAI,KAAK,kBAAkB;AACvB,WAAK,eAAe,cAAc,IAAI,MAAM,mBAAmB,CAAC;AAChE,WAAK,mBAAmB;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEQ,oBACJ,SACI;AACJ,SAAK,oBAAoB,QAAQ,aAAa,WAAW;AACzD,SAAK,iBAAiB,iBAAiB,CAAC,OAAO,GAAG,MAAM;AAAA,MACpD,UAAU;AAAA,MACV,iBAAiB,CAAC,OAAO;AACrB,cAAM,WAAW,GAAG;AACpB,cAAM,YAAY,GAAG;AACrB,WAAG,gBAAgB,MAAM;AACzB,eAAO,CAACA,QAAO;AACX,UAAAA,IAAG,OAAO;AACV,UAAAA,IAAG,YAAY;AAAA,QACnB;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,SAAK,4BAA4B;AAAA,EACrC;AAAA,EAIQ,uBAA6B;AAEjC,QAAI,CAAC,KAAK;AAAgB;AAE1B,UAAM,CAAC,OAAO,IAAI,KAAK,eAAe;AACtC,SAAK,iBAAiB;AACtB,SAAK,mBAAmB;AAExB,QAAI,KAAK,mBAAmB;AACxB,cAAQ,aAAa,aAAa,KAAK,iBAAiB;AACxD,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AAAA,EAsGA,MAAa,KAAK,WAAW,MAAqB;AAC9C,SAAK,QAAQ;AACb,QAAI,UAAU;AACV,YAAM,KAAK,sBAAsB,qBAAqB;AAAA,IAC1D;AACA,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEQ,yBAA+B;AAEnC,yBAAqB,KAAK,sBAAsB;AAChD,SAAK,yBAAyB;AAAA,MAAsB,MAChD,KAAK,sBAAsB;AAAA,IAC/B;AAAA,EACJ;AAAA,EAEQ,eAAqB;AACzB,SAAK,uBAAuB;AAAA,EAChC;AAAA,EAiBO,sBACH,WACgB;AAChB,QAAI,KAAK,cAAc,QAAQ;AAC3B,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC/B;AACA,WAAO,IAAI,QAAQ,CAAC,YAAkB;AAClC,YAAM,WAAW,KAAK,WAAW;AAAA,QAC7B;AAAA,MACJ;AACA,YAAM,cAAc,CAAC,UAAgC;AACjD,YAAI,cAAc,MAAM;AAAe;AACvC,iBAAS,oBAAoB,gBAAgB,WAAW;AACxD,iBAAS,oBAAoB,mBAAmB,WAAW;AAC3D,aAAK,YAAY;AACjB,gBAAQ,MAAM,SAAS,iBAAiB;AAAA,MAC5C;AACA,eAAS,iBAAiB,gBAAgB,WAAW;AACrD,eAAS,iBAAiB,mBAAmB,WAAW;AAExD,eAAS,MAAM,gBAAgB;AAC/B,WAAK,YAAY;AAAA,IACrB,CAAC;AAAA,EACL;AAAA,EAEO,YAAY,SAAyC;AACxD,UAAM,EAAE,OAAO,OAAO,MAAM,MAAM,IAAI,KAAK;AAC3C,WAAO;AAAA;AAAA,wBAES,UAAU,KAAK;AAAA,wBACf,UAAU,KAAK;AAAA,wBACf,UAAU,KAAK;AAAA,uBAChB,UAAU,IAAI;AAAA;AAAA;AAAA,kBAGnB;AAAA;AAAA;AAAA,EAGd;AAAA,EAEgB,SAAyB;AACrC,UAAM,UAAU;AAAA;AAAA,oCAEY,KAAK;AAAA;AAAA;AAGjC,WAAO,KAAK,WAAW,KAAK,YAAY,OAAO,IAAI;AAAA,EACvD;AAAA,EAEA,OAAc,OAAO,SAA2C;AAC5D,UAAM,UAAU,IAAI,eAAc;AAElC,QAAI,QAAQ,SAAS;AACjB,cAAQ,KAAK,OAAO;AAAA,IACxB;AAEA,WAAO;AAAA,EACX;AAAA,EAKA,MAAyB,oBAAsC;AAC3D,UAAM,UAA8B;AAAA,MAChC,MAAM,kBAAkB;AAAA,MACxB,KAAK;AAAA,IACT;AACA,QAAI,KAAK,eAAe;AACpB,cAAQ,KAAK,KAAK,aAAa;AAAA,IACnC;AACA,UAAM,CAAC,QAAQ,IAAI,MAAM,QAAQ,IAAI,OAAO;AAC5C,WAAO;AAAA,EACX;AAAA,EAES,uBAA6B;AAClC,aAAS;AAAA,MACL;AAAA,MACA,KAAK;AAAA,IACT;AACA,WAAO,oBAAoB,UAAU,KAAK,qBAAqB;AAC/D,UAAM,qBAAqB;AAAA,EAC/B;AACJ;AA5eO,WAAM,gBAAN;AAUI;AAAA,EADN,SAAS;AAAA,GATD,cAUF;AAkBA;AAAA,EADN,SAAS,EAAE,SAAS,MAAM,MAAM,QAAQ,CAAC;AAAA,GA3BjC,cA4BF;AAGA;AAAA,EADN,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,GA9BlB,cA+BF;AAEA;AAAA,EADN,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAhCrB,cAiCF;AAOA;AAAA,EADN,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAvCrB,cAwCF;",
6
+ "names": ["el"]
7
7
  }
@@ -1,4 +1,4 @@
1
- var E=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var l=(s,t,e,i)=>{for(var o=i>1?void 0:i?R(t,e):t,n=s.length-1,p;n>=0;n--)(p=s[n])&&(o=(i?p(t,e,o):p(o))||o);return i&&o&&E(t,e,o),o};import{html as y,SpectrumElement as A}from"@spectrum-web-components/base";import{ifDefined as h}from"@spectrum-web-components/base/src/directives.js";import{property as c}from"@spectrum-web-components/base/src/decorators.js";import{reparentChildren as x}from"@spectrum-web-components/shared/src/reparent-children.js";import{firstFocusableIn as S}from"@spectrum-web-components/shared/src/first-focusable-in.js";import H from"./active-overlay.css.js";import{parentOverlayOf as b}from"./overlay-utils.js";import{arrow as L,computePosition as F,flip as C,offset as I,shift as M,size as k}from"@floating-ui/dom";const P={initial:"idle",states:{idle:{on:{active:"active"}},active:{on:{hiding:"hiding",idle:"idle"}},hiding:{on:{dispose:"dispose"}},dispose:{on:{disposed:"disposed"}},disposed:{on:{}}}},T=(s,t)=>s?t&&P.states[s].on[t]||s:P.initial,D=s=>{var e;return(e={left:["right","bottom","top"],"left-start":["right-start","bottom","top"],"left-end":["right-end","bottom","top"],right:["left","bottom","top"],"right-start":["left-start","bottom","top"],"right-end":["left-end","bottom","top"],top:["bottom","left","right"],"top-start":["bottom-start","left","right"],"top-end":["bottom-end","left","right"],bottom:["top","left","right"],"bottom-start":["top-start","left","right"],"bottom-end":["top-end","left","right"]}[s])!=null?e:[s]},u=class extends A{constructor(){super();this._state=T();this.animating=!1;this.theme={};this.tabbingAway=!1;this.offset=6;this.skidding=0;this.interaction="hover";this.positionAnimationFrame=0;this.willNotifyClosed=!1;this.isConstrained=!1;this.updateOverlayPosition=async()=>{if(!this.placement||this.placement==="none")return;await(document.fonts?document.fonts.ready:Promise.resolve());function t(r){const a=window.devicePixelRatio||1;return Math.round(r*a)/a||-1e4}const e=8,i=100,o=this.virtualTrigger?C({padding:e,fallbackPlacements:D(this.placement)}):C({padding:e}),n=[I({mainAxis:this.offset,crossAxis:this.skidding}),M({padding:e}),o,k({padding:e,apply:({availableWidth:r,availableHeight:a,rects:{floating:O}})=>{const f=Math.max(i,Math.floor(a)),m=O.height;this.initialHeight=!this.isConstrained&&!this.virtualTrigger?m:this.initialHeight||m,this.isConstrained=m<this.initialHeight||f<=m;const g=this.isConstrained?`${f}px`:"";Object.assign(this.style,{maxWidth:`${Math.floor(r)}px`,maxHeight:g,height:g})}})];this.overlayContentTip&&n.push(L({element:this.overlayContentTip}));const{x:p,y:w,placement:d,middlewareData:v}=await F(this.virtualTrigger||this.trigger,this,{placement:this.placement,middleware:n});if(Object.assign(this.style,{top:"0px",left:"0px",transform:`translate(${t(p)}px, ${t(w)}px)`}),d!==this.getAttribute("actual-placement")&&(this.setAttribute("actual-placement",d),this.overlayContent.setAttribute("placement",d)),this.overlayContentTip&&v.arrow){const{x:r,y:a}=v.arrow;Object.assign(this.overlayContentTip.style,{left:r!=null?`${t(r)}px`:"",top:a!=null?`${t(a)}px`:"",right:"",bottom:""})}};this.handleInlineTriggerKeydown=t=>{const{code:e,shiftKey:i}=t;if(e==="Tab"){if(i){this.tabbingAway=!0,this.dispatchEvent(new Event("close"));return}t.stopPropagation(),t.preventDefault(),this.focus()}};this.stealOverlayContentPromise=Promise.resolve();this.stealOverlayContentPromise=new Promise(t=>this.stealOverlayContentResolver=t)}get state(){return this._state}set state(t){const e=T(this.state,t);e!==this.state&&(this._state=e,this.state==="active"||this.state==="hiding"?this.setAttribute("state",this.state):this.removeAttribute("state"))}async focus(){const t=S(this);if(t){t.updateComplete&&await t.updateComplete;const e=this.getRootNode().activeElement;(e===this||!this.contains(e))&&t.focus()}else super.focus();this.removeAttribute("tabindex")}get hasTheme(){return!!this.theme.color||!!this.theme.scale||!!this.theme.lang}static get styles(){return[H]}get hasModalRoot(){return!!this._modalRoot}feature(){this.tabIndex=-1;const t=b(this.trigger);t&&t.slot==="open"&&(this._modalRoot=t._modalRoot||t),(this.interaction==="modal"||this._modalRoot)&&(this.slot="open",this.interaction==="modal"&&this.setAttribute("aria-modal","true"),this._modalRoot&&(t==null||t.feature()))}obscure(t){if(this.slot&&t==="modal"){if(this.removeAttribute("slot"),this.removeAttribute("aria-modal"),this.interaction!=="modal"){const e=b(this.trigger);return this._modalRoot=e==null?void 0:e.obscure(t),this._modalRoot}return this}}async willUpdate(){if(this.hasUpdated||!this.overlayContent||!this.trigger)return;this.stealOverlayContent(this.overlayContent),this.state="active",this.feature(),this.placement==="none"?this.style.setProperty("--swc-visual-viewport-height",`${window.innerHeight}px`):this.placement&&(await this.updateOverlayPosition(),document.addEventListener("sp-update-overlays",this.updateOverlayPosition),window.addEventListener("scroll",this.updateOverlayPosition));const t=[];this.placement&&this.placement!=="none"&&t.push(this.applyContentAnimation("sp-overlay-fade-in")),typeof this.overlayContent.updateComplete!="undefined"&&t.push(this.overlayContent.updateComplete),this.childrenReady=Promise.all(t)}async openCallback(t){await this.updateComplete,this.receivesFocus&&await this.focus(),await t(),this.trigger.dispatchEvent(new CustomEvent("sp-opened",{bubbles:!0,composed:!0,cancelable:!0,detail:{interaction:this.interaction}}))}open(t){this.extractDetail(t)}extractDetail(t){this.overlayContent=t.content,this.overlayContentTip=t.contentTip,this.trigger=t.trigger,this.virtualTrigger=t.virtualTrigger,this.placement=t.placement,this.offset=t.offset,this.skidding=t.skidding||0,this.interaction=t.interaction,this.theme=t.theme,this.receivesFocus=t.receivesFocus,this.root=t.root}dispose(){this.state==="dispose"&&(this.timeout&&(clearTimeout(this.timeout),delete this.timeout),this.trigger.removeEventListener("keydown",this.handleInlineTriggerKeydown),this.returnOverlayContent(),this.state="disposed",this.willNotifyClosed&&(this.overlayContent.dispatchEvent(new Event("sp-overlay-closed")),this.willNotifyClosed=!1))}stealOverlayContent(t){this.originalPlacement=t.getAttribute("placement"),this.restoreContent=x([t],this,{position:"beforeend",prepareCallback:e=>{const i=e.slot,o=e.placement;return e.removeAttribute("slot"),n=>{n.slot=i,n.placement=o}}}),this.stealOverlayContentResolver()}returnOverlayContent(){if(!this.restoreContent)return;const[t]=this.restoreContent();this.restoreContent=void 0,this.willNotifyClosed=!0,this.originalPlacement&&(t.setAttribute("placement",this.originalPlacement),delete this.originalPlacement)}async hide(t=!0){this.state="hiding",t&&await this.applyContentAnimation("sp-overlay-fade-out"),this.state="dispose"}schedulePositionUpdate(){cancelAnimationFrame(this.positionAnimationFrame),this.positionAnimationFrame=requestAnimationFrame(()=>this.updateOverlayPosition())}onSlotChange(){this.schedulePositionUpdate()}applyContentAnimation(t){return this.placement==="none"?Promise.resolve(!0):new Promise(e=>{const i=this.shadowRoot.querySelector("#contents"),o=n=>{t===n.animationName&&(i.removeEventListener("animationend",o),i.removeEventListener("animationcancel",o),this.animating=!1,e(n.type==="animationcancel"))};i.addEventListener("animationend",o),i.addEventListener("animationcancel",o),i.style.animationName=t,this.animating=!0})}renderTheme(t){const{color:e,scale:i,lang:o,theme:n}=this.theme;return y`
1
+ "use strict";var R=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var p=(s,a,t,e)=>{for(var i=e>1?void 0:e?A(a,t):a,o=s.length-1,n;o>=0;o--)(n=s[o])&&(i=(e?n(a,t,i):n(i))||i);return e&&i&&R(a,t,i),i};import{html as b,SpectrumElement as x}from"@spectrum-web-components/base";import{ifDefined as h}from"@spectrum-web-components/base/src/directives.js";import{property as c}from"@spectrum-web-components/base/src/decorators.js";import{reparentChildren as S}from"@spectrum-web-components/shared/src/reparent-children.js";import{firstFocusableIn as H}from"@spectrum-web-components/shared/src/first-focusable-in.js";import L from"./active-overlay.css.js";import{parentOverlayOf as y}from"./overlay-utils.js";import{arrow as F,computePosition as I,flip as C,offset as M,shift as k,size as D}from"@floating-ui/dom";const P={initial:"idle",states:{idle:{on:{active:"active"}},active:{on:{hiding:"hiding",idle:"idle"}},hiding:{on:{dispose:"dispose"}},dispose:{on:{disposed:"disposed"}},disposed:{on:{}}}},T=(s,a)=>s?a&&P.states[s].on[a]||s:P.initial,_=s=>{var t;return(t={left:["right","bottom","top"],"left-start":["right-start","bottom","top"],"left-end":["right-end","bottom","top"],right:["left","bottom","top"],"right-start":["left-start","bottom","top"],"right-end":["left-end","bottom","top"],top:["bottom","left","right"],"top-start":["bottom-start","left","right"],"top-end":["bottom-end","left","right"],bottom:["top","left","right"],"bottom-start":["top-start","left","right"],"bottom-end":["top-end","left","right"]}[s])!=null?t:[s]},u=class extends x{constructor(){super();this._state=T();this.animating=!1;this.theme={};this.tabbingAway=!1;this.offset=6;this.skidding=0;this.interaction="hover";this.positionAnimationFrame=0;this.willNotifyClosed=!1;this.isConstrained=!1;this.updateOverlayPosition=async()=>{if(!this.placement||this.placement==="none")return;await(document.fonts?document.fonts.ready:Promise.resolve());function t(l){const r=window.devicePixelRatio||1;return Math.round(l*r)/r||-1e4}const e=8,i=100,o=this.virtualTrigger?C({padding:e,fallbackPlacements:_(this.placement)}):C({padding:e}),n=[M({mainAxis:this.offset,crossAxis:this.skidding}),k({padding:e}),o,D({padding:e,apply:({availableWidth:l,availableHeight:r,rects:{floating:O}})=>{const f=Math.max(i,Math.floor(r)),m=O.height;this.initialHeight=!this.isConstrained&&!this.virtualTrigger?m:this.initialHeight||m,this.isConstrained=m<this.initialHeight||f<=m;const g=this.isConstrained?`${f}px`:"";Object.assign(this.style,{maxWidth:`${Math.floor(l)}px`,maxHeight:g,height:g})}})];this.overlayContentTip&&n.push(F({element:this.overlayContentTip}));const{x:w,y:E,placement:d,middlewareData:v}=await I(this.virtualTrigger||this.trigger,this,{placement:this.placement,middleware:n});if(Object.assign(this.style,{top:"0px",left:"0px",transform:`translate(${t(w)}px, ${t(E)}px)`}),d!==this.getAttribute("actual-placement")&&(this.setAttribute("actual-placement",d),this.overlayContent.setAttribute("placement",d)),this.overlayContentTip&&v.arrow){const{x:l,y:r}=v.arrow;Object.assign(this.overlayContentTip.style,{left:l!=null?`${t(l)}px`:"",top:r!=null?`${t(r)}px`:"",right:"",bottom:""})}};this.handleInlineTriggerKeydown=t=>{const{code:e,shiftKey:i}=t;if(e==="Tab"){if(i){this.tabbingAway=!0,this.dispatchEvent(new Event("close"));return}t.stopPropagation(),t.preventDefault(),this.focus()}};this.stealOverlayContentPromise=Promise.resolve();this.stealOverlayContentPromise=new Promise(t=>this.stealOverlayContentResolver=t)}get state(){return this._state}set state(t){const e=T(this.state,t);e!==this.state&&(this._state=e,this.state==="active"||this.state==="hiding"?this.setAttribute("state",this.state):this.removeAttribute("state"))}async focus(){const t=H(this);if(t){t.updateComplete&&await t.updateComplete;const e=this.getRootNode().activeElement;(e===this||!this.contains(e))&&t.focus()}else super.focus();this.removeAttribute("tabindex")}get hasTheme(){return!!this.theme.color||!!this.theme.scale||!!this.theme.lang}static get styles(){return[L]}get hasModalRoot(){return!!this._modalRoot}feature(){this.contains(document.activeElement)||(this.tabIndex=-1);const t=y(this.trigger);t&&t.slot==="open"&&(this._modalRoot=t._modalRoot||t),(this.interaction==="modal"||this._modalRoot)&&(this.slot="open",this.interaction==="modal"&&this.setAttribute("aria-modal","true"),this._modalRoot&&(t==null||t.feature()))}obscure(t){if(this.slot&&t==="modal"){if(this.removeAttribute("slot"),this.removeAttribute("aria-modal"),this.interaction!=="modal"){const e=y(this.trigger);return this._modalRoot=e==null?void 0:e.obscure(t),this._modalRoot}return this}}async willUpdate(){if(this.hasUpdated||!this.overlayContent||!this.trigger)return;this.stealOverlayContent(this.overlayContent),this.state="active",this.feature(),this.placement==="none"?this.style.setProperty("--swc-visual-viewport-height",`${window.innerHeight}px`):this.placement&&(await this.updateOverlayPosition(),document.addEventListener("sp-update-overlays",this.updateOverlayPosition),window.addEventListener("scroll",this.updateOverlayPosition));const t=[];this.placement&&this.placement!=="none"&&t.push(this.applyContentAnimation("sp-overlay-fade-in")),typeof this.overlayContent.updateComplete!="undefined"&&t.push(this.overlayContent.updateComplete),this.childrenReady=Promise.all(t)}async openCallback(t){await this.updateComplete,this.receivesFocus&&await this.focus(),await t(),this.trigger.dispatchEvent(new CustomEvent("sp-opened",{bubbles:!0,composed:!0,cancelable:!0,detail:{interaction:this.interaction}}))}open(t){this.extractDetail(t)}extractDetail(t){this.overlayContent=t.content,this.overlayContentTip=t.contentTip,this.trigger=t.trigger,this.virtualTrigger=t.virtualTrigger,this.placement=t.placement,this.offset=t.offset,this.skidding=t.skidding||0,this.interaction=t.interaction,this.theme=t.theme,this.receivesFocus=t.receivesFocus,this.root=t.root}dispose(){this.state==="dispose"&&(this.timeout&&(clearTimeout(this.timeout),delete this.timeout),this.trigger.removeEventListener("keydown",this.handleInlineTriggerKeydown),this.returnOverlayContent(),this.state="disposed",this.willNotifyClosed&&(this.overlayContent.dispatchEvent(new Event("sp-overlay-closed")),this.willNotifyClosed=!1))}stealOverlayContent(t){this.originalPlacement=t.getAttribute("placement"),this.restoreContent=S([t],this,{position:"beforeend",prepareCallback:e=>{const i=e.slot,o=e.placement;return e.removeAttribute("slot"),n=>{n.slot=i,n.placement=o}}}),this.stealOverlayContentResolver()}returnOverlayContent(){if(!this.restoreContent)return;const[t]=this.restoreContent();this.restoreContent=void 0,this.willNotifyClosed=!0,this.originalPlacement&&(t.setAttribute("placement",this.originalPlacement),delete this.originalPlacement)}async hide(t=!0){this.state="hiding",t&&await this.applyContentAnimation("sp-overlay-fade-out"),this.state="dispose"}schedulePositionUpdate(){cancelAnimationFrame(this.positionAnimationFrame),this.positionAnimationFrame=requestAnimationFrame(()=>this.updateOverlayPosition())}onSlotChange(){this.schedulePositionUpdate()}applyContentAnimation(t){return this.placement==="none"?Promise.resolve(!0):new Promise(e=>{const i=this.shadowRoot.querySelector("#contents"),o=n=>{t===n.animationName&&(i.removeEventListener("animationend",o),i.removeEventListener("animationcancel",o),this.animating=!1,e(n.type==="animationcancel"))};i.addEventListener("animationend",o),i.addEventListener("animationcancel",o),i.style.animationName=t,this.animating=!0})}renderTheme(t){const{color:e,scale:i,lang:o,theme:n}=this.theme;return b`
2
2
  <sp-theme
3
3
  theme=${h(n)}
4
4
  color=${h(e)}
@@ -8,9 +8,9 @@ var E=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var l=(s,t,e,i
8
8
  >
9
9
  ${t}
10
10
  </sp-theme>
11
- `}render(){const t=y`
11
+ `}render(){const t=b`
12
12
  <div id="contents">
13
13
  <slot @slotchange=${this.onSlotChange}></slot>
14
14
  </div>
15
- `;return this.hasTheme?this.renderTheme(t):t}static create(t){const e=new u;return t.content&&e.open(t),e}async getUpdateComplete(){const t=[super.getUpdateComplete(),this.stealOverlayContentPromise];this.childrenReady&&t.push(this.childrenReady);const[e]=await Promise.all(t);return e}disconnectedCallback(){document.removeEventListener("sp-update-overlays",this.updateOverlayPosition),window.removeEventListener("scroll",this.updateOverlayPosition),super.disconnectedCallback()}};export let ActiveOverlay=u;l([c()],ActiveOverlay.prototype,"_state",2),l([c({reflect:!0,type:Boolean})],ActiveOverlay.prototype,"animating",2),l([c({reflect:!0})],ActiveOverlay.prototype,"placement",2),l([c({attribute:!1})],ActiveOverlay.prototype,"theme",2),l([c({attribute:!1})],ActiveOverlay.prototype,"receivesFocus",2);
15
+ `;return this.hasTheme?this.renderTheme(t):t}static create(t){const e=new u;return t.content&&e.open(t),e}async getUpdateComplete(){const t=[super.getUpdateComplete(),this.stealOverlayContentPromise];this.childrenReady&&t.push(this.childrenReady);const[e]=await Promise.all(t);return e}disconnectedCallback(){document.removeEventListener("sp-update-overlays",this.updateOverlayPosition),window.removeEventListener("scroll",this.updateOverlayPosition),super.disconnectedCallback()}};export let ActiveOverlay=u;p([c()],ActiveOverlay.prototype,"_state",2),p([c({reflect:!0,type:Boolean})],ActiveOverlay.prototype,"animating",2),p([c({reflect:!0})],ActiveOverlay.prototype,"placement",2),p([c({attribute:!1})],ActiveOverlay.prototype,"theme",2),p([c({attribute:!1})],ActiveOverlay.prototype,"receivesFocus",2);
16
16
  //# sourceMappingURL=ActiveOverlay.js.map