232 lines
6 KiB
CSS
232 lines
6 KiB
CSS
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* Based on Lea Verou www.cubic-bezier.com
|
|
See https://github.com/LeaVerou/cubic-bezier */
|
|
|
|
.cubic-bezier-container {
|
|
/* These should be kept in pixels as they're used in CubicBezierWidget.js to set the canvas size */
|
|
--bezier-curve-width: 150px;
|
|
--bezier-curve-height: 330px;
|
|
--bezier-preview-height: 40px;
|
|
--bezier-tooltip-container-height: calc(var(--bezier-curve-height) + var(--bezier-preview-height));
|
|
display: grid;
|
|
grid-template-areas:
|
|
"presets curve"
|
|
"presets preview";
|
|
grid-template-columns: 50% 50%;
|
|
grid-template-rows: var(--bezier-curve-height) var(--bezier-preview-height);
|
|
width: 510px;
|
|
height: var(--bezier-tooltip-container-height);
|
|
overflow: hidden;
|
|
padding: 5px;
|
|
box-sizing: border-box;
|
|
|
|
.preset-pane {
|
|
grid-area: presets;
|
|
border-inline-end: 1px solid var(--theme-splitter-color);
|
|
padding-inline-end: 4px; /* Visual balance for the panel-arrowcontent border on inline start */
|
|
}
|
|
|
|
.display-wrap {
|
|
grid-area: curve;
|
|
text-align: center;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.timing-function-preview {
|
|
grid-area: preview;
|
|
align-self: center;
|
|
justify-self: center;
|
|
}
|
|
}
|
|
|
|
/* Coordinate Plane */
|
|
|
|
.cubic-bezier-container .coordinate-plane {
|
|
width: var(--bezier-curve-width);
|
|
height: var(--bezier-tooltip-container-height);
|
|
margin: 0 auto;
|
|
position: relative;
|
|
}
|
|
|
|
.cubic-bezier-container .control-point {
|
|
position: absolute;
|
|
z-index: 1;
|
|
height: 10px;
|
|
width: 10px;
|
|
border: 0;
|
|
background: var(--timing-function-control-point-background);
|
|
display: block;
|
|
margin: -5px 0 0 -5px;
|
|
outline: none;
|
|
border-radius: 5px;
|
|
padding: 0;
|
|
cursor: pointer;
|
|
/* opt-out of forced colors as --timing-function-control-point-background
|
|
is a registered property, so the engine will compute it to an rgb color,
|
|
which means it won't be seen as a system color in High Contrast Mode
|
|
and a default color would be used. */
|
|
forced-color-adjust: none;
|
|
}
|
|
|
|
.cubic-bezier-container .display-wrap {
|
|
background:
|
|
repeating-linear-gradient(0deg,
|
|
transparent,
|
|
var(--timing-function-grid-color) 0,
|
|
var(--timing-function-grid-color) 1px,
|
|
transparent 1px,
|
|
transparent 15px) no-repeat,
|
|
repeating-linear-gradient(90deg,
|
|
transparent,
|
|
var(--timing-function-grid-color) 0,
|
|
var(--timing-function-grid-color) 1px,
|
|
transparent 1px,
|
|
transparent 15px) no-repeat;
|
|
background-size: 100% 100%, 100% 100%;
|
|
user-select: none;
|
|
|
|
:root[forced-colors-active] & {
|
|
/* opt-out of forced colors so we can see still the lines in High Contrast Mode.
|
|
--timing-function-grid-color does have a specific value in HCM so it should be fine */
|
|
forced-color-adjust: none;
|
|
|
|
/* And set the forced colors on children so High Contrast Mode behaves as expected */
|
|
& > * {
|
|
forced-color-adjust: auto;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Timing Function Preview Widget */
|
|
|
|
.cubic-bezier-container .timing-function-preview {
|
|
width: var(--bezier-curve-width);
|
|
|
|
/* Stack the line and the dot on top of each other */
|
|
display: grid;
|
|
align-items: center;
|
|
justify-items: center;
|
|
:is(.scale, .dot) {
|
|
grid-column: 1 / 1;
|
|
grid-row: 1 / 1;
|
|
}
|
|
}
|
|
|
|
.cubic-bezier-container .timing-function-preview .scale {
|
|
width: 100%;
|
|
height: 1px;
|
|
background-color: var(--timing-function-preview-scale);
|
|
/* opt-out of forced colors so we can see the line in High Contrast Mode */
|
|
forced-color-adjust: none;
|
|
}
|
|
|
|
.cubic-bezier-container .timing-function-preview .dot {
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 50%;
|
|
border: 2px solid var(--timing-function-preview-dot-border);
|
|
background: var(--timing-function-line-color);
|
|
/* opt-out of forced colors as --timing-function-line-color is using
|
|
a non system but high contrast color */
|
|
forced-color-adjust: none;
|
|
}
|
|
|
|
/* Preset Widget */
|
|
|
|
#preset-categories {
|
|
display: flex;
|
|
width: 95%;
|
|
border: 1px solid var(--theme-splitter-color);
|
|
border-radius: 2px;
|
|
background-color: var(--theme-toolbar-background);
|
|
margin: 3px auto 0 auto;
|
|
}
|
|
|
|
.cubic-bezier-container .category {
|
|
padding: 5px 0;
|
|
width: 33.33%;
|
|
text-align: center;
|
|
text-transform: capitalize;
|
|
border-inline-end: 1px solid var(--theme-splitter-color);
|
|
cursor: default;
|
|
color: var(--theme-body-color);
|
|
text-overflow: ellipsis;
|
|
overflow: hidden;
|
|
|
|
&:last-child {
|
|
border-inline-end: none;
|
|
}
|
|
}
|
|
|
|
.cubic-bezier-container .category:hover {
|
|
background-color: var(--theme-tab-toolbar-background);
|
|
}
|
|
|
|
.cubic-bezier-container .active-category {
|
|
background-color: var(--theme-selection-background);
|
|
color: var(--theme-selection-color);
|
|
}
|
|
|
|
.cubic-bezier-container .active-category:hover {
|
|
background-color: var(--theme-selection-background);
|
|
}
|
|
|
|
#preset-container {
|
|
padding: 0;
|
|
width: 100%;
|
|
height: 331px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.cubic-bezier-container .preset-list {
|
|
display: none;
|
|
padding-top: 6px;
|
|
}
|
|
|
|
.cubic-bezier-container .active-preset-list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-start;
|
|
}
|
|
|
|
.cubic-bezier-container .preset {
|
|
cursor: pointer;
|
|
width: 33.33%;
|
|
margin: 5px 0;
|
|
text-align: center;
|
|
}
|
|
|
|
.cubic-bezier-container .preset canvas {
|
|
display: block;
|
|
border: 1px solid var(--theme-splitter-color);
|
|
border-radius: 3px;
|
|
background-color: var(--theme-body-background);
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.cubic-bezier-container .preset p {
|
|
font-size: 80%;
|
|
margin: 2px auto 0 auto;
|
|
color: var(--theme-text-color-alt);
|
|
text-transform: capitalize;
|
|
text-overflow: ellipsis;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.cubic-bezier-container .active-preset p,
|
|
.cubic-bezier-container .active-preset:hover p {
|
|
color: var(--theme-body-color);
|
|
}
|
|
|
|
.cubic-bezier-container .preset:hover canvas {
|
|
border-color: var(--theme-selection-background);
|
|
}
|
|
|
|
.cubic-bezier-container .active-preset canvas,
|
|
.cubic-bezier-container .active-preset:hover canvas {
|
|
background-color: var(--theme-selection-background-hover);
|
|
border-color: var(--theme-selection-background);
|
|
}
|