@spectrum-web-components/overlay 0.34.0 → 0.34.1-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +227 -152
  2. package/custom-elements.json +1401 -541
  3. package/package.json +48 -22
  4. package/sp-overlay.d.ts +6 -0
  5. package/sp-overlay.dev.js +5 -0
  6. package/{active-overlay.dev.js.map → sp-overlay.dev.js.map} +3 -3
  7. package/sp-overlay.js +2 -0
  8. package/{active-overlay.js.map → sp-overlay.js.map} +4 -4
  9. package/src/Overlay.d.ts +29 -0
  10. package/src/Overlay.dev.js +91 -0
  11. package/src/Overlay.dev.js.map +7 -0
  12. package/src/Overlay.js +2 -0
  13. package/src/Overlay.js.map +7 -0
  14. package/src/OverlayBase.d.ts +124 -0
  15. package/src/OverlayBase.dev.js +744 -0
  16. package/src/OverlayBase.dev.js.map +7 -0
  17. package/src/OverlayBase.js +31 -0
  18. package/src/OverlayBase.js.map +7 -0
  19. package/src/OverlayDialog.d.ts +8 -0
  20. package/src/OverlayDialog.dev.js +160 -0
  21. package/src/OverlayDialog.dev.js.map +7 -0
  22. package/src/OverlayDialog.js +2 -0
  23. package/src/OverlayDialog.js.map +7 -0
  24. package/src/OverlayNoPopover.d.ts +8 -0
  25. package/src/OverlayNoPopover.dev.js +149 -0
  26. package/src/OverlayNoPopover.dev.js.map +7 -0
  27. package/src/OverlayNoPopover.js +2 -0
  28. package/src/OverlayNoPopover.js.map +7 -0
  29. package/src/OverlayPopover.d.ts +8 -0
  30. package/src/OverlayPopover.dev.js +199 -0
  31. package/src/OverlayPopover.dev.js.map +7 -0
  32. package/src/OverlayPopover.js +2 -0
  33. package/src/OverlayPopover.js.map +7 -0
  34. package/src/OverlayStack.d.ts +29 -0
  35. package/src/OverlayStack.dev.js +126 -0
  36. package/src/OverlayStack.dev.js.map +7 -0
  37. package/src/OverlayStack.js +2 -0
  38. package/src/OverlayStack.js.map +7 -0
  39. package/src/OverlayTrigger.d.ts +23 -31
  40. package/src/OverlayTrigger.dev.js +135 -245
  41. package/src/OverlayTrigger.dev.js.map +3 -3
  42. package/src/OverlayTrigger.js +52 -22
  43. package/src/OverlayTrigger.js.map +3 -3
  44. package/src/PlacementController.d.ts +36 -0
  45. package/src/PlacementController.dev.js +191 -0
  46. package/src/PlacementController.dev.js.map +7 -0
  47. package/src/PlacementController.js +2 -0
  48. package/src/PlacementController.js.map +7 -0
  49. package/src/VirtualTrigger.dev.js +0 -2
  50. package/src/VirtualTrigger.dev.js.map +2 -2
  51. package/src/VirtualTrigger.js +1 -1
  52. package/src/VirtualTrigger.js.map +3 -3
  53. package/src/fullSizePlugin.d.ts +12 -0
  54. package/src/fullSizePlugin.dev.js +39 -0
  55. package/src/fullSizePlugin.dev.js.map +7 -0
  56. package/src/fullSizePlugin.js +2 -0
  57. package/src/fullSizePlugin.js.map +7 -0
  58. package/src/index.d.ts +2 -3
  59. package/src/index.dev.js +2 -3
  60. package/src/index.dev.js.map +2 -2
  61. package/src/index.js +1 -1
  62. package/src/index.js.map +2 -2
  63. package/src/loader.d.ts +2 -2
  64. package/src/loader.dev.js +2 -19
  65. package/src/loader.dev.js.map +2 -2
  66. package/src/loader.js +1 -1
  67. package/src/loader.js.map +3 -3
  68. package/src/overlay-base.css.dev.js +9 -0
  69. package/src/overlay-base.css.dev.js.map +7 -0
  70. package/src/overlay-base.css.js +6 -0
  71. package/src/overlay-base.css.js.map +7 -0
  72. package/src/overlay-trigger.css.dev.js +1 -1
  73. package/src/overlay-trigger.css.dev.js.map +1 -1
  74. package/src/overlay-trigger.css.js +1 -1
  75. package/src/overlay-trigger.css.js.map +1 -1
  76. package/src/overlay-types.d.ts +7 -5
  77. package/src/overlay-types.dev.js +1 -0
  78. package/src/overlay-types.dev.js.map +3 -3
  79. package/src/overlay-types.js +1 -1
  80. package/src/overlay-types.js.map +3 -3
  81. package/src/topLayerOverTransforms.d.ts +23 -0
  82. package/src/topLayerOverTransforms.dev.js +170 -0
  83. package/src/topLayerOverTransforms.dev.js.map +7 -0
  84. package/src/topLayerOverTransforms.js +2 -0
  85. package/src/topLayerOverTransforms.js.map +7 -0
  86. package/stories/overlay-element.stories.js +247 -0
  87. package/stories/overlay-element.stories.js.map +7 -0
  88. package/stories/overlay-story-components.js +9 -8
  89. package/stories/overlay-story-components.js.map +2 -2
  90. package/stories/overlay.stories.js +780 -683
  91. package/stories/overlay.stories.js.map +2 -2
  92. package/sync/overlay-trigger.d.ts +4 -0
  93. package/sync/overlay-trigger.dev.js +1 -4
  94. package/sync/overlay-trigger.dev.js.map +2 -2
  95. package/sync/overlay-trigger.js +1 -1
  96. package/sync/overlay-trigger.js.map +3 -3
  97. package/test/benchmark/basic-test.js +1 -1
  98. package/test/benchmark/basic-test.js.map +1 -1
  99. package/test/index.js +407 -376
  100. package/test/index.js.map +3 -3
  101. package/test/overlay-element.test-vrt.js +5 -0
  102. package/test/overlay-element.test-vrt.js.map +7 -0
  103. package/test/overlay-element.test.js +682 -0
  104. package/test/overlay-element.test.js.map +7 -0
  105. package/test/overlay-lifecycle.test.js +34 -106
  106. package/test/overlay-lifecycle.test.js.map +2 -2
  107. package/test/overlay-trigger-click.test.js +11 -5
  108. package/test/overlay-trigger-click.test.js.map +2 -2
  109. package/test/overlay-trigger-extended.test.js +1 -6
  110. package/test/overlay-trigger-extended.test.js.map +2 -2
  111. package/test/overlay-trigger-hover-click.test.js +23 -23
  112. package/test/overlay-trigger-hover-click.test.js.map +2 -2
  113. package/test/overlay-trigger-hover.test.js +40 -34
  114. package/test/overlay-trigger-hover.test.js.map +2 -2
  115. package/test/overlay-trigger-longpress.test.js +98 -80
  116. package/test/overlay-trigger-longpress.test.js.map +2 -2
  117. package/test/overlay-trigger-sync.test.js +1 -1
  118. package/test/overlay-trigger-sync.test.js.map +2 -2
  119. package/test/overlay-trigger.test.js +1 -1
  120. package/test/overlay-trigger.test.js.map +2 -2
  121. package/test/overlay-update.test.js +4 -4
  122. package/test/overlay-update.test.js.map +2 -2
  123. package/test/{overlay.test.js → overlay-v1.test.js} +267 -249
  124. package/test/overlay-v1.test.js.map +7 -0
  125. package/test/overlay-v2.test.js +720 -0
  126. package/test/overlay-v2.test.js.map +7 -0
  127. package/active-overlay.d.ts +0 -6
  128. package/active-overlay.dev.js +0 -5
  129. package/active-overlay.js +0 -2
  130. package/src/ActiveOverlay.d.ts +0 -84
  131. package/src/ActiveOverlay.dev.js +0 -517
  132. package/src/ActiveOverlay.dev.js.map +0 -7
  133. package/src/ActiveOverlay.js +0 -16
  134. package/src/ActiveOverlay.js.map +0 -7
  135. package/src/active-overlay.css.dev.js +0 -13
  136. package/src/active-overlay.css.dev.js.map +0 -7
  137. package/src/active-overlay.css.js +0 -10
  138. package/src/active-overlay.css.js.map +0 -7
  139. package/src/overlay-stack.d.ts +0 -50
  140. package/src/overlay-stack.dev.js +0 -515
  141. package/src/overlay-stack.dev.js.map +0 -7
  142. package/src/overlay-stack.js +0 -34
  143. package/src/overlay-stack.js.map +0 -7
  144. package/src/overlay-utils.d.ts +0 -3
  145. package/src/overlay-utils.dev.js +0 -31
  146. package/src/overlay-utils.dev.js.map +0 -7
  147. package/src/overlay-utils.js +0 -2
  148. package/src/overlay-utils.js.map +0 -7
  149. package/src/overlay.d.ts +0 -59
  150. package/src/overlay.dev.js +0 -127
  151. package/src/overlay.dev.js.map +0 -7
  152. package/src/overlay.js +0 -2
  153. package/src/overlay.js.map +0 -7
  154. package/test/overlay.test.js.map +0 -7
  155. /package/src/{active-overlay.css.d.ts → overlay-base.css.d.ts} +0 -0
