src/components/base/animated_icon/animated_icon.scss (437 lines of code) (raw):

.gl-animated-icon { display: flex; fill: none !important; stroke: currentColor !important; * { transition: all $gl-transition-duration-medium $gl-easing-out-cubic; // 'all' will also animate the visibility property, which makes the icon disappear later than it should transition-property: color, fill, opacity, transform, rotate, translate, scale, stroke-dasharray, stroke-dashoffset; animation-duration: $gl-transition-duration-slow; animation-timing-function: $gl-easing-out-cubic; animation-fill-mode: both; @include gl-prefers-reduced-motion-transition; @include gl-prefers-reduced-motion-animation; } } /* * * * * * * * * * * * * * * * * * Color variants. * * * * * * * * * * * * * * * * */ .gl-animated-icon-default { color: var(--gl-icon-color-default); } .gl-animated-icon-subtle { color: var(--gl-icon-color-subtle); } .gl-animated-icon-strong { color: var(--gl-icon-color-strong); } .gl-animated-icon-disabled { color: var(--gl-icon-color-disabled); } .gl-animated-icon-link { color: var(--gl-icon-color-link); } .gl-animated-icon-info { color: var(--gl-icon-color-info); } .gl-animated-icon-warning { color: var(--gl-icon-color-warning); } .gl-animated-icon-danger { color: var(--gl-icon-color-danger); } .gl-animated-icon-success { color: var(--gl-icon-color-success); } /* * * * * * * * * * * * * * * * * * animated_chevron_lg_right_down_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-chevron-lg-right-down-arrow { transform-origin: center center; } /* on state */ .gl-animated-icon-on { .gl-animated-chevron-lg-right-down-arrow { rotate: 90deg; } } /* off state */ .gl-animated-icon-off { .gl-animated-chevron-lg-right-down-arrow { rotate: 0deg; } } /* * * * * * * * * * * * * * * * * * animated_chevron_right_down_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-chevron-right-down-arrow { transform-origin: center center; } /* on state */ .gl-animated-icon-on { .gl-animated-chevron-right-down-arrow { rotate: 90deg; } } /* off state */ .gl-animated-icon-off { .gl-animated-chevron-right-down-arrow { rotate: 0deg; } } /* * * * * * * * * * * * * * * * * * animated_chevron_lg_down_up_icon.vue * * * * * * * * * * * * * * * * */ /* on state */ .gl-animated-icon-on { .gl-animated-chevron-lg-down-up-arrow-left-line, .gl-animated-chevron-lg-down-up-arrow-right-line { translate: 50% 31.2%; scale: 1 1.01; transition: all $gl-transition-duration-medium $gl-easing-out-cubic, scale $gl-transition-duration-medium linear(1 0%, -29 16%, 1 100%); } .gl-animated-chevron-lg-down-up-arrow-left-line { rotate: 45deg; } .gl-animated-chevron-lg-down-up-arrow-right-line { rotate: -45deg; } } /* off state */ .gl-animated-icon-off { .gl-animated-chevron-lg-down-up-arrow-left-line, .gl-animated-chevron-lg-down-up-arrow-right-line { translate: 50% 68.8%; scale: 1 1; transition: all $gl-transition-duration-medium $gl-easing-out-cubic, scale $gl-transition-duration-medium linear(1 0%, 29 16%, 1 100%); } .gl-animated-chevron-lg-down-up-arrow-left-line { rotate: 135deg; } .gl-animated-chevron-lg-down-up-arrow-right-line { rotate: -135deg; } } /* * * * * * * * * * * * * * * * * * animated_chevron_down_up_icon.vue * * * * * * * * * * * * * * * * */ /* on state */ .gl-animated-icon-on { .gl-animated-chevron-down-up-arrow-left-line, .gl-animated-chevron-down-up-arrow-right-line { translate: 50% 37.6%; scale: 1 1.01; transition: all $gl-transition-duration-medium $gl-easing-out-cubic, scale $gl-transition-duration-medium linear(1 0%, -27 16%, 1 100%); } .gl-animated-chevron-down-up-arrow-left-line { rotate: 45deg; } .gl-animated-chevron-down-up-arrow-right-line { rotate: -45deg; } } /* off state */ .gl-animated-icon-off { .gl-animated-chevron-down-up-arrow-left-line, .gl-animated-chevron-down-up-arrow-right-line { translate: 50% 62.6%; scale: 1 1; transition: all $gl-transition-duration-medium $gl-easing-out-cubic, scale $gl-transition-duration-medium linear(1 0%, 27 16%, 1 100%); } .gl-animated-chevron-down-up-arrow-left-line { rotate: 135deg; } .gl-animated-chevron-down-up-arrow-right-line { rotate: -135deg; } } /* * * * * * * * * * * * * * * * * * animated_duo_chat_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-duo-chat-small-sparkle, .gl-animated-duo-chat-big-sparkle { transform-origin: 50% 50%; } /* on state */ .gl-animated-icon-on .gl-animated-duo-chat-small-sparkle, .gl-animated-icon-on .gl-animated-duo-chat-big-sparkle { animation-name: gl-animated-duo-chat-sparkle; animation-duration: 2s; animation-iteration-count: infinite; } .gl-animated-icon-on .gl-animated-duo-chat-small-sparkle { animation-delay: -0.5s; } .gl-animated-icon-on .gl-animated-duo-chat-big-sparkle { animation-delay: -1.5s; } @keyframes gl-animated-duo-chat-sparkle { 0% { translate: -45% -45%; scale: 0; } 20%, 45% { translate: -31% -31%; scale: 1; } 50%, 80% { translate: 0 -6%; scale: 0.8; } 100% { translate: 0 -6%; scale: 0; } } /* off state */ .gl-animated-duo-chat-small-sparkle { translate: 0 -6%; scale: 0.8; } .gl-animated-duo-chat-big-sparkle { translate: -31% -31%; scale: 1; } @media (prefers-reduced-motion) { .gl-animated-icon-on .gl-animated-duo-chat-small-sparkle, .gl-animated-icon-on .gl-animated-duo-chat-big-sparkle { animation-name: none; } } /* * * * * * * * * * * * * * * * * * animated_loader_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-icon-on .gl-animated-loader-shape { animation: gl-animated-loader-on 1.8s $gl-easing-default infinite; } .gl-animated-icon-on .gl-animated-loader-shape-1 { animation-delay: 0.15s; } .gl-animated-icon-on .gl-animated-loader-shape-2 { animation-delay: 0.3s; } @keyframes gl-animated-loader-on { 30% { translate: 0 -30%; } 60% { translate: 0 2%; } 65% { translate: 0 0; } } /* * * * * * * * * * * * * * * * * * animated_notifications_icon.vue * * * * * * * * * * * * * * * * */ /* on state */ .gl-animated-icon-on .gl-animated-notifications-bottom-part { stroke-dasharray: 80% 100%; stroke-dashoffset: -43%; } .gl-animated-icon-on .gl-animated-notifications-top-part { stroke-dashoffset: 0; } .gl-animated-icon-on .gl-animated-notifications-line { stroke-dasharray: 115% 120%; stroke-dashoffset: 0; } /* off state */ .gl-animated-icon-off .gl-animated-notifications-bottom-part { stroke-dasharray: 145% 100%; stroke-dashoffset: 0; } .gl-animated-icon-off .gl-animated-notifications-top-part { stroke-dasharray: 100% 100%; stroke-dashoffset: 0; } .gl-animated-icon-off .gl-animated-notifications-line { stroke-dasharray: 115% 120%; stroke-dashoffset: -111%; } /* * * * * * * * * * * * * * * * * * animated_sidebar_icon.vue * * * * * * * * * * * * * * * * */ /* on state */ .gl-animated-icon-on .gl-animated-sidebar-line { translate: 1% 0; transition-timing-function: linear(0 0%, 5 60%, 1 100%); } /* off state */ .gl-animated-icon-off .gl-animated-sidebar-line { translate: -1% 0; transition-timing-function: linear(0 0%, 5 60%, 1 100%); } /* * * * * * * * * * * * * * * * * * animated_smile_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-smile-big-smile { transform-origin: 50% 70%; } .gl-animated-smile-eyes circle { fill: currentColor !important; } /* on state */ .gl-animated-icon-on .gl-animated-smile-eyes { transition-timing-function: linear(0 0%, -1 20%, 1 100%); translate: 0 -6%; } .gl-animated-icon-on .gl-animated-smile-big-smile { scale: 1; transition-delay: 0.1s; } .gl-animated-icon-on .gl-animated-smile-slight-smile { stroke-dasharray: 10% 100%; stroke-dashoffset: -8%; } /* off state */ .gl-animated-icon-off .gl-animated-smile-eyes { translate: 0 0; } .gl-animated-icon-off .gl-animated-smile-big-smile { scale: 0.1; } .gl-animated-icon-off .gl-animated-smile-slight-smile { stroke-dasharray: 30% 100%; stroke-dashoffset: 0; } /* * * * * * * * * * * * * * * * * * animated_sort_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-sort-icon { overflow: visible; } /* off state */ .gl-animated-icon-off .gl-animated { animation-name: gl-animated-star-off; } .gl-animated-sort-arrow-left, .gl-animated-sort-arrow-right { transform-origin: 18.7% 6.7%; } .gl-animated-icon-off .gl-animated-sort-arrow-left, .gl-animated-icon-off .gl-animated-sort-arrow-right { rotate: 0deg; translate: 0 10%; } .gl-animated-icon-off .gl-animated-sort-long-line-off, .gl-animated-icon-off .gl-animated-sort-medium-line-off, .gl-animated-icon-off .gl-animated-sort-short-line-off { opacity: 0; transition-delay: -1s; } .gl-animated-icon-off .gl-animated-sort-long-line-on { transition-delay: 0.05s; } .gl-animated-icon-off .gl-animated-sort-medium-line-on { transition-delay: 0.1s; } .gl-animated-icon-off .gl-animated-sort-short-line-on { transition-delay: 0.15s; } .gl-animated-icon-off .gl-animated-sort-line { translate: 0 -7%; } /* on state */ .gl-animated-icon-on .gl-animated-sort-arrow-left { rotate: 90deg; translate: 0 77%; } .gl-animated-icon-on .gl-animated-sort-arrow-right { rotate: -90deg; translate: 0 77%; } .gl-animated-icon-on .gl-animated-sort-long-line-on, .gl-animated-icon-on .gl-animated-sort-medium-line-on, .gl-animated-icon-on .gl-animated-sort-short-line-on { opacity: 0; transition-delay: -1s; } .gl-animated-icon-on .gl-animated-sort-long-line-off { transition-delay: 0.15s; } .gl-animated-icon-on .gl-animated-sort-medium-line-off { transition-delay: 0.1s; } .gl-animated-icon-on .gl-animated-sort-short-line-off { transition-delay: 0.05s; } .gl-animated-icon-on .gl-animated-sort-line { translate: 0 0; } /* * * * * * * * * * * * * * * * * * animated_star_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-star-shape { transform-origin: center center; } /* on state */ .gl-animated-icon-on .gl-animated-star-shape { animation-name: gl-animated-star-on; } @keyframes gl-animated-star-on { 0%, 25% { fill: transparent; } 50% { fill: currentColor; } 100% { fill: currentColor; } 0%, 100% { scale: 1; } 25% { scale: 0.7; } 50% { scale: 1.1; } } /* off state */ .gl-animated-icon-off .gl-animated-star-shape { animation-name: gl-animated-star-off; } @keyframes gl-animated-star-off { 0%, 25% { fill: currentColor; } 50% { fill: transparent; } 100% { fill: transparent; } 0%, 100% { scale: 1; } 25% { scale: 0.7; } 50% { scale: 1.1; } } /* * * * * * * * * * * * * * * * * * animated_todo_icon.vue * * * * * * * * * * * * * * * * */ /* on state */ .gl-animated-icon-on .gl-animated-todo-box { stroke-dasharray: 240% 100%; stroke-dashoffset: -19%; } .gl-animated-icon-on .gl-animated-todo-plus-line { stroke-dasharray: 0% 100%; stroke-dashoffset: -14%; translate: 14% 7%; } .gl-animated-icon-on .gl-animated-todo-check { stroke-dasharray: 76% 100%; stroke-dashoffset: 0; } /* off state */ .gl-animated-icon-off .gl-animated-todo-box { stroke-dasharray: 215% 100%; stroke-dashoffset: -12%; } .gl-animated-icon-off .gl-animated-todo-plus-line { stroke-dasharray: 30% 100%; stroke-dashoffset: 0; translate: 0 0; } .gl-animated-icon-off .gl-animated-todo-check { stroke-dasharray: 76% 100%; stroke-dashoffset: -76%; } /* * * * * * * * * * * * * * * * * * animated_upload_icon.vue * * * * * * * * * * * * * * * * */ .gl-animated-upload-line { stroke-dasharray: 70% 100%; } /* on state */ .gl-animated-icon-on .gl-animated-upload-line { animation-name: gl-animated-upload-line; animation-duration: 2s; animation-iteration-count: infinite; } @keyframes gl-animated-upload-line { 0%, 60%, 100% { translate: 0 0; stroke-dashoffset: 0; } 10% { translate: 0% 20%; stroke-dashoffset: -20%; } 40% { translate: 0 -10%; stroke-dashoffset: 0; } 55% { translate: 0 5%; stroke-dashoffset: -5%; } } .gl-animated-icon-on .gl-animated-upload-arrow { animation-name: gl-animated-upload-arrow; animation-duration: 2s; animation-iteration-count: infinite; } @keyframes gl-animated-upload-arrow { 0%, 60%, 100% { translate: 0 0; } 10% { translate: 0 20%; } 40% { translate: 0 -8%; } 55% { translate: 0 8%; } }