| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540 |
- //
- // Copyright 2017 Google Inc.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- // copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- // THE SOFTWARE.
- //
- // stylelint-disable selector-class-pattern --
- // Selector '.mdc-*' should only be used in this project.
- @use '@material/animation/functions' as animation-functions;
- @use '@material/dom/dom';
- @use '@material/feature-targeting/feature-targeting';
- @use '@material/rtl/rtl';
- @use '@material/theme/custom-properties';
- @use '@material/theme/theme';
- @use './linear-progress-theme';
- /// @deprecated Use static-styles() and theme-styles() instead.
- @mixin core-styles($query: feature-targeting.all()) {
- @include linear-progress-theme.bar-color(primary, $query: $query);
- @include linear-progress-theme.buffer-color(
- linear-progress-theme.$baseline-buffer-color,
- $query: $query
- );
- @include linear-progress-theme.bar-and-track-height(
- linear-progress-theme.$height,
- $query: $query
- );
- @include linear-progress-theme.buffering-keyframes(
- linear-progress-theme.$height,
- $query: $query
- );
- @include static-styles($query);
- }
- @mixin static-styles($query: feature-targeting.all()) {
- $feat-structure: feature-targeting.create-target($query, structure);
- $feat-animation: feature-targeting.create-target($query, animation);
- @include feature-targeting.targets($feat-animation) {
- @include primary-indeterminate-translate-keyframes_;
- @include primary-indeterminate-scale-keyframes_;
- @include secondary-indeterminate-translate-keyframes_;
- @include secondary-indeterminate-scale-keyframes_;
- @include primary-indeterminate-translate-reverse-keyframes_;
- @include secondary-indeterminate-translate-reverse-keyframes_;
- @include buffering-reverse-keyframes_;
- }
- .mdc-linear-progress {
- @include feature-targeting.targets($feat-structure) {
- position: relative;
- width: 100%;
- transform: translateZ(0);
- // Create a border around the bar in Windows High Contrast Mode.
- outline: 1px solid transparent;
- overflow-x: hidden;
- @include dom.forced-colors-mode($exclude-ie11: true) {
- outline-color: CanvasText;
- }
- }
- @include feature-targeting.targets($feat-animation) {
- transition: animation-functions.exit-temporary(opacity, 250ms);
- }
- &__bar {
- @include feature-targeting.targets($feat-structure) {
- position: absolute;
- top: 0;
- bottom: 0;
- margin: auto 0; // Vertically center
- width: 100%;
- animation: none;
- transform-origin: top left;
- }
- @include feature-targeting.targets($feat-animation) {
- transition: animation-functions.exit-temporary(transform, 250ms);
- }
- }
- &__bar-inner {
- @include feature-targeting.targets($feat-structure) {
- display: inline-block;
- position: absolute;
- width: 100%;
- animation: none;
- // border-top is used rather than background-color to ensure that the
- // bar is visible in Windows High Contrast Mode.
- border-top-style: solid;
- }
- }
- &__buffer {
- @include feature-targeting.targets($feat-structure) {
- display: flex;
- position: absolute;
- top: 0;
- bottom: 0;
- margin: auto 0; // Vertically center
- width: 100%;
- overflow: hidden;
- }
- }
- &__buffer-dots {
- @include feature-targeting.targets($feat-structure) {
- background-repeat: repeat-x;
- flex: auto;
- @include rtl.ignore-next-line();
- transform: rotate(180deg);
- // Use SVG mask for non-IE11 browsers
- // SVG is optimized for data URI (https://codepen.io/tigt/post/optimizing-svgs-in-data-uris)
- $svg: "data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='1' cy='1' r='1'/%3E%3C/svg%3E";
- -webkit-mask-image: url($svg);
- mask-image: url($svg);
- }
- @include feature-targeting.targets($feat-animation) {
- // stylelint-disable-next-line no-unknown-animations --
- // animation is in _linear-progress-theme.scss
- animation: mdc-linear-progress-buffering 250ms infinite linear;
- }
- }
- &__buffer-bar {
- @include feature-targeting.targets($feat-structure) {
- flex: 0 1 100%;
- }
- @include feature-targeting.targets($feat-animation) {
- transition: animation-functions.exit-temporary(flex-basis, 250ms);
- }
- }
- &__primary-bar {
- @include feature-targeting.targets($feat-structure) {
- transform: scaleX(0);
- }
- }
- &__secondary-bar {
- @include feature-targeting.targets($feat-structure) {
- display: none;
- }
- }
- @include indeterminate_($query: $query);
- @include rtl.rtl() {
- // The rtl() mixin does not account for nested `dir` attributes. Set
- // `dir` attribute on root to take highest priority.
- &:not([dir='ltr']) {
- @include _rtl-styles($query: $query);
- }
- }
- &--closed {
- @include feature-targeting.targets($feat-structure) {
- opacity: 0;
- }
- }
- &--closed-animation-off {
- .mdc-linear-progress__buffer-dots {
- @include feature-targeting.targets($feat-animation) {
- animation: none;
- }
- }
- &.mdc-linear-progress--indeterminate {
- .mdc-linear-progress__bar,
- .mdc-linear-progress__bar .mdc-linear-progress__bar-inner {
- @include feature-targeting.targets($feat-animation) {
- animation: none;
- }
- }
- }
- }
- }
- }
- // Private mixins.
- @mixin indeterminate_($query: feature-targeting.all()) {
- $feat-structure: feature-targeting.create-target($query, structure);
- $feat-animation: feature-targeting.create-target($query, animation);
- &--indeterminate {
- .mdc-linear-progress__bar {
- @include feature-targeting.targets($feat-structure) {
- transition: none;
- }
- }
- .mdc-linear-progress__primary-bar {
- @include feature-targeting.targets($feat-structure) {
- left: -145.166611%;
- }
- }
- .mdc-linear-progress__secondary-bar {
- @include feature-targeting.targets($feat-structure) {
- left: -54.888891%;
- display: block;
- }
- }
- &.mdc-linear-progress--animation-ready {
- .mdc-linear-progress__primary-bar {
- @include feature-targeting.targets($feat-animation) {
- animation: mdc-linear-progress-primary-indeterminate-translate 2s
- infinite linear;
- }
- > .mdc-linear-progress__bar-inner {
- @include feature-targeting.targets($feat-animation) {
- animation: mdc-linear-progress-primary-indeterminate-scale 2s
- infinite linear;
- }
- }
- }
- .mdc-linear-progress__secondary-bar {
- @include feature-targeting.targets($feat-animation) {
- animation: mdc-linear-progress-secondary-indeterminate-translate 2s
- infinite linear;
- }
- > .mdc-linear-progress__bar-inner {
- @include feature-targeting.targets($feat-animation) {
- animation: mdc-linear-progress-secondary-indeterminate-scale 2s
- infinite linear;
- }
- }
- }
- }
- }
- }
- @mixin _rtl-styles($query: $query) {
- $feat-structure: feature-targeting.create-target($query, structure);
- $feat-animation: feature-targeting.create-target($query, animation);
- .mdc-linear-progress__bar {
- @include feature-targeting.targets($feat-structure) {
- @include rtl.ignore-next-line();
- right: 0;
- @include rtl.ignore-next-line();
- -webkit-transform-origin: center right;
- @include rtl.ignore-next-line();
- transform-origin: center right;
- }
- }
- &.mdc-linear-progress--animation-ready {
- .mdc-linear-progress__primary-bar {
- @include feature-targeting.targets($feat-animation) {
- animation-name: mdc-linear-progress-primary-indeterminate-translate-reverse;
- }
- }
- .mdc-linear-progress__secondary-bar {
- @include feature-targeting.targets($feat-animation) {
- animation-name: mdc-linear-progress-secondary-indeterminate-translate-reverse;
- }
- }
- }
- .mdc-linear-progress__buffer-dots {
- @include feature-targeting.targets($feat-animation) {
- animation: mdc-linear-progress-buffering-reverse 250ms infinite linear;
- }
- @include feature-targeting.targets($feat-structure) {
- @include rtl.ignore-next-line();
- transform: rotate(0);
- }
- }
- &.mdc-linear-progress--indeterminate {
- .mdc-linear-progress__primary-bar {
- @include feature-targeting.targets($feat-structure) {
- @include rtl.ignore-next-line();
- right: -145.166611%;
- @include rtl.ignore-next-line();
- left: auto;
- }
- }
- .mdc-linear-progress__secondary-bar {
- @include feature-targeting.targets($feat-structure) {
- @include rtl.ignore-next-line();
- right: -54.888891%;
- @include rtl.ignore-next-line();
- left: auto;
- }
- }
- }
- }
- // Keyframes.
- @mixin primary-indeterminate-translate-keyframes_ {
- @keyframes mdc-linear-progress-primary-indeterminate-translate {
- 0% {
- transform: translateX(0);
- }
- 20% {
- animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819);
- transform: translateX(0);
- }
- 59.15% {
- animation-timing-function: cubic-bezier(
- 0.302435,
- 0.381352,
- 0.55,
- 0.956352
- );
- $primary-half: custom-properties.create(
- --mdc-linear-progress-primary-half,
- 83.67142%
- );
- @include apply-translate_($primary-half);
- }
- 100% {
- $primary-full: custom-properties.create(
- --mdc-linear-progress-primary-full,
- 200.611057%
- );
- @include apply-translate_($primary-full);
- }
- }
- }
- @mixin primary-indeterminate-scale-keyframes_ {
- @keyframes mdc-linear-progress-primary-indeterminate-scale {
- 0% {
- transform: scaleX(0.08);
- }
- 36.65% {
- animation-timing-function: cubic-bezier(0.334731, 0.12482, 0.785844, 1);
- transform: scaleX(0.08);
- }
- 69.15% {
- animation-timing-function: cubic-bezier(0.06, 0.11, 0.6, 1);
- transform: scaleX(0.661479);
- }
- 100% {
- transform: scaleX(0.08);
- }
- }
- }
- @mixin secondary-indeterminate-translate-keyframes_ {
- @keyframes mdc-linear-progress-secondary-indeterminate-translate {
- 0% {
- animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685);
- transform: translateX(0);
- }
- 25% {
- animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);
- $secondary-quarter: custom-properties.create(
- --mdc-linear-progress-secondary-quarter,
- 37.651913%
- );
- @include apply-translate_($secondary-quarter);
- }
- 48.35% {
- animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026);
- $secondary-half: custom-properties.create(
- --mdc-linear-progress-secondary-half,
- 84.386165%
- );
- @include apply-translate_($secondary-half);
- }
- 100% {
- $secondary-full: custom-properties.create(
- --mdc-linear-progress-secondary-full,
- 160.277782%
- );
- @include apply-translate_($secondary-full);
- }
- }
- }
- @mixin secondary-indeterminate-scale-keyframes_ {
- @keyframes mdc-linear-progress-secondary-indeterminate-scale {
- 0% {
- animation-timing-function: cubic-bezier(
- 0.205028,
- 0.057051,
- 0.57661,
- 0.453971
- );
- transform: scaleX(0.08);
- }
- 19.15% {
- animation-timing-function: cubic-bezier(
- 0.152313,
- 0.196432,
- 0.648374,
- 1.004315
- );
- transform: scaleX(0.457104);
- }
- 44.15% {
- animation-timing-function: cubic-bezier(
- 0.257759,
- -0.003163,
- 0.211762,
- 1.38179
- );
- transform: scaleX(0.72796);
- }
- 100% {
- transform: scaleX(0.08);
- }
- }
- }
- @mixin primary-indeterminate-translate-reverse-keyframes_ {
- @keyframes mdc-linear-progress-primary-indeterminate-translate-reverse {
- 0% {
- transform: translateX(0);
- }
- 20% {
- animation-timing-function: cubic-bezier(0.5, 0, 0.701732, 0.495819);
- transform: translateX(0);
- }
- 59.15% {
- animation-timing-function: cubic-bezier(
- 0.302435,
- 0.381352,
- 0.55,
- 0.956352
- );
- $primary-half: custom-properties.create(
- --mdc-linear-progress-primary-half-neg,
- -83.67142%
- );
- @include apply-translate_($primary-half);
- }
- 100% {
- $primary-full: custom-properties.create(
- --mdc-linear-progress-primary-full-neg,
- -200.611057%
- );
- @include apply-translate_($primary-full);
- }
- }
- }
- @mixin secondary-indeterminate-translate-reverse-keyframes_ {
- @keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse {
- 0% {
- animation-timing-function: cubic-bezier(0.15, 0, 0.515058, 0.409685);
- transform: translateX(0);
- }
- 25% {
- animation-timing-function: cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);
- $secondary-quarter: custom-properties.create(
- --mdc-linear-progress-secondary-quarter-neg,
- -37.651913%
- );
- @include apply-translate_($secondary-quarter);
- }
- 48.35% {
- animation-timing-function: cubic-bezier(0.4, 0.627035, 0.6, 0.902026);
- $secondary-half: custom-properties.create(
- --mdc-linear-progress-secondary-half-neg,
- -84.386165%
- );
- @include apply-translate_($secondary-half);
- }
- 100% {
- $secondary-full: custom-properties.create(
- --mdc-linear-progress-secondary-full-neg,
- -160.277782%
- );
- @include apply-translate_($secondary-full);
- }
- }
- }
- @mixin buffering-reverse-keyframes_ {
- @keyframes mdc-linear-progress-buffering-reverse {
- from {
- @include rtl.ignore-next-line();
- transform: translateX(-10px);
- }
- }
- }
- @mixin apply-translate_($value) {
- @include theme.property(
- transform,
- translateX(value),
- $replace: (value: $value),
- $gss: (noflip: true)
- );
- }
|