diff --git a/package-lock.json b/package-lock.json index f38e1ed..a50d7ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "@mdi/font": "^7.4.47", "apexcharts": "^5.10.5", "chart.js": "^4.5.1", - "echarts": "^6.0.0", + "echarts": "^6.1.0", "flag-icons": "^7.5.0", "maplibre-gl": "^5.22.0", "pinia": "^3.0.4", diff --git a/package.json b/package.json index 8fa1b19..8eb3f3c 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@mdi/font": "^7.4.47", "apexcharts": "^5.10.5", "chart.js": "^4.5.1", - "echarts": "^6.0.0", + "echarts": "^6.1.0", "flag-icons": "^7.5.0", "maplibre-gl": "^5.22.0", "pinia": "^3.0.4", diff --git a/resources/js/Components/FlightsGoneBy/Charts/AllianceChart.vue b/resources/js/Components/FlightsGoneBy/Charts/AllianceChart.vue new file mode 100644 index 0000000..51884fa --- /dev/null +++ b/resources/js/Components/FlightsGoneBy/Charts/AllianceChart.vue @@ -0,0 +1,20 @@ + + + diff --git a/resources/js/Components/FlightsGoneBy/Charts/ChartTypes/DonutChart.vue b/resources/js/Components/FlightsGoneBy/Charts/ChartTypes/DonutChart.vue index 31277e4..9fc3796 100644 --- a/resources/js/Components/FlightsGoneBy/Charts/ChartTypes/DonutChart.vue +++ b/resources/js/Components/FlightsGoneBy/Charts/ChartTypes/DonutChart.vue @@ -1,80 +1,283 @@ @@ -82,6 +285,7 @@ const chartOptions = computed(() => ({ .chart-wrap { display: flex; flex-direction: column; + width: 100%; gap: 4px; } @@ -93,11 +297,99 @@ const chartOptions = computed(() => ({ letter-spacing: 0.08em; } -.chart-hidden { - visibility: hidden; +.donut-container { + position: relative; + width: 100%; } -:deep(svg) { - outline: none; +.chart { + width: 100%; + height: 100%; +} + +.center-label { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; + pointer-events: none; +} + +.center-label-title { + font-size: 13px; + color: #556677; +} + +.center-label-value { + font-size: 22px; + font-weight: 500; + color: #e0e6f0; +} + +.slice-label { + position: absolute; + top: 50%; + left: 50%; + color: #fff; + font-size: 11px; + font-weight: 500; + white-space: nowrap; + pointer-events: none; +} + +.toggle-row { + display: flex; + justify-content: center; + gap: 8px; + margin: 4px 0 4px; +} + +.toggle-btn { + background: transparent; + border: 1px solid #2a3a5c; + color: #778899; + border-radius: 20px; + padding: 5px 12px; + font-size: 11px; + cursor: pointer; +} + +.toggle-btn.active { + background: #1e3a6a; + color: #e0e6f0; + border-color: #1e3a6a; +} + +.ring-labels { + display: flex; + justify-content: center; + gap: 20px; + font-size: 11px; + color: #556677; + margin-bottom: 4px; +} + +.legend { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 16px; + margin-top: 8px; +} + +.legend-item { + display: flex; + align-items: center; + gap: 6px; + font-size: 12px; + color: #778899; +} + +.dot { + width: 8px; + height: 8px; + border-radius: 2px; + display: inline-block; } diff --git a/resources/js/Components/FlightsGoneBy/Charts/ContinentsChart.vue b/resources/js/Components/FlightsGoneBy/Charts/ContinentsChart.vue index 9047660..298ee1c 100644 --- a/resources/js/Components/FlightsGoneBy/Charts/ContinentsChart.vue +++ b/resources/js/Components/FlightsGoneBy/Charts/ContinentsChart.vue @@ -1,18 +1,22 @@ + - diff --git a/resources/js/Components/FlightsGoneBy/Charts/FlightClassChart.vue b/resources/js/Components/FlightsGoneBy/Charts/FlightClassChart.vue index 2e4a4ae..6b7078e 100644 --- a/resources/js/Components/FlightsGoneBy/Charts/FlightClassChart.vue +++ b/resources/js/Components/FlightsGoneBy/Charts/FlightClassChart.vue @@ -11,6 +11,8 @@ const props = defineProps<{ :height="280" :labels="flightStats.classes.value.labels" :series="flightStats.classes.value.series" + total-label="Flight Classes" + center-mode="count" />