diff --git a/src/App.vue b/src/App.vue index c21583f..27f9908 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,20 +1,28 @@ @@ -23,4 +31,59 @@ onMounted(() => { #app { min-height: 100vh; } + +/* Fade transition */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.25s ease; +} + +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +/* Slide transitions */ +.slide-left-enter-active, +.slide-left-leave-active, +.slide-right-enter-active, +.slide-right-leave-active { + transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); +} + +.slide-left-enter-from { + opacity: 0; + transform: translateX(30px); +} + +.slide-left-leave-to { + opacity: 0; + transform: translateX(-30px); +} + +.slide-right-enter-from { + opacity: 0; + transform: translateX(-30px); +} + +.slide-right-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* Scale transition */ +.scale-enter-active, +.scale-leave-active { + transition: all 0.25s ease; +} + +.scale-enter-from { + opacity: 0; + transform: scale(0.95); +} + +.scale-leave-to { + opacity: 0; + transform: scale(1.05); +} diff --git a/src/components/CodeBlock.vue b/src/components/CodeBlock.vue index 76cf028..e93ee96 100644 --- a/src/components/CodeBlock.vue +++ b/src/components/CodeBlock.vue @@ -92,6 +92,8 @@ import 'prismjs/components/prism-javascript' import 'prismjs/components/prism-typescript' import 'prismjs/components/prism-python' import 'prismjs/components/prism-go' +import 'prismjs/components/prism-markup' // Must be loaded before PHP +import 'prismjs/components/prism-markup-templating' // Required for PHP import 'prismjs/components/prism-php' import 'prismjs/components/prism-java' import 'prismjs/components/prism-c' @@ -99,7 +101,6 @@ import 'prismjs/components/prism-cpp' import 'prismjs/components/prism-csharp' import 'prismjs/components/prism-css' import 'prismjs/components/prism-scss' -import 'prismjs/components/prism-markup' import 'prismjs/components/prism-yaml' import 'prismjs/components/prism-docker' import 'prismjs/components/prism-sql' @@ -241,13 +242,10 @@ const codeClasses = computed(() => [ const highlightCode = () => { if (codeElement.value) { - // Ensure the language is loaded + // Check if the language is available if (!Prism.languages[detectedLanguage.value] && detectedLanguage.value !== 'text') { - try { - require(`prismjs/components/prism-${detectedLanguage.value}`) - } catch (e) { - console.warn(`Language ${detectedLanguage.value} not available in Prism.js`) - } + console.warn(`Language ${detectedLanguage.value} not available in Prism.js`) + return } Prism.highlightElement(codeElement.value) diff --git a/src/components/DataSources.vue b/src/components/DataSources.vue index dbf0f64..841e809 100644 --- a/src/components/DataSources.vue +++ b/src/components/DataSources.vue @@ -9,7 +9,10 @@ - + @@ -55,4 +58,24 @@ const dataSources: DataSource[] = [ url: 'https://hack.co.id' } ] + +const getImageDarkModeClass = (imagePath: string): string => { + // Images that need background removal (non-transparent white backgrounds) + if (imagePath.includes('inacovid')) { + return 'image-remove-bg' + } + + // Images with government logos that need selective typography color inversion + if (imagePath.includes('dinkes-sulteng')) { + return 'image-gov-logo' + } + + // Images that should remain unchanged in dark mode + if (imagePath.includes('sulteng-lawan-covid')) { + return '' + } + + // Default: apply standard logo dark mode treatment for other logos + return 'logo-dark-mode' +} diff --git a/src/components/Navigation.vue b/src/components/Navigation.vue index 72fc1c1..5ac7360 100644 --- a/src/components/Navigation.vue +++ b/src/components/Navigation.vue @@ -1,11 +1,11 @@