@@ -0,0 +1,170 @@
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(":popover-open");
18
+ } catch (e) {
19
+ }
20
+ try {
21
+ onTopLayer = onTopLayer || floating.matches(":open");
22
+ } catch (e) {
23
+ }
24
+ try {
25
+ onTopLayer = onTopLayer || floating.matches(":modal");
26
+ } catch (e) {
27
+ }
28
+ topLayerIsFloating = onTopLayer;
29
+ if (!onTopLayer) {
30
+ const dialogAncestorQueryEvent = new Event(
31
+ "floating-ui-dialog-test",
32
+ { composed: true, bubbles: true }
33
+ );
34
+ floating.addEventListener(
35
+ "floating-ui-dialog-test",
36
+ (event) => {
37
+ event.composedPath().forEach(
38
+ (el) => {
39
+ if (el === floating || el.localName !== "dialog")
40
+ return;
41
+ try {
42
+ onTopLayer = onTopLayer || el.matches(":modal");
43
+ if (onTopLayer) {
44
+ }
45
+ } catch (e) {
46
+ }
47
+ }
48
+ );
49
+ },
50
+ { once: true }
51
+ );
52
+ floating.dispatchEvent(dialogAncestorQueryEvent);
53
+ }
54
+ let overTransforms = false;
55
+ const containingBlock = getContainingBlock(reference);
56
+ if (containingBlock !== null && !isWindow(containingBlock)) {
57
+ overTransforms = true;
58
+ }
59
+ if (onTopLayer && overTransforms) {
60
+ const rect = containingBlock.getBoundingClientRect();
61
+ diffCoords.x = rect.x;
62
+ diffCoords.y = rect.y;
63
+ }
64
+ if (onTopLayer && topLayerIsFloating) {
65
+ return {
66
+ x: x + diffCoords.x,
67
+ y: y + diffCoords.y,
68
+ data: diffCoords
69
+ };
70
+ }
71
+ if (onTopLayer) {
72
+ return {
73
+ x,
74
+ y,
75
+ data: diffCoords
76
+ };
77
+ }
78
+ return {
79
+ x: x - diffCoords.x,
80
+ y: y - diffCoords.y,
81
+ data: diffCoords
82
+ };
83
+ }
84
+ });
85
+ function getContainingBlock(element) {
86
+ let currentNode = getParentNode(element);
87
+ if (isShadowRoot(currentNode)) {
88
+ currentNode = currentNode.host;
89
+ }
90
+ while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
91
+ if (isContainingBlock(currentNode)) {
92
+ return currentNode;
93
+ } else {
94
+ const parent = currentNode.assignedSlot ? currentNode.assignedSlot : currentNode.parentNode;
95
+ currentNode = isShadowRoot(parent) ? parent.host : parent;
96
+ }
97
+ }
98
+ return null;
99
+ }
100
+ export function isLastTraversableNode(node) {
101
+ return ["html", "body", "#document"].includes(getNodeName(node));
102
+ }
103
+ function isContainingBlock(element) {
104
+ const safari = isSafari();
105
+ const css = getComputedStyle(element);
106
+ return css.transform !== "none" || css.perspective !== "none" || !safari && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !safari && (css.filter ? css.filter !== "none" : false) || ["transform", "perspective", "filter"].some(
107
+ (value) => (css.willChange || "").includes(value)
108
+ ) || ["paint", "layout", "strict", "content"].some(
109
+ (value) => (css.contain || "").includes(value)
110
+ );
111
+ }
112
+ export function isSafari() {
113
+ if (typeof CSS === "undefined" || !CSS.supports)
114
+ return false;
115
+ return CSS.supports("-webkit-backdrop-filter", "none");
116
+ }
117
+ export function getUAString() {
118
+ const uaData = navigator.userAgentData;
119
+ if (uaData == null ? void 0 : uaData.brands) {
120
+ return uaData.brands.map((item) => `${item.brand}/${item.version}`).join(" ");
121
+ }
122
+ return navigator.userAgent;
123
+ }
124
+ export function getParentNode(node) {
125
+ if (getNodeName(node) === "html") {
126
+ return node;
127
+ }
128
+ return (
129
+ // this is a quicker (but less type safe) way to save quite some bytes from the bundle
130
+ // @ts-ignore
131
+ node.assignedSlot || // step into the shadow DOM of the parent of a slotted node
132
+ node.parentNode || // DOM Element detected
133
+ (isShadowRoot(node) ? node.host : null) || // ShadowRoot detected
134
+ getDocumentElement(node)
135
+ );
136
+ }
137
+ export function getNodeName(node) {
138
+ return isWindow(node) ? "" : node ? (node.nodeName || "").toLowerCase() : "";
139
+ }
140
+ export function getDocumentElement(node) {
141
+ return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;
142
+ }
143
+ export function isNode(value) {
144
+ return value instanceof getWindow(value).Node;
145
+ }
146
+ export function isWindow(value) {
147
+ return value && value.document && value.location && value.alert && value.setInterval;
148
+ }
149
+ export function getWindow(node) {
150
+ if (node == null) {
151
+ return window;
152
+ }
153
+ if (!isWindow(node)) {
154
+ const ownerDocument = node.ownerDocument;
155
+ return ownerDocument ? ownerDocument.defaultView || window : window;
156
+ }
157
+ return node;
158
+ }
159
+ export function isShadowRoot(node) {
160
+ if (typeof ShadowRoot === "undefined") {
161
+ return false;
162
+ }
163
+ const OwnElement = getWindow(node).ShadowRoot;
164
+ const testNode = node;
165
+ return node instanceof OwnElement || testNode instanceof ShadowRoot;
166
+ }
167
+ export function isHTMLElement(value) {
168
+ return value instanceof getWindow(value).HTMLElement;
169
+ }
170
+ //# 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(':popover-open');\n // eslint-disable-next-line no-empty\n } catch (e) {}\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 const safari = isSafari();\n const css = getComputedStyle(element) as CSSStyleDeclaration & {\n backdropFilter: string;\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return (\n css.transform !== 'none' ||\n css.perspective !== 'none' ||\n (!safari &&\n (css.backdropFilter ? css.backdropFilter !== 'none' : false)) ||\n (!safari && (css.filter ? css.filter !== 'none' : false)) ||\n ['transform', 'perspective', 'filter'].some((value) =>\n (css.willChange || '').includes(value)\n ) ||\n ['paint', 'layout', 'strict', 'content'].some((value) =>\n (css.contain || '').includes(value)\n )\n );\n}\n\nexport function isSafari(): boolean {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\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:t,y:n,elements:{reference:s,floating:i}}=e;let o=!1,u=!1;const r={x:0,y:0};try{o=o||i.matches(":popover-open")}catch(a){}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(g){}})},{once:!0}),i.dispatchEvent(a)}let d=!1;const c=m(s);if(c!==null&&!isWindow(c)&&(d=!0),o&&d){const a=c.getBoundingClientRect();r.x=a.x,r.y=a.y}return o&&u?{x:t+r.x,y:n+r.y,data:r}:o?{x:t,y:n,data:r}:{x:t-r.x,y:n-r.y,data:r}}});function m(e){let t=getParentNode(e);for(isShadowRoot(t)&&(t=t.host);isHTMLElement(t)&&!isLastTraversableNode(t);){if(p(t))return t;{const n=t.assignedSlot?t.assignedSlot:t.parentNode;t=isShadowRoot(n)?n.host:n}}return null}export function isLastTraversableNode(e){return["html","body","#document"].includes(getNodeName(e))}function p(e){const t=isSafari(),n=getComputedStyle(e);return n.transform!=="none"||n.perspective!=="none"||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(s=>(n.willChange||"").includes(s))||["paint","layout","strict","content"].some(s=>(n.contain||"").includes(s))}export function isSafari(){return typeof CSS=="undefined"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}export function getUAString(){const e=navigator.userAgentData;return e!=null&&e.brands?e.brands.map(t=>`${t.brand}/${t.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 t=e.ownerDocument;return t&&t.defaultView||window}return e}export function isShadowRoot(e){if(typeof ShadowRoot=="undefined")return!1;const t=getWindow(e).ShadowRoot,n=e;return e instanceof t||n 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(':popover-open');\n // eslint-disable-next-line no-empty\n } catch (e) {}\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 const safari = isSafari();\n const css = getComputedStyle(element) as CSSStyleDeclaration & {\n backdropFilter: string;\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return (\n css.transform !== 'none' ||\n css.perspective !== 'none' ||\n (!safari &&\n (css.backdropFilter ? css.backdropFilter !== 'none' : false)) ||\n (!safari && (css.filter ? css.filter !== 'none' : false)) ||\n ['transform', 'perspective', 'filter'].some((value) =>\n (css.willChange || '').includes(value)\n ) ||\n ['paint', 'layout', 'strict', 'content'].some((value) =>\n (css.contain || '').includes(value)\n )\n );\n}\n\nexport function isSafari(): boolean {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\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", "safari", "css", "value", "uaData", "item", "ownerDocument", "OwnElement", "testNode"]
7
+ }
@@ -0,0 +1,247 @@
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
+ delayed: false
18
+ },
19
+ argTypes: {
20
+ open: {
21
+ name: "open",
22
+ type: { name: "boolean", required: false },
23
+ description: "Whether the second accordion item is open.",
24
+ table: {
25
+ type: { summary: "boolean" },
26
+ defaultValue: { summary: false }
27
+ },
28
+ control: {
29
+ type: "boolean"
30
+ }
31
+ },
32
+ delayed: {
33
+ name: "delayed",
34
+ type: { name: "boolean", required: false },
35
+ description: "Whether the tooltips are delayed.",
36
+ table: {
37
+ type: { summary: "boolean" },
38
+ defaultValue: { summary: false }
39
+ },
40
+ control: {
41
+ type: "boolean"
42
+ }
43
+ }
44
+ }
45
+ };
46
+ const Template = ({
47
+ interaction,
48
+ open,
49
+ placement,
50
+ type
51
+ }) => html`
52
+ <sp-action-button id="trigger">Open the overlay</sp-action-button>
53
+ <sp-overlay
54
+ ?open=${open}
55
+ trigger="trigger@${interaction}"
56
+ type=${ifDefined(type)}
57
+ placement=${ifDefined(placement)}
58
+ offset="-10"
59
+ >
60
+ <sp-popover dialog>
61
+ <p>
62
+ Content goes here.
63
+ ${type === "modal" || type === "page" ? html`
64
+ Or, a link,
65
+ <sp-link
66
+ href="https://opensource.adobe.com/spectrum-web-components"
67
+ >
68
+ Spectrum Web Components
69
+ </sp-link>
70
+ .
71
+ ` : ""}
72
+ </p>
73
+ </sp-popover>
74
+ </sp-overlay>
75
+ `;
76
+ export const modal = (args) => Template(args);
77
+ modal.args = {
78
+ interaction: "click",
79
+ placement: "right",
80
+ type: "modal"
81
+ };
82
+ export const page = ({
83
+ interaction,
84
+ open,
85
+ placement,
86
+ type
87
+ }) => html`
88
+ <sp-action-button id="trigger">Open the overlay</sp-action-button>
89
+ <sp-overlay
90
+ ?open=${open}
91
+ trigger="trigger@${interaction}"
92
+ type=${ifDefined(type)}
93
+ placement=${ifDefined(placement)}
94
+ >
95
+ ${notAgain()}
96
+ </sp-overlay>
97
+ `;
98
+ page.args = {
99
+ interaction: "click",
100
+ placement: "right",
101
+ type: "page"
102
+ };
103
+ export const click = (args) => Template(args);
104
+ click.args = {
105
+ interaction: "click",
106
+ placement: "right",
107
+ type: "auto"
108
+ };
109
+ export const hover = (args) => Template(args);
110
+ hover.args = {
111
+ interaction: "hover",
112
+ placement: "right"
113
+ };
114
+ export const longpress = (args) => Template(args);
115
+ longpress.args = {
116
+ interaction: "longpress",
117
+ placement: "right",
118
+ type: "auto"
119
+ };
120
+ export const all = ({
121
+ delayed
122
+ }) => html`
123
+ <sp-action-button id="trigger" hold-affordance>
124
+ Open the overlay
125
+ </sp-action-button>
126
+ <sp-overlay trigger="trigger@click" type="auto" placement="right">
127
+ <sp-popover dialog>Click content</sp-popover>
128
+ </sp-overlay>
129
+ <sp-overlay ?delayed=${delayed} trigger="trigger@hover">
130
+ <sp-tooltip>Hover content</sp-tooltip>
131
+ </sp-overlay>
132
+ <sp-overlay trigger="trigger@longpress" type="auto" placement="right">
133
+ <sp-popover dialog>Longpress content</sp-popover>
134
+ </sp-overlay>
135
+ `;
136
+ export const actionGroup = ({
137
+ delayed
138
+ }) => {
139
+ const popoverOffset = [6, -9];
140
+ return html`
141
+ <style>
142
+ sp-popover sp-action-group {
143
+ padding: var(--spectrum-actiongroup-vertical-spacing-regular);
144
+ }
145
+ sp-popover {
146
+ position: static;
147
+ }
148
+ </style>
149
+ <sp-popover open>
150
+ <sp-action-group vertical quiet emphasized selects="single">
151
+ <sp-action-button id="trigger-1" hold-affordance>
152
+ <sp-icon-anchor-select slot="icon"></sp-icon-anchor-select>
153
+ </sp-action-button>
154
+ <sp-action-button id="trigger-2" hold-affordance>
155
+ <sp-icon-polygon-select
156
+ slot="icon"
157
+ ></sp-icon-polygon-select>
158
+ </sp-action-button>
159
+ <sp-action-button id="trigger-3" hold-affordance>
160
+ <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
161
+ </sp-action-button>
162
+ </sp-action-group>
163
+ </sp-popover>
164
+ <sp-overlay ?delayed=${delayed} trigger="trigger-1@hover">
165
+ <sp-tooltip>Hover</sp-tooltip>
166
+ </sp-overlay>
167
+ <sp-overlay
168
+ trigger="trigger-1@longpress"
169
+ type="auto"
170
+ placement="right-start"
171
+ .offset=${popoverOffset}
172
+ >
173
+ <sp-popover tip>
174
+ <sp-action-group vertical quiet>
175
+ <sp-action-button>
176
+ <sp-icon-anchor-select
177
+ slot="icon"
178
+ ></sp-icon-anchor-select>
179
+ </sp-action-button>
180
+ <sp-action-button>
181
+ <sp-icon-polygon-select
182
+ slot="icon"
183
+ ></sp-icon-polygon-select>
184
+ </sp-action-button>
185
+ <sp-action-button>
186
+ <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
187
+ </sp-action-button>
188
+ </sp-action-group>
189
+ </sp-popover>
190
+ </sp-overlay>
191
+ <sp-overlay ?delayed=${delayed} trigger="trigger-2@hover">
192
+ <sp-tooltip>Hover</sp-tooltip>
193
+ </sp-overlay>
194
+ <sp-overlay
195
+ trigger="trigger-2@longpress"
196
+ type="auto"
197
+ placement="right-start"
198
+ .offset=${popoverOffset}
199
+ >
200
+ <sp-popover tip>
201
+ <sp-action-group vertical quiet>
202
+ <sp-action-button>
203
+ <sp-icon-anchor-select
204
+ slot="icon"
205
+ ></sp-icon-anchor-select>
206
+ </sp-action-button>
207
+ <sp-action-button>
208
+ <sp-icon-polygon-select
209
+ slot="icon"
210
+ ></sp-icon-polygon-select>
211
+ </sp-action-button>
212
+ <sp-action-button>
213
+ <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
214
+ </sp-action-button>
215
+ </sp-action-group>
216
+ </sp-popover>
217
+ </sp-overlay>
218
+ <sp-overlay ?delayed=${delayed} trigger="trigger-3@hover">
219
+ <sp-tooltip>Hover</sp-tooltip>
220
+ </sp-overlay>
221
+ <sp-overlay
222
+ trigger="trigger-3@longpress"
223
+ type="auto"
224
+ placement="right-start"
225
+ .offset=${popoverOffset}
226
+ >
227
+ <sp-popover tip>
228
+ <sp-action-group vertical quiet>
229
+ <sp-action-button>
230
+ <sp-icon-anchor-select
231
+ slot="icon"
232
+ ></sp-icon-anchor-select>
233
+ </sp-action-button>
234
+ <sp-action-button>
235
+ <sp-icon-polygon-select
236
+ slot="icon"
237
+ ></sp-icon-polygon-select>
238
+ </sp-action-button>
239
+ <sp-action-button>
240
+ <sp-icon-rect-select slot="icon"></sp-icon-rect-select>
241
+ </sp-action-button>
242
+ </sp-action-group>
243
+ </sp-popover>
244
+ </sp-overlay>
245
+ `;
246
+ };
247
+ //# 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/overlay-types.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 delayed: false,\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 delayed: {\n name: 'delayed',\n type: { name: 'boolean', required: false },\n description: 'Whether the tooltips are delayed.',\n table: {\n type: { summary: 'boolean' },\n defaultValue: { summary: false },\n },\n control: {\n type: 'boolean',\n },\n },\n },\n};\n\ntype Properties = {\n delayed: boolean;\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 offset=\"-10\"\n >\n <sp-popover dialog>\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 = ({\n delayed,\n}: Properties): 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 ?delayed=${delayed} 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 = ({\n delayed\n}: Properties): 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 ?delayed=${delayed} 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 ?delayed=${delayed} 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 ?delayed=${delayed} 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
+ }
@@ -99,7 +99,7 @@ class OverlayDrag extends LitElement {
99
99
  if (!this.targetElement)
100
100
  return;
101
101
  this.targetElement.addEventListener(
102
- "mousedown",
102
+ "pointerdown",
103
103
  (event2) => this.onMouseDown(event2)
104
104
  );
105
105
  this.resetTargetPosition();
@@ -109,6 +109,7 @@ class OverlayDrag extends LitElement {
109
109
  const parent = target.parentElement;
110
110
  if (!parent)
111
111
  return;
112
+ target.setPointerCapture(event.pointerId);
112
113
  const max = {
113
114
  x: parent.offsetWidth - target.offsetWidth,
114
115
  y: parent.offsetHeight - target.offsetHeight
@@ -134,12 +135,13 @@ class OverlayDrag extends LitElement {
134
135
  this.top = Math.min(Math.max(newPosition.y, 0), max.y);
135
136
  Overlay.update();
136
137
  };
137
- const onMouseUp = () => {
138
- document.removeEventListener("mousemove", onMouseMove);
139
- document.removeEventListener("mouseup", onMouseUp);
138
+ const onMouseUp = (event2) => {
139
+ target.setPointerCapture(event2.pointerId);
140
+ document.removeEventListener("pointermove", onMouseMove);
141
+ document.removeEventListener("pointerup", onMouseUp);
140
142
  };
141
- document.addEventListener("mousemove", onMouseMove);
142
- document.addEventListener("mouseup", onMouseUp);
143
+ document.addEventListener("pointermove", onMouseMove);
144
+ document.addEventListener("pointerup", onMouseUp);
143
145
  }
144
146
  resetTargetPosition() {
145
147
  if (!this.targetElement)
@@ -256,7 +258,6 @@ class RecursivePopover extends LitElement {
256
258
  slot="click-content"
257
259
  direction="${this.placement}"
258
260
  tip
259
- open
260
261
  >
261
262
  <sp-dialog size="s" no-divider>
262
263
  ${this.depth < MAX_DEPTH ? html`
@@ -287,7 +288,7 @@ customElements.define("recursive-popover", RecursivePopover);
287
288
  export class PopoverContent extends LitElement {
288
289
  render() {
289
290
  return html`
290
- <overlay-trigger>
291
+ <overlay-trigger type="modal" placement="bottom">
291
292
  <sp-button slot="trigger">Open me</sp-button>
292
293
  <sp-popover slot="click-content" direction="bottom">
293
294
  <sp-dialog no-divider>