@spectrum-web-components/overlay 0.18.7 → 0.18.9

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.
@@ -67,12 +67,17 @@
67
67
  },
68
68
  {
69
69
  "kind": "field",
70
- "name": "childrenReady",
70
+ "name": "contentAnimationPromise",
71
71
  "type": {
72
- "text": "Promise<unknown[]>"
72
+ "text": "Promise<boolean>"
73
73
  },
74
74
  "privacy": "protected"
75
75
  },
76
+ {
77
+ "kind": "field",
78
+ "name": "resolveContentAnimationPromise",
79
+ "privacy": "protected"
80
+ },
76
81
  {
77
82
  "kind": "field",
78
83
  "name": "_state",
@@ -389,6 +394,11 @@
389
394
  "name": "updateOverlayPosition",
390
395
  "privacy": "public"
391
396
  },
397
+ {
398
+ "kind": "field",
399
+ "name": "setOverlayPosition",
400
+ "privacy": "public"
401
+ },
392
402
  {
393
403
  "kind": "method",
394
404
  "name": "hide",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/overlay",
3
- "version": "0.18.7",
3
+ "version": "0.18.9",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -103,10 +103,10 @@
103
103
  ],
104
104
  "dependencies": {
105
105
  "@floating-ui/dom": "^1.0.4",
106
- "@spectrum-web-components/action-button": "^0.10.6",
107
- "@spectrum-web-components/base": "^0.7.1",
108
- "@spectrum-web-components/shared": "^0.15.2",
109
- "@spectrum-web-components/theme": "^0.14.6"
106
+ "@spectrum-web-components/action-button": "^0.10.8",
107
+ "@spectrum-web-components/base": "^0.7.2",
108
+ "@spectrum-web-components/shared": "^0.15.3",
109
+ "@spectrum-web-components/theme": "^0.14.8"
110
110
  },
111
111
  "types": "./src/index.d.ts",
112
112
  "customElements": "custom-elements.json",
@@ -117,5 +117,5 @@
117
117
  "./stories/overlay-story-components.js",
118
118
  "./**/*.dev.js"
119
119
  ],
120
- "gitHead": "8bd87724e91e23df83dbf63a434bbbe10b8daaa6"
120
+ "gitHead": "34bbc8bf1636f2d78ca9d5dbabc0b89da625572f"
121
121
  }
