@spectrum-web-components/overlay 0.19.6-overlay.15 → 0.19.6-overlay.18

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/overlay",
3
- "version": "0.19.6-overlay.15+5ea964619",
3
+ "version": "0.19.6-overlay.18+2ba65b1a7",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -131,10 +131,10 @@
131
131
  ],
132
132
  "dependencies": {
133
133
  "@floating-ui/dom": "^1.2.6",
134
- "@spectrum-web-components/action-button": "^0.10.17-overlay.15+5ea964619",
135
- "@spectrum-web-components/base": "^0.7.6-overlay.59+5ea964619",
136
- "@spectrum-web-components/shared": "^0.15.8-overlay.15+5ea964619",
137
- "@spectrum-web-components/theme": "^0.15.1-overlay.15+5ea964619"
134
+ "@spectrum-web-components/action-button": "^0.10.17-overlay.18+2ba65b1a7",
135
+ "@spectrum-web-components/base": "^0.7.6-overlay.62+2ba65b1a7",
136
+ "@spectrum-web-components/shared": "^0.15.8-overlay.18+2ba65b1a7",
137
+ "@spectrum-web-components/theme": "^0.15.1-overlay.18+2ba65b1a7"
138
138
  },
139
139
  "types": "./src/index.d.ts",
140
140
  "customElements": "custom-elements.json",
@@ -146,5 +146,5 @@
146
146
  "./stories/overlay-story-components.js",
147
147
  "./**/*.dev.js"
148
148
  ],
149
- "gitHead": "5ea964619d37972a3a08d4304949a1fca787cb94"
149
+ "gitHead": "2ba65b1a7310f182972a840bea45ba93203c2da0"
150
150
  }
package/sp-overlay.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Overlay } from './src/Overlay.js';
2
2
  declare global {
3
3
  interface HTMLElementTagNameMap {
4
- 'sp-overlay': typeof Overlay;
4
+ 'sp-overlay': Overlay;
5
5
  }
6
6
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["sp-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 { Overlay } from './src/Overlay.dev.js'\n\ncustomElements.define('sp-overlay', Overlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-overlay': typeof Overlay;\n }\n}\n"],
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 { Overlay } from './src/Overlay.dev.js'\n\ncustomElements.define('sp-overlay', Overlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-overlay': Overlay;\n }\n}\n"],
5
5
  "mappings": ";AAWA,SAAS,eAAe;AAExB,eAAe,OAAO,cAAc,OAAO;",
6
6
  "names": []
7
7
  }
package/sp-overlay.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["sp-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 { Overlay } from './src/Overlay.js';\n\ncustomElements.define('sp-overlay', Overlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-overlay': typeof Overlay;\n }\n}\n"],
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 { Overlay } from './src/Overlay.js';\n\ncustomElements.define('sp-overlay', Overlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-overlay': Overlay;\n }\n}\n"],
5
5
  "mappings": "aAWA,OAAS,WAAAA,MAAe,mBAExB,eAAe,OAAO,aAAcA,CAAO",
6
6
  "names": ["Overlay"]
7
7
  }
package/src/Overlay.d.ts CHANGED
@@ -14,6 +14,12 @@ declare type OverlayOptionsV2 = {
14
14
  trigger?: HTMLElement | VirtualTrigger;
15
15
  type?: 'modal' | 'page' | 'hint' | 'auto' | 'manual';
16
16
  };
17
+ /**
18
+ * @element sp-overlay
19
+ *
20
+ * @fires sp-opened - announces that an overlay has completed any entry animations
21
+ * @fires sp-closed - announce that an overlay has compelted any exit animations
22
+ */
17
23
  export declare class Overlay extends OverlayFeatures {
18
24
  static update(): void;
19
25
  static open(target: HTMLElement, interaction: TriggerInteractions, content: HTMLElement, options: OverlayOptions): Promise<() => void>;
@@ -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, TriggerInteractions } 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 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\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: TriggerInteractions,\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: TriggerInteractions | OverlayOptionsV2,\n content?: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlay = new Overlay();\n if (v2) {\n const content = targetOrContent;\n const options = interactionOrOptions as OverlayOptionsV2;\n overlay.append(content);\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n await new Promise<void>((res) =>\n requestAnimationFrame(() => res())\n );\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n return overlay;\n } else if (content && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n let restored = false;\n const restoreContent = reparentChildren([content], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n return () => {\n el.slot = slot;\n };\n },\n });\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 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 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;AAWO,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,sBACA,SACA,SAC+B;AA/DvC;AAgEQ,UAAM,KAAK,UAAU,WAAW;AAChC,UAAM,UAAU,IAAI,QAAQ;AAC5B,QAAI,IAAI;AACJ,YAAMA,WAAU;AAChB,YAAMC,WAAU;AAChB,cAAQ,OAAOD,QAAO;AACtB,cAAQ,iBAAiBC,SAAQ,WAAW;AAC5C,cAAQ,OAAOA,SAAQ,QAAQ;AAC/B,cAAQ,SAASA,SAAQ,UAAU;AACnC,cAAQ,YAAYA,SAAQ;AAC5B,YAAM,IAAI;AAAA,QAAc,CAAC,QACrB,sBAAsB,MAAM,IAAI,CAAC;AAAA,MACrC;AAEA,cAAQ,OAAO;AACf,aAAO;AAAA,IACX,WAAW,WAAW,SAAS;AAC3B,YAAM,SAAS;AACf,YAAM,cAAc;AACpB,UAAI,WAAW;AACf,YAAM,iBAAiB,iBAAiB,CAAC,OAAO,GAAG,SAAS;AAAA,QACxD,UAAU;AAAA,QACV,iBAAiB,CAAC,OAAO;AACrB,gBAAM,OAAO,GAAG;AAChB,iBAAO,MAAM;AACT,eAAG,OAAO;AAAA,UACd;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,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,cAAQ,UAAU,MAAM;AACpB,gBAAQ,iBAAiB,aAAa,MAAM;AACxC,cAAI,CAAC,UAAU;AACX,2BAAe;AACf,uBAAW;AAAA,UACf;AACA,gCAAsB,MAAM;AACxB,oBAAQ,OAAO;AAAA,UACnB,CAAC;AAAA,QACL,CAAC;AACD,gBAAQ,OAAO;AACf,gBAAQ,UAAU;AAAA,MACtB;AACA,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 { OverlayOptions, TriggerInteractions } 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 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: TriggerInteractions,\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: TriggerInteractions | OverlayOptionsV2,\n content?: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlay = new Overlay();\n if (v2) {\n const content = targetOrContent;\n const options = interactionOrOptions as OverlayOptionsV2;\n overlay.append(content);\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n await new Promise<void>((res) =>\n requestAnimationFrame(() => res())\n );\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n return overlay;\n } else if (content && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n let restored = false;\n const restoreContent = reparentChildren([content], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n return () => {\n el.slot = slot;\n };\n },\n });\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 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 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;AAiBO,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,sBACA,SACA,SAC+B;AArEvC;AAsEQ,UAAM,KAAK,UAAU,WAAW;AAChC,UAAM,UAAU,IAAI,QAAQ;AAC5B,QAAI,IAAI;AACJ,YAAMA,WAAU;AAChB,YAAMC,WAAU;AAChB,cAAQ,OAAOD,QAAO;AACtB,cAAQ,iBAAiBC,SAAQ,WAAW;AAC5C,cAAQ,OAAOA,SAAQ,QAAQ;AAC/B,cAAQ,SAASA,SAAQ,UAAU;AACnC,cAAQ,YAAYA,SAAQ;AAC5B,YAAM,IAAI;AAAA,QAAc,CAAC,QACrB,sBAAsB,MAAM,IAAI,CAAC;AAAA,MACrC;AAEA,cAAQ,OAAO;AACf,aAAO;AAAA,IACX,WAAW,WAAW,SAAS;AAC3B,YAAM,SAAS;AACf,YAAM,cAAc;AACpB,UAAI,WAAW;AACf,YAAM,iBAAiB,iBAAiB,CAAC,OAAO,GAAG,SAAS;AAAA,QACxD,UAAU;AAAA,QACV,iBAAiB,CAAC,OAAO;AACrB,gBAAM,OAAO,GAAG;AAChB,iBAAO,MAAM;AACT,eAAG,OAAO;AAAA,UACd;AAAA,QACJ;AAAA,MACJ,CAAC;AACD,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,cAAQ,UAAU,MAAM;AACpB,gBAAQ,iBAAiB,aAAa,MAAM;AACxC,cAAI,CAAC,UAAU;AACX,2BAAe;AACf,uBAAW;AAAA,UACf;AACA,gCAAsB,MAAM;AACxB,oBAAQ,OAAO;AAAA,UACnB,CAAC;AAAA,QACL,CAAC;AACD,gBAAQ,OAAO;AACf,gBAAQ,UAAU;AAAA,MACtB;AACA,aAAO,QAAQ;AAAA,IACnB;AAEA,WAAO;AAAA,EACX;AACJ;",
6
6
  "names": ["content", "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, TriggerInteractions } 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 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\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: TriggerInteractions,\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: TriggerInteractions | OverlayOptionsV2,\n content?: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlay = new Overlay();\n if (v2) {\n const content = targetOrContent;\n const options = interactionOrOptions as OverlayOptionsV2;\n overlay.append(content);\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n await new Promise<void>((res) =>\n requestAnimationFrame(() => res())\n );\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n return overlay;\n } else if (content && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n let restored = false;\n const restoreContent = reparentChildren([content], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n return () => {\n el.slot = slot;\n };\n },\n });\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 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 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,EAY/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,EACAC,EACAC,EAC+B,CA/DvC,IAAAC,EAAAC,EAgEQ,MAAMC,EAAK,UAAU,SAAW,EAC1BC,EAAU,IAAI,QACpB,GAAID,EAAI,CACJ,MAAMJ,EAAUF,EACVG,EAAUF,EAChB,OAAAM,EAAQ,OAAOL,CAAO,EACtBK,EAAQ,eAAiBJ,EAAQ,SAAW,KAC5CI,EAAQ,KAAOJ,EAAQ,MAAQ,QAC/BI,EAAQ,OAASJ,EAAQ,QAAU,EACnCI,EAAQ,UAAYJ,EAAQ,UAC5B,MAAM,IAAI,QAAeK,GACrB,sBAAsB,IAAMA,EAAI,CAAC,CACrC,EAEAD,EAAQ,KAAO,GACRA,CACX,SAAWL,GAAWC,EAAS,CAC3B,MAAMM,EAAST,EACTU,EAAcT,EACpB,IAAIU,EAAW,GACf,MAAMC,EAAiBhB,EAAiB,CAACM,CAAO,EAAGK,EAAS,CACxD,SAAU,YACV,gBAAkBM,GAAO,CACrB,MAAMC,EAAOD,EAAG,KAChB,MAAO,IAAM,CACTA,EAAG,KAAOC,CACd,CACJ,CACJ,CAAC,EACDP,EAAQ,eAAgBH,EAAAD,EAAQ,gBAAR,KAAAC,EAAyB,OACjDG,EAAQ,eAAiBJ,EAAQ,gBAAkBM,EACnDF,EAAQ,KACJG,IAAgB,QACV,QACAA,IAAgB,QAChB,OACA,OACVH,EAAQ,QAASF,EAAAF,EAAQ,SAAR,KAAAE,EAAkB,EACnCE,EAAQ,UAAYJ,EAAQ,UAC5BI,EAAQ,iBAAmB,CAAC,CAACJ,EAAQ,uBAOrC,MAAMY,EAASN,EAAO,YAAY,EAClC,OAAIM,IAAW,SACXN,EAAO,sBAAsB,WAAYF,CAAO,EAEhDQ,EAAO,OAAOR,CAAO,EAEzB,MAAM,IAAI,QAAeC,GACrB,sBAAsB,IAAM,sBAAsB,IAAMA,EAAI,CAAC,CAAC,CAClE,EACAD,EAAQ,KAAO,GACfA,EAAQ,QAAU,IAAM,CACpBA,EAAQ,iBAAiB,YAAa,IAAM,CACnCI,IACDC,EAAe,EACfD,EAAW,IAEf,sBAAsB,IAAM,CACxBJ,EAAQ,OAAO,CACnB,CAAC,CACL,CAAC,EACDA,EAAQ,KAAO,GACfA,EAAQ,QAAUhB,CACtB,EACOgB,EAAQ,OACnB,CAEA,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 { OverlayOptions, TriggerInteractions } 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 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: TriggerInteractions,\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: TriggerInteractions | OverlayOptionsV2,\n content?: HTMLElement,\n options?: OverlayOptions\n ): Promise<Overlay | (() => void)> {\n const v2 = arguments.length === 2;\n const overlay = new Overlay();\n if (v2) {\n const content = targetOrContent;\n const options = interactionOrOptions as OverlayOptionsV2;\n overlay.append(content);\n overlay.triggerElement = options.trigger || null;\n overlay.type = options.type || 'modal';\n overlay.offset = options.offset || 6;\n overlay.placement = options.placement;\n await new Promise<void>((res) =>\n requestAnimationFrame(() => res())\n );\n // Do we want to \"open\" this path, or leave that to the consumer?\n overlay.open = true;\n return overlay;\n } else if (content && options) {\n const target = targetOrContent;\n const interaction = interactionOrOptions;\n let restored = false;\n const restoreContent = reparentChildren([content], overlay, {\n position: 'beforeend',\n prepareCallback: (el) => {\n const slot = el.slot;\n return () => {\n el.slot = slot;\n };\n },\n });\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 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 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,EAkB/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,EACAC,EACAC,EAC+B,CArEvC,IAAAC,EAAAC,EAsEQ,MAAMC,EAAK,UAAU,SAAW,EAC1BC,EAAU,IAAI,QACpB,GAAID,EAAI,CACJ,MAAMJ,EAAUF,EACVG,EAAUF,EAChB,OAAAM,EAAQ,OAAOL,CAAO,EACtBK,EAAQ,eAAiBJ,EAAQ,SAAW,KAC5CI,EAAQ,KAAOJ,EAAQ,MAAQ,QAC/BI,EAAQ,OAASJ,EAAQ,QAAU,EACnCI,EAAQ,UAAYJ,EAAQ,UAC5B,MAAM,IAAI,QAAeK,GACrB,sBAAsB,IAAMA,EAAI,CAAC,CACrC,EAEAD,EAAQ,KAAO,GACRA,CACX,SAAWL,GAAWC,EAAS,CAC3B,MAAMM,EAAST,EACTU,EAAcT,EACpB,IAAIU,EAAW,GACf,MAAMC,EAAiBhB,EAAiB,CAACM,CAAO,EAAGK,EAAS,CACxD,SAAU,YACV,gBAAkBM,GAAO,CACrB,MAAMC,EAAOD,EAAG,KAChB,MAAO,IAAM,CACTA,EAAG,KAAOC,CACd,CACJ,CACJ,CAAC,EACDP,EAAQ,eAAgBH,EAAAD,EAAQ,gBAAR,KAAAC,EAAyB,OACjDG,EAAQ,eAAiBJ,EAAQ,gBAAkBM,EACnDF,EAAQ,KACJG,IAAgB,QACV,QACAA,IAAgB,QAChB,OACA,OACVH,EAAQ,QAASF,EAAAF,EAAQ,SAAR,KAAAE,EAAkB,EACnCE,EAAQ,UAAYJ,EAAQ,UAC5BI,EAAQ,iBAAmB,CAAC,CAACJ,EAAQ,uBAOrC,MAAMY,EAASN,EAAO,YAAY,EAClC,OAAIM,IAAW,SACXN,EAAO,sBAAsB,WAAYF,CAAO,EAEhDQ,EAAO,OAAOR,CAAO,EAEzB,MAAM,IAAI,QAAeC,GACrB,sBAAsB,IAAM,sBAAsB,IAAMA,EAAI,CAAC,CAAC,CAClE,EACAD,EAAQ,KAAO,GACfA,EAAQ,QAAU,IAAM,CACpBA,EAAQ,iBAAiB,YAAa,IAAM,CACnCI,IACDC,EAAe,EACfD,EAAW,IAEf,sBAAsB,IAAM,CACxBJ,EAAQ,OAAO,CACnB,CAAC,CACL,CAAC,EACDA,EAAQ,KAAO,GACfA,EAAQ,QAAUhB,CACtB,EACOgB,EAAQ,OACnB,CAEA,OAAOA,CACX,CACJ",
6
6
  "names": ["noop", "OverlayBase", "OverlayDialog", "OverlayPopover", "OverlayNoPopover", "reparentChildren", "supportsPopover", "OverlayFeatures", "overlayUpdateEvent", "targetOrContent", "interactionOrOptions", "content", "options", "_a", "_b", "v2", "overlay", "res", "target", "interaction", "restored", "restoreContent", "el", "slot", "parent"]
7
7
  }
