@spectrum-web-components/overlay 0.19.2-overlay.33 → 0.19.3

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 (114) hide show
  1. package/custom-elements.json +1212 -0
  2. package/package.json +6 -57
  3. package/src/OverlayTrigger.d.ts +31 -18
  4. package/src/OverlayTrigger.dev.js +245 -137
  5. package/src/OverlayTrigger.dev.js.map +3 -3
  6. package/src/OverlayTrigger.js +22 -54
  7. package/src/OverlayTrigger.js.map +3 -3
  8. package/src/overlay-trigger.css.dev.js +1 -1
  9. package/src/overlay-trigger.css.dev.js.map +1 -1
  10. package/src/overlay-trigger.css.js +1 -1
  11. package/src/overlay-trigger.css.js.map +1 -1
  12. package/stories/overlay-story-components.js +2 -1
  13. package/stories/overlay-story-components.js.map +2 -2
  14. package/stories/overlay.stories.js +637 -652
  15. package/stories/overlay.stories.js.map +2 -2
  16. package/sync/overlay-trigger.d.ts +0 -4
  17. package/sync/overlay-trigger.dev.js +3 -1
  18. package/sync/overlay-trigger.dev.js.map +2 -2
  19. package/sync/overlay-trigger.js +1 -1
  20. package/sync/overlay-trigger.js.map +3 -3
  21. package/test/index.js +3 -3
  22. package/test/index.js.map +2 -2
  23. package/test/overlay-lifecycle.test.js +61 -15
  24. package/test/overlay-lifecycle.test.js.map +2 -2
  25. package/test/overlay-trigger-click.test.js +2 -3
  26. package/test/overlay-trigger-click.test.js.map +2 -2
  27. package/test/overlay-trigger-extended.test.js +1 -1
  28. package/test/overlay-trigger-extended.test.js.map +2 -2
  29. package/test/overlay-trigger-hover-click.test.js +1 -1
  30. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  31. package/test/overlay-trigger-hover.test.js +2 -2
  32. package/test/overlay-trigger-hover.test.js.map +2 -2
  33. package/test/overlay-trigger-longpress.test.js +1 -1
  34. package/test/overlay-trigger-longpress.test.js.map +2 -2
  35. package/test/overlay-update.test.js +4 -4
  36. package/test/overlay-update.test.js.map +2 -2
  37. package/test/overlay.test.js +3 -3
  38. package/test/overlay.test.js.map +2 -2
  39. package/sp-overlay.d.ts +0 -11
  40. package/sp-overlay.dev.js +0 -14
  41. package/sp-overlay.dev.js.map +0 -7
  42. package/sp-overlay.js +0 -2
  43. package/sp-overlay.js.map +0 -7
  44. package/src/OverlayBase.d.ts +0 -91
  45. package/src/OverlayBase.dev.js +0 -521
  46. package/src/OverlayBase.dev.js.map +0 -7
  47. package/src/OverlayBase.js +0 -16
  48. package/src/OverlayBase.js.map +0 -7
  49. package/src/OverlayDialog.d.ts +0 -8
  50. package/src/OverlayDialog.dev.js +0 -43
  51. package/src/OverlayDialog.dev.js.map +0 -7
  52. package/src/OverlayDialog.js +0 -2
  53. package/src/OverlayDialog.js.map +0 -7
  54. package/src/OverlayElement.d.ts +0 -66
  55. package/src/OverlayElement.dev.js +0 -371
  56. package/src/OverlayElement.dev.js.map +0 -7
  57. package/src/OverlayElement.js +0 -9
  58. package/src/OverlayElement.js.map +0 -7
  59. package/src/OverlayNoPopover.d.ts +0 -8
  60. package/src/OverlayNoPopover.dev.js +0 -63
  61. package/src/OverlayNoPopover.dev.js.map +0 -7
  62. package/src/OverlayNoPopover.js +0 -2
  63. package/src/OverlayNoPopover.js.map +0 -7
  64. package/src/OverlayPopover.d.ts +0 -8
  65. package/src/OverlayPopover.dev.js +0 -37
  66. package/src/OverlayPopover.dev.js.map +0 -7
  67. package/src/OverlayPopover.js +0 -2
  68. package/src/OverlayPopover.js.map +0 -7
  69. package/src/OverlayStack.d.ts +0 -24
  70. package/src/OverlayStack.dev.js +0 -113
  71. package/src/OverlayStack.dev.js.map +0 -7
  72. package/src/OverlayStack.js +0 -2
  73. package/src/OverlayStack.js.map +0 -7
  74. package/src/PlacementController.d.ts +0 -35
  75. package/src/PlacementController.dev.js +0 -172
  76. package/src/PlacementController.dev.js.map +0 -7
  77. package/src/PlacementController.js +0 -2
  78. package/src/PlacementController.js.map +0 -7
  79. package/src/fullSizePlugin.d.ts +0 -12
  80. package/src/fullSizePlugin.dev.js +0 -39
  81. package/src/fullSizePlugin.dev.js.map +0 -7
  82. package/src/fullSizePlugin.js +0 -2
  83. package/src/fullSizePlugin.js.map +0 -7
  84. package/src/overlay-base.css.d.ts +0 -2
  85. package/src/overlay-base.css.dev.js +0 -9
  86. package/src/overlay-base.css.dev.js.map +0 -7
  87. package/src/overlay-base.css.js +0 -6
  88. package/src/overlay-base.css.js.map +0 -7
  89. package/src/overlay-element.css.d.ts +0 -2
  90. package/src/overlay-element.css.dev.js +0 -7
  91. package/src/overlay-element.css.dev.js.map +0 -7
  92. package/src/overlay-element.css.js +0 -4
  93. package/src/overlay-element.css.js.map +0 -7
  94. package/src/placement.d.ts +0 -21
  95. package/src/placement.dev.js +0 -111
  96. package/src/placement.dev.js.map +0 -7
  97. package/src/placement.js +0 -2
  98. package/src/placement.js.map +0 -7
  99. package/src/sizePlugin.d.ts +0 -12
  100. package/src/sizePlugin.dev.js +0 -18
  101. package/src/sizePlugin.dev.js.map +0 -7
  102. package/src/sizePlugin.js +0 -2
  103. package/src/sizePlugin.js.map +0 -7
  104. package/src/topLayerOverTransforms.d.ts +0 -22
  105. package/src/topLayerOverTransforms.dev.js +0 -161
  106. package/src/topLayerOverTransforms.dev.js.map +0 -7
  107. package/src/topLayerOverTransforms.js +0 -2
  108. package/src/topLayerOverTransforms.js.map +0 -7
  109. package/stories/overlay-element.stories.js +0 -216
  110. package/stories/overlay-element.stories.js.map +0 -7
  111. package/test/overlay-element.test-vrt.js +0 -5
  112. package/test/overlay-element.test-vrt.js.map +0 -7
  113. package/test/overlay-element.test.js +0 -739
  114. package/test/overlay-element.test.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["OverlayTrigger.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\n\nimport { OverlayTriggerInteractions } from './overlay-types';\nimport overlayTriggerStyles from './overlay-trigger.css.js';\nimport '../sp-overlay.dev.js'\nimport { Placement } from '@floating-ui/dom';\nimport { OverlayBase } from './OverlayBase';\n\nexport type OverlayContentTypes = 'click' | 'hover' | 'longpress';\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\n/**\n * @element overlay-trigger\n *\n * @slot trigger - The content that will trigger the various overlays\n * @slot hover-content - The content that will be displayed on hover\n * @slot click-content - The content that will be displayed on click\n * @slot longpress-content - The content that will be displayed on click\n *\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class OverlayTrigger extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [overlayTriggerStyles];\n }\n\n /**\n * @type {\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\"}\n * @attr\n */\n @property({ reflect: true })\n public placement?: Placement;\n\n @property()\n public type?: OverlayTriggerInteractions;\n\n @property({ type: Number, reflect: true })\n public offset = 6;\n\n @property({ reflect: true })\n public open?: OverlayContentTypes;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @state()\n public hasLongpressContent = false;\n\n private longpressDescriptor?: HTMLElement;\n\n @state()\n private clickContent: HTMLElement[] = [];\n\n @state()\n private longpressContent: HTMLElement[] = [];\n\n @state()\n private hoverContent: HTMLElement[] = [];\n\n @state()\n private targetContent: HTMLElement[] = [];\n\n @query('#click-overlay', true)\n clickOverlayElement!: OverlayBase;\n\n @query('#longpress-overlay', true)\n longpressOverlayElement!: OverlayBase;\n\n @query('#hover-overlay', true)\n hoverOverlayElement!: OverlayBase;\n\n private _longpressId = `longpress-describedby-descriptor`;\n\n private getAssignedElementsFromEvent(event: Event): HTMLElement[] {\n const target = event.target as HTMLSlotElement;\n return target.assignedElements({ flatten: true }) as HTMLElement[];\n }\n\n private handleTriggerContent(event: Event): void {\n this.targetContent = this.getAssignedElementsFromEvent(event);\n }\n\n private handleClickContent(event: Event): void {\n this.clickContent = this.getAssignedElementsFromEvent(event);\n }\n\n private handleLongpressContent(event: Event): void {\n this.longpressContent = this.getAssignedElementsFromEvent(event);\n }\n\n private handleHoverContent(event: Event): void {\n this.hoverContent = this.getAssignedElementsFromEvent(event);\n }\n\n protected override render(): TemplateResult {\n // Keyboard event availability documented in README.md\n /* eslint-disable lit-a11y/click-events-have-key-events */\n return html`\n <slot\n id=\"trigger\"\n name=\"trigger\"\n @slotchange=${this.handleTriggerContent}\n ></slot>\n <div id=\"overlay-content\">\n <sp-overlay\n id=\"click-overlay\"\n ?disabled=${!this.clickContent.length}\n ?open=${this.open === 'click' && !!this.clickContent.length}\n .offset=${this.offset}\n .placement=${this.placement}\n .triggerElement=${this.targetContent[0]}\n .triggerInteraction=${'click'}\n .type=${this.type !== 'modal' ? 'auto' : 'modal'}\n @sp-closed=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.clickOverlayElement) return;\n if (this.open === 'click') {\n this.open = undefined;\n }\n }}\n @sp-opened=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.clickOverlayElement) return;\n this.open = 'click';\n }}\n >\n <slot\n name=\"click-content\"\n @slotchange=${this.handleClickContent}\n ></slot>\n </sp-overlay>\n <sp-overlay\n id=\"longpress-overlay\"\n ?disabled=${!this.longpressContent.length}\n ?open=${this.open === 'longpress' &&\n !!this.longpressContent.length}\n .offset=${this.offset}\n .placement=${this.placement}\n .triggerElement=${this.targetContent[0]}\n .triggerInteraction=${'longpress'}\n .type=${'auto'}\n @sp-closed=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.longpressOverlayElement) return;\n if (this.open === 'longpress') {\n this.open = undefined;\n }\n }}\n @sp-opened=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.longpressOverlayElement) return;\n this.open = 'longpress';\n }}\n >\n <slot\n name=\"longpress-content\"\n @slotchange=${this.handleLongpressContent}\n ></slot>\n </sp-overlay>\n <sp-overlay\n id=\"hover-overlay\"\n ?disabled=${!this.hoverContent.length}\n ?open=${this.open === 'hover' && !!this.hoverContent.length}\n .offset=${this.offset}\n .placement=${this.placement}\n .triggerElement=${this.targetContent[0]}\n .triggerInteraction=${'hover'}\n .type=${'hint'}\n @sp-closed=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.hoverOverlayElement) return;\n if (this.open === 'hover') {\n this.open = undefined;\n }\n }}\n @sp-opened=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.hoverOverlayElement) return;\n this.open = 'hover';\n }}\n >\n <slot\n name=\"hover-content\"\n @slotchange=${this.handleHoverContent}\n ></slot>\n </sp-overlay>\n <slot name=${this._longpressId}></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (this.disabled && changes.has('disabled')) {\n this.open = undefined;\n return;\n }\n if (changes.has('hasLongpressContent')) {\n this.manageLongpressDescriptor();\n }\n }\n\n protected manageLongpressDescriptor(): void {\n const trigger = this.querySelector(\n '[slot=\"trigger\"]'\n ) as SpectrumElement;\n const ariaDescribedby = trigger.getAttribute('aria-describedby');\n let descriptors = ariaDescribedby ? ariaDescribedby.split(/\\s+/) : [];\n\n if (this.hasLongpressContent) {\n if (!this.longpressDescriptor) {\n this.longpressDescriptor = document.createElement(\n 'div'\n ) as HTMLElement;\n\n this.longpressDescriptor.id = this._longpressId;\n this.longpressDescriptor.slot = this._longpressId;\n }\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n this.longpressDescriptor.textContent =\n LONGPRESS_INSTRUCTIONS[messageType];\n this.appendChild(this.longpressDescriptor);\n descriptors.push(this._longpressId);\n } else {\n if (this.longpressDescriptor) this.longpressDescriptor.remove();\n descriptors = descriptors.filter(\n (descriptor) => descriptor !== this._longpressId\n );\n }\n if (descriptors.length) {\n trigger.setAttribute('aria-describedby', descriptors.join(' '));\n } else {\n trigger.removeAttribute('aria-describedby');\n }\n }\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n return complete;\n }\n\n protected override willUpdate(): void {\n if ((this.placement as unknown as 'none') === 'none') {\n this.placement = undefined;\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport type { LongpressEvent } from '@spectrum-web-components/action-button';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\n\nimport {\n OverlayOpenCloseDetail,\n OverlayOptions,\n OverlayTriggerInteractions,\n Placement,\n TriggerInteractions,\n} from './overlay-types';\nimport { openOverlay } from './loader.dev.js'\nimport overlayTriggerStyles from './overlay-trigger.css.js';\n\nexport type OverlayContentTypes = 'click' | 'hover' | 'longpress';\n\ntype closeOverlay =\n | 'closeClickOverlay'\n | 'closeHoverOverlay'\n | 'closeLongpressOverlay';\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\n/**\n * @element overlay-trigger\n *\n * @slot trigger - The content that will trigger the various overlays\n * @slot hover-content - The content that will be displayed on hover\n * @slot click-content - The content that will be displayed on click\n * @slot longpress-content - The content that will be displayed on click\n *\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class OverlayTrigger extends SpectrumElement {\n private closeClickOverlay?: Promise<() => void>;\n private closeLongpressOverlay?: Promise<() => void>;\n private closeHoverOverlay?: Promise<() => void>;\n\n public static override get styles(): CSSResultArray {\n return [overlayTriggerStyles];\n }\n\n /**\n * @type {\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\"}\n * @attr\n */\n @property({ reflect: true })\n public placement: Placement = 'bottom';\n\n @property()\n public type?: OverlayTriggerInteractions;\n\n @property({ type: Number, reflect: true })\n public offset = 6;\n\n @property({ reflect: true })\n public open?: OverlayContentTypes;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @state()\n public hasLongpressContent = false;\n\n private longpressDescriptor?: HTMLElement;\n private clickContent?: HTMLElement;\n private longpressContent?: HTMLElement;\n private hoverContent?: HTMLElement;\n private targetContent?: HTMLElement;\n private overlaidContent?: HTMLElement;\n\n private _longpressId = `longpress-describedby-descriptor`;\n\n private handleClose(event?: CustomEvent<OverlayOpenCloseDetail>): void {\n if (\n event &&\n event.detail.interaction !== this.open &&\n event.detail.interaction !== this.type\n ) {\n return;\n }\n this.removeAttribute('open');\n }\n\n protected override render(): TemplateResult {\n // Keyboard event availability documented in README.md\n /* eslint-disable lit-a11y/click-events-have-key-events */\n return html`\n <slot\n id=\"trigger\"\n @click=${this.onTrigger}\n @longpress=${this.onTrigger}\n @mouseenter=${this.onTrigger}\n @mouseleave=${this.onTrigger}\n @focusin=${this.onTrigger}\n @focusout=${this.onTrigger}\n @sp-closed=${this.handleClose}\n @slotchange=${this.onTargetSlotChange}\n name=\"trigger\"\n ></slot>\n <div id=\"overlay-content\">\n <slot\n @slotchange=${this.onClickSlotChange}\n name=\"click-content\"\n ></slot>\n <slot\n @slotchange=${this.onLongpressSlotChange}\n name=\"longpress-content\"\n ></slot>\n <slot\n @slotchange=${this.onHoverSlotChange}\n name=\"hover-content\"\n ></slot>\n <slot name=${this._longpressId}></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (this.disabled && changes.has('disabled')) {\n this.closeAllOverlays();\n return;\n }\n if (changes.has('open')) {\n this.manageOpen();\n }\n if (changes.has('hasLongpressContent')) {\n this.manageLongpressDescriptor();\n }\n }\n\n protected manageLongpressDescriptor(): void {\n const trigger = this.querySelector(\n '[slot=\"trigger\"]'\n ) as SpectrumElement;\n const ariaDescribedby = trigger.getAttribute('aria-describedby');\n let descriptors = ariaDescribedby ? ariaDescribedby.split(/\\s+/) : [];\n\n if (this.hasLongpressContent) {\n if (!this.longpressDescriptor) {\n this.longpressDescriptor = document.createElement(\n 'div'\n ) as HTMLElement;\n\n this.longpressDescriptor.id = this._longpressId;\n this.longpressDescriptor.slot = this._longpressId;\n }\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n this.longpressDescriptor.textContent =\n LONGPRESS_INSTRUCTIONS[messageType];\n this.appendChild(this.longpressDescriptor);\n descriptors.push(this._longpressId);\n } else {\n if (this.longpressDescriptor) this.longpressDescriptor.remove();\n descriptors = descriptors.filter(\n (descriptor) => descriptor !== this._longpressId\n );\n }\n if (descriptors.length) {\n trigger.setAttribute('aria-describedby', descriptors.join(' '));\n } else {\n trigger.removeAttribute('aria-describedby');\n }\n }\n\n private closeAllOverlays(): void {\n if (this.abortOverlay) this.abortOverlay(true);\n (\n [\n 'closeClickOverlay',\n 'closeHoverOverlay',\n 'closeLongpressOverlay',\n ] as closeOverlay[]\n ).forEach(async (name) => {\n const canClose = this[name] as Promise<() => void>;\n if (canClose == null) return;\n delete this[name];\n (await canClose)();\n });\n this.overlaidContent = undefined;\n }\n\n private manageOpen(): void {\n const openHandlers: Record<OverlayContentTypes | 'none', () => void> = {\n click: () => this.onTriggerClick(),\n hover: () => this.onTriggerMouseEnter(),\n longpress: () => this.onTriggerLongpress(),\n none: () => this.closeAllOverlays(),\n };\n openHandlers[this.open ?? 'none']();\n }\n\n private async openOverlay(\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> {\n this.openStatePromise = new Promise(\n (res) => (this.openStateResolver = res)\n );\n this.addEventListener(\n 'sp-opened',\n () => {\n this.openStateResolver();\n },\n { once: true }\n );\n this.overlaidContent = content;\n return OverlayTrigger.openOverlay(\n target,\n interaction,\n content,\n options\n );\n }\n\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return openOverlay(target, interaction, content, options);\n };\n\n private get overlayOptions(): OverlayOptions {\n return {\n offset: this.offset,\n placement: this.placement,\n receivesFocus:\n !this.type || this.type === 'inline' || this.open === 'hover'\n ? undefined\n : 'auto',\n };\n }\n\n private onTrigger(event: CustomEvent<LongpressEvent>): void {\n const mouseIsEnteringHoverContent =\n event.type === 'mouseleave' &&\n this.open === 'hover' &&\n (event as unknown as MouseEvent).relatedTarget ===\n this.overlaidContent;\n if (mouseIsEnteringHoverContent && this.overlaidContent) {\n this.overlaidContent.addEventListener(\n 'mouseleave',\n (event: MouseEvent) => {\n const mouseIsEnteringTrigger =\n event.relatedTarget === this.targetContent;\n if (mouseIsEnteringTrigger) {\n return;\n }\n this.onTrigger(\n event as unknown as CustomEvent<LongpressEvent>\n );\n },\n { once: true }\n );\n return;\n }\n if (this.disabled) return;\n\n switch (event.type) {\n case 'mouseenter':\n case 'focusin':\n if (!this.open && this.hoverContent) {\n this.open = 'hover';\n }\n return;\n case 'mouseleave':\n case 'focusout':\n if (this.open === 'hover') {\n this.handleClose();\n }\n return;\n case 'click':\n if (this.clickContent) {\n this.open = event.type;\n }\n return;\n case 'longpress':\n if (this.longpressContent) {\n this._longpressEvent = event;\n this.open = event.type;\n }\n return;\n }\n }\n\n private prepareToFocusOverlayContent(overlayContent: HTMLElement): void {\n if (this.type !== 'modal') {\n return;\n }\n const firstFocusable = firstFocusableIn(overlayContent);\n if (!firstFocusable) {\n overlayContent.tabIndex = 0;\n }\n }\n\n public async onTriggerClick(): Promise<void> {\n if (\n !this.targetContent ||\n !this.clickContent ||\n this.closeClickOverlay\n ) {\n return;\n }\n const { targetContent, clickContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(clickContent);\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = true;\n }\n this.closeClickOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'click',\n clickContent,\n this.overlayOptions\n );\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = false;\n }\n }\n\n private _longpressEvent?: CustomEvent<LongpressEvent>;\n\n private async onTriggerLongpress(): Promise<void> {\n if (\n !this.targetContent ||\n !this.longpressContent ||\n this.closeLongpressOverlay\n ) {\n return;\n }\n const { targetContent, longpressContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(longpressContent);\n const notImmediatelyClosable =\n this._longpressEvent?.detail?.source !== 'keyboard';\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = true;\n }\n this.closeLongpressOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'longpress',\n longpressContent,\n {\n ...this.overlayOptions,\n receivesFocus: 'auto',\n notImmediatelyClosable,\n }\n );\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = false;\n }\n this._longpressEvent = undefined;\n }\n\n private abortOverlay: (cancelled: boolean) => void = () => {\n return;\n };\n\n public async onTriggerMouseEnter(): Promise<void> {\n if (\n !this.targetContent ||\n !this.hoverContent ||\n this.closeHoverOverlay\n ) {\n return;\n }\n const abortPromise: Promise<boolean> = new Promise((res) => {\n this.abortOverlay = res;\n });\n const { targetContent, hoverContent } = this;\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = true;\n }\n this.closeHoverOverlay = this.openOverlay(\n targetContent,\n 'hover',\n hoverContent,\n {\n abortPromise,\n ...this.overlayOptions,\n }\n );\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = false;\n }\n }\n\n private onClickSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.clickContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onLongpressSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.longpressContent = this.extractSlotContentFromEvent(event);\n this.hasLongpressContent =\n !!this.longpressContent || !!this.closeLongpressOverlay;\n this.manageOpen();\n }\n\n private onHoverSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.hoverContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onTargetSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.targetContent = this.extractSlotContentFromEvent(event);\n }\n\n private extractSlotContentFromEvent(event: Event): HTMLElement | undefined {\n const slot = event.target as HTMLSlotElement;\n const nodes = slot.assignedNodes({ flatten: true });\n return nodes.find((node) => node instanceof HTMLElement) as HTMLElement;\n }\n\n private openStatePromise = Promise.resolve();\n private openStateResolver!: () => void;\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.openStatePromise;\n return complete;\n }\n\n public override disconnectedCallback(): void {\n this.closeAllOverlays();\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["event"]
7
7
  }
