From f664f690970058088ebfa975297ca2721c03316f Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Mon, 15 Apr 2024 15:21:25 +0200 Subject: [PATCH] fix(NavigationMenu): handle `disabled` through variants + `isolate` list + use separator instead of divide --- src/runtime/components/NavigationMenu.vue | 69 ++++++++++--------- src/theme/navigation-menu.ts | 18 +++-- .../__snapshots__/NavigationMenu.spec.ts.snap | 52 +++++++------- 3 files changed, 77 insertions(+), 62 deletions(-) diff --git a/src/runtime/components/NavigationMenu.vue b/src/runtime/components/NavigationMenu.vue index 976c1f76..18cb25f8 100644 --- a/src/runtime/components/NavigationMenu.vue +++ b/src/runtime/components/NavigationMenu.vue @@ -4,7 +4,7 @@ import type { NavigationMenuRootProps, NavigationMenuRootEmits } from 'radix-vue import type { AppConfig } from '@nuxt/schema' import _appConfig from '#build/app.config' import theme from '#build/ui/navigation-menu' -import type { AvatarProps, BadgeProps, IconProps, LinkProps } from '#ui/types' +import type { AvatarProps, BadgeProps, IconProps, LinkProps, SeparatorProps } from '#ui/types' const appConfig = _appConfig as AppConfig & { ui: { navigationMenu: Partial } } @@ -21,6 +21,7 @@ export interface NavigationMenuLink extends LinkProps { export interface NavigationMenuProps extends Omit { links?: T[] | T[][] + separator?: SeparatorProps class?: any ui?: Partial } @@ -56,38 +57,42 @@ const lists = computed(() => props.links?.length ? (Array.isArray(props.links[0] diff --git a/src/theme/navigation-menu.ts b/src/theme/navigation-menu.ts index c12d4710..505a4571 100644 --- a/src/theme/navigation-menu.ts +++ b/src/theme/navigation-menu.ts @@ -1,25 +1,26 @@ export default { slots: { - root: 'relative', - list: '', + root: 'relative flex gap-1.5', + list: 'isolate', item: '', - link: 'group relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2 focus-visible:before:ring-primary-500 dark:focus-visible:before:ring-primary-400 disabled:cursor-not-allowed disabled:opacity-75', + link: 'group relative w-full flex items-center gap-1.5 font-medium text-sm before:absolute before:z-[-1] before:rounded-md focus:outline-none focus-visible:outline-none dark:focus-visible:outline-none focus-visible:before:ring-inset focus-visible:before:ring-2 focus-visible:before:ring-primary-500 dark:focus-visible:before:ring-primary-400', linkLeadingIcon: 'shrink-0 size-5', linkLeadingAvatar: 'shrink-0', linkLabel: 'truncate', linkTrailing: 'ms-auto', - linkTrailingBadge: 'shrink-0 rounded' + linkTrailingBadge: 'shrink-0 rounded', + separator: 'px-2' }, variants: { orientation: { horizontal: { - root: 'w-full flex items-center justify-between', + root: 'w-full items-center justify-between', list: 'flex items-center min-w-0', item: 'min-w-0', link: 'px-2.5 py-3.5 before:inset-x-0 before:inset-y-2 hover:before:bg-gray-50 dark:hover:before:bg-gray-800/50 after:absolute after:bottom-0 after:inset-x-2.5 after:block after:h-[2px] after:mt-2 after:rounded-full' }, vertical: { - root: 'flex flex-col *:py-1.5 first:*:pt-0 last:*:pb-0 divide-y divide-gray-200 dark:divide-gray-800', + root: 'flex-col', link: 'px-2.5 py-1.5 before:inset-px' } }, @@ -32,6 +33,11 @@ export default { link: 'text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white', linkLeadingIcon: 'text-gray-400 dark:text-gray-500 group-hover:text-gray-700 dark:group-hover:text-gray-200' } + }, + disabled: { + true: { + link: 'cursor-not-allowed opacity-75' + } } }, compoundVariants: [{ diff --git a/test/components/__snapshots__/NavigationMenu.spec.ts.snap b/test/components/__snapshots__/NavigationMenu.spec.ts.snap index 7327adcb..fdc2483e 100644 --- a/test/components/__snapshots__/NavigationMenu.spec.ts.snap +++ b/test/components/__snapshots__/NavigationMenu.spec.ts.snap @@ -1,101 +1,105 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`NavigationMenu > renders basic case correctly 1`] = ` -"