@scidian/osui
Version:
Lightweight JavaScript UI library.
369 lines (321 loc) • 8.96 kB
CSS
/***** GRAPH *****/
.osui-graph-input, .osui-graph-grid, .osui-graph-nodes, .osui-graph-lines {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
/* Div used for processing user input */
.osui-graph-input {
background: transparent;
z-index: -1; /* Graph Input */
}
/* Background div that holds tiled grid */
.osui-graph-grid {
pointer-events: none;
background-color: rgb(var(--darkness));
background-repeat: repeat;
transition: none;
}
/* Scalable div to hold nodes */
.osui-graph-nodes {
pointer-events: none;
background-color: transparent;
transition: none;
}
/* Canvas where lines are drawn */
.osui-graph-lines {
pointer-events: none;
}
/* Shows rubberband box */
.osui-graph-band-box {
position: absolute;
display: none;
background-color: rgba(var(--icon), 0.2);
border: solid var(--border-small) rgba(var(--icon), 0.75);
}
/***** MINIMAP *****/
.osui-mini-map {
position: absolute;
background-color: rgba(var(--background-dark), 0.5);
border: var(--border-small) solid rgba(var(--icon), 0.75);
border-radius: var(--radius-large);
bottom: var(--pad-large);
right: var(--pad-large);
width: 20%;
height: 20%;
z-index: 101; /* GraphMap */
cursor: grab;
}
.osui-mini-map-canvas {
position: absolute;
width: 100%;
height: 100%;
margin: 0;
outline: none;
}
.osui-mini-map-resizers {
position: absolute;
width: calc(100% + var(--resize-size));
height: calc(100% + var(--resize-size));
margin: calc(var(--resize-size) / -2);
outline: none;
}
/***** NODE *****/
.osui-node {
--node-color: 255, 0, 0;
pointer-events: all;
position: absolute;
background-color: transparent;
border-radius: var(--radius-large);
border: none;
outline: solid var(--pad-micro) rgb(var(--black), 0.5);
margin: 0;
cursor: inherit;
overflow: visible;
z-index: 0; /* Node */
}
.osui-active-node {
z-index: 1; /* Active Node */
}
.osui-node:hover, .osui-node.osui-node-selected {
filter: brightness(120%);
}
.osui-node.osui-node-selected, .osui-node.osui-node-displayed {
outline: solid var(--pad-small) rgb(var(--black), 0.5);
}
.osui-node.osui-too-small .osui-resizer {
pointer-events: none;
}
.osui-node-panel {
pointer-events: none;
display: flex;
flex-direction: column;
align-items: stretch;
background-color: rgba(var(--button-dark), 1);
border-radius: var(--radius-large);
position: absolute;
left: 0; top: 0; right: 0; bottom: 0;
margin: 0;
padding: 0;
cursor: inherit;
overflow: visible;
box-shadow: /* pop-out-shadow */
inset var(--minus) var(--pixel) var(--pixel) var(--pixel) rgba(var(--white), 0.1),
inset var(--pixel) var(--minus) var(--pixel) var(--pixel) rgba(var(--black), 0.1);
}
.osui-node-border {
pointer-events: none;
border: var(--border-small) solid transparent;
border-radius: var(--radius-large);
position: absolute;
left: 0; top: 0; right: 0; bottom: 0;
margin: calc(var(--border-small) * -0.5);
padding: 0;
}
.osui-node.osui-node-displayed .osui-node-border {
border: var(--border-small) solid rgba(var(--complement), 1);
}
.osui-node.osui-node-selected .osui-node-border {
border: var(--border-small) solid rgba(var(--icon), 1);
}
.osui-node-resizers {
pointer-events: all;
position: absolute;
opacity: 0;
left: 0; top: 0; right: 0; bottom: 0;
margin: calc(var(--resize-size) / -2);
padding: 0;
}
/***** NODE HEADER *****/
.osui-node-header-title {
pointer-events: none;
position: relative;
display: flex;
flex-direction: row;
align-items: center;
background-image: linear-gradient(to bottom, rgba(var(--icon-light), 0.5), rgba(var(--icon-dark), 0.5));
border-top-right-radius: var(--radius-large);
border-top-left-radius: var(--radius-large);
width: 100%;
height: 1.82em;
margin: 0;
padding: var(--pad-x-small) 0.5em; /* vertical | horizontal */
text-shadow: var(--minus) var(--pixel) rgba(var(--shadow), 0.5);
box-shadow: /* pop-out-shadow */
inset var(--minus) var(--pixel) var(--pixel) var(--pixel) rgba(var(--white), 0.1),
inset var(--pixel) var(--minus) var(--pixel) var(--pixel) rgba(var(--black), 0.2);
}
.osui-node-header-icon .osui-vector-box {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 85%;
height: 85%;
filter: drop-shadow(0 0 var(--pad-micro) rgba(var(--shadow), 0.8));
}
.osui-node-header-icon .osui-image {
filter: brightness(calc(10 * var(--bright))) opacity(0.9);
}
.osui-node-header-icon {
pointer-events: none;
position: absolute;
background-color: rgba(var(--button-dark), 1);
border-radius: 0.25em;
left: 0.2em;
top: 0.2em;
width: 1.65em;
height: 1.35em;
opacity: 1;
box-shadow: inset 0 0 var(--pixel) rgba(var(--shadow), 0.5);
}
.osui-node-header-text {
pointer-events: none;
flex-grow: 1;
flex-shrink: 2;
color: rgba(var(--text-light), 1.0);
font-size: 100%;
overflow: hidden;
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
padding-left: 0.5em;
}
/***** NODE ITEM *****/
.osui-node-interior {
pointer-events: none;
display: flex;
flex-direction: row;
flex: 1 1 auto;
position: relative;
background-color: transparent;
min-width: 100px;
min-height: 25px;
}
.osui-node-item-list {
pointer-events: none;
display: block;
flex: 1 1 auto;
position: relative;
background-color: transparent;
width: 50%;
min-height: 25px;
}
/* Item */
.osui-node-item {
pointer-events: none;
position: relative;
background-color: transparent;
color: var(--text);
font-size: 85%;
width: 100%;
padding: var(--pad-medium);
margin-top: var(--pad-x-small);
margin-bottom: var(--pad-x-small);
vertical-align: middle;
}
.osui-node-left {
text-align: left;
padding-left: 1.2em;
}
.osui-node-right {
text-align: right;
padding-right: 1.2em;
}
/* Item point */
.osui-node-item-point {
pointer-events: all;
position: absolute;
width: 1em;
height: 1em;
background-color: rgba(var(--background-dark), 1);
border: var(--border-small) solid rgba(var(--button-light), 1);
border-radius: 0.3em;
outline: none;
top: 50%;
overflow: visible;
z-index: 100; /* Node Item Point */
}
.osui-node-left .osui-node-item-point {
left: 0;
transform: translate(-50%, -50%);
}
.osui-node-right .osui-node-item-point {
right: 0;
transform: translate( 50%, -50%);
}
/* Increases mouse over hit area */
.osui-node-item-point::before {
content: ' ';
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
margin: -0.5em;
background-color: transparent;
}
/* Inner square */
.osui-node-item.osui-item-connected .osui-node-item-point::after,
.osui-node-item .osui-node-item-point.osui-active-item::after {
content: ' ';
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
margin: var(--pad-x-small);
background-color: rgb(var(--node-color));
border-radius: 0.08em;
}
/* Item point highlight border */
.osui-node.osui-node-displayed .osui-node-item-point {
border: var(--border-small) solid rgba(var(--complement), 1);
}
.osui-node.osui-node-selected .osui-node-item-point {
border: var(--border-small) solid rgba(var(--icon), 1);
}
.osui-node-item-point.osui-hover-point, .osui-node.osui-node-selected .osui-node-item-point.osui-hover-point,
.osui-node-item-point.osui-active-item, .osui-node.osui-node-selected .osui-node-item-point.osui-active-item {
border: var(--border-small) solid rgba(var(--highlight), 1);
width: 1.2em;
height: 1.2em;
}
/* Item detacher (little 'X') */
.osui-node-item-detach {
pointer-events: none;
position: absolute;
width: 1em;
height: 1em;
top: 10%;
background-color: transparent;
border: none;
outline: none;
overflow: visible;
filter: brightness(50%);
transform: translateY(-50%);
opacity: 0;
}
.osui-node-right .osui-node-item-detach {
left: calc(100% + 0.7em);
}
.osui-node-left .osui-node-item-detach {
left: calc(0em - var(--row-height));
}
/* Increases mouse over hit area */
.osui-node-item-detach::before {
content: ' ';
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
margin: -0.5em;
background-color: transparent;
}
.osui-node-item.osui-item-connected .osui-node-item-detach {
pointer-events: all;
}
.osui-node-item.osui-item-connected:hover .osui-node-item-detach {
opacity: 1;
}
.osui-node-item-detach .osui-image {
filter: var(--drop-shadow);
}
.osui-node-item.osui-item-connected .osui-node-item-detach:hover {
filter: brightness(100%);
}