@spectrum-web-components/overlay 0.35.1-rc.43 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +150 -237
  2. package/active-overlay.d.ts +6 -0
  3. package/active-overlay.dev.js +5 -0
  4. package/{sp-overlay.dev.js.map → active-overlay.dev.js.map} +3 -3
  5. package/active-overlay.js +2 -0
  6. package/{sp-overlay.js.map → active-overlay.js.map} +4 -4
  7. package/custom-elements.json +1215 -0
  8. package/package.json +22 -49
  9. package/src/ActiveOverlay.d.ts +84 -0
  10. package/src/ActiveOverlay.dev.js +517 -0
  11. package/src/ActiveOverlay.dev.js.map +7 -0
  12. package/src/ActiveOverlay.js +16 -0
  13. package/src/ActiveOverlay.js.map +7 -0
  14. package/src/OverlayTrigger.d.ts +41 -24
  15. package/src/OverlayTrigger.dev.js +295 -133
  16. package/src/OverlayTrigger.dev.js.map +3 -3
  17. package/src/OverlayTrigger.js +22 -52
  18. package/src/OverlayTrigger.js.map +3 -3
  19. package/src/VirtualTrigger.dev.js +1 -2
  20. package/src/VirtualTrigger.dev.js.map +2 -2
  21. package/src/VirtualTrigger.js +1 -1
  22. package/src/VirtualTrigger.js.map +2 -2
  23. package/src/active-overlay.css.dev.js +13 -0
  24. package/src/active-overlay.css.dev.js.map +7 -0
  25. package/src/active-overlay.css.js +10 -0
  26. package/src/active-overlay.css.js.map +7 -0
  27. package/src/index.d.ts +3 -2
  28. package/src/index.dev.js +3 -2
  29. package/src/index.dev.js.map +2 -2
  30. package/src/index.js +1 -1
  31. package/src/index.js.map +2 -2
  32. package/src/loader.d.ts +2 -1
  33. package/src/loader.dev.js +19 -2
  34. package/src/loader.dev.js.map +2 -2
  35. package/src/loader.js +1 -1
  36. package/src/loader.js.map +3 -3
  37. package/src/overlay-stack.d.ts +50 -0
  38. package/src/overlay-stack.dev.js +515 -0
  39. package/src/overlay-stack.dev.js.map +7 -0
  40. package/src/overlay-stack.js +34 -0
  41. package/src/overlay-stack.js.map +7 -0
  42. package/src/overlay-timer.dev.js.map +2 -2
  43. package/src/overlay-timer.js.map +2 -2
  44. package/src/overlay-trigger.css.dev.js +1 -1
  45. package/src/overlay-trigger.css.dev.js.map +1 -1
  46. package/src/overlay-trigger.css.js +1 -1
  47. package/src/overlay-trigger.css.js.map +1 -1
  48. package/src/overlay-types.d.ts +31 -25
  49. package/src/overlay-types.dev.js +0 -1
  50. package/src/overlay-types.dev.js.map +3 -3
  51. package/src/overlay-types.js +1 -1
  52. package/src/overlay-types.js.map +3 -3
  53. package/src/overlay-utils.d.ts +3 -0
  54. package/src/overlay-utils.dev.js +31 -0
  55. package/src/overlay-utils.dev.js.map +7 -0
  56. package/src/overlay-utils.js +2 -0
  57. package/src/overlay-utils.js.map +7 -0
  58. package/src/overlay.d.ts +59 -0
  59. package/src/overlay.dev.js +127 -0
  60. package/src/overlay.dev.js.map +7 -0
  61. package/src/overlay.js +2 -0
  62. package/src/overlay.js.map +7 -0
  63. package/stories/overlay-story-components.js +8 -9
  64. package/stories/overlay-story-components.js.map +2 -2
  65. package/stories/overlay.stories.js +697 -825
  66. package/stories/overlay.stories.js.map +2 -2
  67. package/sync/overlay-trigger.d.ts +0 -4
  68. package/sync/overlay-trigger.dev.js +4 -1
  69. package/sync/overlay-trigger.dev.js.map +2 -2
  70. package/sync/overlay-trigger.js +1 -1
  71. package/sync/overlay-trigger.js.map +3 -3
  72. package/test/benchmark/basic-test.js +1 -1
  73. package/test/benchmark/basic-test.js.map +1 -1
  74. package/test/index.js +377 -408
  75. package/test/index.js.map +3 -3
  76. package/test/overlay-lifecycle.test.js +106 -34
  77. package/test/overlay-lifecycle.test.js.map +2 -2
  78. package/test/overlay-trigger-click.test.js +5 -11
  79. package/test/overlay-trigger-click.test.js.map +2 -2
  80. package/test/overlay-trigger-extended.test.js +36 -42
  81. package/test/overlay-trigger-extended.test.js.map +2 -2
  82. package/test/overlay-trigger-hover-click.test.js +24 -27
  83. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  84. package/test/overlay-trigger-hover.test.js +35 -41
  85. package/test/overlay-trigger-hover.test.js.map +2 -2
  86. package/test/overlay-trigger-longpress.test.js +81 -206
  87. package/test/overlay-trigger-longpress.test.js.map +2 -2
  88. package/test/overlay-trigger-sync.test.js +1 -1
  89. package/test/overlay-trigger-sync.test.js.map +2 -2
  90. package/test/overlay-trigger.test.js +1 -1
  91. package/test/overlay-trigger.test.js.map +2 -2
  92. package/test/overlay-update.test.js +4 -4
  93. package/test/overlay-update.test.js.map +2 -2
  94. package/test/overlay.test.js +268 -386
  95. package/test/overlay.test.js.map +3 -3
  96. package/sp-overlay.d.ts +0 -6
  97. package/sp-overlay.dev.js +0 -5
  98. package/sp-overlay.js +0 -2
  99. package/src/AbstractOverlay.d.ts +0 -56
  100. package/src/AbstractOverlay.dev.js +0 -202
  101. package/src/AbstractOverlay.dev.js.map +0 -7
  102. package/src/AbstractOverlay.js +0 -2
  103. package/src/AbstractOverlay.js.map +0 -7
  104. package/src/Overlay.d.ts +0 -147
  105. package/src/Overlay.dev.js +0 -777
  106. package/src/Overlay.dev.js.map +0 -7
  107. package/src/Overlay.js +0 -33
  108. package/src/Overlay.js.map +0 -7
  109. package/src/OverlayDialog.d.ts +0 -4
  110. package/src/OverlayDialog.dev.js +0 -135
  111. package/src/OverlayDialog.dev.js.map +0 -7
  112. package/src/OverlayDialog.js +0 -2
  113. package/src/OverlayDialog.js.map +0 -7
  114. package/src/OverlayNoPopover.d.ts +0 -4
  115. package/src/OverlayNoPopover.dev.js +0 -110
  116. package/src/OverlayNoPopover.dev.js.map +0 -7
  117. package/src/OverlayNoPopover.js +0 -2
  118. package/src/OverlayNoPopover.js.map +0 -7
  119. package/src/OverlayPopover.d.ts +0 -4
  120. package/src/OverlayPopover.dev.js +0 -169
  121. package/src/OverlayPopover.dev.js.map +0 -7
  122. package/src/OverlayPopover.js +0 -2
  123. package/src/OverlayPopover.js.map +0 -7
  124. package/src/OverlayStack.d.ts +0 -43
  125. package/src/OverlayStack.dev.js +0 -150
  126. package/src/OverlayStack.dev.js.map +0 -7
  127. package/src/OverlayStack.js +0 -2
  128. package/src/OverlayStack.js.map +0 -7
  129. package/src/PlacementController.d.ts +0 -38
  130. package/src/PlacementController.dev.js +0 -199
  131. package/src/PlacementController.dev.js.map +0 -7
  132. package/src/PlacementController.js +0 -2
  133. package/src/PlacementController.js.map +0 -7
  134. package/src/fullSizePlugin.d.ts +0 -12
  135. package/src/fullSizePlugin.dev.js +0 -39
  136. package/src/fullSizePlugin.dev.js.map +0 -7
  137. package/src/fullSizePlugin.js +0 -2
  138. package/src/fullSizePlugin.js.map +0 -7
  139. package/src/overlay.css.dev.js +0 -9
  140. package/src/overlay.css.dev.js.map +0 -7
  141. package/src/overlay.css.js +0 -6
  142. package/src/overlay.css.js.map +0 -7
  143. package/src/topLayerOverTransforms.d.ts +0 -2
  144. package/src/topLayerOverTransforms.dev.js +0 -91
  145. package/src/topLayerOverTransforms.dev.js.map +0 -7
  146. package/src/topLayerOverTransforms.js +0 -2
  147. package/src/topLayerOverTransforms.js.map +0 -7
  148. package/stories/overlay-element.stories.js +0 -463
  149. package/stories/overlay-element.stories.js.map +0 -7
  150. package/test/overlay-element.test-vrt.js +0 -5
  151. package/test/overlay-element.test-vrt.js.map +0 -7
  152. package/test/overlay-element.test.js +0 -681
  153. package/test/overlay-element.test.js.map +0 -7
  154. package/test/overlay-v1.test.js +0 -651
  155. package/test/overlay-v1.test.js.map +0 -7
  156. /package/src/{overlay.css.d.ts → active-overlay.css.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["overlay.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { ThemeData } from '@spectrum-web-components/theme/src/Theme.js';\nimport type {\n OverlayDisplayQueryDetail,\n OverlayOptions,\n TriggerInteractions,\n} from './overlay-types';\nimport { OverlayStack } from './overlay-stack.dev.js'\n\n/**\n * This class allows access to the overlay system which allows a client to\n * position an element in the overlay positioned relative to another node.\n */\nexport class Overlay {\n private static overlayStack = new OverlayStack();\n\n private isOpen = false;\n private overlayElement: HTMLElement;\n private owner: HTMLElement;\n private interaction: TriggerInteractions;\n\n /**\n *\n * @param owner the parent element we will use to position the overlay element\n * @param interaction the type of interaction that caused this overlay to be shown\n * @param overlayElement the item to display as an overlay\n */\n constructor(\n owner: HTMLElement,\n interaction: TriggerInteractions,\n overlayElement: HTMLElement\n ) {\n this.owner = owner;\n this.overlayElement = overlayElement;\n this.interaction = interaction;\n }\n\n /**\n * Open an overlay\n *\n * @param owner the parent element we will use to position the overlay element\n * @param interaction the type of interaction that caused this overlay to be shown\n * @param overlayElement the item to display as an overlay\n * @param options display parameters\n * @param options.delayed if true delay opening of the overlay based on the global warmup/cooldown timer\n * @param options.offset distance to offset the overlay\n * @param options.placement side on which to position the overlay\n * @returns an Overlay object which can be used to close the overlay\n */\n public static async open(\n owner: HTMLElement,\n interaction: TriggerInteractions,\n overlayElement: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> {\n const overlay = new Overlay(owner, interaction, overlayElement);\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n undefined,\n 'The Overlay API is currently being refactored and there are likely to be breaking changes, deprecations and/or removals in a future release. The SWC team wants feedback from direct Overlay API consumers like you - please share your thoughts on the future of overlays here:',\n 'https://github.com/adobe/spectrum-web-components/discussions/2764',\n {\n type: 'default',\n level: 'deprecation',\n }\n );\n }\n await overlay.open(options);\n return (): void => {\n overlay.close();\n };\n }\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n /**\n * Open an overlay\n *\n * @param options display parameters\n * @param options.delayed delay before opening the overlay\n * @param options.offset distance to offset the overlay\n * @param options.placement side on which to position the overlay\n * @returns a Promise that resolves to true if this operation was cancelled\n */\n public async open({\n abortPromise,\n delayed,\n offset = 0,\n placement = 'top',\n receivesFocus,\n notImmediatelyClosable,\n virtualTrigger,\n root,\n }: OverlayOptions): Promise<boolean> {\n /* c8 ignore next */\n if (this.isOpen) return true;\n\n if (delayed === undefined) {\n delayed = this.overlayElement.hasAttribute('delayed');\n }\n\n const queryThemeDetail: ThemeData = {\n color: undefined,\n scale: undefined,\n lang: undefined,\n theme: undefined,\n };\n const queryThemeEvent = new CustomEvent<ThemeData>('sp-query-theme', {\n bubbles: true,\n composed: true,\n detail: queryThemeDetail,\n cancelable: true,\n });\n this.owner.dispatchEvent(queryThemeEvent);\n\n const overlayDetailQuery: OverlayDisplayQueryDetail = {};\n const queryOverlayDetailEvent =\n new CustomEvent<OverlayDisplayQueryDetail>('sp-overlay-query', {\n bubbles: true,\n composed: true,\n detail: overlayDetailQuery,\n cancelable: true,\n });\n this.overlayElement.dispatchEvent(queryOverlayDetailEvent);\n\n await Overlay.overlayStack.openOverlay({\n abortPromise,\n content: this.overlayElement,\n contentTip: overlayDetailQuery.overlayContentTipElement,\n delayed,\n offset: offset,\n placement: placement,\n trigger: this.owner,\n interaction: this.interaction,\n theme: queryThemeDetail,\n receivesFocus,\n root,\n notImmediatelyClosable,\n virtualTrigger,\n ...overlayDetailQuery,\n });\n this.isOpen = true;\n return true;\n }\n\n /**\n * Close the overlay if it is open\n */\n public close(): void {\n Overlay.overlayStack.closeOverlay(this.overlayElement);\n }\n}\n\n/**\n * Announces that an overlay-based UI element has opened\n * @event sp-open\n * @type {object}\n * @property {TriggerInteractions} interaction type of interaction that triggered the opening\n */\n\n/**\n * Announces that an overlay-based UI element has opened\n * @event sp-close\n * @type {object}\n * @property {TriggerInteractions} interaction type of interaction that triggered the closing\n */\n"],
5
+ "mappings": ";AAkBA,SAAS,oBAAoB;AAMtB,MAAM,WAAN,MAAM,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcjB,YACI,OACA,aACA,gBACF;AAfF,SAAQ,SAAS;AAgBb,SAAK,QAAQ;AACb,SAAK,iBAAiB;AACtB,SAAK,cAAc;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,aAAoB,KAChB,OACA,aACA,gBACA,SACmB;AACnB,UAAM,UAAU,IAAI,SAAQ,OAAO,aAAa,cAAc;AAC9D,QAAI,MAAoB;AACpB,aAAO,MAAM;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACI,MAAM;AAAA,UACN,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,QAAQ,KAAK,OAAO;AAC1B,WAAO,MAAY;AACf,cAAQ,MAAM;AAAA,IAClB;AAAA,EACJ;AAAA,EAEA,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,KAAK;AAAA,IACd;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAAqC;AAEjC,QAAI,KAAK;AAAQ,aAAO;AAExB,QAAI,YAAY,QAAW;AACvB,gBAAU,KAAK,eAAe,aAAa,SAAS;AAAA,IACxD;AAEA,UAAM,mBAA8B;AAAA,MAChC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AACA,UAAM,kBAAkB,IAAI,YAAuB,kBAAkB;AAAA,MACjE,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,YAAY;AAAA,IAChB,CAAC;AACD,SAAK,MAAM,cAAc,eAAe;AAExC,UAAM,qBAAgD,CAAC;AACvD,UAAM,0BACF,IAAI,YAAuC,oBAAoB;AAAA,MAC3D,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,YAAY;AAAA,IAChB,CAAC;AACL,SAAK,eAAe,cAAc,uBAAuB;AAEzD,UAAM,SAAQ,aAAa,YAAY;AAAA,MACnC;AAAA,MACA,SAAS,KAAK;AAAA,MACd,YAAY,mBAAmB;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACP,CAAC;AACD,SAAK,SAAS;AACd,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACjB,aAAQ,aAAa,aAAa,KAAK,cAAc;AAAA,EACzD;AACJ;AAjJa,SACM,eAAe,IAAI,aAAa;AAD5C,WAAM,UAAN;",
6
+ "names": []
7
+ }
package/src/overlay.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";import{OverlayStack as y}from"./overlay-stack.js";const r=class r{constructor(e,t,n){this.isOpen=!1;this.owner=e,this.overlayElement=n,this.interaction=t}static async open(e,t,n,o){const a=new r(e,t,n);return await a.open(o),()=>{a.close()}}static update(){const e=new CustomEvent("sp-update-overlays",{bubbles:!0,composed:!0,cancelable:!0});document.dispatchEvent(e)}async open({abortPromise:e,delayed:t,offset:n=0,placement:o="top",receivesFocus:a,notImmediatelyClosable:l,virtualTrigger:c,root:u}){if(this.isOpen)return!0;t===void 0&&(t=this.overlayElement.hasAttribute("delayed"));const s={color:void 0,scale:void 0,lang:void 0,theme:void 0},p=new CustomEvent("sp-query-theme",{bubbles:!0,composed:!0,detail:s,cancelable:!0});this.owner.dispatchEvent(p);const i={},m=new CustomEvent("sp-overlay-query",{bubbles:!0,composed:!0,detail:i,cancelable:!0});return this.overlayElement.dispatchEvent(m),await r.overlayStack.openOverlay({abortPromise:e,content:this.overlayElement,contentTip:i.overlayContentTipElement,delayed:t,offset:n,placement:o,trigger:this.owner,interaction:this.interaction,theme:s,receivesFocus:a,root:u,notImmediatelyClosable:l,virtualTrigger:c,...i}),this.isOpen=!0,!0}close(){r.overlayStack.closeOverlay(this.overlayElement)}};r.overlayStack=new y;export let Overlay=r;
2
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["overlay.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { ThemeData } from '@spectrum-web-components/theme/src/Theme.js';\nimport type {\n OverlayDisplayQueryDetail,\n OverlayOptions,\n TriggerInteractions,\n} from './overlay-types';\nimport { OverlayStack } from './overlay-stack.js';\n\n/**\n * This class allows access to the overlay system which allows a client to\n * position an element in the overlay positioned relative to another node.\n */\nexport class Overlay {\n private static overlayStack = new OverlayStack();\n\n private isOpen = false;\n private overlayElement: HTMLElement;\n private owner: HTMLElement;\n private interaction: TriggerInteractions;\n\n /**\n *\n * @param owner the parent element we will use to position the overlay element\n * @param interaction the type of interaction that caused this overlay to be shown\n * @param overlayElement the item to display as an overlay\n */\n constructor(\n owner: HTMLElement,\n interaction: TriggerInteractions,\n overlayElement: HTMLElement\n ) {\n this.owner = owner;\n this.overlayElement = overlayElement;\n this.interaction = interaction;\n }\n\n /**\n * Open an overlay\n *\n * @param owner the parent element we will use to position the overlay element\n * @param interaction the type of interaction that caused this overlay to be shown\n * @param overlayElement the item to display as an overlay\n * @param options display parameters\n * @param options.delayed if true delay opening of the overlay based on the global warmup/cooldown timer\n * @param options.offset distance to offset the overlay\n * @param options.placement side on which to position the overlay\n * @returns an Overlay object which can be used to close the overlay\n */\n public static async open(\n owner: HTMLElement,\n interaction: TriggerInteractions,\n overlayElement: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> {\n const overlay = new Overlay(owner, interaction, overlayElement);\n if (window.__swc.DEBUG) {\n window.__swc.warn(\n undefined,\n 'The Overlay API is currently being refactored and there are likely to be breaking changes, deprecations and/or removals in a future release. The SWC team wants feedback from direct Overlay API consumers like you - please share your thoughts on the future of overlays here:',\n 'https://github.com/adobe/spectrum-web-components/discussions/2764',\n {\n type: 'default',\n level: 'deprecation',\n }\n );\n }\n await overlay.open(options);\n return (): void => {\n overlay.close();\n };\n }\n\n public static update(): void {\n const overlayUpdateEvent = new CustomEvent('sp-update-overlays', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n document.dispatchEvent(overlayUpdateEvent);\n }\n\n /**\n * Open an overlay\n *\n * @param options display parameters\n * @param options.delayed delay before opening the overlay\n * @param options.offset distance to offset the overlay\n * @param options.placement side on which to position the overlay\n * @returns a Promise that resolves to true if this operation was cancelled\n */\n public async open({\n abortPromise,\n delayed,\n offset = 0,\n placement = 'top',\n receivesFocus,\n notImmediatelyClosable,\n virtualTrigger,\n root,\n }: OverlayOptions): Promise<boolean> {\n /* c8 ignore next */\n if (this.isOpen) return true;\n\n if (delayed === undefined) {\n delayed = this.overlayElement.hasAttribute('delayed');\n }\n\n const queryThemeDetail: ThemeData = {\n color: undefined,\n scale: undefined,\n lang: undefined,\n theme: undefined,\n };\n const queryThemeEvent = new CustomEvent<ThemeData>('sp-query-theme', {\n bubbles: true,\n composed: true,\n detail: queryThemeDetail,\n cancelable: true,\n });\n this.owner.dispatchEvent(queryThemeEvent);\n\n const overlayDetailQuery: OverlayDisplayQueryDetail = {};\n const queryOverlayDetailEvent =\n new CustomEvent<OverlayDisplayQueryDetail>('sp-overlay-query', {\n bubbles: true,\n composed: true,\n detail: overlayDetailQuery,\n cancelable: true,\n });\n this.overlayElement.dispatchEvent(queryOverlayDetailEvent);\n\n await Overlay.overlayStack.openOverlay({\n abortPromise,\n content: this.overlayElement,\n contentTip: overlayDetailQuery.overlayContentTipElement,\n delayed,\n offset: offset,\n placement: placement,\n trigger: this.owner,\n interaction: this.interaction,\n theme: queryThemeDetail,\n receivesFocus,\n root,\n notImmediatelyClosable,\n virtualTrigger,\n ...overlayDetailQuery,\n });\n this.isOpen = true;\n return true;\n }\n\n /**\n * Close the overlay if it is open\n */\n public close(): void {\n Overlay.overlayStack.closeOverlay(this.overlayElement);\n }\n}\n\n/**\n * Announces that an overlay-based UI element has opened\n * @event sp-open\n * @type {object}\n * @property {TriggerInteractions} interaction type of interaction that triggered the opening\n */\n\n/**\n * Announces that an overlay-based UI element has opened\n * @event sp-close\n * @type {object}\n * @property {TriggerInteractions} interaction type of interaction that triggered the closing\n */\n"],
5
+ "mappings": "aAkBA,OAAS,gBAAAA,MAAoB,qBAMtB,MAAMC,EAAN,MAAMA,CAAQ,CAcjB,YACIC,EACAC,EACAC,EACF,CAfF,KAAQ,OAAS,GAgBb,KAAK,MAAQF,EACb,KAAK,eAAiBE,EACtB,KAAK,YAAcD,CACvB,CAcA,aAAoB,KAChBD,EACAC,EACAC,EACAC,EACmB,CACnB,MAAMC,EAAU,IAAIL,EAAQC,EAAOC,EAAaC,CAAc,EAY9D,aAAME,EAAQ,KAAKD,CAAO,EACnB,IAAY,CACfC,EAAQ,MAAM,CAClB,CACJ,CAEA,OAAc,QAAe,CACzB,MAAMC,EAAqB,IAAI,YAAY,qBAAsB,CAC7D,QAAS,GACT,SAAU,GACV,WAAY,EAChB,CAAC,EACD,SAAS,cAAcA,CAAkB,CAC7C,CAWA,MAAa,KAAK,CACd,aAAAC,EACA,QAAAC,EACA,OAAAC,EAAS,EACT,UAAAC,EAAY,MACZ,cAAAC,EACA,uBAAAC,EACA,eAAAC,EACA,KAAAC,CACJ,EAAqC,CAEjC,GAAI,KAAK,OAAQ,MAAO,GAEpBN,IAAY,SACZA,EAAU,KAAK,eAAe,aAAa,SAAS,GAGxD,MAAMO,EAA8B,CAChC,MAAO,OACP,MAAO,OACP,KAAM,OACN,MAAO,MACX,EACMC,EAAkB,IAAI,YAAuB,iBAAkB,CACjE,QAAS,GACT,SAAU,GACV,OAAQD,EACR,WAAY,EAChB,CAAC,EACD,KAAK,MAAM,cAAcC,CAAe,EAExC,MAAMC,EAAgD,CAAC,EACjDC,EACF,IAAI,YAAuC,mBAAoB,CAC3D,QAAS,GACT,SAAU,GACV,OAAQD,EACR,WAAY,EAChB,CAAC,EACL,YAAK,eAAe,cAAcC,CAAuB,EAEzD,MAAMlB,EAAQ,aAAa,YAAY,CACnC,aAAAO,EACA,QAAS,KAAK,eACd,WAAYU,EAAmB,yBAC/B,QAAAT,EACA,OAAQC,EACR,UAAWC,EACX,QAAS,KAAK,MACd,YAAa,KAAK,YAClB,MAAOK,EACP,cAAAJ,EACA,KAAAG,EACA,uBAAAF,EACA,eAAAC,EACA,GAAGI,CACP,CAAC,EACD,KAAK,OAAS,GACP,EACX,CAKO,OAAc,CACjBjB,EAAQ,aAAa,aAAa,KAAK,cAAc,CACzD,CACJ,EAjJaA,EACM,aAAe,IAAID,EAD/B,WAAM,QAANC",
6
+ "names": ["OverlayStack", "_Overlay", "owner", "interaction", "overlayElement", "options", "overlay", "overlayUpdateEvent", "abortPromise", "delayed", "offset", "placement", "receivesFocus", "notImmediatelyClosable", "virtualTrigger", "root", "queryThemeDetail", "queryThemeEvent", "overlayDetailQuery", "queryOverlayDetailEvent"]
7
+ }
@@ -99,7 +99,7 @@ class OverlayDrag extends LitElement {
99
99
  if (!this.targetElement)
100
100
  return;
101
101
  this.targetElement.addEventListener(
102
- "pointerdown",
102
+ "mousedown",
103
103
  (event2) => this.onMouseDown(event2)
104
104
  );
105
105
  this.resetTargetPosition();
@@ -109,7 +109,6 @@ class OverlayDrag extends LitElement {
109
109
  const parent = target.parentElement;
110
110
  if (!parent)
111
111
  return;
112
- target.setPointerCapture(event.pointerId);
113
112
  const max = {
114
113
  x: parent.offsetWidth - target.offsetWidth,
115
114
  y: parent.offsetHeight - target.offsetHeight
@@ -135,13 +134,12 @@ class OverlayDrag extends LitElement {
135
134
  this.top = Math.min(Math.max(newPosition.y, 0), max.y);
136
135
  Overlay.update();
137
136
  };
138
- const onMouseUp = (event2) => {
139
- target.setPointerCapture(event2.pointerId);
140
- document.removeEventListener("pointermove", onMouseMove);
141
- document.removeEventListener("pointerup", onMouseUp);
137
+ const onMouseUp = () => {
138
+ document.removeEventListener("mousemove", onMouseMove);
139
+ document.removeEventListener("mouseup", onMouseUp);
142
140
  };
143
- document.addEventListener("pointermove", onMouseMove);
144
- document.addEventListener("pointerup", onMouseUp);
141
+ document.addEventListener("mousemove", onMouseMove);
142
+ document.addEventListener("mouseup", onMouseUp);
145
143
  }
146
144
  resetTargetPosition() {
147
145
  if (!this.targetElement)
@@ -258,6 +256,7 @@ class RecursivePopover extends LitElement {
258
256
  slot="click-content"
259
257
  direction="${this.placement}"
260
258
  tip
259
+ open
261
260
  >
262
261
  <sp-dialog size="s" no-divider>
263
262
  ${this.depth < MAX_DEPTH ? html`
@@ -288,7 +287,7 @@ customElements.define("recursive-popover", RecursivePopover);
288
287
  export class PopoverContent extends LitElement {
289
288
  render() {
290
289
  return html`
291
- <overlay-trigger type="modal" placement="bottom">
290
+ <overlay-trigger>
292
291
  <sp-button slot="trigger">Open me</sp-button>
293
292
  <sp-popover slot="click-content" direction="bottom">
294
293
  <sp-dialog no-divider>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-story-components.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n css,\n CSSResultGroup,\n html,\n LitElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport {\n Overlay,\n OverlayTrigger,\n Placement,\n} from '@spectrum-web-components/overlay';\nimport { RadioGroup } from '@spectrum-web-components/radio';\nimport '@spectrum-web-components/button/sp-button.js';\nimport { Button } from '@spectrum-web-components/button';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/radio/sp-radio.js';\nimport '@spectrum-web-components/radio/sp-radio-group.js';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\n\n// Prevent infinite recursion in browser\nconst MAX_DEPTH = 7;\n\nclass OverlayTargetIcon extends LitElement {\n static override get styles(): CSSResultGroup {\n return css`\n :host {\n position: absolute;\n display: block;\n color: var(--spectrum-global-color-magenta-700);\n width: 64px;\n height: 64px;\n top: 0;\n left: 0;\n }\n `;\n }\n\n public override render(): TemplateResult {\n return html`\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fas\"\n data-icon=\"bullseye\"\n class=\"svg-inline--fa fa-bullseye fa-w-16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 496 512\"\n >\n <path\n fill=\"currentColor\"\n d=\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z\"\n ></path>\n </svg>\n `;\n }\n}\ncustomElements.define('overlay-target-icon', OverlayTargetIcon);\n\nclass OverlayDrag extends LitElement {\n @property({ type: Number })\n private top = 100;\n @property({ type: Number })\n private left = 100;\n\n private targetElement: HTMLElement | undefined | null;\n\n static override get styles(): CSSResultGroup {\n return css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n ::slotted(*) {\n display: block;\n width: 100%;\n height: 100%;\n }\n `;\n }\n\n private onSlotChange(event: Event & { target: HTMLSlotElement }): void {\n const slot = event.target as HTMLSlotElement;\n this.targetElement = undefined;\n\n const nodes = slot.assignedNodes();\n const slotElement = nodes.find(\n (node) => node instanceof HTMLElement\n ) as HTMLElement;\n if (!slotElement) return;\n\n this.targetElement = slotElement.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLElement;\n if (!this.targetElement) return;\n\n this.targetElement.addEventListener(\n 'pointerdown',\n (event: PointerEvent) => this.onMouseDown(event)\n );\n\n this.resetTargetPosition();\n }\n\n private onMouseDown(event: PointerEvent): void {\n const target = event.target as HTMLElement;\n const parent = target.parentElement;\n if (!parent) return;\n target.setPointerCapture(event.pointerId);\n\n const max = {\n x: parent.offsetWidth - target.offsetWidth,\n y: parent.offsetHeight - target.offsetHeight,\n };\n const dragStart = {\n x: event.clientX,\n y: event.clientY,\n };\n const originalPos = {\n x: this.left,\n y: this.top,\n };\n\n const onMouseMove = (event: MouseEvent): void => {\n const dragDelta = {\n x: event.clientX - dragStart.x,\n y: event.clientY - dragStart.y,\n };\n const newPosition = {\n x: dragDelta.x + originalPos.x,\n y: dragDelta.y + originalPos.y,\n };\n this.left = Math.min(Math.max(newPosition.x, 0), max.x);\n this.top = Math.min(Math.max(newPosition.y, 0), max.y);\n Overlay.update();\n };\n\n const onMouseUp = (event: PointerEvent): void => {\n target.setPointerCapture(event.pointerId);\n document.removeEventListener('pointermove', onMouseMove);\n document.removeEventListener('pointerup', onMouseUp);\n };\n\n document.addEventListener('pointermove', onMouseMove);\n document.addEventListener('pointerup', onMouseUp);\n }\n\n public resetTargetPosition(): void {\n if (!this.targetElement) return;\n const target = this.targetElement as HTMLElement;\n const parent = target.parentElement;\n if (!parent) return;\n\n this.left = (parent.offsetWidth - target.offsetWidth) / 2;\n this.top = (parent.offsetHeight - target.offsetHeight) / 2;\n }\n\n public override updated(): void {\n if (this.targetElement) {\n this.targetElement.style.transform = `translate(${this.left}px, ${this.top}px)`;\n }\n }\n\n public override render(): TemplateResult {\n return html`\n <slot @slotchange=${this.onSlotChange}></slot>\n `;\n }\n}\ncustomElements.define('overlay-drag', OverlayDrag);\n\nclass RecursivePopover extends LitElement {\n @property({ type: String })\n private placement: Placement;\n\n @property({ type: Number })\n private depth = 0;\n\n @query('[slot=\"trigger\"]')\n private trigger!: Button;\n\n protected isShiftTabbing = false;\n\n public override shadowRoot!: ShadowRoot;\n\n public static override get styles(): CSSResultGroup {\n return [\n css`\n :host {\n display: block;\n text-align: center;\n }\n\n overlay-trigger {\n display: inline-flex;\n margin-top: 11px;\n }\n `,\n ];\n }\n\n public constructor() {\n super();\n this.placement = 'right';\n this.depth = 0;\n this.addEventListener('keydown', (event: KeyboardEvent) => {\n const { code } = event;\n if (code === 'Enter') {\n this.trigger.click();\n }\n });\n this.addEventListener('focusin', this.handleFocusin);\n }\n\n private handleFocusin(): void {\n this.focus();\n }\n\n public override focus(): void {\n if (this.shadowRoot.activeElement !== null) {\n return;\n }\n const firstFocusable = this.shadowRoot.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n ) as LitElement;\n if (firstFocusable) {\n if (firstFocusable.updateComplete) {\n firstFocusable.updateComplete.then(() =>\n firstFocusable.focus()\n );\n } else {\n firstFocusable.focus();\n }\n return;\n }\n super.focus();\n }\n\n public onRadioChange(event: Event): void {\n const target = event.target as RadioGroup;\n this.placement = target.selected as Placement;\n }\n\n private captureEnter(event: KeyboardEvent): void {\n const { code } = event;\n if (code === 'Enter') {\n event.stopPropagation();\n }\n }\n\n public override render(): TemplateResult {\n return html`\n <sp-radio-group\n horizontal\n @change=${this.onRadioChange}\n selected=\"${this.placement}\"\n name=\"group-example\"\n >\n <sp-radio value=\"top\">Top</sp-radio>\n <sp-radio value=\"right\">Right</sp-radio>\n <sp-radio value=\"bottom\">Bottom</sp-radio>\n <sp-radio value=\"left\">Left</sp-radio>\n </sp-radio-group>\n <overlay-trigger placement=\"${this.placement}\" type=\"modal\">\n <sp-button\n slot=\"trigger\"\n variant=\"accent\"\n @keydown=${this.captureEnter}\n >\n Open Popover\n </sp-button>\n <sp-popover\n slot=\"click-content\"\n direction=\"${this.placement}\"\n tip\n >\n <sp-dialog size=\"s\" no-divider>\n ${this.depth < MAX_DEPTH\n ? html`\n <recursive-popover\n position=\"${this.placement}\"\n depth=\"${this.depth + 1}\"\n tabindex=\"0\"\n ></recursive-popover>\n `\n : html`\n <div>Maximum Depth</div>\n `}\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n }\n}\ncustomElements.define('recursive-popover', RecursivePopover);\n\nexport class PopoverContent extends LitElement {\n @query('[slot=\"trigger\"]')\n public button!: Button;\n\n @query('overlay-trigger')\n public trigger!: OverlayTrigger;\n\n override render(): TemplateResult {\n return html`\n <overlay-trigger type=\"modal\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Open me</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\">\n <sp-dialog no-divider>\n <p>This is all the content.</p>\n <p>This is all the content.</p>\n <p>This is all the content.</p>\n <p>This is all the content.</p>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n }\n}\n\ncustomElements.define('popover-content', PopoverContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'popover-content': PopoverContent;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n css,\n CSSResultGroup,\n html,\n LitElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport {\n Overlay,\n OverlayTrigger,\n Placement,\n} from '@spectrum-web-components/overlay';\nimport { RadioGroup } from '@spectrum-web-components/radio';\nimport '@spectrum-web-components/button/sp-button.js';\nimport { Button } from '@spectrum-web-components/button';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/radio/sp-radio.js';\nimport '@spectrum-web-components/radio/sp-radio-group.js';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\n\n// Prevent infinite recursion in browser\nconst MAX_DEPTH = 7;\n\nclass OverlayTargetIcon extends LitElement {\n static override get styles(): CSSResultGroup {\n return css`\n :host {\n position: absolute;\n display: block;\n color: var(--spectrum-global-color-magenta-700);\n width: 64px;\n height: 64px;\n top: 0;\n left: 0;\n }\n `;\n }\n\n public override render(): TemplateResult {\n return html`\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n data-prefix=\"fas\"\n data-icon=\"bullseye\"\n class=\"svg-inline--fa fa-bullseye fa-w-16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 496 512\"\n >\n <path\n fill=\"currentColor\"\n d=\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z\"\n ></path>\n </svg>\n `;\n }\n}\ncustomElements.define('overlay-target-icon', OverlayTargetIcon);\n\nclass OverlayDrag extends LitElement {\n @property({ type: Number })\n private top = 100;\n @property({ type: Number })\n private left = 100;\n\n private targetElement: HTMLElement | undefined | null;\n\n static override get styles(): CSSResultGroup {\n return css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n ::slotted(*) {\n display: block;\n width: 100%;\n height: 100%;\n }\n `;\n }\n\n private onSlotChange(event: Event & { target: HTMLSlotElement }): void {\n const slot = event.target as HTMLSlotElement;\n this.targetElement = undefined;\n\n const nodes = slot.assignedNodes();\n const slotElement = nodes.find(\n (node) => node instanceof HTMLElement\n ) as HTMLElement;\n if (!slotElement) return;\n\n this.targetElement = slotElement.querySelector(\n '[slot=\"trigger\"]'\n ) as HTMLElement;\n if (!this.targetElement) return;\n\n this.targetElement.addEventListener('mousedown', (event) =>\n this.onMouseDown(event)\n );\n\n this.resetTargetPosition();\n }\n\n private onMouseDown(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n const parent = target.parentElement;\n if (!parent) return;\n\n const max = {\n x: parent.offsetWidth - target.offsetWidth,\n y: parent.offsetHeight - target.offsetHeight,\n };\n const dragStart = {\n x: event.clientX,\n y: event.clientY,\n };\n const originalPos = {\n x: this.left,\n y: this.top,\n };\n\n const onMouseMove = (event: MouseEvent): void => {\n const dragDelta = {\n x: event.clientX - dragStart.x,\n y: event.clientY - dragStart.y,\n };\n const newPosition = {\n x: dragDelta.x + originalPos.x,\n y: dragDelta.y + originalPos.y,\n };\n this.left = Math.min(Math.max(newPosition.x, 0), max.x);\n this.top = Math.min(Math.max(newPosition.y, 0), max.y);\n Overlay.update();\n };\n\n const onMouseUp = (): void => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n public resetTargetPosition(): void {\n if (!this.targetElement) return;\n const target = this.targetElement as HTMLElement;\n const parent = target.parentElement;\n if (!parent) return;\n\n this.left = (parent.offsetWidth - target.offsetWidth) / 2;\n this.top = (parent.offsetHeight - target.offsetHeight) / 2;\n }\n\n public override updated(): void {\n if (this.targetElement) {\n this.targetElement.style.transform = `translate(${this.left}px, ${this.top}px)`;\n }\n }\n\n public override render(): TemplateResult {\n return html`\n <slot @slotchange=${this.onSlotChange}></slot>\n `;\n }\n}\ncustomElements.define('overlay-drag', OverlayDrag);\n\nclass RecursivePopover extends LitElement {\n @property({ type: String })\n private placement: Placement;\n\n @property({ type: Number })\n private depth = 0;\n\n @query('[slot=\"trigger\"]')\n private trigger!: Button;\n\n protected isShiftTabbing = false;\n\n public override shadowRoot!: ShadowRoot;\n\n public static override get styles(): CSSResultGroup {\n return [\n css`\n :host {\n display: block;\n text-align: center;\n }\n\n overlay-trigger {\n display: inline-flex;\n margin-top: 11px;\n }\n `,\n ];\n }\n\n public constructor() {\n super();\n this.placement = 'right';\n this.depth = 0;\n this.addEventListener('keydown', (event: KeyboardEvent) => {\n const { code } = event;\n if (code === 'Enter') {\n this.trigger.click();\n }\n });\n this.addEventListener('focusin', this.handleFocusin);\n }\n\n private handleFocusin(): void {\n this.focus();\n }\n\n public override focus(): void {\n if (this.shadowRoot.activeElement !== null) {\n return;\n }\n const firstFocusable = this.shadowRoot.querySelector(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n ) as LitElement;\n if (firstFocusable) {\n if (firstFocusable.updateComplete) {\n firstFocusable.updateComplete.then(() =>\n firstFocusable.focus()\n );\n } else {\n firstFocusable.focus();\n }\n return;\n }\n super.focus();\n }\n\n public onRadioChange(event: Event): void {\n const target = event.target as RadioGroup;\n this.placement = target.selected as Placement;\n }\n\n private captureEnter(event: KeyboardEvent): void {\n const { code } = event;\n if (code === 'Enter') {\n event.stopPropagation();\n }\n }\n\n public override render(): TemplateResult {\n return html`\n <sp-radio-group\n horizontal\n @change=${this.onRadioChange}\n selected=\"${this.placement}\"\n name=\"group-example\"\n >\n <sp-radio value=\"top\">Top</sp-radio>\n <sp-radio value=\"right\">Right</sp-radio>\n <sp-radio value=\"bottom\">Bottom</sp-radio>\n <sp-radio value=\"left\">Left</sp-radio>\n </sp-radio-group>\n <overlay-trigger placement=\"${this.placement}\" type=\"modal\">\n <sp-button\n slot=\"trigger\"\n variant=\"accent\"\n @keydown=${this.captureEnter}\n >\n Open Popover\n </sp-button>\n <sp-popover\n slot=\"click-content\"\n direction=\"${this.placement}\"\n tip\n open\n >\n <sp-dialog size=\"s\" no-divider>\n ${this.depth < MAX_DEPTH\n ? html`\n <recursive-popover\n position=\"${this.placement}\"\n depth=\"${this.depth + 1}\"\n tabindex=\"0\"\n ></recursive-popover>\n `\n : html`\n <div>Maximum Depth</div>\n `}\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n }\n}\ncustomElements.define('recursive-popover', RecursivePopover);\n\nexport class PopoverContent extends LitElement {\n @query('[slot=\"trigger\"]')\n public button!: Button;\n\n @query('overlay-trigger')\n public trigger!: OverlayTrigger;\n\n override render(): TemplateResult {\n return html`\n <overlay-trigger>\n <sp-button slot=\"trigger\">Open me</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\">\n <sp-dialog no-divider>\n <p>This is all the content.</p>\n <p>This is all the content.</p>\n <p>This is all the content.</p>\n <p>This is all the content.</p>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n }\n}\n\ncustomElements.define('popover-content', PopoverContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'popover-content': PopoverContent;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["event"]
7
7
  }