@@ -36,9 +36,6 @@ export declare const noop: () => void;
36
36
  * @param cb {Function} - Callback to trigger when the "transition" has ended.
37
37
  */
38
38
  export declare const guaranteedTransitionend: (el: HTMLElement, action: () => void, cb: () => void) => void;
39
- /**
40
- * @element sp-overlay
41
- */
42
39
  export declare class OverlayBase extends SpectrumElement {
43
40
  static styles: import("@spectrum-web-components/base").CSSResult[];
44
41
  dialogEl: HTMLDialogElement & {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["OverlayBase.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 { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nconst LONGPRESS_DURATION = 300;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\nexport const LONGPRESS_INSTRUCTIONS = {\n touch: 'Double tap and long press for additional options',\n keyboard: 'Press Space or Alt+Down Arrow for additional options',\n mouse: 'Click and hold for additional options',\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\n/**\n * @element sp-overlay\n */\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @query('dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n\n @property({ type: Boolean })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n this.wasOpen = this.open;\n this.open = false;\n } else {\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n protected dispose = noop;\n\n @queryAssignedElements({ flatten: true })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\n\n protected longpressed = false;\n\n private longressTimeout!: ReturnType<typeof setTimeout>;\n\n @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n type: OverlayTypes = 'hint';\n\n protected wasOpen = false;\n\n private elementResolver = new ElementResolutionController(this);\n\n private get usesDialog(): boolean {\n return this.type === 'modal' || this.type === 'page';\n }\n\n private get popoverValue(): 'auto' | 'manual' | undefined {\n switch (this.type) {\n case 'modal':\n case 'page':\n return undefined;\n case 'hint':\n return 'manual';\n default:\n return this.type;\n }\n }\n\n /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie UI.\n if (this.type === 'page' || !this.open) return false;\n // Do not position content without a trigger element, what would you position it in relation to?\n // Do not automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected managePosition(): void {\n if (!this.requiresPosition || !this.open) return;\n\n const offset = this.offset || 0;\n const trigger = this.triggerElement as HTMLElement;\n const placement = (this.placement as Placement) || 'right';\n\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\n }\n\n protected async manageOpen(oldOpen: boolean): Promise<void> {\n if (!this.isConnected) return;\n\n if (!this.hasUpdated) {\n await this.updateComplete;\n }\n\n if (this.open) {\n overlayStack.add(this);\n } else {\n if (oldOpen) {\n this.dispose();\n }\n overlayStack.remove(this);\n }\n\n if (this.usesDialog) {\n this.manageDialogOpen();\n } else {\n this.managePopoverOpen();\n }\n if (this.open) {\n OverlayBase.openCount += 1;\n } else {\n // If the focus remains inside of the overlay or\n // a slotted descendent of the overlay you need to return\n // focus back to the trigger.\n const getAncestors = (): HTMLElement[] => {\n const ancestors: HTMLElement[] = [];\n // eslint-disable-next-line @spectrum-web-components/document-active-element\n let currentNode = document.activeElement;\n while (\n currentNode?.shadowRoot &&\n currentNode.shadowRoot.activeElement\n ) {\n currentNode = currentNode.shadowRoot.activeElement;\n }\n while (currentNode) {\n const ancestor =\n currentNode.assignedSlot ||\n currentNode.parentElement ||\n (currentNode.getRootNode() as ShadowRoot)?.host;\n if (ancestor) {\n ancestors.push(ancestor as HTMLElement);\n }\n currentNode = ancestor;\n }\n return ancestors;\n };\n if (\n (this.triggerElement as HTMLElement)?.focus &&\n (this.contains(\n (this.getRootNode() as Document).activeElement\n ) ||\n !!getAncestors().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected manageTriggerElement(triggerElement: HTMLElement | null): void {\n if (triggerElement) {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener(\n 'longpress',\n this.handleLongpress\n );\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n )\n return;\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n nextTriggerElement.addEventListener('click', this.handleClick);\n return;\n case 'longpress':\n nextTriggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n nextTriggerElement.addEventListener(\n 'keydown',\n this.handleKeydown\n );\n nextTriggerElement.addEventListener('keyup', this.handleKeyup);\n nextTriggerElement.addEventListener(\n 'longpress',\n this.handleLongpress\n );\n return;\n case 'hover':\n nextTriggerElement.addEventListener(\n 'focusin',\n this.handleFocusin\n );\n nextTriggerElement.addEventListener(\n 'focusout',\n this.handleFocusout\n );\n nextTriggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n nextTriggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n if (this.receivesFocus === 'true') return;\n\n this.prepareAriaDescribedby(nextTriggerElement);\n return;\n }\n }\n\n private elementIds: string[] = [];\n\n private prepareAriaDescribedby(trigger: HTMLElement): void {\n if (\n // only \"hover\" relationships establed described by content\n this.triggerInteraction !== 'hover' ||\n // do not reapply until target is recycled\n this.releaseAriaDescribedby !== noop ||\n // require \" hover content\" to apply relationship\n !this.elements.length\n )\n return;\n\n const triggerRoot = trigger.getRootNode();\n const contentRoot = this.elements[0].getRootNode();\n const overlayRoot = this.getRootNode();\n if (triggerRoot == overlayRoot) {\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [this.id]\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.releaseAriaDescribedby = noop;\n };\n } else if (triggerRoot === contentRoot) {\n this.elementIds = this.elements.map((el) => el.id);\n const appliedIds = this.elements.map((el) => {\n if (!el.id) {\n el.id = `${this.tagName.toLowerCase()}-helper-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n }\n return el.id;\n });\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n appliedIds\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.elements.map((el, index) => {\n el.id = this.elementIds[index];\n });\n this.releaseAriaDescribedby = noop;\n };\n }\n }\n\n private handlePointerdown = (event: PointerEvent): void => {\n if (!this.triggerElement) return;\n if (event.button !== 0) return;\n const triggerElement = this.triggerElement as HTMLElement;\n this.longpressed = false;\n triggerElement.addEventListener('pointerup', this.handlePointerup);\n triggerElement.addEventListener('pointercancel', this.handlePointerup);\n this.longressTimeout = setTimeout(() => {\n if (!triggerElement) return;\n triggerElement.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n };\n\n private handlePointerup = (): void => {\n clearTimeout(this.longressTimeout);\n if (!this.triggerElement) return;\n if (this.longpressed) {\n this.open = true;\n }\n setTimeout(() => {\n this.longpressed = false;\n });\n const triggerElement = this.triggerElement as HTMLElement;\n triggerElement.removeEventListener('pointerup', this.handlePointerup);\n triggerElement.removeEventListener(\n 'pointercancel',\n this.handlePointerup\n );\n };\n\n /**\n * @private\n */\n protected handleKeydown = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n if (code === 'ArrowDown') {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n }\n };\n\n protected handleKeyup = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n }\n };\n\n protected handleClick = (): void => {\n if (this.longpressed) return;\n this.open = !this.open;\n };\n\n private focusedin = false;\n\n protected handleFocusin = (): void => {\n this.open = true;\n this.focusedin = true;\n };\n\n protected handleFocusout = (): void => {\n this.focusedin = false;\n if (this.pointerentered) return;\n this.open = false;\n };\n\n private pointerentered = false;\n\n protected handlePointerenter = (): void => {\n this.open = true;\n this.pointerentered = true;\n };\n\n protected handlePointerleave = (event: PointerEvent): void => {\n if (\n this === event.relatedTarget ||\n this.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected handleOverlayPointerleave = (event: PointerEvent): void => {\n const hasNonVirtualTrigger =\n this.triggerElement &&\n this.triggerElement instanceof VirtualTrigger;\n if (\n this.triggerElement === event.relatedTarget ||\n (hasNonVirtualTrigger &&\n (this.triggerElement as HTMLElement).contains(\n event.relatedTarget as Node\n ))\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected doDointerleave(): void {\n this.pointerentered = false;\n const triggerElement = this.triggerElement as HTMLElement;\n if (this.focusedin && triggerElement.matches(':focus-visible')) return;\n this.open = false;\n }\n\n protected handleLongpress = (): void => {\n this.open = true;\n this.longpressed = true;\n };\n\n protected handleBeforetoggle(event: Event & { newState: string }): void {\n if (event.newState === 'open') {\n this.handlePopovershow();\n } else {\n this.handlePopoverhide();\n }\n }\n\n protected handlePopoverhide(): void {\n this.open = false;\n this.dispatchEvent(new BeforetoggleClosedEvent());\n }\n\n protected handlePopovershow(): void {\n this.dispatchEvent(new BeforetoggleOpenEvent());\n }\n\n public willPreventClose = false;\n\n public shouldPreventClose(): boolean {\n const shouldPreventClose = this.willPreventClose;\n this.willPreventClose = false;\n return shouldPreventClose;\n }\n\n override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n this.addEventListener('focusout', (event: FocusEvent) => {\n if (this.type !== 'auto') {\n return;\n }\n if (!event.relatedTarget) {\n this.open = false;\n return;\n }\n const relationEvent = new Event('overlay-relation-query', {\n bubbles: true,\n composed: true,\n });\n event.relatedTarget.addEventListener(\n relationEvent.type,\n (event: Event) => {\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n }\n );\n event.relatedTarget.dispatchEvent(relationEvent);\n });\n }\n if (!this.hasAttribute('id')) {\n this.setAttribute(\n 'id',\n `${this.tagName.toLowerCase()}-${crypto\n .randomUUID()\n .slice(0, 8)}`\n );\n }\n if (\n changes.has('open') &&\n (typeof changes.get('open') !== 'undefined' || this.open)\n ) {\n this.manageOpen(changes.get('open'));\n }\n if (changes.has('trigger')) {\n const [id, interaction] = this.trigger?.split('@') || [];\n this.elementResolver.selector = id ? `#${id}` : '';\n this.triggerInteraction = interaction as\n | 'click'\n | 'longpress'\n | 'hover'\n | undefined;\n }\n const oldTrigger = this.triggerElement as HTMLElement;\n if (changes.has(elementResolverUpdatedSymbol)) {\n this.triggerElement = this.elementResolver.element;\n this.manageTriggerElement(oldTrigger);\n }\n if (changes.has('triggerElement')) {\n this.manageTriggerElement(changes.get('triggerElement'));\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('placement')) {\n if (this.placement) {\n this.dialogEl.setAttribute('actual-placement', this.placement);\n } else {\n this.dialogEl.removeAttribute('actual-placement');\n }\n if (typeof changes.get('placement') !== 'undefined') {\n this.managePosition();\n }\n }\n }\n\n public override render(): TemplateResult {\n const hasPopoverAttribute = 'popover' in this;\n const popoverValue = hasPopoverAttribute\n ? this.popoverValue\n : undefined;\n return html`\n <dialog\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @close=${() => {\n this.open = false;\n }}\n @cancel=${() => {\n this.open = false;\n }}\n @beforetoggle=${this.handleBeforetoggle}\n @popovershow=${this.handlePopovershow}\n style=${styleMap({\n '--swc-overlay-z-index': OverlayBase.openCount.toString(),\n })}\n >\n <div part=\"content\">\n <slot\n @slotchange=${() => {\n if (this.triggerElement) {\n this.prepareAriaDescribedby(\n this.triggerElement as HTMLElement\n );\n }\n }}\n ></slot>\n </div>\n </dialog>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // this.manageOpen();\n this.addEventListener('close', () => {\n this.open = false;\n });\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 type { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.dev.js'\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.dev.js'\nimport { PlacementController } from './PlacementController.dev.js'\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nconst LONGPRESS_DURATION = 300;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\nexport const LONGPRESS_INSTRUCTIONS = {\n touch: 'Double tap and long press for additional options',\n keyboard: 'Press Space or Alt+Down Arrow for additional options',\n mouse: 'Click and hold for additional options',\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @query('dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n\n @property({ type: Boolean })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n this.wasOpen = this.open;\n this.open = false;\n } else {\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n protected dispose = noop;\n\n @queryAssignedElements({ flatten: true })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\n\n protected longpressed = false;\n\n private longressTimeout!: ReturnType<typeof setTimeout>;\n\n @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n type: OverlayTypes = 'hint';\n\n protected wasOpen = false;\n\n private elementResolver = new ElementResolutionController(this);\n\n private get usesDialog(): boolean {\n return this.type === 'modal' || this.type === 'page';\n }\n\n private get popoverValue(): 'auto' | 'manual' | undefined {\n switch (this.type) {\n case 'modal':\n case 'page':\n return undefined;\n case 'hint':\n return 'manual';\n default:\n return this.type;\n }\n }\n\n /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie UI.\n if (this.type === 'page' || !this.open) return false;\n // Do not position content without a trigger element, what would you position it in relation to?\n // Do not automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected managePosition(): void {\n if (!this.requiresPosition || !this.open) return;\n\n const offset = this.offset || 0;\n const trigger = this.triggerElement as HTMLElement;\n const placement = (this.placement as Placement) || 'right';\n\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\n }\n\n protected async manageOpen(oldOpen: boolean): Promise<void> {\n if (!this.isConnected) return;\n\n if (!this.hasUpdated) {\n await this.updateComplete;\n }\n\n if (this.open) {\n overlayStack.add(this);\n } else {\n if (oldOpen) {\n this.dispose();\n }\n overlayStack.remove(this);\n }\n\n if (this.usesDialog) {\n this.manageDialogOpen();\n } else {\n this.managePopoverOpen();\n }\n if (this.open) {\n OverlayBase.openCount += 1;\n } else {\n // If the focus remains inside of the overlay or\n // a slotted descendent of the overlay you need to return\n // focus back to the trigger.\n const getAncestors = (): HTMLElement[] => {\n const ancestors: HTMLElement[] = [];\n // eslint-disable-next-line @spectrum-web-components/document-active-element\n let currentNode = document.activeElement;\n while (\n currentNode?.shadowRoot &&\n currentNode.shadowRoot.activeElement\n ) {\n currentNode = currentNode.shadowRoot.activeElement;\n }\n while (currentNode) {\n const ancestor =\n currentNode.assignedSlot ||\n currentNode.parentElement ||\n (currentNode.getRootNode() as ShadowRoot)?.host;\n if (ancestor) {\n ancestors.push(ancestor as HTMLElement);\n }\n currentNode = ancestor;\n }\n return ancestors;\n };\n if (\n (this.triggerElement as HTMLElement)?.focus &&\n (this.contains(\n (this.getRootNode() as Document).activeElement\n ) ||\n !!getAncestors().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected manageTriggerElement(triggerElement: HTMLElement | null): void {\n if (triggerElement) {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener(\n 'longpress',\n this.handleLongpress\n );\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n )\n return;\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n nextTriggerElement.addEventListener('click', this.handleClick);\n return;\n case 'longpress':\n nextTriggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n nextTriggerElement.addEventListener(\n 'keydown',\n this.handleKeydown\n );\n nextTriggerElement.addEventListener('keyup', this.handleKeyup);\n nextTriggerElement.addEventListener(\n 'longpress',\n this.handleLongpress\n );\n return;\n case 'hover':\n nextTriggerElement.addEventListener(\n 'focusin',\n this.handleFocusin\n );\n nextTriggerElement.addEventListener(\n 'focusout',\n this.handleFocusout\n );\n nextTriggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n nextTriggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n if (this.receivesFocus === 'true') return;\n\n this.prepareAriaDescribedby(nextTriggerElement);\n return;\n }\n }\n\n private elementIds: string[] = [];\n\n private prepareAriaDescribedby(trigger: HTMLElement): void {\n if (\n // only \"hover\" relationships establed described by content\n this.triggerInteraction !== 'hover' ||\n // do not reapply until target is recycled\n this.releaseAriaDescribedby !== noop ||\n // require \" hover content\" to apply relationship\n !this.elements.length\n )\n return;\n\n const triggerRoot = trigger.getRootNode();\n const contentRoot = this.elements[0].getRootNode();\n const overlayRoot = this.getRootNode();\n if (triggerRoot == overlayRoot) {\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [this.id]\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.releaseAriaDescribedby = noop;\n };\n } else if (triggerRoot === contentRoot) {\n this.elementIds = this.elements.map((el) => el.id);\n const appliedIds = this.elements.map((el) => {\n if (!el.id) {\n el.id = `${this.tagName.toLowerCase()}-helper-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n }\n return el.id;\n });\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n appliedIds\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.elements.map((el, index) => {\n el.id = this.elementIds[index];\n });\n this.releaseAriaDescribedby = noop;\n };\n }\n }\n\n private handlePointerdown = (event: PointerEvent): void => {\n if (!this.triggerElement) return;\n if (event.button !== 0) return;\n const triggerElement = this.triggerElement as HTMLElement;\n this.longpressed = false;\n triggerElement.addEventListener('pointerup', this.handlePointerup);\n triggerElement.addEventListener('pointercancel', this.handlePointerup);\n this.longressTimeout = setTimeout(() => {\n if (!triggerElement) return;\n triggerElement.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n };\n\n private handlePointerup = (): void => {\n clearTimeout(this.longressTimeout);\n if (!this.triggerElement) return;\n if (this.longpressed) {\n this.open = true;\n }\n setTimeout(() => {\n this.longpressed = false;\n });\n const triggerElement = this.triggerElement as HTMLElement;\n triggerElement.removeEventListener('pointerup', this.handlePointerup);\n triggerElement.removeEventListener(\n 'pointercancel',\n this.handlePointerup\n );\n };\n\n /**\n * @private\n */\n protected handleKeydown = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n if (code === 'ArrowDown') {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n }\n };\n\n protected handleKeyup = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n }\n };\n\n protected handleClick = (): void => {\n if (this.longpressed) return;\n this.open = !this.open;\n };\n\n private focusedin = false;\n\n protected handleFocusin = (): void => {\n this.open = true;\n this.focusedin = true;\n };\n\n protected handleFocusout = (): void => {\n this.focusedin = false;\n if (this.pointerentered) return;\n this.open = false;\n };\n\n private pointerentered = false;\n\n protected handlePointerenter = (): void => {\n this.open = true;\n this.pointerentered = true;\n };\n\n protected handlePointerleave = (event: PointerEvent): void => {\n if (\n this === event.relatedTarget ||\n this.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected handleOverlayPointerleave = (event: PointerEvent): void => {\n const hasNonVirtualTrigger =\n this.triggerElement &&\n this.triggerElement instanceof VirtualTrigger;\n if (\n this.triggerElement === event.relatedTarget ||\n (hasNonVirtualTrigger &&\n (this.triggerElement as HTMLElement).contains(\n event.relatedTarget as Node\n ))\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected doDointerleave(): void {\n this.pointerentered = false;\n const triggerElement = this.triggerElement as HTMLElement;\n if (this.focusedin && triggerElement.matches(':focus-visible')) return;\n this.open = false;\n }\n\n protected handleLongpress = (): void => {\n this.open = true;\n this.longpressed = true;\n };\n\n protected handleBeforetoggle(event: Event & { newState: string }): void {\n if (event.newState === 'open') {\n this.handlePopovershow();\n } else {\n this.handlePopoverhide();\n }\n }\n\n protected handlePopoverhide(): void {\n this.open = false;\n this.dispatchEvent(new BeforetoggleClosedEvent());\n }\n\n protected handlePopovershow(): void {\n this.dispatchEvent(new BeforetoggleOpenEvent());\n }\n\n public willPreventClose = false;\n\n public shouldPreventClose(): boolean {\n const shouldPreventClose = this.willPreventClose;\n this.willPreventClose = false;\n return shouldPreventClose;\n }\n\n override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n this.addEventListener('focusout', (event: FocusEvent) => {\n if (this.type !== 'auto') {\n return;\n }\n if (!event.relatedTarget) {\n this.open = false;\n return;\n }\n const relationEvent = new Event('overlay-relation-query', {\n bubbles: true,\n composed: true,\n });\n event.relatedTarget.addEventListener(\n relationEvent.type,\n (event: Event) => {\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n }\n );\n event.relatedTarget.dispatchEvent(relationEvent);\n });\n }\n if (!this.hasAttribute('id')) {\n this.setAttribute(\n 'id',\n `${this.tagName.toLowerCase()}-${crypto\n .randomUUID()\n .slice(0, 8)}`\n );\n }\n if (\n changes.has('open') &&\n (typeof changes.get('open') !== 'undefined' || this.open)\n ) {\n this.manageOpen(changes.get('open'));\n }\n if (changes.has('trigger')) {\n const [id, interaction] = this.trigger?.split('@') || [];\n this.elementResolver.selector = id ? `#${id}` : '';\n this.triggerInteraction = interaction as\n | 'click'\n | 'longpress'\n | 'hover'\n | undefined;\n }\n const oldTrigger = this.triggerElement as HTMLElement;\n if (changes.has(elementResolverUpdatedSymbol)) {\n this.triggerElement = this.elementResolver.element;\n this.manageTriggerElement(oldTrigger);\n }\n if (changes.has('triggerElement')) {\n this.manageTriggerElement(changes.get('triggerElement'));\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('placement')) {\n if (this.placement) {\n this.dialogEl.setAttribute('actual-placement', this.placement);\n } else {\n this.dialogEl.removeAttribute('actual-placement');\n }\n if (typeof changes.get('placement') !== 'undefined') {\n this.managePosition();\n }\n }\n }\n\n public override render(): TemplateResult {\n const hasPopoverAttribute = 'popover' in this;\n const popoverValue = hasPopoverAttribute\n ? this.popoverValue\n : undefined;\n return html`\n <dialog\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @close=${() => {\n this.open = false;\n }}\n @cancel=${() => {\n this.open = false;\n }}\n @beforetoggle=${this.handleBeforetoggle}\n @popovershow=${this.handlePopovershow}\n style=${styleMap({\n '--swc-overlay-z-index': OverlayBase.openCount.toString(),\n })}\n >\n <div part=\"content\">\n <slot\n @slotchange=${() => {\n if (this.triggerElement) {\n this.prepareAriaDescribedby(\n this.triggerElement as HTMLElement\n );\n }\n }}\n ></slot>\n </div>\n </dialog>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // this.manageOpen();\n this.addEventListener('close', () => {\n this.open = false;\n });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_a", "event"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["OverlayBase.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 { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.js';\nimport { PlacementController } from './PlacementController.js';\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nconst LONGPRESS_DURATION = 300;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\nexport const LONGPRESS_INSTRUCTIONS = {\n touch: 'Double tap and long press for additional options',\n keyboard: 'Press Space or Alt+Down Arrow for additional options',\n mouse: 'Click and hold for additional options',\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\n/**\n * @element sp-overlay\n */\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @query('dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n\n @property({ type: Boolean })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n this.wasOpen = this.open;\n this.open = false;\n } else {\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n protected dispose = noop;\n\n @queryAssignedElements({ flatten: true })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\n\n protected longpressed = false;\n\n private longressTimeout!: ReturnType<typeof setTimeout>;\n\n @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n type: OverlayTypes = 'hint';\n\n protected wasOpen = false;\n\n private elementResolver = new ElementResolutionController(this);\n\n private get usesDialog(): boolean {\n return this.type === 'modal' || this.type === 'page';\n }\n\n private get popoverValue(): 'auto' | 'manual' | undefined {\n switch (this.type) {\n case 'modal':\n case 'page':\n return undefined;\n case 'hint':\n return 'manual';\n default:\n return this.type;\n }\n }\n\n /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie UI.\n if (this.type === 'page' || !this.open) return false;\n // Do not position content without a trigger element, what would you position it in relation to?\n // Do not automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected managePosition(): void {\n if (!this.requiresPosition || !this.open) return;\n\n const offset = this.offset || 0;\n const trigger = this.triggerElement as HTMLElement;\n const placement = (this.placement as Placement) || 'right';\n\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\n }\n\n protected async manageOpen(oldOpen: boolean): Promise<void> {\n if (!this.isConnected) return;\n\n if (!this.hasUpdated) {\n await this.updateComplete;\n }\n\n if (this.open) {\n overlayStack.add(this);\n } else {\n if (oldOpen) {\n this.dispose();\n }\n overlayStack.remove(this);\n }\n\n if (this.usesDialog) {\n this.manageDialogOpen();\n } else {\n this.managePopoverOpen();\n }\n if (this.open) {\n OverlayBase.openCount += 1;\n } else {\n // If the focus remains inside of the overlay or\n // a slotted descendent of the overlay you need to return\n // focus back to the trigger.\n const getAncestors = (): HTMLElement[] => {\n const ancestors: HTMLElement[] = [];\n // eslint-disable-next-line @spectrum-web-components/document-active-element\n let currentNode = document.activeElement;\n while (\n currentNode?.shadowRoot &&\n currentNode.shadowRoot.activeElement\n ) {\n currentNode = currentNode.shadowRoot.activeElement;\n }\n while (currentNode) {\n const ancestor =\n currentNode.assignedSlot ||\n currentNode.parentElement ||\n (currentNode.getRootNode() as ShadowRoot)?.host;\n if (ancestor) {\n ancestors.push(ancestor as HTMLElement);\n }\n currentNode = ancestor;\n }\n return ancestors;\n };\n if (\n (this.triggerElement as HTMLElement)?.focus &&\n (this.contains(\n (this.getRootNode() as Document).activeElement\n ) ||\n !!getAncestors().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected manageTriggerElement(triggerElement: HTMLElement | null): void {\n if (triggerElement) {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener(\n 'longpress',\n this.handleLongpress\n );\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n )\n return;\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n nextTriggerElement.addEventListener('click', this.handleClick);\n return;\n case 'longpress':\n nextTriggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n nextTriggerElement.addEventListener(\n 'keydown',\n this.handleKeydown\n );\n nextTriggerElement.addEventListener('keyup', this.handleKeyup);\n nextTriggerElement.addEventListener(\n 'longpress',\n this.handleLongpress\n );\n return;\n case 'hover':\n nextTriggerElement.addEventListener(\n 'focusin',\n this.handleFocusin\n );\n nextTriggerElement.addEventListener(\n 'focusout',\n this.handleFocusout\n );\n nextTriggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n nextTriggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n if (this.receivesFocus === 'true') return;\n\n this.prepareAriaDescribedby(nextTriggerElement);\n return;\n }\n }\n\n private elementIds: string[] = [];\n\n private prepareAriaDescribedby(trigger: HTMLElement): void {\n if (\n // only \"hover\" relationships establed described by content\n this.triggerInteraction !== 'hover' ||\n // do not reapply until target is recycled\n this.releaseAriaDescribedby !== noop ||\n // require \" hover content\" to apply relationship\n !this.elements.length\n )\n return;\n\n const triggerRoot = trigger.getRootNode();\n const contentRoot = this.elements[0].getRootNode();\n const overlayRoot = this.getRootNode();\n if (triggerRoot == overlayRoot) {\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [this.id]\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.releaseAriaDescribedby = noop;\n };\n } else if (triggerRoot === contentRoot) {\n this.elementIds = this.elements.map((el) => el.id);\n const appliedIds = this.elements.map((el) => {\n if (!el.id) {\n el.id = `${this.tagName.toLowerCase()}-helper-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n }\n return el.id;\n });\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n appliedIds\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.elements.map((el, index) => {\n el.id = this.elementIds[index];\n });\n this.releaseAriaDescribedby = noop;\n };\n }\n }\n\n private handlePointerdown = (event: PointerEvent): void => {\n if (!this.triggerElement) return;\n if (event.button !== 0) return;\n const triggerElement = this.triggerElement as HTMLElement;\n this.longpressed = false;\n triggerElement.addEventListener('pointerup', this.handlePointerup);\n triggerElement.addEventListener('pointercancel', this.handlePointerup);\n this.longressTimeout = setTimeout(() => {\n if (!triggerElement) return;\n triggerElement.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n };\n\n private handlePointerup = (): void => {\n clearTimeout(this.longressTimeout);\n if (!this.triggerElement) return;\n if (this.longpressed) {\n this.open = true;\n }\n setTimeout(() => {\n this.longpressed = false;\n });\n const triggerElement = this.triggerElement as HTMLElement;\n triggerElement.removeEventListener('pointerup', this.handlePointerup);\n triggerElement.removeEventListener(\n 'pointercancel',\n this.handlePointerup\n );\n };\n\n /**\n * @private\n */\n protected handleKeydown = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n if (code === 'ArrowDown') {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n }\n };\n\n protected handleKeyup = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n }\n };\n\n protected handleClick = (): void => {\n if (this.longpressed) return;\n this.open = !this.open;\n };\n\n private focusedin = false;\n\n protected handleFocusin = (): void => {\n this.open = true;\n this.focusedin = true;\n };\n\n protected handleFocusout = (): void => {\n this.focusedin = false;\n if (this.pointerentered) return;\n this.open = false;\n };\n\n private pointerentered = false;\n\n protected handlePointerenter = (): void => {\n this.open = true;\n this.pointerentered = true;\n };\n\n protected handlePointerleave = (event: PointerEvent): void => {\n if (\n this === event.relatedTarget ||\n this.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected handleOverlayPointerleave = (event: PointerEvent): void => {\n const hasNonVirtualTrigger =\n this.triggerElement &&\n this.triggerElement instanceof VirtualTrigger;\n if (\n this.triggerElement === event.relatedTarget ||\n (hasNonVirtualTrigger &&\n (this.triggerElement as HTMLElement).contains(\n event.relatedTarget as Node\n ))\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected doDointerleave(): void {\n this.pointerentered = false;\n const triggerElement = this.triggerElement as HTMLElement;\n if (this.focusedin && triggerElement.matches(':focus-visible')) return;\n this.open = false;\n }\n\n protected handleLongpress = (): void => {\n this.open = true;\n this.longpressed = true;\n };\n\n protected handleBeforetoggle(event: Event & { newState: string }): void {\n if (event.newState === 'open') {\n this.handlePopovershow();\n } else {\n this.handlePopoverhide();\n }\n }\n\n protected handlePopoverhide(): void {\n this.open = false;\n this.dispatchEvent(new BeforetoggleClosedEvent());\n }\n\n protected handlePopovershow(): void {\n this.dispatchEvent(new BeforetoggleOpenEvent());\n }\n\n public willPreventClose = false;\n\n public shouldPreventClose(): boolean {\n const shouldPreventClose = this.willPreventClose;\n this.willPreventClose = false;\n return shouldPreventClose;\n }\n\n override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n this.addEventListener('focusout', (event: FocusEvent) => {\n if (this.type !== 'auto') {\n return;\n }\n if (!event.relatedTarget) {\n this.open = false;\n return;\n }\n const relationEvent = new Event('overlay-relation-query', {\n bubbles: true,\n composed: true,\n });\n event.relatedTarget.addEventListener(\n relationEvent.type,\n (event: Event) => {\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n }\n );\n event.relatedTarget.dispatchEvent(relationEvent);\n });\n }\n if (!this.hasAttribute('id')) {\n this.setAttribute(\n 'id',\n `${this.tagName.toLowerCase()}-${crypto\n .randomUUID()\n .slice(0, 8)}`\n );\n }\n if (\n changes.has('open') &&\n (typeof changes.get('open') !== 'undefined' || this.open)\n ) {\n this.manageOpen(changes.get('open'));\n }\n if (changes.has('trigger')) {\n const [id, interaction] = this.trigger?.split('@') || [];\n this.elementResolver.selector = id ? `#${id}` : '';\n this.triggerInteraction = interaction as\n | 'click'\n | 'longpress'\n | 'hover'\n | undefined;\n }\n const oldTrigger = this.triggerElement as HTMLElement;\n if (changes.has(elementResolverUpdatedSymbol)) {\n this.triggerElement = this.elementResolver.element;\n this.manageTriggerElement(oldTrigger);\n }\n if (changes.has('triggerElement')) {\n this.manageTriggerElement(changes.get('triggerElement'));\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('placement')) {\n if (this.placement) {\n this.dialogEl.setAttribute('actual-placement', this.placement);\n } else {\n this.dialogEl.removeAttribute('actual-placement');\n }\n if (typeof changes.get('placement') !== 'undefined') {\n this.managePosition();\n }\n }\n }\n\n public override render(): TemplateResult {\n const hasPopoverAttribute = 'popover' in this;\n const popoverValue = hasPopoverAttribute\n ? this.popoverValue\n : undefined;\n return html`\n <dialog\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @close=${() => {\n this.open = false;\n }}\n @cancel=${() => {\n this.open = false;\n }}\n @beforetoggle=${this.handleBeforetoggle}\n @popovershow=${this.handlePopovershow}\n style=${styleMap({\n '--swc-overlay-z-index': OverlayBase.openCount.toString(),\n })}\n >\n <div part=\"content\">\n <slot\n @slotchange=${() => {\n if (this.triggerElement) {\n this.prepareAriaDescribedby(\n this.triggerElement as HTMLElement\n );\n }\n }}\n ></slot>\n </div>\n </dialog>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // this.manageOpen();\n this.addEventListener('close', () => {\n this.open = false;\n });\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 type { Placement } from '@floating-ui/dom';\nimport {\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport { conditionAttributeWithId } from '@spectrum-web-components/base/src/condition-attribute-with-id.js';\nimport {\n ElementResolutionController,\n elementResolverUpdatedSymbol,\n} from '@spectrum-web-components/reactive-controllers/src/ElementResolution.js';\nimport { VirtualTrigger } from './VirtualTrigger.js';\nimport {\n ifDefined,\n styleMap,\n} from '@spectrum-web-components/base/src/directives.js';\nimport styles from './overlay-base.css.js';\nimport { overlayStack } from './OverlayStack.js';\nimport { PlacementController } from './PlacementController.js';\n\nexport type OpenableElement = HTMLElement & {\n open: boolean;\n tipElement?: HTMLElement;\n updateComplete?: Promise<void>;\n};\n\nexport type OverlayTypes = 'auto' | 'hint' | 'manual' | 'modal' | 'page';\n\nconst LONGPRESS_DURATION = 300;\n\nexport type LongpressEvent = {\n source: 'pointer' | 'keyboard';\n};\n\nexport const LONGPRESS_INSTRUCTIONS = {\n touch: 'Double tap and long press for additional options',\n keyboard: 'Press Space or Alt+Down Arrow for additional options',\n mouse: 'Click and hold for additional options',\n};\n\nexport class BeforetoggleClosedEvent extends Event {\n currentState = 'open';\n newState = 'closed';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport class BeforetoggleOpenEvent extends Event {\n currentState = 'closed';\n newState = 'open';\n constructor() {\n super('beforetoggle', {\n bubbles: false,\n composed: false,\n });\n }\n}\n\nexport const noop = (): void => {\n return;\n};\n\n/**\n * Apply a \"transitionend\" listener to an element that may not transition but\n * guarantee the callback will be fired either way.\n *\n * @param el {HTMLElement} - Target of the \"transition\" listeners.\n * @param action {Function} - Method to trigger the \"transition\".\n * @param cb {Function} - Callback to trigger when the \"transition\" has ended.\n */\nexport const guaranteedTransitionend = (\n el: HTMLElement,\n action: () => void,\n cb: () => void\n): void => {\n const cleanup = (): void => {\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.removeEventListener('transitionend', handleTransitionend);\n cb();\n };\n let guarantee2: number;\n let guarantee3: number;\n // WebKit fires `transitionrun` a little earlier, so the inner/outer relationship\n // here allows WebKit to be caught, but doesn't remove the animation listener until\n // after it would have fired in Chromium.\n const guarantee1 = requestAnimationFrame(() => {\n guarantee2 = requestAnimationFrame(() => {\n guarantee3 = requestAnimationFrame(() => {\n cleanup();\n });\n });\n });\n const handleTransitionend = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cleanup();\n };\n const handleTransitionrun = (event: TransitionEvent): void => {\n if (event.propertyName === 'visibility') {\n // Ignore \"visibility\" transitions because they often happen before/after a\n // larger transition and don't represent the overall transition duration.\n return;\n }\n cancelAnimationFrame(guarantee1);\n cancelAnimationFrame(guarantee2);\n cancelAnimationFrame(guarantee3);\n el.removeEventListener('transitionrun', handleTransitionrun);\n el.addEventListener('transitionend', handleTransitionend);\n };\n el.addEventListener('transitionrun', handleTransitionrun);\n action();\n};\n\nexport class OverlayBase extends SpectrumElement {\n static override styles = [styles];\n\n @query('dialog')\n dialogEl!: HTMLDialogElement & {\n showPopover(): void;\n hidePopover(): void;\n };\n\n @property({ type: Boolean })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n if (disabled) {\n this.wasOpen = this.open;\n this.open = false;\n } else {\n this.open = this.open || this.wasOpen;\n this.wasOpen = false;\n }\n }\n\n private _disabled = false;\n\n protected dispose = noop;\n\n @queryAssignedElements({ flatten: true })\n elements!: OpenableElement[];\n\n public parentOverlayToForceClose?: OverlayBase;\n\n protected longpressed = false;\n\n private longressTimeout!: ReturnType<typeof setTimeout>;\n\n @property()\n offset: number | [number, number] = 6;\n\n public placementController = new PlacementController(this);\n\n @property({ type: Boolean, reflect: true })\n get open(): boolean {\n return this._open;\n }\n\n set open(open: boolean) {\n if (open && this.disabled) return;\n if (open === this.open) return;\n this._open = open;\n this.requestUpdate('open', !this.open);\n }\n\n private _open = false;\n\n static openCount = 1;\n\n @property()\n placement?: Placement;\n\n @property({ attribute: 'receives-focus' })\n receivesFocus: 'true' | 'false' | 'auto' = 'auto';\n\n private releaseAriaDescribedby = noop;\n\n @query('slot')\n slotEl!: HTMLSlotElement;\n\n @property()\n trigger?: string;\n\n @state()\n triggerElement: HTMLElement | VirtualTrigger | null = null;\n\n @state()\n triggerInteraction?: 'click' | 'longpress' | 'hover';\n\n @property()\n type: OverlayTypes = 'hint';\n\n protected wasOpen = false;\n\n private elementResolver = new ElementResolutionController(this);\n\n private get usesDialog(): boolean {\n return this.type === 'modal' || this.type === 'page';\n }\n\n private get popoverValue(): 'auto' | 'manual' | undefined {\n switch (this.type) {\n case 'modal':\n case 'page':\n return undefined;\n case 'hint':\n return 'manual';\n default:\n return this.type;\n }\n }\n\n /* c8 ignore next 12 */\n protected async manageDialogOpen(): Promise<void> {\n console.warn(\n 'Implement the `manageDialogOpen` method in a class extension.'\n );\n }\n\n protected async managePopoverOpen(): Promise<void> {\n console.warn(\n 'Implement the `managePopoverOpen` method in a class extension.'\n );\n }\n\n protected get requiresPosition(): boolean {\n // Do no position \"page\" overlays as they should block the entrie UI.\n if (this.type === 'page' || !this.open) return false;\n // Do not position content without a trigger element, what would you position it in relation to?\n // Do not automaticallyu position contnent, unless it is a \"hint\".\n if (!this.triggerElement || (!this.placement && this.type !== 'hint'))\n return false;\n return true;\n }\n\n protected managePosition(): void {\n if (!this.requiresPosition || !this.open) return;\n\n const offset = this.offset || 0;\n const trigger = this.triggerElement as HTMLElement;\n const placement = (this.placement as Placement) || 'right';\n\n this.placementController.placeOverlay(this.dialogEl, {\n // delayed?: boolean,\n offset,\n placement,\n // notImmediatelyClosable?: boolean, // rename or place behind other API options\n // receivesFocus?: 'auto';\n // root?: HTMLElement;\n trigger,\n type: this.type,\n });\n }\n\n protected async manageOpen(oldOpen: boolean): Promise<void> {\n if (!this.isConnected) return;\n\n if (!this.hasUpdated) {\n await this.updateComplete;\n }\n\n if (this.open) {\n overlayStack.add(this);\n } else {\n if (oldOpen) {\n this.dispose();\n }\n overlayStack.remove(this);\n }\n\n if (this.usesDialog) {\n this.manageDialogOpen();\n } else {\n this.managePopoverOpen();\n }\n if (this.open) {\n OverlayBase.openCount += 1;\n } else {\n // If the focus remains inside of the overlay or\n // a slotted descendent of the overlay you need to return\n // focus back to the trigger.\n const getAncestors = (): HTMLElement[] => {\n const ancestors: HTMLElement[] = [];\n // eslint-disable-next-line @spectrum-web-components/document-active-element\n let currentNode = document.activeElement;\n while (\n currentNode?.shadowRoot &&\n currentNode.shadowRoot.activeElement\n ) {\n currentNode = currentNode.shadowRoot.activeElement;\n }\n while (currentNode) {\n const ancestor =\n currentNode.assignedSlot ||\n currentNode.parentElement ||\n (currentNode.getRootNode() as ShadowRoot)?.host;\n if (ancestor) {\n ancestors.push(ancestor as HTMLElement);\n }\n currentNode = ancestor;\n }\n return ancestors;\n };\n if (\n (this.triggerElement as HTMLElement)?.focus &&\n (this.contains(\n (this.getRootNode() as Document).activeElement\n ) ||\n !!getAncestors().find((el) => el === this))\n ) {\n (this.triggerElement as HTMLElement).focus();\n }\n }\n }\n\n protected manageTriggerElement(triggerElement: HTMLElement | null): void {\n if (triggerElement) {\n triggerElement.removeEventListener('click', this.handleClick);\n triggerElement.removeEventListener('focusin', this.handleFocusin);\n triggerElement.removeEventListener('focusout', this.handleFocusout);\n triggerElement.removeEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n triggerElement.removeEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.removeEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n triggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n triggerElement.removeEventListener('keydown', this.handleKeydown);\n triggerElement.removeEventListener('keyup', this.handleKeyup);\n triggerElement.removeEventListener(\n 'longpress',\n this.handleLongpress\n );\n this.releaseAriaDescribedby();\n }\n if (\n !this.triggerElement ||\n !!(this.triggerElement as VirtualTrigger).updateBoundingClientRect\n )\n return;\n const nextTriggerElement = this.triggerElement as HTMLElement;\n switch (this.triggerInteraction) {\n case 'click':\n nextTriggerElement.addEventListener('click', this.handleClick);\n return;\n case 'longpress':\n nextTriggerElement.addEventListener(\n 'pointerdown',\n this.handlePointerdown\n );\n nextTriggerElement.addEventListener(\n 'keydown',\n this.handleKeydown\n );\n nextTriggerElement.addEventListener('keyup', this.handleKeyup);\n nextTriggerElement.addEventListener(\n 'longpress',\n this.handleLongpress\n );\n return;\n case 'hover':\n nextTriggerElement.addEventListener(\n 'focusin',\n this.handleFocusin\n );\n nextTriggerElement.addEventListener(\n 'focusout',\n this.handleFocusout\n );\n nextTriggerElement.addEventListener(\n 'pointerenter',\n this.handlePointerenter\n );\n nextTriggerElement.addEventListener(\n 'pointerleave',\n this.handlePointerleave\n );\n this.addEventListener(\n 'pointerleave',\n this.handleOverlayPointerleave\n );\n if (this.receivesFocus === 'true') return;\n\n this.prepareAriaDescribedby(nextTriggerElement);\n return;\n }\n }\n\n private elementIds: string[] = [];\n\n private prepareAriaDescribedby(trigger: HTMLElement): void {\n if (\n // only \"hover\" relationships establed described by content\n this.triggerInteraction !== 'hover' ||\n // do not reapply until target is recycled\n this.releaseAriaDescribedby !== noop ||\n // require \" hover content\" to apply relationship\n !this.elements.length\n )\n return;\n\n const triggerRoot = trigger.getRootNode();\n const contentRoot = this.elements[0].getRootNode();\n const overlayRoot = this.getRootNode();\n if (triggerRoot == overlayRoot) {\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n [this.id]\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.releaseAriaDescribedby = noop;\n };\n } else if (triggerRoot === contentRoot) {\n this.elementIds = this.elements.map((el) => el.id);\n const appliedIds = this.elements.map((el) => {\n if (!el.id) {\n el.id = `${this.tagName.toLowerCase()}-helper-${crypto\n .randomUUID()\n .slice(0, 8)}`;\n }\n return el.id;\n });\n const releaseAriaDescribedby = conditionAttributeWithId(\n trigger,\n 'aria-describedby',\n appliedIds\n );\n this.releaseAriaDescribedby = () => {\n releaseAriaDescribedby();\n this.elements.map((el, index) => {\n el.id = this.elementIds[index];\n });\n this.releaseAriaDescribedby = noop;\n };\n }\n }\n\n private handlePointerdown = (event: PointerEvent): void => {\n if (!this.triggerElement) return;\n if (event.button !== 0) return;\n const triggerElement = this.triggerElement as HTMLElement;\n this.longpressed = false;\n triggerElement.addEventListener('pointerup', this.handlePointerup);\n triggerElement.addEventListener('pointercancel', this.handlePointerup);\n this.longressTimeout = setTimeout(() => {\n if (!triggerElement) return;\n triggerElement.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'pointer',\n },\n })\n );\n }, LONGPRESS_DURATION);\n };\n\n private handlePointerup = (): void => {\n clearTimeout(this.longressTimeout);\n if (!this.triggerElement) return;\n if (this.longpressed) {\n this.open = true;\n }\n setTimeout(() => {\n this.longpressed = false;\n });\n const triggerElement = this.triggerElement as HTMLElement;\n triggerElement.removeEventListener('pointerup', this.handlePointerup);\n triggerElement.removeEventListener(\n 'pointercancel',\n this.handlePointerup\n );\n };\n\n /**\n * @private\n */\n protected handleKeydown = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n if (code === 'ArrowDown') {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n }\n };\n\n protected handleKeyup = (event: KeyboardEvent): void => {\n const { code, altKey } = event;\n if (code === 'Space' || (altKey && code === 'ArrowDown')) {\n event.stopPropagation();\n this.dispatchEvent(\n new CustomEvent<LongpressEvent>('longpress', {\n bubbles: true,\n composed: true,\n detail: {\n source: 'keyboard',\n },\n })\n );\n }\n };\n\n protected handleClick = (): void => {\n if (this.longpressed) return;\n this.open = !this.open;\n };\n\n private focusedin = false;\n\n protected handleFocusin = (): void => {\n this.open = true;\n this.focusedin = true;\n };\n\n protected handleFocusout = (): void => {\n this.focusedin = false;\n if (this.pointerentered) return;\n this.open = false;\n };\n\n private pointerentered = false;\n\n protected handlePointerenter = (): void => {\n this.open = true;\n this.pointerentered = true;\n };\n\n protected handlePointerleave = (event: PointerEvent): void => {\n if (\n this === event.relatedTarget ||\n this.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected handleOverlayPointerleave = (event: PointerEvent): void => {\n const hasNonVirtualTrigger =\n this.triggerElement &&\n this.triggerElement instanceof VirtualTrigger;\n if (\n this.triggerElement === event.relatedTarget ||\n (hasNonVirtualTrigger &&\n (this.triggerElement as HTMLElement).contains(\n event.relatedTarget as Node\n ))\n ) {\n return;\n }\n this.doDointerleave();\n };\n\n protected doDointerleave(): void {\n this.pointerentered = false;\n const triggerElement = this.triggerElement as HTMLElement;\n if (this.focusedin && triggerElement.matches(':focus-visible')) return;\n this.open = false;\n }\n\n protected handleLongpress = (): void => {\n this.open = true;\n this.longpressed = true;\n };\n\n protected handleBeforetoggle(event: Event & { newState: string }): void {\n if (event.newState === 'open') {\n this.handlePopovershow();\n } else {\n this.handlePopoverhide();\n }\n }\n\n protected handlePopoverhide(): void {\n this.open = false;\n this.dispatchEvent(new BeforetoggleClosedEvent());\n }\n\n protected handlePopovershow(): void {\n this.dispatchEvent(new BeforetoggleOpenEvent());\n }\n\n public willPreventClose = false;\n\n public shouldPreventClose(): boolean {\n const shouldPreventClose = this.willPreventClose;\n this.willPreventClose = false;\n return shouldPreventClose;\n }\n\n override willUpdate(changes: PropertyValues): void {\n if (!this.hasUpdated) {\n this.addEventListener('focusout', (event: FocusEvent) => {\n if (this.type !== 'auto') {\n return;\n }\n if (!event.relatedTarget) {\n this.open = false;\n return;\n }\n const relationEvent = new Event('overlay-relation-query', {\n bubbles: true,\n composed: true,\n });\n event.relatedTarget.addEventListener(\n relationEvent.type,\n (event: Event) => {\n if (!event.composedPath().includes(this)) {\n this.open = false;\n }\n }\n );\n event.relatedTarget.dispatchEvent(relationEvent);\n });\n }\n if (!this.hasAttribute('id')) {\n this.setAttribute(\n 'id',\n `${this.tagName.toLowerCase()}-${crypto\n .randomUUID()\n .slice(0, 8)}`\n );\n }\n if (\n changes.has('open') &&\n (typeof changes.get('open') !== 'undefined' || this.open)\n ) {\n this.manageOpen(changes.get('open'));\n }\n if (changes.has('trigger')) {\n const [id, interaction] = this.trigger?.split('@') || [];\n this.elementResolver.selector = id ? `#${id}` : '';\n this.triggerInteraction = interaction as\n | 'click'\n | 'longpress'\n | 'hover'\n | undefined;\n }\n const oldTrigger = this.triggerElement as HTMLElement;\n if (changes.has(elementResolverUpdatedSymbol)) {\n this.triggerElement = this.elementResolver.element;\n this.manageTriggerElement(oldTrigger);\n }\n if (changes.has('triggerElement')) {\n this.manageTriggerElement(changes.get('triggerElement'));\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('placement')) {\n if (this.placement) {\n this.dialogEl.setAttribute('actual-placement', this.placement);\n } else {\n this.dialogEl.removeAttribute('actual-placement');\n }\n if (typeof changes.get('placement') !== 'undefined') {\n this.managePosition();\n }\n }\n }\n\n public override render(): TemplateResult {\n const hasPopoverAttribute = 'popover' in this;\n const popoverValue = hasPopoverAttribute\n ? this.popoverValue\n : undefined;\n return html`\n <dialog\n part=\"dialog\"\n popover=${ifDefined(popoverValue)}\n @close=${() => {\n this.open = false;\n }}\n @cancel=${() => {\n this.open = false;\n }}\n @beforetoggle=${this.handleBeforetoggle}\n @popovershow=${this.handlePopovershow}\n style=${styleMap({\n '--swc-overlay-z-index': OverlayBase.openCount.toString(),\n })}\n >\n <div part=\"content\">\n <slot\n @slotchange=${() => {\n if (this.triggerElement) {\n this.prepareAriaDescribedby(\n this.triggerElement as HTMLElement\n );\n }\n }}\n ></slot>\n </div>\n </dialog>\n `;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n // this.manageOpen();\n this.addEventListener('close', () => {\n this.open = false;\n });\n }\n}\n"],
5
+ "mappings": "qNAaA,OACI,QAAAA,EAEA,mBAAAC,MAEG,gCACP,OACI,YAAAC,EACA,SAAAC,EACA,yBAAAC,EACA,SAAAC,MACG,kDACP,OAAS,4BAAAC,MAAgC,mEACzC,OACI,+BAAAC,EACA,gCAAAC,MACG,yEACP,OAAS,kBAAAC,MAAsB,sBAC/B,OACI,aAAAC,EACA,YAAAC,MACG,kDACP,OAAOC,MAAY,wBACnB,OAAS,gBAAAC,MAAoB,oBAC7B,OAAS,uBAAAC,MAA2B,2BAUpC,MAAMC,EAAqB,IAMpB,aAAM,uBAAyB,CAClC,MAAO,mDACP,SAAU,uDACV,MAAO,uCACX,EAEO,aAAM,gCAAgC,KAAM,CAG/C,aAAc,CACV,MAAM,eAAgB,CAClB,QAAS,GACT,SAAU,EACd,CAAC,EANL,kBAAe,OACf,cAAW,QAMX,CACJ,CAEO,aAAM,8BAA8B,KAAM,CAG7C,aAAc,CACV,MAAM,eAAgB,CAClB,QAAS,GACT,SAAU,EACd,CAAC,EANL,kBAAe,SACf,cAAW,MAMX,CACJ,CAEO,aAAM,KAAO,IAAY,CAEhC,EAUa,wBAA0B,CACnCC,EACAC,EACAC,IACO,CACP,MAAMC,EAAU,IAAY,CACxBH,EAAG,oBAAoB,gBAAiBI,CAAmB,EAC3DJ,EAAG,oBAAoB,gBAAiBK,CAAmB,EAC3DH,EAAG,CACP,EACA,IAAII,EACAC,EAIJ,MAAMC,EAAa,sBAAsB,IAAM,CAC3CF,EAAa,sBAAsB,IAAM,CACrCC,EAAa,sBAAsB,IAAM,CACrCJ,EAAQ,CACZ,CAAC,CACL,CAAC,CACL,CAAC,EACKE,EAAuBI,GAAiC,CACtDA,EAAM,eAAiB,cAK3BN,EAAQ,CACZ,EACMC,EAAuBK,GAAiC,CACtDA,EAAM,eAAiB,eAK3B,qBAAqBD,CAAU,EAC/B,qBAAqBF,CAAU,EAC/B,qBAAqBC,CAAU,EAC/BP,EAAG,oBAAoB,gBAAiBI,CAAmB,EAC3DJ,EAAG,iBAAiB,gBAAiBK,CAAmB,EAC5D,EACAL,EAAG,iBAAiB,gBAAiBI,CAAmB,EACxDH,EAAO,CACX,EAEO,MAAMS,EAAN,cAA0BzB,CAAgB,CAA1C,kCAyBH,KAAQ,UAAY,GAEpB,KAAU,QAAU,KAOpB,KAAU,YAAc,GAKxB,YAAoC,EAEpC,KAAO,oBAAsB,IAAIa,EAAoB,IAAI,EAczD,KAAQ,MAAQ,GAQhB,mBAA2C,OAE3C,KAAQ,uBAAyB,KASjC,oBAAsD,KAMtD,UAAqB,OAErB,KAAU,QAAU,GAEpB,KAAQ,gBAAkB,IAAIP,EAA4B,IAAI,EA2M9D,KAAQ,WAAuB,CAAC,EAmDhC,KAAQ,kBAAqBkB,GAA8B,CAEvD,GADI,CAAC,KAAK,gBACNA,EAAM,SAAW,EAAG,OACxB,MAAME,EAAiB,KAAK,eAC5B,KAAK,YAAc,GACnBA,EAAe,iBAAiB,YAAa,KAAK,eAAe,EACjEA,EAAe,iBAAiB,gBAAiB,KAAK,eAAe,EACrE,KAAK,gBAAkB,WAAW,IAAM,CAC/BA,GACLA,EAAe,cACX,IAAI,YAA4B,YAAa,CACzC,QAAS,GACT,SAAU,GACV,OAAQ,CACJ,OAAQ,SACZ,CACJ,CAAC,CACL,CACJ,EAAGZ,CAAkB,CACzB,EAEA,KAAQ,gBAAkB,IAAY,CAElC,GADA,aAAa,KAAK,eAAe,EAC7B,CAAC,KAAK,eAAgB,OACtB,KAAK,cACL,KAAK,KAAO,IAEhB,WAAW,IAAM,CACb,KAAK,YAAc,EACvB,CAAC,EACD,MAAMY,EAAiB,KAAK,eAC5BA,EAAe,oBAAoB,YAAa,KAAK,eAAe,EACpEA,EAAe,oBACX,gBACA,KAAK,eACT,CACJ,EAKA,KAAU,cAAiBF,GAA+B,CACtD,KAAM,CAAE,KAAAG,EAAM,OAAAC,CAAO,EAAIJ,GACrBG,IAAS,SAAYC,GAAUD,IAAS,cACpCA,IAAS,cACTH,EAAM,gBAAgB,EACtBA,EAAM,yBAAyB,EAG3C,EAEA,KAAU,YAAeA,GAA+B,CACpD,KAAM,CAAE,KAAAG,EAAM,OAAAC,CAAO,EAAIJ,GACrBG,IAAS,SAAYC,GAAUD,IAAS,eACxCH,EAAM,gBAAgB,EACtB,KAAK,cACD,IAAI,YAA4B,YAAa,CACzC,QAAS,GACT,SAAU,GACV,OAAQ,CACJ,OAAQ,UACZ,CACJ,CAAC,CACL,EAER,EAEA,KAAU,YAAc,IAAY,CAC5B,KAAK,cACT,KAAK,KAAO,CAAC,KAAK,KACtB,EAEA,KAAQ,UAAY,GAEpB,KAAU,cAAgB,IAAY,CAClC,KAAK,KAAO,GACZ,KAAK,UAAY,EACrB,EAEA,KAAU,eAAiB,IAAY,CACnC,KAAK,UAAY,GACb,MAAK,iBACT,KAAK,KAAO,GAChB,EAEA,KAAQ,eAAiB,GAEzB,KAAU,mBAAqB,IAAY,CACvC,KAAK,KAAO,GACZ,KAAK,eAAiB,EAC1B,EAEA,KAAU,mBAAsBA,GAA8B,CAEtD,OAASA,EAAM,eACf,KAAK,SAASA,EAAM,aAAqB,GAI7C,KAAK,eAAe,CACxB,EAEA,KAAU,0BAA6BA,GAA8B,CACjE,MAAMK,EACF,KAAK,gBACL,KAAK,0BAA0BrB,EAE/B,KAAK,iBAAmBgB,EAAM,eAC7BK,GACI,KAAK,eAA+B,SACjCL,EAAM,aACV,GAIR,KAAK,eAAe,CACxB,EASA,KAAU,gBAAkB,IAAY,CACpC,KAAK,KAAO,GACZ,KAAK,YAAc,EACvB,EAmBA,KAAO,iBAAmB,GA3d1B,IAAI,UAAoB,CACpB,OAAO,KAAK,SAChB,CAEA,IAAI,SAASM,EAAmB,CAC5B,KAAK,UAAYA,EACbA,GACA,KAAK,QAAU,KAAK,KACpB,KAAK,KAAO,KAEZ,KAAK,KAAO,KAAK,MAAQ,KAAK,QAC9B,KAAK,QAAU,GAEvB,CAqBA,IAAI,MAAgB,CAChB,OAAO,KAAK,KAChB,CAEA,IAAI,KAAKC,EAAe,CAChBA,GAAQ,KAAK,UACbA,IAAS,KAAK,OAClB,KAAK,MAAQA,EACb,KAAK,cAAc,OAAQ,CAAC,KAAK,IAAI,EACzC,CAiCA,IAAY,YAAsB,CAC9B,OAAO,KAAK,OAAS,SAAW,KAAK,OAAS,MAClD,CAEA,IAAY,cAA8C,CACtD,OAAQ,KAAK,KAAM,CACf,IAAK,QACL,IAAK,OACD,OACJ,IAAK,OACD,MAAO,SACX,QACI,OAAO,KAAK,IACpB,CACJ,CAGA,MAAgB,kBAAkC,CAC9C,QAAQ,KACJ,+DACJ,CACJ,CAEA,MAAgB,mBAAmC,CAC/C,QAAQ,KACJ,gEACJ,CACJ,CAEA,IAAc,kBAA4B,CAKtC,MAHI,OAAK,OAAS,QAAU,CAAC,KAAK,MAG9B,CAAC,KAAK,gBAAmB,CAAC,KAAK,WAAa,KAAK,OAAS,OAGlE,CAEU,gBAAuB,CAC7B,GAAI,CAAC,KAAK,kBAAoB,CAAC,KAAK,KAAM,OAE1C,MAAMC,EAAS,KAAK,QAAU,EACxBC,EAAU,KAAK,eACfC,EAAa,KAAK,WAA2B,QAEnD,KAAK,oBAAoB,aAAa,KAAK,SAAU,CAEjD,OAAAF,EACA,UAAAE,EAIA,QAAAD,EACA,KAAM,KAAK,IACf,CAAC,CACL,CAEA,MAAgB,WAAWE,EAAiC,CA3RhE,IAAAC,EA4RQ,GAAK,KAAK,YAoBV,GAlBK,KAAK,YACN,MAAM,KAAK,eAGX,KAAK,KACLxB,EAAa,IAAI,IAAI,GAEjBuB,GACA,KAAK,QAAQ,EAEjBvB,EAAa,OAAO,IAAI,GAGxB,KAAK,WACL,KAAK,iBAAiB,EAEtB,KAAK,kBAAkB,EAEvB,KAAK,KACLa,EAAY,WAAa,MACtB,CAIH,MAAMY,EAAe,IAAqB,CAtTtD,IAAAD,EAuTgB,MAAME,EAA2B,CAAC,EAElC,IAAIC,EAAc,SAAS,cAC3B,KACIA,GAAA,MAAAA,EAAa,YACbA,EAAY,WAAW,eAEvBA,EAAcA,EAAY,WAAW,cAEzC,KAAOA,GAAa,CAChB,MAAMC,EACFD,EAAY,cACZA,EAAY,iBACXH,EAAAG,EAAY,YAAY,IAAxB,YAAAH,EAA0C,MAC3CI,GACAF,EAAU,KAAKE,CAAuB,EAE1CD,EAAcC,CAClB,CACA,OAAOF,CACX,GAEKF,EAAA,KAAK,iBAAL,MAAAA,EAAqC,QACrC,KAAK,SACD,KAAK,YAAY,EAAe,aACrC,GACMC,EAAa,EAAE,KAAMtB,GAAOA,IAAO,IAAI,IAE5C,KAAK,eAA+B,MAAM,CAEnD,CACJ,CAEU,qBAAqBW,EAA0C,CA6BrE,GA5BIA,IACAA,EAAe,oBAAoB,QAAS,KAAK,WAAW,EAC5DA,EAAe,oBAAoB,UAAW,KAAK,aAAa,EAChEA,EAAe,oBAAoB,WAAY,KAAK,cAAc,EAClEA,EAAe,oBACX,eACA,KAAK,kBACT,EACAA,EAAe,oBACX,eACA,KAAK,kBACT,EACA,KAAK,oBACD,eACA,KAAK,yBACT,EACAA,EAAe,iBACX,cACA,KAAK,iBACT,EACAA,EAAe,oBAAoB,UAAW,KAAK,aAAa,EAChEA,EAAe,oBAAoB,QAAS,KAAK,WAAW,EAC5DA,EAAe,oBACX,YACA,KAAK,eACT,EACA,KAAK,uBAAuB,GAG5B,CAAC,KAAK,gBACH,KAAK,eAAkC,yBAE1C,OACJ,MAAMe,EAAqB,KAAK,eAChC,OAAQ,KAAK,mBAAoB,CAC7B,IAAK,QACDA,EAAmB,iBAAiB,QAAS,KAAK,WAAW,EAC7D,OACJ,IAAK,YACDA,EAAmB,iBACf,cACA,KAAK,iBACT,EACAA,EAAmB,iBACf,UACA,KAAK,aACT,EACAA,EAAmB,iBAAiB,QAAS,KAAK,WAAW,EAC7DA,EAAmB,iBACf,YACA,KAAK,eACT,EACA,OACJ,IAAK,QAqBD,GApBAA,EAAmB,iBACf,UACA,KAAK,aACT,EACAA,EAAmB,iBACf,WACA,KAAK,cACT,EACAA,EAAmB,iBACf,eACA,KAAK,kBACT,EACAA,EAAmB,iBACf,eACA,KAAK,kBACT,EACA,KAAK,iBACD,eACA,KAAK,yBACT,EACI,KAAK,gBAAkB,OAAQ,OAEnC,KAAK,uBAAuBA,CAAkB,EAC9C,MACR,CACJ,CAIQ,uBAAuBR,EAA4B,CACvD,GAEI,KAAK,qBAAuB,SAE5B,KAAK,yBAA2B,MAEhC,CAAC,KAAK,SAAS,OAEf,OAEJ,MAAMS,EAAcT,EAAQ,YAAY,EAClCU,EAAc,KAAK,SAAS,CAAC,EAAE,YAAY,EAC3CC,EAAc,KAAK,YAAY,EACrC,GAAIF,GAAeE,EAAa,CAC5B,MAAMC,EAAyBxC,EAC3B4B,EACA,mBACA,CAAC,KAAK,EAAE,CACZ,EACA,KAAK,uBAAyB,IAAM,CAChCY,EAAuB,EACvB,KAAK,uBAAyB,IAClC,CACJ,SAAWH,IAAgBC,EAAa,CACpC,KAAK,WAAa,KAAK,SAAS,IAAK5B,GAAOA,EAAG,EAAE,EACjD,MAAM+B,EAAa,KAAK,SAAS,IAAK/B,IAC7BA,EAAG,KACJA,EAAG,GAAK,GAAG,KAAK,QAAQ,YAAY,YAAY,OAC3C,WAAW,EACX,MAAM,EAAG,CAAC,KAEZA,EAAG,GACb,EACK8B,EAAyBxC,EAC3B4B,EACA,mBACAa,CACJ,EACA,KAAK,uBAAyB,IAAM,CAChCD,EAAuB,EACvB,KAAK,SAAS,IAAI,CAAC9B,EAAIgC,IAAU,CAC7BhC,EAAG,GAAK,KAAK,WAAWgC,CAAK,CACjC,CAAC,EACD,KAAK,uBAAyB,IAClC,CACJ,CACJ,CAwHU,gBAAuB,CAC7B,KAAK,eAAiB,GACtB,MAAMrB,EAAiB,KAAK,eACxB,KAAK,WAAaA,EAAe,QAAQ,gBAAgB,IAC7D,KAAK,KAAO,GAChB,CAOU,mBAAmBF,EAA2C,CAChEA,EAAM,WAAa,OACnB,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,CAE/B,CAEU,mBAA0B,CAChC,KAAK,KAAO,GACZ,KAAK,cAAc,IAAI,uBAAyB,CACpD,CAEU,mBAA0B,CAChC,KAAK,cAAc,IAAI,qBAAuB,CAClD,CAIO,oBAA8B,CACjC,MAAMwB,EAAqB,KAAK,iBAChC,YAAK,iBAAmB,GACjBA,CACX,CAES,WAAWC,EAA+B,CAxnBvD,IAAAb,EA+pBQ,GAtCK,KAAK,YACN,KAAK,iBAAiB,WAAaZ,GAAsB,CACrD,GAAI,KAAK,OAAS,OACd,OAEJ,GAAI,CAACA,EAAM,cAAe,CACtB,KAAK,KAAO,GACZ,MACJ,CACA,MAAM0B,EAAgB,IAAI,MAAM,yBAA0B,CACtD,QAAS,GACT,SAAU,EACd,CAAC,EACD1B,EAAM,cAAc,iBAChB0B,EAAc,KACb1B,GAAiB,CACTA,EAAM,aAAa,EAAE,SAAS,IAAI,IACnC,KAAK,KAAO,GAEpB,CACJ,EACAA,EAAM,cAAc,cAAc0B,CAAa,CACnD,CAAC,EAEA,KAAK,aAAa,IAAI,GACvB,KAAK,aACD,KACA,GAAG,KAAK,QAAQ,YAAY,KAAK,OAC5B,WAAW,EACX,MAAM,EAAG,CAAC,GACnB,EAGAD,EAAQ,IAAI,MAAM,IACjB,OAAOA,EAAQ,IAAI,MAAM,GAAM,aAAe,KAAK,OAEpD,KAAK,WAAWA,EAAQ,IAAI,MAAM,CAAC,EAEnCA,EAAQ,IAAI,SAAS,EAAG,CACxB,KAAM,CAACE,EAAIC,CAAW,IAAIhB,EAAA,KAAK,UAAL,YAAAA,EAAc,MAAM,OAAQ,CAAC,EACvD,KAAK,gBAAgB,SAAWe,EAAK,IAAIA,IAAO,GAChD,KAAK,mBAAqBC,CAK9B,CACA,MAAMC,EAAa,KAAK,eACpBJ,EAAQ,IAAI1C,CAA4B,IACxC,KAAK,eAAiB,KAAK,gBAAgB,QAC3C,KAAK,qBAAqB8C,CAAU,GAEpCJ,EAAQ,IAAI,gBAAgB,GAC5B,KAAK,qBAAqBA,EAAQ,IAAI,gBAAgB,CAAC,CAE/D,CAEmB,QAAQA,EAA+B,CACtD,MAAM,QAAQA,CAAO,EACjBA,EAAQ,IAAI,WAAW,IACnB,KAAK,UACL,KAAK,SAAS,aAAa,mBAAoB,KAAK,SAAS,EAE7D,KAAK,SAAS,gBAAgB,kBAAkB,EAEhD,OAAOA,EAAQ,IAAI,WAAW,GAAM,aACpC,KAAK,eAAe,EAGhC,CAEgB,QAAyB,CAErC,MAAMK,EADsB,YAAa,KAEnC,KAAK,aACL,OACN,OAAOvD;AAAA;AAAA;AAAA,0BAGWU,EAAU6C,CAAY;AAAA,yBACvB,IAAM,CACX,KAAK,KAAO,EAChB;AAAA,0BACU,IAAM,CACZ,KAAK,KAAO,EAChB;AAAA,gCACgB,KAAK;AAAA,+BACN,KAAK;AAAA,wBACZ5C,EAAS,CACb,wBAAyBe,EAAY,UAAU,SAAS,CAC5D,CAAC;AAAA;AAAA;AAAA;AAAA,sCAIqB,IAAM,CACZ,KAAK,gBACL,KAAK,uBACD,KAAK,cACT,CAER;AAAA;AAAA;AAAA;AAAA,SAKpB,CAES,mBAA0B,CAC/B,MAAM,kBAAkB,EAExB,KAAK,iBAAiB,QAAS,IAAM,CACjC,KAAK,KAAO,EAChB,CAAC,CACL,CACJ,EAhmBO,WAAM,YAANA,EAAM,YACO,OAAS,CAACd,CAAM,EADvB,YAyDF,UAAY,EArDnB4C,EAAA,CADCrD,EAAM,QAAQ,GAHN,YAIT,wBAMIqD,EAAA,CADHtD,EAAS,CAAE,KAAM,OAAQ,CAAC,GATlB,YAUL,wBAoBJsD,EAAA,CADCpD,EAAsB,CAAE,QAAS,EAAK,CAAC,GA7B/B,YA8BT,wBASAoD,EAAA,CADCtD,EAAS,GAtCD,YAuCT,sBAKIsD,EAAA,CADHtD,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,GA3CjC,YA4CL,oBAgBJsD,EAAA,CADCtD,EAAS,GA3DD,YA4DT,yBAGAsD,EAAA,CADCtD,EAAS,CAAE,UAAW,gBAAiB,CAAC,GA9DhC,YA+DT,6BAKAsD,EAAA,CADCrD,EAAM,MAAM,GAnEJ,YAoET,sBAGAqD,EAAA,CADCtD,EAAS,GAtED,YAuET,uBAGAsD,EAAA,CADCnD,EAAM,GAzEE,YA0ET,8BAGAmD,EAAA,CADCnD,EAAM,GA5EE,YA6ET,kCAGAmD,EAAA,CADCtD,EAAS,GA/ED,YAgFT",
6
6
  "names": ["html", "SpectrumElement", "property", "query", "queryAssignedElements", "state", "conditionAttributeWithId", "ElementResolutionController", "elementResolverUpdatedSymbol", "VirtualTrigger", "ifDefined", "styleMap", "styles", "overlayStack", "PlacementController", "LONGPRESS_DURATION", "el", "action", "cb", "cleanup", "handleTransitionrun", "handleTransitionend", "guarantee2", "guarantee3", "guarantee1", "event", "_OverlayBase", "triggerElement", "code", "altKey", "hasNonVirtualTrigger", "disabled", "open", "offset", "trigger", "placement", "oldOpen", "_a", "getAncestors", "ancestors", "currentNode", "ancestor", "nextTriggerElement", "triggerRoot", "contentRoot", "overlayRoot", "releaseAriaDescribedby", "appliedIds", "index", "shouldPreventClose", "changes", "relationEvent", "id", "interaction", "oldTrigger", "popoverValue", "__decorateClass"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay.stories.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\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 { html, TemplateResult } from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport {\n openOverlay,\n OverlayContentTypes,\n OverlayTrigger,\n Placement,\n TriggerInteractions,\n VirtualTrigger,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/action-group/sp-action-group.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport { DialogWrapper } from '@spectrum-web-components/dialog';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-open-in.js';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { Picker } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/overlay/sp-overlay.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/radio/sp-radio.js';\nimport '@spectrum-web-components/radio/sp-radio-group.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/accordion/sp-accordion.js';\nimport '@spectrum-web-components/accordion/sp-accordion-item.js';\nimport '../../../projects/story-decorator/src/types.js';\n\nimport './overlay-story-components.js';\nimport { render } from 'lit-html';\nimport { Popover } from '@spectrum-web-components/popover';\nimport { Button } from '@spectrum-web-components/button';\nimport { PopoverContent } from './overlay-story-components.js';\n\nconst storyStyles = html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: 100%;\n margin: 0;\n }\n\n sp-story-decorator::part(container) {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n overlay-trigger {\n flex: none;\n }\n\n #styled-div {\n background-color: var(--styled-div-background-color, blue);\n color: white;\n padding: 4px 10px;\n margin-bottom: 10px;\n }\n\n #inner-trigger {\n display: inline-block;\n }\n </style>\n`;\n\nexport default {\n title: 'Overlay',\n argTypes: {\n offset: { control: 'number' },\n placement: {\n control: {\n type: 'inline-radio',\n options: [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'auto',\n 'auto-start',\n 'auto-end',\n 'none',\n ],\n },\n },\n type: {\n control: {\n type: 'inline-radio',\n options: ['modal', 'replace', 'inline'],\n },\n },\n colorStop: {\n control: {\n type: 'inline-radio',\n options: ['light', 'dark'],\n },\n },\n },\n args: {\n placement: 'bottom',\n offset: 0,\n colorStop: 'light',\n },\n};\n\ninterface Properties {\n placement: Placement;\n offset: number;\n open?: OverlayContentTypes;\n type?: Extract<TriggerInteractions, 'inline' | 'modal' | 'replace'>;\n}\n\nconst template = ({\n placement,\n offset,\n open,\n type,\n}: Properties): TemplateResult => {\n return html`\n ${storyStyles}\n <overlay-trigger\n id=\"trigger\"\n placement=\"${placement}\"\n offset=\"${offset}\"\n open=${ifDefined(open)}\n type=${ifDefined(type)}\n >\n <sp-button variant=\"primary\" slot=\"trigger\">Show Popover</sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n placement=\"${placement}\"\n tip\n >\n <div class=\"options-popover-content\">\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n placement=\"bottom\"\n tip\n >\n <div class=\"options-popover-content\">\n Another Popover\n </div>\n </sp-popover>\n\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </div>\n </sp-popover>\n <sp-tooltip\n slot=\"hover-content\"\n ?delayed=${open !== 'hover'}\n tip=\"bottom\"\n >\n Click to open a popover.\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nconst extraText = html`\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n`;\n\nfunction nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport const Default = (args: Properties): TemplateResult => template(args);\n\nexport const accordion = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\" placement=\"right\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open overlay w/ accordion\n </sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n style=\"overflow-y: scroll;position: static;\"\n >\n <sp-accordion allow-multiple>\n <sp-accordion-item label=\"Some things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Other things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"More things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Additional things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n </sp-accordion>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\naccordion.swc_vrt = {\n skip: true,\n};\n\nexport const clickAndHoverTargets = (): TemplateResult => {\n return html`\n <div>\n ${storyStyles}\n <style>\n .friendly-target {\n padding: 4px;\n margin: 6px;\n border: 2px solid black;\n border-radius: 6px;\n cursor: default;\n }\n </style>\n <overlay-trigger placement=\"right\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Click me\n </div>\n <sp-tooltip slot=\"click-content\" tip=\"right\">\n Ok, now hover the other trigger\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"left\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Then hover me\n </div>\n <sp-tooltip slot=\"hover-content\" tip=\"right\">\n Now click my trigger -- I should stay open, but the other\n overlay should close\n </sp-tooltip>\n </overlay-trigger>\n </div>\n `;\n};\nclickAndHoverTargets.swc_vrt = {\n skip: true,\n};\n\nclass ScrollForcer extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n });\n this.setup();\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n (this.previousElementSibling?.lastElementChild as OverlayTrigger).open =\n 'click';\n }\n\n doScroll = async (): Promise<void> => {\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n if (document.scrollingElement) {\n document.scrollingElement.scrollTop = 100;\n }\n\n await nextFrame();\n await nextFrame();\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('scroll-forcer', ScrollForcer);\n\nexport const clickContentClosedOnScroll = (\n args: Properties\n): TemplateResult => html`\n <div style=\"margin: 50vh 0 100vh;\">\n ${template({\n ...args,\n })}\n </div>\n`;\nclickContentClosedOnScroll.decorators = [\n (story: () => TemplateResult): TemplateResult => html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: auto !important;\n }\n </style>\n ${story()}\n <scroll-forcer></scroll-forcer>\n `,\n];\n\nclass ComplexModalReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n\n const overlay = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n overlay.addEventListener('sp-opened', this.handleTriggerOpened);\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n await nextFrame();\n\n const picker = document.querySelector('#test-picker') as Picker;\n picker.addEventListener('sp-opened', this.handlePickerOpen);\n picker.open = true;\n };\n\n handlePickerOpen = async (): Promise<void> => {\n const picker = document.querySelector('#test-picker') as Picker;\n const actions = [nextFrame, picker.updateComplete];\n\n await Promise.all(actions);\n\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('complex-modal-ready', ComplexModalReady);\n\nconst complexModalDecorator = (story: () => TemplateResult): TemplateResult => {\n return html`\n ${story()}\n <complex-modal-ready></complex-modal-ready>\n `;\n};\n\nexport const complexModal = (): TemplateResult => {\n return html`\n <style>\n body {\n --swc-margin-test: 10px;\n margin: var(--swc-margin-test);\n }\n sp-story-decorator::part(container) {\n min-height: calc(100vh - (2 * var(--swc-margin-test)));\n padding: 0;\n display: grid;\n place-content: center;\n }\n active-overlay > * {\n --spectrum-global-animation-duration-100: 0ms;\n --spectrum-global-animation-duration-200: 0ms;\n --spectrum-global-animation-duration-300: 0ms;\n --spectrum-global-animation-duration-400: 0ms;\n --spectrum-global-animation-duration-500: 0ms;\n --spectrum-global-animation-duration-600: 0ms;\n --spectrum-global-animation-duration-700: 0ms;\n --spectrum-global-animation-duration-800: 0ms;\n --spectrum-global-animation-duration-900: 0ms;\n --spectrum-global-animation-duration-1000: 0ms;\n --spectrum-global-animation-duration-2000: 0ms;\n --spectrum-global-animation-duration-4000: 0ms;\n --spectrum-animation-duration-0: 0ms;\n --spectrum-animation-duration-100: 0ms;\n --spectrum-animation-duration-200: 0ms;\n --spectrum-animation-duration-300: 0ms;\n --spectrum-animation-duration-400: 0ms;\n --spectrum-animation-duration-500: 0ms;\n --spectrum-animation-duration-600: 0ms;\n --spectrum-animation-duration-700: 0ms;\n --spectrum-animation-duration-800: 0ms;\n --spectrum-animation-duration-900: 0ms;\n --spectrum-animation-duration-1000: 0ms;\n --spectrum-animation-duration-2000: 0ms;\n --spectrum-animation-duration-4000: 0ms;\n --spectrum-coachmark-animation-indicator-ring-duration: 0ms;\n --swc-test-duration: 1ms;\n }\n </style>\n <overlay-trigger type=\"modal\" placement=\"none\" open=\"click\">\n <sp-dialog-wrapper\n slot=\"click-content\"\n headline=\"Dialog title\"\n dismissable\n underlay\n footer=\"Content for footer\"\n >\n <sp-field-label for=\"test-picker\">\n Selection type:\n </sp-field-label>\n <sp-picker id=\"test-picker\">\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-picker>\n </sp-dialog-wrapper>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n </overlay-trigger>\n `;\n};\n\ncomplexModal.decorators = [complexModalDecorator];\n\nexport const customizedClickContent = (\n args: Properties\n): TemplateResult => html`\n <style>\n overlay-trigger {\n --styled-div-background-color: var(\n --spectrum-semantic-cta-background-color-default\n );\n --spectrum-button-m-accent-fill-texticon-background-color: rebeccapurple;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\n\nexport const deep = (): TemplateResult => html`\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 1 with buttons + selfmanaged Tooltips\n </sp-button>\n <sp-popover dialog slot=\"click-content\" direction=\"bottom\" tip>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\" offset=\"0\">\n My Tooltip 1\n </sp-tooltip>\n A\n </sp-action-button>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\" offset=\"0\">\n My Tooltip 1\n </sp-tooltip>\n B\n </sp-action-button>\n </sp-popover>\n </overlay-trigger>\n\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 2 with buttons without ToolTips\n </sp-button>\n <sp-popover dialog slot=\"click-content\" direction=\"bottom\" tip>\n <sp-action-button>X</sp-action-button>\n <sp-action-button>Y</sp-action-button>\n </sp-popover>\n </overlay-trigger>\n`;\ndeep.swc_vrt = {\n skip: true,\n};\n\nexport const deepNesting = (): TemplateResult => {\n const color = window.__swc_hack_knobs__.defaultColor;\n const outter = color === 'light' ? 'dark' : 'light';\n return html`\n ${storyStyles}\n <sp-theme\n color=${outter}\n theme=${window.__swc_hack_knobs__.defaultThemeVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <sp-theme\n color=${color}\n theme=${window.__swc_hack_knobs__.defaultThemeVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <recursive-popover\n tabindex=\"\"\n style=\"\n background-color: var(--spectrum-global-color-gray-100);\n color: var(--spectrum-global-color-gray-800);\n padding: var(--spectrum-global-dimension-size-225);\n \"\n ></recursive-popover>\n </sp-theme>\n </sp-theme>\n `;\n};\n\nclass DefinedOverlayReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n connectedCallback(): void {\n if (!!this.ready) return;\n\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n overlay!: OverlayTrigger;\n popover!: PopoverContent;\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.overlay = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n const button = document.querySelector(\n `[slot=\"trigger\"]`\n ) as HTMLButtonElement;\n this.overlay.addEventListener('sp-opened', this.handleTriggerOpened);\n await nextFrame();\n await nextFrame();\n button.click();\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n this.overlay.removeEventListener('sp-opened', this.handleTriggerOpened);\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n this.popover = document.querySelector(\n 'popover-content'\n ) as PopoverContent;\n if (!this.popover) {\n return;\n }\n this.popover.addEventListener('sp-opened', this.handlePopoverOpen);\n await nextFrame();\n await nextFrame();\n this.popover.button.click();\n };\n\n handlePopoverOpen = async (): Promise<void> => {\n await nextFrame();\n\n this.ready(true);\n };\n\n disconnectedCallback(): void {\n this.overlay.removeEventListener('sp-opened', this.handleTriggerOpened);\n this.popover.removeEventListener('sp-opened', this.handlePopoverOpen);\n }\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('defined-overlay-ready', DefinedOverlayReady);\n\nconst definedOverlayDecorator = (\n story: () => TemplateResult\n): TemplateResult => {\n return html`\n ${story()}\n <defined-overlay-ready></defined-overlay-ready>\n `;\n};\n\nexport const definedOverlayElement = (): TemplateResult => {\n return html`\n <overlay-trigger placement=\"bottom\" type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">Open popover</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" dialog>\n <popover-content></popover-content>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\ndefinedOverlayElement.decorators = [definedOverlayDecorator];\n\nexport const detachedElement = (): TemplateResult => {\n let closeOverlay: (() => void) | undefined;\n const openDetachedOverlayContent = async (): // {\n // target,\n // }: {\n // target: HTMLElement;\n // }\n Promise<void> => {\n if (closeOverlay) {\n closeOverlay();\n closeOverlay = undefined;\n return;\n }\n const div = document.createElement('div');\n div.textContent = 'This div is overlaid';\n div.setAttribute(\n 'style',\n `\n background-color: var(--spectrum-global-color-gray-50);\n color: var(--spectrum-global-color-gray-800);\n border: 1px solid;\n padding: 2em;\n `\n );\n // closeOverlay = await Overlay.open(target, 'click', div, {\n // offset: 0,\n // placement: 'bottom',\n // });\n };\n requestAnimationFrame(() => {\n // openDetachedOverlayContent({\n // target: document.querySelector(\n // '#detached-content-trigger'\n // ) as HTMLElement,\n // });\n });\n return html`\n <sp-action-button\n id=\"detached-content-trigger\"\n @click=${openDetachedOverlayContent}\n @sp-closed=${() => (closeOverlay = undefined)}\n >\n <sp-icon-open-in\n slot=\"icon\"\n label=\"Open in overlay\"\n ></sp-icon-open-in>\n </sp-action-button>\n `;\n};\n\nexport const edges = (): TemplateResult => {\n return html`\n <style>\n .demo {\n position: absolute;\n }\n .top-left {\n top: 0;\n left: 0;\n }\n .top-right {\n top: 0;\n right: 0;\n }\n .bottom-right {\n bottom: 0;\n right: 0;\n }\n .bottom-left {\n bottom: 0;\n left: 0;\n }\n </style>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo top-right\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo bottom-left\" placement=\"top\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"top\" class=\"demo bottom-right\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nexport const inline = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const longpress = (): TemplateResult => {\n return html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">Search real hard...</sp-tooltip>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n @change=${(event: Event & { target: HTMLElement }) =>\n event.target.dispatchEvent(\n new Event('close', { bubbles: true })\n )}\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const modalLoose = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog\n size=\"s\"\n dismissable\n slot=\"click-content\"\n @closed=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n <h2 slot=\"heading\">Loose Dialog</h2>\n <p>\n The\n <code>sp-dialog</code>\n element is not \"meant\" to be a modal alone. In that way it\n does not manage its own\n <code>open</code>\n attribute or outline when it should have\n <code>pointer-events: auto</code>\n . It's a part of this test suite to prove that content in\n this way can be used in an\n <code>overlay-trigger</code>\n element.\n </p>\n </sp-dialog>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalManaged = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog-wrapper\n underlay\n slot=\"click-content\"\n headline=\"Wrapped Dialog w/ Hero Image\"\n confirm-label=\"Keep Both\"\n secondary-label=\"Replace\"\n cancel-label=\"Cancel\"\n footer=\"Content for footer\"\n @confirm=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @secondary=${(\n event: Event & { target: DialogWrapper }\n ): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @cancel=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n <p>\n The\n <code>sp-dialog-wrapper</code>\n element has been prepared for use in an\n <code>overlay-trigger</code>\n element by it's combination of modal, underlay, etc. styles\n and features.\n </p>\n </sp-dialog-wrapper>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalWithinNonModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\" dialog>\n <overlay-trigger type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open modal overlay\n </sp-button>\n <sp-popover slot=\"click-content\" dialog>\n Modal overlay\n </sp-popover>\n </overlay-trigger>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const noCloseOnResize = (args: Properties): TemplateResult => html`\n <style>\n sp-button:hover {\n border: 10px solid;\n width: 100px;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\nnoCloseOnResize.swc_vrt = {\n skip: true,\n};\n\nexport const openClickContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'click',\n });\n\nexport const openHoverContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'hover',\n });\n\nexport const replace = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"replace\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const sideHoverDraggable = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger placement=\"right\">\n <overlay-target-icon slot=\"trigger\"></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"right\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n Vivamus egestas sed enim sed condimentum. Nunc facilisis\n scelerisque massa sed luctus. Orci varius natoque penatibus\n et magnis dis parturient montes, nascetur ridiculus mus.\n Suspendisse sagittis sodales purus vitae ultricies. Integer\n at dui sem. Sed quam tortor, ornare in nisi et, rhoncus\n lacinia mauris. Sed vel rutrum mauris, ac pellentesque nibh.\n Sed feugiat semper libero, sit amet vehicula orci fermentum\n id. Vivamus imperdiet egestas luctus. Mauris tincidunt\n malesuada ante, faucibus viverra nunc blandit a. Fusce et\n nisl nisi. Aenean dictum quam id mollis faucibus. Nulla a\n ultricies dui. In hac habitasse platea dictumst. Curabitur\n gravida lobortis vestibulum.\n </sp-tooltip>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const superComplexModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\" variant=\"accent\">Toggle Dialog</sp-button>\n <sp-popover dialog slot=\"click-content\">\n <overlay-trigger>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n <sp-popover dialog slot=\"click-content\">\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\" variant=\"secondary\">\n Toggle Dialog\n </sp-button>\n <sp-popover dialog slot=\"click-content\">\n <p>\n When you get this deep, this ActiveOverlay\n should be the only one in [slot=\"open\"].\n </p>\n <p>\n All of the rest of the ActiveOverlay\n elements should have had their [slot]\n attribute removed.\n </p>\n <p>\n Closing this ActiveOverlay should replace\n them...\n </p>\n </sp-popover>\n </overlay-trigger>\n </sp-popover>\n </overlay-trigger>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const updated = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <overlay-target-icon\n slot=\"trigger\"\n style=\"translate(400px, 300px)\"\n ></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open popover\n </sp-tooltip>\n <sp-popover dialog slot=\"click-content\" position=\"bottom\" tip>\n <div class=\"options-popover-content\">\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n placement=\"bottom\"\n tip\n >\n <div class=\"options-popover-content\">\n Another Popover\n </div>\n </sp-popover>\n\n <sp-tooltip\n slot=\"hover-content\"\n delayed\n tip=\"bottom\"\n >\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </div>\n </sp-popover>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const updating = (): TemplateResult => {\n const update = (): void => {\n const button = document.querySelector('[slot=\"trigger\"]') as Button;\n button.style.left = `${Math.floor(Math.random() * 200)}px`;\n button.style.top = `${Math.floor(Math.random() * 200)}px`;\n button.style.position = 'fixed';\n // Overlay.update();\n };\n return html`\n <overlay-trigger type=\"click\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\" dialog>\n <sp-button variant=\"primary\" @click=${update}>\n Update trigger location.\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nupdating.swc_vrt = {\n skip: true,\n};\n\nclass StartEndContextmenu extends HTMLElement {\n override shadowRoot!: ShadowRoot;\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n this.shadowRoot.innerHTML = `\n <style>\n :host {\n display: flex;\n align-items: stretch;\n }\n div {\n width: 50%;\n height: 100%;\n }\n </style>\n <div id=\"start\"></div>\n <div id=\"end\"></div>\n `;\n }\n}\n\ncustomElements.define('start-end-contextmenu', StartEndContextmenu);\n\nexport const virtualElement = (args: Properties): TemplateResult => {\n const contextMenuTemplate = (kind = ''): TemplateResult => html`\n <sp-popover\n style=\"width:300px;\"\n @click=${(event: PointerEvent) => {\n if (\n (event.target as HTMLElement).localName === 'sp-menu-item'\n ) {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu source: ${kind}</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const handlePointerdown = (event: PointerEvent): void => {\n if (event.button === 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n const handlePointerup = (event: PointerEvent): void => {\n if (event.button === 2) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n };\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const source = event.composedPath()[0] as HTMLDivElement;\n const { id } = source;\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(id), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n openOverlay(trigger, 'click', popover, {\n placement: args.placement,\n receivesFocus: 'auto',\n virtualTrigger,\n offset: 0,\n notImmediatelyClosable: true,\n });\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <start-end-contextmenu\n class=\"app-root\"\n @pointerdown=${{\n capture: true,\n handleEvent: handlePointerdown,\n }}\n @pointerup=${{\n capture: true,\n handleEvent: handlePointerup,\n }}\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n ></start-end-contextmenu>\n `;\n};\n\nvirtualElement.args = {\n placement: 'right-start' as Placement,\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\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 { html, TemplateResult } from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport {\n openOverlay,\n OverlayContentTypes,\n OverlayTrigger,\n Placement,\n TriggerInteractions,\n VirtualTrigger,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/action-group/sp-action-group.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport { DialogWrapper } from '@spectrum-web-components/dialog';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-open-in.js';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport { Picker } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/overlay/sp-overlay.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/radio/sp-radio.js';\nimport '@spectrum-web-components/radio/sp-radio-group.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/accordion/sp-accordion.js';\nimport '@spectrum-web-components/accordion/sp-accordion-item.js';\nimport '../../../projects/story-decorator/src/types.js';\n\nimport './overlay-story-components.js';\nimport { render } from 'lit-html';\nimport { Popover } from '@spectrum-web-components/popover';\nimport { Button } from '@spectrum-web-components/button';\nimport { PopoverContent } from './overlay-story-components.js';\n\nconst storyStyles = html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: 100%;\n margin: 0;\n }\n\n sp-story-decorator::part(container) {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n overlay-trigger {\n flex: none;\n }\n\n #styled-div {\n background-color: var(--styled-div-background-color, blue);\n color: white;\n padding: 4px 10px;\n margin-bottom: 10px;\n }\n\n #inner-trigger {\n display: inline-block;\n }\n </style>\n`;\n\nexport default {\n title: 'Overlay',\n argTypes: {\n offset: { control: 'number' },\n placement: {\n control: {\n type: 'inline-radio',\n options: [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'auto',\n 'auto-start',\n 'auto-end',\n 'none',\n ],\n },\n },\n type: {\n control: {\n type: 'inline-radio',\n options: ['modal', 'replace', 'inline'],\n },\n },\n colorStop: {\n control: {\n type: 'inline-radio',\n options: ['light', 'dark'],\n },\n },\n },\n args: {\n placement: 'bottom',\n offset: 0,\n colorStop: 'light',\n },\n};\n\ninterface Properties {\n placement: Placement;\n offset: number;\n open?: OverlayContentTypes;\n type?: Extract<TriggerInteractions, 'inline' | 'modal' | 'replace'>;\n}\n\nconst template = ({\n placement,\n offset,\n open,\n type,\n}: Properties): TemplateResult => {\n return html`\n ${storyStyles}\n <overlay-trigger\n id=\"trigger\"\n placement=\"${placement}\"\n offset=\"${offset}\"\n open=${ifDefined(open)}\n type=${ifDefined(type)}\n >\n <sp-button variant=\"primary\" slot=\"trigger\">Show Popover</sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n placement=\"${placement}\"\n tip\n >\n <div class=\"options-popover-content\">\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n placement=\"bottom\"\n tip\n >\n <div class=\"options-popover-content\">\n Another Popover\n </div>\n </sp-popover>\n\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </div>\n </sp-popover>\n <sp-tooltip\n slot=\"hover-content\"\n ?delayed=${open !== 'hover'}\n tip=\"bottom\"\n >\n Click to open a popover.\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nconst extraText = html`\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n`;\n\nfunction nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport const Default = (args: Properties): TemplateResult => template(args);\n\nexport const accordion = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\" placement=\"right\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open overlay w/ accordion\n </sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n style=\"overflow-y: scroll;position: static;\"\n >\n <sp-accordion allow-multiple>\n <sp-accordion-item label=\"Some things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Other things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"More things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Additional things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n </sp-accordion>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\naccordion.swc_vrt = {\n skip: true,\n};\n\nexport const clickAndHoverTargets = (): TemplateResult => {\n return html`\n <div>\n ${storyStyles}\n <style>\n .friendly-target {\n padding: 4px;\n margin: 6px;\n border: 2px solid black;\n border-radius: 6px;\n cursor: default;\n }\n </style>\n <overlay-trigger placement=\"right\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Click me\n </div>\n <sp-tooltip slot=\"click-content\" tip=\"right\">\n Ok, now hover the other trigger\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"left\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Then hover me\n </div>\n <sp-tooltip slot=\"hover-content\" tip=\"right\">\n Now click my trigger -- I should stay open, but the other\n overlay should close\n </sp-tooltip>\n </overlay-trigger>\n </div>\n `;\n};\nclickAndHoverTargets.swc_vrt = {\n skip: true,\n};\n\nclass ScrollForcer extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n });\n this.setup();\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n (this.previousElementSibling?.lastElementChild as OverlayTrigger).open =\n 'click';\n }\n\n doScroll = async (): Promise<void> => {\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n if (document.scrollingElement) {\n document.scrollingElement.scrollTop = 100;\n }\n\n await nextFrame();\n await nextFrame();\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('scroll-forcer', ScrollForcer);\n\nexport const clickContentClosedOnScroll = (\n args: Properties\n): TemplateResult => html`\n <div style=\"margin: 50vh 0 100vh;\">\n ${template({\n ...args,\n })}\n </div>\n`;\nclickContentClosedOnScroll.decorators = [\n (story: () => TemplateResult): TemplateResult => html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: auto !important;\n }\n </style>\n ${story()}\n <scroll-forcer></scroll-forcer>\n `,\n];\n\nclass ComplexModalReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n\n const overlay = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n overlay.addEventListener('sp-opened', this.handleTriggerOpened);\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n await nextFrame();\n\n const picker = document.querySelector('#test-picker') as Picker;\n picker.addEventListener('sp-opened', this.handlePickerOpen);\n picker.open = true;\n };\n\n handlePickerOpen = async (): Promise<void> => {\n const picker = document.querySelector('#test-picker') as Picker;\n const actions = [nextFrame, picker.updateComplete];\n\n await Promise.all(actions);\n\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('complex-modal-ready', ComplexModalReady);\n\nconst complexModalDecorator = (story: () => TemplateResult): TemplateResult => {\n return html`\n ${story()}\n <complex-modal-ready></complex-modal-ready>\n `;\n};\n\nexport const complexModal = (): TemplateResult => {\n return html`\n <style>\n body {\n --swc-margin-test: 10px;\n margin: var(--swc-margin-test);\n }\n sp-story-decorator::part(container) {\n min-height: calc(100vh - (2 * var(--swc-margin-test)));\n padding: 0;\n display: grid;\n place-content: center;\n }\n active-overlay > * {\n --spectrum-global-animation-duration-100: 0ms;\n --spectrum-global-animation-duration-200: 0ms;\n --spectrum-global-animation-duration-300: 0ms;\n --spectrum-global-animation-duration-400: 0ms;\n --spectrum-global-animation-duration-500: 0ms;\n --spectrum-global-animation-duration-600: 0ms;\n --spectrum-global-animation-duration-700: 0ms;\n --spectrum-global-animation-duration-800: 0ms;\n --spectrum-global-animation-duration-900: 0ms;\n --spectrum-global-animation-duration-1000: 0ms;\n --spectrum-global-animation-duration-2000: 0ms;\n --spectrum-global-animation-duration-4000: 0ms;\n --spectrum-animation-duration-0: 0ms;\n --spectrum-animation-duration-100: 0ms;\n --spectrum-animation-duration-200: 0ms;\n --spectrum-animation-duration-300: 0ms;\n --spectrum-animation-duration-400: 0ms;\n --spectrum-animation-duration-500: 0ms;\n --spectrum-animation-duration-600: 0ms;\n --spectrum-animation-duration-700: 0ms;\n --spectrum-animation-duration-800: 0ms;\n --spectrum-animation-duration-900: 0ms;\n --spectrum-animation-duration-1000: 0ms;\n --spectrum-animation-duration-2000: 0ms;\n --spectrum-animation-duration-4000: 0ms;\n --spectrum-coachmark-animation-indicator-ring-duration: 0ms;\n --swc-test-duration: 1ms;\n }\n </style>\n <overlay-trigger type=\"modal\" placement=\"none\" open=\"click\">\n <sp-dialog-wrapper\n slot=\"click-content\"\n headline=\"Dialog title\"\n dismissable\n underlay\n footer=\"Content for footer\"\n >\n <sp-field-label for=\"test-picker\">\n Selection type:\n </sp-field-label>\n <sp-picker id=\"test-picker\">\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-picker>\n </sp-dialog-wrapper>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n </overlay-trigger>\n `;\n};\n\ncomplexModal.decorators = [complexModalDecorator];\n\nexport const customizedClickContent = (\n args: Properties\n): TemplateResult => html`\n <style>\n overlay-trigger {\n --styled-div-background-color: var(\n --spectrum-semantic-cta-background-color-default\n );\n --spectrum-button-m-accent-fill-texticon-background-color: rebeccapurple;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\n\nexport const deep = (): TemplateResult => html`\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 1 with buttons + selfmanaged Tooltips\n </sp-button>\n <sp-popover dialog slot=\"click-content\" direction=\"bottom\" tip>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\" offset=\"0\">\n My Tooltip 1\n </sp-tooltip>\n A\n </sp-action-button>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\" offset=\"0\">\n My Tooltip 1\n </sp-tooltip>\n B\n </sp-action-button>\n </sp-popover>\n </overlay-trigger>\n\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 2 with buttons without ToolTips\n </sp-button>\n <sp-popover dialog slot=\"click-content\" direction=\"bottom\" tip>\n <sp-action-button>X</sp-action-button>\n <sp-action-button>Y</sp-action-button>\n </sp-popover>\n </overlay-trigger>\n`;\ndeep.swc_vrt = {\n skip: true,\n};\n\nexport const deepNesting = (): TemplateResult => {\n const color = window.__swc_hack_knobs__.defaultColor;\n const outter = color === 'light' ? 'dark' : 'light';\n return html`\n ${storyStyles}\n <sp-theme\n color=${outter}\n theme=${window.__swc_hack_knobs__.defaultThemeVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <sp-theme\n color=${color}\n theme=${window.__swc_hack_knobs__.defaultThemeVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <recursive-popover\n tabindex=\"\"\n style=\"\n background-color: var(--spectrum-global-color-gray-100);\n color: var(--spectrum-global-color-gray-800);\n padding: var(--spectrum-global-dimension-size-225);\n \"\n ></recursive-popover>\n </sp-theme>\n </sp-theme>\n `;\n};\n\nclass DefinedOverlayReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n connectedCallback(): void {\n if (!!this.ready) return;\n\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n overlay!: OverlayTrigger;\n popover!: PopoverContent;\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.overlay = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n const button = document.querySelector(\n `[slot=\"trigger\"]`\n ) as HTMLButtonElement;\n this.overlay.addEventListener('sp-opened', this.handleTriggerOpened);\n await nextFrame();\n await nextFrame();\n button.click();\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n this.overlay.removeEventListener('sp-opened', this.handleTriggerOpened);\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n this.popover = document.querySelector(\n 'popover-content'\n ) as PopoverContent;\n if (!this.popover) {\n return;\n }\n this.popover.addEventListener('sp-opened', this.handlePopoverOpen);\n await nextFrame();\n await nextFrame();\n this.popover.button.click();\n };\n\n handlePopoverOpen = async (): Promise<void> => {\n await nextFrame();\n\n this.ready(true);\n };\n\n disconnectedCallback(): void {\n this.overlay.removeEventListener('sp-opened', this.handleTriggerOpened);\n this.popover.removeEventListener('sp-opened', this.handlePopoverOpen);\n }\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('defined-overlay-ready', DefinedOverlayReady);\n\nconst definedOverlayDecorator = (\n story: () => TemplateResult\n): TemplateResult => {\n return html`\n ${story()}\n <defined-overlay-ready></defined-overlay-ready>\n `;\n};\n\nexport const definedOverlayElement = (): TemplateResult => {\n return html`\n <overlay-trigger placement=\"bottom\" type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">Open popover</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" dialog>\n <popover-content></popover-content>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\ndefinedOverlayElement.decorators = [definedOverlayDecorator];\n\nexport const detachedElement = (): TemplateResult => {\n let closeOverlay: (() => void) | undefined;\n const openDetachedOverlayContent = async (): // {\n // target,\n // }: {\n // target: HTMLElement;\n // }\n Promise<void> => {\n if (closeOverlay) {\n closeOverlay();\n closeOverlay = undefined;\n return;\n }\n const div = document.createElement('div');\n div.textContent = 'This div is overlaid';\n div.setAttribute(\n 'style',\n `\n background-color: var(--spectrum-global-color-gray-50);\n color: var(--spectrum-global-color-gray-800);\n border: 1px solid;\n padding: 2em;\n `\n );\n // closeOverlay = await Overlay.open(target, 'click', div, {\n // offset: 0,\n // placement: 'bottom',\n // });\n };\n requestAnimationFrame(() => {\n // openDetachedOverlayContent({\n // target: document.querySelector(\n // '#detached-content-trigger'\n // ) as HTMLElement,\n // });\n });\n return html`\n <sp-action-button\n id=\"detached-content-trigger\"\n @click=${openDetachedOverlayContent}\n @sp-closed=${() => (closeOverlay = undefined)}\n >\n <sp-icon-open-in\n slot=\"icon\"\n label=\"Open in overlay\"\n ></sp-icon-open-in>\n </sp-action-button>\n `;\n};\n\nexport const edges = (): TemplateResult => {\n return html`\n <style>\n .demo {\n position: absolute;\n }\n .top-left {\n top: 0;\n left: 0;\n }\n .top-right {\n top: 0;\n right: 0;\n }\n .bottom-right {\n bottom: 0;\n right: 0;\n }\n .bottom-left {\n bottom: 0;\n left: 0;\n }\n </style>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo top-right\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo bottom-left\" placement=\"top\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"top\" class=\"demo bottom-right\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nexport const inline = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const longpress = (): TemplateResult => {\n return html`\n <overlay-trigger placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">Search real hard...</sp-tooltip>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n @change=${(event: Event & { target: HTMLElement }) =>\n event.target.dispatchEvent(\n new Event('close', { bubbles: true })\n )}\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,var(--spectrum-global-dimension-size-100)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const modalLoose = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog\n size=\"s\"\n dismissable\n slot=\"click-content\"\n @closed=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n <h2 slot=\"heading\">Loose Dialog</h2>\n <p>\n The\n <code>sp-dialog</code>\n element is not \"meant\" to be a modal alone. In that way it\n does not manage its own\n <code>open</code>\n attribute or outline when it should have\n <code>pointer-events: auto</code>\n . It's a part of this test suite to prove that content in\n this way can be used in an\n <code>overlay-trigger</code>\n element.\n </p>\n </sp-dialog>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalManaged = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog-wrapper\n underlay\n slot=\"click-content\"\n headline=\"Wrapped Dialog w/ Hero Image\"\n confirm-label=\"Keep Both\"\n secondary-label=\"Replace\"\n cancel-label=\"Cancel\"\n footer=\"Content for footer\"\n @confirm=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @secondary=${(\n event: Event & { target: DialogWrapper }\n ): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @cancel=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n <p>\n The\n <code>sp-dialog-wrapper</code>\n element has been prepared for use in an\n <code>overlay-trigger</code>\n element by it's combination of modal, underlay, etc. styles\n and features.\n </p>\n </sp-dialog-wrapper>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalWithinNonModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\" dialog>\n <overlay-trigger type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open modal overlay\n </sp-button>\n <sp-popover slot=\"click-content\" dialog>\n Modal overlay\n </sp-popover>\n </overlay-trigger>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const noCloseOnResize = (args: Properties): TemplateResult => html`\n <style>\n sp-button:hover {\n border: 10px solid;\n width: 100px;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\nnoCloseOnResize.swc_vrt = {\n skip: true,\n};\n\nexport const openClickContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'click',\n });\n\nexport const openHoverContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'hover',\n });\n\nexport const replace = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"replace\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const sideHoverDraggable = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger placement=\"right\">\n <overlay-target-icon slot=\"trigger\"></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"right\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n Vivamus egestas sed enim sed condimentum. Nunc facilisis\n scelerisque massa sed luctus. Orci varius natoque penatibus\n et magnis dis parturient montes, nascetur ridiculus mus.\n Suspendisse sagittis sodales purus vitae ultricies. Integer\n at dui sem. Sed quam tortor, ornare in nisi et, rhoncus\n lacinia mauris. Sed vel rutrum mauris, ac pellentesque nibh.\n Sed feugiat semper libero, sit amet vehicula orci fermentum\n id. Vivamus imperdiet egestas luctus. Mauris tincidunt\n malesuada ante, faucibus viverra nunc blandit a. Fusce et\n nisl nisi. Aenean dictum quam id mollis faucibus. Nulla a\n ultricies dui. In hac habitasse platea dictumst. Curabitur\n gravida lobortis vestibulum.\n </sp-tooltip>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const superComplexModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\" placement=\"none\">\n <sp-button slot=\"trigger\" variant=\"accent\">Toggle Dialog</sp-button>\n <sp-popover dialog slot=\"click-content\">\n <overlay-trigger>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n <sp-popover dialog slot=\"click-content\">\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\" variant=\"secondary\">\n Toggle Dialog\n </sp-button>\n <sp-popover dialog slot=\"click-content\">\n <p>\n When you get this deep, this ActiveOverlay\n should be the only one in [slot=\"open\"].\n </p>\n <p>\n All of the rest of the ActiveOverlay\n elements should have had their [slot]\n attribute removed.\n </p>\n <p>\n Closing this ActiveOverlay should replace\n them...\n </p>\n </sp-popover>\n </overlay-trigger>\n </sp-popover>\n </overlay-trigger>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const updated = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <overlay-target-icon\n slot=\"trigger\"\n style=\"translate(400px, 300px)\"\n ></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open popover\n </sp-tooltip>\n <sp-popover dialog slot=\"click-content\" position=\"bottom\" tip>\n <div class=\"options-popover-content\">\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover\n dialog\n slot=\"click-content\"\n placement=\"bottom\"\n tip\n >\n <div class=\"options-popover-content\">\n Another Popover\n </div>\n </sp-popover>\n\n <sp-tooltip\n slot=\"hover-content\"\n delayed\n tip=\"bottom\"\n >\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </div>\n </sp-popover>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const updating = (): TemplateResult => {\n const update = (): void => {\n const button = document.querySelector('[slot=\"trigger\"]') as Button;\n button.style.left = `${Math.floor(Math.random() * 200)}px`;\n button.style.top = `${Math.floor(Math.random() * 200)}px`;\n button.style.position = 'fixed';\n // Overlay.update();\n };\n return html`\n <overlay-trigger type=\"click\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\" dialog>\n <sp-button variant=\"primary\" @click=${update}>\n Update trigger location.\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nupdating.swc_vrt = {\n skip: true,\n};\n\nclass StartEndContextmenu extends HTMLElement {\n override shadowRoot!: ShadowRoot;\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n this.shadowRoot.innerHTML = `\n <style>\n :host {\n display: flex;\n align-items: stretch;\n }\n div {\n width: 50%;\n height: 100%;\n }\n </style>\n <div id=\"start\"></div>\n <div id=\"end\"></div>\n `;\n }\n}\n\ncustomElements.define('start-end-contextmenu', StartEndContextmenu);\n\nexport const virtualElement = (args: Properties): TemplateResult => {\n const contextMenuTemplate = (kind = ''): TemplateResult => html`\n <sp-popover\n style=\"width:300px;\"\n @click=${(event: PointerEvent) => {\n if (\n (event.target as HTMLElement).localName === 'sp-menu-item'\n ) {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu source: ${kind}</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const handlePointerdown = (event: PointerEvent): void => {\n if (event.button === 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n const handlePointerup = (event: PointerEvent): void => {\n if (event.button === 2) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n };\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const source = event.composedPath()[0] as HTMLDivElement;\n const { id } = source;\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(id), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n\n openOverlay(trigger, 'click', popover, {\n placement: args.placement,\n receivesFocus: 'auto',\n virtualTrigger,\n offset: 0,\n notImmediatelyClosable: true,\n });\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <start-end-contextmenu\n class=\"app-root\"\n @pointerdown=${{\n capture: true,\n handleEvent: handlePointerdown,\n }}\n @pointerup=${{\n capture: true,\n handleEvent: handlePointerup,\n }}\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n ></start-end-contextmenu>\n `;\n};\n\nvirtualElement.args = {\n placement: 'right-start' as Placement,\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }