UNPKG

styleui-components

Version:

Lightweight, modular UI component library with zero dependencies

164 lines (142 loc) 3.31 kB
/*------------------------------------*\\ #MENU \\*------------------------------------*/ .menu { position: relative; display: inline-block; } .menu-trigger { /* Uses .btn styles */ } .menu-panel { position: absolute; z-index: var(--z-dropdown); top: calc(100% + var(--space-1)); left: 0; min-width: 220px; max-width: 100vw; max-height: 100vh; overflow: auto; background-color: var(--bg-layer-2); border-radius: var(--radius-lg); box-shadow: var(--shadow-l); padding: var(--space-2); display: none; /* Hidden by default */ opacity: 0; transform: translateY(-10px); transition: opacity 0.2s ease, transform 0.2s ease; margin: var(--space-2); } .menu.menu--top .menu-panel { top: auto; bottom: calc(100% + var(--space-1)); transform: translateY(10px); } .menu.menu--right .menu-panel { top: 0; left: calc(100% + var(--space-1)); transform: translateX(-10px); } .menu.open.menu--right .menu-panel { transform: translateX(0); } .menu.menu--left .menu-panel { top: 0; left: auto; right: calc(100% + var(--space-1)); transform: translateX(10px); } .menu.open.menu--left .menu-panel { transform: translateX(0); } .menu.open .menu-panel { display: block; opacity: 1; transform: translateY(0); } .menu-item { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-s); cursor: pointer; font-size: var(--font-size-s); color: var(--text-secondary); white-space: nowrap; } .menu-item:hover { background-color: var(--background-hover); color: var(--text-primary); } .menu-item .lucide { width: 20px; height: 20px; color: var(--text-tertiary); } .menu-item:hover .lucide { color: var(--text-primary); } .menu-divider { height: 1px; background-color: var(--overlay-medium); margin: var(--space-2) 0; } .menu-shortcut { margin-left: auto; } /* Submenu Styles */ .menu-item.has-submenu { position: relative; } .menu-item.has-submenu > .menu-panel { top: calc(0% - var(--space-2)); left: 100%; display: none; opacity: 0; transform: translateX(-10px); } .menu-item.has-submenu:hover > .menu-panel { display: block; opacity: 1; transform: translateX(0); } .menu-item.has-submenu > .menu-panel { margin: 0; } .menu-item.has-submenu > .lucide-chevron-right { margin-left: auto; } /*------------------------------------*\\ #MENU BAR \\*------------------------------------*/ .menu-bar { display: flex; align-items: center; gap: var(--space-1); background-color: var(--bg-layer-2); padding: var(--space-1) var(--space-2); border-radius: var(--radius-lg); margin-bottom: var(--space-4); } .menu-bar-vertical { display: inline-flex; flex-direction: column; align-items: flex-start; gap: var(--space-1); background-color: var(--bg-layer-2); padding: var(--space-2); border-radius: var(--radius-lg); } /* Context Menu */ #context-menu-container { position: absolute; z-index: 1000; width: auto; height: auto; } #context-menu-container .menu-panel { display: block; position: relative; min-width: 180px; }