@spectrum-web-components/overlay 0.33.3-overlay.65 → 0.33.3-overlay.66

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.
@@ -47,9 +47,9 @@
47
47
  },
48
48
  {
49
49
  "kind": "js",
50
- "name": "OverlayOptions",
50
+ "name": "OverlayOptionsV1",
51
51
  "declaration": {
52
- "name": "OverlayOptions",
52
+ "name": "OverlayOptionsV1",
53
53
  "module": "sync/overlay-trigger.ts"
54
54
  }
55
55
  },
@@ -104,7 +104,7 @@
104
104
  {
105
105
  "name": "options",
106
106
  "type": {
107
- "text": "OverlayOptions"
107
+ "text": "OverlayOptionsV1"
108
108
  }
109
109
  }
110
110
  ]
@@ -130,7 +130,7 @@
130
130
  "name": "options",
131
131
  "optional": true,
132
132
  "type": {
133
- "text": "OverlayOptionsV2"
133
+ "text": "OverlayOptions"
134
134
  }
135
135
  }
136
136
  ]
@@ -155,7 +155,7 @@
155
155
  {
156
156
  "name": "interactionOrOptions",
157
157
  "type": {
158
- "text": "| TriggerInteractionsV1\n | OverlayOptionsV2\n | undefined"
158
+ "text": "| TriggerInteractionsV1\n | OverlayOptions\n | undefined"
159
159
  }
160
160
  },
161
161
  {
@@ -169,7 +169,7 @@
169
169
  "name": "options",
170
170
  "optional": true,
171
171
  "type": {
172
- "text": "OverlayOptions"
172
+ "text": "OverlayOptionsV1"
173
173
  }
174
174
  }
175
175
  ]
@@ -1885,7 +1885,7 @@
1885
1885
  "kind": "field",
1886
1886
  "name": "options",
1887
1887
  "type": {
1888
- "text": "OverlayOptions"
1888
+ "text": "OverlayOptionsV1"
1889
1889
  },
1890
1890
  "privacy": "private"
1891
1891
  },
@@ -1924,7 +1924,7 @@
1924
1924
  "name": "options",
1925
1925
  "default": "this.options",
1926
1926
  "type": {
1927
- "text": "OverlayOptions"
1927
+ "text": "OverlayOptionsV1"
1928
1928
  }
1929
1929
  }
1930
1930
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/overlay",
3
- "version": "0.33.3-overlay.65+e3bf25c5c",
3
+ "version": "0.33.3-overlay.66+30e96d5ea",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -127,11 +127,11 @@
127
127
  ],
128
128
  "dependencies": {
129
129
  "@floating-ui/dom": "1.2.1",
130
- "@spectrum-web-components/action-button": "^0.33.3-overlay.65+e3bf25c5c",
131
- "@spectrum-web-components/base": "^0.33.3-overlay.65+e3bf25c5c",
132
- "@spectrum-web-components/reactive-controllers": "^0.33.3-overlay.65+e3bf25c5c",
133
- "@spectrum-web-components/shared": "^0.33.3-overlay.65+e3bf25c5c",
134
- "@spectrum-web-components/theme": "^0.33.3-overlay.65+e3bf25c5c"
130
+ "@spectrum-web-components/action-button": "^0.33.3-overlay.66+30e96d5ea",
131
+ "@spectrum-web-components/base": "^0.33.3-overlay.66+30e96d5ea",
132
+ "@spectrum-web-components/reactive-controllers": "^0.33.3-overlay.66+30e96d5ea",
133
+ "@spectrum-web-components/shared": "^0.33.3-overlay.66+30e96d5ea",
134
+ "@spectrum-web-components/theme": "^0.33.3-overlay.66+30e96d5ea"
135
135
  },
136
136
  "types": "./src/index.d.ts",
137
137
  "customElements": "custom-elements.json",
@@ -143,5 +143,5 @@
143
143
  "./stories/overlay-story-components.js",
144
144
  "./**/*.dev.js"
145
145
  ],
146
- "gitHead": "e3bf25c5c6676cb5ade2ca9ea633540cb08aee23"
146
+ "gitHead": "30e96d5eaed31b7b2af916d78cabccb722889fe3"
147
147
  }
package/src/Overlay.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import { OverlayBase } from './OverlayBase.js';
2
- import type { OverlayOptions, TriggerInteractionsV1 } from './overlay-types.js';
2
+ import type { OverlayOptionsV1, TriggerInteractionsV1 } from './overlay-types.js';
3
3
  import { Placement } from '@floating-ui/dom/src/types.js';
4
4
  import { VirtualTrigger } from './VirtualTrigger.js';
5
5
  declare let OverlayFeatures: typeof OverlayBase & {
6
6
  new (...args: any[]): import("lit").ReactiveElement;
7
7
  prototype: import("lit").ReactiveElement;
8
8
  };
