049eaa1807
- Add SoundManager with Web Audio API synthesized sounds (stroke error, drawing complete, session complete) - Add sound effects toggle in settings (persisted via localStorage) - Improve stroke recognition: curvature similarity, max point deviation, stroke length ratio checks - Loosen thresholds for long strokes and first-stroke positioning - Implement instant locale switching (no save required) - Add ScrambleText component with character-by-character morphing animation - Apply ScrambleText globally across all views, widgets, and dialogs - Add i18n keys for sound effects settings (EN/DE/JA)
32 lines
1.0 KiB
Vue
32 lines
1.0 KiB
Vue
<template lang="pug">
|
|
DashboardWidget(
|
|
:title="$t('stats.next24')"
|
|
icon="mdi-clock-outline"
|
|
)
|
|
.forecast-list.flex-grow-1(v-if="hasUpcoming")
|
|
div(v-for="(count, hour) in forecast" :key="hour")
|
|
.d-flex.justify-space-between.align-center.mb-2.py-2.border-b-subtle(v-if="count > 0")
|
|
span.text-body-2.text-grey-lighten-1
|
|
ScrambleText(:text="hour === 0 ? $t('stats.availableNow') : $t('stats.inHours', { n: hour }, hour)")
|
|
|
|
v-chip.font-weight-bold.text-primary(
|
|
size="small"
|
|
color="surface-light"
|
|
) {{ count }}
|
|
|
|
.fill-height.d-flex.align-center.justify-center.text-grey.text-center.pa-4(v-else)
|
|
ScrambleText(:text="$t('stats.noIncoming')")
|
|
</template>
|
|
|
|
<script setup>
|
|
/* eslint-disable no-unused-vars */
|
|
import { computed } from 'vue';
|
|
import DashboardWidget from './DashboardWidget.vue';
|
|
|
|
const props = defineProps({
|
|
forecast: { type: Array, default: () => [] },
|
|
});
|
|
|
|
const hasUpcoming = computed(() => props.forecast && props.forecast.some((c) => c > 0));
|
|
</script>
|