styleui-components
Version:
Lightweight, modular UI component library with zero dependencies
164 lines (142 loc) • 3.31 kB
CSS
/*------------------------------------*\\
#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;
}