@@ -24,7 +24,8 @@ export declare class ActiveOverlay extends SpectrumElement {
24
24
  root?: HTMLElement;
25
25
  virtualTrigger?: VirtualTrigger;
26
26
  private cleanup?;
27
- protected childrenReady: Promise<unknown[]>;
27
+ protected contentAnimationPromise: Promise<boolean>;
28
+ protected resolveContentAnimationPromise: () => void;
28
29
  _state: OverlayStateType;
29
30
  get state(): OverlayStateType;
30
31
  set state(state: OverlayStateType);
@@ -64,7 +65,8 @@ export declare class ActiveOverlay extends SpectrumElement {
64
65
  private initialHeight;
65
66
  private isConstrained;
66
67
  placeOverlay(): Promise<void>;
67
- updateOverlayPosition: () => Promise<void>;
68
+ updateOverlayPosition: () => void;
69
+ setOverlayPosition: () => Promise<void>;
68
70
  hide(animated?: boolean): Promise<void>;
69
71
  private schedulePositionUpdate;
70
72
  private onSlotChange;
@@ -86,6 +86,10 @@ const getFallbackPlacements = (placement) => {
86
86
  const _ActiveOverlay = class extends SpectrumElement {
87
87
  constructor() {
88
88
  super();
89
+ this.contentAnimationPromise = Promise.resolve(true);
90
+ this.resolveContentAnimationPromise = () => {
91
+ return;
92
+ };
89
93
  this._state = stateTransition();
90
94
  this.animating = false;
91
95
  this.theme = {};
@@ -96,14 +100,17 @@ const _ActiveOverlay = class extends SpectrumElement {
96
100
  this.positionAnimationFrame = 0;
97
101
  this.willNotifyClosed = false;
98
102
  this.isConstrained = false;
99
- this.updateOverlayPosition = async () => {
100
- if (!this.placement || this.placement === "none") {
101
- return;
102
- }
103
+ this.updateOverlayPosition = () => {
103
104
  if (this.interaction !== "modal" && this.cleanup) {
104
105
  this.dispatchEvent(new Event("close"));
105
106
  return;
106
107
  }
108
+ this.setOverlayPosition();
109
+ };
110
+ this.setOverlayPosition = async () => {
111
+ if (!this.placement || this.placement === "none") {
112
+ return;
113
+ }
107
114
  await (document.fonts ? document.fonts.ready : Promise.resolve());
108
115
  function roundByDPR(num) {
109
116
  const dpr = window.devicePixelRatio || 1;
@@ -277,30 +284,17 @@ const _ActiveOverlay = class extends SpectrumElement {
277
284
  this.overlayContent
278
285
  );
279
286
  this.state = "active";
280
- this.offsetWidth;
281
287
  this.feature();
282
- if (this.placement === "none") {
283
- this.style.setProperty(
284
- "--swc-visual-viewport-height",
285
- `${window.innerHeight}px`
286
- );
287
- } else if (this.placement) {
288
+ if (this.placement && this.placement !== "none") {
288
289
  await this.updateOverlayPosition();
289
290
  document.addEventListener(
290
291
  "sp-update-overlays",
291
- this.updateOverlayPosition
292
+ this.setOverlayPosition
292
293
  );
293
294
  }
294
- const actions = [];
295
295
  if (this.placement && this.placement !== "none") {
296
- actions.push(this.applyContentAnimation("sp-overlay-fade-in"));
296
+ this.contentAnimationPromise = this.applyContentAnimation("sp-overlay-fade-in");
297
297
  }
298
- if (typeof this.overlayContent.updateComplete !== "undefined") {
299
- actions.push(
300
- this.overlayContent.updateComplete
301
- );
302
- }
303
- this.childrenReady = Promise.all(actions);
304
298
  }
305
299
  async openCallback(lifecycleCallback) {
306
300
  await this.updateComplete;
@@ -390,10 +384,15 @@ const _ActiveOverlay = class extends SpectrumElement {
390
384
  this.cleanup = autoUpdate(
391
385
  this.virtualTrigger || this.trigger,
392
386
  this,
393
- this.updateOverlayPosition
387
+ this.updateOverlayPosition,
388
+ {
389
+ elementResize: false
390
+ }
394
391
  );
395
392
  }
396
393
  async hide(animated = true) {
394
+ if (this.state !== "active")
395
+ return;
397
396
  this.state = "hiding";
398
397
  if (animated) {
399
398
  await this.applyContentAnimation("sp-overlay-fade-out");
@@ -417,7 +416,11 @@ const _ActiveOverlay = class extends SpectrumElement {
417
416
  if (this.placement === "none") {
418
417
  return Promise.resolve(true);
419
418
  }
419
+ this.resolveContentAnimationPromise();
420
420
  return new Promise((resolve) => {
421
+ this.resolveContentAnimationPromise = () => {
422
+ resolve(false);
423
+ };
421
424
  const contents = this.shadowRoot.querySelector(
422
425
  "#contents"
423
426
  );
@@ -469,8 +472,11 @@ const _ActiveOverlay = class extends SpectrumElement {
469
472
  super.getUpdateComplete(),
470
473
  this.stealOverlayContentPromise
471
474
  ];
472
- if (this.childrenReady) {
473
- actions.push(this.childrenReady);
475
+ actions.push(this.contentAnimationPromise);
476
+ if (typeof this.overlayContent.updateComplete !== "undefined") {
477
+ actions.push(
478
+ this.overlayContent.updateComplete
479
+ );
474
480
  }
475
481
  const [complete] = await Promise.all(actions);
476
482
  return complete;
@@ -478,7 +484,7 @@ const _ActiveOverlay = class extends SpectrumElement {
478
484
  disconnectedCallback() {
479
485
  document.removeEventListener(
480
486
  "sp-update-overlays",
481
- this.updateOverlayPosition
487
+ this.setOverlayPosition
482
488
  );
483
489
  super.disconnectedCallback();
484
490
  }
@@ -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 autoUpdate,\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 private cleanup?: () => void;\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\n // force paint\n // this prevents a timing issue that can show up in tests as\n // 'Error: Timeout: Wait for decorator to become ready...'\n this.offsetWidth;\n\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 }\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 if (this.cleanup) {\n this.cleanup();\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 async placeOverlay(): Promise<void> {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n\n this.cleanup = autoUpdate(\n this.virtualTrigger || this.trigger,\n this,\n this.updateOverlayPosition\n );\n }\n\n public updateOverlayPosition = async (): Promise<void> => {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n if (this.interaction !== 'modal' && this.cleanup) {\n this.dispatchEvent(new Event('close'));\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 if (this.cleanup) {\n this.updateOverlayPosition();\n } else {\n this.placeOverlay();\n }\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 super.disconnectedCallback();\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*/\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 autoUpdate,\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 private cleanup?: () => void;\n\n protected contentAnimationPromise: Promise<boolean> = Promise.resolve(true);\n protected resolveContentAnimationPromise = (): void => {\n return;\n };\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\n this.feature();\n if (this.placement && this.placement !== 'none') {\n await this.updateOverlayPosition();\n document.addEventListener(\n 'sp-update-overlays',\n this.setOverlayPosition\n );\n }\n if (this.placement && this.placement !== 'none') {\n this.contentAnimationPromise =\n this.applyContentAnimation('sp-overlay-fade-in');\n }\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 if (this.cleanup) {\n this.cleanup();\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 async placeOverlay(): Promise<void> {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n\n this.cleanup = autoUpdate(\n this.virtualTrigger || this.trigger,\n this,\n this.updateOverlayPosition,\n {\n elementResize: false,\n }\n );\n }\n\n public updateOverlayPosition = (): void => {\n if (this.interaction !== 'modal' && this.cleanup) {\n this.dispatchEvent(new Event('close'));\n return;\n }\n this.setOverlayPosition();\n };\n\n public setOverlayPosition = 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 if (this.state !== 'active') return;\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 if (this.cleanup) {\n this.updateOverlayPosition();\n } else {\n this.placeOverlay();\n }\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 this.resolveContentAnimationPromise();\n return new Promise((resolve): void => {\n this.resolveContentAnimationPromise = () => {\n resolve(false);\n };\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 actions.push(this.contentAnimationPromise);\n if (\n typeof (this.overlayContent as SpectrumElement).updateComplete !==\n 'undefined'\n ) {\n actions.push(\n (this.overlayContent as SpectrumElement).updateComplete\n );\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.setOverlayPosition\n );\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["el"]
7
7
  }
@@ -1,16 +1,16 @@
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 y,SpectrumElement as x}from"@spectrum-web-components/base";import{ifDefined as m}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 F from"./active-overlay.css.js";import{parentOverlayOf as b}from"./overlay-utils.js";import{arrow as I,autoUpdate as L,computePosition as M,flip as C,offset as k,shift as D,size as _}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,U=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;if(this.interaction!=="modal"&&this.cleanup){this.dispatchEvent(new Event("close"));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:U(this.placement)}):C({padding:e}),n=[k({mainAxis:this.offset,crossAxis:this.skidding}),D({padding:e}),o,_({padding:e,apply:({availableWidth:l,availableHeight:r,rects:{floating:E}})=>{const f=Math.max(i,Math.floor(r)),h=E.height;this.initialHeight=!this.isConstrained&&!this.virtualTrigger?h:this.initialHeight||h,this.isConstrained=h<this.initialHeight||f<=h;const g=this.isConstrained?`${f}px`:"";Object.assign(this.style,{maxWidth:`${Math.floor(l)}px`,maxHeight:g,height:g})}})];this.overlayContentTip&&n.push(I({element:this.overlayContentTip}));const{x:w,y:O,placement:d,middlewareData:v}=await M(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(O)}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[F]}get hasModalRoot(){return!!this._modalRoot}feature(){this.contains(document.activeElement)||(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.offsetWidth,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));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),this.cleanup&&this.cleanup())}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 placeOverlay(){!this.placement||this.placement==="none"||(this.cleanup=L(this.virtualTrigger||this.trigger,this,this.updateOverlayPosition))}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.cleanup?this.updateOverlayPosition():this.placeOverlay()})}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 A=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var p=(s,a,t,e)=>{for(var i=e>1?void 0:e?R(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&&A(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 F from"./active-overlay.css.js";import{parentOverlayOf as y}from"./overlay-utils.js";import{arrow as I,autoUpdate as L,computePosition as M,flip as C,offset as D,shift as _,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,a)=>s?a&&P.states[s].on[a]||s:P.initial,U=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]},d=class extends x{constructor(){super();this.contentAnimationPromise=Promise.resolve(!0);this.resolveContentAnimationPromise=()=>{};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=()=>{if(this.interaction!=="modal"&&this.cleanup){this.dispatchEvent(new Event("close"));return}this.setOverlayPosition()};this.setOverlayPosition=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:U(this.placement)}):C({padding:e}),n=[D({mainAxis:this.offset,crossAxis:this.skidding}),_({padding:e}),o,k({padding:e,apply:({availableWidth:l,availableHeight:r,rects:{floating:E}})=>{const f=Math.max(i,Math.floor(r)),m=E.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(I({element:this.overlayContentTip}));const{x:O,y:w,placement:u,middlewareData:v}=await M(this.virtualTrigger||this.trigger,this,{placement:this.placement,middleware:n});if(Object.assign(this.style,{top:"0px",left:"0px",transform:`translate(${t(O)}px, ${t(w)}px)`}),u!==this.getAttribute("actual-placement")&&(this.setAttribute("actual-placement",u),this.overlayContent.setAttribute("placement",u)),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[F]}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(){this.hasUpdated||!this.overlayContent||!this.trigger||(this.stealOverlayContent(this.overlayContent),this.state="active",this.feature(),this.placement&&this.placement!=="none"&&(await this.updateOverlayPosition(),document.addEventListener("sp-update-overlays",this.setOverlayPosition)),this.placement&&this.placement!=="none"&&(this.contentAnimationPromise=this.applyContentAnimation("sp-overlay-fade-in")))}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),this.cleanup&&this.cleanup())}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 placeOverlay(){!this.placement||this.placement==="none"||(this.cleanup=L(this.virtualTrigger||this.trigger,this,this.updateOverlayPosition,{elementResize:!1}))}async hide(t=!0){this.state==="active"&&(this.state="hiding",t&&await this.applyContentAnimation("sp-overlay-fade-out"),this.state="dispose")}schedulePositionUpdate(){cancelAnimationFrame(this.positionAnimationFrame),this.positionAnimationFrame=requestAnimationFrame(()=>{this.cleanup?this.updateOverlayPosition():this.placeOverlay()})}onSlotChange(){this.schedulePositionUpdate()}applyContentAnimation(t){return this.placement==="none"?Promise.resolve(!0):(this.resolveContentAnimationPromise(),new Promise(e=>{this.resolveContentAnimationPromise=()=>{e(!1)};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
- theme=${m(n)}
4
- color=${m(e)}
5
- scale=${m(i)}
6
- lang=${m(o)}
3
+ theme=${h(n)}
4
+ color=${h(e)}
5
+ scale=${h(i)}
6
+ lang=${h(o)}
7
7
  part="theme"
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),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);
15
+ `;return this.hasTheme?this.renderTheme(t):t}static create(t){const e=new d;return t.content&&e.open(t),e}async getUpdateComplete(){const t=[super.getUpdateComplete(),this.stealOverlayContentPromise];t.push(this.contentAnimationPromise),typeof this.overlayContent.updateComplete!="undefined"&&t.push(this.overlayContent.updateComplete);const[e]=await Promise.all(t);return e}disconnectedCallback(){document.removeEventListener("sp-update-overlays",this.setOverlayPosition),super.disconnectedCallback()}};export let ActiveOverlay=d;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
@@ -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.js';\nimport {\n OverlayOpenCloseDetail,\n OverlayOpenDetail,\n Placement,\n TriggerInteractions,\n} from './overlay-types.js';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport {\n arrow,\n autoUpdate,\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 private cleanup?: () => void;\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\n // force paint\n // this prevents a timing issue that can show up in tests as\n // 'Error: Timeout: Wait for decorator to become ready...'\n this.offsetWidth;\n\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 }\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 if (this.cleanup) {\n this.cleanup();\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 async placeOverlay(): Promise<void> {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n\n this.cleanup = autoUpdate(\n this.virtualTrigger || this.trigger,\n this,\n this.updateOverlayPosition\n );\n }\n\n public updateOverlayPosition = async (): Promise<void> => {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n if (this.interaction !== 'modal' && this.cleanup) {\n this.dispatchEvent(new Event('close'));\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 if (this.cleanup) {\n this.updateOverlayPosition();\n } else {\n this.placeOverlay();\n }\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 super.disconnectedCallback();\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["html", "SpectrumElement", "ifDefined", "property", "reparentChildren", "firstFocusableIn", "styles", "parentOverlayOf", "arrow", "autoUpdate", "computePosition", "flip", "offset", "shift", "size", "stateMachine", "stateTransition", "state", "event", "getFallbackPlacements", "placement", "_a", "_ActiveOverlay", "roundByDPR", "num", "dpr", "REQUIRED_DISTANCE_TO_EDGE", "MIN_OVERLAY_HEIGHT", "flipMiddleware", "middleware", "availableWidth", "availableHeight", "floating", "maxHeight", "actualHeight", "appliedHeight", "x", "y", "middlewareData", "arrowX", "arrowY", "code", "shiftKey", "res", "nextState", "firstFocusable", "activeElement", "parentOverlay", "nextOverlayInteraction", "actions", "lifecycleCallback", "openDetail", "detail", "element", "el", "slotName", "animated", "animation", "resolve", "contents", "doneHandler", "content", "color", "scale", "lang", "theme", "details", "overlay", "complete", "__decorateClass"]
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.js';\nimport {\n OverlayOpenCloseDetail,\n OverlayOpenDetail,\n Placement,\n TriggerInteractions,\n} from './overlay-types.js';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport {\n arrow,\n autoUpdate,\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 private cleanup?: () => void;\n\n protected contentAnimationPromise: Promise<boolean> = Promise.resolve(true);\n protected resolveContentAnimationPromise = (): void => {\n return;\n };\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\n this.feature();\n if (this.placement && this.placement !== 'none') {\n await this.updateOverlayPosition();\n document.addEventListener(\n 'sp-update-overlays',\n this.setOverlayPosition\n );\n }\n if (this.placement && this.placement !== 'none') {\n this.contentAnimationPromise =\n this.applyContentAnimation('sp-overlay-fade-in');\n }\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 if (this.cleanup) {\n this.cleanup();\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 async placeOverlay(): Promise<void> {\n if (!this.placement || this.placement === 'none') {\n return;\n }\n\n this.cleanup = autoUpdate(\n this.virtualTrigger || this.trigger,\n this,\n this.updateOverlayPosition,\n {\n elementResize: false,\n }\n );\n }\n\n public updateOverlayPosition = (): void => {\n if (this.interaction !== 'modal' && this.cleanup) {\n this.dispatchEvent(new Event('close'));\n return;\n }\n this.setOverlayPosition();\n };\n\n public setOverlayPosition = 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 if (this.state !== 'active') return;\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 if (this.cleanup) {\n this.updateOverlayPosition();\n } else {\n this.placeOverlay();\n }\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 this.resolveContentAnimationPromise();\n return new Promise((resolve): void => {\n this.resolveContentAnimationPromise = () => {\n resolve(false);\n };\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 actions.push(this.contentAnimationPromise);\n if (\n typeof (this.overlayContent as SpectrumElement).updateComplete !==\n 'undefined'\n ) {\n actions.push(\n (this.overlayContent as SpectrumElement).updateComplete\n );\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.setOverlayPosition\n );\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["html", "SpectrumElement", "ifDefined", "property", "reparentChildren", "firstFocusableIn", "styles", "parentOverlayOf", "arrow", "autoUpdate", "computePosition", "flip", "offset", "shift", "size", "stateMachine", "stateTransition", "state", "event", "getFallbackPlacements", "placement", "_a", "_ActiveOverlay", "roundByDPR", "num", "dpr", "REQUIRED_DISTANCE_TO_EDGE", "MIN_OVERLAY_HEIGHT", "flipMiddleware", "middleware", "availableWidth", "availableHeight", "floating", "maxHeight", "actualHeight", "appliedHeight", "x", "y", "middlewareData", "arrowX", "arrowY", "code", "shiftKey", "res", "nextState", "firstFocusable", "activeElement", "parentOverlay", "nextOverlayInteraction", "lifecycleCallback", "openDetail", "detail", "element", "el", "slotName", "animated", "animation", "resolve", "contents", "doneHandler", "content", "color", "scale", "lang", "theme", "details", "overlay", "actions", "complete", "__decorateClass"]
7
7
  }