mirror of
https://github.com/nasa/openmct.git
synced 2025-01-14 00:40:06 +00:00
57a68a24de
* Hardcoded prototype - conditional styles for display layout or generator domain objects only. Needs Architectural review * Updates to ConditionalStylesView * Adds background colors list * Show conditional styles for subObjectViews and telemetryViews * Uses telemetry provider to determine which style is active Removes hardcoded conditionSet work used for prototype * Fixes failing test * Add default styles to conditionalStyles when a condition set is added to the domain object. * Use EventEmitter alias instead of eventEmitter3 in imports Change variable name for better readability and clarity Remove unused code * Change StyleRuleManager to accept conditionStyle objects instead of domainObjects * Uses a map for conditional styles instead of a list in order to improve performance * Use in-built api to check for identifier equality Pass missing arguments * Removes unnecessary object get call. * Conditionals styling WIP - Tweaks for layout/overflow issues; - Better header alignment; - Much better approach to "accordion" spacing; * Adds conditional styles for drawing objects * Fixes small bugs while adding or removing nested conditional styling * Removes hard coded conditionSetIdentifier * Fixes small conditionManager bug * WIP - Adds condition set selection dialog * WIP - Add condition set * Styling for tree dialog in selector - New `.c-selector` class; - Markup added to tree-item.vue to fix missing `c-object-label` wrapper; * Adds image url to styles inspector view * Adds highlight for selected conditionSet in selection dialog. * Conditionals Inspector styling WIP - Simplified Inspector markup; - Refined `.c-inspector` layout strategy; - Refined `.l-multipane` classes for better layout and scroll handling; - TODOs: styling for 'styles' section; unit test, find regressions, fix; * Read-only mode changes for the styles inspector * Adds basic styling for styles inspector view * Removes unused code * Displays condition set name * Display description for conditions * Conditionals Inspector styling WIP - Add new ObjectName component to Inspector; - Add supporting styles; * Conditionals Inspector styling WIP - Refactor for better usage of c-object-label; - Refactor `c-properties` classes to `c-inspect-properties`; * Conditionals Inspector styling WIP - Introduce `c-inspect-styles` class; - Markup refined in ConditionalStylesView.vue; * Conditionals Inspector styling WIP - Fix unintended regression in `c-object-label`; * Makes inspector view tabs sticky. Shows errors if either telemetry or conditions are missing Refresh conditionStyles when styles inspector is loaded to show new conditions that might be added to the conditionSet * Conditionals styling WIP - Added title to Condition Set selector dialog; * Conditionals styling WIP - CSS and markup changes; * Conditionals styling WIP - Markup changes; * Componentize conditional style editor, condition description and condition error * Conditionals styling WIP - Conditional styling elements in Inspector, significant refinements; - Condition description formatting; - Significant markup simplification in StyleEditor.vue; - Moved `.c-inspect-styles` into conditional-styles.scss; * Conditionals styling WIP - Added menu positioning css; * Conditionals styling WIP - Display images in StyleEditor `c-style-thumb` element; * Use the condition description component to show the condition description in condition set views * Conditionals styling WIP - New `u-alert` and `u-error` classes and mixin; - New $colorError theme constants; * Conditionals styling WIP - Fixed background: cover or c-style-thumbs; * Conditionals styling WIP - Add navigate-or-preview functionality to attached Condition Set used for conditional styling (thank you Deep!); - Better theme-compliant box-shadowing on c-style-thumb; - Added default color property to cClickIcon SCSS mixin; * Fixes ConditionDescription and ConditionErrors views * Allow static styles for domain Objects and display layout items * Consolidate handling of 'none' style to the object styles mixin * Adds visibility option to child items * Conditionals styling WIP - Add `is-style-invisible` class; - Better color approach for table headers to support domain object styling; * Change visibility to isInvisible class * Fixes visibility for object views and telemetry views * Fixes selection of condition set from tree view * Conditionals styling WIP - Added new $glyph-icon-eye-disabled font symbol and related class; - Modded glyphs used for visibility toggle button; - Modded StyleEditor thumb preview to reflect visibility setting; - Tweaked `is-style-invisible` opacity property; - Code cleanup; * Conditionals styling WIP - Display disabled toolbar for Inspector styles in Browse mode; - Better approach to 'is-style-invisible' `c-style-thumb` with new bgCheckerboard mixin; - Moved `$controlDisabledOpacity` into a theme constant; - Refined spacing in Inspector grid; * Fixes linting issues * Fixes telemetry metadata name * criterion descriptions is now an array of strings * Fixes spacing * Removes commented out code. * Remove v-if Co-authored-by: charlesh88 <charlesh88@gmail.com>
620 lines
15 KiB
SCSS
620 lines
15 KiB
SCSS
/*****************************************************************************
|
|
* Open MCT, Copyright (c) 2014-2018, United States Government
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
* Administration. All rights reserved.
|
|
*
|
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
* Open MCT includes source code licensed under additional open source
|
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
* this source code distribution or the Licensing information page available
|
|
* at runtime from the About dialog for additional information.
|
|
*****************************************************************************/
|
|
|
|
/************************** GLYPHS */
|
|
@mixin glyphBefore($unicode, $family: 'symbolsfont') {
|
|
&:before {
|
|
content: $unicode;
|
|
font-family: $family;
|
|
}
|
|
}
|
|
|
|
@mixin glyphAfter($unicode, $family: 'symbolsfont') {
|
|
&:after {
|
|
content: $unicode;
|
|
font-family: $family;
|
|
}
|
|
}
|
|
|
|
@mixin glyphBg($glyphUrl) {
|
|
background-image: $glyphUrl;
|
|
background-position: center;
|
|
background-size: contain;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
[class*="icon-"] {
|
|
&:before, &:after
|
|
{
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
}
|
|
|
|
/************************** EFFECTS */
|
|
@mixin pulse($animName: pulse, $dur: 500ms, $iteration: infinite, $opacity0: 0.5, $opacity100: 1) {
|
|
@keyframes pulse {
|
|
0% { opacity: $opacity0; }
|
|
100% { opacity: $opacity100; }
|
|
}
|
|
animation-name: $animName;
|
|
animation-duration: $dur;
|
|
animation-direction: alternate;
|
|
animation-iteration-count: $iteration;
|
|
animation-timing-function: ease-in-out;
|
|
}
|
|
|
|
/************************** VISUALS */
|
|
@mixin ancillaryIcon($d, $c) {
|
|
// Used for small icons used in combination with larger icons,
|
|
// like the link and alert icons in tree items.
|
|
color: $c;
|
|
font-size: $d;
|
|
line-height: $d;
|
|
height: $d;
|
|
width: $d;
|
|
}
|
|
|
|
@mixin appearanceNone() {
|
|
-moz-appearance: none;
|
|
-webkit-appearance: none;
|
|
appearance: none;
|
|
|
|
&:focus {
|
|
outline: none;
|
|
}
|
|
}
|
|
|
|
@mixin isAlias() {
|
|
&:after {
|
|
color:$colorIconAlias;
|
|
content: $glyph-icon-link;
|
|
display: block;
|
|
font-family: symbolsfont;
|
|
position: absolute;
|
|
text-shadow: rgba(black, 0.5) 0 1px 4px;
|
|
top: auto; left: 0; bottom: 10%; right: auto;
|
|
transform-origin: left bottom;
|
|
transform: scale(0.5);
|
|
}
|
|
}
|
|
|
|
@mixin bgDiagonalStripes($c: yellow, $a: 0.1, $d: 40px) {
|
|
background-image: linear-gradient(-45deg,
|
|
rgba($c, $a) 25%, transparent 25%,
|
|
transparent 50%, rgba($c, $a) 50%,
|
|
rgba($c, $a) 75%, transparent 75%,
|
|
transparent 100%
|
|
) repeat;
|
|
background-size: $d $d;
|
|
}
|
|
|
|
@mixin bgStripes($c: yellow, $a: 0.1, $bgsize: 5px, $angle: 90deg) {
|
|
background: linear-gradient($angle,
|
|
rgba($c, $a) 25%, transparent 25%,
|
|
transparent 50%, rgba($c, $a) 50%,
|
|
rgba($c, $a) 75%, transparent 75%,
|
|
transparent 100%
|
|
) repeat;
|
|
background-size: $bgsize $bgsize;
|
|
}
|
|
|
|
@mixin bgStripes2Color($c1, $c2, $bgSize, $angle: -45deg) {
|
|
background: linear-gradient(-45deg,
|
|
$c1 0%, $c1 25%,
|
|
$c2 25%, $c2 50%,
|
|
$c1 50%, $c1 75%,
|
|
$c2 75%, $c2 100%
|
|
) repeat;
|
|
background-size: $bgSize;
|
|
}
|
|
|
|
@mixin bgCheckerboard($c: $colorBodyFg, $opacity: 0.3, $size: 32px, $imp: false) {
|
|
$color: rgba($c, $opacity);
|
|
$bgPos: floor($size / 2);
|
|
|
|
$impStr: null;
|
|
@if $imp {
|
|
$impStr: !important;
|
|
}
|
|
|
|
background-image:
|
|
linear-gradient(45deg, $color 25%, transparent 25%),
|
|
linear-gradient(45deg, transparent 75%, $color 75%),
|
|
linear-gradient(45deg, transparent 75%, $color 75%),
|
|
linear-gradient(45deg, $color 25%, transparent 25%) $impStr;
|
|
background-size: $size $size;
|
|
background-position:0 0, 0 0, -1*$bgPos -1*$bgPos, $bgPos $bgPos;
|
|
}
|
|
|
|
@mixin disabled() {
|
|
opacity: $controlDisabledOpacity;
|
|
pointer-events: none !important;
|
|
cursor: default !important;
|
|
}
|
|
|
|
@mixin grippy($c: rgba(black, 0.5), $dir: 'x') {
|
|
$deg: 90deg;
|
|
$bgSize: 2px 100%;
|
|
|
|
@if $dir != 'x' {
|
|
// Grippy texture runs 'vertically'
|
|
$deg: 0deg;
|
|
$bgSize: 100% 2px;
|
|
}
|
|
|
|
background: linear-gradient($deg,
|
|
$c 1px, transparent 1px,
|
|
transparent 100%
|
|
) repeat;
|
|
background-size: $bgSize;
|
|
}
|
|
|
|
@mixin noColor() {
|
|
// A "no fill/stroke" selection option. Used in palettes.
|
|
$c: red;
|
|
$s: 48%;
|
|
$e: 52%;
|
|
background-image: linear-gradient(-45deg,
|
|
transparent $s - 5%,
|
|
$c $s,
|
|
$c $e,
|
|
transparent $e + 5%
|
|
);
|
|
background-repeat: no-repeat;
|
|
background-size: contain;
|
|
}
|
|
|
|
@mixin bgTicks($c: $colorBodyFg, $repeatDir: 'x') {
|
|
$deg: 90deg;
|
|
@if ($repeatDir != 'x') {
|
|
$deg: 0deg;
|
|
$repeatDir: repeat-y;
|
|
} @else {
|
|
$repeatDir: repeat-x;
|
|
}
|
|
|
|
background-image: linear-gradient($deg,
|
|
$c 1px, transparent 1px,
|
|
transparent 100%
|
|
);
|
|
background-repeat: $repeatDir;
|
|
}
|
|
|
|
@mixin sliderTrack($bg: $scrollbarTrackColorBg) {
|
|
border-radius: 2px;
|
|
box-sizing: border-box;
|
|
background-color: $bg;
|
|
}
|
|
|
|
@mixin triangle($dir: "left", $size: 5px, $ratio: 1, $color: red) {
|
|
width: 0;
|
|
height: 0;
|
|
$slopedB: $size/$ratio solid transparent;
|
|
$straightB: $size solid $color;
|
|
@if $dir == "up" {
|
|
border-left: $slopedB;
|
|
border-right: $slopedB;
|
|
border-bottom: $straightB;
|
|
} @else if $dir == "right" {
|
|
border-top: $slopedB;
|
|
border-bottom: $slopedB;
|
|
border-left: $straightB;
|
|
} @else if $dir == "down" {
|
|
border-left: $slopedB;
|
|
border-right: $slopedB;
|
|
border-top: $straightB;
|
|
} @else {
|
|
border-top: $slopedB;
|
|
border-bottom: $slopedB;
|
|
border-right: $straightB;
|
|
}
|
|
}
|
|
|
|
@mixin bgVertStripes($c: yellow, $a: 0.1, $d: 40px) {
|
|
background-image: linear-gradient(-90deg,
|
|
rgba($c, $a) 0%, rgba($c, $a) 50%,
|
|
transparent 50%, transparent 100%
|
|
);
|
|
background-repeat: repeat;
|
|
background-size: $d $d;
|
|
}
|
|
|
|
/************************** LAYOUT */
|
|
@mixin abs($m: 0) {
|
|
position: absolute;
|
|
top: $m; right: $m; bottom: $m; left: $m;
|
|
}
|
|
|
|
@mixin propertiesHeader() {
|
|
border-radius: $smallCr;
|
|
background-color: $colorInspectorSectionHeaderBg;
|
|
color: $colorInspectorSectionHeaderFg;
|
|
font-weight: normal;
|
|
padding: $interiorMarginSm $interiorMargin;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
@mixin modalFullScreen() {
|
|
// Optional modifier that makes a c-menu more mobile-friendly
|
|
position: fixed;
|
|
border-radius: 0;
|
|
top: 0; right: 0; bottom: 0; left: 0;
|
|
}
|
|
|
|
/************************** TEXT */
|
|
@mixin ellipsize() {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
@mixin reverseEllipsis() {
|
|
@include ellipsize();
|
|
direction: ltr;
|
|
unicode-bidi:bidi-override;
|
|
}
|
|
|
|
/************************** CONTROLS, BUTTONS, INPUTS */
|
|
@mixin hover {
|
|
body.desktop & {
|
|
&:hover {
|
|
@content
|
|
}
|
|
}
|
|
}
|
|
|
|
@mixin htmlInputReset() {
|
|
@include appearanceNone();
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 0;
|
|
outline: none;
|
|
text-align: inherit;
|
|
|
|
&:focus {
|
|
outline: 0;
|
|
}
|
|
}
|
|
|
|
@mixin input-base() {
|
|
@include htmlInputReset();
|
|
border-radius: $controlCr;
|
|
|
|
&.error {
|
|
background: $colorFormFieldErrorBg;
|
|
color: $colorFormFieldErrorFg;
|
|
}
|
|
}
|
|
|
|
@mixin nice-input($bg: $colorInputBg, $fg: $colorInputFg, $shdw: rgba(black, 0.5) 0 0 2px) {
|
|
@include input-base();
|
|
background: $bg;
|
|
color: $fg;
|
|
box-shadow: inset $shdw;
|
|
}
|
|
|
|
@mixin reactive-input($bg: $colorInputBg, $fg: $colorInputFg) {
|
|
@include input-base();
|
|
background: $bg;
|
|
box-shadow: $shdwInput;
|
|
color: $fg;
|
|
|
|
&:focus {
|
|
box-shadow: $shdwInputFoc;
|
|
}
|
|
|
|
@include hover() {
|
|
&:not(:focus) {
|
|
box-shadow: $shdwInputHov;
|
|
}
|
|
}
|
|
}
|
|
|
|
@mixin button($bg: $colorBtnBg, $fg: $colorBtnFg, $radius: $controlCr, $shdw: none) {
|
|
// Is this being used? Remove if not.
|
|
background: $bg;
|
|
color: $fg;
|
|
border-radius: $radius;
|
|
box-shadow: $shdw;
|
|
}
|
|
|
|
@mixin buttonBehavior() {
|
|
// Assign transition timings
|
|
transition: $transOut;
|
|
|
|
@include hover() {
|
|
transition: $transIn;
|
|
}
|
|
}
|
|
|
|
@mixin cControl() {
|
|
$fs: 1em;
|
|
@include userSelectNone();
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
line-height: $fs; // Remove effect on top and bottom padding
|
|
overflow: hidden;
|
|
|
|
&:before,
|
|
&:after {
|
|
font-family: symbolsfont;
|
|
display: block;
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
&:before {
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
&:after {
|
|
font-size: 0.8em;
|
|
}
|
|
|
|
[class*="__label"] {
|
|
@include ellipsize();
|
|
display: block;
|
|
font-size: $fs;
|
|
}
|
|
|
|
&[class*='icon'] > [class*="__label"] {
|
|
// When button holds both an icon and a label, provide margin between them.
|
|
margin-left: $interiorMarginSm;
|
|
}
|
|
}
|
|
|
|
@mixin cButton() {
|
|
@include cControl();
|
|
@include themedButton();
|
|
border-radius: $controlCr;
|
|
color: $colorBtnFg;
|
|
cursor: pointer;
|
|
padding: $interiorMargin floor($interiorMargin * 1.25);
|
|
|
|
&:after,
|
|
> * + * {
|
|
margin-left: $interiorMarginSm;
|
|
}
|
|
|
|
@include hover() {
|
|
background: $colorBtnBgHov;
|
|
color: $colorBtnFgHov;
|
|
}
|
|
|
|
&[class*="--major"],
|
|
&[class*='is-active']{
|
|
background: $colorBtnMajorBg;
|
|
color: $colorBtnMajorFg;
|
|
|
|
@include hover() {
|
|
background: $colorBtnMajorBgHov;
|
|
color: $colorBtnMajorFgHov;
|
|
}
|
|
}
|
|
|
|
&[class*='--caution'] {
|
|
background: $colorBtnCautionBg;
|
|
color: $colorBtnCautionFg;
|
|
|
|
&:hover {
|
|
background: $colorBtnCautionBgHov;
|
|
}
|
|
}
|
|
}
|
|
|
|
@mixin cClickIcon() {
|
|
@include cControl();
|
|
color: $colorBodyFg;
|
|
cursor: pointer;
|
|
padding: 4px; // Bigger hit area
|
|
opacity: 0.6;
|
|
transition: $transOut;
|
|
transform-origin: center;
|
|
|
|
@include hover() {
|
|
transform: scale(1.1);
|
|
transition: $transIn;
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@mixin cClickIconButtonLayout() {
|
|
$pLR: 4px;
|
|
$pTB: 4px;
|
|
padding: $pTB $pLR;
|
|
|
|
&:before,
|
|
*:before {
|
|
// *:before handles any nested containers that may contain glyph elements
|
|
// Needed for c-togglebutton.
|
|
font-size: 1.25em;
|
|
}
|
|
}
|
|
|
|
@mixin cClickIconButton() {
|
|
// A clickable element that just includes the icon
|
|
// Background is displayed on hover
|
|
// Padding is included to facilitate a bigger hit area
|
|
// Make the icon bigger relative to its container
|
|
@include cControl();
|
|
@include cClickIconButtonLayout();
|
|
background: none;
|
|
box-shadow: none;
|
|
cursor: pointer;
|
|
transition: $transOut;
|
|
border-radius: $controlCr;
|
|
|
|
@include hover() {
|
|
transition: $transIn;
|
|
background: $colorClickIconButtonBgHov;
|
|
color: $colorClickIconButtonFgHov;
|
|
}
|
|
|
|
&[class*="--major"] {
|
|
color: $colorKey;
|
|
}
|
|
}
|
|
|
|
@mixin cCtrlWrapper {
|
|
// Provides a wrapper around buttons and other controls
|
|
// Contains control and provides positioning context for contained menu/palette.
|
|
// Wraps --menu elements, contains button and menu
|
|
overflow: visible;
|
|
|
|
.c-menu {
|
|
// Default position of contained menu
|
|
top: 100%; left: 0;
|
|
}
|
|
|
|
&[class*='--menus-up'] {
|
|
.c-menu {
|
|
top: auto; bottom: 100%;
|
|
}
|
|
}
|
|
|
|
&[class*='--menus-left'] {
|
|
.c-menu {
|
|
left: auto; right: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
@mixin hasMenu() {
|
|
&:after {
|
|
content: $glyph-icon-arrow-down;
|
|
font-family: symbolsfont;
|
|
font-size: 0.7em;
|
|
margin-left: floor($interiorMarginSm * 0.8);
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
@mixin cSelect($bg, $fg, $arwClr, $shdw) {
|
|
$svgArwClr: str-slice(inspect($arwClr), 2, str-length(inspect($arwClr))); // Remove initial # in color value
|
|
background: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10'%3e%3cpath fill='%23#{$svgArwClr}' d='M5 5l5-5H0z'/%3e%3c/svg%3e"), $bg;
|
|
color: $fg;
|
|
box-shadow: $shdw;
|
|
}
|
|
|
|
@mixin wrappedInput() {
|
|
// An input that is wrapped. Optionally includes a __label or icon element.
|
|
// Based on .c-search.
|
|
@include nice-input();
|
|
display: flex;
|
|
align-items: center;
|
|
padding-left: 4px;
|
|
padding-right: 4px;
|
|
|
|
&:before,
|
|
[class*='__label'] {
|
|
opacity: 0.5;
|
|
}
|
|
|
|
&:before {
|
|
// Adds an icon. Content defined in class.
|
|
direction: rtl; // Aligns glyph to right-hand side of container, for transition
|
|
display: block;
|
|
font-family: symbolsfont;
|
|
flex: 0 0 auto;
|
|
overflow: hidden;
|
|
padding: 2px 0; // Prevents clipping
|
|
transition: width 250ms ease;
|
|
width: 1em;
|
|
}
|
|
|
|
&:hover {
|
|
box-shadow: inset rgba(black, 0.8) 0 0px 2px;
|
|
&:before {
|
|
opacity: 0.9;
|
|
}
|
|
}
|
|
|
|
&--major {
|
|
padding: 4px;
|
|
}
|
|
|
|
&__input,
|
|
input[type='text'],
|
|
input[type='search'],
|
|
input[type='number'] {
|
|
background: none !important;
|
|
box-shadow: none !important; // !important needed to override default for [input]
|
|
flex: 1 1 auto;
|
|
padding-left: 2px !important;
|
|
padding-right: 2px !important;
|
|
min-width: 10px; // Must be set to allow input to collapse below browser min
|
|
}
|
|
|
|
&.is-active {
|
|
&:before {
|
|
padding: 2px 0px;
|
|
width: 0px;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************** MATH */
|
|
@function percentToDecimal($p) {
|
|
@return $p / 100%;
|
|
}
|
|
|
|
@function decimalToPercent($d) {
|
|
@return percentage($d);
|
|
}
|
|
|
|
/************************** UTILITIES */
|
|
@mixin browserPrefix($prop, $val) {
|
|
#{$prop}: $val;
|
|
-ms-#{$prop}: $val;
|
|
-moz-#{$prop}: $val;
|
|
-webkit-#{$prop}: $val;
|
|
}
|
|
|
|
@mixin userSelectNone() {
|
|
@include browserPrefix(user-select, none);
|
|
}
|
|
|
|
@mixin cursorGrab() {
|
|
cursor: grab;
|
|
cursor: -webkit-grab;
|
|
&:active {
|
|
cursor: grabbing;
|
|
cursor: -webkit-grabbing;
|
|
}
|
|
}
|
|
|
|
@function svgColorFromHex($hexColor) {
|
|
// Remove initial # in color value
|
|
@return str-slice(inspect($hexColor), 2, str-length(inspect($hexColor)));
|
|
}
|
|
|
|
@mixin test($c: deeppink, $a: 0.3) {
|
|
background: rgba($c, $a) !important;
|
|
background-color: rgba($c, $a) !important;
|
|
}
|
|
|
|
|
|
@mixin sUnsynced() {
|
|
$c: $colorPausedBg;
|
|
border: 1px solid $c;
|
|
}
|