All files / src/components DangerZone.vue

100% Statements 6/6
100% Branches 6/6
100% Functions 1/1
100% Lines 5/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83  79x 4x 2x                                         70x   70x                                                                                                                
<template>
  <div class="danger-zone-wrapper mt-4">
    <div class="danger-card">
      <button type="button" class="danger-card-header" @click="isOpen = !isOpen">
        <span>
          <font-awesome-icon icon="fa-solid fa-triangle-exclamation" class="me-2" />
          {{ t('common.dangerZone') }}
        </span>
        <font-awesome-icon
          :icon="isOpen ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'"
          class="ms-2 small"
        />
      </button>
      <div v-if="isOpen" class="danger-card-body">
        <slot />
      </div>
    </div>
  </div>
</template>
 
<script setup lang="ts">
import { ref } from 'vue'
import { useUILanguage } from '@/composables/useUILanguage'
 
const { t } = useUILanguage()
 
const isOpen = ref(false)
</script>
 
<style scoped>
.danger-zone-wrapper {
  --danger-card-bg: var(--bw-surface);
  --danger-card-border: #dc3545;
  --danger-card-header-bg: #fff0f0;
  --danger-card-header-hover-bg: #fde8e8;
  --danger-card-header-text: #dc3545;
}
 
:global([data-bs-theme='dark'] .danger-zone-wrapper) {
  --danger-card-bg: #2a1f24;
  --danger-card-border: #c94655;
  --danger-card-header-bg: #3a252d;
  --danger-card-header-hover-bg: #4a2c36;
  --danger-card-header-text: #c94655;
}
 
.danger-card {
  border: 1px solid var(--danger-card-border);
  border-radius: 0.375rem;
  background: var(--danger-card-bg);
}
 
.danger-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  background: var(--danger-card-header-bg);
  color: var(--danger-card-header-text);
  font-weight: 600;
  padding: 0.75rem 1rem;
  border: none;
  border-radius: 0.375rem;
  cursor: pointer;
  text-align: left;
  transition: background 0.15s;
}
 
.danger-card-header:hover {
  background: var(--danger-card-header-hover-bg);
}
 
.danger-card-header:has(+ .danger-card-body) {
  border-bottom: 1px solid color-mix(in srgb, var(--bw-border) 45%, #dc3545 55%);
  border-radius: 0.375rem 0.375rem 0 0;
}
 
.danger-card-body {
  padding: 1rem;
  background: var(--danger-card-bg);
}
</style>