PersonalSettingOverviewOrder.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <!-- Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. import Draggable from 'vuedraggable'
  4. export interface OverviewItem {
  5. id: string
  6. name: string
  7. }
  8. const localValue = defineModel<OverviewItem[]>('modelValue')
  9. </script>
  10. <template>
  11. <div v-if="localValue" class="rounded-lg bg-blue-200 dark:bg-gray-700">
  12. <!-- :TODO if we add proper a11y support -->
  13. <!-- <span class="hidden" aria-live="assertive" >{{assistiveText}}</span>-->
  14. <span id="drag-and-drop-ticket-overviews" class="sr-only">
  15. {{ $t('Drag and drop to reorder ticket overview list items.') }}
  16. </span>
  17. <div class="flex flex-col p-1">
  18. <Draggable
  19. v-model="localValue"
  20. :animation="100"
  21. draggable=".draggable"
  22. role="list"
  23. ghost-class="invisible"
  24. item-key="id"
  25. >
  26. <template #item="{ element }">
  27. <div
  28. role="listitem"
  29. draggable="true"
  30. aria-describedby="drag-and-drop-ticket-overviews"
  31. class="draggable flex min-h-9 cursor-grab items-start gap-2.5 p-2.5 active:cursor-grabbing"
  32. >
  33. <CommonIcon
  34. class="fill-stone-200 dark:fill-neutral-500"
  35. name="grip-vertical"
  36. size="tiny"
  37. />
  38. <CommonLabel class="w-full text-black dark:text-white">
  39. {{ $t(element.name) }}
  40. </CommonLabel>
  41. </div>
  42. </template>
  43. </Draggable>
  44. </div>
  45. </div>
  46. </template>