diff --git a/src/App.vue b/src/App.vue index 73e94d6..366bb76 100644 --- a/src/App.vue +++ b/src/App.vue @@ -23,7 +23,6 @@ const startsWith = ref(null) const preferredLanguage = ref('fi') const lastSyncAt = ref(null) const isOnline = ref(navigator.onLine) -const isSyncing = ref(false) const syncError = ref(null) const isMobile = ref(false) const secondaryLanguage = ref('en') @@ -112,13 +111,9 @@ const hasMissingTranslations = (entry: Entry) => { return languages.some((lang) => !entry[lang.code]) } -const filteredMissingCount = computed(() => { - return filteredEntries.value.filter((entry) => hasMissingTranslations(entry)).length -}) - const lastSyncLabel = computed(() => { if (!lastSyncAt.value) { - return 'Never synced' + return isOnline.value ? 'Never synced' : 'Waiting for internet access' } return new Date(lastSyncAt.value).toLocaleString() }) @@ -127,17 +122,6 @@ const alphaLetters = computed(() => { return Array.from({ length: 26 }, (_, index) => String.fromCharCode(65 + index)) }) -const clearFilters = () => { - categoryFilter.value = null - languageFilter.value = null - startsWith.value = null -} - -const setLanguageFilter = (code: Language['code'] | null) => { - languageFilter.value = code - startsWith.value = null -} - const ensureSecondaryLanguage = () => { if (secondaryLanguage.value === preferredLanguage.value) { const fallback = languages.find((lang) => lang.code !== preferredLanguage.value) @@ -156,16 +140,15 @@ const syncNow = async () => { if (!db.value) { return } - isSyncing.value = true syncError.value = null try { const result = await syncEntries(db.value) lastSyncAt.value = result.lastSyncAt ?? lastSyncAt.value entries.value = listEntries(db.value) + isOnline.value = true } catch (error) { syncError.value = error instanceof Error ? error.message : 'Sync failed' - } finally { - isSyncing.value = false + isOnline.value = false } } @@ -215,15 +198,7 @@ onBeforeUnmount(() => { Sanasto Wiki -
-
- - {{ isOnline ? 'Online' : 'Offline' }} -
- -
+
diff --git a/src/style.css b/src/style.css index 8f0d6ba..0a78bee 100644 --- a/src/style.css +++ b/src/style.css @@ -97,34 +97,6 @@ body { justify-content: flex-end; } -.status-pill { - display: inline-flex; - align-items: center; - gap: 8px; - padding: 6px 12px; - border-radius: 999px; - border: 1px solid #bbf7d0; - background: #ecfdf3; - color: var(--emerald-600); - font-size: 12px; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.08em; -} - -.status-pill.offline { - border-color: #fecaca; - background: #fef2f2; - color: var(--red-500); -} - -.status-dot { - width: 8px; - height: 8px; - border-radius: 999px; - background: currentColor; -} - .meta-row { display: flex; align-items: center; @@ -210,6 +182,12 @@ body { box-shadow: var(--shadow-sm); } +.search-input[type='search']::-webkit-search-cancel-button, +.search-input[type='search']::-webkit-search-decoration { + -webkit-appearance: none; + appearance: none; +} + .search-input:focus { outline: 2px solid rgba(79, 70, 229, 0.2); border-color: var(--indigo-600);