@@ -1,62 +1,30 @@
1
- "use strict";var d=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var s=(p,r,e,t)=>{for(var n=t>1?void 0:t?h(r,e):r,o=p.length-1,a;o>=0;o--)(a=p[o])&&(n=(t?a(r,e,n):a(n))||n);return t&&n&&d(r,e,n),n};import{html as g,SpectrumElement as m}from"@spectrum-web-components/base";import{property as i,query as c,state as l}from"@spectrum-web-components/base/src/decorators.js";import{isAndroid as v,isIOS as u}from"@spectrum-web-components/shared/src/platform.js";import f from"./overlay-trigger.css.js";import"../sp-overlay.js";export const LONGPRESS_INSTRUCTIONS={touch:"Double tap and long press for additional options",keyboard:"Press Space or Alt+Down Arrow for additional options",mouse:"Click and hold for additional options"};export class OverlayTrigger extends m{constructor(){super(...arguments);this.offset=6;this.disabled=!1;this.hasLongpressContent=!1;this.clickContent=[];this.longpressContent=[];this.hoverContent=[];this.targetContent=[];this._longpressId="longpress-describedby-descriptor"}static get styles(){return[f]}getAssignedElementsFromEvent(e){return e.target.assignedElements({flatten:!0})}handleTriggerContent(e){this.targetContent=this.getAssignedElementsFromEvent(e)}handleClickContent(e){this.clickContent=this.getAssignedElementsFromEvent(e)}handleLongpressContent(e){this.longpressContent=this.getAssignedElementsFromEvent(e)}handleHoverContent(e){this.hoverContent=this.getAssignedElementsFromEvent(e)}render(){return g`
1
+ "use strict";var c=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var r=(p,i,e,t)=>{for(var o=t>1?void 0:t?v(i,e):i,s=p.length-1,n;s>=0;s--)(n=p[s])&&(o=(t?n(i,e,o):n(o))||o);return t&&o&&c(i,e,o),o};import{html as h,SpectrumElement as d}from"@spectrum-web-components/base";import{property as l,state as g}from"@spectrum-web-components/base/src/decorators.js";import{firstFocusableIn as m}from"@spectrum-web-components/shared/src/first-focusable-in.js";import{isAndroid as u,isIOS as y}from"@spectrum-web-components/shared/src/platform.js";import{openOverlay as C}from"./loader.js";import f from"./overlay-trigger.css.js";export const LONGPRESS_INSTRUCTIONS={touch:"Double tap and long press for additional options",keyboard:"Press Space or Alt+Down Arrow for additional options",mouse:"Click and hold for additional options"};const a=class extends d{constructor(){super(...arguments);this.placement="bottom";this.offset=6;this.disabled=!1;this.hasLongpressContent=!1;this._longpressId="longpress-describedby-descriptor";this.abortOverlay=()=>{};this.openStatePromise=Promise.resolve()}static get styles(){return[f]}handleClose(e){e&&e.detail.interaction!==this.open&&e.detail.interaction!==this.type||this.removeAttribute("open")}render(){return h`
2
2
  <slot
3
3
  id="trigger"
4
+ @click=${this.onTrigger}
5
+ @longpress=${this.onTrigger}
6
+ @mouseenter=${this.onTrigger}
7
+ @mouseleave=${this.onTrigger}
8
+ @focusin=${this.onTrigger}
9
+ @focusout=${this.onTrigger}
10
+ @sp-closed=${this.handleClose}
11
+ @slotchange=${this.onTargetSlotChange}
4
12
  name="trigger"
5
- @slotchange=${this.handleTriggerContent}
6
13
  ></slot>
7
14
  <div id="overlay-content">
8
- <sp-overlay
9
- id="click-overlay"
10
- ?disabled=${!this.clickContent.length}
11
- ?open=${this.open==="click"&&!!this.clickContent.length}
12
- .offset=${this.offset}
13
- .placement=${this.placement}
14
- .triggerElement=${this.targetContent[0]}
15
- .triggerInteraction=${"click"}
16
- .type=${this.type!=="modal"?"auto":"modal"}
17
- @sp-closed=${e=>{e.composedPath()[0]===this.clickOverlayElement&&this.open==="click"&&(this.open=void 0)}}
18
- @sp-opened=${e=>{e.composedPath()[0]===this.clickOverlayElement&&(this.open="click")}}
19
- >
20
- <slot
21
- name="click-content"
22
- @slotchange=${this.handleClickContent}
23
- ></slot>
24
- </sp-overlay>
25
- <sp-overlay
26
- id="longpress-overlay"
27
- ?disabled=${!this.longpressContent.length}
28
- ?open=${this.open==="longpress"&&!!this.longpressContent.length}
29
- .offset=${this.offset}
30
- .placement=${this.placement}
31
- .triggerElement=${this.targetContent[0]}
32
- .triggerInteraction=${"longpress"}
33
- .type=${"auto"}
34
- @sp-closed=${e=>{e.composedPath()[0]===this.longpressOverlayElement&&this.open==="longpress"&&(this.open=void 0)}}
35
- @sp-opened=${e=>{e.composedPath()[0]===this.longpressOverlayElement&&(this.open="longpress")}}
36
- >
37
- <slot
38
- name="longpress-content"
39
- @slotchange=${this.handleLongpressContent}
40
- ></slot>
41
- </sp-overlay>
42
- <sp-overlay
43
- id="hover-overlay"
44
- ?disabled=${!this.hoverContent.length}
45
- ?open=${this.open==="hover"&&!!this.hoverContent.length}
46
- .offset=${this.offset}
47
- .placement=${this.placement}
48
- .triggerElement=${this.targetContent[0]}
49
- .triggerInteraction=${"hover"}
50
- .type=${"hint"}
51
- @sp-closed=${e=>{e.composedPath()[0]===this.hoverOverlayElement&&this.open==="hover"&&(this.open=void 0)}}
52
- @sp-opened=${e=>{e.composedPath()[0]===this.hoverOverlayElement&&(this.open="hover")}}
53
- >
54
- <slot
55
- name="hover-content"
56
- @slotchange=${this.handleHoverContent}
57
- ></slot>
58
- </sp-overlay>
15
+ <slot
16
+ @slotchange=${this.onClickSlotChange}
17
+ name="click-content"
18
+ ></slot>
19
+ <slot
20
+ @slotchange=${this.onLongpressSlotChange}
21
+ name="longpress-content"
22
+ ></slot>
23
+ <slot
24
+ @slotchange=${this.onHoverSlotChange}
25
+ name="hover-content"
26
+ ></slot>
59
27
  <slot name=${this._longpressId}></slot>
60
28
  </div>
61
- `}updated(e){if(super.updated(e),this.disabled&&e.has("disabled")){this.open=void 0;return}e.has("hasLongpressContent")&&this.manageLongpressDescriptor()}manageLongpressDescriptor(){const e=this.querySelector('[slot="trigger"]'),t=e.getAttribute("aria-describedby");let n=t?t.split(/\s+/):[];if(this.hasLongpressContent){this.longpressDescriptor||(this.longpressDescriptor=document.createElement("div"),this.longpressDescriptor.id=this._longpressId,this.longpressDescriptor.slot=this._longpressId);const o=u()||v()?"touch":"keyboard";this.longpressDescriptor.textContent=LONGPRESS_INSTRUCTIONS[o],this.appendChild(this.longpressDescriptor),n.push(this._longpressId)}else this.longpressDescriptor&&this.longpressDescriptor.remove(),n=n.filter(o=>o!==this._longpressId);n.length?e.setAttribute("aria-describedby",n.join(" ")):e.removeAttribute("aria-describedby")}async getUpdateComplete(){return await super.getUpdateComplete()}willUpdate(){this.placement==="none"&&(this.placement=void 0)}}s([i({reflect:!0})],OverlayTrigger.prototype,"placement",2),s([i()],OverlayTrigger.prototype,"type",2),s([i({type:Number,reflect:!0})],OverlayTrigger.prototype,"offset",2),s([i({reflect:!0})],OverlayTrigger.prototype,"open",2),s([i({type:Boolean,reflect:!0})],OverlayTrigger.prototype,"disabled",2),s([l()],OverlayTrigger.prototype,"hasLongpressContent",2),s([l()],OverlayTrigger.prototype,"clickContent",2),s([l()],OverlayTrigger.prototype,"longpressContent",2),s([l()],OverlayTrigger.prototype,"hoverContent",2),s([l()],OverlayTrigger.prototype,"targetContent",2),s([c("#click-overlay",!0)],OverlayTrigger.prototype,"clickOverlayElement",2),s([c("#longpress-overlay",!0)],OverlayTrigger.prototype,"longpressOverlayElement",2),s([c("#hover-overlay",!0)],OverlayTrigger.prototype,"hoverOverlayElement",2);
29
+ `}updated(e){if(super.updated(e),this.disabled&&e.has("disabled")){this.closeAllOverlays();return}e.has("open")&&this.manageOpen(),e.has("hasLongpressContent")&&this.manageLongpressDescriptor()}manageLongpressDescriptor(){const e=this.querySelector('[slot="trigger"]'),t=e.getAttribute("aria-describedby");let o=t?t.split(/\s+/):[];if(this.hasLongpressContent){this.longpressDescriptor||(this.longpressDescriptor=document.createElement("div"),this.longpressDescriptor.id=this._longpressId,this.longpressDescriptor.slot=this._longpressId);const s=y()||u()?"touch":"keyboard";this.longpressDescriptor.textContent=LONGPRESS_INSTRUCTIONS[s],this.appendChild(this.longpressDescriptor),o.push(this._longpressId)}else this.longpressDescriptor&&this.longpressDescriptor.remove(),o=o.filter(s=>s!==this._longpressId);o.length?e.setAttribute("aria-describedby",o.join(" ")):e.removeAttribute("aria-describedby")}closeAllOverlays(){this.abortOverlay&&this.abortOverlay(!0),["closeClickOverlay","closeHoverOverlay","closeLongpressOverlay"].forEach(async e=>{const t=this[e];t!=null&&(delete this[e],(await t)())}),this.overlaidContent=void 0}manageOpen(){var t;({click:()=>this.onTriggerClick(),hover:()=>this.onTriggerMouseEnter(),longpress:()=>this.onTriggerLongpress(),none:()=>this.closeAllOverlays()})[(t=this.open)!=null?t:"none"]()}async openOverlay(e,t,o,s){return this.openStatePromise=new Promise(n=>this.openStateResolver=n),this.addEventListener("sp-opened",()=>{this.openStateResolver()},{once:!0}),this.overlaidContent=o,a.openOverlay(e,t,o,s)}get overlayOptions(){return{offset:this.offset,placement:this.placement,receivesFocus:!this.type||this.type==="inline"||this.open==="hover"?void 0:"auto"}}onTrigger(e){if(e.type==="mouseleave"&&this.open==="hover"&&e.relatedTarget===this.overlaidContent&&this.overlaidContent){this.overlaidContent.addEventListener("mouseleave",o=>{o.relatedTarget!==this.targetContent&&this.onTrigger(o)},{once:!0});return}if(!this.disabled)switch(e.type){case"mouseenter":case"focusin":!this.open&&this.hoverContent&&(this.open="hover");return;case"mouseleave":case"focusout":this.open==="hover"&&this.handleClose();return;case"click":this.clickContent&&(this.open=e.type);return;case"longpress":this.longpressContent&&(this._longpressEvent=e,this.open=e.type);return}}prepareToFocusOverlayContent(e){if(this.type!=="modal")return;m(e)||(e.tabIndex=0)}async onTriggerClick(){if(!this.targetContent||!this.clickContent||this.closeClickOverlay)return;const{targetContent:e,clickContent:t}=this;this.closeAllOverlays(),this.prepareToFocusOverlayContent(t),this.closeClickOverlay=this.openOverlay(e,this.type?this.type:"click",t,this.overlayOptions)}async onTriggerLongpress(){var s,n;if(!this.targetContent||!this.longpressContent||this.closeLongpressOverlay)return;const{targetContent:e,longpressContent:t}=this;this.closeAllOverlays(),this.prepareToFocusOverlayContent(t);const o=((n=(s=this._longpressEvent)==null?void 0:s.detail)==null?void 0:n.source)!=="keyboard";this.closeLongpressOverlay=this.openOverlay(e,this.type?this.type:"longpress",t,{...this.overlayOptions,receivesFocus:"auto",notImmediatelyClosable:o}),this._longpressEvent=void 0}async onTriggerMouseEnter(){if(!this.targetContent||!this.hoverContent||this.closeHoverOverlay)return;const e=new Promise(s=>{this.abortOverlay=s}),{targetContent:t,hoverContent:o}=this;this.closeHoverOverlay=this.openOverlay(t,"hover",o,{abortPromise:e,...this.overlayOptions})}onClickSlotChange(e){this.clickContent=this.extractSlotContentFromEvent(e),this.manageOpen()}onLongpressSlotChange(e){this.longpressContent=this.extractSlotContentFromEvent(e),this.hasLongpressContent=!!this.longpressContent||!!this.closeLongpressOverlay,this.manageOpen()}onHoverSlotChange(e){this.hoverContent=this.extractSlotContentFromEvent(e),this.manageOpen()}onTargetSlotChange(e){this.targetContent=this.extractSlotContentFromEvent(e)}extractSlotContentFromEvent(e){return e.target.assignedNodes({flatten:!0}).find(s=>s instanceof HTMLElement)}async getUpdateComplete(){const e=await super.getUpdateComplete();return await this.openStatePromise,e}disconnectedCallback(){this.closeAllOverlays(),super.disconnectedCallback()}};export let OverlayTrigger=a;OverlayTrigger.openOverlay=async(e,t,o,s)=>C(e,t,o,s),r([l({reflect:!0})],OverlayTrigger.prototype,"placement",2),r([l()],OverlayTrigger.prototype,"type",2),r([l({type:Number,reflect:!0})],OverlayTrigger.prototype,"offset",2),r([l({reflect:!0})],OverlayTrigger.prototype,"open",2),r([l({type:Boolean,reflect:!0})],OverlayTrigger.prototype,"disabled",2),r([g()],OverlayTrigger.prototype,"hasLongpressContent",2);
62
30
  //# sourceMappingURL=OverlayTrigger.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["OverlayTrigger.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\n\nimport { OverlayTriggerInteractions } from './overlay-types';\nimport overlayTriggerStyles from './overlay-trigger.css.js';\nimport '../sp-overlay.js';\nimport { Placement } from '@floating-ui/dom';\nimport { OverlayBase } from './OverlayBase';\n\nexport type OverlayContentTypes = 'click' | 'hover' | 'longpress';\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\n/**\n * @element overlay-trigger\n *\n * @slot trigger - The content that will trigger the various overlays\n * @slot hover-content - The content that will be displayed on hover\n * @slot click-content - The content that will be displayed on click\n * @slot longpress-content - The content that will be displayed on click\n *\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class OverlayTrigger extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [overlayTriggerStyles];\n }\n\n /**\n * @type {\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\"}\n * @attr\n */\n @property({ reflect: true })\n public placement?: Placement;\n\n @property()\n public type?: OverlayTriggerInteractions;\n\n @property({ type: Number, reflect: true })\n public offset = 6;\n\n @property({ reflect: true })\n public open?: OverlayContentTypes;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @state()\n public hasLongpressContent = false;\n\n private longpressDescriptor?: HTMLElement;\n\n @state()\n private clickContent: HTMLElement[] = [];\n\n @state()\n private longpressContent: HTMLElement[] = [];\n\n @state()\n private hoverContent: HTMLElement[] = [];\n\n @state()\n private targetContent: HTMLElement[] = [];\n\n @query('#click-overlay', true)\n clickOverlayElement!: OverlayBase;\n\n @query('#longpress-overlay', true)\n longpressOverlayElement!: OverlayBase;\n\n @query('#hover-overlay', true)\n hoverOverlayElement!: OverlayBase;\n\n private _longpressId = `longpress-describedby-descriptor`;\n\n private getAssignedElementsFromEvent(event: Event): HTMLElement[] {\n const target = event.target as HTMLSlotElement;\n return target.assignedElements({ flatten: true }) as HTMLElement[];\n }\n\n private handleTriggerContent(event: Event): void {\n this.targetContent = this.getAssignedElementsFromEvent(event);\n }\n\n private handleClickContent(event: Event): void {\n this.clickContent = this.getAssignedElementsFromEvent(event);\n }\n\n private handleLongpressContent(event: Event): void {\n this.longpressContent = this.getAssignedElementsFromEvent(event);\n }\n\n private handleHoverContent(event: Event): void {\n this.hoverContent = this.getAssignedElementsFromEvent(event);\n }\n\n protected override render(): TemplateResult {\n // Keyboard event availability documented in README.md\n /* eslint-disable lit-a11y/click-events-have-key-events */\n return html`\n <slot\n id=\"trigger\"\n name=\"trigger\"\n @slotchange=${this.handleTriggerContent}\n ></slot>\n <div id=\"overlay-content\">\n <sp-overlay\n id=\"click-overlay\"\n ?disabled=${!this.clickContent.length}\n ?open=${this.open === 'click' && !!this.clickContent.length}\n .offset=${this.offset}\n .placement=${this.placement}\n .triggerElement=${this.targetContent[0]}\n .triggerInteraction=${'click'}\n .type=${this.type !== 'modal' ? 'auto' : 'modal'}\n @sp-closed=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.clickOverlayElement) return;\n if (this.open === 'click') {\n this.open = undefined;\n }\n }}\n @sp-opened=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.clickOverlayElement) return;\n this.open = 'click';\n }}\n >\n <slot\n name=\"click-content\"\n @slotchange=${this.handleClickContent}\n ></slot>\n </sp-overlay>\n <sp-overlay\n id=\"longpress-overlay\"\n ?disabled=${!this.longpressContent.length}\n ?open=${this.open === 'longpress' &&\n !!this.longpressContent.length}\n .offset=${this.offset}\n .placement=${this.placement}\n .triggerElement=${this.targetContent[0]}\n .triggerInteraction=${'longpress'}\n .type=${'auto'}\n @sp-closed=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.longpressOverlayElement) return;\n if (this.open === 'longpress') {\n this.open = undefined;\n }\n }}\n @sp-opened=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.longpressOverlayElement) return;\n this.open = 'longpress';\n }}\n >\n <slot\n name=\"longpress-content\"\n @slotchange=${this.handleLongpressContent}\n ></slot>\n </sp-overlay>\n <sp-overlay\n id=\"hover-overlay\"\n ?disabled=${!this.hoverContent.length}\n ?open=${this.open === 'hover' && !!this.hoverContent.length}\n .offset=${this.offset}\n .placement=${this.placement}\n .triggerElement=${this.targetContent[0]}\n .triggerInteraction=${'hover'}\n .type=${'hint'}\n @sp-closed=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.hoverOverlayElement) return;\n if (this.open === 'hover') {\n this.open = undefined;\n }\n }}\n @sp-opened=${(event: Event) => {\n const target = event.composedPath()[0];\n if (target !== this.hoverOverlayElement) return;\n this.open = 'hover';\n }}\n >\n <slot\n name=\"hover-content\"\n @slotchange=${this.handleHoverContent}\n ></slot>\n </sp-overlay>\n <slot name=${this._longpressId}></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (this.disabled && changes.has('disabled')) {\n this.open = undefined;\n return;\n }\n if (changes.has('hasLongpressContent')) {\n this.manageLongpressDescriptor();\n }\n }\n\n protected manageLongpressDescriptor(): void {\n const trigger = this.querySelector(\n '[slot=\"trigger\"]'\n ) as SpectrumElement;\n const ariaDescribedby = trigger.getAttribute('aria-describedby');\n let descriptors = ariaDescribedby ? ariaDescribedby.split(/\\s+/) : [];\n\n if (this.hasLongpressContent) {\n if (!this.longpressDescriptor) {\n this.longpressDescriptor = document.createElement(\n 'div'\n ) as HTMLElement;\n\n this.longpressDescriptor.id = this._longpressId;\n this.longpressDescriptor.slot = this._longpressId;\n }\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n this.longpressDescriptor.textContent =\n LONGPRESS_INSTRUCTIONS[messageType];\n this.appendChild(this.longpressDescriptor);\n descriptors.push(this._longpressId);\n } else {\n if (this.longpressDescriptor) this.longpressDescriptor.remove();\n descriptors = descriptors.filter(\n (descriptor) => descriptor !== this._longpressId\n );\n }\n if (descriptors.length) {\n trigger.setAttribute('aria-describedby', descriptors.join(' '));\n } else {\n trigger.removeAttribute('aria-describedby');\n }\n }\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n return complete;\n }\n\n protected override willUpdate(): void {\n if ((this.placement as unknown as 'none') === 'none') {\n this.placement = undefined;\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["html", "SpectrumElement", "property", "query", "state", "isAndroid", "isIOS", "overlayTriggerStyles", "event", "changes", "trigger", "ariaDescribedby", "descriptors", "messageType", "descriptor", "__decorateClass"]
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\nimport type { LongpressEvent } from '@spectrum-web-components/action-button';\nimport { firstFocusableIn } from '@spectrum-web-components/shared/src/first-focusable-in.js';\nimport {\n isAndroid,\n isIOS,\n} from '@spectrum-web-components/shared/src/platform.js';\n\nimport {\n OverlayOpenCloseDetail,\n OverlayOptions,\n OverlayTriggerInteractions,\n Placement,\n TriggerInteractions,\n} from './overlay-types';\nimport { openOverlay } from './loader.js';\nimport overlayTriggerStyles from './overlay-trigger.css.js';\n\nexport type OverlayContentTypes = 'click' | 'hover' | 'longpress';\n\ntype closeOverlay =\n | 'closeClickOverlay'\n | 'closeHoverOverlay'\n | 'closeLongpressOverlay';\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\n/**\n * @element overlay-trigger\n *\n * @slot trigger - The content that will trigger the various overlays\n * @slot hover-content - The content that will be displayed on hover\n * @slot click-content - The content that will be displayed on click\n * @slot longpress-content - The content that will be displayed on click\n *\n * @fires sp-opened - Announces that the overlay has been opened\n * @fires sp-closed - Announces that the overlay has been closed\n */\nexport class OverlayTrigger extends SpectrumElement {\n private closeClickOverlay?: Promise<() => void>;\n private closeLongpressOverlay?: Promise<() => void>;\n private closeHoverOverlay?: Promise<() => void>;\n\n public static override get styles(): CSSResultArray {\n return [overlayTriggerStyles];\n }\n\n /**\n * @type {\"auto\" | \"auto-start\" | \"auto-end\" | \"top\" | \"bottom\" | \"right\" | \"left\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\" | \"none\"}\n * @attr\n */\n @property({ reflect: true })\n public placement: Placement = 'bottom';\n\n @property()\n public type?: OverlayTriggerInteractions;\n\n @property({ type: Number, reflect: true })\n public offset = 6;\n\n @property({ reflect: true })\n public open?: OverlayContentTypes;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @state()\n public hasLongpressContent = false;\n\n private longpressDescriptor?: HTMLElement;\n private clickContent?: HTMLElement;\n private longpressContent?: HTMLElement;\n private hoverContent?: HTMLElement;\n private targetContent?: HTMLElement;\n private overlaidContent?: HTMLElement;\n\n private _longpressId = `longpress-describedby-descriptor`;\n\n private handleClose(event?: CustomEvent<OverlayOpenCloseDetail>): void {\n if (\n event &&\n event.detail.interaction !== this.open &&\n event.detail.interaction !== this.type\n ) {\n return;\n }\n this.removeAttribute('open');\n }\n\n protected override render(): TemplateResult {\n // Keyboard event availability documented in README.md\n /* eslint-disable lit-a11y/click-events-have-key-events */\n return html`\n <slot\n id=\"trigger\"\n @click=${this.onTrigger}\n @longpress=${this.onTrigger}\n @mouseenter=${this.onTrigger}\n @mouseleave=${this.onTrigger}\n @focusin=${this.onTrigger}\n @focusout=${this.onTrigger}\n @sp-closed=${this.handleClose}\n @slotchange=${this.onTargetSlotChange}\n name=\"trigger\"\n ></slot>\n <div id=\"overlay-content\">\n <slot\n @slotchange=${this.onClickSlotChange}\n name=\"click-content\"\n ></slot>\n <slot\n @slotchange=${this.onLongpressSlotChange}\n name=\"longpress-content\"\n ></slot>\n <slot\n @slotchange=${this.onHoverSlotChange}\n name=\"hover-content\"\n ></slot>\n <slot name=${this._longpressId}></slot>\n </div>\n `;\n /* eslint-enable lit-a11y/click-events-have-key-events */\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (this.disabled && changes.has('disabled')) {\n this.closeAllOverlays();\n return;\n }\n if (changes.has('open')) {\n this.manageOpen();\n }\n if (changes.has('hasLongpressContent')) {\n this.manageLongpressDescriptor();\n }\n }\n\n protected manageLongpressDescriptor(): void {\n const trigger = this.querySelector(\n '[slot=\"trigger\"]'\n ) as SpectrumElement;\n const ariaDescribedby = trigger.getAttribute('aria-describedby');\n let descriptors = ariaDescribedby ? ariaDescribedby.split(/\\s+/) : [];\n\n if (this.hasLongpressContent) {\n if (!this.longpressDescriptor) {\n this.longpressDescriptor = document.createElement(\n 'div'\n ) as HTMLElement;\n\n this.longpressDescriptor.id = this._longpressId;\n this.longpressDescriptor.slot = this._longpressId;\n }\n const messageType = isIOS() || isAndroid() ? 'touch' : 'keyboard';\n this.longpressDescriptor.textContent =\n LONGPRESS_INSTRUCTIONS[messageType];\n this.appendChild(this.longpressDescriptor);\n descriptors.push(this._longpressId);\n } else {\n if (this.longpressDescriptor) this.longpressDescriptor.remove();\n descriptors = descriptors.filter(\n (descriptor) => descriptor !== this._longpressId\n );\n }\n if (descriptors.length) {\n trigger.setAttribute('aria-describedby', descriptors.join(' '));\n } else {\n trigger.removeAttribute('aria-describedby');\n }\n }\n\n private closeAllOverlays(): void {\n if (this.abortOverlay) this.abortOverlay(true);\n (\n [\n 'closeClickOverlay',\n 'closeHoverOverlay',\n 'closeLongpressOverlay',\n ] as closeOverlay[]\n ).forEach(async (name) => {\n const canClose = this[name] as Promise<() => void>;\n if (canClose == null) return;\n delete this[name];\n (await canClose)();\n });\n this.overlaidContent = undefined;\n }\n\n private manageOpen(): void {\n const openHandlers: Record<OverlayContentTypes | 'none', () => void> = {\n click: () => this.onTriggerClick(),\n hover: () => this.onTriggerMouseEnter(),\n longpress: () => this.onTriggerLongpress(),\n none: () => this.closeAllOverlays(),\n };\n openHandlers[this.open ?? 'none']();\n }\n\n private async openOverlay(\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> {\n this.openStatePromise = new Promise(\n (res) => (this.openStateResolver = res)\n );\n this.addEventListener(\n 'sp-opened',\n () => {\n this.openStateResolver();\n },\n { once: true }\n );\n this.overlaidContent = content;\n return OverlayTrigger.openOverlay(\n target,\n interaction,\n content,\n options\n );\n }\n\n public static openOverlay = async (\n target: HTMLElement,\n interaction: TriggerInteractions,\n content: HTMLElement,\n options: OverlayOptions\n ): Promise<() => void> => {\n return openOverlay(target, interaction, content, options);\n };\n\n private get overlayOptions(): OverlayOptions {\n return {\n offset: this.offset,\n placement: this.placement,\n receivesFocus:\n !this.type || this.type === 'inline' || this.open === 'hover'\n ? undefined\n : 'auto',\n };\n }\n\n private onTrigger(event: CustomEvent<LongpressEvent>): void {\n const mouseIsEnteringHoverContent =\n event.type === 'mouseleave' &&\n this.open === 'hover' &&\n (event as unknown as MouseEvent).relatedTarget ===\n this.overlaidContent;\n if (mouseIsEnteringHoverContent && this.overlaidContent) {\n this.overlaidContent.addEventListener(\n 'mouseleave',\n (event: MouseEvent) => {\n const mouseIsEnteringTrigger =\n event.relatedTarget === this.targetContent;\n if (mouseIsEnteringTrigger) {\n return;\n }\n this.onTrigger(\n event as unknown as CustomEvent<LongpressEvent>\n );\n },\n { once: true }\n );\n return;\n }\n if (this.disabled) return;\n\n switch (event.type) {\n case 'mouseenter':\n case 'focusin':\n if (!this.open && this.hoverContent) {\n this.open = 'hover';\n }\n return;\n case 'mouseleave':\n case 'focusout':\n if (this.open === 'hover') {\n this.handleClose();\n }\n return;\n case 'click':\n if (this.clickContent) {\n this.open = event.type;\n }\n return;\n case 'longpress':\n if (this.longpressContent) {\n this._longpressEvent = event;\n this.open = event.type;\n }\n return;\n }\n }\n\n private prepareToFocusOverlayContent(overlayContent: HTMLElement): void {\n if (this.type !== 'modal') {\n return;\n }\n const firstFocusable = firstFocusableIn(overlayContent);\n if (!firstFocusable) {\n overlayContent.tabIndex = 0;\n }\n }\n\n public async onTriggerClick(): Promise<void> {\n if (\n !this.targetContent ||\n !this.clickContent ||\n this.closeClickOverlay\n ) {\n return;\n }\n const { targetContent, clickContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(clickContent);\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = true;\n }\n this.closeClickOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'click',\n clickContent,\n this.overlayOptions\n );\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = false;\n }\n }\n\n private _longpressEvent?: CustomEvent<LongpressEvent>;\n\n private async onTriggerLongpress(): Promise<void> {\n if (\n !this.targetContent ||\n !this.longpressContent ||\n this.closeLongpressOverlay\n ) {\n return;\n }\n const { targetContent, longpressContent } = this;\n this.closeAllOverlays();\n this.prepareToFocusOverlayContent(longpressContent);\n const notImmediatelyClosable =\n this._longpressEvent?.detail?.source !== 'keyboard';\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = true;\n }\n this.closeLongpressOverlay = this.openOverlay(\n targetContent,\n this.type ? this.type : 'longpress',\n longpressContent,\n {\n ...this.overlayOptions,\n receivesFocus: 'auto',\n notImmediatelyClosable,\n }\n );\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = false;\n }\n this._longpressEvent = undefined;\n }\n\n private abortOverlay: (cancelled: boolean) => void = () => {\n return;\n };\n\n public async onTriggerMouseEnter(): Promise<void> {\n if (\n !this.targetContent ||\n !this.hoverContent ||\n this.closeHoverOverlay\n ) {\n return;\n }\n const abortPromise: Promise<boolean> = new Promise((res) => {\n this.abortOverlay = res;\n });\n const { targetContent, hoverContent } = this;\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = true;\n }\n this.closeHoverOverlay = this.openOverlay(\n targetContent,\n 'hover',\n hoverContent,\n {\n abortPromise,\n ...this.overlayOptions,\n }\n );\n if (window.__swc.DEBUG) {\n window.__swc.ignoreWarningLevels.deprecation = false;\n }\n }\n\n private onClickSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.clickContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onLongpressSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.longpressContent = this.extractSlotContentFromEvent(event);\n this.hasLongpressContent =\n !!this.longpressContent || !!this.closeLongpressOverlay;\n this.manageOpen();\n }\n\n private onHoverSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.hoverContent = this.extractSlotContentFromEvent(event);\n this.manageOpen();\n }\n\n private onTargetSlotChange(\n event: Event & { target: HTMLSlotElement }\n ): void {\n this.targetContent = this.extractSlotContentFromEvent(event);\n }\n\n private extractSlotContentFromEvent(event: Event): HTMLElement | undefined {\n const slot = event.target as HTMLSlotElement;\n const nodes = slot.assignedNodes({ flatten: true });\n return nodes.find((node) => node instanceof HTMLElement) as HTMLElement;\n }\n\n private openStatePromise = Promise.resolve();\n private openStateResolver!: () => void;\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.openStatePromise;\n return complete;\n }\n\n public override disconnectedCallback(): void {\n this.closeAllOverlays();\n super.disconnectedCallback();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["html", "SpectrumElement", "property", "state", "firstFocusableIn", "isAndroid", "isIOS", "openOverlay", "overlayTriggerStyles", "_OverlayTrigger", "event", "changes", "trigger", "ariaDescribedby", "descriptors", "messageType", "descriptor", "name", "canClose", "_a", "target", "interaction", "content", "options", "res", "overlayContent", "targetContent", "clickContent", "_b", "longpressContent", "notImmediatelyClosable", "abortPromise", "hoverContent", "node", "complete", "__decorateClass"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  import { css } from "@spectrum-web-components/base";
3
3
  const styles = css`
4
- :host([disabled]) ::slotted([slot=trigger]){pointer-events:none}
4
+ :host([disabled]) ::slotted([slot=trigger]){pointer-events:none}#overlay-content slot{display:none}
5
5
  `;
6
6
  export default styles;
7
7
  //# sourceMappingURL=overlay-trigger.css.dev.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger.css.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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n:host([disabled]) ::slotted([slot=trigger]){pointer-events:none}\n`;\nexport default styles;"],
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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n:host([disabled]) ::slotted([slot=trigger]){pointer-events:none}#overlay-content slot{display:none}\n`;\nexport default styles;"],
5
5
  "mappings": ";AAWA,SAAS,WAAW;AACpB,MAAM,SAAS;AAAA;AAAA;AAGf,eAAe;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
1
  "use strict";import{css as t}from"@spectrum-web-components/base";const e=t`
2
- :host([disabled]) ::slotted([slot=trigger]){pointer-events:none}
2
+ :host([disabled]) ::slotted([slot=trigger]){pointer-events:none}#overlay-content slot{display:none}
3
3
  `;export default e;
4
4
  //# sourceMappingURL=overlay-trigger.css.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["overlay-trigger.css.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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n:host([disabled]) ::slotted([slot=trigger]){pointer-events:none}\n`;\nexport default styles;"],
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 { css } from '@spectrum-web-components/base';\nconst styles = css`\n:host([disabled]) ::slotted([slot=trigger]){pointer-events:none}#overlay-content slot{display:none}\n`;\nexport default styles;"],
5
5
  "mappings": "aAWA,OAAS,OAAAA,MAAW,gCACpB,MAAMC,EAASD;AAAA;AAAA,EAGf,eAAeC",
6
6
  "names": ["css", "styles"]
7
7
  }
@@ -257,6 +257,7 @@ class RecursivePopover extends LitElement {
257
257
  slot="click-content"
258
258
  direction="${this.placement}"
259
259
  tip
260
+ open
260
261
  >
261
262
  ${this.depth < MAX_DEPTH ? html`
262
263
  <recursive-popover
@@ -285,7 +286,7 @@ customElements.define("recursive-popover", RecursivePopover);
285
286
  export class PopoverContent extends LitElement {
286
287
  render() {
287
288
  return html`
288
- <overlay-trigger type="modal" placement="bottom">
289
+ <overlay-trigger>
289
290
  <sp-button slot="trigger">Open me</sp-button>
290
291
  <sp-popover slot="click-content" direction="bottom" dialog>
291
292
  <p>This is all the content.</p>
@@ -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('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 dialog\n slot=\"click-content\"\n direction=\"${this.placement}\"\n tip\n >\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-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\" dialog>\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-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 dialog\n slot=\"click-content\"\n direction=\"${this.placement}\"\n tip\n open\n >\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-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\" dialog>\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-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": ";;;;;;;;;;;;AAWA;AAAA,EACI;AAAA,EAEA;AAAA,EACA;AAAA,OAEG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAEP;AAAA,EACI;AAAA,OAGG;AAEP,OAAO;AAEP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAGP,MAAM,YAAY;AAElB,MAAM,0BAA0B,WAAW;AAAA,EACvC,WAAoB,SAAyB;AACzC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWX;AAAA,EAEgB,SAAyB;AACrC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBX;AACJ;AACA,eAAe,OAAO,uBAAuB,iBAAiB;AAE9D,MAAM,oBAAoB,WAAW;AAAA,EAArC;AAAA;AAEI,SAAQ,MAAM;AAEd,SAAQ,OAAO;AAAA;AAAA,EAIf,WAAoB,SAAyB;AACzC,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcX;AAAA,EAEQ,aAAa,OAAkD;AACnE,UAAM,OAAO,MAAM;AACnB,SAAK,gBAAgB;AAErB,UAAM,QAAQ,KAAK,cAAc;AACjC,UAAM,cAAc,MAAM;AAAA,MACtB,CAAC,SAAS,gBAAgB;AAAA,IAC9B;AACA,QAAI,CAAC;AAAa;AAElB,SAAK,gBAAgB,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,QAAI,CAAC,KAAK;AAAe;AAEzB,SAAK,cAAc;AAAA,MAAiB;AAAA,MAAa,CAACA,WAC9C,KAAK,YAAYA,MAAK;AAAA,IAC1B;AAEA,SAAK,oBAAoB;AAAA,EAC7B;AAAA,EAEQ,YAAY,OAAyB;AACzC,UAAM,SAAS,MAAM;AACrB,UAAM,SAAS,OAAO;AACtB,QAAI,CAAC;AAAQ;AAEb,UAAM,MAAM;AAAA,MACR,GAAG,OAAO,cAAc,OAAO;AAAA,MAC/B,GAAG,OAAO,eAAe,OAAO;AAAA,IACpC;AACA,UAAM,YAAY;AAAA,MACd,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,IACb;AACA,UAAM,cAAc;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,GAAG,KAAK;AAAA,IACZ;AAEA,UAAM,cAAc,CAACA,WAA4B;AAC7C,YAAM,YAAY;AAAA,QACd,GAAGA,OAAM,UAAU,UAAU;AAAA,QAC7B,GAAGA,OAAM,UAAU,UAAU;AAAA,MACjC;AACA,YAAM,cAAc;AAAA,QAChB,GAAG,UAAU,IAAI,YAAY;AAAA,QAC7B,GAAG,UAAU,IAAI,YAAY;AAAA,MACjC;AACA,WAAK,OAAO,KAAK,IAAI,KAAK,IAAI,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC;AACtD,WAAK,MAAM,KAAK,IAAI,KAAK,IAAI,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC;AACrD,cAAQ,OAAO;AAAA,IACnB;AAEA,UAAM,YAAY,MAAY;AAC1B,eAAS,oBAAoB,aAAa,WAAW;AACrD,eAAS,oBAAoB,WAAW,SAAS;AAAA,IACrD;AAEA,aAAS,iBAAiB,aAAa,WAAW;AAClD,aAAS,iBAAiB,WAAW,SAAS;AAAA,EAClD;AAAA,EAEO,sBAA4B;AAC/B,QAAI,CAAC,KAAK;AAAe;AACzB,UAAM,SAAS,KAAK;AACpB,UAAM,SAAS,OAAO;AACtB,QAAI,CAAC;AAAQ;AAEb,SAAK,QAAQ,OAAO,cAAc,OAAO,eAAe;AACxD,SAAK,OAAO,OAAO,eAAe,OAAO,gBAAgB;AAAA,EAC7D;AAAA,EAEgB,UAAgB;AAC5B,QAAI,KAAK,eAAe;AACpB,WAAK,cAAc,MAAM,YAAY,aAAa,KAAK,WAAW,KAAK;AAAA,IAC3E;AAAA,EACJ;AAAA,EAEgB,SAAyB;AACrC,WAAO;AAAA,gCACiB,KAAK;AAAA;AAAA,EAEjC;AACJ;AA3GY;AAAA,EADP,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GADxB,YAEM;AAEA;AAAA,EADP,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAHxB,YAIM;AA0GZ,eAAe,OAAO,gBAAgB,WAAW;AAEjD,MAAM,yBAAyB,WAAW;AAAA,EA8B/B,cAAc;AACjB,UAAM;AA1BV,SAAQ,QAAQ;AAKhB,SAAU,iBAAiB;AAsBvB,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,iBAAiB,WAAW,CAAC,UAAyB;AACvD,YAAM,EAAE,KAAK,IAAI;AACjB,UAAI,SAAS,SAAS;AAClB,aAAK,QAAQ,MAAM;AAAA,MACvB;AAAA,IACJ,CAAC;AACD,SAAK,iBAAiB,WAAW,KAAK,aAAa;AAAA,EACvD;AAAA,EA3BA,WAA2B,SAAyB;AAChD,WAAO;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWJ;AAAA,EACJ;AAAA,EAeQ,gBAAsB;AAC1B,SAAK,MAAM;AAAA,EACf;AAAA,EAEgB,QAAc;AAC1B,QAAI,KAAK,WAAW,kBAAkB,MAAM;AACxC;AAAA,IACJ;AACA,UAAM,iBAAiB,KAAK,WAAW;AAAA,MACnC;AAAA,IACJ;AACA,QAAI,gBAAgB;AAChB,UAAI,eAAe,gBAAgB;AAC/B,uBAAe,eAAe;AAAA,UAAK,MAC/B,eAAe,MAAM;AAAA,QACzB;AAAA,MACJ,OAAO;AACH,uBAAe,MAAM;AAAA,MACzB;AACA;AAAA,IACJ;AACA,UAAM,MAAM;AAAA,EAChB;AAAA,EAEO,cAAc,OAAoB;AACrC,UAAM,SAAS,MAAM;AACrB,SAAK,YAAY,OAAO;AAAA,EAC5B;AAAA,EAEQ,aAAa,OAA4B;AAC7C,UAAM,EAAE,KAAK,IAAI;AACjB,QAAI,SAAS,SAAS;AAClB,YAAM,gBAAgB;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEgB,SAAyB;AACrC,WAAO;AAAA;AAAA;AAAA,0BAGW,KAAK;AAAA,4BACH,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAQS,KAAK;AAAA;AAAA;AAAA;AAAA,+BAIhB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAOH,KAAK;AAAA;AAAA;AAAA;AAAA,sBAIhB,KAAK,QAAQ,YACT;AAAA;AAAA,8CAEoB,KAAK;AAAA,2CACR,KAAK,QAAQ;AAAA;AAAA;AAAA,8BAI9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtB;AACJ;AAxHY;AAAA,EADP,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GADxB,iBAEM;AAGA;AAAA,EADP,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAJxB,iBAKM;AAGA;AAAA,EADP,MAAM,kBAAkB;AAAA,GAPvB,iBAQM;AAmHZ,eAAe,OAAO,qBAAqB,gBAAgB;AAEpD,aAAM,uBAAuB,WAAW;AAAA,EAOlC,SAAyB;AAC9B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWX;AACJ;AAlBW;AAAA,EADN,MAAM,kBAAkB;AAAA,GADhB,eAEF;AAGA;AAAA,EADN,MAAM,iBAAiB;AAAA,GAJf,eAKF;AAiBX,eAAe,OAAO,mBAAmB,cAAc;",
6
6
  "names": ["event"]
7
7
  }