9
- declare type OverlayOptionsV2 = {
9
+ declare type OverlayOptions = {
10
10
  delayed?: boolean;
11
11
  notImmediatelyClosable?: boolean;
12
12
  offset?: number | [number, number];
@@ -23,7 +23,7 @@ declare type OverlayOptionsV2 = {
23
23
  */
24
24
  export declare class Overlay extends OverlayFeatures {
25
25
  static update(): void;
26
- static open(target: HTMLElement, interaction: TriggerInteractionsV1, content: HTMLElement, options: OverlayOptions): Promise<() => void>;
27
- static open(content: HTMLElement, options?: OverlayOptionsV2): Promise<Overlay>;
26
+ static open(target: HTMLElement, interaction: TriggerInteractionsV1, content: HTMLElement, options: OverlayOptionsV1): Promise<() => void>;
27
+ static open(content: HTMLElement, options?: OverlayOptions): Promise<Overlay>;
28
28
  }
29
29
  export {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Overlay.ts"],
4
- "sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { noop, OverlayBase } from './OverlayBase.dev.js'\nimport { OverlayDialog } from './OverlayDialog.dev.js'\nimport { OverlayPopover } from './OverlayPopover.dev.js'\nimport { OverlayNoPopover } from './OverlayNoPopover.dev.js'\nimport type { OverlayOptions, TriggerInteractionsV1 } from './overlay-types.dev.js'\nimport { Placement } from '@floating-ui/dom/src/types.js';\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { reparentChildren } from '@spectrum-web-components/shared';\n\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nlet OverlayFeatures = OverlayDialog(OverlayBase);\nif (supportsPopover) {\n OverlayFeatures = OverlayPopover(OverlayFeatures);\n} else {\n OverlayFeatures = OverlayNoPopover(OverlayFeatures);\n}\n\ntype OverlayOptionsV2 = {\n delayed?: boolean;\n notImmediatelyClosable?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement?: Placement;\n receivesFocus?: 'auto' | 'true' | 'false';\n trigger?: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\n/**\n * @element sp-overlay\n *\n * @fires sp-opened - announces that an overlay has completed any entry animations\n * @fires sp-closed - announce that an overlay has compelted any exit animations\n */\nexport class Overlay extends OverlayFeatures {\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n target: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptionsV2\n ): Promise<Overlay>;\n public static async open(\n targetOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptionsV2\n | undefined,\n content?: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || targetOrContent;\n const overlay = new Overlay();\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n let restored = false;\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n if (v2) {\n const options = interactionOrOptions as OverlayOptionsV2;\n overlay.append(overlayContent);\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n });\n return overlay;\n } else if (overlayContent && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || target;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n // This is super dirty...find a better way.\n // Maybe imperative open should go _at the end_ of everything?\n // Having an option is likely useful.\n // Make imperative overlays less useful?\n // Delete the imperative approach to an overlay?\n // Possibly the giving all of the responsiblities to the user is the best path.\n const parent = target.getRootNode() as Document;\n if (parent === document) {\n target.insertAdjacentElement('afterend', overlay);\n } else {\n parent.append(overlay);\n }\n await new Promise<void>((res) =>\n requestAnimationFrame(() => requestAnimationFrame(() => res()))\n );\n overlay.open = true;\n return overlay.dispose;\n }\n /* c8 ignore next 1 */\n return overlay;\n }\n}\n"],
5
- "mappings": ";AAWA,SAAS,MAAM,mBAAmB;AAClC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAIjC,SAAS,wBAAwB;AAEjC,MAAM,kBAAkB,iBAAiB,SAAS,cAAc,KAAK;AAErE,IAAI,kBAAkB,cAAc,WAAW;AAC/C,IAAI,iBAAiB;AACjB,oBAAkB,eAAe,eAAe;AACpD,OAAO;AACH,oBAAkB,iBAAiB,eAAe;AACtD;AAkBO,aAAM,gBAAgB,gBAAgB;AAAA,EACzC,OAAc,SAAe;AACzB,UAAM,qBAAqB,IAAI,YAAY,sBAAsB;AAAA,MAC7D,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,IAChB,CAAC;AACD,aAAS,cAAc,kBAAkB;AAAA,EAC7C;AAAA,EAYA,aAAoB,KAChB,iBACA,sBAIA,SACA,SAC+B;AAzEvC;AA0EQ,UAAM,KAAK,UAAU,WAAW;AAChC,UAAM,iBAAiB,WAAW;AAClC,UAAM,UAAU,IAAI,QAAQ;AAC5B,YAAQ,UAAU,MAAM;AACpB,cAAQ,iBAAiB,aAAa,MAAM;AACxC,YAAI,CAAC,UAAU;AACX,yBAAe;AACf,qBAAW;AAAA,QACf;AACA,8BAAsB,MAAM;AACxB,kBAAQ,OAAO;AAAA,QACnB,CAAC;AAAA,MACL,CAAC;AACD,cAAQ,OAAO;AACf,cAAQ,UAAU;AAAA,IACtB;AACA,QAAI,WAAW;AACf,UAAM,iBAAiB,iBAAiB,CAAC,cAAc,GAAG,SAAS;AAAA,MAC/D,UAAU;AAAA,MACV,iBAAiB,CAAC,OAAO;AACrB,cAAM,OAAO,GAAG;AAChB,WAAG,gBAAgB,MAAM;AACzB,eAAO,MAAM;AACT,aAAG,OAAO;AAAA,QACd;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,QAAI,IAAI;AACJ,YAAMA,WAAU;AAChB,cAAQ,OAAO,cAAc;AAC7B,cAAQ,iBAAgB,KAAAA,SAAQ,kBAAR,YAAyB;AACjD,cAAQ,iBAAiBA,SAAQ,WAAW;AAC5C,cAAQ,OAAOA,SAAQ,QAAQ;AAC/B,cAAQ,SAASA,SAAQ,UAAU;AACnC,cAAQ,YAAYA,SAAQ;AAC5B,cAAQ,mBAAmB,CAAC,CAACA,SAAQ;AACrC,4BAAsB,MAAM;AACxB,8BAAsB,MAAM;AAExB,kBAAQ,OAAO;AAAA,QACnB,CAAC;AAAA,MACL,CAAC;AACD,aAAO;AAAA,IACX,WAAW,kBAAkB,SAAS;AAClC,YAAM,SAAS;AACf,YAAM,cAAc;AACpB,cAAQ,iBAAgB,aAAQ,kBAAR,YAAyB;AACjD,cAAQ,iBAAiB,QAAQ,kBAAkB;AACnD,cAAQ,OACJ,gBAAgB,UACV,UACA,gBAAgB,UAChB,SACA;AACV,cAAQ,UAAS,aAAQ,WAAR,YAAkB;AACnC,cAAQ,YAAY,QAAQ;AAC5B,cAAQ,mBAAmB,CAAC,CAAC,QAAQ;AAOrC,YAAM,SAAS,OAAO,YAAY;AAClC,UAAI,WAAW,UAAU;AACrB,eAAO,sBAAsB,YAAY,OAAO;AAAA,MACpD,OAAO;AACH,eAAO,OAAO,OAAO;AAAA,MACzB;AACA,YAAM,IAAI;AAAA,QAAc,CAAC,QACrB,sBAAsB,MAAM,sBAAsB,MAAM,IAAI,CAAC,CAAC;AAAA,MAClE;AACA,cAAQ,OAAO;AACf,aAAO,QAAQ;AAAA,IACnB;AAEA,WAAO;AAAA,EACX;AACJ;",
4
+ "sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { noop, OverlayBase } from './OverlayBase.dev.js'\nimport { OverlayDialog } from './OverlayDialog.dev.js'\nimport { OverlayPopover } from './OverlayPopover.dev.js'\nimport { OverlayNoPopover } from './OverlayNoPopover.dev.js'\nimport type {\n OverlayOptionsV1,\n TriggerInteractionsV1,\n} from './overlay-types.dev.js'\nimport { Placement } from '@floating-ui/dom/src/types.js';\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { reparentChildren } from '@spectrum-web-components/shared';\n\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nlet OverlayFeatures = OverlayDialog(OverlayBase);\nif (supportsPopover) {\n OverlayFeatures = OverlayPopover(OverlayFeatures);\n} else {\n OverlayFeatures = OverlayNoPopover(OverlayFeatures);\n}\n\ntype OverlayOptions = {\n delayed?: boolean;\n notImmediatelyClosable?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement?: Placement;\n receivesFocus?: 'auto' | 'true' | 'false';\n trigger?: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\n/**\n * @element sp-overlay\n *\n * @fires sp-opened - announces that an overlay has completed any entry animations\n * @fires sp-closed - announce that an overlay has compelted any exit animations\n */\nexport class Overlay extends OverlayFeatures {\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n target: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n options: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n targetOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n options?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || targetOrContent;\n const overlay = new Overlay();\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n let restored = false;\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n if (v2) {\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n });\n return overlay;\n } else if (overlayContent && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || target;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n // This is super dirty...find a better way.\n // Maybe imperative open should go _at the end_ of everything?\n // Having an option is likely useful.\n // Make imperative overlays less useful?\n // Delete the imperative approach to an overlay?\n // Possibly the giving all of the responsiblities to the user is the best path.\n const parent = target.getRootNode() as Document;\n if (parent === document) {\n target.insertAdjacentElement('afterend', overlay);\n } else {\n parent.append(overlay);\n }\n await new Promise<void>((res) =>\n requestAnimationFrame(() => requestAnimationFrame(() => res()))\n );\n overlay.open = true;\n return overlay.dispose;\n }\n /* c8 ignore next 1 */\n return overlay;\n }\n}\n"],
5
+ "mappings": ";AAWA,SAAS,MAAM,mBAAmB;AAClC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAOjC,SAAS,wBAAwB;AAEjC,MAAM,kBAAkB,iBAAiB,SAAS,cAAc,KAAK;AAErE,IAAI,kBAAkB,cAAc,WAAW;AAC/C,IAAI,iBAAiB;AACjB,oBAAkB,eAAe,eAAe;AACpD,OAAO;AACH,oBAAkB,iBAAiB,eAAe;AACtD;AAkBO,aAAM,gBAAgB,gBAAgB;AAAA,EACzC,OAAc,SAAe;AACzB,UAAM,qBAAqB,IAAI,YAAY,sBAAsB;AAAA,MAC7D,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,IAChB,CAAC;AACD,aAAS,cAAc,kBAAkB;AAAA,EAC7C;AAAA,EAYA,aAAoB,KAChB,iBACA,sBAIA,SACA,SAC+B;AA5EvC;AA6EQ,UAAM,KAAK,UAAU,WAAW;AAChC,UAAM,iBAAiB,WAAW;AAClC,UAAM,UAAU,IAAI,QAAQ;AAC5B,YAAQ,UAAU,MAAM;AACpB,cAAQ,iBAAiB,aAAa,MAAM;AACxC,YAAI,CAAC,UAAU;AACX,yBAAe;AACf,qBAAW;AAAA,QACf;AACA,8BAAsB,MAAM;AACxB,kBAAQ,OAAO;AAAA,QACnB,CAAC;AAAA,MACL,CAAC;AACD,cAAQ,OAAO;AACf,cAAQ,UAAU;AAAA,IACtB;AACA,QAAI,WAAW;AACf,UAAM,iBAAiB,iBAAiB,CAAC,cAAc,GAAG,SAAS;AAAA,MAC/D,UAAU;AAAA,MACV,iBAAiB,CAAC,OAAO;AACrB,cAAM,OAAO,GAAG;AAChB,WAAG,gBAAgB,MAAM;AACzB,eAAO,MAAM;AACT,aAAG,OAAO;AAAA,QACd;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,QAAI,IAAI;AACJ,YAAMA,WAAU;AAChB,cAAQ,OAAO,cAAc;AAC7B,cAAQ,iBAAgB,KAAAA,SAAQ,kBAAR,YAAyB;AACjD,cAAQ,iBAAiBA,SAAQ,WAAW;AAC5C,cAAQ,OAAOA,SAAQ,QAAQ;AAC/B,cAAQ,SAASA,SAAQ,UAAU;AACnC,cAAQ,YAAYA,SAAQ;AAC5B,cAAQ,mBAAmB,CAAC,CAACA,SAAQ;AACrC,4BAAsB,MAAM;AACxB,8BAAsB,MAAM;AAExB,kBAAQ,OAAO;AAAA,QACnB,CAAC;AAAA,MACL,CAAC;AACD,aAAO;AAAA,IACX,WAAW,kBAAkB,SAAS;AAClC,YAAM,SAAS;AACf,YAAM,cAAc;AACpB,cAAQ,iBAAgB,aAAQ,kBAAR,YAAyB;AACjD,cAAQ,iBAAiB,QAAQ,kBAAkB;AACnD,cAAQ,OACJ,gBAAgB,UACV,UACA,gBAAgB,UAChB,SACA;AACV,cAAQ,UAAS,aAAQ,WAAR,YAAkB;AACnC,cAAQ,YAAY,QAAQ;AAC5B,cAAQ,mBAAmB,CAAC,CAAC,QAAQ;AAOrC,YAAM,SAAS,OAAO,YAAY;AAClC,UAAI,WAAW,UAAU;AACrB,eAAO,sBAAsB,YAAY,OAAO;AAAA,MACpD,OAAO;AACH,eAAO,OAAO,OAAO;AAAA,MACzB;AACA,YAAM,IAAI;AAAA,QAAc,CAAC,QACrB,sBAAsB,MAAM,sBAAsB,MAAM,IAAI,CAAC,CAAC;AAAA,MAClE;AACA,cAAQ,OAAO;AACf,aAAO,QAAQ;AAAA,IACnB;AAEA,WAAO;AAAA,EACX;AACJ;",
6
6
  "names": ["options"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["Overlay.ts"],
4
- "sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { noop, OverlayBase } from './OverlayBase.js';\nimport { OverlayDialog } from './OverlayDialog.js';\nimport { OverlayPopover } from './OverlayPopover.js';\nimport { OverlayNoPopover } from './OverlayNoPopover.js';\nimport type { OverlayOptions, TriggerInteractionsV1 } from './overlay-types.js';\nimport { Placement } from '@floating-ui/dom/src/types.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\nimport { reparentChildren } from '@spectrum-web-components/shared';\n\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nlet OverlayFeatures = OverlayDialog(OverlayBase);\nif (supportsPopover) {\n OverlayFeatures = OverlayPopover(OverlayFeatures);\n} else {\n OverlayFeatures = OverlayNoPopover(OverlayFeatures);\n}\n\ntype OverlayOptionsV2 = {\n delayed?: boolean;\n notImmediatelyClosable?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement?: Placement;\n receivesFocus?: 'auto' | 'true' | 'false';\n trigger?: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\n/**\n * @element sp-overlay\n *\n * @fires sp-opened - announces that an overlay has completed any entry animations\n * @fires sp-closed - announce that an overlay has compelted any exit animations\n */\nexport class Overlay extends OverlayFeatures {\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n target: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptionsV2\n ): Promise<Overlay>;\n public static async open(\n targetOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptionsV2\n | undefined,\n content?: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || targetOrContent;\n const overlay = new Overlay();\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n let restored = false;\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n if (v2) {\n const options = interactionOrOptions as OverlayOptionsV2;\n overlay.append(overlayContent);\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n });\n return overlay;\n } else if (overlayContent && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || target;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n // This is super dirty...find a better way.\n // Maybe imperative open should go _at the end_ of everything?\n // Having an option is likely useful.\n // Make imperative overlays less useful?\n // Delete the imperative approach to an overlay?\n // Possibly the giving all of the responsiblities to the user is the best path.\n const parent = target.getRootNode() as Document;\n if (parent === document) {\n target.insertAdjacentElement('afterend', overlay);\n } else {\n parent.append(overlay);\n }\n await new Promise<void>((res) =>\n requestAnimationFrame(() => requestAnimationFrame(() => res()))\n );\n overlay.open = true;\n return overlay.dispose;\n }\n /* c8 ignore next 1 */\n return overlay;\n }\n}\n"],
5
- "mappings": "aAWA,OAAS,QAAAA,EAAM,eAAAC,MAAmB,mBAClC,OAAS,iBAAAC,MAAqB,qBAC9B,OAAS,kBAAAC,MAAsB,sBAC/B,OAAS,oBAAAC,MAAwB,wBAIjC,OAAS,oBAAAC,MAAwB,kCAEjC,MAAMC,EAAkB,gBAAiB,SAAS,cAAc,KAAK,EAErE,IAAIC,EAAkBL,EAAcD,CAAW,EAC3CK,EACAC,EAAkBJ,EAAeI,CAAe,EAEhDA,EAAkBH,EAAiBG,CAAe,EAmB/C,aAAM,gBAAgBA,CAAgB,CACzC,OAAc,QAAe,CACzB,MAAMC,EAAqB,IAAI,YAAY,qBAAsB,CAC7D,QAAS,GACT,SAAU,GACV,WAAY,EAChB,CAAC,EACD,SAAS,cAAcA,CAAkB,CAC7C,CAYA,aAAoB,KAChBC,EACAC,EAIAC,EACAC,EAC+B,CAzEvC,IAAAC,EAAAC,EAAAC,EA0EQ,MAAMC,EAAK,UAAU,SAAW,EAC1BC,EAAiBN,GAAWF,EAC5BS,EAAU,IAAI,QACpBA,EAAQ,QAAU,IAAM,CACpBA,EAAQ,iBAAiB,YAAa,IAAM,CACnCC,IACDC,EAAe,EACfD,EAAW,IAEf,sBAAsB,IAAM,CACxBD,EAAQ,OAAO,CACnB,CAAC,CACL,CAAC,EACDA,EAAQ,KAAO,GACfA,EAAQ,QAAUlB,CACtB,EACA,IAAImB,EAAW,GACf,MAAMC,EAAiBf,EAAiB,CAACY,CAAc,EAAGC,EAAS,CAC/D,SAAU,YACV,gBAAkBG,GAAO,CACrB,MAAMC,EAAOD,EAAG,KAChB,OAAAA,EAAG,gBAAgB,MAAM,EAClB,IAAM,CACTA,EAAG,KAAOC,CACd,CACJ,CACJ,CAAC,EACD,GAAIN,EAAI,CACJ,MAAMJ,EAAUF,EAChB,OAAAQ,EAAQ,OAAOD,CAAc,EAC7BC,EAAQ,eAAgBL,EAAAD,EAAQ,gBAAR,KAAAC,EAAyB,OACjDK,EAAQ,eAAiBN,EAAQ,SAAW,KAC5CM,EAAQ,KAAON,EAAQ,MAAQ,QAC/BM,EAAQ,OAASN,EAAQ,QAAU,EACnCM,EAAQ,UAAYN,EAAQ,UAC5BM,EAAQ,iBAAmB,CAAC,CAACN,EAAQ,uBACrC,sBAAsB,IAAM,CACxB,sBAAsB,IAAM,CAExBM,EAAQ,KAAO,EACnB,CAAC,CACL,CAAC,EACMA,UACAD,GAAkBL,EAAS,CAClC,MAAMW,EAASd,EACTe,EAAcd,EACpBQ,EAAQ,eAAgBJ,EAAAF,EAAQ,gBAAR,KAAAE,EAAyB,OACjDI,EAAQ,eAAiBN,EAAQ,gBAAkBW,EACnDL,EAAQ,KACJM,IAAgB,QACV,QACAA,IAAgB,QAChB,OACA,OACVN,EAAQ,QAASH,EAAAH,EAAQ,SAAR,KAAAG,EAAkB,EACnCG,EAAQ,UAAYN,EAAQ,UAC5BM,EAAQ,iBAAmB,CAAC,CAACN,EAAQ,uBAOrC,MAAMa,EAASF,EAAO,YAAY,EAClC,OAAIE,IAAW,SACXF,EAAO,sBAAsB,WAAYL,CAAO,EAEhDO,EAAO,OAAOP,CAAO,EAEzB,MAAM,IAAI,QAAeQ,GACrB,sBAAsB,IAAM,sBAAsB,IAAMA,EAAI,CAAC,CAAC,CAClE,EACAR,EAAQ,KAAO,GACRA,EAAQ,QAGnB,OAAOA,CACX,CACJ",
4
+ "sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { noop, OverlayBase } from './OverlayBase.js';\nimport { OverlayDialog } from './OverlayDialog.js';\nimport { OverlayPopover } from './OverlayPopover.js';\nimport { OverlayNoPopover } from './OverlayNoPopover.js';\nimport type {\n OverlayOptionsV1,\n TriggerInteractionsV1,\n} from './overlay-types.js';\nimport { Placement } from '@floating-ui/dom/src/types.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\nimport { reparentChildren } from '@spectrum-web-components/shared';\n\nconst supportsPopover = 'showPopover' in document.createElement('div');\n\nlet OverlayFeatures = OverlayDialog(OverlayBase);\nif (supportsPopover) {\n OverlayFeatures = OverlayPopover(OverlayFeatures);\n} else {\n OverlayFeatures = OverlayNoPopover(OverlayFeatures);\n}\n\ntype OverlayOptions = {\n delayed?: boolean;\n notImmediatelyClosable?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement?: Placement;\n receivesFocus?: 'auto' | 'true' | 'false';\n trigger?: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\n/**\n * @element sp-overlay\n *\n * @fires sp-opened - announces that an overlay has completed any entry animations\n * @fires sp-closed - announce that an overlay has compelted any exit animations\n */\nexport class Overlay extends OverlayFeatures {\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n public static async open(\n target: HTMLElement,\n interaction: TriggerInteractionsV1,\n content: HTMLElement,\n options: OverlayOptionsV1\n ): Promise<() => void>;\n public static async open(\n content: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay>;\n public static async open(\n targetOrContent: HTMLElement,\n interactionOrOptions:\n | TriggerInteractionsV1\n | OverlayOptions\n | undefined,\n content?: HTMLElement,\n options?: OverlayOptionsV1\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlayContent = content || targetOrContent;\n const overlay = new Overlay();\n overlay.dispose = () => {\n overlay.addEventListener('sp-closed', () => {\n if (!restored) {\n restoreContent();\n restored = true;\n }\n requestAnimationFrame(() => {\n overlay.remove();\n });\n });\n overlay.open = false;\n overlay.dispose = noop;\n };\n let restored = false;\n const restoreContent = reparentChildren([overlayContent], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n el.removeAttribute('slot');\n return () => {\n el.slot = slot;\n };\n },\n });\n if (v2) {\n const options = interactionOrOptions as OverlayOptions;\n overlay.append(overlayContent);\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n });\n });\n return overlay;\n } else if (overlayContent && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n overlay.receivesFocus = options.receivesFocus ?? 'auto';\n overlay.triggerElement = options.virtualTrigger || target;\n overlay.type =\n interaction === 'modal'\n ? 'modal'\n : interaction === 'hover'\n ? 'hint'\n : 'auto';\n overlay.offset = options.offset ?? 6;\n overlay.placement = options.placement;\n overlay.willPreventClose = !!options.notImmediatelyClosable;\n // This is super dirty...find a better way.\n // Maybe imperative open should go _at the end_ of everything?\n // Having an option is likely useful.\n // Make imperative overlays less useful?\n // Delete the imperative approach to an overlay?\n // Possibly the giving all of the responsiblities to the user is the best path.\n const parent = target.getRootNode() as Document;\n if (parent === document) {\n target.insertAdjacentElement('afterend', overlay);\n } else {\n parent.append(overlay);\n }\n await new Promise<void>((res) =>\n requestAnimationFrame(() => requestAnimationFrame(() => res()))\n );\n overlay.open = true;\n return overlay.dispose;\n }\n /* c8 ignore next 1 */\n return overlay;\n }\n}\n"],
5
+ "mappings": "aAWA,OAAS,QAAAA,EAAM,eAAAC,MAAmB,mBAClC,OAAS,iBAAAC,MAAqB,qBAC9B,OAAS,kBAAAC,MAAsB,sBAC/B,OAAS,oBAAAC,MAAwB,wBAOjC,OAAS,oBAAAC,MAAwB,kCAEjC,MAAMC,EAAkB,gBAAiB,SAAS,cAAc,KAAK,EAErE,IAAIC,EAAkBL,EAAcD,CAAW,EAC3CK,EACAC,EAAkBJ,EAAeI,CAAe,EAEhDA,EAAkBH,EAAiBG,CAAe,EAmB/C,aAAM,gBAAgBA,CAAgB,CACzC,OAAc,QAAe,CACzB,MAAMC,EAAqB,IAAI,YAAY,qBAAsB,CAC7D,QAAS,GACT,SAAU,GACV,WAAY,EAChB,CAAC,EACD,SAAS,cAAcA,CAAkB,CAC7C,CAYA,aAAoB,KAChBC,EACAC,EAIAC,EACAC,EAC+B,CA5EvC,IAAAC,EAAAC,EAAAC,EA6EQ,MAAMC,EAAK,UAAU,SAAW,EAC1BC,EAAiBN,GAAWF,EAC5BS,EAAU,IAAI,QACpBA,EAAQ,QAAU,IAAM,CACpBA,EAAQ,iBAAiB,YAAa,IAAM,CACnCC,IACDC,EAAe,EACfD,EAAW,IAEf,sBAAsB,IAAM,CACxBD,EAAQ,OAAO,CACnB,CAAC,CACL,CAAC,EACDA,EAAQ,KAAO,GACfA,EAAQ,QAAUlB,CACtB,EACA,IAAImB,EAAW,GACf,MAAMC,EAAiBf,EAAiB,CAACY,CAAc,EAAGC,EAAS,CAC/D,SAAU,YACV,gBAAkBG,GAAO,CACrB,MAAMC,EAAOD,EAAG,KAChB,OAAAA,EAAG,gBAAgB,MAAM,EAClB,IAAM,CACTA,EAAG,KAAOC,CACd,CACJ,CACJ,CAAC,EACD,GAAIN,EAAI,CACJ,MAAMJ,EAAUF,EAChB,OAAAQ,EAAQ,OAAOD,CAAc,EAC7BC,EAAQ,eAAgBL,EAAAD,EAAQ,gBAAR,KAAAC,EAAyB,OACjDK,EAAQ,eAAiBN,EAAQ,SAAW,KAC5CM,EAAQ,KAAON,EAAQ,MAAQ,QAC/BM,EAAQ,OAASN,EAAQ,QAAU,EACnCM,EAAQ,UAAYN,EAAQ,UAC5BM,EAAQ,iBAAmB,CAAC,CAACN,EAAQ,uBACrC,sBAAsB,IAAM,CACxB,sBAAsB,IAAM,CAExBM,EAAQ,KAAO,EACnB,CAAC,CACL,CAAC,EACMA,UACAD,GAAkBL,EAAS,CAClC,MAAMW,EAASd,EACTe,EAAcd,EACpBQ,EAAQ,eAAgBJ,EAAAF,EAAQ,gBAAR,KAAAE,EAAyB,OACjDI,EAAQ,eAAiBN,EAAQ,gBAAkBW,EACnDL,EAAQ,KACJM,IAAgB,QACV,QACAA,IAAgB,QAChB,OACA,OACVN,EAAQ,QAASH,EAAAH,EAAQ,SAAR,KAAAG,EAAkB,EACnCG,EAAQ,UAAYN,EAAQ,UAC5BM,EAAQ,iBAAmB,CAAC,CAACN,EAAQ,uBAOrC,MAAMa,EAASF,EAAO,YAAY,EAClC,OAAIE,IAAW,SACXF,EAAO,sBAAsB,WAAYL,CAAO,EAEhDO,EAAO,OAAOP,CAAO,EAEzB,MAAM,IAAI,QAAeQ,GACrB,sBAAsB,IAAM,sBAAsB,IAAMA,EAAI,CAAC,CAAC,CAClE,EACAR,EAAQ,KAAO,GACRA,EAAQ,QAGnB,OAAOA,CACX,CACJ",
6
6
  "names": ["noop", "OverlayBase", "OverlayDialog", "OverlayPopover", "OverlayNoPopover", "reparentChildren", "supportsPopover", "OverlayFeatures", "overlayUpdateEvent", "targetOrContent", "interactionOrOptions", "content", "options", "_a", "_b", "_c", "v2", "overlayContent", "overlay", "restored", "restoreContent", "el", "slot", "target", "interaction", "parent", "res"]
7
7
  }
