loader.css 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. @charset "UTF-8";
  2. /* mixins & extensions */
  3. @keyframes in {
  4. 0% {
  5. opacity: 0;
  6. }
  7. 100% {
  8. opacity: 1;
  9. }
  10. }
  11. @keyframes in-down {
  12. 0% {
  13. opacity: 0;
  14. transform: translate3D(0, -5px, 0);
  15. }
  16. 100% {
  17. opacity: 1;
  18. transform: translate3D(0, 0, 0);
  19. }
  20. }
  21. @keyframes in-up {
  22. 0% {
  23. opacity: 0;
  24. transform: translate3D(0, 5px, 0);
  25. }
  26. 100% {
  27. opacity: 1;
  28. transform: translate3D(0, 0, 0);
  29. }
  30. }
  31. @keyframes in-scale {
  32. 0% {
  33. opacity: 0;
  34. transform: scale3D(0.95, 0.95, 1);
  35. }
  36. 100% {
  37. opacity: 1;
  38. transform: scale3D(1, 1, 1);
  39. }
  40. }
  41. :root {
  42. --calcite-animation-timing: calc(150ms * var(--calcite-internal-duration-factor));
  43. --calcite-internal-duration-factor: var(--calcite-duration-factor, 1);
  44. --calcite-internal-animation-timing-fast: calc(100ms * var(--calcite-internal-duration-factor));
  45. --calcite-internal-animation-timing-medium: calc(200ms * var(--calcite-internal-duration-factor));
  46. --calcite-internal-animation-timing-slow: calc(300ms * var(--calcite-internal-duration-factor));
  47. }
  48. .calcite-animate {
  49. opacity: 0;
  50. animation-fill-mode: both;
  51. animation-duration: var(--calcite-animation-timing);
  52. }
  53. .calcite-animate__in {
  54. animation-name: in;
  55. }
  56. .calcite-animate__in-down {
  57. animation-name: in-down;
  58. }
  59. .calcite-animate__in-up {
  60. animation-name: in-up;
  61. }
  62. .calcite-animate__in-scale {
  63. animation-name: in-scale;
  64. }
  65. @media (prefers-reduced-motion: reduce) {
  66. :root {
  67. --calcite-internal-duration-factor: 0.01;
  68. }
  69. }
  70. /**
  71. * Currently only used in Checkbox.
  72. */
  73. :root {
  74. --calcite-floating-ui-transition: var(--calcite-animation-timing);
  75. }
  76. :host([hidden]) {
  77. display: none;
  78. }
  79. /**
  80. * CSS Custom Properties
  81. *
  82. * These properties can be overridden using the component's tag as selector.
  83. *
  84. * @prop --calcite-loader-font-size: Specifies the font size of the loading percentage when type is `"determinate"`.
  85. * @prop --calcite-loader-size: The width and height of a non-inline loader.
  86. * @prop --calcite-loader-size-inline: The width and height of an inline loader.
  87. */
  88. :host{
  89. position: relative;
  90. margin-inline: auto;
  91. display: none;
  92. align-items: center;
  93. justify-content: center;
  94. opacity: 1;
  95. min-block-size: var(--calcite-loader-size);
  96. font-size: var(--calcite-loader-font-size);
  97. stroke: var(--calcite-ui-brand);
  98. stroke-width: 3;
  99. fill: none;
  100. transform: scale(1, 1);
  101. animation: loader-color-shift calc(var(--calcite-internal-animation-timing-slow) * 2) alternate-reverse infinite linear;
  102. padding-block: var(--calcite-loader-padding, 4rem);
  103. }
  104. :host([scale=s]) {
  105. --calcite-loader-font-size: var(--calcite-font-size--2);
  106. --calcite-loader-size: 2rem;
  107. --calcite-loader-size-inline: 0.75rem;
  108. }
  109. :host([scale=m]) {
  110. --calcite-loader-font-size: var(--calcite-font-size-0);
  111. --calcite-loader-size: 4rem;
  112. --calcite-loader-size-inline: 1rem;
  113. }
  114. :host([scale=l]) {
  115. --calcite-loader-font-size: var(--calcite-font-size-2);
  116. --calcite-loader-size: 6rem;
  117. --calcite-loader-size-inline: 1.5rem;
  118. }
  119. :host([no-padding]){
  120. padding-block: 0px;
  121. }
  122. :host{
  123. display: none;
  124. }
  125. :host([active]){
  126. display: flex;
  127. }
  128. .loader__text{
  129. display: block;
  130. text-align: center;
  131. font-size: var(--calcite-font-size--2);
  132. line-height: 1rem;
  133. color: var(--calcite-ui-text-1);
  134. margin-block-start: calc(var(--calcite-loader-size) + 1.5rem);
  135. }
  136. .loader__percentage{
  137. position: absolute;
  138. display: block;
  139. text-align: center;
  140. color: var(--calcite-ui-text-1);
  141. font-size: var(--calcite-loader-font-size);
  142. inline-size: var(--calcite-loader-size);
  143. inset-inline-start: 50%;
  144. margin-inline-start: calc(var(--calcite-loader-size) / 2 * -1);
  145. line-height: 0.25;
  146. transform: scale(1, 1);
  147. }
  148. .loader__svgs{
  149. position: absolute;
  150. overflow: visible;
  151. opacity: 1;
  152. inline-size: var(--calcite-loader-size);
  153. block-size: var(--calcite-loader-size);
  154. inset-inline-start: 50%;
  155. margin-inline-start: calc(var(--calcite-loader-size) / 2 * -1);
  156. transform: scale(1, 1);
  157. }
  158. .loader__svg{
  159. position: absolute;
  160. inset-block-start: 0px;
  161. transform-origin: center;
  162. overflow: visible;
  163. inset-inline-start: 0;
  164. inline-size: var(--calcite-loader-size);
  165. block-size: var(--calcite-loader-size);
  166. animation-iteration-count: infinite;
  167. animation-timing-function: linear;
  168. animation-name: loader-clockwise;
  169. }
  170. @supports (display: grid) {
  171. .loader__svg--1 {
  172. animation-name: loader-offset-1;
  173. }
  174. .loader__svg--2 {
  175. animation-name: loader-offset-2;
  176. }
  177. .loader__svg--3 {
  178. animation-name: loader-offset-3;
  179. }
  180. }
  181. :host([type=determinate]){
  182. animation: none;
  183. stroke: var(--calcite-ui-border-3);
  184. }
  185. :host([type=determinate]) .loader__svg--3{
  186. animation: none;
  187. stroke: var(--calcite-ui-brand);
  188. stroke-dasharray: 150.79632;
  189. transform: rotate(-90deg);
  190. transition: all var(--calcite-internal-animation-timing-fast) linear;
  191. }
  192. :host([inline]){
  193. position: relative;
  194. margin: 0px;
  195. animation: none;
  196. stroke: currentColor;
  197. stroke-width: 2;
  198. padding-block: 0px;
  199. block-size: var(--calcite-loader-size-inline);
  200. min-block-size: var(--calcite-loader-size-inline);
  201. inline-size: var(--calcite-loader-size-inline);
  202. margin-inline-end: calc(var(--calcite-loader-size-inline) * 0.5);
  203. vertical-align: calc(var(--calcite-loader-size-inline) * -1 * 0.2);
  204. }
  205. :host([active][inline]){
  206. display: inline-block;
  207. }
  208. :host([inline]) .loader__svgs{
  209. inset-block-start: 0px;
  210. margin: 0px;
  211. inset-inline-start: 0;
  212. inline-size: var(--calcite-loader-size-inline);
  213. block-size: var(--calcite-loader-size-inline);
  214. }
  215. :host([inline]) .loader__svg {
  216. inline-size: var(--calcite-loader-size-inline);
  217. block-size: var(--calcite-loader-size-inline);
  218. }
  219. :host([complete]){
  220. opacity: 0;
  221. transform: scale(0.75, 0.75);
  222. transform-origin: center;
  223. transition: opacity var(--calcite-internal-animation-timing-medium) linear 1000ms, transform var(--calcite-internal-animation-timing-medium) linear 1000ms;
  224. }
  225. :host([complete]) .loader__svgs{
  226. opacity: 0;
  227. transform: scale(0.75, 0.75);
  228. transform-origin: center;
  229. transition: opacity calc(180ms * var(--calcite-internal-duration-factor)) linear 800ms, transform calc(180ms * var(--calcite-internal-duration-factor)) linear 800ms;
  230. }
  231. :host([complete]) .loader__percentage {
  232. color: var(--calcite-ui-brand);
  233. transform: scale(1.05, 1.05);
  234. transform-origin: center;
  235. transition: color var(--calcite-internal-animation-timing-medium) linear, transform var(--calcite-internal-animation-timing-medium) linear;
  236. }
  237. /**
  238. Segment variables
  239. - i index (1-3)
  240. - size length of the segment (0 - 100)
  241. - growth how much the segment grows during the animation
  242. (size + growth should not exceed 100)
  243. - duration how long the segment takes to rotate 360° (seconds)
  244. */
  245. .loader__svg--1 {
  246. stroke-dasharray: 27.9252444444% 139.6262222222%;
  247. animation-duration: calc(var(--calcite-internal-animation-timing-slow) * 2.4);
  248. }
  249. @keyframes loader-offset-1 {
  250. 0% {
  251. stroke-dasharray: 27.9252444444% 251.3272%;
  252. stroke-dashoffset: 0;
  253. }
  254. 50% {
  255. stroke-dasharray: 139.6262222222% 139.6262222222%;
  256. stroke-dashoffset: -83.7757333333%;
  257. }
  258. 100% {
  259. stroke-dasharray: 27.9252444444% 251.3272%;
  260. stroke-dashoffset: -279.2524444444%;
  261. }
  262. }
  263. .loader__svg--2 {
  264. stroke-dasharray: 55.8504888889% 139.6262222222%;
  265. animation-duration: calc(var(--calcite-internal-animation-timing-slow) * 3.2);
  266. }
  267. @keyframes loader-offset-2 {
  268. 0% {
  269. stroke-dasharray: 55.8504888889% 223.4019555556%;
  270. stroke-dashoffset: 0;
  271. }
  272. 50% {
  273. stroke-dasharray: 139.6262222222% 139.6262222222%;
  274. stroke-dashoffset: -97.7383555556%;
  275. }
  276. 100% {
  277. stroke-dasharray: 55.8504888889% 223.4019555556%;
  278. stroke-dashoffset: -279.2524444444%;
  279. }
  280. }
  281. .loader__svg--3 {
  282. stroke-dasharray: 13.9626222222% 139.6262222222%;
  283. animation-duration: calc(var(--calcite-internal-animation-timing-slow) * 3.867);
  284. }
  285. @keyframes loader-offset-3 {
  286. 0% {
  287. stroke-dasharray: 13.9626222222% 265.2898222222%;
  288. stroke-dashoffset: 0;
  289. }
  290. 50% {
  291. stroke-dasharray: 139.6262222222% 139.6262222222%;
  292. stroke-dashoffset: -76.7944222222%;
  293. }
  294. 100% {
  295. stroke-dasharray: 13.9626222222% 265.2898222222%;
  296. stroke-dashoffset: -279.2524444444%;
  297. }
  298. }
  299. @keyframes loader-color-shift {
  300. 0% {
  301. stroke: var(--calcite-ui-brand);
  302. }
  303. 33% {
  304. stroke: var(--calcite-ui-brand-press);
  305. }
  306. 66% {
  307. stroke: var(--calcite-ui-brand-hover);
  308. }
  309. 100% {
  310. stroke: var(--calcite-ui-brand);
  311. }
  312. }
  313. @keyframes loader-clockwise {
  314. 0% {
  315. transform: rotate(0deg);
  316. }
  317. 100% {
  318. transform: rotate(360deg);
  319. }
  320. }