@finos/perspective-viewer
Version:
The `<perspective-viewer>` Custom Element, frontend for Perspective.js
333 lines (288 loc) • 9.8 kB
text/less
/******************************************************************************
*
* Copyright (c) 2017, the Perspective Authors.
*
* This file is part of the Perspective library, distributed under the terms of
* the Apache License 2.0. The full license can be found in the LICENSE file.
*
*/
@import "./aggregate-selector.less";
:host {
.column-selector-column-title {
display: flex;
width: 100%;
flex-direction: row ;
}
#expression-columns .column-selector-column-title {
width: calc(100% - 24px);
}
#side_panel {
& > :not(:last-child) {
margin-bottom: 6px;
}
.psp-icon {
&:hover {
cursor: pointer;
}
}
.psp-icon__add {
display: flex;
width: 20px;
min-width: 20px;
margin-top: -2px;
height: 0px;
font-family: var(--column-add--font-family, inherit);
&:before {
font-feature-settings: "liga";
content: var(--column-add--before, "+");
}
}
.psp-title__columnName {
display: flex;
margin-left: 24px;
margin-top: 3px;
font-size: 12px;
font-weight: 300;
white-space: nowrap;
}
#add-expression {
padding: 6px 0 6px 0;
margin: -6px 0 0 0;
&.expr_editor_open {
background: rgba(0, 0, 0, 0.05);
}
}
.side_panel-action:hover {
cursor: pointer;
}
.column-selector-column {
display: flex;
flex-direction: row;
align-items: stretch;
font-size: 12px;
&:last-child {
.column_selector_draggable {
border-color: transparent;
}
}
// Expression column toolbar buttons
span.expression-edit-button,
span.expression-delete-button {
padding-top: 1px;
font-family: "Material Icons";
cursor: pointer;
opacity: 1;
color: #999;
&:hover {
opacity: 1;
color: var(--active--color, #000);
}
}
span.expression-delete-button {
padding-right: 1.5px;
padding-left: 5px;
}
span.expression-edit-button {
padding-left: 1.5px;
padding-right: 3px;
}
.column_selector_draggable {
display: flex;
align-items: start;
cursor: move;
border-style: solid;
border-width: 1px;
border-color: var(--inactive--color, #c5c9d0);
border-left-color: transparent;
border-right-color: transparent;
border-top-color: transparent;
font-size: 12px;
flex-grow: 1;
color: inherit;
transition: height 0.2s;
box-sizing: border-box;
flex-direction: column;
justify-content: space-evenly;
position: relative;
min-height: 20px;
// Height needs to be a multiple of non-`.show-aggregate` height
// so adding/removing does not drift the column position
// y-offset.
&.show-aggregate {
min-height: 40px;
}
.column_name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
flex: 1 1 250px;
&:only-child {
padding-right: 6px;
}
}
.column_name:before {
font-family: var(
--interface-monospace--font-family,
monospace
);
width: var(--column_type--width, auto);
min-width: 18px;
font-size: 12px;
font-weight: 200;
padding: 0 5px 0 0;
}
.integer:before,
.float:before {
content: var(
--float--column-type--content,
var(--column-type--content, "123")
);
color: var(
--float--column-type--color,
var(--column-type--color, #016bc6)
);
}
.string:before {
content: var(
--string--column-type--content,
var(--column-type--content, "abc")
);
color: var(
--string--column-type--color,
var(--column-type--color, #fe9292)
);
}
.boolean:before {
content: var(
--boolean--column-type--content,
var(--column-type--content, "t/f")
);
color: var(
--boolean--column-type--color,
var(--column-type--color, #999999)
);
}
.date:before,
.datetime:before {
content: var(
--date--column-type--content,
var(--column-type--content, "mdy")
);
color: var(
--date--column-type--color,
var(--column-type--color, #999999)
);
}
}
}
.is_column_active {
font-family: var(--column-selector--font-family, Arial) ;
width: var(--column_selector--width, 20px);
min-width: var(--column_selector--width, 20px);
height: var(--is_visible--height, auto);
cursor: pointer;
font-size: var(--column_selector--font-size, 14px);
}
#active-columns,
#sub-columns {
flex: 0 1 auto;
overflow-x: hidden;
overflow-y: scroll;
&::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, 0.1);
border-radius: 4px;
}
&::-webkit-scrollbar,
&::-webkit-scrollbar-corner {
background-color: transparent;
width: 6px;
}
}
#active-columns.collapse {
max-height: min(calc(100% - 95px), 60%);
}
#sub-columns {
flex: 0 10000000 auto;
}
#active-columns {
.is_column_active {
color: var(--active--color, #999);
&:before {
content: var(--active-column-selector--content, none);
}
&.required {
color: var(--inactive--color, #ccc);
cursor: initial;
}
&.inactive:before {
content: "";
}
}
.column-selector-column {
position: relative;
.column_selector_draggable {
width: calc(100% - 24px);
}
&:before {
font-size: 10px;
margin-left: 22px;
left: 1px;
padding: var(--column_type--padding, 0px 0px 0px 5px);
color: var(--inactive--color, #666);
position: absolute;
margin-top: -15px;
content: attr(data-label);
}
&[data-label] {
margin-top: 22px;
}
}
}
// "Empty" slotted columns in the active column list.
.dragover,
.empty-named {
pointer-events: none;
border: 1px dashed var(--inactive--color, #ddd) ;
// margin-left: -2px;
& > * {
opacity: 0;
}
}
.dragover {
border-style: solid ;
}
.dragover {
box-shadow: inset 0 0 15px rgb(0 0 0 / 5%);
}
// Inactive Columns are the columns in the column selector not currently
// selected for the `columns` field of the `ViewConfig`.
#inactive-columns,
#expression-columns {
margin-bottom: 6px;
&:empty {
display: none;
margin: 0px;
}
.is_column_active {
color: var(--inactive--color, #999);
&:before {
content: var(--inactive-column-selector--content, none);
}
}
.column-selector-column {
opacity: 0.3;
transition: opacity 0.3s;
&:hover {
opacity: 1;
transition: none;
}
.column_selector_draggable {
border-bottom-color: transparent;
align-items: center;
width: calc(100% - 24px);
}
}
}
}
}