254 lines
5.7 KiB
SCSS
254 lines
5.7 KiB
SCSS
|
/**
|
||
|
* Adds the styles for the label which displays the currently selected level.
|
||
|
*/
|
||
|
@mixin _buildingLevelPickerLabel($container, $theme) {
|
||
|
$base: "#{$container}-label";
|
||
|
$active: "#{$base}--active";
|
||
|
$hover: "#{$base}--hover";
|
||
|
$empty: "#{$base}--empty";
|
||
|
$clear-button: "#{$base}__clear-button";
|
||
|
$clear-button-icon: "#{$base}__clear-button-icon";
|
||
|
|
||
|
$width: 90px;
|
||
|
$height: 40px;
|
||
|
$padding: map-get($theme, padding);
|
||
|
|
||
|
.#{$base} {
|
||
|
color: map-get($theme, label-color);
|
||
|
text-align: center;
|
||
|
font-size: $height;
|
||
|
line-height: $height;
|
||
|
}
|
||
|
|
||
|
.#{$base},
|
||
|
.#{$empty} {
|
||
|
position: relative;
|
||
|
|
||
|
width: $width;
|
||
|
|
||
|
cursor: pointer;
|
||
|
transition: opacity 0.3s;
|
||
|
text-align: center;
|
||
|
|
||
|
&.#{$active} {
|
||
|
color: map-get($theme, label-color--active);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.#{$empty} {
|
||
|
font-size: $font-size;
|
||
|
font-weight: $font-weight--light;
|
||
|
color: map-get($theme, label-color--empty);
|
||
|
cursor: default;
|
||
|
}
|
||
|
|
||
|
.#{$clear-button} {
|
||
|
$size: 20px;
|
||
|
$icon-size: 12px;
|
||
|
|
||
|
font-size: $icon-size;
|
||
|
line-height: $icon-size;
|
||
|
|
||
|
position: absolute;
|
||
|
top: 10px; // Align with the label.
|
||
|
|
||
|
display: none;
|
||
|
|
||
|
width: $size;
|
||
|
height: $size;
|
||
|
margin-left: $side-spacing--quarter;
|
||
|
padding: ($size - $icon-size) * 0.5;
|
||
|
|
||
|
cursor: pointer;
|
||
|
transition: all 0.1s ease-in-out;
|
||
|
|
||
|
color: $interactive-font-color;
|
||
|
border: none;
|
||
|
border-radius: 50%;
|
||
|
|
||
|
appearance: none;
|
||
|
|
||
|
&:hover {
|
||
|
background: $background-color--hover;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Show the button when we have an active level.
|
||
|
.#{$active} .#{$clear-button} {
|
||
|
display: inline-block;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adds the styles for each of the levels in the level picker level stack.
|
||
|
*/
|
||
|
@mixin _buildingLevelPickerLevel($container, $theme) {
|
||
|
$item-container: "#{$container}-item";
|
||
|
$base: "#{$container}-item__base";
|
||
|
$hover: "#{$container}-item--hover";
|
||
|
$active: "#{$container}-item--active";
|
||
|
$animate-level: "#{$container}--animate-level";
|
||
|
|
||
|
.#{$item-container} {
|
||
|
border: 1px solid transparent;
|
||
|
|
||
|
will-change: height;
|
||
|
touch-action: none;
|
||
|
}
|
||
|
|
||
|
.#{$base} {
|
||
|
position: absolute;
|
||
|
left: 50%;
|
||
|
|
||
|
transform: translate(-50%, -50%);
|
||
|
pointer-events: none;
|
||
|
|
||
|
will-change: height;
|
||
|
|
||
|
.rect {
|
||
|
position: absolute;
|
||
|
top: 50%;
|
||
|
left: 50%;
|
||
|
|
||
|
margin-top: 3px;
|
||
|
|
||
|
transform: translate(-50%, -50%) rotateX(66deg) rotateZ(45deg);
|
||
|
pointer-events: none;
|
||
|
|
||
|
border: map-get($theme, level-border-width) solid map-get($theme, level-border-color);
|
||
|
outline: solid 1px transparent; // So things don't move when focusing
|
||
|
background-color: map-get($theme, level-background-color);
|
||
|
|
||
|
will-change: height;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.#{$hover} .#{$base} {
|
||
|
.rect {
|
||
|
border-color: map-get($theme, level-border-color--hover);
|
||
|
background-color: map-get($theme, level-background-color--hover);
|
||
|
box-shadow: 0 0 2px 1px map-get($theme, level-border-color--hover);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.#{$active} .#{$base} {
|
||
|
.rect {
|
||
|
border-color: map-get($theme, level-border-color--active);
|
||
|
background-color: map-get($theme, level-background-color--active);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$in-duration: 0.1s;
|
||
|
$out-duration: 0.3s;
|
||
|
|
||
|
$bg-transition: background-color $in-duration ease-in-out;
|
||
|
$border-transition: border-color $in-duration ease-in-out;
|
||
|
|
||
|
$spring: cubic-bezier(0.63, -0.265, 0.48, 1.64);
|
||
|
$size-transition-out: height $out-duration $spring, width $out-duration $spring;
|
||
|
$size-transition-in: height $in-duration ease-out, width $in-duration ease-out;
|
||
|
|
||
|
.#{$item-container} {
|
||
|
&,
|
||
|
.#{$base},
|
||
|
.rect {
|
||
|
transition: $size-transition-in, $bg-transition, $border-transition;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Animate everything when the $animate-level class is present in the parent.
|
||
|
.#{$animate-level} .#{$item-container} {
|
||
|
&,
|
||
|
.#{$base},
|
||
|
.rect {
|
||
|
transition: $size-transition-out, $bg-transition, $border-transition;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adds all the styles for the level picker used in the building explorer.
|
||
|
*/
|
||
|
@mixin buildingLevelPicker() {
|
||
|
$container: "esri-building-level-picker";
|
||
|
$levels-container: "#{$container}__levels-container";
|
||
|
$levels-inner-container: "#{$container}__inner-levels-container";
|
||
|
$label-container: "#{$container}__label-container";
|
||
|
$no-level: "#{$container}--no-level";
|
||
|
$arrow-up: "#{$container}__arrow-up";
|
||
|
$arrow-down: "#{$container}__arrow-down";
|
||
|
|
||
|
$padding: 12px;
|
||
|
|
||
|
$theme: (
|
||
|
padding: $padding,
|
||
|
label-color: $interactive-font-color,
|
||
|
label-color--empty: $font-color,
|
||
|
label-color--active: $border-color--active,
|
||
|
level-border-width: 2px,
|
||
|
level-border-color: $border-color,
|
||
|
level-border-color--hover: $border-color--active,
|
||
|
level-border-color--active: $border-color--active,
|
||
|
level-background-color: rgba(#fff, 0.7),
|
||
|
level-background-color--hover: rgba(#fff, 0.7),
|
||
|
level-background-color--active: $border-color--active
|
||
|
);
|
||
|
|
||
|
.#{$container} {
|
||
|
display: flex;
|
||
|
flex-direction: row;
|
||
|
|
||
|
align-items: center;
|
||
|
|
||
|
&.#{$no-level} {
|
||
|
display: none;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.#{$levels-container} {
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
|
||
|
width: 50%;
|
||
|
padding: 20px 0;
|
||
|
|
||
|
cursor: pointer;
|
||
|
transform: rotate(180deg); // So that our levels stack properly.
|
||
|
|
||
|
justify-content: flex-start;
|
||
|
align-items: center;
|
||
|
}
|
||
|
|
||
|
.#{$levels-inner-container} {
|
||
|
transition: margin 0.3s;
|
||
|
}
|
||
|
|
||
|
.#{$label-container} {
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
justify-content: space-between;
|
||
|
|
||
|
width: 50%;
|
||
|
height: 90px;
|
||
|
margin-right: $padding;
|
||
|
|
||
|
align-items: center;
|
||
|
}
|
||
|
|
||
|
@include _buildingLevelPickerLabel($container, $theme);
|
||
|
@include _buildingLevelPickerLevel($container, $theme);
|
||
|
|
||
|
.#{$arrow-up},
|
||
|
.#{$arrow-down} {
|
||
|
@include arrowButton();
|
||
|
}
|
||
|
|
||
|
.#{$arrow-up} {
|
||
|
@extend .esri-arrow-up;
|
||
|
}
|
||
|
|
||
|
.#{$arrow-down} {
|
||
|
@extend .esri-arrow-down;
|
||
|
}
|
||
|
}
|