CommonProgressBar.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <!-- Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. export interface Props {
  4. value?: string
  5. max?: string
  6. }
  7. defineProps<Props>()
  8. </script>
  9. <template>
  10. <progress
  11. class="progress"
  12. tabindex="0"
  13. :aria-label="$t('Indicating progress')"
  14. :value="value"
  15. :max="max"
  16. />
  17. </template>
  18. <style scoped>
  19. [data-them='dark'] .progress {
  20. background-color: var(--color-gray-700);
  21. &:indeterminate::-moz-progress-bar {
  22. background-color: var(--color-gray-700);
  23. }
  24. }
  25. .progress {
  26. height: 0.5rem;
  27. overflow: clip;
  28. border-radius: 1rem;
  29. background-color: var(--color-blue-200);
  30. &::-moz-progress-bar {
  31. border-radius: 0;
  32. background-color: var(--color-blue-800);
  33. }
  34. &::-webkit-progress-bar {
  35. border-radius: 1rem;
  36. }
  37. &::-webkit-progress-value {
  38. border-radius: 0;
  39. background-color: var(--color-blue-800);
  40. transition: width 1s;
  41. }
  42. &:indeterminate {
  43. --progress-color: var(--color-blue-800);
  44. }
  45. &:indeterminate {
  46. background-image: repeating-linear-gradient(
  47. 90deg,
  48. var(--progress-color) -1%,
  49. var(--progress-color) 10%,
  50. transparent 10%,
  51. transparent 90%
  52. );
  53. background-size: 200%;
  54. background-position-x: 15%;
  55. animation: progress-loading 5s ease-in-out infinite;
  56. }
  57. &:indeterminate::-moz-progress-bar {
  58. background-color: var(--color-blue-200);
  59. background-image: repeating-linear-gradient(
  60. 90deg,
  61. var(--progress-color) -1%,
  62. var(--progress-color) 10%,
  63. transparent 10%,
  64. transparent 90%
  65. );
  66. background-size: 200%;
  67. background-position-x: 15%;
  68. animation: progress-loading 5s ease-in-out infinite;
  69. }
  70. @keyframes progress-loading {
  71. 50% {
  72. background-position-x: -115%;
  73. }
  74. }
  75. }
  76. </style>