@spectrum-web-components/overlay 1.2.0-beta.18 → 1.2.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/overlay",
|
|
3
|
-
"version": "1.2.0-beta.
|
|
3
|
+
"version": "1.2.0-beta.19",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -160,11 +160,11 @@
|
|
|
160
160
|
"dependencies": {
|
|
161
161
|
"@floating-ui/dom": "^1.6.1",
|
|
162
162
|
"@floating-ui/utils": "^0.2.1",
|
|
163
|
-
"@spectrum-web-components/action-button": "^1.2.0-beta.
|
|
164
|
-
"@spectrum-web-components/base": "^1.2.0-beta.
|
|
165
|
-
"@spectrum-web-components/reactive-controllers": "^1.2.0-beta.
|
|
166
|
-
"@spectrum-web-components/shared": "^1.2.0-beta.
|
|
167
|
-
"@spectrum-web-components/theme": "^1.2.0-beta.
|
|
163
|
+
"@spectrum-web-components/action-button": "^1.2.0-beta.19",
|
|
164
|
+
"@spectrum-web-components/base": "^1.2.0-beta.19",
|
|
165
|
+
"@spectrum-web-components/reactive-controllers": "^1.2.0-beta.19",
|
|
166
|
+
"@spectrum-web-components/shared": "^1.2.0-beta.19",
|
|
167
|
+
"@spectrum-web-components/theme": "^1.2.0-beta.19"
|
|
168
168
|
},
|
|
169
169
|
"types": "./src/index.d.ts",
|
|
170
170
|
"customElements": "custom-elements.json",
|
|
@@ -176,5 +176,5 @@
|
|
|
176
176
|
"./stories/overlay-story-components.js",
|
|
177
177
|
"./**/*.dev.js"
|
|
178
178
|
],
|
|
179
|
-
"gitHead": "
|
|
179
|
+
"gitHead": "f89f69008152c9a400adb91ffb38353186574aa1"
|
|
180
180
|
}
|
|
@@ -402,6 +402,7 @@ class ComplexModalReady extends HTMLElement {
|
|
|
402
402
|
this.handlePickerOpen = async () => {
|
|
403
403
|
const picker = document.querySelector("#test-picker");
|
|
404
404
|
const actions = [nextFrame, picker.updateComplete];
|
|
405
|
+
picker.focus();
|
|
405
406
|
await Promise.all(actions);
|
|
406
407
|
this.ready(true);
|
|
407
408
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["overlay.stories.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2025 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/action-group/sp-action-group.js';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport { DialogWrapper } from '@spectrum-web-components/dialog';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-open-in.js';\nimport {\n openOverlay,\n Overlay,\n OverlayContentTypes,\n OverlayTrigger,\n Placement,\n TriggerInteractions,\n VirtualTrigger,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\n\nimport '@spectrum-web-components/accordion/sp-accordion-item.js';\nimport '@spectrum-web-components/accordion/sp-accordion.js';\nimport '@spectrum-web-components/button-group/sp-button-group.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/overlay/sp-overlay.js';\nimport { Picker } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/radio/sp-radio-group.js';\nimport '@spectrum-web-components/radio/sp-radio.js';\nimport '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport '../../../projects/story-decorator/src/types.js';\n\nimport { Button } from '@spectrum-web-components/button';\nimport { Popover } from '@spectrum-web-components/popover';\nimport { render } from 'lit-html';\nimport './overlay-story-components.js';\nimport { PopoverContent } from './overlay-story-components.js';\n\nconst storyStyles = html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: 100%;\n margin: 0;\n }\n\n sp-story-decorator::part(container) {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n overlay-trigger {\n flex: none;\n }\n\n #styled-div {\n background-color: var(--styled-div-background-color, blue);\n color: white;\n padding: 4px 10px;\n margin-bottom: 10px;\n }\n\n #inner-trigger {\n display: inline-block;\n }\n </style>\n`;\n\nexport default {\n title: 'Overlay',\n argTypes: {\n offset: { control: 'number' },\n placement: {\n control: {\n type: 'inline-radio',\n options: [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'auto',\n 'auto-start',\n 'auto-end',\n 'none',\n ],\n },\n },\n type: {\n control: {\n type: 'inline-radio',\n options: ['modal', 'replace', 'inline'],\n },\n },\n colorStop: {\n control: {\n type: 'inline-radio',\n options: ['light', 'dark'],\n },\n },\n },\n args: {\n placement: 'bottom',\n offset: 0,\n colorStop: 'light',\n },\n};\n\ninterface Properties {\n placement: Placement;\n offset: number;\n open?: OverlayContentTypes;\n type?: Extract<TriggerInteractions, 'inline' | 'modal' | 'replace'>;\n}\n\nconst template = ({\n placement,\n offset,\n open,\n type,\n}: Properties): TemplateResult => {\n return html`\n ${storyStyles}\n <overlay-trigger\n triggered-by=\"click hover\"\n id=\"trigger\"\n placement=\"${placement}\"\n offset=\"${offset}\"\n open=${ifDefined(open)}\n type=${ifDefined(type)}\n >\n <sp-button variant=\"primary\" slot=\"trigger\">Show Popover</sp-button>\n <sp-popover slot=\"click-content\" placement=\"${placement}\" tip>\n <sp-dialog no-divider>\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n default-value=\"10\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover slot=\"click-content\" placement=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n Another Popover\n </sp-dialog>\n </sp-popover>\n\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n <sp-tooltip\n slot=\"hover-content\"\n ?delayed=${open !== 'hover'}\n tip=\"bottom\"\n >\n Click to open a popover.\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nconst extraText = html`\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n`;\n\nfunction nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport const Default = (args: Properties): TemplateResult => template(args);\n\nexport const accordion = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\" placement=\"top-start\">\n <style>\n sp-button {\n margin-top: 70vh;\n }\n </style>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open overlay w/ accordion\n </sp-button>\n <sp-popover\n slot=\"click-content\"\n style=\"overflow-y: scroll;position: static;\"\n >\n <sp-dialog size=\"s\" no-divider>\n <sp-accordion allow-multiple>\n <sp-accordion-item label=\"Some things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Other things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"More things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Additional things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n </sp-accordion>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\naccordion.swc_vrt = {\n skip: true,\n};\naccordion.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const clickAndHoverTarget = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">Button</sp-button>\n <sp-popover slot=\"click-content\" placement=\"bottom\" tip>\n Popover content\n </sp-popover>\n <sp-tooltip slot=\"hover-content\" placement=\"right\">\n Tooltip content\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\nclickAndHoverTarget.swc_vrt = {\n skip: true,\n};\nclickAndHoverTarget.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const clickAndHoverTargets = (): TemplateResult => {\n return html`\n <div>\n ${storyStyles}\n <style>\n .friendly-target {\n padding: 4px;\n margin: 6px;\n border: 2px solid black;\n border-radius: 6px;\n cursor: default;\n }\n </style>\n <overlay-trigger placement=\"right\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Click me\n </div>\n <sp-tooltip slot=\"click-content\" tip=\"right\">\n Ok, now hover the other trigger\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"left\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Then hover me\n </div>\n <sp-tooltip slot=\"hover-content\" tip=\"right\">\n Now click my trigger -- I should stay open, but the other\n overlay should close\n </sp-tooltip>\n </overlay-trigger>\n </div>\n `;\n};\nclickAndHoverTargets.swc_vrt = {\n skip: true,\n};\n\nclickAndHoverTargets.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nclass ScrollForcer extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n });\n this.setup();\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n (this.previousElementSibling?.lastElementChild as OverlayTrigger).open =\n 'click';\n }\n\n doScroll = async (): Promise<void> => {\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n if (document.scrollingElement) {\n document.scrollingElement.scrollTop = 100;\n }\n\n await nextFrame();\n await nextFrame();\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('scroll-forcer', ScrollForcer);\n\nexport const clickContentClosedOnScroll = (\n args: Properties\n): TemplateResult => html`\n <div style=\"margin: 50vh 0 100vh;\">\n ${template({\n ...args,\n })}\n </div>\n`;\nclickContentClosedOnScroll.decorators = [\n (story: () => TemplateResult): TemplateResult => html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: auto !important;\n }\n </style>\n ${story()}\n <scroll-forcer></scroll-forcer>\n `,\n];\n\nclass ComplexModalReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n\n const overlay = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n overlay.addEventListener('sp-opened', this.handleTriggerOpened);\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n await nextFrame();\n\n const picker = document.querySelector('#test-picker') as Picker;\n picker.addEventListener('sp-opened', this.handlePickerOpen);\n picker.open = true;\n };\n\n handlePickerOpen = async (): Promise<void> => {\n const picker = document.querySelector('#test-picker') as Picker;\n const actions = [nextFrame, picker.updateComplete];\n\n await Promise.all(actions);\n\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('complex-modal-ready', ComplexModalReady);\n\nconst complexModalDecorator = (story: () => TemplateResult): TemplateResult => {\n return html`\n ${story()}\n <complex-modal-ready></complex-modal-ready>\n `;\n};\n\nexport const complexModal = (): TemplateResult => {\n return html`\n <style>\n body {\n --swc-margin-test: 10px;\n margin: var(--swc-margin-test);\n }\n sp-story-decorator::part(container) {\n min-height: calc(100vh - (2 * var(--swc-margin-test)));\n padding: 0;\n display: grid;\n place-content: center;\n }\n </style>\n <overlay-trigger type=\"modal\" open=\"click\">\n <sp-dialog-wrapper\n slot=\"click-content\"\n headline=\"Dialog title\"\n dismissable\n underlay\n footer=\"Content for footer\"\n >\n <sp-field-label for=\"test-picker\">\n Selection type:\n </sp-field-label>\n <sp-picker id=\"test-picker\">\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-picker>\n </sp-dialog-wrapper>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n </overlay-trigger>\n `;\n};\n\ncomplexModal.decorators = [complexModalDecorator];\n\nexport const customizedClickContent = (\n args: Properties\n): TemplateResult => html`\n <style>\n sp-popover {\n --styled-div-background-color: var(\n --spectrum-accent-background-color-default\n );\n --mod-button-background-color-default: rebeccapurple;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\n\nexport const deep = (): TemplateResult => html`\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 1 with buttons + selfmanaged Tooltips\n </sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\">\n My Tooltip 1\n </sp-tooltip>\n A\n </sp-action-button>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\">\n My Tooltip 1\n </sp-tooltip>\n B\n </sp-action-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 2 with buttons without ToolTips\n </sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n <sp-action-button>X</sp-action-button>\n <sp-action-button>Y</sp-action-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n`;\ndeep.swc_vrt = {\n skip: true,\n};\n\ndeep.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const deepChildTooltip = (): TemplateResult => html`\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">Open popover</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog no-divider>\n <p>Let us open another overlay here</p>\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open sub popover\n </sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog no-divider>\n <p>\n Render an action button with tooltips. Clicking\n the action button shouldn't close everything\n </p>\n <sp-action-button>\n Button with self-managed tooltip\n <sp-tooltip self-managed placement=\"top\">\n Deep Child ToolTip\n </sp-tooltip>\n </sp-action-button>\n <sp-action-button>Just a button</sp-action-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n`;\n\nexport const deepNesting = (): TemplateResult => {\n const color = window.__swc_hack_knobs__.defaultColor;\n const outter = color === 'light' ? 'dark' : 'light';\n return html`\n ${storyStyles}\n <sp-theme\n color=${outter}\n system=${window.__swc_hack_knobs__.defaultSystemVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <sp-theme\n color=${color}\n system=${window.__swc_hack_knobs__.defaultSystemVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <recursive-popover\n tabindex=\"\"\n style=\"\n background-color: var(--spectrum-gray-100);\n color: var(--spectrum-gray-800);\n padding: calc(var(--swc-scale-factor) * 22px);\n \"\n ></recursive-popover>\n </sp-theme>\n </sp-theme>\n `;\n};\n\nclass DefinedOverlayReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n connectedCallback(): void {\n if (!!this.ready) return;\n\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n overlayElement!: OverlayTrigger;\n popoverElement!: PopoverContent;\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.overlayElement = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n const button = document.querySelector(\n `[slot=\"trigger\"]`\n ) as HTMLButtonElement;\n this.overlayElement.addEventListener(\n 'sp-opened',\n this.handleTriggerOpened\n );\n await nextFrame();\n await nextFrame();\n button.click();\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n this.overlayElement.removeEventListener(\n 'sp-opened',\n this.handleTriggerOpened\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n this.popoverElement = document.querySelector(\n 'popover-content'\n ) as PopoverContent;\n if (!this.popoverElement) {\n return;\n }\n this.popoverElement.addEventListener(\n 'sp-opened',\n this.handlePopoverOpen\n );\n await nextFrame();\n await nextFrame();\n this.popoverElement.button.click();\n };\n\n handlePopoverOpen = async (): Promise<void> => {\n await nextFrame();\n\n this.ready(true);\n };\n\n disconnectedCallback(): void {\n this.overlayElement.removeEventListener(\n 'sp-opened',\n this.handleTriggerOpened\n );\n this.popoverElement.removeEventListener(\n 'sp-opened',\n this.handlePopoverOpen\n );\n }\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('defined-overlay-ready', DefinedOverlayReady);\n\nconst definedOverlayDecorator = (\n story: () => TemplateResult\n): TemplateResult => {\n return html`\n ${story()}\n <defined-overlay-ready></defined-overlay-ready>\n `;\n};\n\nexport const definedOverlayElement = (): TemplateResult => {\n return html`\n <overlay-trigger placement=\"bottom\" type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">Open popover</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\">\n <sp-dialog no-divider>\n <popover-content></popover-content>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\ndefinedOverlayElement.decorators = [definedOverlayDecorator];\n\nexport const detachedElement = (): TemplateResult => {\n let overlay: Overlay | undefined;\n const openDetachedOverlayContent = async ({\n target,\n }: {\n target: HTMLElement;\n }): Promise<void> => {\n if (overlay) {\n overlay.open = false;\n overlay = undefined;\n return;\n }\n const div = document.createElement('div');\n (div as HTMLDivElement & { open: boolean }).open = false;\n div.textContent = 'This div is overlaid';\n div.setAttribute(\n 'style',\n `\n background-color: var(--spectrum-gray-50);\n color: var(--spectrum-gray-800);\n border: 1px solid;\n padding: 2em;\n `\n );\n overlay = await Overlay.open(div, {\n type: 'auto',\n trigger: target,\n receivesFocus: 'auto',\n placement: 'bottom',\n offset: 0,\n });\n overlay.addEventListener('sp-closed', () => {\n overlay = undefined;\n });\n target.insertAdjacentElement('afterend', overlay);\n };\n requestAnimationFrame(() => {\n openDetachedOverlayContent({\n target: document.querySelector(\n '#detached-content-trigger'\n ) as HTMLElement,\n });\n });\n return html`\n <style>\n sp-overlay div:not([placement]) {\n visibility: hidden;\n }\n </style>\n <sp-action-button\n id=\"detached-content-trigger\"\n @click=${openDetachedOverlayContent}\n >\n <sp-icon-open-in\n slot=\"icon\"\n label=\"Open in overlay\"\n ></sp-icon-open-in>\n </sp-action-button>\n `;\n};\n\nexport const edges = (): TemplateResult => {\n return html`\n <style>\n .demo {\n position: absolute;\n }\n .top-left {\n top: 0;\n left: 0;\n }\n .top-right {\n top: 0;\n right: 0;\n }\n .bottom-right {\n bottom: 0;\n right: 0;\n }\n .bottom-left {\n bottom: 0;\n left: 0;\n }\n </style>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo top-right\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo bottom-left\" placement=\"top\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"top\" class=\"demo bottom-right\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nexport const inline = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const longpress = (): TemplateResult => {\n return html`\n <overlay-trigger triggered-by=\"longpress\" placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">Search real hard...</sp-tooltip>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n @change=${(event: Event & { target: HTMLElement }) =>\n event.target.dispatchEvent(\n new Event('close', { bubbles: true })\n )}\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,calc(var(--swc-scale-factor) * 10px)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const modalLoose = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog\n size=\"s\"\n dismissable\n slot=\"click-content\"\n @closed=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n <h2 slot=\"heading\">Loose Dialog</h2>\n <p>\n The\n <code>sp-dialog</code>\n element is not \"meant\" to be a modal alone. In that way it\n does not manage its own\n <code>open</code>\n attribute or outline when it should have\n <code>pointer-events: auto</code>\n . It's a part of this test suite to prove that content in\n this way can be used in an\n <code>overlay-trigger</code>\n element.\n </p>\n </sp-dialog>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalNoFocus = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\" receives-focus=\"false\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog-wrapper\n underlay\n slot=\"click-content\"\n headline=\"Wrapped Dialog w/ Hero Image\"\n size=\"s\"\n >\n <p>\n The\n <code>sp-dialog-wrapper</code>\n element has been prepared for use in an\n <code>overlay-trigger</code>\n element by it's combination of modal, underlay, etc. styles\n and features.\n </p>\n <sp-button-group style=\"margin-inline-start: auto\">\n <sp-button\n data-test-id=\"dialog-cancel-btn\"\n variant=\"secondary\"\n treatment=\"outline\"\n size=\"l\"\n @click=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n ${'Cancel'}\n </sp-button>\n <sp-button\n data-test-id=\"dialog-override-btn\"\n variant=\"negative\"\n size=\"l\"\n @click=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n ${'Override'}\n </sp-button>\n </sp-button-group>\n </sp-dialog-wrapper>\n </overlay-trigger>\n `;\n};\n\nexport const modalManaged = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog-wrapper\n underlay\n slot=\"click-content\"\n headline=\"Wrapped Dialog w/ Hero Image\"\n confirm-label=\"Keep Both\"\n secondary-label=\"Replace\"\n cancel-label=\"Cancel\"\n footer=\"Content for footer\"\n @confirm=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @secondary=${(\n event: Event & { target: DialogWrapper }\n ): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @cancel=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n <p>\n The\n <code>sp-dialog-wrapper</code>\n element has been prepared for use in an\n <code>overlay-trigger</code>\n element by it's combination of modal, underlay, etc. styles\n and features.\n </p>\n </sp-dialog-wrapper>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalWithinNonModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <overlay-trigger type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open modal overlay\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n Modal overlay\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const noCloseOnResize = (args: Properties): TemplateResult => html`\n <style>\n sp-button:hover {\n border: 10px solid;\n width: 100px;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\nnoCloseOnResize.swc_vrt = {\n skip: true,\n};\n\nnoCloseOnResize.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const openClickContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'click',\n });\n\nexport const openHoverContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'hover',\n });\n\nexport const replace = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"replace\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const sideHoverDraggable = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger placement=\"right\">\n <overlay-target-icon slot=\"trigger\"></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"right\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n Vivamus egestas sed enim sed condimentum. Nunc facilisis\n scelerisque massa sed luctus. Orci varius natoque penatibus\n et magnis dis parturient montes, nascetur ridiculus mus.\n Suspendisse sagittis sodales purus vitae ultricies. Integer\n at dui sem. Sed quam tortor, ornare in nisi et, rhoncus\n lacinia mauris. Sed vel rutrum mauris, ac pellentesque nibh.\n Sed feugiat semper libero, sit amet vehicula orci fermentum\n id. Vivamus imperdiet egestas luctus. Mauris tincidunt\n malesuada ante, faucibus viverra nunc blandit a. Fusce et\n nisl nisi. Aenean dictum quam id mollis faucibus. Nulla a\n ultricies dui. In hac habitasse platea dictumst. Curabitur\n gravida lobortis vestibulum.\n </sp-tooltip>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const superComplexModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\" variant=\"accent\">Toggle Dialog</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\">\n <overlay-trigger>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <overlay-trigger type=\"modal\">\n <sp-button\n slot=\"trigger\"\n variant=\"secondary\"\n >\n Toggle Dialog\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <p>\n When you get this deep, this\n ActiveOverlay should be the only\n one in [slot=\"open\"].\n </p>\n <p>\n All of the rest of the\n ActiveOverlay elements should\n have had their [slot] attribute\n removed.\n </p>\n <p>\n Closing this ActiveOverlay\n should replace them...\n </p>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const updated = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <overlay-target-icon\n slot=\"trigger\"\n style=\"translate(400px, 300px)\"\n ></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open popover\n </sp-tooltip>\n <sp-popover slot=\"click-content\" position=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover\n slot=\"click-content\"\n placement=\"bottom\"\n tip\n >\n <sp-dialog size=\"s\" no-divider>\n Another Popover\n </sp-dialog>\n </sp-popover>\n\n <sp-tooltip\n slot=\"hover-content\"\n delayed\n tip=\"bottom\"\n >\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const updating = (): TemplateResult => {\n const update = (): void => {\n const button = document.querySelector('[slot=\"trigger\"]') as Button;\n button.style.left = `${Math.floor(Math.random() * 200)}px`;\n button.style.top = `${Math.floor(Math.random() * 200)}px`;\n button.style.position = 'fixed';\n };\n return html`\n <overlay-trigger type=\"click\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <sp-button variant=\"primary\" @click=${update}>\n Update trigger location.\n </sp-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nupdating.swc_vrt = {\n skip: true,\n};\n\nupdating.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nclass StartEndContextmenu extends HTMLElement {\n override shadowRoot!: ShadowRoot;\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n this.shadowRoot.innerHTML = `\n <style>\n :host {\n display: flex;\n align-items: stretch;\n }\n div {\n width: 50%;\n height: 100%;\n }\n </style>\n <div id=\"start\"></div>\n <div id=\"end\"></div>\n `;\n }\n}\n\ncustomElements.define('start-end-contextmenu', StartEndContextmenu);\n\nexport const virtualElementV1 = (args: Properties): TemplateResult => {\n const contextMenuTemplate = (kind = ''): TemplateResult => html`\n <sp-popover\n style=\"width:300px;\"\n @click=${(event: PointerEvent) => {\n if (\n (event.target as HTMLElement).localName === 'sp-menu-item'\n ) {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu source: ${kind}</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const source = event.composedPath()[0] as HTMLDivElement;\n const { id } = source;\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(id), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n\n openOverlay(trigger, 'click', popover, {\n placement: args.placement,\n receivesFocus: 'auto',\n virtualTrigger,\n offset: 0,\n notImmediatelyClosable: true,\n });\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <start-end-contextmenu\n class=\"app-root\"\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n ></start-end-contextmenu>\n `;\n};\n\nvirtualElementV1.args = {\n placement: 'right-start' as Placement,\n};\n\nexport const virtualElement = (args: Properties): TemplateResult => {\n const contextMenuTemplate = (kind = ''): TemplateResult => html`\n <sp-popover\n style=\"width:300px;\"\n @click=${(event: PointerEvent) => {\n if (\n (event.target as HTMLElement).localName === 'sp-menu-item'\n ) {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu source: ${kind}</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const source = event.composedPath()[0] as HTMLDivElement;\n const { id } = source;\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(id), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n\n const overlay = await openOverlay(popover, {\n trigger: virtualTrigger,\n placement: args.placement,\n offset: 0,\n notImmediatelyClosable: true,\n type: 'auto',\n });\n trigger.insertAdjacentElement('afterend', overlay);\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <start-end-contextmenu\n class=\"app-root\"\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n ></start-end-contextmenu>\n `;\n};\n\nvirtualElement.args = {\n placement: 'right-start' as Placement,\n};\n\nexport const virtualElementDeclaratively = (\n args: Properties\n): TemplateResult => {\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const overlay = document.querySelector(\n 'sp-overlay:not([open])'\n ) as Overlay;\n\n if (overlay.triggerElement instanceof VirtualTrigger) {\n overlay.triggerElement.updateBoundingClientRect(\n event.clientX,\n event.clientY\n );\n }\n overlay.willPreventClose = true;\n overlay.open = true;\n };\n const overlay = (): TemplateResult => html`\n <sp-overlay\n offset=\"0\"\n type=\"auto\"\n placement=${args.placement}\n .triggerElement=${new VirtualTrigger(0, 0)}\n >\n <sp-popover\n style=\"width:300px;\"\n @change=${(event: PointerEvent) => {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n </sp-overlay>\n `;\n\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <div\n class=\"app-root\"\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n >\n ${overlay()} ${overlay()}\n </div>\n `;\n};\n\nvirtualElementDeclaratively.args = {\n placement: 'right-start' as Placement,\n};\n\nvirtualElementDeclaratively.swc_vrt = {\n skip: true,\n};\n\nvirtualElementDeclaratively.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const triggeredByOptimization = (): TemplateResult => {\n return html`\n <h2>\"triggered-by\" attribute optimization</h2>\n <p>\n This demo shows different ways to trigger overlays using the\n <code>triggered-by</code>\n attribute.\n </p>\n <p>\n <strong>Pro tip:</strong>\n Inspect the DOM to verify that only the respective overlay elements\n are being rendered into the DOM based on the\n <code>triggered-by</code>\n value.\n </p>\n <p>\n Unused interaction types aren't rendered. This improves performance,\n reduces the number of unecessary DOM nodes and avoids race\n conditions in slot reparenting.\n </p>\n <div style=\"display: flex; gap: 20px; flex-direction: column;\">\n <!-- Click and hover only -->\n <overlay-trigger triggered-by=\"click hover\">\n <sp-button slot=\"trigger\">Click and hover trigger</sp-button>\n <sp-popover slot=\"click-content\" direction=\"right\" tip>\n <sp-dialog size=\"s\" no-divider>Click content</sp-dialog>\n </sp-popover>\n <sp-tooltip slot=\"hover-content\">Hover content</sp-tooltip>\n </overlay-trigger>\n\n <!-- Longpress only -->\n <overlay-trigger triggered-by=\"longpress\">\n <sp-button slot=\"trigger\">Longpress trigger</sp-button>\n <sp-popover slot=\"longpress-content\" direction=\"right\" tip>\n <sp-dialog size=\"s\" no-divider>Longpress content</sp-dialog>\n </sp-popover>\n <div slot=\"longpress-describedby-descriptor\">\n Press and hold to reveal more options\n </div>\n </overlay-trigger>\n\n <!-- Click only -->\n <overlay-trigger triggered-by=\"click\">\n <sp-button slot=\"trigger\">Click only trigger</sp-button>\n <sp-popover slot=\"click-content\" direction=\"right\" tip>\n <sp-dialog size=\"s\" no-divider>Click content</sp-dialog>\n </sp-popover>\n </overlay-trigger>\n\n <!-- Hover only -->\n <overlay-trigger triggered-by=\"hover\">\n <sp-button slot=\"trigger\">Hover only trigger</sp-button>\n <sp-tooltip slot=\"hover-content\">Hover content</sp-tooltip>\n </overlay-trigger>\n </div>\n `;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2025 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/action-group/sp-action-group.js';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport '@spectrum-web-components/button/sp-button.js';\nimport { DialogWrapper } from '@spectrum-web-components/dialog';\nimport '@spectrum-web-components/dialog/sp-dialog-wrapper.js';\nimport '@spectrum-web-components/dialog/sp-dialog.js';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-magnify.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-open-in.js';\nimport {\n openOverlay,\n Overlay,\n OverlayContentTypes,\n OverlayTrigger,\n Placement,\n TriggerInteractions,\n VirtualTrigger,\n} from '@spectrum-web-components/overlay';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\n\nimport '@spectrum-web-components/accordion/sp-accordion-item.js';\nimport '@spectrum-web-components/accordion/sp-accordion.js';\nimport '@spectrum-web-components/button-group/sp-button-group.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/overlay/sp-overlay.js';\nimport { Picker } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/radio/sp-radio-group.js';\nimport '@spectrum-web-components/radio/sp-radio.js';\nimport '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport '../../../projects/story-decorator/src/types.js';\n\nimport { Button } from '@spectrum-web-components/button';\nimport { Popover } from '@spectrum-web-components/popover';\nimport { render } from 'lit-html';\nimport './overlay-story-components.js';\nimport { PopoverContent } from './overlay-story-components.js';\n\nconst storyStyles = html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: 100%;\n margin: 0;\n }\n\n sp-story-decorator::part(container) {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n overlay-trigger {\n flex: none;\n }\n\n #styled-div {\n background-color: var(--styled-div-background-color, blue);\n color: white;\n padding: 4px 10px;\n margin-bottom: 10px;\n }\n\n #inner-trigger {\n display: inline-block;\n }\n </style>\n`;\n\nexport default {\n title: 'Overlay',\n argTypes: {\n offset: { control: 'number' },\n placement: {\n control: {\n type: 'inline-radio',\n options: [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'auto',\n 'auto-start',\n 'auto-end',\n 'none',\n ],\n },\n },\n type: {\n control: {\n type: 'inline-radio',\n options: ['modal', 'replace', 'inline'],\n },\n },\n colorStop: {\n control: {\n type: 'inline-radio',\n options: ['light', 'dark'],\n },\n },\n },\n args: {\n placement: 'bottom',\n offset: 0,\n colorStop: 'light',\n },\n};\n\ninterface Properties {\n placement: Placement;\n offset: number;\n open?: OverlayContentTypes;\n type?: Extract<TriggerInteractions, 'inline' | 'modal' | 'replace'>;\n}\n\nconst template = ({\n placement,\n offset,\n open,\n type,\n}: Properties): TemplateResult => {\n return html`\n ${storyStyles}\n <overlay-trigger\n triggered-by=\"click hover\"\n id=\"trigger\"\n placement=\"${placement}\"\n offset=\"${offset}\"\n open=${ifDefined(open)}\n type=${ifDefined(type)}\n >\n <sp-button variant=\"primary\" slot=\"trigger\">Show Popover</sp-button>\n <sp-popover slot=\"click-content\" placement=\"${placement}\" tip>\n <sp-dialog no-divider>\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n default-value=\"10\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover slot=\"click-content\" placement=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n Another Popover\n </sp-dialog>\n </sp-popover>\n\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n <sp-tooltip\n slot=\"hover-content\"\n ?delayed=${open !== 'hover'}\n tip=\"bottom\"\n >\n Click to open a popover.\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nconst extraText = html`\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n`;\n\nfunction nextFrame(): Promise<void> {\n return new Promise((res) => requestAnimationFrame(() => res()));\n}\n\nexport const Default = (args: Properties): TemplateResult => template(args);\n\nexport const accordion = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\" placement=\"top-start\">\n <style>\n sp-button {\n margin-top: 70vh;\n }\n </style>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open overlay w/ accordion\n </sp-button>\n <sp-popover\n slot=\"click-content\"\n style=\"overflow-y: scroll;position: static;\"\n >\n <sp-dialog size=\"s\" no-divider>\n <sp-accordion allow-multiple>\n <sp-accordion-item label=\"Some things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Other things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"More things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n <sp-accordion-item label=\"Additional things\">\n <p>\n Thing\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n <br />\n more things\n </p>\n </sp-accordion-item>\n </sp-accordion>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\naccordion.swc_vrt = {\n skip: true,\n};\naccordion.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const clickAndHoverTarget = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">Button</sp-button>\n <sp-popover slot=\"click-content\" placement=\"bottom\" tip>\n Popover content\n </sp-popover>\n <sp-tooltip slot=\"hover-content\" placement=\"right\">\n Tooltip content\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\nclickAndHoverTarget.swc_vrt = {\n skip: true,\n};\nclickAndHoverTarget.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const clickAndHoverTargets = (): TemplateResult => {\n return html`\n <div>\n ${storyStyles}\n <style>\n .friendly-target {\n padding: 4px;\n margin: 6px;\n border: 2px solid black;\n border-radius: 6px;\n cursor: default;\n }\n </style>\n <overlay-trigger placement=\"right\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Click me\n </div>\n <sp-tooltip slot=\"click-content\" tip=\"right\">\n Ok, now hover the other trigger\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"left\">\n <div class=\"friendly-target\" slot=\"trigger\" tabindex=\"0\">\n Then hover me\n </div>\n <sp-tooltip slot=\"hover-content\" tip=\"right\">\n Now click my trigger -- I should stay open, but the other\n overlay should close\n </sp-tooltip>\n </overlay-trigger>\n </div>\n `;\n};\nclickAndHoverTargets.swc_vrt = {\n skip: true,\n};\n\nclickAndHoverTargets.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nclass ScrollForcer extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n });\n this.setup();\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n (this.previousElementSibling?.lastElementChild as OverlayTrigger).open =\n 'click';\n }\n\n doScroll = async (): Promise<void> => {\n this.previousElementSibling?.addEventListener(\n 'sp-opened',\n this.doScroll\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n if (document.scrollingElement) {\n document.scrollingElement.scrollTop = 100;\n }\n\n await nextFrame();\n await nextFrame();\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('scroll-forcer', ScrollForcer);\n\nexport const clickContentClosedOnScroll = (\n args: Properties\n): TemplateResult => html`\n <div style=\"margin: 50vh 0 100vh;\">\n ${template({\n ...args,\n })}\n </div>\n`;\nclickContentClosedOnScroll.decorators = [\n (story: () => TemplateResult): TemplateResult => html`\n <style>\n html,\n body,\n #root,\n #root-inner,\n sp-story-decorator {\n height: auto !important;\n }\n </style>\n ${story()}\n <scroll-forcer></scroll-forcer>\n `,\n];\n\nclass ComplexModalReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n async setup(): Promise<void> {\n await nextFrame();\n\n const overlay = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n overlay.addEventListener('sp-opened', this.handleTriggerOpened);\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n await nextFrame();\n\n const picker = document.querySelector('#test-picker') as Picker;\n picker.addEventListener('sp-opened', this.handlePickerOpen);\n picker.open = true;\n };\n\n handlePickerOpen = async (): Promise<void> => {\n const picker = document.querySelector('#test-picker') as Picker;\n const actions = [nextFrame, picker.updateComplete];\n picker.focus();\n\n await Promise.all(actions);\n\n this.ready(true);\n };\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('complex-modal-ready', ComplexModalReady);\n\nconst complexModalDecorator = (story: () => TemplateResult): TemplateResult => {\n return html`\n ${story()}\n <complex-modal-ready></complex-modal-ready>\n `;\n};\n\nexport const complexModal = (): TemplateResult => {\n return html`\n <style>\n body {\n --swc-margin-test: 10px;\n margin: var(--swc-margin-test);\n }\n sp-story-decorator::part(container) {\n min-height: calc(100vh - (2 * var(--swc-margin-test)));\n padding: 0;\n display: grid;\n place-content: center;\n }\n </style>\n <overlay-trigger type=\"modal\" open=\"click\">\n <sp-dialog-wrapper\n slot=\"click-content\"\n headline=\"Dialog title\"\n dismissable\n underlay\n footer=\"Content for footer\"\n >\n <sp-field-label for=\"test-picker\">\n Selection type:\n </sp-field-label>\n <sp-picker id=\"test-picker\">\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-picker>\n </sp-dialog-wrapper>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n </overlay-trigger>\n `;\n};\n\ncomplexModal.decorators = [complexModalDecorator];\n\nexport const customizedClickContent = (\n args: Properties\n): TemplateResult => html`\n <style>\n sp-popover {\n --styled-div-background-color: var(\n --spectrum-accent-background-color-default\n );\n --mod-button-background-color-default: rebeccapurple;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\n\nexport const deep = (): TemplateResult => html`\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 1 with buttons + selfmanaged Tooltips\n </sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\">\n My Tooltip 1\n </sp-tooltip>\n A\n </sp-action-button>\n <sp-action-button>\n <sp-tooltip self-managed placement=\"bottom\">\n My Tooltip 1\n </sp-tooltip>\n B\n </sp-action-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open popover 2 with buttons without ToolTips\n </sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n <sp-action-button>X</sp-action-button>\n <sp-action-button>Y</sp-action-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n`;\ndeep.swc_vrt = {\n skip: true,\n};\n\ndeep.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const deepChildTooltip = (): TemplateResult => html`\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">Open popover</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog no-divider>\n <p>Let us open another overlay here</p>\n <overlay-trigger>\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open sub popover\n </sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\" tip>\n <sp-dialog no-divider>\n <p>\n Render an action button with tooltips. Clicking\n the action button shouldn't close everything\n </p>\n <sp-action-button>\n Button with self-managed tooltip\n <sp-tooltip self-managed placement=\"top\">\n Deep Child ToolTip\n </sp-tooltip>\n </sp-action-button>\n <sp-action-button>Just a button</sp-action-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n`;\n\nexport const deepNesting = (): TemplateResult => {\n const color = window.__swc_hack_knobs__.defaultColor;\n const outter = color === 'light' ? 'dark' : 'light';\n return html`\n ${storyStyles}\n <sp-theme\n color=${outter}\n system=${window.__swc_hack_knobs__.defaultSystemVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <sp-theme\n color=${color}\n system=${window.__swc_hack_knobs__.defaultSystemVariant}\n scale=${window.__swc_hack_knobs__.defaultScale}\n dir=${window.__swc_hack_knobs__.defaultDirection}\n >\n <recursive-popover\n tabindex=\"\"\n style=\"\n background-color: var(--spectrum-gray-100);\n color: var(--spectrum-gray-800);\n padding: calc(var(--swc-scale-factor) * 22px);\n \"\n ></recursive-popover>\n </sp-theme>\n </sp-theme>\n `;\n};\n\nclass DefinedOverlayReady extends HTMLElement {\n ready!: (value: boolean | PromiseLike<boolean>) => void;\n\n connectedCallback(): void {\n if (!!this.ready) return;\n\n this.readyPromise = new Promise((res) => {\n this.ready = res;\n this.setup();\n });\n }\n\n overlayElement!: OverlayTrigger;\n popoverElement!: PopoverContent;\n\n async setup(): Promise<void> {\n await nextFrame();\n await nextFrame();\n\n this.overlayElement = document.querySelector(\n `overlay-trigger`\n ) as OverlayTrigger;\n const button = document.querySelector(\n `[slot=\"trigger\"]`\n ) as HTMLButtonElement;\n this.overlayElement.addEventListener(\n 'sp-opened',\n this.handleTriggerOpened\n );\n await nextFrame();\n await nextFrame();\n button.click();\n }\n\n handleTriggerOpened = async (): Promise<void> => {\n this.overlayElement.removeEventListener(\n 'sp-opened',\n this.handleTriggerOpened\n );\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n this.popoverElement = document.querySelector(\n 'popover-content'\n ) as PopoverContent;\n if (!this.popoverElement) {\n return;\n }\n this.popoverElement.addEventListener(\n 'sp-opened',\n this.handlePopoverOpen\n );\n await nextFrame();\n await nextFrame();\n this.popoverElement.button.click();\n };\n\n handlePopoverOpen = async (): Promise<void> => {\n await nextFrame();\n\n this.ready(true);\n };\n\n disconnectedCallback(): void {\n this.overlayElement.removeEventListener(\n 'sp-opened',\n this.handleTriggerOpened\n );\n this.popoverElement.removeEventListener(\n 'sp-opened',\n this.handlePopoverOpen\n );\n }\n\n private readyPromise: Promise<boolean> = Promise.resolve(false);\n\n get updateComplete(): Promise<boolean> {\n return this.readyPromise;\n }\n}\n\ncustomElements.define('defined-overlay-ready', DefinedOverlayReady);\n\nconst definedOverlayDecorator = (\n story: () => TemplateResult\n): TemplateResult => {\n return html`\n ${story()}\n <defined-overlay-ready></defined-overlay-ready>\n `;\n};\n\nexport const definedOverlayElement = (): TemplateResult => {\n return html`\n <overlay-trigger placement=\"bottom\" type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">Open popover</sp-button>\n <sp-popover slot=\"click-content\" direction=\"bottom\">\n <sp-dialog no-divider>\n <popover-content></popover-content>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\ndefinedOverlayElement.decorators = [definedOverlayDecorator];\n\nexport const detachedElement = (): TemplateResult => {\n let overlay: Overlay | undefined;\n const openDetachedOverlayContent = async ({\n target,\n }: {\n target: HTMLElement;\n }): Promise<void> => {\n if (overlay) {\n overlay.open = false;\n overlay = undefined;\n return;\n }\n const div = document.createElement('div');\n (div as HTMLDivElement & { open: boolean }).open = false;\n div.textContent = 'This div is overlaid';\n div.setAttribute(\n 'style',\n `\n background-color: var(--spectrum-gray-50);\n color: var(--spectrum-gray-800);\n border: 1px solid;\n padding: 2em;\n `\n );\n overlay = await Overlay.open(div, {\n type: 'auto',\n trigger: target,\n receivesFocus: 'auto',\n placement: 'bottom',\n offset: 0,\n });\n overlay.addEventListener('sp-closed', () => {\n overlay = undefined;\n });\n target.insertAdjacentElement('afterend', overlay);\n };\n requestAnimationFrame(() => {\n openDetachedOverlayContent({\n target: document.querySelector(\n '#detached-content-trigger'\n ) as HTMLElement,\n });\n });\n return html`\n <style>\n sp-overlay div:not([placement]) {\n visibility: hidden;\n }\n </style>\n <sp-action-button\n id=\"detached-content-trigger\"\n @click=${openDetachedOverlayContent}\n >\n <sp-icon-open-in\n slot=\"icon\"\n label=\"Open in overlay\"\n ></sp-icon-open-in>\n </sp-action-button>\n `;\n};\n\nexport const edges = (): TemplateResult => {\n return html`\n <style>\n .demo {\n position: absolute;\n }\n .top-left {\n top: 0;\n left: 0;\n }\n .top-right {\n top: 0;\n right: 0;\n }\n .bottom-right {\n bottom: 0;\n right: 0;\n }\n .bottom-left {\n bottom: 0;\n left: 0;\n }\n </style>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo top-right\" placement=\"bottom\">\n <sp-button slot=\"trigger\">\n Top/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger class=\"demo bottom-left\" placement=\"top\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Left\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger placement=\"top\" class=\"demo bottom-right\">\n <sp-button slot=\"trigger\">\n Bottom/\n <br />\n Right\n </sp-button>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"top\">\n Triskaidekaphobia and More\n </sp-tooltip>\n </overlay-trigger>\n `;\n};\n\nexport const inline = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const longpress = (): TemplateResult => {\n return html`\n <overlay-trigger triggered-by=\"longpress\" placement=\"right-start\">\n <sp-action-button slot=\"trigger\" hold-affordance>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">Search real hard...</sp-tooltip>\n <sp-popover slot=\"longpress-content\" tip>\n <sp-action-group\n @change=${(event: Event & { target: HTMLElement }) =>\n event.target.dispatchEvent(\n new Event('close', { bubbles: true })\n )}\n selects=\"single\"\n vertical\n style=\"margin: calc(var(--spectrum-actiongroup-button-gap-y,calc(var(--swc-scale-factor) * 10px)) / 2);\"\n >\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-magnify slot=\"icon\"></sp-icon-magnify>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const modalLoose = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog\n size=\"s\"\n dismissable\n slot=\"click-content\"\n @closed=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n <h2 slot=\"heading\">Loose Dialog</h2>\n <p>\n The\n <code>sp-dialog</code>\n element is not \"meant\" to be a modal alone. In that way it\n does not manage its own\n <code>open</code>\n attribute or outline when it should have\n <code>pointer-events: auto</code>\n . It's a part of this test suite to prove that content in\n this way can be used in an\n <code>overlay-trigger</code>\n element.\n </p>\n </sp-dialog>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalNoFocus = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\" receives-focus=\"false\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog-wrapper\n underlay\n slot=\"click-content\"\n headline=\"Wrapped Dialog w/ Hero Image\"\n size=\"s\"\n >\n <p>\n The\n <code>sp-dialog-wrapper</code>\n element has been prepared for use in an\n <code>overlay-trigger</code>\n element by it's combination of modal, underlay, etc. styles\n and features.\n </p>\n <sp-button-group style=\"margin-inline-start: auto\">\n <sp-button\n data-test-id=\"dialog-cancel-btn\"\n variant=\"secondary\"\n treatment=\"outline\"\n size=\"l\"\n @click=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n ${'Cancel'}\n </sp-button>\n <sp-button\n data-test-id=\"dialog-override-btn\"\n variant=\"negative\"\n size=\"l\"\n @click=${(event: Event & { target: DialogWrapper }) =>\n event.target.dispatchEvent(closeEvent)}\n >\n ${'Override'}\n </sp-button>\n </sp-button-group>\n </sp-dialog-wrapper>\n </overlay-trigger>\n `;\n};\n\nexport const modalManaged = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-dialog-wrapper\n underlay\n slot=\"click-content\"\n headline=\"Wrapped Dialog w/ Hero Image\"\n confirm-label=\"Keep Both\"\n secondary-label=\"Replace\"\n cancel-label=\"Cancel\"\n footer=\"Content for footer\"\n @confirm=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @secondary=${(\n event: Event & { target: DialogWrapper }\n ): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n @cancel=${(event: Event & { target: DialogWrapper }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n <p>\n The\n <code>sp-dialog-wrapper</code>\n element has been prepared for use in an\n <code>overlay-trigger</code>\n element by it's combination of modal, underlay, etc. styles\n and features.\n </p>\n </sp-dialog-wrapper>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const modalWithinNonModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"inline\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <overlay-trigger type=\"modal\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open modal overlay\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n Modal overlay\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const noCloseOnResize = (args: Properties): TemplateResult => html`\n <style>\n sp-button:hover {\n border: 10px solid;\n width: 100px;\n }\n </style>\n ${template({\n ...args,\n open: 'click',\n })}\n`;\nnoCloseOnResize.swc_vrt = {\n skip: true,\n};\n\nnoCloseOnResize.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const openClickContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'click',\n });\n\nexport const openHoverContent = (args: Properties): TemplateResult =>\n template({\n ...args,\n open: 'hover',\n });\n\nexport const replace = (): TemplateResult => {\n const closeEvent = new Event('close', { bubbles: true, composed: true });\n return html`\n <overlay-trigger type=\"replace\">\n <sp-button slot=\"trigger\">Open</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-button\n @click=${(event: Event & { target: HTMLElement }): void => {\n event.target.dispatchEvent(closeEvent);\n }}\n >\n Close\n </sp-button>\n </sp-popover>\n </overlay-trigger>\n ${extraText}\n `;\n};\n\nexport const sideHoverDraggable = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger placement=\"right\">\n <overlay-target-icon slot=\"trigger\"></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"right\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n Vivamus egestas sed enim sed condimentum. Nunc facilisis\n scelerisque massa sed luctus. Orci varius natoque penatibus\n et magnis dis parturient montes, nascetur ridiculus mus.\n Suspendisse sagittis sodales purus vitae ultricies. Integer\n at dui sem. Sed quam tortor, ornare in nisi et, rhoncus\n lacinia mauris. Sed vel rutrum mauris, ac pellentesque nibh.\n Sed feugiat semper libero, sit amet vehicula orci fermentum\n id. Vivamus imperdiet egestas luctus. Mauris tincidunt\n malesuada ante, faucibus viverra nunc blandit a. Fusce et\n nisl nisi. Aenean dictum quam id mollis faucibus. Nulla a\n ultricies dui. In hac habitasse platea dictumst. Curabitur\n gravida lobortis vestibulum.\n </sp-tooltip>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const superComplexModal = (): TemplateResult => {\n return html`\n <overlay-trigger type=\"modal\">\n <sp-button slot=\"trigger\" variant=\"accent\">Toggle Dialog</sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\">\n <overlay-trigger>\n <sp-button slot=\"trigger\" variant=\"primary\">\n Toggle Dialog\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <overlay-trigger type=\"modal\">\n <sp-button\n slot=\"trigger\"\n variant=\"secondary\"\n >\n Toggle Dialog\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <p>\n When you get this deep, this\n ActiveOverlay should be the only\n one in [slot=\"open\"].\n </p>\n <p>\n All of the rest of the\n ActiveOverlay elements should\n have had their [slot] attribute\n removed.\n </p>\n <p>\n Closing this ActiveOverlay\n should replace them...\n </p>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nexport const updated = (): TemplateResult => {\n return html`\n ${storyStyles}\n <style>\n sp-tooltip {\n transition: none;\n }\n </style>\n <overlay-drag>\n <overlay-trigger class=\"demo top-left\" placement=\"bottom\">\n <overlay-target-icon\n slot=\"trigger\"\n style=\"translate(400px, 300px)\"\n ></overlay-target-icon>\n <sp-tooltip slot=\"hover-content\" delayed tip=\"bottom\">\n Click to open popover\n </sp-tooltip>\n <sp-popover slot=\"click-content\" position=\"bottom\" tip>\n <sp-dialog size=\"s\" no-divider>\n <sp-slider\n value=\"5\"\n step=\"0.5\"\n min=\"0\"\n max=\"20\"\n label=\"Awesomeness\"\n ></sp-slider>\n <div id=\"styled-div\">\n The background of this div should be blue\n </div>\n <overlay-trigger id=\"inner-trigger\" placement=\"bottom\">\n <sp-button slot=\"trigger\">Press Me</sp-button>\n <sp-popover\n slot=\"click-content\"\n placement=\"bottom\"\n tip\n >\n <sp-dialog size=\"s\" no-divider>\n Another Popover\n </sp-dialog>\n </sp-popover>\n\n <sp-tooltip\n slot=\"hover-content\"\n delayed\n tip=\"bottom\"\n >\n Click to open another popover.\n </sp-tooltip>\n </overlay-trigger>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n </overlay-drag>\n `;\n};\n\nexport const updating = (): TemplateResult => {\n const update = (): void => {\n const button = document.querySelector('[slot=\"trigger\"]') as Button;\n button.style.left = `${Math.floor(Math.random() * 200)}px`;\n button.style.top = `${Math.floor(Math.random() * 200)}px`;\n button.style.position = 'fixed';\n };\n return html`\n <overlay-trigger type=\"click\">\n <sp-button variant=\"primary\" slot=\"trigger\">\n Open inline overlay\n </sp-button>\n <sp-popover slot=\"click-content\">\n <sp-dialog size=\"s\" no-divider>\n <sp-button variant=\"primary\" @click=${update}>\n Update trigger location.\n </sp-button>\n </sp-dialog>\n </sp-popover>\n </overlay-trigger>\n `;\n};\n\nupdating.swc_vrt = {\n skip: true,\n};\n\nupdating.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nclass StartEndContextmenu extends HTMLElement {\n override shadowRoot!: ShadowRoot;\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n this.shadowRoot.innerHTML = `\n <style>\n :host {\n display: flex;\n align-items: stretch;\n }\n div {\n width: 50%;\n height: 100%;\n }\n </style>\n <div id=\"start\"></div>\n <div id=\"end\"></div>\n `;\n }\n}\n\ncustomElements.define('start-end-contextmenu', StartEndContextmenu);\n\nexport const virtualElementV1 = (args: Properties): TemplateResult => {\n const contextMenuTemplate = (kind = ''): TemplateResult => html`\n <sp-popover\n style=\"width:300px;\"\n @click=${(event: PointerEvent) => {\n if (\n (event.target as HTMLElement).localName === 'sp-menu-item'\n ) {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu source: ${kind}</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const source = event.composedPath()[0] as HTMLDivElement;\n const { id } = source;\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(id), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n\n openOverlay(trigger, 'click', popover, {\n placement: args.placement,\n receivesFocus: 'auto',\n virtualTrigger,\n offset: 0,\n notImmediatelyClosable: true,\n });\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <start-end-contextmenu\n class=\"app-root\"\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n ></start-end-contextmenu>\n `;\n};\n\nvirtualElementV1.args = {\n placement: 'right-start' as Placement,\n};\n\nexport const virtualElement = (args: Properties): TemplateResult => {\n const contextMenuTemplate = (kind = ''): TemplateResult => html`\n <sp-popover\n style=\"width:300px;\"\n @click=${(event: PointerEvent) => {\n if (\n (event.target as HTMLElement).localName === 'sp-menu-item'\n ) {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu source: ${kind}</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const source = event.composedPath()[0] as HTMLDivElement;\n const { id } = source;\n const trigger = event.target as HTMLElement;\n const virtualTrigger = new VirtualTrigger(event.clientX, event.clientY);\n const fragment = document.createDocumentFragment();\n render(contextMenuTemplate(id), fragment);\n const popover = fragment.querySelector('sp-popover') as Popover;\n\n const overlay = await openOverlay(popover, {\n trigger: virtualTrigger,\n placement: args.placement,\n offset: 0,\n notImmediatelyClosable: true,\n type: 'auto',\n });\n trigger.insertAdjacentElement('afterend', overlay);\n };\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <start-end-contextmenu\n class=\"app-root\"\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n ></start-end-contextmenu>\n `;\n};\n\nvirtualElement.args = {\n placement: 'right-start' as Placement,\n};\n\nexport const virtualElementDeclaratively = (\n args: Properties\n): TemplateResult => {\n const handleContextmenu = async (event: PointerEvent): Promise<void> => {\n event.preventDefault();\n event.stopPropagation();\n\n const overlay = document.querySelector(\n 'sp-overlay:not([open])'\n ) as Overlay;\n\n if (overlay.triggerElement instanceof VirtualTrigger) {\n overlay.triggerElement.updateBoundingClientRect(\n event.clientX,\n event.clientY\n );\n }\n overlay.willPreventClose = true;\n overlay.open = true;\n };\n const overlay = (): TemplateResult => html`\n <sp-overlay\n offset=\"0\"\n type=\"auto\"\n placement=${args.placement}\n .triggerElement=${new VirtualTrigger(0, 0)}\n >\n <sp-popover\n style=\"width:300px;\"\n @change=${(event: PointerEvent) => {\n event.target?.dispatchEvent(\n new Event('close', { bubbles: true })\n );\n }}\n >\n <sp-menu>\n <sp-menu-group>\n <span slot=\"header\">Menu</span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save selection</sp-menu-item>\n <sp-menu-item disabled>Make work path</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n </sp-overlay>\n `;\n\n return html`\n <style>\n .app-root {\n position: absolute;\n inset: 0;\n }\n </style>\n <div\n class=\"app-root\"\n @contextmenu=${{\n capture: true,\n handleEvent: handleContextmenu,\n }}\n >\n ${overlay()} ${overlay()}\n </div>\n `;\n};\n\nvirtualElementDeclaratively.args = {\n placement: 'right-start' as Placement,\n};\n\nvirtualElementDeclaratively.swc_vrt = {\n skip: true,\n};\n\nvirtualElementDeclaratively.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const triggeredByOptimization = (): TemplateResult => {\n return html`\n <h2>\"triggered-by\" attribute optimization</h2>\n <p>\n This demo shows different ways to trigger overlays using the\n <code>triggered-by</code>\n attribute.\n </p>\n <p>\n <strong>Pro tip:</strong>\n Inspect the DOM to verify that only the respective overlay elements\n are being rendered into the DOM based on the\n <code>triggered-by</code>\n value.\n </p>\n <p>\n Unused interaction types aren't rendered. This improves performance,\n reduces the number of unecessary DOM nodes and avoids race\n conditions in slot reparenting.\n </p>\n <div style=\"display: flex; gap: 20px; flex-direction: column;\">\n <!-- Click and hover only -->\n <overlay-trigger triggered-by=\"click hover\">\n <sp-button slot=\"trigger\">Click and hover trigger</sp-button>\n <sp-popover slot=\"click-content\" direction=\"right\" tip>\n <sp-dialog size=\"s\" no-divider>Click content</sp-dialog>\n </sp-popover>\n <sp-tooltip slot=\"hover-content\">Hover content</sp-tooltip>\n </overlay-trigger>\n\n <!-- Longpress only -->\n <overlay-trigger triggered-by=\"longpress\">\n <sp-button slot=\"trigger\">Longpress trigger</sp-button>\n <sp-popover slot=\"longpress-content\" direction=\"right\" tip>\n <sp-dialog size=\"s\" no-divider>Longpress content</sp-dialog>\n </sp-popover>\n <div slot=\"longpress-describedby-descriptor\">\n Press and hold to reveal more options\n </div>\n </overlay-trigger>\n\n <!-- Click only -->\n <overlay-trigger triggered-by=\"click\">\n <sp-button slot=\"trigger\">Click only trigger</sp-button>\n <sp-popover slot=\"click-content\" direction=\"right\" tip>\n <sp-dialog size=\"s\" no-divider>Click content</sp-dialog>\n </sp-popover>\n </overlay-trigger>\n\n <!-- Hover only -->\n <overlay-trigger triggered-by=\"hover\">\n <sp-button slot=\"trigger\">Hover only trigger</sp-button>\n <sp-tooltip slot=\"hover-content\">Hover content</sp-tooltip>\n </overlay-trigger>\n </div>\n `;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["overlay"]
|
|
7
7
|
}
|