summaryrefslogtreecommitdiffstats
path: root/devtools/client/themes/animation.css
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/themes/animation.css')
-rw-r--r--devtools/client/themes/animation.css754
1 files changed, 754 insertions, 0 deletions
diff --git a/devtools/client/themes/animation.css b/devtools/client/themes/animation.css
new file mode 100644
index 0000000000..b6b581bc3e
--- /dev/null
+++ b/devtools/client/themes/animation.css
@@ -0,0 +1,754 @@
+/* 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/. */
+
+/* Animation-inspector specific theme variables */
+
+:root {
+ --animation-item-hover-color: rgba(215, 215, 219, 0.4);
+ --animation-item-selected-color: rgba(215, 215, 219, 0.9);
+ --cssanimation-color: var(--purple-50);
+ --csstransition-color: var(--blue-55);
+ --fast-track-image: url("images/animation-fast-track.svg");
+ --graph-height: 30px;
+ --graph-right-offset: 10px;
+ --keyframe-marker-shadow-color: #c4c4c4;
+ --pause-image: url(chrome://devtools/skin/images/pause.svg);
+ --progress-bar-color: var(--grey-40);
+ --resume-image: url(chrome://devtools/skin/images/play.svg);
+ --rewind-image: url(chrome://devtools/skin/images/rewind.svg);
+ --scriptanimation-color: var(--green-60);
+ --scrubber-color: var(--magenta-65);
+ --sidebar-width: 200px;
+ --tick-line-style: 0.5px solid var(--theme-splitter-color);
+}
+
+:root.theme-dark {
+ --animation-item-hover-color: rgba(74, 74, 79, 0.5);
+ --animation-item-selected-color: var(--grey-60);
+ --csstransition-color: var(--blue-50);
+ --keyframe-marker-shadow-color: #818181;
+ --progress-bar-color: var(--grey-50);
+ --scrubber-color: var(--magenta-50);
+}
+
+#animationinspector-panel {
+ overflow-x: auto;
+}
+
+/* Root element of animation inspector */
+#animation-container {
+ cursor: default;
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ outline: none;
+ min-width: var(--min-container-width);
+}
+
+#animation-container .uncontrolled {
+ overflow: hidden;
+}
+
+#animation-container:not(.animation-detail-visible) .controlled {
+ display: none;
+}
+
+#animation-container .animation-container-splitter {
+ overflow: hidden;
+}
+
+/* Animation Toolbar */
+.animation-toolbar {
+ display: flex;
+}
+
+.pause-resume-button::before {
+ background-image: var(--pause-image);
+}
+
+.pause-resume-button.paused::before {
+ background-image: var(--resume-image);
+}
+
+select.playback-rate-selector.devtools-button {
+ background-image: url("chrome://devtools/skin/images/dropmarker.svg");
+ background-position: calc(100% - 4px) center;
+ background-repeat: no-repeat;
+ padding-inline-end: 1em;
+ text-align: center;
+}
+
+select.playback-rate-selector.devtools-button:not(:empty, :disabled, .checked):hover {
+ background: none;
+ background-color: var(--toolbarbutton-background);
+ background-image: url("chrome://devtools/skin/images/dropmarker.svg");
+ background-position: calc(100% - 4px) center;
+ background-repeat: no-repeat;
+ border-color: var(--toolbarbutton-hover-border-color);
+}
+
+.rewind-button::before {
+ background-image: var(--rewind-image);
+}
+
+/* Animation List Container */
+.animation-list-container {
+ overflow: hidden;
+ width: 100%;
+ user-select: none;
+}
+
+.animation-list-container.active-scrubber,
+.animation-list-container.active-scrubber .animation-summary-graph {
+ cursor: col-resize;
+}
+
+/* Current Time Scrubber */
+.current-time-scrubber-area {
+ grid-column: 2 / 3;
+ position: relative;
+ z-index: 2;
+}
+
+.current-time-scrubber-area::before {
+ content: "";
+ cursor: col-resize;
+ height: var(--theme-toolbar-height);
+ pointer-events: auto;
+ position: absolute;
+ /* In order to click on edge of current-time-scrubber-controller element */
+ width: calc(100% + 1px);
+}
+
+.current-time-scrubber-area:dir(rtl)::before {
+ /* In order to click on the start edge of current-time-scrubber-area element on RTL */
+ margin-inline-start: -1px;
+}
+
+.indication-bar.current-time-scrubber {
+ cursor: col-resize;
+ pointer-events: auto;
+}
+
+.indication-bar.current-time-scrubber:dir(rtl)::before {
+ transform: translateX(6px);
+}
+
+.indication-bar.current-time-scrubber:dir(rtl)::after {
+ transform: translateX(1px);
+}
+
+.indication-bar.current-time-scrubber::before {
+ border-top-color: var(--scrubber-color);
+}
+
+.indication-bar.current-time-scrubber::after {
+ background-color: var(--scrubber-color);
+}
+
+/* Animation Item */
+.animation-item.cssanimation {
+ --graph-color: var(--cssanimation-color);
+ --graph-opacity: 0.7;
+}
+
+.animation-item.csstransition {
+ --graph-color: var(--csstransition-color);
+ --graph-opacity: 0.8;
+}
+
+.animation-item.scriptanimation {
+ --graph-color: var(--scriptanimation-color);
+ --graph-opacity: 0.5;
+}
+
+.animation-item:hover {
+ background-color: var(--animation-item-hover-color);
+}
+
+.animation-item.selected {
+ background-color: var(--animation-item-selected-color);
+}
+
+/* Animation Target */
+.animation-target {
+ align-items: center;
+ display: flex;
+ grid-column: 1 / 2;
+ height: inherit;
+ padding-inline-start: 4px;
+ /* animation-target is tech term, so it should be displayed as ltr. */
+ direction: ltr;
+}
+
+.animation-item:dir(rtl).animation-target {
+ right:0;
+}
+
+/* Reps component */
+.animation-target .objectBox {
+ display: flex;
+ max-width: 100%;
+}
+
+.animation-target .objectBox .attrName {
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.animation-target .objectBox .highlight-node {
+ fill: var(--theme-icon-dimmed-color);
+ flex: none;
+}
+
+.animation-target .objectBox .highlight-node:hover{
+ fill: var(--theme-icon-color);
+}
+
+.animation-target .objectBox .highlight-node:active,
+.animation-target.highlighting .objectBox .highlight-node {
+ fill: var(--theme-icon-checked-color);
+ /* Since the icon is quite thin, it can be hard to differentiate it
+ from its regular state. Adding some background helps make it pop a bit */
+ background-color: var(--dimmed-highlighter-box-content-color);
+}
+
+/* Summary Graph */
+.animation-summary-graph {
+ cursor: pointer;
+ grid-column: 2 / 3;
+ height: inherit;
+ padding-bottom: 3px;
+ padding-top: 3px;
+ position: relative;
+}
+
+.animation-summary-graph.compositor::after {
+ background-image: var(--fast-track-image);
+ background-repeat: no-repeat;
+ content: "";
+ display: block;
+ fill: var(--theme-icon-dimmed-color);
+ height: 100%;
+ position: absolute;
+ right: 0;
+ top: 5px;
+ width: 15px;
+ -moz-context-properties: fill;
+}
+
+.animation-summary-graph.compositor:dir(rtl)::after {
+ right: unset;
+ left: 0;
+}
+
+.animation-summary-graph-path {
+ height: 100%;
+ width: 100%;
+}
+
+.animation-summary-graph:dir(rtl) .animation-summary-graph-path {
+ transform: scaleX(-1.0);
+}
+
+.animation-computed-timing-path path {
+ fill: var(--graph-color);
+ fill-opacity: var(--graph-opacity);
+ stroke: var(--graph-color);
+ vector-effect: non-scaling-stroke;
+ transform: scale(1, -1);
+}
+
+.animation-computed-timing-path path.infinity:nth-child(n+2) {
+ opacity: 0.3;
+}
+
+.animation-effect-timing-path path {
+ fill: none;
+ stroke: var(--graph-color);
+ stroke-dasharray: 2px 2px;
+ transform: scale(1, -1);
+ vector-effect: non-scaling-stroke;
+}
+
+.animation-effect-timing-path path.infinity:nth-child(n+2) {
+ opacity: 0.3;
+}
+
+.animation-computed-timing-path path.infinity-duration,
+.animation-effect-timing-path path.infinity-duration {
+ mask-clip: stroke-box;
+ mask-image: linear-gradient(90deg, black, transparent);
+ mask-origin: stroke-box;
+}
+
+.animation-negative-delay-path path,
+.animation-negative-end-delay-path path {
+ fill: none;
+ stroke: var(--theme-graphs-grey);
+ stroke-dasharray: 2px 2px;
+ transform: scale(1, -1);
+ vector-effect: non-scaling-stroke;
+}
+
+.animation-delay-sign,
+.animation-end-delay-sign {
+ background-color: var(--theme-graphs-grey);
+ height: 3px;
+ position: absolute;
+ bottom: 2px;
+}
+
+.animation-delay-sign::before,
+.animation-end-delay-sign::before {
+ background-color: inherit;
+ border-radius: 50%;
+ content: "";
+ height: 6px;
+ position: absolute;
+ top: -1.5px;
+ width: 6px;
+}
+
+.animation-delay-sign.fill,
+.animation-end-delay-sign.fill {
+ background-color: var(--graph-color);
+}
+
+/* These are delay sign directions. Basically, we can't use
+ the transform due to pseudo element, So we use the left/right align. */
+
+.animation-delay-sign:dir(ltr)::before {
+ left: -3px;
+ right: unset;
+}
+
+.animation-delay-sign:dir(rtl)::before {
+ left: unset;
+ right: -3px;
+}
+
+.animation-delay-sign.negative:dir(ltr)::before {
+ left: unset;
+ right: -3px;
+}
+
+.animation-delay-sign.negative:dir(rtl)::before {
+ left: -3px;
+ right: unset;
+}
+
+.animation-end-delay-sign:dir(ltr)::before {
+ left: unset;
+ right: -3px;
+}
+
+.animation-end-delay-sign:dir(rtl)::before {
+ left: -3px;
+ right: unset;
+}
+
+.animation-end-delay-sign.negative:dir(ltr)::before {
+ left: -3px;
+ right: unset;
+}
+.animation-end-delay-sign.negative:dir(rtl)::before {
+ left: unset;
+ right: -3px;
+}
+
+.animation-name {
+ height: 100%;
+ left: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ width: calc(100% - 20px);
+}
+
+.animation-name text {
+ dominant-baseline: middle;
+ fill: var(--theme-focus-outline-color);
+ paint-order: stroke;
+ stroke: var(--theme-body-background);
+ stroke-linejoin: round;
+ stroke-opacity: .5;
+ stroke-width: 4;
+ text-anchor: end;
+}
+
+.animation-summary-graph:dir(rtl) .animation-name text {
+ transform: translateX(-100%);
+}
+
+.animation-summary-graph:dir(rtl) .animation-name {
+ right:0;
+}
+
+/* Animation Detail */
+.animation-detail-container {
+ background-color: var(--theme-sidebar-background);
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ overflow: hidden;
+ width: 100%;
+ z-index: 2;
+}
+
+.animation-detail-header {
+ display: flex;
+ padding-inline-end: 0;
+}
+
+/* On OSX the cursor turns into a window-resizing cursor at the edges of the
+ * window, so bring the end of the close button in. */
+:root[platform="mac"] .animation-detail-header {
+ padding-inline-end: 2px;
+}
+
+.animation-detail-title {
+ flex: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.animation-detail-close-button {
+ margin: 0;
+}
+
+.animation-detail-close-button::before {
+ background-image: url(chrome://devtools/skin/images/close.svg);
+}
+
+/* Animated Property List Container */
+.animated-property-list-container {
+ flex: 1;
+ overflow: hidden;
+ user-select: none;
+}
+
+/* Keyframes Progress Bar */
+.keyframes-progress-bar-area {
+ background: none;
+ grid-column: 2 / 3;
+ pointer-events: none;
+ position: relative;
+ z-index: 2;
+}
+
+.indication-bar.keyframes-progress-bar::before {
+ border-top-color: var(--progress-bar-color);
+}
+
+.indication-bar.keyframes-progress-bar::after {
+ background-color: var(--progress-bar-color);
+}
+
+/* Animated Property Item */
+.animated-property-item.unchanged {
+ opacity: 0.6;
+}
+
+/* Animated Property Name */
+.animated-property-name {
+ align-items: center;
+ display: flex;
+ height: inherit;
+ justify-content: flex-end;
+ padding-inline-end: 10px;
+}
+
+.animated-property-name.compositor span {
+ padding-inline-start: 15px;
+ position: relative;
+}
+
+.animated-property-list-container.cssanimation .animated-property-name.compositor {
+ --fast-track-color: var(--cssanimation-color);
+}
+
+.animated-property-list-container.csstransition .animated-property-name.compositor {
+ --fast-track-color: var(--csstransition-color);
+}
+
+.animated-property-list-container.scriptanimation .animated-property-name.compositor {
+ --fast-track-color: var(--scriptanimation-color);
+}
+
+.animated-property-name.compositor span:dir(ltr)::before,
+.animated-property-name.compositor span:dir(rtl)::after {
+ background-image: var(--fast-track-image);
+ background-repeat: no-repeat;
+ background-size: contain;
+ content: "";
+ fill: var(--fast-track-color);
+ height: 100%;
+ position: absolute;
+ /* In order to support RTL/LTR both of environment, set the left and right to zero */
+ left: 0;
+ right: 0;
+ width: 15px;
+ -moz-context-properties: fill;
+}
+
+.animated-property-name.warning span {
+ text-decoration: underline dotted;
+}
+
+/* Keyframes Graph */
+.keyframes-graph {
+ grid-column: 2 / 3;
+ height: inherit;
+ padding-top: 5px;
+ position: relative;
+}
+
+.keyframes-graph:dir(rtl) .keyframes-graph-path {
+ transform: scaleX(-1.0);
+}
+
+.keyframes-graph-path {
+ height: 100%;
+ width: 100%;
+}
+
+.keyframes-graph-path path {
+ fill: var(--teal-60);
+ fill-opacity: 0.5;
+ stroke: var(--teal-70);
+ vector-effect: non-scaling-stroke;
+ transform: scale(1, -1);
+}
+
+.keyframes-graph.opacity .keyframes-graph-path path {
+ fill: var(--magenta-50);
+ stroke: var(--magenta-70);
+}
+
+.keyframes-graph.transform .keyframes-graph-path path {
+ fill: var(--yellow-50);
+ stroke: var(--yellow-60);
+}
+
+.keyframes-graph-path .color-path path {
+ fill-opacity: 1;
+ stroke: none;
+}
+
+.keyframes-graph .keyframes-graph-path .hint path {
+ fill: none;
+ stroke-linecap: round;
+ stroke-opacity: 0;
+}
+
+.keyframes-graph-path .hint path:hover {
+ stroke-opacity: 1;
+}
+
+.keyframes-graph-path .hint rect {
+ fill-opacity: 0.1;
+}
+
+.keyframes-graph-path .hint line {
+ stroke: #00b0bd;
+ stroke-opacity: 0;
+ vector-effect: non-scaling-stroke;
+}
+
+.keyframes-graph-path .hint:hover line {
+ stroke-opacity: 1;
+}
+
+/* Keyframe Marker List */
+.keyframe-marker-list {
+ pointer-events: none;
+ position: absolute;
+ height: 100%;
+ list-style-type: none;
+ top: 0%;
+ width: 100%;
+ padding-inline-start: 0;
+}
+
+.keyframe-marker-item {
+ box-shadow: 0 0 0 1px var(--keyframe-marker-shadow-color);
+ border-radius: 100%;
+ pointer-events: auto;
+ position: absolute;
+ top: 50%;
+ height: 10px;
+ transform: translate(-5px, -3px);
+ width: 10px;
+}
+
+.keyframe-marker-item:dir(rtl) {
+ transform: translate(5px, -3px);
+}
+
+.animated-property-list-container.cssanimation .keyframe-marker-item {
+ background-color: var(--cssanimation-color);
+}
+
+.animated-property-list-container.csstransition .keyframe-marker-item {
+ background-color: var(--csstransition-color);
+}
+
+.animated-property-list-container.scriptanimation .keyframe-marker-item {
+ background-color: var(--scriptanimation-color);
+}
+
+/* Common Components */
+/* Progress Inspection Panel */
+.progress-inspection-panel {
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+
+ display: grid;
+ grid-template-columns: var(--sidebar-width) 1fr var(--graph-right-offset);
+ grid-template-rows: var(--theme-toolbar-height) calc(100% - var(--theme-toolbar-height));
+}
+
+.progress-inspection-panel > .background {
+ grid-column: 1 / -1;
+ grid-row: 1 / -1;
+
+ position: sticky;
+ top: 0;
+
+ /* Correspond to the bug 1462235 */
+ height: calc(100% - 1px);
+
+ pointer-events: none;
+
+ display: grid;
+ grid-template-columns: subgrid;
+}
+
+.progress-inspection-panel > .header {
+ grid-column: 1 / -1;
+ grid-row: 1 / 2;
+
+ position: sticky;
+ top: 0;
+
+ padding: 0;
+ z-index: 1;
+
+ display: grid;
+ grid-template-columns: subgrid;
+}
+
+.progress-inspection-panel > .indicator {
+ grid-column: 1 / -1;
+ grid-row: 1 / -1;
+
+ position: sticky;
+ top: 0;
+
+ /* Correspond to the bug 1462235 */
+ height: calc(100% - 1px);
+
+ pointer-events: none;
+ z-index: 2;
+
+ display: grid;
+ grid-template-columns: subgrid;
+}
+
+.progress-inspection-panel > ul {
+ grid-column: 1 / -1;
+ grid-row: 2 / -1;
+
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-auto-rows: min-content;
+}
+
+.progress-inspection-panel > ul > li {
+ grid-column: 1 / -1;
+ height: var(--graph-height);
+ display: grid;
+ grid-template-columns: subgrid;
+}
+
+/* Tick Lines */
+.tick-lines {
+ grid-column: 2 / 3;
+ position: relative;
+}
+
+.tick-line {
+ position: absolute;
+ height: 100%;
+ border-inline-start: var(--tick-line-style);
+}
+
+/* Tick Labels */
+.tick-labels {
+ grid-column: 2 / 3;
+ height: 100%;
+ position: relative;
+}
+
+.tick-label {
+ border-inline-start: var(--tick-line-style);
+ height: 100%;
+ position: absolute;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.animated-property-list-container .tick-label:last-child {
+ border-inline-start: unset;
+ border-inline-end: var(--tick-line-style);
+ transform: translateX(calc(-100% + 0.5px));
+}
+
+.animated-property-list-container .tick-label:dir(rtl):last-child {
+ transform: translateX(calc(100% - 0.6px));
+}
+
+/* Indication Bar */
+.indication-bar {
+ position: absolute;
+ height: 100%;
+}
+
+.indication-bar::before {
+ border-inline-start: 5px solid transparent;
+ border-inline-end: 5px solid transparent;
+ border-top: 5px solid;
+ content: "";
+ height: calc(100% - 5px);
+ position: absolute;
+ transform: translateX(-6px);
+ width: 1px;
+}
+
+.indication-bar::after {
+ content: "";
+ height: 100%;
+ position: absolute;
+ transform: translateX(-1px);
+ width: 1px;
+}
+
+/* No Animation Panel */
+.animation-error-message > p {
+ white-space: pre-wrap;
+}
+
+.animation-element-picker::before {
+ background-image: url("chrome://devtools/content/shared/images/command-pick.svg");
+}