arcaneSidebarComponentStyles top-level constant
String
const arcaneSidebarComponentStyles
ArcaneSidebar component tree-line styles.
Tree-line styling for ArcaneSidebar components.
Implementation
const String arcaneSidebarComponentStyles = '''
/* ============================================
ARCANE SIDEBAR COMPONENTS - Tree Lines
Tree-line styling for ArcaneSidebar components
============================================ */
/* Submenu content and group items containers get tree-line treatment */
.arcane-sidebar-submenu-content,
.arcane-sidebar-group-items {
position: relative;
display: flex;
flex-direction: column;
}
/* Each sidebar item in a submenu or group gets tree connectors */
.arcane-sidebar-submenu-content > .arcane-sidebar-item,
.arcane-sidebar-group-items > .arcane-sidebar-item {
position: relative;
}
/* Horizontal branch line */
.arcane-sidebar-submenu-content > .arcane-sidebar-item::before,
.arcane-sidebar-group-items > .arcane-sidebar-item::before {
content: '';
position: absolute;
left: 0;
top: 50%;
width: 0.5rem;
height: 1px;
background: var(--border);
}
/* Vertical line segment - connects this item to the next */
.arcane-sidebar-submenu-content > .arcane-sidebar-item:not(:last-child)::after,
.arcane-sidebar-group-items > .arcane-sidebar-item:not(:last-child)::after {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 1px;
background: var(--border);
}
/* Last item - L-bend connector */
.arcane-sidebar-submenu-content > .arcane-sidebar-item:last-child::after,
.arcane-sidebar-group-items > .arcane-sidebar-item:last-child::after {
content: '';
position: absolute;
left: 0;
top: 0;
height: 50%;
width: 1px;
background: var(--border);
}
/* Single child - hide tree lines */
.arcane-sidebar-submenu-content:has(> .arcane-sidebar-item:only-child) > .arcane-sidebar-item::before,
.arcane-sidebar-submenu-content:has(> .arcane-sidebar-item:only-child) > .arcane-sidebar-item::after,
.arcane-sidebar-group-items:has(> .arcane-sidebar-item:only-child) > .arcane-sidebar-item::before,
.arcane-sidebar-group-items:has(> .arcane-sidebar-item:only-child) > .arcane-sidebar-item::after {
display: none;
}
/* Adjust padding to accommodate tree lines */
.arcane-sidebar-submenu-content > .arcane-sidebar-item,
.arcane-sidebar-group-items > .arcane-sidebar-item {
padding-left: 1rem !important;
}
/* Codex styling for ArcaneSidebar tree lines */
[class*="codex-"] .arcane-sidebar-submenu-content > .arcane-sidebar-item::before,
[class*="codex-"] .arcane-sidebar-group-items > .arcane-sidebar-item::before,
.codex .arcane-sidebar-submenu-content > .arcane-sidebar-item::before,
.codex .arcane-sidebar-group-items > .arcane-sidebar-item::before {
background: var(--primary);
opacity: 0.6;
height: 2px;
}
[class*="codex-"] .arcane-sidebar-submenu-content > .arcane-sidebar-item:not(:last-child)::after,
[class*="codex-"] .arcane-sidebar-group-items > .arcane-sidebar-item:not(:last-child)::after,
.codex .arcane-sidebar-submenu-content > .arcane-sidebar-item:not(:last-child)::after,
.codex .arcane-sidebar-group-items > .arcane-sidebar-item:not(:last-child)::after {
background: var(--primary);
width: 2px;
box-shadow: none;
}
[class*="codex-"] .arcane-sidebar-submenu-content > .arcane-sidebar-item:last-child::after,
[class*="codex-"] .arcane-sidebar-group-items > .arcane-sidebar-item:last-child::after,
.codex .arcane-sidebar-submenu-content > .arcane-sidebar-item:last-child::after,
.codex .arcane-sidebar-group-items > .arcane-sidebar-item:last-child::after {
background: var(--primary);
width: 2px;
box-shadow: none;
}
/* Codex link styling for ArcaneSidebar items */
[class*="codex-"] .arcane-sidebar-item,
.codex .arcane-sidebar-item {
border-left: 3px solid transparent;
border-radius: 0 var(--radius-md) var(--radius-md) 0 !important;
transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}
[class*="codex-"] .arcane-sidebar-item:hover,
.codex .arcane-sidebar-item:hover {
color: var(--primary) !important;
background: color-mix(in srgb, var(--primary) 10%, transparent) !important;
border-left-color: color-mix(in srgb, var(--primary) 50%, transparent);
}
[class*="codex-"] .arcane-sidebar-item.selected,
.codex .arcane-sidebar-item.selected {
color: var(--primary) !important;
font-weight: 600;
background: color-mix(in srgb, var(--primary) 15%, transparent) !important;
border-left-color: var(--primary);
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--primary) 14%, transparent);
}
''';