Offline - Alle Schreibzugriffe von API-Nutzern laufen über eine Warteschlange in IndexedDB (services/syncQueue.js): FIFO, zusammengefasste Updates, Wiederholung bei Netz/Sichtbarkeit/Backoff, 4xx wird als Fehler gemeldet. - Medien-Uploads liegen mit Bytes in der Queue, erscheinen sofort mit Marker und werden nach dem Upload durch das Server-Objekt ersetzt. - PWA-Modus mit Service Worker für die App-Hülle; API nie gecacht. npm run build erzeugt dist/pwa. - Speicherzustand im Panel: ausstehend / Fehler mit Wiederholen-Knopf, Verbindungsanzeige im Header. Event - Event entsteht erst mit dem ersten Eintrag; jede Löschung fragt nach. - Key Image als 4:3-Rahmen, Galerie mit Video, mehrere Sprachnotizen mit Notiz, Live-Pegel beim Aufnehmen, WAV-Umwandlung für lokale Aufnahmen. - Neue Felder: Zeitraum, Kategorie, Personen, Meilenstein; Stimmung als kompakte Zeile mit ausklappbarer Punktfarbe. Oberfläche - Untere Leiste: Darstellung und Zoom links, Jahres-Pille mittig, Plus rechts. - Logos und Goldpalette, Login neu, zehn Wellen-Presets mit Vorschau, Hintergrundbilder als Kacheln, Kontomenü und Einstellungen bereinigt, Escape schließt Ebenen, größere Touch-Ziele. - Alten Sync-Service und ungenutzte Legacy-Seiten entfernt. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
28 lines
948 B
JavaScript
28 lines
948 B
JavaScript
// Dexie needs a real IndexedDB implementation; happy-dom does not ship one.
|
|
import 'fake-indexeddb/auto'
|
|
import { afterEach, vi } from 'vitest'
|
|
import { config } from '@vue/test-utils'
|
|
import { Notify, Quasar } from 'quasar'
|
|
|
|
// Components read `$q` and use Quasar components in their templates. This
|
|
// mirrors what the Quasar boot does in the app, limited to what tests need.
|
|
config.global.plugins.unshift([Quasar, { plugins: { Notify } }])
|
|
|
|
// Stores read `navigator.onLine` at module load.
|
|
if (typeof navigator !== 'undefined' && navigator.onLine === undefined) {
|
|
Object.defineProperty(navigator, 'onLine', { value: true, configurable: true })
|
|
}
|
|
|
|
// The timeline observes its own size; happy-dom has no ResizeObserver.
|
|
if (typeof globalThis.ResizeObserver === 'undefined') {
|
|
globalThis.ResizeObserver = class {
|
|
observe() {}
|
|
unobserve() {}
|
|
disconnect() {}
|
|
}
|
|
}
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers()
|
|
localStorage.clear()
|
|
})
|