From 1689b9c691f1b22631e9d7725e220cd7a97fc838 Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Fri, 10 Feb 2023 04:39:12 +0800 Subject: [PATCH] feat(theme): add Nav components --- .../src/client/components/Nav/NavBar.vue | 213 ++++++++++++++++++ .../src/client/components/Nav/NavBarTitle.vue | 54 +++++ .../src/client/components/Nav/NavScreen.vue | 1 + .../theme/src/client/components/Nav/index.vue | 14 ++ .../src/client/components/Navbar/index.vue | 4 - .../theme/src/client/components/VImage.vue | 50 ++++ packages/theme/src/client/composables/nav.ts | 45 ++++ .../theme/src/client/composables/sidebar.ts | 11 + packages/theme/src/client/layouts/Layout.vue | 4 +- 9 files changed, 390 insertions(+), 6 deletions(-) create mode 100644 packages/theme/src/client/components/Nav/NavBar.vue create mode 100644 packages/theme/src/client/components/Nav/NavBarTitle.vue create mode 100644 packages/theme/src/client/components/Nav/NavScreen.vue create mode 100644 packages/theme/src/client/components/Nav/index.vue delete mode 100644 packages/theme/src/client/components/Navbar/index.vue create mode 100644 packages/theme/src/client/components/VImage.vue create mode 100644 packages/theme/src/client/composables/nav.ts create mode 100644 packages/theme/src/client/composables/sidebar.ts diff --git a/packages/theme/src/client/components/Nav/NavBar.vue b/packages/theme/src/client/components/Nav/NavBar.vue new file mode 100644 index 00000000..9b6aed79 --- /dev/null +++ b/packages/theme/src/client/components/Nav/NavBar.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/packages/theme/src/client/components/Nav/NavBarTitle.vue b/packages/theme/src/client/components/Nav/NavBarTitle.vue new file mode 100644 index 00000000..24c92803 --- /dev/null +++ b/packages/theme/src/client/components/Nav/NavBarTitle.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/packages/theme/src/client/components/Nav/NavScreen.vue b/packages/theme/src/client/components/Nav/NavScreen.vue new file mode 100644 index 00000000..6b4c19a0 --- /dev/null +++ b/packages/theme/src/client/components/Nav/NavScreen.vue @@ -0,0 +1 @@ + diff --git a/packages/theme/src/client/components/Nav/index.vue b/packages/theme/src/client/components/Nav/index.vue new file mode 100644 index 00000000..071199a8 --- /dev/null +++ b/packages/theme/src/client/components/Nav/index.vue @@ -0,0 +1,14 @@ + + diff --git a/packages/theme/src/client/components/Navbar/index.vue b/packages/theme/src/client/components/Navbar/index.vue deleted file mode 100644 index 6f0ce0e1..00000000 --- a/packages/theme/src/client/components/Navbar/index.vue +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/packages/theme/src/client/components/VImage.vue b/packages/theme/src/client/components/VImage.vue new file mode 100644 index 00000000..466a6789 --- /dev/null +++ b/packages/theme/src/client/components/VImage.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/packages/theme/src/client/composables/nav.ts b/packages/theme/src/client/composables/nav.ts new file mode 100644 index 00000000..1fe0244f --- /dev/null +++ b/packages/theme/src/client/composables/nav.ts @@ -0,0 +1,45 @@ +import type { Ref } from 'vue' +import { ref, watch } from 'vue' +import { useRoute } from 'vue-router' + +export interface UseNavReturn { + isScreenOpen: Ref + openScreen: () => void + closeScreen: () => void + toggleScreen: () => void +} + +export function useNav(): UseNavReturn { + const isScreenOpen = ref(false) + + function openScreen(): void { + isScreenOpen.value = true + window.addEventListener('resize', closeScreenOnTabletWindow) + } + + function closeScreen(): void { + isScreenOpen.value = false + window.removeEventListener('resize', closeScreenOnTabletWindow) + } + + function toggleScreen(): void { + isScreenOpen.value ? closeScreen() : openScreen() + } + + /** + * Close screen when the user resizes the window wider than tablet size. + */ + function closeScreenOnTabletWindow(): void { + window.outerWidth >= 768 && closeScreen() + } + + const route = useRoute() + watch(() => route.path, closeScreen) + + return { + isScreenOpen, + openScreen, + closeScreen, + toggleScreen, + } +} diff --git a/packages/theme/src/client/composables/sidebar.ts b/packages/theme/src/client/composables/sidebar.ts new file mode 100644 index 00000000..ac3e0a3b --- /dev/null +++ b/packages/theme/src/client/composables/sidebar.ts @@ -0,0 +1,11 @@ +import { computed } from 'vue' + +export function useSidebar() { + const hasSidebar = computed(() => { + return false + }) + + return { + hasSidebar, + } +} diff --git a/packages/theme/src/client/layouts/Layout.vue b/packages/theme/src/client/layouts/Layout.vue index 4fb39628..0c904404 100644 --- a/packages/theme/src/client/layouts/Layout.vue +++ b/packages/theme/src/client/layouts/Layout.vue @@ -1,5 +1,5 @@