@@ -2,7 +2,7 @@ import type { ReactiveController, ReactiveElement } from 'lit';
2
2
  import { Placement } from '@floating-ui/dom';
3
3
  import type { VirtualTrigger } from './VirtualTrigger.js';
4
4
  import type { OpenableElement } from './OverlayBase.js';
5
- declare type OverlayOptions = {
5
+ declare type OverlayOptionsV1 = {
6
6
  abortPromise?: Promise<boolean>;
7
7
  delayed?: boolean;
8
8
  offset?: number | [number, number];
@@ -25,7 +25,7 @@ export declare class PlacementController implements ReactiveController {
25
25
  constructor(host: ReactiveElement & {
26
26
  elements: OpenableElement[];
27
27
  });
28
- placeOverlay(target?: HTMLElement, options?: OverlayOptions): Promise<void>;
28
+ placeOverlay(target?: HTMLElement, options?: OverlayOptionsV1): Promise<void>;
29
29
  updatePlacement: () => void;
30
30
  computePlacement(): Promise<void>;
31
31
  resetOverlayPosition: () => void;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["PlacementController.ts"],
4
- "sourcesContent": ["/*\nCopyright 2022 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 type { ReactiveController, ReactiveElement } from 'lit';\nimport {\n arrow,\n autoUpdate,\n computePosition,\n flip,\n offset,\n Placement,\n shift,\n size,\n} from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { topLayerOverTransforms } from './topLayerOverTransforms.dev.js'\nimport type { OpenableElement, OverlayBase } from './OverlayBase.dev.js'\n\ntype OverlayOptions = {\n abortPromise?: Promise<boolean>;\n delayed?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement: Placement;\n notImmediatelyClosable?: boolean; // rename or place behind other API options\n receivesFocus?: 'auto';\n root?: HTMLElement;\n trigger: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\nfunction roundByDPR(num?: number): number {\n if (typeof num === 'undefined') return 0;\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\nconst REQUIRED_DISTANCE_TO_EDGE = 8;\n// See: https://github.com/adobe/spectrum-web-components/issues/910\nconst MIN_OVERLAY_HEIGHT = 100;\n\nconst getFallbackPlacements = (placement: Placement): Placement[] => {\n const fallbacks: Record<Placement, Placement[]> = {\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\nexport const placementUpdatedSymbol = Symbol('placement updated');\n\nexport class PlacementController implements ReactiveController {\n private cleanup?: () => void;\n\n initialHeight?: number;\n\n isConstrained?: boolean;\n\n private host!: ReactiveElement & { elements: OpenableElement[] };\n\n private options!: OverlayOptions;\n\n private originalPlacements = new WeakMap<HTMLElement, Placement>();\n\n private target!: HTMLElement;\n\n constructor(host: ReactiveElement & { elements: OpenableElement[] }) {\n this.host = host;\n // Add the controller after the MutationObserver has been created in preparation\n // for the `hostConnected`/`hostDisconnected` callbacks to be run.\n this.host.addController(this);\n }\n\n public async placeOverlay(\n target: HTMLElement = this.target,\n options: OverlayOptions = this.options\n ): Promise<void> {\n this.target = target;\n this.options = options;\n if (!target || !options) return;\n\n const cleanup = autoUpdate(\n options.trigger,\n target,\n this.updatePlacement,\n {\n elementResize: false,\n }\n );\n this.cleanup = () => {\n this.host.elements?.forEach((element) => {\n element.addEventListener(\n 'sp-closed',\n () => {\n const placement = this.originalPlacements.get(element);\n if (placement) {\n element.setAttribute('placement', placement);\n }\n this.originalPlacements.delete(element);\n },\n { once: true }\n );\n });\n cleanup();\n };\n }\n\n updatePlacement = (): void => {\n if (this.options.type !== 'modal' && this.cleanup) {\n this.target.dispatchEvent(new Event('close', { bubbles: true }));\n return;\n }\n this.computePlacement();\n };\n\n async computePlacement(): Promise<void> {\n const { options, target } = this;\n\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n\n const flipMiddleware = !(options.trigger instanceof HTMLElement)\n ? flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n fallbackPlacements: getFallbackPlacements(options.placement),\n })\n : flip();\n\n const [mainAxis = 0, crossAxis = 0] = Array.isArray(options?.offset)\n ? options.offset\n : [options.offset, 0];\n\n const tipElement = this.host.elements.find(\n (el) => el.tipElement\n )?.tipElement;\n\n const middleware = [\n offset({\n mainAxis,\n crossAxis,\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 = !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(target.style, {\n maxWidth: `${Math.floor(availableWidth)}px`,\n maxHeight: appliedHeight,\n height: appliedHeight,\n });\n },\n }),\n ...(tipElement ? [arrow({ element: tipElement })] : []),\n topLayerOverTransforms(),\n ];\n const { x, y, placement, middlewareData } = await computePosition(\n options.trigger,\n target,\n {\n placement: options.placement,\n middleware,\n strategy: 'fixed',\n }\n );\n Object.assign(target.style, {\n top: '0px',\n left: '0px',\n translate: `${roundByDPR(x)}px ${roundByDPR(y)}px`,\n });\n\n target.setAttribute('actual-placement', placement);\n this.host.elements?.forEach((element) => {\n this.originalPlacements.set(\n element,\n element.getAttribute('placement') as Placement\n );\n element.setAttribute('placement', placement);\n });\n\n if (tipElement && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n Object.assign(tipElement.style, {\n top:\n placement.startsWith('right') ||\n placement.startsWith('left')\n ? '0px'\n : '',\n left:\n placement.startsWith('bottom') ||\n placement.startsWith('top')\n ? '0px'\n : '',\n translate: `${roundByDPR(arrowX)}px ${roundByDPR(arrowY)}px`,\n });\n }\n }\n\n public resetOverlayPosition = (): void => {\n if (!this.target || !this.options) return;\n\n this.target.style.removeProperty('max-height');\n this.target.style.removeProperty('height');\n this.initialHeight = undefined;\n this.isConstrained = false;\n // force paint\n this.host.offsetHeight;\n this.computePlacement();\n };\n\n hostConnected(): void {\n document.addEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n\n hostUpdated(): void {\n if (!(this.host as OverlayBase).open) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n document.removeEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2022 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 type { ReactiveController, ReactiveElement } from 'lit';\nimport {\n arrow,\n autoUpdate,\n computePosition,\n flip,\n offset,\n Placement,\n shift,\n size,\n} from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport { topLayerOverTransforms } from './topLayerOverTransforms.dev.js'\nimport type { OpenableElement, OverlayBase } from './OverlayBase.dev.js'\n\ntype OverlayOptionsV1 = {\n abortPromise?: Promise<boolean>;\n delayed?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement: Placement;\n notImmediatelyClosable?: boolean; // rename or place behind other API options\n receivesFocus?: 'auto';\n root?: HTMLElement;\n trigger: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\nfunction roundByDPR(num?: number): number {\n if (typeof num === 'undefined') return 0;\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\nconst REQUIRED_DISTANCE_TO_EDGE = 8;\n// See: https://github.com/adobe/spectrum-web-components/issues/910\nconst MIN_OVERLAY_HEIGHT = 100;\n\nconst getFallbackPlacements = (placement: Placement): Placement[] => {\n const fallbacks: Record<Placement, Placement[]> = {\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\nexport const placementUpdatedSymbol = Symbol('placement updated');\n\nexport class PlacementController implements ReactiveController {\n private cleanup?: () => void;\n\n initialHeight?: number;\n\n isConstrained?: boolean;\n\n private host!: ReactiveElement & { elements: OpenableElement[] };\n\n private options!: OverlayOptionsV1;\n\n private originalPlacements = new WeakMap<HTMLElement, Placement>();\n\n private target!: HTMLElement;\n\n constructor(host: ReactiveElement & { elements: OpenableElement[] }) {\n this.host = host;\n // Add the controller after the MutationObserver has been created in preparation\n // for the `hostConnected`/`hostDisconnected` callbacks to be run.\n this.host.addController(this);\n }\n\n public async placeOverlay(\n target: HTMLElement = this.target,\n options: OverlayOptionsV1 = this.options\n ): Promise<void> {\n this.target = target;\n this.options = options;\n if (!target || !options) return;\n\n const cleanup = autoUpdate(\n options.trigger,\n target,\n this.updatePlacement,\n {\n elementResize: false,\n }\n );\n this.cleanup = () => {\n this.host.elements?.forEach((element) => {\n element.addEventListener(\n 'sp-closed',\n () => {\n const placement = this.originalPlacements.get(element);\n if (placement) {\n element.setAttribute('placement', placement);\n }\n this.originalPlacements.delete(element);\n },\n { once: true }\n );\n });\n cleanup();\n };\n }\n\n updatePlacement = (): void => {\n if (this.options.type !== 'modal' && this.cleanup) {\n this.target.dispatchEvent(new Event('close', { bubbles: true }));\n return;\n }\n this.computePlacement();\n };\n\n async computePlacement(): Promise<void> {\n const { options, target } = this;\n\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n\n const flipMiddleware = !(options.trigger instanceof HTMLElement)\n ? flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n fallbackPlacements: getFallbackPlacements(options.placement),\n })\n : flip();\n\n const [mainAxis = 0, crossAxis = 0] = Array.isArray(options?.offset)\n ? options.offset\n : [options.offset, 0];\n\n const tipElement = this.host.elements.find(\n (el) => el.tipElement\n )?.tipElement;\n\n const middleware = [\n offset({\n mainAxis,\n crossAxis,\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 = !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(target.style, {\n maxWidth: `${Math.floor(availableWidth)}px`,\n maxHeight: appliedHeight,\n height: appliedHeight,\n });\n },\n }),\n ...(tipElement ? [arrow({ element: tipElement })] : []),\n topLayerOverTransforms(),\n ];\n const { x, y, placement, middlewareData } = await computePosition(\n options.trigger,\n target,\n {\n placement: options.placement,\n middleware,\n strategy: 'fixed',\n }\n );\n Object.assign(target.style, {\n top: '0px',\n left: '0px',\n translate: `${roundByDPR(x)}px ${roundByDPR(y)}px`,\n });\n\n target.setAttribute('actual-placement', placement);\n this.host.elements?.forEach((element) => {\n this.originalPlacements.set(\n element,\n element.getAttribute('placement') as Placement\n );\n element.setAttribute('placement', placement);\n });\n\n if (tipElement && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n Object.assign(tipElement.style, {\n top:\n placement.startsWith('right') ||\n placement.startsWith('left')\n ? '0px'\n : '',\n left:\n placement.startsWith('bottom') ||\n placement.startsWith('top')\n ? '0px'\n : '',\n translate: `${roundByDPR(arrowX)}px ${roundByDPR(arrowY)}px`,\n });\n }\n }\n\n public resetOverlayPosition = (): void => {\n if (!this.target || !this.options) return;\n\n this.target.style.removeProperty('max-height');\n this.target.style.removeProperty('height');\n this.initialHeight = undefined;\n this.isConstrained = false;\n // force paint\n this.host.offsetHeight;\n this.computePlacement();\n };\n\n hostConnected(): void {\n document.addEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n\n hostUpdated(): void {\n if (!(this.host as OverlayBase).open) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n document.removeEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["PlacementController.ts"],
4
- "sourcesContent": ["/*\nCopyright 2022 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 type { ReactiveController, ReactiveElement } from 'lit';\nimport {\n arrow,\n autoUpdate,\n computePosition,\n flip,\n offset,\n Placement,\n shift,\n size,\n} from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport { topLayerOverTransforms } from './topLayerOverTransforms.js';\nimport type { OpenableElement, OverlayBase } from './OverlayBase.js';\n\ntype OverlayOptions = {\n abortPromise?: Promise<boolean>;\n delayed?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement: Placement;\n notImmediatelyClosable?: boolean; // rename or place behind other API options\n receivesFocus?: 'auto';\n root?: HTMLElement;\n trigger: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\nfunction roundByDPR(num?: number): number {\n if (typeof num === 'undefined') return 0;\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\nconst REQUIRED_DISTANCE_TO_EDGE = 8;\n// See: https://github.com/adobe/spectrum-web-components/issues/910\nconst MIN_OVERLAY_HEIGHT = 100;\n\nconst getFallbackPlacements = (placement: Placement): Placement[] => {\n const fallbacks: Record<Placement, Placement[]> = {\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\nexport const placementUpdatedSymbol = Symbol('placement updated');\n\nexport class PlacementController implements ReactiveController {\n private cleanup?: () => void;\n\n initialHeight?: number;\n\n isConstrained?: boolean;\n\n private host!: ReactiveElement & { elements: OpenableElement[] };\n\n private options!: OverlayOptions;\n\n private originalPlacements = new WeakMap<HTMLElement, Placement>();\n\n private target!: HTMLElement;\n\n constructor(host: ReactiveElement & { elements: OpenableElement[] }) {\n this.host = host;\n // Add the controller after the MutationObserver has been created in preparation\n // for the `hostConnected`/`hostDisconnected` callbacks to be run.\n this.host.addController(this);\n }\n\n public async placeOverlay(\n target: HTMLElement = this.target,\n options: OverlayOptions = this.options\n ): Promise<void> {\n this.target = target;\n this.options = options;\n if (!target || !options) return;\n\n const cleanup = autoUpdate(\n options.trigger,\n target,\n this.updatePlacement,\n {\n elementResize: false,\n }\n );\n this.cleanup = () => {\n this.host.elements?.forEach((element) => {\n element.addEventListener(\n 'sp-closed',\n () => {\n const placement = this.originalPlacements.get(element);\n if (placement) {\n element.setAttribute('placement', placement);\n }\n this.originalPlacements.delete(element);\n },\n { once: true }\n );\n });\n cleanup();\n };\n }\n\n updatePlacement = (): void => {\n if (this.options.type !== 'modal' && this.cleanup) {\n this.target.dispatchEvent(new Event('close', { bubbles: true }));\n return;\n }\n this.computePlacement();\n };\n\n async computePlacement(): Promise<void> {\n const { options, target } = this;\n\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n\n const flipMiddleware = !(options.trigger instanceof HTMLElement)\n ? flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n fallbackPlacements: getFallbackPlacements(options.placement),\n })\n : flip();\n\n const [mainAxis = 0, crossAxis = 0] = Array.isArray(options?.offset)\n ? options.offset\n : [options.offset, 0];\n\n const tipElement = this.host.elements.find(\n (el) => el.tipElement\n )?.tipElement;\n\n const middleware = [\n offset({\n mainAxis,\n crossAxis,\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 = !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(target.style, {\n maxWidth: `${Math.floor(availableWidth)}px`,\n maxHeight: appliedHeight,\n height: appliedHeight,\n });\n },\n }),\n ...(tipElement ? [arrow({ element: tipElement })] : []),\n topLayerOverTransforms(),\n ];\n const { x, y, placement, middlewareData } = await computePosition(\n options.trigger,\n target,\n {\n placement: options.placement,\n middleware,\n strategy: 'fixed',\n }\n );\n Object.assign(target.style, {\n top: '0px',\n left: '0px',\n translate: `${roundByDPR(x)}px ${roundByDPR(y)}px`,\n });\n\n target.setAttribute('actual-placement', placement);\n this.host.elements?.forEach((element) => {\n this.originalPlacements.set(\n element,\n element.getAttribute('placement') as Placement\n );\n element.setAttribute('placement', placement);\n });\n\n if (tipElement && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n Object.assign(tipElement.style, {\n top:\n placement.startsWith('right') ||\n placement.startsWith('left')\n ? '0px'\n : '',\n left:\n placement.startsWith('bottom') ||\n placement.startsWith('top')\n ? '0px'\n : '',\n translate: `${roundByDPR(arrowX)}px ${roundByDPR(arrowY)}px`,\n });\n }\n }\n\n public resetOverlayPosition = (): void => {\n if (!this.target || !this.options) return;\n\n this.target.style.removeProperty('max-height');\n this.target.style.removeProperty('height');\n this.initialHeight = undefined;\n this.isConstrained = false;\n // force paint\n this.host.offsetHeight;\n this.computePlacement();\n };\n\n hostConnected(): void {\n document.addEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n\n hostUpdated(): void {\n if (!(this.host as OverlayBase).open) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n document.removeEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2022 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 type { ReactiveController, ReactiveElement } from 'lit';\nimport {\n arrow,\n autoUpdate,\n computePosition,\n flip,\n offset,\n Placement,\n shift,\n size,\n} from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\nimport { topLayerOverTransforms } from './topLayerOverTransforms.js';\nimport type { OpenableElement, OverlayBase } from './OverlayBase.js';\n\ntype OverlayOptionsV1 = {\n abortPromise?: Promise<boolean>;\n delayed?: boolean;\n offset?: number | [number, number]; // supporting multi-axis\n placement: Placement;\n notImmediatelyClosable?: boolean; // rename or place behind other API options\n receivesFocus?: 'auto';\n root?: HTMLElement;\n trigger: HTMLElement | VirtualTrigger;\n type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';\n};\n\nfunction roundByDPR(num?: number): number {\n if (typeof num === 'undefined') return 0;\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\nconst REQUIRED_DISTANCE_TO_EDGE = 8;\n// See: https://github.com/adobe/spectrum-web-components/issues/910\nconst MIN_OVERLAY_HEIGHT = 100;\n\nconst getFallbackPlacements = (placement: Placement): Placement[] => {\n const fallbacks: Record<Placement, Placement[]> = {\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\nexport const placementUpdatedSymbol = Symbol('placement updated');\n\nexport class PlacementController implements ReactiveController {\n private cleanup?: () => void;\n\n initialHeight?: number;\n\n isConstrained?: boolean;\n\n private host!: ReactiveElement & { elements: OpenableElement[] };\n\n private options!: OverlayOptionsV1;\n\n private originalPlacements = new WeakMap<HTMLElement, Placement>();\n\n private target!: HTMLElement;\n\n constructor(host: ReactiveElement & { elements: OpenableElement[] }) {\n this.host = host;\n // Add the controller after the MutationObserver has been created in preparation\n // for the `hostConnected`/`hostDisconnected` callbacks to be run.\n this.host.addController(this);\n }\n\n public async placeOverlay(\n target: HTMLElement = this.target,\n options: OverlayOptionsV1 = this.options\n ): Promise<void> {\n this.target = target;\n this.options = options;\n if (!target || !options) return;\n\n const cleanup = autoUpdate(\n options.trigger,\n target,\n this.updatePlacement,\n {\n elementResize: false,\n }\n );\n this.cleanup = () => {\n this.host.elements?.forEach((element) => {\n element.addEventListener(\n 'sp-closed',\n () => {\n const placement = this.originalPlacements.get(element);\n if (placement) {\n element.setAttribute('placement', placement);\n }\n this.originalPlacements.delete(element);\n },\n { once: true }\n );\n });\n cleanup();\n };\n }\n\n updatePlacement = (): void => {\n if (this.options.type !== 'modal' && this.cleanup) {\n this.target.dispatchEvent(new Event('close', { bubbles: true }));\n return;\n }\n this.computePlacement();\n };\n\n async computePlacement(): Promise<void> {\n const { options, target } = this;\n\n await (document.fonts ? document.fonts.ready : Promise.resolve());\n\n const flipMiddleware = !(options.trigger instanceof HTMLElement)\n ? flip({\n padding: REQUIRED_DISTANCE_TO_EDGE,\n fallbackPlacements: getFallbackPlacements(options.placement),\n })\n : flip();\n\n const [mainAxis = 0, crossAxis = 0] = Array.isArray(options?.offset)\n ? options.offset\n : [options.offset, 0];\n\n const tipElement = this.host.elements.find(\n (el) => el.tipElement\n )?.tipElement;\n\n const middleware = [\n offset({\n mainAxis,\n crossAxis,\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 = !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(target.style, {\n maxWidth: `${Math.floor(availableWidth)}px`,\n maxHeight: appliedHeight,\n height: appliedHeight,\n });\n },\n }),\n ...(tipElement ? [arrow({ element: tipElement })] : []),\n topLayerOverTransforms(),\n ];\n const { x, y, placement, middlewareData } = await computePosition(\n options.trigger,\n target,\n {\n placement: options.placement,\n middleware,\n strategy: 'fixed',\n }\n );\n Object.assign(target.style, {\n top: '0px',\n left: '0px',\n translate: `${roundByDPR(x)}px ${roundByDPR(y)}px`,\n });\n\n target.setAttribute('actual-placement', placement);\n this.host.elements?.forEach((element) => {\n this.originalPlacements.set(\n element,\n element.getAttribute('placement') as Placement\n );\n element.setAttribute('placement', placement);\n });\n\n if (tipElement && middlewareData.arrow) {\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n Object.assign(tipElement.style, {\n top:\n placement.startsWith('right') ||\n placement.startsWith('left')\n ? '0px'\n : '',\n left:\n placement.startsWith('bottom') ||\n placement.startsWith('top')\n ? '0px'\n : '',\n translate: `${roundByDPR(arrowX)}px ${roundByDPR(arrowY)}px`,\n });\n }\n }\n\n public resetOverlayPosition = (): void => {\n if (!this.target || !this.options) return;\n\n this.target.style.removeProperty('max-height');\n this.target.style.removeProperty('height');\n this.initialHeight = undefined;\n this.isConstrained = false;\n // force paint\n this.host.offsetHeight;\n this.computePlacement();\n };\n\n hostConnected(): void {\n document.addEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n\n hostUpdated(): void {\n if (!(this.host as OverlayBase).open) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n document.removeEventListener(\n 'sp-update-overlays',\n this.resetOverlayPosition\n );\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["arrow", "autoUpdate", "computePosition", "flip", "offset", "shift", "size", "topLayerOverTransforms", "roundByDPR", "num", "dpr", "REQUIRED_DISTANCE_TO_EDGE", "MIN_OVERLAY_HEIGHT", "getFallbackPlacements", "placement", "_a", "host", "target", "options", "cleanup", "element", "_b", "flipMiddleware", "mainAxis", "crossAxis", "tipElement", "el", "middleware", "availableWidth", "availableHeight", "floating", "maxHeight", "actualHeight", "appliedHeight", "x", "y", "middlewareData", "arrowX", "arrowY"]
7
7
  }
@@ -38,7 +38,7 @@ export interface OverlayDisplayQueryDetail {
38
38
  overlayRootElement?: HTMLElement;
39
39
  overlayContentTipElement?: HTMLElement;
40
40
  }
41
- export declare type OverlayOptions = {
41
+ export declare type OverlayOptionsV1 = {
42
42
  root?: HTMLElement;
43
43
  delayed?: boolean;
44
44
  placement?: Placement;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-types.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 type { ThemeData } from '@spectrum-web-components/theme/src/Theme.js';\nimport type { Placement } from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\n\nexport { Placement };\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nexport type TriggerInteractions = OverlayTypes;\n\nexport type TriggerInteractionsV1 =\n | 'click'\n | 'longpress'\n | 'hover'\n | 'custom'\n | 'replace'\n | 'inline'\n | 'modal';\n\nexport type OverlayTriggerInteractions = Extract<\n TriggerInteractions,\n 'inline' | 'modal' | 'replace'\n>;\n\nexport interface OverlayOpenDetail {\n content: HTMLElement;\n contentTip?: HTMLElement;\n delayed: boolean;\n offset: number;\n skidding?: number;\n placement?: Placement;\n receivesFocus?: 'auto';\n virtualTrigger?: VirtualTrigger;\n trigger: HTMLElement;\n root?: HTMLElement;\n interaction: TriggerInteractions;\n theme: ThemeData;\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n}\n\nexport interface OverlayOpenCloseDetail {\n interaction: TriggerInteractions;\n reason?: 'external-click';\n}\n\nexport interface OverlayCloseReasonDetail {\n reason?: 'external-click';\n}\n\n/**\n * Used, via an event, to query details about how an element should be shown in\n * an overlay\n */\nexport interface OverlayDisplayQueryDetail {\n overlayRootName?: string;\n overlayRootElement?: HTMLElement;\n overlayContentTipElement?: HTMLElement;\n}\n\nexport type OverlayOptions = {\n root?: HTMLElement;\n delayed?: boolean;\n placement?: Placement;\n offset?: number;\n receivesFocus?: 'true' | 'false' | 'auto';\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n virtualTrigger?: VirtualTrigger;\n};\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-overlay-query': CustomEvent<OverlayDisplayQueryDetail>;\n 'sp-open': CustomEvent<OverlayOpenCloseDetail>;\n 'sp-close': CustomEvent<OverlayOpenCloseDetail>;\n }\n}\n"],
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 type { ThemeData } from '@spectrum-web-components/theme/src/Theme.js';\nimport type { Placement } from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.dev.js'\n\nexport { Placement };\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nexport type TriggerInteractions = OverlayTypes;\n\nexport type TriggerInteractionsV1 =\n | 'click'\n | 'longpress'\n | 'hover'\n | 'custom'\n | 'replace'\n | 'inline'\n | 'modal';\n\nexport type OverlayTriggerInteractions = Extract<\n TriggerInteractions,\n 'inline' | 'modal' | 'replace'\n>;\n\nexport interface OverlayOpenDetail {\n content: HTMLElement;\n contentTip?: HTMLElement;\n delayed: boolean;\n offset: number;\n skidding?: number;\n placement?: Placement;\n receivesFocus?: 'auto';\n virtualTrigger?: VirtualTrigger;\n trigger: HTMLElement;\n root?: HTMLElement;\n interaction: TriggerInteractions;\n theme: ThemeData;\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n}\n\nexport interface OverlayOpenCloseDetail {\n interaction: TriggerInteractions;\n reason?: 'external-click';\n}\n\nexport interface OverlayCloseReasonDetail {\n reason?: 'external-click';\n}\n\n/**\n * Used, via an event, to query details about how an element should be shown in\n * an overlay\n */\nexport interface OverlayDisplayQueryDetail {\n overlayRootName?: string;\n overlayRootElement?: HTMLElement;\n overlayContentTipElement?: HTMLElement;\n}\n\nexport type OverlayOptionsV1 = {\n root?: HTMLElement;\n delayed?: boolean;\n placement?: Placement;\n offset?: number;\n receivesFocus?: 'true' | 'false' | 'auto';\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n virtualTrigger?: VirtualTrigger;\n};\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-overlay-query': CustomEvent<OverlayDisplayQueryDetail>;\n 'sp-open': CustomEvent<OverlayOpenCloseDetail>;\n 'sp-close': CustomEvent<OverlayOpenCloseDetail>;\n }\n}\n"],
5
5
  "mappings": ";AAgBA;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-types.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 type { ThemeData } from '@spectrum-web-components/theme/src/Theme.js';\nimport type { Placement } from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\n\nexport { Placement };\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nexport type TriggerInteractions = OverlayTypes;\n\nexport type TriggerInteractionsV1 =\n | 'click'\n | 'longpress'\n | 'hover'\n | 'custom'\n | 'replace'\n | 'inline'\n | 'modal';\n\nexport type OverlayTriggerInteractions = Extract<\n TriggerInteractions,\n 'inline' | 'modal' | 'replace'\n>;\n\nexport interface OverlayOpenDetail {\n content: HTMLElement;\n contentTip?: HTMLElement;\n delayed: boolean;\n offset: number;\n skidding?: number;\n placement?: Placement;\n receivesFocus?: 'auto';\n virtualTrigger?: VirtualTrigger;\n trigger: HTMLElement;\n root?: HTMLElement;\n interaction: TriggerInteractions;\n theme: ThemeData;\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n}\n\nexport interface OverlayOpenCloseDetail {\n interaction: TriggerInteractions;\n reason?: 'external-click';\n}\n\nexport interface OverlayCloseReasonDetail {\n reason?: 'external-click';\n}\n\n/**\n * Used, via an event, to query details about how an element should be shown in\n * an overlay\n */\nexport interface OverlayDisplayQueryDetail {\n overlayRootName?: string;\n overlayRootElement?: HTMLElement;\n overlayContentTipElement?: HTMLElement;\n}\n\nexport type OverlayOptions = {\n root?: HTMLElement;\n delayed?: boolean;\n placement?: Placement;\n offset?: number;\n receivesFocus?: 'true' | 'false' | 'auto';\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n virtualTrigger?: VirtualTrigger;\n};\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-overlay-query': CustomEvent<OverlayDisplayQueryDetail>;\n 'sp-open': CustomEvent<OverlayOpenCloseDetail>;\n 'sp-close': CustomEvent<OverlayOpenCloseDetail>;\n }\n}\n"],
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 type { ThemeData } from '@spectrum-web-components/theme/src/Theme.js';\nimport type { Placement } from '@floating-ui/dom';\nimport type { VirtualTrigger } from './VirtualTrigger.js';\n\nexport { Placement };\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nexport type TriggerInteractions = OverlayTypes;\n\nexport type TriggerInteractionsV1 =\n | 'click'\n | 'longpress'\n | 'hover'\n | 'custom'\n | 'replace'\n | 'inline'\n | 'modal';\n\nexport type OverlayTriggerInteractions = Extract<\n TriggerInteractions,\n 'inline' | 'modal' | 'replace'\n>;\n\nexport interface OverlayOpenDetail {\n content: HTMLElement;\n contentTip?: HTMLElement;\n delayed: boolean;\n offset: number;\n skidding?: number;\n placement?: Placement;\n receivesFocus?: 'auto';\n virtualTrigger?: VirtualTrigger;\n trigger: HTMLElement;\n root?: HTMLElement;\n interaction: TriggerInteractions;\n theme: ThemeData;\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n}\n\nexport interface OverlayOpenCloseDetail {\n interaction: TriggerInteractions;\n reason?: 'external-click';\n}\n\nexport interface OverlayCloseReasonDetail {\n reason?: 'external-click';\n}\n\n/**\n * Used, via an event, to query details about how an element should be shown in\n * an overlay\n */\nexport interface OverlayDisplayQueryDetail {\n overlayRootName?: string;\n overlayRootElement?: HTMLElement;\n overlayContentTipElement?: HTMLElement;\n}\n\nexport type OverlayOptionsV1 = {\n root?: HTMLElement;\n delayed?: boolean;\n placement?: Placement;\n offset?: number;\n receivesFocus?: 'true' | 'false' | 'auto';\n notImmediatelyClosable?: boolean;\n abortPromise?: Promise<boolean>;\n virtualTrigger?: VirtualTrigger;\n};\n\ndeclare global {\n interface GlobalEventHandlersEventMap {\n 'sp-overlay-query': CustomEvent<OverlayDisplayQueryDetail>;\n 'sp-open': CustomEvent<OverlayOpenCloseDetail>;\n 'sp-close': CustomEvent<OverlayOpenCloseDetail>;\n }\n}\n"],
5
5
  "mappings": "aAgBA",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import { OverlayTrigger } from '../src/OverlayTrigger.js';
2
- import { OverlayOptions, TriggerInteractions } from '../src/index.js';
2
+ import { OverlayOptionsV1, TriggerInteractions } from '../src/index.js';
3
3
  import '../overlay-trigger.js';
4
4
  export { OverlayTrigger };
5
- export type { OverlayOptions, TriggerInteractions };
5
+ export type { OverlayOptionsV1, TriggerInteractions };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger.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 { OverlayTrigger } from '../src/OverlayTrigger.dev.js'\nimport { OverlayOptions, TriggerInteractions } from '../src/index.dev.js'\nimport '../overlay-trigger.dev.js'\n\nexport { OverlayTrigger };\nexport type { OverlayOptions, TriggerInteractions };\n"],
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 { OverlayTrigger } from '../src/OverlayTrigger.dev.js'\nimport { OverlayOptionsV1, TriggerInteractions } from '../src/index.dev.js'\nimport '../overlay-trigger.dev.js'\n\nexport { OverlayTrigger };\nexport type { OverlayOptionsV1, TriggerInteractions };\n"],
5
5
  "mappings": ";AAYA,SAAS,sBAAsB;AAE/B,OAAO;AAEP,SAAS;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger.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 { OverlayTrigger } from '../src/OverlayTrigger.js';\nimport { OverlayOptions, TriggerInteractions } from '../src/index.js';\nimport '../overlay-trigger.js';\n\nexport { OverlayTrigger };\nexport type { OverlayOptions, TriggerInteractions };\n"],
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 { OverlayTrigger } from '../src/OverlayTrigger.js';\nimport { OverlayOptionsV1, TriggerInteractions } from '../src/index.js';\nimport '../overlay-trigger.js';\n\nexport { OverlayTrigger };\nexport type { OverlayOptionsV1, TriggerInteractions };\n"],
5
5
  "mappings": "aAYA,OAAS,kBAAAA,MAAsB,2BAE/B,MAAO,wBAEP,OAASA,IAAA",
6
6
  "names": ["OverlayTrigger"]
7
7
  }