mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-14 18:01:06 +00:00
325 lines
8.8 KiB
SCSS
325 lines
8.8 KiB
SCSS
// This file is inlined from `carbon-components@10.47` as
|
|
// Popover styles were removed since version 10.48.
|
|
|
|
//
|
|
// Copyright IBM Corp. 2016, 2018
|
|
//
|
|
// This source code is licensed under the Apache-2.0 license found in the
|
|
// LICENSE file in the root directory of this source tree.
|
|
//
|
|
|
|
@import 'carbon-components/scss/globals/scss/vars';
|
|
@import 'carbon-components/scss/globals/scss/helper-mixins';
|
|
@import 'carbon-components/scss/globals/scss/vendor/@carbon/elements/scss/import-once/import-once';
|
|
|
|
/// Popover component
|
|
/// @access private
|
|
/// @group components
|
|
@mixin popover {
|
|
$popover-text-color: $text-01;
|
|
$popover-caret-offset: 1rem;
|
|
$popover-offset: 8px;
|
|
|
|
.#{$prefix}--popover {
|
|
// Specify the distance between the popover and the trigger. This value must
|
|
// have a unit otherwise the `calc()` expression will not work
|
|
// stylelint-disable-next-line length-zero-no-unit
|
|
--cds-popover-offset: 0rem;
|
|
|
|
// Specify the distance that the caret should be offset from the side of the
|
|
// popover when not centered
|
|
--cds-popover-caret-offset: 1rem;
|
|
|
|
position: absolute;
|
|
z-index: z('floating');
|
|
display: none;
|
|
}
|
|
|
|
// We use a pseudo element inside of the popover to create a space between the
|
|
// target and the popover. This helps in situations like tooltips where you do
|
|
// not want the tooltip to disappear when the user moves from the target to
|
|
// the popover.
|
|
.#{$prefix}--popover::before {
|
|
position: absolute;
|
|
display: block;
|
|
content: '';
|
|
}
|
|
|
|
.#{$prefix}--popover--open {
|
|
display: block;
|
|
}
|
|
|
|
.#{$prefix}--popover-contents {
|
|
@include box-shadow;
|
|
|
|
position: relative;
|
|
width: max-content;
|
|
max-width: rem(368px);
|
|
background-color: $ui-01;
|
|
border-radius: 2px;
|
|
color: $popover-text-color;
|
|
}
|
|
|
|
.#{$prefix}--popover--light .#{$prefix}--popover-contents {
|
|
background-color: $ui-background;
|
|
}
|
|
|
|
.#{$prefix}--popover--high-contrast .#{$prefix}--popover-contents {
|
|
background-color: $inverse-02;
|
|
color: $inverse-01;
|
|
}
|
|
|
|
.#{$prefix}--popover--caret {
|
|
--cds-popover-offset: 0.5rem;
|
|
}
|
|
|
|
.#{$prefix}--popover--caret .#{$prefix}--popover-contents::before,
|
|
.#{$prefix}--popover--caret .#{$prefix}--popover-contents::after {
|
|
position: absolute;
|
|
display: inline-block;
|
|
width: rem(8px);
|
|
height: rem(8px);
|
|
background-color: inherit;
|
|
content: '';
|
|
}
|
|
|
|
.#{$prefix}--popover--caret .#{$prefix}--popover-contents::before {
|
|
z-index: -1;
|
|
box-shadow: 2px 2px 6px 0 rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
// The popover's tooltip is created by drawing two 8px x 8px boxes, one for
|
|
// rendering the box-shadow that the popover content uses and another for
|
|
// layering on top of this box to create an effect of a popover caret with a
|
|
// box-shadow. The layer with the box-shadow is rendered behind the popover
|
|
// content, while the other is rendered above of the popover content.
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Bottom
|
|
//-----------------------------------------------------------------------------
|
|
.#{$prefix}--popover--bottom {
|
|
bottom: 0;
|
|
left: 50%;
|
|
transform: translate(-50%, calc(100% + var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(bottom) {
|
|
top: 0;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%) rotate(45deg);
|
|
}
|
|
|
|
// Bottom left
|
|
.#{$prefix}--popover--bottom-left {
|
|
bottom: 0;
|
|
left: 0;
|
|
transform: translateY(calc(100% + var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(bottom-left) {
|
|
top: 0;
|
|
left: 0;
|
|
transform: translate(var(--cds-popover-caret-offset), -50%) rotate(45deg);
|
|
}
|
|
|
|
// Bottom right
|
|
.#{$prefix}--popover--bottom-right {
|
|
right: 0;
|
|
bottom: 0;
|
|
transform: translateY(calc(100% + var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(bottom-right) {
|
|
top: 0;
|
|
right: 0;
|
|
transform: translate(calc(-1 * var(--cds-popover-caret-offset)), -50%)
|
|
rotate(45deg);
|
|
}
|
|
|
|
// Hover area
|
|
.#{$prefix}--popover--bottom.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--bottom-left.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--bottom-right.#{$prefix}--popover::before {
|
|
top: 0;
|
|
right: 0;
|
|
left: 0;
|
|
height: var(--cds-popover-offset);
|
|
transform: translateY(-100%);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// TOP
|
|
//-----------------------------------------------------------------------------
|
|
.#{$prefix}--popover--top {
|
|
bottom: 100%;
|
|
left: 50%;
|
|
transform: translate(-50%, calc(-1 * var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(top) {
|
|
bottom: 0;
|
|
left: 50%;
|
|
transform: translate(-50%, 50%) rotate(45deg);
|
|
}
|
|
|
|
// Top left
|
|
.#{$prefix}--popover--top-left {
|
|
bottom: 100%;
|
|
left: 0;
|
|
transform: translateY(calc(-1 * var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(top-left) {
|
|
bottom: 0;
|
|
left: 0;
|
|
transform: translate(var(--cds-popover-caret-offset), 50%) rotate(45deg);
|
|
}
|
|
|
|
// Top right
|
|
.#{$prefix}--popover--top-right {
|
|
right: 0;
|
|
bottom: 100%;
|
|
transform: translateY(calc(-1 * var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(top-right) {
|
|
right: 0;
|
|
bottom: 0;
|
|
transform: translate(calc(-1 * var(--cds-popover-caret-offset)), 50%)
|
|
rotate(45deg);
|
|
}
|
|
|
|
// Hover area
|
|
.#{$prefix}--popover--top.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--top-left.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--top-right.#{$prefix}--popover::before {
|
|
right: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
height: var(--cds-popover-offset);
|
|
transform: translateY(100%);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Right
|
|
//-----------------------------------------------------------------------------
|
|
.#{$prefix}--popover--right {
|
|
top: 50%;
|
|
left: 100%;
|
|
transform: translate(var(--cds-popover-offset), -50%);
|
|
}
|
|
|
|
@include place-caret(right) {
|
|
top: 50%;
|
|
left: 0;
|
|
transform: translate(-50%, -50%) rotate(45deg);
|
|
}
|
|
|
|
// Right top
|
|
.#{$prefix}--popover--right-top {
|
|
top: 0;
|
|
left: 100%;
|
|
transform: translateX($popover-offset);
|
|
}
|
|
|
|
@include place-caret(right-top) {
|
|
top: 0;
|
|
left: 0;
|
|
transform: translate(-50%, var(--cds-popover-caret-offset)) rotate(45deg);
|
|
}
|
|
|
|
// Right bottom
|
|
.#{$prefix}--popover--right-bottom {
|
|
bottom: 0;
|
|
left: 100%;
|
|
transform: translateX(var(--cds-popover-offset));
|
|
}
|
|
|
|
@include place-caret(right-bottom) {
|
|
bottom: 0;
|
|
left: 0;
|
|
transform: translate(-50%, calc(-1 * var(--cds-popover-caret-offset)))
|
|
rotate(45deg);
|
|
}
|
|
|
|
// Hover area
|
|
.#{$prefix}--popover--right.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--right-top.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--right-bottom.#{$prefix}--popover::before {
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
width: var(--cds-popover-offset);
|
|
transform: translateX(-100%);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Left
|
|
//-----------------------------------------------------------------------------
|
|
.#{$prefix}--popover--left {
|
|
top: 50%;
|
|
right: 100%;
|
|
transform: translate(calc(-1 * var(--cds-popover-offset)), -50%);
|
|
}
|
|
|
|
@include place-caret(left) {
|
|
top: 50%;
|
|
right: 0;
|
|
transform: translate(50%, -50%) rotate(45deg);
|
|
}
|
|
|
|
// Left top
|
|
.#{$prefix}--popover--left-top {
|
|
top: 0;
|
|
right: 100%;
|
|
transform: translateX(calc(-1 * var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(left-top) {
|
|
top: 0;
|
|
right: 0;
|
|
transform: translate(50%, var(--cds-popover-caret-offset)) rotate(45deg);
|
|
}
|
|
|
|
// Left bottom
|
|
.#{$prefix}--popover--left-bottom {
|
|
right: 100%;
|
|
bottom: 0;
|
|
transform: translateX(calc(-1 * var(--cds-popover-offset)));
|
|
}
|
|
|
|
@include place-caret(left-bottom) {
|
|
right: 0;
|
|
bottom: 0;
|
|
transform: translate(50%, calc(-1 * var(--cds-popover-caret-offset)))
|
|
rotate(45deg);
|
|
}
|
|
|
|
// Hover area
|
|
.#{$prefix}--popover--left.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--left-top.#{$prefix}--popover::before,
|
|
.#{$prefix}--popover--left-bottom.#{$prefix}--popover::before {
|
|
top: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
width: var(--cds-popover-offset);
|
|
transform: translateX(100%);
|
|
}
|
|
}
|
|
|
|
/// Helper for placing the caret inside a popover. The selectors here can get
|
|
/// distracting in the main stylesheet, but ultimately they target the ::before
|
|
/// and ::after pseudo-elements for the given direction. The @content block
|
|
/// passed in should appropriately position the caret for the given direction.
|
|
@mixin place-caret($direction) {
|
|
.#{$prefix}--popover--caret.#{$prefix}--popover--#{$direction}
|
|
.#{$prefix}--popover-contents::before,
|
|
.#{$prefix}--popover--caret.#{$prefix}--popover--#{$direction}
|
|
.#{$prefix}--popover-contents::after {
|
|
@content;
|
|
}
|
|
}
|
|
|
|
@include exports('popover') {
|
|
@include popover;
|
|
}
|