From df0d5696bbd20ee4190f59716294960dab2e3377 Mon Sep 17 00:00:00 2001 From: WendellAdriel <11641518+WendellAdriel@users.noreply.github.com> Date: Fri, 27 Feb 2026 12:00:23 +0000 Subject: [PATCH] General improvements Co-authored-by: WendellAdriel --- resources/js/app.ts | 2 +- resources/js/components/AppHeader.vue | 2 +- resources/js/components/AppSidebar.vue | 8 +-- resources/js/components/NavUser.vue | 2 +- resources/js/components/ui/select/Select.vue | 19 +++++++ .../js/components/ui/select/SelectContent.vue | 51 +++++++++++++++++++ .../js/components/ui/select/SelectGroup.vue | 15 ++++++ .../js/components/ui/select/SelectItem.vue | 44 ++++++++++++++++ .../components/ui/select/SelectItemText.vue | 15 ++++++ .../js/components/ui/select/SelectLabel.vue | 17 +++++++ .../ui/select/SelectScrollDownButton.vue | 26 ++++++++++ .../ui/select/SelectScrollUpButton.vue | 26 ++++++++++ .../components/ui/select/SelectSeparator.vue | 19 +++++++ .../js/components/ui/select/SelectTrigger.vue | 33 ++++++++++++ .../js/components/ui/select/SelectValue.vue | 15 ++++++ resources/js/components/ui/select/index.ts | 11 ++++ .../js/components/ui/sidebar/SidebarRail.vue | 4 +- .../components/ui/sidebar/SidebarTrigger.vue | 2 +- resources/js/composables/useCurrentUrl.ts | 21 +++++++- resources/js/layouts/settings/Layout.vue | 4 +- resources/js/pages/Dashboard.vue | 2 +- resources/js/pages/settings/Appearance.vue | 2 +- resources/js/pages/settings/Profile.vue | 2 +- 23 files changed, 325 insertions(+), 17 deletions(-) create mode 100644 resources/js/components/ui/select/Select.vue create mode 100644 resources/js/components/ui/select/SelectContent.vue create mode 100644 resources/js/components/ui/select/SelectGroup.vue create mode 100644 resources/js/components/ui/select/SelectItem.vue create mode 100644 resources/js/components/ui/select/SelectItemText.vue create mode 100644 resources/js/components/ui/select/SelectLabel.vue create mode 100644 resources/js/components/ui/select/SelectScrollDownButton.vue create mode 100644 resources/js/components/ui/select/SelectScrollUpButton.vue create mode 100644 resources/js/components/ui/select/SelectSeparator.vue create mode 100644 resources/js/components/ui/select/SelectTrigger.vue create mode 100644 resources/js/components/ui/select/SelectValue.vue create mode 100644 resources/js/components/ui/select/index.ts diff --git a/resources/js/app.ts b/resources/js/app.ts index ba8da7aaf..c0986821b 100644 --- a/resources/js/app.ts +++ b/resources/js/app.ts @@ -3,7 +3,7 @@ import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; import type { DefineComponent } from 'vue'; import { createApp, h } from 'vue'; import '../css/app.css'; -import { initializeTheme } from './composables/useAppearance'; +import { initializeTheme } from '@/composables/useAppearance'; const appName = import.meta.env.VITE_APP_NAME || 'Laravel'; diff --git a/resources/js/components/AppHeader.vue b/resources/js/components/AppHeader.vue index b0cab69e9..507994b73 100644 --- a/resources/js/components/AppHeader.vue +++ b/resources/js/components/AppHeader.vue @@ -93,7 +93,7 @@ const rightNavItems: NavItem[] = [ Navigation MenuNavigation menu import { Link } from '@inertiajs/vue3'; -import { BookOpen, Folder, LayoutGrid } from 'lucide-vue-next'; +import { BookOpen, FolderGit2, LayoutGrid } from 'lucide-vue-next'; +import AppLogo from '@/components/AppLogo.vue'; import NavFooter from '@/components/NavFooter.vue'; import NavMain from '@/components/NavMain.vue'; import NavUser from '@/components/NavUser.vue'; @@ -14,7 +15,6 @@ import { SidebarMenuItem, } from '@/components/ui/sidebar'; import type { NavItem } from '@/types'; -import AppLogo from './AppLogo.vue'; import { dashboard } from '@/routes'; const mainNavItems: NavItem[] = [ @@ -27,9 +27,9 @@ const mainNavItems: NavItem[] = [ const footerNavItems: NavItem[] = [ { - title: 'Github Repo', + title: 'Repository', href: 'https://github.com/laravel/vue-starter-kit', - icon: Folder, + icon: FolderGit2, }, { title: 'Documentation', diff --git a/resources/js/components/NavUser.vue b/resources/js/components/NavUser.vue index e3572c7f8..66046a926 100644 --- a/resources/js/components/NavUser.vue +++ b/resources/js/components/NavUser.vue @@ -14,7 +14,7 @@ import { useSidebar, } from '@/components/ui/sidebar'; import UserInfo from '@/components/UserInfo.vue'; -import UserMenuContent from './UserMenuContent.vue'; +import UserMenuContent from '@/components/UserMenuContent.vue'; const page = usePage(); const user = computed(() => page.props.auth.user); diff --git a/resources/js/components/ui/select/Select.vue b/resources/js/components/ui/select/Select.vue new file mode 100644 index 000000000..c94bbe888 --- /dev/null +++ b/resources/js/components/ui/select/Select.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/select/SelectContent.vue b/resources/js/components/ui/select/SelectContent.vue new file mode 100644 index 000000000..adf04ec81 --- /dev/null +++ b/resources/js/components/ui/select/SelectContent.vue @@ -0,0 +1,51 @@ + + + diff --git a/resources/js/components/ui/select/SelectGroup.vue b/resources/js/components/ui/select/SelectGroup.vue new file mode 100644 index 000000000..e981c6c50 --- /dev/null +++ b/resources/js/components/ui/select/SelectGroup.vue @@ -0,0 +1,15 @@ + + + diff --git a/resources/js/components/ui/select/SelectItem.vue b/resources/js/components/ui/select/SelectItem.vue new file mode 100644 index 000000000..937176457 --- /dev/null +++ b/resources/js/components/ui/select/SelectItem.vue @@ -0,0 +1,44 @@ + + + diff --git a/resources/js/components/ui/select/SelectItemText.vue b/resources/js/components/ui/select/SelectItemText.vue new file mode 100644 index 000000000..b6700b17b --- /dev/null +++ b/resources/js/components/ui/select/SelectItemText.vue @@ -0,0 +1,15 @@ + + + diff --git a/resources/js/components/ui/select/SelectLabel.vue b/resources/js/components/ui/select/SelectLabel.vue new file mode 100644 index 000000000..5b6650cb0 --- /dev/null +++ b/resources/js/components/ui/select/SelectLabel.vue @@ -0,0 +1,17 @@ + + + diff --git a/resources/js/components/ui/select/SelectScrollDownButton.vue b/resources/js/components/ui/select/SelectScrollDownButton.vue new file mode 100644 index 000000000..7dc7670b3 --- /dev/null +++ b/resources/js/components/ui/select/SelectScrollDownButton.vue @@ -0,0 +1,26 @@ + + + diff --git a/resources/js/components/ui/select/SelectScrollUpButton.vue b/resources/js/components/ui/select/SelectScrollUpButton.vue new file mode 100644 index 000000000..07fe87eab --- /dev/null +++ b/resources/js/components/ui/select/SelectScrollUpButton.vue @@ -0,0 +1,26 @@ + + + diff --git a/resources/js/components/ui/select/SelectSeparator.vue b/resources/js/components/ui/select/SelectSeparator.vue new file mode 100644 index 000000000..4b5c88577 --- /dev/null +++ b/resources/js/components/ui/select/SelectSeparator.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/js/components/ui/select/SelectTrigger.vue b/resources/js/components/ui/select/SelectTrigger.vue new file mode 100644 index 000000000..667908b6d --- /dev/null +++ b/resources/js/components/ui/select/SelectTrigger.vue @@ -0,0 +1,33 @@ + + + diff --git a/resources/js/components/ui/select/SelectValue.vue b/resources/js/components/ui/select/SelectValue.vue new file mode 100644 index 000000000..d5ce58b55 --- /dev/null +++ b/resources/js/components/ui/select/SelectValue.vue @@ -0,0 +1,15 @@ + + + diff --git a/resources/js/components/ui/select/index.ts b/resources/js/components/ui/select/index.ts new file mode 100644 index 000000000..96eae60cf --- /dev/null +++ b/resources/js/components/ui/select/index.ts @@ -0,0 +1,11 @@ +export { default as Select } from "./Select.vue" +export { default as SelectContent } from "./SelectContent.vue" +export { default as SelectGroup } from "./SelectGroup.vue" +export { default as SelectItem } from "./SelectItem.vue" +export { default as SelectItemText } from "./SelectItemText.vue" +export { default as SelectLabel } from "./SelectLabel.vue" +export { default as SelectScrollDownButton } from "./SelectScrollDownButton.vue" +export { default as SelectScrollUpButton } from "./SelectScrollUpButton.vue" +export { default as SelectSeparator } from "./SelectSeparator.vue" +export { default as SelectTrigger } from "./SelectTrigger.vue" +export { default as SelectValue } from "./SelectValue.vue" diff --git a/resources/js/components/ui/sidebar/SidebarRail.vue b/resources/js/components/ui/sidebar/SidebarRail.vue index 1045a55ce..762a89c22 100644 --- a/resources/js/components/ui/sidebar/SidebarRail.vue +++ b/resources/js/components/ui/sidebar/SidebarRail.vue @@ -14,9 +14,9 @@ const { toggleSidebar } = useSidebar() diff --git a/resources/js/composables/useCurrentUrl.ts b/resources/js/composables/useCurrentUrl.ts index 0736a9195..fa794e169 100644 --- a/resources/js/composables/useCurrentUrl.ts +++ b/resources/js/composables/useCurrentUrl.ts @@ -9,6 +9,11 @@ export type UseCurrentUrlReturn = { isCurrentUrl: ( urlToCheck: NonNullable, currentUrl?: string, + startsWith?: boolean, + ) => boolean; + isCurrentOrParentUrl: ( + urlToCheck: NonNullable, + currentUrl?: string, ) => boolean; whenCurrentUrl: ( urlToCheck: NonNullable, @@ -26,23 +31,34 @@ export function useCurrentUrl(): UseCurrentUrlReturn { function isCurrentUrl( urlToCheck: NonNullable, currentUrl?: string, + startsWith: boolean = false, ) { const urlToCompare = currentUrl ?? currentUrlReactive.value; const urlString = toUrl(urlToCheck); + const comparePath = (path: string): boolean => + startsWith ? urlToCompare.startsWith(path) : path === urlToCompare; + if (!urlString.startsWith('http')) { - return urlString === urlToCompare; + return comparePath(urlString); } try { const absoluteUrl = new URL(urlString); - return absoluteUrl.pathname === urlToCompare; + return comparePath(absoluteUrl.pathname); } catch { return false; } } + function isCurrentOrParentUrl( + urlToCheck: NonNullable, + currentUrl?: string, + ) { + return isCurrentUrl(urlToCheck, currentUrl, true); + } + function whenCurrentUrl( urlToCheck: NonNullable, ifTrue: any, @@ -54,6 +70,7 @@ export function useCurrentUrl(): UseCurrentUrlReturn { return { currentUrl: readonly(currentUrlReactive), isCurrentUrl, + isCurrentOrParentUrl, whenCurrentUrl, }; } diff --git a/resources/js/layouts/settings/Layout.vue b/resources/js/layouts/settings/Layout.vue index d2f59d7d7..3bbbd81e0 100644 --- a/resources/js/layouts/settings/Layout.vue +++ b/resources/js/layouts/settings/Layout.vue @@ -20,7 +20,7 @@ const sidebarNavItems: NavItem[] = [ }, ]; -const { isCurrentUrl } = useCurrentUrl(); +const { isCurrentOrParentUrl } = useCurrentUrl();