@spectrum-web-components/overlay 0.19.3 → 0.19.4-overlay.8
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 +50 -25
- package/sp-overlay.d.ts +6 -0
- package/sp-overlay.dev.js +4 -0
- package/{active-overlay.js.map → sp-overlay.dev.js.map} +4 -4
- package/sp-overlay.js +2 -0
- package/sp-overlay.js.map +7 -0
- package/src/Overlay.d.ts +22 -0
- package/src/Overlay.dev.js +63 -0
- package/src/Overlay.dev.js.map +7 -0
- package/src/Overlay.js +2 -0
- package/src/Overlay.js.map +7 -0
- package/src/OverlayBase.d.ts +93 -0
- package/src/OverlayBase.dev.js +564 -0
- package/src/OverlayBase.dev.js.map +7 -0
- package/src/OverlayBase.js +18 -0
- package/src/OverlayBase.js.map +7 -0
- package/src/OverlayDialog.d.ts +8 -0
- package/src/OverlayDialog.dev.js +43 -0
- package/src/OverlayDialog.dev.js.map +7 -0
- package/src/OverlayDialog.js +2 -0
- package/src/OverlayDialog.js.map +7 -0
- package/src/OverlayNoPopover.d.ts +8 -0
- package/src/OverlayNoPopover.dev.js +62 -0
- package/src/OverlayNoPopover.dev.js.map +7 -0
- package/src/OverlayNoPopover.js +2 -0
- package/src/OverlayNoPopover.js.map +7 -0
- package/src/OverlayPopover.d.ts +8 -0
- package/src/OverlayPopover.dev.js +81 -0
- package/src/OverlayPopover.dev.js.map +7 -0
- package/src/OverlayPopover.js +2 -0
- package/src/OverlayPopover.js.map +7 -0
- package/src/OverlayStack.d.ts +24 -0
- package/src/OverlayStack.dev.js +113 -0
- package/src/OverlayStack.dev.js.map +7 -0
- package/src/OverlayStack.js +2 -0
- package/src/OverlayStack.js.map +7 -0
- package/src/OverlayTrigger.d.ts +18 -31
- package/src/OverlayTrigger.dev.js +138 -246
- package/src/OverlayTrigger.dev.js.map +3 -3
- package/src/OverlayTrigger.js +54 -22
- package/src/OverlayTrigger.js.map +3 -3
- package/src/PlacementController.d.ts +35 -0
- package/src/PlacementController.dev.js +172 -0
- package/src/PlacementController.dev.js.map +7 -0
- package/src/PlacementController.js +2 -0
- package/src/PlacementController.js.map +7 -0
- package/src/VirtualTrigger.dev.js +0 -2
- package/src/VirtualTrigger.dev.js.map +2 -2
- package/src/VirtualTrigger.js +1 -1
- package/src/VirtualTrigger.js.map +3 -3
- package/src/fullSizePlugin.d.ts +12 -0
- package/src/fullSizePlugin.dev.js +39 -0
- package/src/fullSizePlugin.dev.js.map +7 -0
- package/src/fullSizePlugin.js +2 -0
- package/src/fullSizePlugin.js.map +7 -0
- package/src/index.d.ts +1 -3
- package/src/index.dev.js +1 -3
- package/src/index.dev.js.map +2 -2
- package/src/index.js +1 -1
- package/src/index.js.map +2 -2
- package/src/overlay-base.css.dev.js +9 -0
- package/src/overlay-base.css.dev.js.map +7 -0
- package/src/overlay-base.css.js +6 -0
- package/src/overlay-base.css.js.map +7 -0
- package/src/overlay-trigger.css.dev.js +1 -1
- package/src/overlay-trigger.css.dev.js.map +1 -1
- package/src/overlay-trigger.css.js +1 -1
- package/src/overlay-trigger.css.js.map +1 -1
- package/src/overlay-types.d.ts +2 -2
- package/src/overlay-types.dev.js +1 -0
- package/src/overlay-types.dev.js.map +3 -3
- package/src/overlay-types.js +1 -1
- package/src/overlay-types.js.map +3 -3
- package/src/placement.d.ts +21 -0
- package/src/placement.dev.js +111 -0
- package/src/placement.dev.js.map +7 -0
- package/src/placement.js +2 -0
- package/src/placement.js.map +7 -0
- package/src/topLayerOverTransforms.d.ts +22 -0
- package/src/topLayerOverTransforms.dev.js +161 -0
- package/src/topLayerOverTransforms.dev.js.map +7 -0
- package/src/topLayerOverTransforms.js +2 -0
- package/src/topLayerOverTransforms.js.map +7 -0
- package/stories/overlay-element.stories.js +229 -0
- package/stories/overlay-element.stories.js.map +7 -0
- package/stories/overlay-story-components.js +1 -6
- package/stories/overlay-story-components.js.map +2 -2
- package/stories/overlay.stories.js +641 -682
- package/stories/overlay.stories.js.map +2 -2
- package/sync/overlay-trigger.d.ts +4 -0
- package/sync/overlay-trigger.dev.js +1 -4
- package/sync/overlay-trigger.dev.js.map +2 -2
- package/sync/overlay-trigger.js +1 -1
- package/sync/overlay-trigger.js.map +3 -3
- package/test/benchmark/basic-test.js +1 -1
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/index.js +3 -9
- package/test/index.js.map +2 -2
- package/test/overlay-element.test-vrt.js +5 -0
- package/{active-overlay.dev.js.map → test/overlay-element.test-vrt.js.map} +3 -3
- package/test/overlay-element.test.js +759 -0
- package/test/overlay-element.test.js.map +7 -0
- package/test/overlay-lifecycle.test.js +34 -74
- package/test/overlay-lifecycle.test.js.map +2 -2
- package/test/overlay-trigger-click.test.js +3 -2
- package/test/overlay-trigger-click.test.js.map +2 -2
- package/test/overlay-trigger-extended.test.js +1 -6
- package/test/overlay-trigger-extended.test.js.map +2 -2
- package/test/overlay-trigger-hover-click.test.js +1 -1
- package/test/overlay-trigger-hover-click.test.js.map +2 -2
- package/test/overlay-trigger-hover.test.js +2 -2
- package/test/overlay-trigger-hover.test.js.map +2 -2
- package/test/overlay-trigger-longpress.test.js +1 -377
- package/test/overlay-trigger-longpress.test.js.map +2 -2
- package/test/overlay-trigger-sync.test.js +1 -3
- package/test/overlay-trigger-sync.test.js.map +2 -2
- package/test/overlay-trigger.test.js +1 -3
- package/test/overlay-trigger.test.js.map +2 -2
- package/test/overlay-update.test.js +4 -4
- package/test/overlay-update.test.js.map +2 -2
- package/test/overlay.test.js +100 -154
- package/test/overlay.test.js.map +2 -2
- package/active-overlay.d.ts +0 -6
- package/active-overlay.dev.js +0 -4
- package/active-overlay.js +0 -2
- package/custom-elements.json +0 -1212
- package/src/ActiveOverlay.d.ts +0 -84
- package/src/ActiveOverlay.dev.js +0 -517
- package/src/ActiveOverlay.dev.js.map +0 -7
- package/src/ActiveOverlay.js +0 -16
- package/src/ActiveOverlay.js.map +0 -7
- package/src/active-overlay.css.dev.js +0 -13
- package/src/active-overlay.css.dev.js.map +0 -7
- package/src/active-overlay.css.js +0 -10
- package/src/active-overlay.css.js.map +0 -7
- package/src/loader.d.ts +0 -2
- package/src/loader.dev.js +0 -21
- package/src/loader.dev.js.map +0 -7
- package/src/loader.js +0 -2
- package/src/loader.js.map +0 -7
- package/src/overlay-stack.d.ts +0 -50
- package/src/overlay-stack.dev.js +0 -514
- package/src/overlay-stack.dev.js.map +0 -7
- package/src/overlay-stack.js +0 -33
- package/src/overlay-stack.js.map +0 -7
- package/src/overlay-utils.d.ts +0 -3
- package/src/overlay-utils.dev.js +0 -31
- package/src/overlay-utils.dev.js.map +0 -7
- package/src/overlay-utils.js +0 -2
- package/src/overlay-utils.js.map +0 -7
- package/src/overlay.d.ts +0 -59
- package/src/overlay.dev.js +0 -127
- package/src/overlay.dev.js.map +0 -7
- package/src/overlay.js +0 -2
- package/src/overlay.js.map +0 -7
- /package/src/{active-overlay.css.d.ts → overlay-base.css.d.ts} +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
export const topLayerOverTransforms = () => ({
|
|
3
|
+
name: "topLayer",
|
|
4
|
+
async fn(middlewareArguments) {
|
|
5
|
+
const {
|
|
6
|
+
x,
|
|
7
|
+
y,
|
|
8
|
+
elements: { reference, floating }
|
|
9
|
+
} = middlewareArguments;
|
|
10
|
+
let onTopLayer = false;
|
|
11
|
+
let topLayerIsFloating = false;
|
|
12
|
+
const diffCoords = {
|
|
13
|
+
x: 0,
|
|
14
|
+
y: 0
|
|
15
|
+
};
|
|
16
|
+
try {
|
|
17
|
+
onTopLayer = onTopLayer || floating.matches(":open");
|
|
18
|
+
} catch (e) {
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
onTopLayer = onTopLayer || floating.matches(":modal");
|
|
22
|
+
} catch (e) {
|
|
23
|
+
}
|
|
24
|
+
topLayerIsFloating = onTopLayer;
|
|
25
|
+
if (!onTopLayer) {
|
|
26
|
+
const dialogAncestorQueryEvent = new Event(
|
|
27
|
+
"floating-ui-dialog-test",
|
|
28
|
+
{ composed: true, bubbles: true }
|
|
29
|
+
);
|
|
30
|
+
floating.addEventListener(
|
|
31
|
+
"floating-ui-dialog-test",
|
|
32
|
+
(event) => {
|
|
33
|
+
event.composedPath().forEach(
|
|
34
|
+
(el) => {
|
|
35
|
+
if (el === floating || el.localName !== "dialog")
|
|
36
|
+
return;
|
|
37
|
+
try {
|
|
38
|
+
onTopLayer = onTopLayer || el.matches(":modal");
|
|
39
|
+
if (onTopLayer) {
|
|
40
|
+
}
|
|
41
|
+
} catch (e) {
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
},
|
|
46
|
+
{ once: true }
|
|
47
|
+
);
|
|
48
|
+
floating.dispatchEvent(dialogAncestorQueryEvent);
|
|
49
|
+
}
|
|
50
|
+
let overTransforms = false;
|
|
51
|
+
const containingBlock = getContainingBlock(reference);
|
|
52
|
+
if (containingBlock !== null && !isWindow(containingBlock)) {
|
|
53
|
+
overTransforms = true;
|
|
54
|
+
}
|
|
55
|
+
if (onTopLayer && overTransforms) {
|
|
56
|
+
const rect = containingBlock.getBoundingClientRect();
|
|
57
|
+
diffCoords.x = rect.x;
|
|
58
|
+
diffCoords.y = rect.y;
|
|
59
|
+
}
|
|
60
|
+
if (onTopLayer && topLayerIsFloating) {
|
|
61
|
+
return {
|
|
62
|
+
x: x + diffCoords.x,
|
|
63
|
+
y: y + diffCoords.y,
|
|
64
|
+
data: diffCoords
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (onTopLayer) {
|
|
68
|
+
return {
|
|
69
|
+
x,
|
|
70
|
+
y,
|
|
71
|
+
data: diffCoords
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
x: x - diffCoords.x,
|
|
76
|
+
y: y - diffCoords.y,
|
|
77
|
+
data: diffCoords
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
function getContainingBlock(element) {
|
|
82
|
+
let currentNode = getParentNode(element);
|
|
83
|
+
if (isShadowRoot(currentNode)) {
|
|
84
|
+
currentNode = currentNode.host;
|
|
85
|
+
}
|
|
86
|
+
while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
|
|
87
|
+
if (isContainingBlock(currentNode)) {
|
|
88
|
+
return currentNode;
|
|
89
|
+
} else {
|
|
90
|
+
const parent = currentNode.assignedSlot ? currentNode.assignedSlot : currentNode.parentNode;
|
|
91
|
+
currentNode = isShadowRoot(parent) ? parent.host : parent;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
export function isLastTraversableNode(node) {
|
|
97
|
+
return ["html", "body", "#document"].includes(getNodeName(node));
|
|
98
|
+
}
|
|
99
|
+
function isContainingBlock(element) {
|
|
100
|
+
const isFirefox = /firefox/i.test(getUAString());
|
|
101
|
+
if (element.tagName === "dialog") {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
const css = getComputedStyle(element);
|
|
105
|
+
return css.transform !== "none" || css.perspective !== "none" || // @ts-ignore (TS 4.1 compat)
|
|
106
|
+
css.contain === "paint" || ["transform", "perspective"].includes(css.willChange) || isFirefox && css.willChange === "filter" || isFirefox && (css.filter ? css.filter !== "none" : false);
|
|
107
|
+
}
|
|
108
|
+
export function getUAString() {
|
|
109
|
+
const uaData = navigator.userAgentData;
|
|
110
|
+
if (uaData == null ? void 0 : uaData.brands) {
|
|
111
|
+
return uaData.brands.map((item) => `${item.brand}/${item.version}`).join(" ");
|
|
112
|
+
}
|
|
113
|
+
return navigator.userAgent;
|
|
114
|
+
}
|
|
115
|
+
export function getParentNode(node) {
|
|
116
|
+
if (getNodeName(node) === "html") {
|
|
117
|
+
return node;
|
|
118
|
+
}
|
|
119
|
+
return (
|
|
120
|
+
// this is a quicker (but less type safe) way to save quite some bytes from the bundle
|
|
121
|
+
// @ts-ignore
|
|
122
|
+
node.assignedSlot || // step into the shadow DOM of the parent of a slotted node
|
|
123
|
+
node.parentNode || // DOM Element detected
|
|
124
|
+
(isShadowRoot(node) ? node.host : null) || // ShadowRoot detected
|
|
125
|
+
getDocumentElement(node)
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
export function getNodeName(node) {
|
|
129
|
+
return isWindow(node) ? "" : node ? (node.nodeName || "").toLowerCase() : "";
|
|
130
|
+
}
|
|
131
|
+
export function getDocumentElement(node) {
|
|
132
|
+
return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;
|
|
133
|
+
}
|
|
134
|
+
export function isNode(value) {
|
|
135
|
+
return value instanceof getWindow(value).Node;
|
|
136
|
+
}
|
|
137
|
+
export function isWindow(value) {
|
|
138
|
+
return value && value.document && value.location && value.alert && value.setInterval;
|
|
139
|
+
}
|
|
140
|
+
export function getWindow(node) {
|
|
141
|
+
if (node == null) {
|
|
142
|
+
return window;
|
|
143
|
+
}
|
|
144
|
+
if (!isWindow(node)) {
|
|
145
|
+
const ownerDocument = node.ownerDocument;
|
|
146
|
+
return ownerDocument ? ownerDocument.defaultView || window : window;
|
|
147
|
+
}
|
|
148
|
+
return node;
|
|
149
|
+
}
|
|
150
|
+
export function isShadowRoot(node) {
|
|
151
|
+
if (typeof ShadowRoot === "undefined") {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
const OwnElement = getWindow(node).ShadowRoot;
|
|
155
|
+
const testNode = node;
|
|
156
|
+
return node instanceof OwnElement || testNode instanceof ShadowRoot;
|
|
157
|
+
}
|
|
158
|
+
export function isHTMLElement(value) {
|
|
159
|
+
return value instanceof getWindow(value).HTMLElement;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=topLayerOverTransforms.dev.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["topLayerOverTransforms.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport type { MiddlewareArguments } from '@floating-ui/dom';\n\nexport const topLayerOverTransforms = () => ({\n name: 'topLayer',\n async fn(middlewareArguments: MiddlewareArguments) {\n const {\n x,\n y,\n elements: { reference, floating },\n } = middlewareArguments;\n let onTopLayer = false;\n let topLayerIsFloating = false;\n const diffCoords = {\n x: 0,\n y: 0,\n };\n try {\n onTopLayer = onTopLayer || floating.matches(':open');\n // eslint-disable-next-line no-empty\n } catch (e) {}\n try {\n onTopLayer = onTopLayer || floating.matches(':modal');\n // eslint-disable-next-line no-empty\n } catch (e) {}\n topLayerIsFloating = onTopLayer;\n if (!onTopLayer) {\n const dialogAncestorQueryEvent = new Event(\n 'floating-ui-dialog-test',\n { composed: true, bubbles: true }\n );\n floating.addEventListener(\n 'floating-ui-dialog-test',\n (event: Event) => {\n (event.composedPath() as unknown as Element[]).forEach(\n (el) => {\n if (el === floating || el.localName !== 'dialog')\n return;\n try {\n onTopLayer = onTopLayer || el.matches(':modal');\n if (onTopLayer) {\n // console.log(el);\n }\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n );\n },\n { once: true }\n );\n floating.dispatchEvent(dialogAncestorQueryEvent);\n }\n let overTransforms = false;\n const containingBlock = getContainingBlock(reference as Element);\n if (containingBlock !== null && !isWindow(containingBlock)) {\n overTransforms = true;\n }\n\n if (onTopLayer && overTransforms) {\n const rect = containingBlock!.getBoundingClientRect();\n diffCoords.x = rect.x;\n diffCoords.y = rect.y;\n }\n\n if (onTopLayer && topLayerIsFloating) {\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords,\n };\n }\n\n if (onTopLayer) {\n return {\n x,\n y,\n data: diffCoords,\n };\n }\n\n return {\n x: x - diffCoords.x,\n y: y - diffCoords.y,\n data: diffCoords,\n };\n },\n});\n\n/* COPY/PASTE from Floating UI */\n\nfunction getContainingBlock(element: Element) {\n let currentNode: Node | null = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n const parent = (\n currentNode.assignedSlot\n ? currentNode.assignedSlot\n : currentNode.parentNode\n ) as Node;\n currentNode = isShadowRoot(parent) ? parent.host : parent;\n }\n }\n\n return null;\n}\n\nexport function isLastTraversableNode(node: Node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nfunction isContainingBlock(element: HTMLElement) {\n // TODO: Try and use feature detection here instead\n const isFirefox = /firefox/i.test(getUAString());\n if (element.tagName === 'dialog') {\n return true;\n }\n const css = getComputedStyle(element); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n return (\n css.transform !== 'none' ||\n css.perspective !== 'none' || // @ts-ignore (TS 4.1 compat)\n css.contain === 'paint' ||\n ['transform', 'perspective'].includes(css.willChange) ||\n (isFirefox && css.willChange === 'filter') ||\n (isFirefox && (css.filter ? css.filter !== 'none' : false))\n );\n}\n\ninterface NavigatorUAData {\n brands: Array<{ brand: string; version: string }>;\n mobile: boolean;\n platform: string;\n}\n\nexport function getUAString(): string {\n const uaData = (navigator as any).userAgentData as\n | NavigatorUAData\n | undefined;\n\n if (uaData?.brands) {\n return uaData.brands\n .map((item) => `${item.brand}/${item.version}`)\n .join(' ');\n }\n\n return navigator.userAgent;\n}\n\nexport function getParentNode(node: Node): Node {\n if (getNodeName(node) === 'html') {\n return node;\n }\n\n return (\n // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // @ts-ignore\n node.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n node.parentNode || // DOM Element detected\n (isShadowRoot(node) ? node.host : null) || // ShadowRoot detected\n getDocumentElement(node) // fallback\n );\n}\n\nexport function getNodeName(node: Node | Window): string {\n return isWindow(node)\n ? ''\n : node\n ? (node.nodeName || '').toLowerCase()\n : '';\n}\n\nexport function getDocumentElement(node: Node | Window): HTMLElement {\n return (\n (isNode(node) ? node.ownerDocument : node.document) || window.document\n ).documentElement;\n}\n\nexport function isNode(value: any): value is Node {\n return value instanceof (getWindow(value) as unknown as { Node: any }).Node;\n}\n\nexport function isWindow(value: any): value is Window {\n return (\n value &&\n value.document &&\n value.location &&\n value.alert &&\n value.setInterval\n );\n}\n\nexport function getWindow(node: Node | Window): Window {\n if (node == null) {\n return window;\n }\n\n if (!isWindow(node)) {\n const ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\nexport function isShadowRoot(node: Node): node is ShadowRoot {\n // Browsers without `ShadowRoot` support\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n const OwnElement = (\n getWindow(node) as unknown as { ShadowRoot: ShadowRoot }\n ).ShadowRoot;\n const testNode = node as Node;\n return (\n node instanceof (OwnElement as unknown as any) ||\n testNode instanceof ShadowRoot\n );\n}\n\nexport function isHTMLElement(value: any): value is HTMLElement {\n return (\n value instanceof\n (getWindow(value) as unknown as { HTMLElement: any }).HTMLElement\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";export const topLayerOverTransforms=()=>({name:"topLayer",async fn(e){const{x:n,y:t,elements:{reference:d,floating:i}}=e;let o=!1,u=!1;const r={x:0,y:0};try{o=o||i.matches(":open")}catch(a){}try{o=o||i.matches(":modal")}catch(a){}if(u=o,!o){const a=new Event("floating-ui-dialog-test",{composed:!0,bubbles:!0});i.addEventListener("floating-ui-dialog-test",f=>{f.composedPath().forEach(l=>{if(!(l===i||l.localName!=="dialog"))try{o=o||l.matches(":modal")}catch(w){}})},{once:!0}),i.dispatchEvent(a)}let c=!1;const s=m(d);if(s!==null&&!isWindow(s)&&(c=!0),o&&c){const a=s.getBoundingClientRect();r.x=a.x,r.y=a.y}return o&&u?{x:n+r.x,y:t+r.y,data:r}:o?{x:n,y:t,data:r}:{x:n-r.x,y:t-r.y,data:r}}});function m(e){let n=getParentNode(e);for(isShadowRoot(n)&&(n=n.host);isHTMLElement(n)&&!isLastTraversableNode(n);){if(g(n))return n;{const t=n.assignedSlot?n.assignedSlot:n.parentNode;n=isShadowRoot(t)?t.host:t}}return null}export function isLastTraversableNode(e){return["html","body","#document"].includes(getNodeName(e))}function g(e){const n=/firefox/i.test(getUAString());if(e.tagName==="dialog")return!0;const t=getComputedStyle(e);return t.transform!=="none"||t.perspective!=="none"||t.contain==="paint"||["transform","perspective"].includes(t.willChange)||n&&t.willChange==="filter"||n&&(t.filter?t.filter!=="none":!1)}export function getUAString(){const e=navigator.userAgentData;return e!=null&&e.brands?e.brands.map(n=>`${n.brand}/${n.version}`).join(" "):navigator.userAgent}export function getParentNode(e){return getNodeName(e)==="html"?e:e.assignedSlot||e.parentNode||(isShadowRoot(e)?e.host:null)||getDocumentElement(e)}export function getNodeName(e){return isWindow(e)?"":e?(e.nodeName||"").toLowerCase():""}export function getDocumentElement(e){return((isNode(e)?e.ownerDocument:e.document)||window.document).documentElement}export function isNode(e){return e instanceof getWindow(e).Node}export function isWindow(e){return e&&e.document&&e.location&&e.alert&&e.setInterval}export function getWindow(e){if(e==null)return window;if(!isWindow(e)){const n=e.ownerDocument;return n&&n.defaultView||window}return e}export function isShadowRoot(e){if(typeof ShadowRoot=="undefined")return!1;const n=getWindow(e).ShadowRoot,t=e;return e instanceof n||t instanceof ShadowRoot}export function isHTMLElement(e){return e instanceof getWindow(e).HTMLElement}
|
|
2
|
+
//# sourceMappingURL=topLayerOverTransforms.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["topLayerOverTransforms.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport type { MiddlewareArguments } from '@floating-ui/dom';\n\nexport const topLayerOverTransforms = () => ({\n name: 'topLayer',\n async fn(middlewareArguments: MiddlewareArguments) {\n const {\n x,\n y,\n elements: { reference, floating },\n } = middlewareArguments;\n let onTopLayer = false;\n let topLayerIsFloating = false;\n const diffCoords = {\n x: 0,\n y: 0,\n };\n try {\n onTopLayer = onTopLayer || floating.matches(':open');\n // eslint-disable-next-line no-empty\n } catch (e) {}\n try {\n onTopLayer = onTopLayer || floating.matches(':modal');\n // eslint-disable-next-line no-empty\n } catch (e) {}\n topLayerIsFloating = onTopLayer;\n if (!onTopLayer) {\n const dialogAncestorQueryEvent = new Event(\n 'floating-ui-dialog-test',\n { composed: true, bubbles: true }\n );\n floating.addEventListener(\n 'floating-ui-dialog-test',\n (event: Event) => {\n (event.composedPath() as unknown as Element[]).forEach(\n (el) => {\n if (el === floating || el.localName !== 'dialog')\n return;\n try {\n onTopLayer = onTopLayer || el.matches(':modal');\n if (onTopLayer) {\n // console.log(el);\n }\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n );\n },\n { once: true }\n );\n floating.dispatchEvent(dialogAncestorQueryEvent);\n }\n let overTransforms = false;\n const containingBlock = getContainingBlock(reference as Element);\n if (containingBlock !== null && !isWindow(containingBlock)) {\n overTransforms = true;\n }\n\n if (onTopLayer && overTransforms) {\n const rect = containingBlock!.getBoundingClientRect();\n diffCoords.x = rect.x;\n diffCoords.y = rect.y;\n }\n\n if (onTopLayer && topLayerIsFloating) {\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords,\n };\n }\n\n if (onTopLayer) {\n return {\n x,\n y,\n data: diffCoords,\n };\n }\n\n return {\n x: x - diffCoords.x,\n y: y - diffCoords.y,\n data: diffCoords,\n };\n },\n});\n\n/* COPY/PASTE from Floating UI */\n\nfunction getContainingBlock(element: Element) {\n let currentNode: Node | null = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n const parent = (\n currentNode.assignedSlot\n ? currentNode.assignedSlot\n : currentNode.parentNode\n ) as Node;\n currentNode = isShadowRoot(parent) ? parent.host : parent;\n }\n }\n\n return null;\n}\n\nexport function isLastTraversableNode(node: Node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nfunction isContainingBlock(element: HTMLElement) {\n // TODO: Try and use feature detection here instead\n const isFirefox = /firefox/i.test(getUAString());\n if (element.tagName === 'dialog') {\n return true;\n }\n const css = getComputedStyle(element); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n return (\n css.transform !== 'none' ||\n css.perspective !== 'none' || // @ts-ignore (TS 4.1 compat)\n css.contain === 'paint' ||\n ['transform', 'perspective'].includes(css.willChange) ||\n (isFirefox && css.willChange === 'filter') ||\n (isFirefox && (css.filter ? css.filter !== 'none' : false))\n );\n}\n\ninterface NavigatorUAData {\n brands: Array<{ brand: string; version: string }>;\n mobile: boolean;\n platform: string;\n}\n\nexport function getUAString(): string {\n const uaData = (navigator as any).userAgentData as\n | NavigatorUAData\n | undefined;\n\n if (uaData?.brands) {\n return uaData.brands\n .map((item) => `${item.brand}/${item.version}`)\n .join(' ');\n }\n\n return navigator.userAgent;\n}\n\nexport function getParentNode(node: Node): Node {\n if (getNodeName(node) === 'html') {\n return node;\n }\n\n return (\n // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // @ts-ignore\n node.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n node.parentNode || // DOM Element detected\n (isShadowRoot(node) ? node.host : null) || // ShadowRoot detected\n getDocumentElement(node) // fallback\n );\n}\n\nexport function getNodeName(node: Node | Window): string {\n return isWindow(node)\n ? ''\n : node\n ? (node.nodeName || '').toLowerCase()\n : '';\n}\n\nexport function getDocumentElement(node: Node | Window): HTMLElement {\n return (\n (isNode(node) ? node.ownerDocument : node.document) || window.document\n ).documentElement;\n}\n\nexport function isNode(value: any): value is Node {\n return value instanceof (getWindow(value) as unknown as { Node: any }).Node;\n}\n\nexport function isWindow(value: any): value is Window {\n return (\n value &&\n value.document &&\n value.location &&\n value.alert &&\n value.setInterval\n );\n}\n\nexport function getWindow(node: Node | Window): Window {\n if (node == null) {\n return window;\n }\n\n if (!isWindow(node)) {\n const ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\nexport function isShadowRoot(node: Node): node is ShadowRoot {\n // Browsers without `ShadowRoot` support\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n const OwnElement = (\n getWindow(node) as unknown as { ShadowRoot: ShadowRoot }\n ).ShadowRoot;\n const testNode = node as Node;\n return (\n node instanceof (OwnElement as unknown as any) ||\n testNode instanceof ShadowRoot\n );\n}\n\nexport function isHTMLElement(value: any): value is HTMLElement {\n return (\n value instanceof\n (getWindow(value) as unknown as { HTMLElement: any }).HTMLElement\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["middlewareArguments", "x", "y", "reference", "floating", "onTopLayer", "topLayerIsFloating", "diffCoords", "e", "dialogAncestorQueryEvent", "event", "el", "overTransforms", "containingBlock", "getContainingBlock", "rect", "element", "currentNode", "isContainingBlock", "parent", "node", "isFirefox", "css", "uaData", "item", "value", "ownerDocument", "OwnElement", "testNode"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { html } from "@spectrum-web-components/base";
|
|
3
|
+
import { ifDefined } from "@spectrum-web-components/base/src/directives.js";
|
|
4
|
+
import "@spectrum-web-components/overlay/sp-overlay.js";
|
|
5
|
+
import "@spectrum-web-components/action-button/sp-action-button.js";
|
|
6
|
+
import "@spectrum-web-components/action-group/sp-action-group.js";
|
|
7
|
+
import "@spectrum-web-components/popover/sp-popover.js";
|
|
8
|
+
import "@spectrum-web-components/icons-workflow/icons/sp-icon-anchor-select.js";
|
|
9
|
+
import "@spectrum-web-components/icons-workflow/icons/sp-icon-polygon-select.js";
|
|
10
|
+
import "@spectrum-web-components/icons-workflow/icons/sp-icon-rect-select.js";
|
|
11
|
+
import { notAgain } from "../../dialog/stories/dialog-base.stories.js";
|
|
12
|
+
export default {
|
|
13
|
+
title: "Overlay Element",
|
|
14
|
+
component: "sp-overlay",
|
|
15
|
+
args: {
|
|
16
|
+
open: true
|
|
17
|
+
},
|
|
18
|
+
argTypes: {
|
|
19
|
+
open: {
|
|
20
|
+
name: "open",
|
|
21
|
+
type: { name: "boolean", required: false },
|
|
22
|
+
description: "Whether the second accordion item is open.",
|
|
23
|
+
table: {
|
|
24
|
+
type: { summary: "boolean" },
|
|
25
|
+
defaultValue: { summary: false }
|
|
26
|
+
},
|
|
27
|
+
control: {
|
|
28
|
+
type: "boolean"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const Template = ({
|
|
34
|
+
interaction,
|
|
35
|
+
open,
|
|
36
|
+
placement,
|
|
37
|
+
type
|
|
38
|
+
}) => html`
|
|
39
|
+
<sp-action-button id="trigger">Open the overlay</sp-action-button>
|
|
40
|
+
<sp-overlay
|
|
41
|
+
?open=${open}
|
|
42
|
+
trigger="trigger@${interaction}"
|
|
43
|
+
type=${ifDefined(type)}
|
|
44
|
+
placement=${ifDefined(placement)}
|
|
45
|
+
>
|
|
46
|
+
<sp-popover dialog tip>
|
|
47
|
+
<p>
|
|
48
|
+
Content goes here.
|
|
49
|
+
${type === "modal" || type === "page" ? html`
|
|
50
|
+
Or, a link,
|
|
51
|
+
<sp-link
|
|
52
|
+
href="https://opensource.adobe.com/spectrum-web-components"
|
|
53
|
+
>
|
|
54
|
+
Spectrum Web Components
|
|
55
|
+
</sp-link>
|
|
56
|
+
.
|
|
57
|
+
` : ""}
|
|
58
|
+
</p>
|
|
59
|
+
</sp-popover>
|
|
60
|
+
</sp-overlay>
|
|
61
|
+
`;
|
|
62
|
+
export const modal = (args) => Template(args);
|
|
63
|
+
modal.args = {
|
|
64
|
+
interaction: "click",
|
|
65
|
+
placement: "right",
|
|
66
|
+
type: "modal"
|
|
67
|
+
};
|
|
68
|
+
export const page = ({
|
|
69
|
+
interaction,
|
|
70
|
+
open,
|
|
71
|
+
placement,
|
|
72
|
+
type
|
|
73
|
+
}) => html`
|
|
74
|
+
<sp-action-button id="trigger">Open the overlay</sp-action-button>
|
|
75
|
+
<sp-overlay
|
|
76
|
+
?open=${open}
|
|
77
|
+
trigger="trigger@${interaction}"
|
|
78
|
+
type=${ifDefined(type)}
|
|
79
|
+
placement=${ifDefined(placement)}
|
|
80
|
+
>
|
|
81
|
+
${notAgain()}
|
|
82
|
+
</sp-overlay>
|
|
83
|
+
`;
|
|
84
|
+
page.args = {
|
|
85
|
+
interaction: "click",
|
|
86
|
+
placement: "right",
|
|
87
|
+
type: "page"
|
|
88
|
+
};
|
|
89
|
+
export const click = (args) => Template(args);
|
|
90
|
+
click.args = {
|
|
91
|
+
interaction: "click",
|
|
92
|
+
placement: "right",
|
|
93
|
+
type: "auto"
|
|
94
|
+
};
|
|
95
|
+
export const hover = (args) => Template(args);
|
|
96
|
+
hover.args = {
|
|
97
|
+
interaction: "hover",
|
|
98
|
+
placement: "right"
|
|
99
|
+
};
|
|
100
|
+
export const longpress = (args) => Template(args);
|
|
101
|
+
longpress.args = {
|
|
102
|
+
interaction: "longpress",
|
|
103
|
+
placement: "right",
|
|
104
|
+
type: "auto"
|
|
105
|
+
};
|
|
106
|
+
export const all = () => html`
|
|
107
|
+
<sp-action-button id="trigger" hold-affordance>
|
|
108
|
+
Open the overlay
|
|
109
|
+
</sp-action-button>
|
|
110
|
+
<sp-overlay trigger="trigger@click" type="auto" placement="right">
|
|
111
|
+
<sp-popover dialog>Click content</sp-popover>
|
|
112
|
+
</sp-overlay>
|
|
113
|
+
<sp-overlay trigger="trigger@hover">
|
|
114
|
+
<sp-tooltip>Hover content</sp-tooltip>
|
|
115
|
+
</sp-overlay>
|
|
116
|
+
<sp-overlay trigger="trigger@longpress" type="auto" placement="right">
|
|
117
|
+
<sp-popover dialog>Longpress content</sp-popover>
|
|
118
|
+
</sp-overlay>
|
|
119
|
+
`;
|
|
120
|
+
export const actionGroup = () => {
|
|
121
|
+
const popoverOffset = [6, -9];
|
|
122
|
+
return html`
|
|
123
|
+
<style>
|
|
124
|
+
sp-popover sp-action-group {
|
|
125
|
+
padding: var(--spectrum-actiongroup-vertical-spacing-regular);
|
|
126
|
+
}
|
|
127
|
+
sp-popover {
|
|
128
|
+
position: static;
|
|
129
|
+
}
|
|
130
|
+
</style>
|
|
131
|
+
<sp-popover open>
|
|
132
|
+
<sp-action-group vertical quiet emphasized selects="single">
|
|
133
|
+
<sp-action-button id="trigger-1" hold-affordance>
|
|
134
|
+
<sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
|
|
135
|
+
</sp-action-button>
|
|
136
|
+
<sp-action-button id="trigger-2" hold-affordance>
|
|
137
|
+
<sp-icon-polygon-select
|
|
138
|
+
slot="icon"
|
|
139
|
+
></sp-icon-polygon-select>
|
|
140
|
+
</sp-action-button>
|
|
141
|
+
<sp-action-button id="trigger-3" hold-affordance>
|
|
142
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
143
|
+
</sp-action-button>
|
|
144
|
+
</sp-action-group>
|
|
145
|
+
</sp-popover>
|
|
146
|
+
<sp-overlay trigger="trigger-1@hover">
|
|
147
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
148
|
+
</sp-overlay>
|
|
149
|
+
<sp-overlay
|
|
150
|
+
trigger="trigger-1@longpress"
|
|
151
|
+
type="auto"
|
|
152
|
+
placement="right-start"
|
|
153
|
+
.offset=${popoverOffset}
|
|
154
|
+
>
|
|
155
|
+
<sp-popover tip>
|
|
156
|
+
<sp-action-group vertical quiet>
|
|
157
|
+
<sp-action-button>
|
|
158
|
+
<sp-icon-anchor-select
|
|
159
|
+
slot="icon"
|
|
160
|
+
></sp-icon-anchor-select>
|
|
161
|
+
</sp-action-button>
|
|
162
|
+
<sp-action-button>
|
|
163
|
+
<sp-icon-polygon-select
|
|
164
|
+
slot="icon"
|
|
165
|
+
></sp-icon-polygon-select>
|
|
166
|
+
</sp-action-button>
|
|
167
|
+
<sp-action-button>
|
|
168
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
169
|
+
</sp-action-button>
|
|
170
|
+
</sp-action-group>
|
|
171
|
+
</sp-popover>
|
|
172
|
+
</sp-overlay>
|
|
173
|
+
<sp-overlay trigger="trigger-2@hover">
|
|
174
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
175
|
+
</sp-overlay>
|
|
176
|
+
<sp-overlay
|
|
177
|
+
trigger="trigger-2@longpress"
|
|
178
|
+
type="auto"
|
|
179
|
+
placement="right-start"
|
|
180
|
+
.offset=${popoverOffset}
|
|
181
|
+
>
|
|
182
|
+
<sp-popover tip>
|
|
183
|
+
<sp-action-group vertical quiet>
|
|
184
|
+
<sp-action-button>
|
|
185
|
+
<sp-icon-anchor-select
|
|
186
|
+
slot="icon"
|
|
187
|
+
></sp-icon-anchor-select>
|
|
188
|
+
</sp-action-button>
|
|
189
|
+
<sp-action-button>
|
|
190
|
+
<sp-icon-polygon-select
|
|
191
|
+
slot="icon"
|
|
192
|
+
></sp-icon-polygon-select>
|
|
193
|
+
</sp-action-button>
|
|
194
|
+
<sp-action-button>
|
|
195
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
196
|
+
</sp-action-button>
|
|
197
|
+
</sp-action-group>
|
|
198
|
+
</sp-popover>
|
|
199
|
+
</sp-overlay>
|
|
200
|
+
<sp-overlay trigger="trigger-3@hover">
|
|
201
|
+
<sp-tooltip>Hover</sp-tooltip>
|
|
202
|
+
</sp-overlay>
|
|
203
|
+
<sp-overlay
|
|
204
|
+
trigger="trigger-3@longpress"
|
|
205
|
+
type="auto"
|
|
206
|
+
placement="right-start"
|
|
207
|
+
.offset=${popoverOffset}
|
|
208
|
+
>
|
|
209
|
+
<sp-popover tip>
|
|
210
|
+
<sp-action-group vertical quiet>
|
|
211
|
+
<sp-action-button>
|
|
212
|
+
<sp-icon-anchor-select
|
|
213
|
+
slot="icon"
|
|
214
|
+
></sp-icon-anchor-select>
|
|
215
|
+
</sp-action-button>
|
|
216
|
+
<sp-action-button>
|
|
217
|
+
<sp-icon-polygon-select
|
|
218
|
+
slot="icon"
|
|
219
|
+
></sp-icon-polygon-select>
|
|
220
|
+
</sp-action-button>
|
|
221
|
+
<sp-action-button>
|
|
222
|
+
<sp-icon-rect-select slot="icon"></sp-icon-rect-select>
|
|
223
|
+
</sp-action-button>
|
|
224
|
+
</sp-action-group>
|
|
225
|
+
</sp-popover>
|
|
226
|
+
</sp-overlay>
|
|
227
|
+
`;
|
|
228
|
+
};
|
|
229
|
+
//# sourceMappingURL=overlay-element.stories.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["overlay-element.stories.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\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 { html, TemplateResult } from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport '@spectrum-web-components/overlay/sp-overlay.js';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport '@spectrum-web-components/action-group/sp-action-group.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-anchor-select.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-polygon-select.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-rect-select.js';\nimport { Placement } from '@floating-ui/dom';\nimport { OverlayTypes } from '../src/OverlayBase.js';\nimport { notAgain } from '../../dialog/stories/dialog-base.stories.js';\n\nexport default {\n title: 'Overlay Element',\n component: 'sp-overlay',\n args: {\n open: true,\n },\n argTypes: {\n open: {\n name: 'open',\n type: { name: 'boolean', required: false },\n description: 'Whether the second accordion item is open.',\n table: {\n type: { summary: 'boolean' },\n defaultValue: { summary: false },\n },\n control: {\n type: 'boolean',\n },\n },\n },\n};\n\ntype Properties = {\n interaction: 'click' | 'hover' | 'longpress';\n open?: boolean;\n placement?: Placement;\n type?: OverlayTypes;\n};\n\nconst Template = ({\n interaction,\n open,\n placement,\n type,\n}: Properties): TemplateResult => html`\n <sp-action-button id=\"trigger\">Open the overlay</sp-action-button>\n <sp-overlay\n ?open=${open}\n trigger=\"trigger@${interaction}\"\n type=${ifDefined(type)}\n placement=${ifDefined(placement)}\n >\n <sp-popover dialog tip>\n <p>\n Content goes here.\n ${type === 'modal' || type === 'page'\n ? html`\n Or, a link,\n <sp-link\n href=\"https://opensource.adobe.com/spectrum-web-components\"\n >\n Spectrum Web Components\n </sp-link>\n .\n `\n : ''}\n </p>\n </sp-popover>\n </sp-overlay>\n`;\n\nexport const modal = (args: Properties): TemplateResult => Template(args);\nmodal.args = {\n interaction: 'click',\n placement: 'right',\n type: 'modal',\n};\n\nexport const page = ({\n interaction,\n open,\n placement,\n type,\n}: Properties): TemplateResult => html`\n <sp-action-button id=\"trigger\">Open the overlay</sp-action-button>\n <sp-overlay\n ?open=${open}\n trigger=\"trigger@${interaction}\"\n type=${ifDefined(type)}\n placement=${ifDefined(placement)}\n >\n ${notAgain()}\n </sp-overlay>\n`;\npage.args = {\n interaction: 'click',\n placement: 'right',\n type: 'page',\n};\n\nexport const click = (args: Properties): TemplateResult => Template(args);\nclick.args = {\n interaction: 'click',\n placement: 'right',\n type: 'auto',\n};\n\nexport const hover = (args: Properties): TemplateResult => Template(args);\nhover.args = {\n interaction: 'hover',\n placement: 'right',\n};\n\nexport const longpress = (args: Properties): TemplateResult => Template(args);\nlongpress.args = {\n interaction: 'longpress',\n placement: 'right',\n type: 'auto',\n};\n\nexport const all = (): TemplateResult => html`\n <sp-action-button id=\"trigger\" hold-affordance>\n Open the overlay\n </sp-action-button>\n <sp-overlay trigger=\"trigger@click\" type=\"auto\" placement=\"right\">\n <sp-popover dialog>Click content</sp-popover>\n </sp-overlay>\n <sp-overlay trigger=\"trigger@hover\">\n <sp-tooltip>Hover content</sp-tooltip>\n </sp-overlay>\n <sp-overlay trigger=\"trigger@longpress\" type=\"auto\" placement=\"right\">\n <sp-popover dialog>Longpress content</sp-popover>\n </sp-overlay>\n`;\n\nexport const actionGroup = (): TemplateResult => {\n const popoverOffset = [6, -9] as [number, number];\n return html`\n <style>\n sp-popover sp-action-group {\n padding: var(--spectrum-actiongroup-vertical-spacing-regular);\n }\n sp-popover {\n position: static;\n }\n </style>\n <sp-popover open>\n <sp-action-group vertical quiet emphasized selects=\"single\">\n <sp-action-button id=\"trigger-1\" hold-affordance>\n <sp-icon-anchor-select slot=\"icon\"></sp-icon-anchor-select>\n </sp-action-button>\n <sp-action-button id=\"trigger-2\" hold-affordance>\n <sp-icon-polygon-select\n slot=\"icon\"\n ></sp-icon-polygon-select>\n </sp-action-button>\n <sp-action-button id=\"trigger-3\" hold-affordance>\n <sp-icon-rect-select slot=\"icon\"></sp-icon-rect-select>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n <sp-overlay trigger=\"trigger-1@hover\">\n <sp-tooltip>Hover</sp-tooltip>\n </sp-overlay>\n <sp-overlay\n trigger=\"trigger-1@longpress\"\n type=\"auto\"\n placement=\"right-start\"\n .offset=${popoverOffset}\n >\n <sp-popover tip>\n <sp-action-group vertical quiet>\n <sp-action-button>\n <sp-icon-anchor-select\n slot=\"icon\"\n ></sp-icon-anchor-select>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-polygon-select\n slot=\"icon\"\n ></sp-icon-polygon-select>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-rect-select slot=\"icon\"></sp-icon-rect-select>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </sp-overlay>\n <sp-overlay trigger=\"trigger-2@hover\">\n <sp-tooltip>Hover</sp-tooltip>\n </sp-overlay>\n <sp-overlay\n trigger=\"trigger-2@longpress\"\n type=\"auto\"\n placement=\"right-start\"\n .offset=${popoverOffset}\n >\n <sp-popover tip>\n <sp-action-group vertical quiet>\n <sp-action-button>\n <sp-icon-anchor-select\n slot=\"icon\"\n ></sp-icon-anchor-select>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-polygon-select\n slot=\"icon\"\n ></sp-icon-polygon-select>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-rect-select slot=\"icon\"></sp-icon-rect-select>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </sp-overlay>\n <sp-overlay trigger=\"trigger-3@hover\">\n <sp-tooltip>Hover</sp-tooltip>\n </sp-overlay>\n <sp-overlay\n trigger=\"trigger-3@longpress\"\n type=\"auto\"\n placement=\"right-start\"\n .offset=${popoverOffset}\n >\n <sp-popover tip>\n <sp-action-group vertical quiet>\n <sp-action-button>\n <sp-icon-anchor-select\n slot=\"icon\"\n ></sp-icon-anchor-select>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-polygon-select\n slot=\"icon\"\n ></sp-icon-polygon-select>\n </sp-action-button>\n <sp-action-button>\n <sp-icon-rect-select slot=\"icon\"></sp-icon-rect-select>\n </sp-action-button>\n </sp-action-group>\n </sp-popover>\n </sp-overlay>\n `;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -19,9 +19,6 @@ import {
|
|
|
19
19
|
property,
|
|
20
20
|
query
|
|
21
21
|
} from "@spectrum-web-components/base/src/decorators.js";
|
|
22
|
-
import {
|
|
23
|
-
Overlay
|
|
24
|
-
} from "@spectrum-web-components/overlay";
|
|
25
22
|
import "@spectrum-web-components/button/sp-button.js";
|
|
26
23
|
import "@spectrum-web-components/popover/sp-popover.js";
|
|
27
24
|
import "@spectrum-web-components/radio/sp-radio.js";
|
|
@@ -132,7 +129,6 @@ class OverlayDrag extends LitElement {
|
|
|
132
129
|
};
|
|
133
130
|
this.left = Math.min(Math.max(newPosition.x, 0), max.x);
|
|
134
131
|
this.top = Math.min(Math.max(newPosition.y, 0), max.y);
|
|
135
|
-
Overlay.update();
|
|
136
132
|
};
|
|
137
133
|
const onMouseUp = () => {
|
|
138
134
|
document.removeEventListener("mousemove", onMouseMove);
|
|
@@ -257,7 +253,6 @@ class RecursivePopover extends LitElement {
|
|
|
257
253
|
slot="click-content"
|
|
258
254
|
direction="${this.placement}"
|
|
259
255
|
tip
|
|
260
|
-
open
|
|
261
256
|
>
|
|
262
257
|
${this.depth < MAX_DEPTH ? html`
|
|
263
258
|
<recursive-popover
|
|
@@ -286,7 +281,7 @@ customElements.define("recursive-popover", RecursivePopover);
|
|
|
286
281
|
export class PopoverContent extends LitElement {
|
|
287
282
|
render() {
|
|
288
283
|
return html`
|
|
289
|
-
<overlay-trigger>
|
|
284
|
+
<overlay-trigger type="modal" placement="bottom">
|
|
290
285
|
<sp-button slot="trigger">Open me</sp-button>
|
|
291
286
|
<sp-popover slot="click-content" direction="bottom" dialog>
|
|
292
287
|
<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 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;
|
|
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 { OverlayTrigger, Placement } 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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",
|
|
6
6
|
"names": ["event"]
|
|
7
7
|
}
|