/* ========================================================================== Base menu item styles ========================================================================== */ .menu-item { @apply relative flex min-h-9 w-full items-center justify-start gap-3 rounded-2xl px-2 py-1.5 outline-none no-highlight; /** * Transitions * CRITICAL: motion-reduce must be AFTER transition for correct override specificity */ transition: transform 250ms var(--ease-out-quart), box-shadow 150ms var(--ease-out); @apply will-change-transform motion-reduce:transition-none; /* Cursor */ cursor: var(--cursor-interactive); [data-slot="label"] { @apply pointer-events-none w-fit select-none; } [data-slot="description"] { @apply pointer-events-none text-wrap select-none; } [data-slot="submenu-indicator"] svg { @apply size-3.5; } /* Add inline-start padding when indicator is present */ &:has(.menu-item__indicator) { @apply ps-7; } /* Add inline-end padding when indicator is present and has submenu */ &[data-has-submenu="true"]:has(.menu-item__indicator) { @apply ps-2 pe-7; } /* Focus visible state (keyboard focus only) */ &:focus-visible:not(:focus), &[data-focus-visible="true"] { @apply status-focused; } /* Focus state */ &:focus, &[data-focus="true"] { } /* Pressed state */ &:active, &[data-pressed="true"] { transform: scale(0.98); } /* Hover state */ @media (hover: hover) { &:hover, &[data-hovered="true"] { @apply bg-default; } } /* Selected state */ &[aria-checked="true"], &[aria-selected="true"], &[data-selected="true"] { [data-slot="menu-item-indicator--checkmark"] { /** * Transitions * CRITICAL: motion-reduce must be AFTER transition for correct override specificity */ transition: stroke-dashoffset 100ms linear; @apply motion-reduce:transition-none; } [data-slot="menu-item-indicator--dot"] { /** * Selected state: visible and scaled up */ @apply scale-100 opacity-100; } } /* Disabled state */ &[data-disabled="true"] { @apply status-disabled; } } /* ========================================================================== Menu item indicator ========================================================================== */ .menu-item__indicator { @apply absolute start-2 top-1/2 flex size-4 shrink-0 -translate-y-1/2 items-center justify-center text-muted; /** * Transitions */ @apply transition duration-250 motion-reduce:transition-none; /* Position on the inline-end when menu item has submenu */ .menu-item[data-has-submenu="true"] & { @apply start-auto end-2; } /* Checkmark SVG indicator */ [data-slot="menu-item-indicator--checkmark"] { @apply size-2.5; .menu-item[data-selection-mode="multiple"] & { /** * Transitions */ @apply transition-all duration-300 motion-reduce:transition-none; } } /* Dot SVG indicator */ [data-slot="menu-item-indicator--dot"] { @apply size-2; .menu-item[data-selection-mode="multiple"] & { /** * Transitions */ @apply transition-all duration-250 motion-reduce:transition-none; } /** * Default state: hidden and scaled down */ @apply scale-70 opacity-0; } } /* Submenu indicator (chevron-right) */ .menu-item__indicator--submenu { @apply text-muted; svg { @apply size-3; } } /* Default variant */ .menu-item--default { } /* Danger variant */ .menu-item--danger { .menu-item__indicator { @apply text-danger; } [data-slot="label"] { @apply text-danger; } }