@scidian/osui
Version:
Lightweight JavaScript UI library.
489 lines (417 loc) • 15.1 kB
CSS
/********** ELEMENT: <input> (number, text, etc) **********/
.osui-input {
color: rgba(var(--text), 1);
background-color: rgba(var(--background-dark), 0.35);
box-shadow: inset 0 0.075em 0.15em 0 rgba(var(--shadow), 0.35);
border: var(--border-micro) solid rgba(var(--shadow), 0.5);
border-radius: var(--radius-large);
outline: var(--border-micro) solid rgba(var(--shadow), 0.0);
padding: var(--pad-x-small) var(--pad-smallish);
vertical-align: middle;
min-width: 1em;
text-align: left;
}
.osui-input:hover {
color: rgba(var(--highlight), 1);
background-color: rgba(var(--button-dark), 0.5);
}
.osui-input:focus {
color: rgba(var(--highlight), 1);
background: rgba(var(--darklight), 1);
border: var(--border-micro) solid rgb(var(--icon));
outline: var(--border-micro) solid rgba(var(--shadow), 1.0);
border-radius: 0;
}
.osui-input.osui-valid-type {
color: rgba(var(--text), 1);
box-shadow:
inset 0 0 0 var(--pixel) rgba(var(--valid), 0.5),
inset 0 0.075em 0.5em 0 rgba(var(--shadow), 0.5);
padding-left: var(--pad-medium);
text-align: left ;
}
.osui-input.osui-invalid-type {
color: rgba(var(--text), 0.35);
box-shadow:
inset 0 0 0 var(--pixel) rgba(var(--invalid), 0.5),
inset 0 0.075em 0.5em 0 rgba(var(--shadow), 0.5);
text-align: center ;
}
.osui-input.osui-yes-drop {
color: rgba(var(--valid), 1);
background: rgba(var(--darklight), 1);
border-radius: 0;
border: var(--border-micro) solid rgb(var(--valid));
/* outline: var(--border-micro) solid rgb(var(--valid)); */
box-shadow: inset 0 0 0 var(--pixel) rgba(var(--valid), 0.5);
text-align: center ;
}
.osui-input.osui-no-drop {
color: rgba(var(--invalid), 1.0);
background: rgba(var(--darklight), 1);
border-radius: 0;
border: var(--border-micro) solid rgb(var(--invalid));
/* outline: var(--border-micro) solid rgb(var(--invalid)); */
box-shadow: inset 0 0 0 var(--pixel) rgba(var(--invalid), 0.5);
text-align: center ;
}
/** Hide Arrow Spinners - Chrome, Safari, Edge, Opera */
.osui-input::-webkit-outer-spin-button,
.osui-input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
/********** ELEMENT: <button> Button **********/
.osui-button {
/* display: flex; */
position: relative;
cursor: pointer;
pointer-events: all;
color: rgba(var(--text-light), 1);
border: var(--border-micro) solid rgba(var(--shadow), 0.75);
border-radius: var(--radius-large);
outline: var(--border-small) solid rgba(var(--darklight), 0.0);
background-color: rgba(var(--button-dark), 0.75);
background-image: linear-gradient(to bottom, rgba(var(--icon-light), 0.5), rgba(var(--icon-dark), 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.1);
text-shadow: var(--minus) var(--pixel) rgba(var(--shadow), 0.5);
font-size: var(--font-size);
margin: 0;
padding: var(--pad-x-small) var(--pad-medium);
overflow: hidden;
text-align: center;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
}
.osui-button:not(.osui-selected):enabled:hover {
color: rgba(var(--highlight), 1);
background-color: rgba(var(--highlight), 0.1);
background-image: linear-gradient(to bottom, rgba(var(--icon-light), 0.7), rgba(var(--icon-dark), 0.7));
}
.osui-button:not(.osui-selected):enabled:active {
color: rgba(var(--icon), 1);
background-color: rgba(var(--background-dark), 0.5);
background-image: none;
box-shadow: inset 0 var(--pad-micro) var(--pad-x-small) 0 rgba(var(--shadow), 0.75); /* sunk-in-shadow */
}
.osui-button.osui-selected {
background-color: rgba(var(--shadow), 1.0);
background-image: linear-gradient(to bottom left, rgba(var(--icon-light), 0.20), rgba(var(--icon), 0.20));
box-shadow: inset 0 var(--pad-micro) var(--pad-x-small) 0 rgba(var(--shadow), 0.75); /* sunk-in-shadow */
}
.osui-button:disabled {
pointer-events: none;
}
.osui-button:disabled {
filter: contrast(75%) grayscale(100%) brightness(50%);
}
/* Little borderless buttons */
.osui-borderless-button {
user-select: none;
border: none;
border-radius: var(--radius-large);
background: transparent;
box-shadow: none;
outline: none;
min-height: 1.5em;
min-width: 1.5em;
}
.osui-borderless-button:not(.osui-selected):enabled:hover {
background-image: linear-gradient(to bottom, rgba(var(--white), 0.1), rgba(var(--white), 0.2));
box-shadow: /* pop-out-shadow */
inset var(--minus) var(--pixel) var(--pixel) 0 rgba(var(--white), 0.25),
inset var(--pixel) var(--minus) var(--pixel) 0 rgba(var(--black), 0.25);
}
.osui-borderless-button:not(.osui-selected):enabled:active {
background-image: linear-gradient(to bottom, rgba(var(--black), 0.2), rgba(var(--black), 0.1));
box-shadow: /* pop-out-shadow */
inset var(--minus) var(--pixel) var(--pixel) 0 rgba(var(--black), 0.5),
inset var(--pixel) var(--minus) var(--pixel) 0 rgba(var(--black), 0.5);
}
/********** ELEMENT: <input> Checkbox **********/
/* Container */
.osui-checkbox {
background: transparent;
display: inline-block;
position: relative;
justify-content: left;
cursor: pointer;
margin-left: 0.1em;
}
/* Native Element (holds checkbox value) */
.osui-checkbox-input {
opacity: 0;
width: 0;
height: 0;
}
/* Visible Background: Unchecked */
.osui-checkbox-button {
flex-grow: 0;
flex-shrink: 0;
position: absolute;
color: rgba(var(--text), 1);
background-image: none;
background-color: rgba(var(--background-dark), 0.5);
box-shadow: inset 0 var(--pad-micro) var(--pad-x-small) 0 rgba(var(--shadow), 0.35); /* sunk-in-shadow */
left: 0;
top: 50%;
width: 2.0em;
height: 1.20em;
border-radius: 1.0em;
border: var(--border-micro) solid rgba(var(--shadow), 1.0);
transform: translateY(-50%);
transition: transform var(--menu-timing);
}
/* Visible Background: Checked */
.osui-checkbox-input:checked + .osui-checkbox-button {
--bg-color-light: var(--icon-light);
--bg-color-dark: var(--icon-dark);
background-color: rgba(var(--highlight), 0.2);
background-image: linear-gradient(to bottom, rgba(var(--bg-color-light), 0.7), rgba(var(--bg-color-dark), 0.7));
border: var(--border-micro) solid rgba(var(--shadow), 1.0);
}
/* Visible Background: Checked & Hover */
.osui-checkbox-input:checked:hover + .osui-checkbox-button {
background-color: rgba(var(--highlight), 0.5);
}
/* Button: Unchecked */
.osui-checkbox-button:before {
content: '';
flex-grow: 0;
flex-shrink: 0;
position: absolute;
left: 0.2em;
top: 50%;
width: 0.65em;
height: 0.65em;
background-color: rgba(var(--text-light), 0.8);
border-radius: 1em;
transform: translate(0, -50%);
transition: transform var(--menu-timing);
}
/* Button: Checked */
.osui-checkbox-input:checked + .osui-checkbox-button:before {
/* background-color: rgba(var(--highlight), 0.7); */
box-shadow: 0px 0px 3px 2px rgba(var(--shadow), 0.5); /* drop shadow */
transform: translate(0.75em, -50%);
transition: transform var(--menu-timing);
}
/* Button: Hover, Unchecked */
.osui-checkbox-input:hover + .osui-checkbox-button:before {
background-color: rgba(var(--highlight), 0.9);
}
/********** CLASS: Drop down buttons and menus **********/
/** Buttons that drop down a 'select' option list */
.osui-dropdown.osui-selected, .osui-dropdown:not(.osui-selected):enabled:active {
background-color: rgba(var(--darklight), 1);
background-image: none;
border: var(--border-micro) solid rgb(var(--icon));
outline: var(--border-small) solid rgb(var(--darklight));
border-radius: 0;
}
/** Color input attached to Button */
.osui-color-input-button {
position: absolute;
cursor: pointer;
margin: 0;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0.0;
}
/** Div used for a Dropdown Color Button */
.osui-drop-color {
background-color: #ff0000;
width: calc(100% - 0.5em);
height: 1.1em;
border: var(--border-micro) solid rgba(var(--shadow), 0.75);
border-radius: var(--radius-small);
}
/********** CLASS: Drop Arrow (adds a little down arrow on right side of element) **********/
.osui-drop-arrow {
padding-right: 1.4em;
}
.osui-drop-arrow::after {
content: '';
position: absolute;
pointer-events: none;
width: 0;
height: 0;
right: 0.65em;
top: 50%;
transform: translateY(-25%);
z-index: 101; /* Drop Arrow */
border: var(--arrow-size) solid transparent;
border-color: rgba(var(--text-light)) transparent transparent transparent;
transition: all var(--menu-timing);
}
.osui-drop-arrow:hover::after, .osui-drop-arrow.osui-selected::after {
border-color: rgba(var(--highlight)) transparent transparent transparent;
}
.osui-drop-arrow.osui-selected::after {
transform: translateY(-75%) scale(1.0, -1.0);
}
/********** CLASS: <input> Number **********/
/** Hide Arrow Spinners - Firefox (input[type=number] {}) */
.osui-number {
-moz-appearance: textfield;
}
.osui-number {
font-size: 100%;
}
.osui-number-holder {
position: relative;
display: flex;
margin: 0;
padding: 0;
}
.osui-number-label-box {
pointer-events: none;
position: absolute;
width: 100%;
height: 100%;
padding: 0 var(--pad-smallish);
color: rgba(var(--text-dark), 1);
}
/********** ELEMENT: <input> Slider **********/
.osui-slide-container {
position: relative;
overflow: hidden;
width: 100%;
}
.osui-tick-marks {
--divides: 10; /* (max - min) / step */
position: absolute;
pointer-events: none;
width: calc(100% - (var(--pad-large) * 2));
height: 0.2em;
left: var(--pad-large);
top: 1.2em;
padding: 0;
margin: 0;
background-image: repeating-linear-gradient(to right,
rgba(var(--icon), 0.75) 0 1px, transparent 1px calc((100% - var(--pad-micro)) / var(--divides)));
}
.osui-slider {
--middle: 0.5; /* (value - min) / (max - min) */
-webkit-appearance: none;
position: absolute;
width: 98%;
padding: 0;
height: 0.375em;
top: calc(50% - 0.375em);
background: linear-gradient(to right,
rgba(var(--icon), 0.65) 0%, rgba(var(--icon), 0.65) calc(var(--middle) * 100%),
rgba(var(--background-dark), 0.5) calc(var(--middle) * 100%), rgba(var(--background-dark), 0.5) 100%);
border: var(--border-micro) solid transparent;
border: var(--border-micro) solid rgba(var(--shadow), 1.0);
border-radius: var(--radius-large);
outline: var(--border-micro) solid transparent;
cursor: pointer;
}
.osui-slider:hover, .osui-slider:focus, .osui-slider:active {
background: linear-gradient(to right,
rgba(var(--icon-light), 0.65) 0%, rgba(var(--icon-light), 0.65) calc(var(--middle) * 100%),
rgba(var(--darklight), 0.5) calc(var(--middle) * 100%), rgba(var(--darklight), 0.5) 100%);
border: var(--border-micro) solid transparent;
border: var(--border-micro) solid rgba(var(--shadow), 1.0);
border-radius: var(--radius-large);
outline: var(--border-micro) solid transparent;
}
.osui-slider:active {
cursor: ew-resize;
}
/* Safari / Chrome Thumb */
.osui-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 1.1em;
height: 1.1em;
border: var(--border-micro) solid rgba(var(--background-dark), 1.0);
border-radius: 50%;
background-color: rgba(var(--shadow), 1.0);
background-image: linear-gradient(to bottom, rgba(var(--icon-light), 0.8), rgba(var(--icon-dark), 0.8));
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-slider::-webkit-slider-thumb:hover, .osui-slider::-webkit-slider-thumb:active {
background-color: rgba(var(--shadow), 1.0);
background-image: linear-gradient(to bottom, rgba(var(--icon-light), 1.0), rgba(var(--icon-dark), 1.0));
}
.osui-slider::-webkit-slider-thumb:active { cursor: ew-resize; }
/* Firefox thumb */
.osui-slider::-moz-range-thumb {
width: 1.1em;
height: 1.1em;
border: var(--border-micro) solid rgba(var(--background-dark), 1.0);
border-radius: 50%;
background-color: rgba(var(--shadow), 1.0);
background-image: linear-gradient(to bottom, rgba(var(--icon-light), 0.8), rgba(var(--icon-dark), 0.8));
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-slider::-moz-range-thumb:hover, .osui-slider::-moz-range-thumb:active {
background-color: rgba(var(--shadow), 1.0);
background-image: linear-gradient(to bottom, rgba(var(--icon-light), 1.0), rgba(var(--icon-dark), 1.0));
}
.osui-slider::-moz-range-thumb:active { cursor: ew-resize; }
/********** ELEMENT: <textarea> Text Area **********/
.osui-text-area {
color: rgba(var(--text), 1);
background-color: rgba(var(--background-dark), 0.35);
border: var(--pixel) solid rgba(var(--shadow), 1);
border-radius: var(--radius-large);
outline: none; /* for macos */
padding: var(--pad-x-small) var(--pad-smallish);
tab-size: 4;
white-space: pre;
word-wrap: normal;
vertical-align: top;
}
.osui-text-area:hover {
color: rgba(var(--highlight), 1);
background-color: rgba(var(--button-dark), 0.5);
}
.osui-text-area:focus {
color: rgba(var(--highlight), 1);
background: rgba(var(--darklight), 1);
border: var(--border-micro) solid rgb(var(--icon));
outline: var(--border-micro) solid rgba(var(--shadow), 1.0);
border-radius: 0;
}
.osui-text-area::-webkit-scrollbar {
height: 0.4em;
width: 0.4em;
background: rgba(var(--shadow), 0.35);
border-radius: 0.2em;
}
.osui-text-area::-webkit-scrollbar-thumb:horizontal {
background: linear-gradient(to left, rgba(var(--text), 1), rgba(var(--text-dark), 1));
border-radius: 0.2em;
}
.osui-text-area::-webkit-scrollbar-thumb:vertical {
background: linear-gradient(to bottom, rgba(var(--text), 1), rgba(var(--text-dark), 1));
border-radius: 0.2em;
}
.osui-text-area::-webkit-scrollbar-corner {
background: rgba(var(--background-dark), 1);
}
.osui-text-area.success {
border-color: #8b8 ;
}
.osui-text-area.fail {
border-color: #f00 ;
background-color: rgba(255, 0, 0, 0.05);
}
/********** ELEMENT: <input> Text Box **********/
.osui-text-box {
display: flex;
flex-direction: column;
justify-content: center;
}