-
-
+
+
+
@@ -15,46 +15,75 @@
width: 0;
height: 0;
display: flex;
+ // Overlays begin at a z-index of 1000
+ z-index: 1000;
+
+ &.top,
+ &.bottom {
+ flex-direction: column;
+ }
}
.tail {
width: 0;
height: 0;
border-style: solid;
+ // Put the tail above the popover's shadow
z-index: 1;
+ // Draw over the application without being clipped by the containing panel's `overflow: hidden`
+ position: fixed;
- &.top {
- border-width: 0 6px 8px 6px;
- border-color: transparent transparent #222222e6 transparent;
- margin-left: -6px;
- margin-top: 2px;
- }
-
- &.bottom {
+ .top > & {
border-width: 8px 6px 0 6px;
border-color: #222222e6 transparent transparent transparent;
margin-left: -6px;
margin-bottom: 2px;
}
- &.left {
- border-width: 6px 8px 6px 0;
- border-color: transparent #222222e6 transparent transparent;
- margin-top: -6px;
- margin-left: 2px;
+ .bottom > & {
+ border-width: 0 6px 8px 6px;
+ border-color: transparent transparent #222222e6 transparent;
+ margin-left: -6px;
+ margin-top: 2px;
}
- &.right {
+ .left > & {
border-width: 6px 0 6px 8px;
border-color: transparent transparent transparent #222222e6;
margin-top: -6px;
margin-right: 2px;
}
+
+ .right > & {
+ border-width: 6px 8px 6px 0;
+ border-color: transparent #222222e6 transparent transparent;
+ margin-top: -6px;
+ margin-left: 2px;
+ }
}
.popover {
display: flex;
- align-items: center;
+
+ .top > & {
+ justify-content: center;
+ margin-bottom: 10px;
+ }
+
+ .bottom > & {
+ justify-content: center;
+ margin-top: 10px;
+ }
+
+ .left > & {
+ align-items: center;
+ margin-right: 10px;
+ }
+
+ .right > & {
+ align-items: center;
+ margin-left: 10px;
+ }
.popover-content {
background: #222222e6;
@@ -65,8 +94,9 @@
padding: 8px;
z-index: 0;
display: flex;
- // This `position: relative` is used to allow `top`/`right`/`bottom`/`left` properties to shift the content back from overflowing the workspace
- position: relative;
+ flex-direction: column;
+ // Draw over the application without being clipped by the containing panel's `overflow: hidden`
+ position: fixed;
}
}
@@ -74,24 +104,49 @@
diff --git a/client/web/src/components/workspace/WorkspacePanel.vue b/client/web/src/components/workspace/WorkspacePanel.vue
index 95df3d892..9226b04a4 100644
--- a/client/web/src/components/workspace/WorkspacePanel.vue
+++ b/client/web/src/components/workspace/WorkspacePanel.vue
@@ -9,7 +9,10 @@
-
+
+ Panel Options
+ More panel-related options will be here
+
@@ -54,17 +57,16 @@
border-radius: 8px 8px 0 0;
position: relative;
- &::before,
+ &:not(:first-child)::before,
&::after {
content: "";
width: 16px;
height: 8px;
position: absolute;
bottom: 0;
- box-shadow: #333;
}
- &::before {
+ &:not(:first-child)::before {
left: -16px;
border-bottom-right-radius: 8px;
box-shadow: 8px 0 0 0 #333;
@@ -135,6 +137,7 @@ import LayerTree from "../panels/LayerTree.vue";
import Minimap from "../panels/Minimap.vue";
import IconButton from "../widgets/IconButton.vue";
import DropdownButton, { DropdownButtonIcon } from "../widgets/DropdownButton.vue";
+import { PopoverDirection } from "../widgets/PopoverMount.vue";
import VerticalEllipsis from "../../../assets/svg/16x24-bounds-8x16-icon/vertical-ellipsis.svg";
import CloseX from "../../../assets/svg/16x16-bounds-12x12-icon/close-x.svg";
@@ -159,6 +162,7 @@ export default defineComponent({
data() {
return {
DropdownButtonIcon,
+ PopoverDirection,
};
},
});