CommonLoader.vue 871 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <!-- Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. /* eslint-disable vue/no-v-html */
  4. import { markup } from '#shared/utils/markup.ts'
  5. interface Props {
  6. loading?: boolean
  7. error?: string | null
  8. }
  9. defineProps<Props>()
  10. </script>
  11. <script lang="ts">
  12. export default {
  13. inheritAttrs: false,
  14. }
  15. </script>
  16. <template>
  17. <Transition name="fade" mode="out-in">
  18. <div
  19. v-if="loading"
  20. v-bind="$attrs"
  21. class="flex items-center justify-center"
  22. role="status"
  23. >
  24. <CommonIcon
  25. class="fill-yellow-300"
  26. name="spinner"
  27. animation="spin"
  28. :label="__('Loading…')"
  29. />
  30. </div>
  31. <CommonAlert v-else-if="error" v-bind="$attrs" variant="danger">
  32. <span v-html="markup($t(error))" />
  33. </CommonAlert>
  34. <slot v-else />
  35. </Transition>
  36. </template>