From 7096d2dbf0ddf13bc88fd814e9f7cccd31b5b1d8 Mon Sep 17 00:00:00 2001 From: Fajrian Aidil Pratama Date: Thu, 11 Sep 2025 18:57:08 +0700 Subject: [PATCH] feat: implement comprehensive frontend design improvements - Add reusable component system (BaseButton, BaseCard, BaseBadge, BaseSkeleton) - Implement dark/light theme system with ThemeToggle and useTheme composable - Enhance CodeBlock component with dual theme support and advanced features - Add LazyImage component with intersection observer for performance - Implement PageTransition system with multiple animation types - Update core styles with accessibility improvements and responsive design - Enhance Navigation component with better theme integration - Update Home view with improved component architecture - Configure Tailwind with extended theme colors and utilities --- src/App.vue | 17 +- src/components/BaseBadge.vue | 106 +++++++ src/components/BaseButton.vue | 117 ++++++++ src/components/BaseCard.vue | 186 ++++++++++++ src/components/BaseSkeleton.vue | 186 ++++++++++++ src/components/CodeBlock.vue | 477 +++++++++++++++++++++++++++--- src/components/LazyImage.vue | 238 +++++++++++++++ src/components/Navigation.vue | 29 +- src/components/PageTransition.vue | 230 ++++++++++++++ src/components/ThemeToggle.vue | 264 +++++++++++++++++ src/composables/useTheme.ts | 66 +++++ src/style.css | 109 +++++++ src/views/Home.vue | 5 +- tailwind.config.js | 1 + 14 files changed, 1972 insertions(+), 59 deletions(-) create mode 100644 src/components/BaseBadge.vue create mode 100644 src/components/BaseButton.vue create mode 100644 src/components/BaseCard.vue create mode 100644 src/components/BaseSkeleton.vue create mode 100644 src/components/LazyImage.vue create mode 100644 src/components/PageTransition.vue create mode 100644 src/components/ThemeToggle.vue create mode 100644 src/composables/useTheme.ts diff --git a/src/App.vue b/src/App.vue index 3c99c87..c21583f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,11 +1,22 @@ \ No newline at end of file diff --git a/src/components/CodeBlock.vue b/src/components/CodeBlock.vue index ce02e8c..76cf028 100644 --- a/src/components/CodeBlock.vue +++ b/src/components/CodeBlock.vue @@ -1,31 +1,89 @@ \ No newline at end of file diff --git a/src/components/LazyImage.vue b/src/components/LazyImage.vue new file mode 100644 index 0000000..2665fa9 --- /dev/null +++ b/src/components/LazyImage.vue @@ -0,0 +1,238 @@ + + + + + \ No newline at end of file diff --git a/src/components/Navigation.vue b/src/components/Navigation.vue index 26d0e57..72fc1c1 100644 --- a/src/components/Navigation.vue +++ b/src/components/Navigation.vue @@ -36,16 +36,21 @@ {{ t('nav.liveApi') }} - +
+ + + +
@@ -53,15 +58,19 @@
+ + + @@ -70,6 +79,8 @@ type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-600 hover:text-pico-blue hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-pico-blue transition-colors" :aria-expanded="mobileMenuOpen" + aria-label="Toggle mobile navigation menu" + :aria-controls="mobileMenuOpen ? 'mobile-menu' : undefined" > Open main menu @@ -101,8 +112,11 @@