import type { PlaylistItem, PlaylistOptions } from '../types'; export declare class PlaylistManager { private items; private opts; private currentIndex; private panelEl; private onChangeCallback; constructor(items: PlaylistItem[], options?: PlaylistOptions); get current(): PlaylistItem; get index(): number; get length(): number; hasNext(): boolean; hasPrev(): boolean; next(): PlaylistItem | null; prev(): PlaylistItem | null; goTo(index: number): PlaylistItem | null; onChange(cb: (index: number, item: PlaylistItem) => void): void; /** Build and return the playlist panel element. Caller handles DOM insertion. */ buildPanel(): HTMLElement; private renderPanel; private updatePanel; togglePanel(): void; destroy(): void; } export declare const playlistStyles = "\n .vp-layout-wrapper {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n width: 100%;\n border-radius: var(--vp-radius, 8px);\n overflow: hidden;\n background: #000;\n }\n\n .vp-playlist-host {\n flex: 1 1 auto !important;\n min-width: 0 !important;\n max-width: 100%;\n }\n\n .vp-playlist-panel {\n width: 320px;\n min-width: 320px;\n background: rgba(18, 18, 20, 0.95);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n overflow-y: auto;\n scrollbar-width: thin;\n scrollbar-color: rgba(255, 255, 255, 0.15) transparent;\n border-left: 1px solid rgba(255, 255, 255, 0.05);\n align-self: stretch;\n display: flex;\n flex-direction: column;\n }\n\n .vp-playlist-panel::-webkit-scrollbar { width: 6px; }\n .vp-playlist-panel::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.15); border-radius: 3px; }\n .vp-playlist-panel::-webkit-scrollbar-track { background: transparent; }\n\n @media (max-width: 900px) {\n .vp-layout-wrapper {\n flex-direction: column;\n }\n .vp-playlist-host {\n flex: none !important;\n width: 100% !important;\n }\n .vp-playlist-panel {\n width: 100%;\n min-width: 0;\n max-height: 300px;\n border-left: none;\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n align-self: auto;\n }\n }\n\n .vp-playlist-header {\n padding: 16px 20px 12px;\n font-size: 13px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.8px;\n color: rgba(255, 255, 255, 0.8);\n background: linear-gradient(to bottom, rgba(18,18,20,0.95) 0%, rgba(18,18,20,0.8) 100%);\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n position: sticky;\n top: 0;\n z-index: 10;\n backdrop-filter: blur(10px);\n }\n\n .vp-playlist-item {\n position: relative;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n border-left: 3px solid transparent;\n }\n\n .vp-playlist-item::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 20px;\n right: 20px;\n height: 1px;\n background: rgba(255, 255, 255, 0.03);\n }\n .vp-playlist-item:last-child::after { display: none; }\n\n .vp-playlist-item:hover {\n background: rgba(255, 255, 255, 0.04);\n padding-left: 24px;\n }\n\n .vp-playlist-item.active {\n background: rgba(255, 255, 255, 0.06);\n border-left-color: var(--vp-accent-color, #e50914);\n }\n\n .vp-playlist-item-thumb-wrapper {\n position: relative;\n width: 80px;\n height: 45px;\n flex-shrink: 0;\n border-radius: 4px;\n overflow: hidden;\n background: #111;\n box-shadow: 0 2px 8px rgba(0,0,0,0.3);\n }\n\n .vp-playlist-thumb {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.3s ease;\n }\n \n .vp-playlist-item:hover .vp-playlist-thumb {\n transform: scale(1.05);\n }\n\n .vp-playlist-thumb-placeholder {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: rgba(255, 255, 255, 0.2);\n background: #111;\n }\n\n .vp-playlist-thumb-placeholder svg {\n width: 20px;\n height: 20px;\n }\n\n .vp-playlist-now-playing {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n opacity: 0;\n transition: opacity 0.2s;\n }\n\n .vp-playlist-item.active .vp-playlist-now-playing {\n opacity: 1;\n }\n\n .vp-equalizer-bar {\n width: 3px;\n height: 12px;\n background: var(--vp-accent-color, #e50914);\n border-radius: 2px;\n animation: vp-eq 1s ease-in-out infinite alternate;\n }\n\n .vp-equalizer-bar:nth-child(2) { animation-delay: 0.2s; }\n .vp-equalizer-bar:nth-child(3) { animation-delay: 0.4s; }\n\n @keyframes vp-eq {\n 0% { height: 4px; }\n 100% { height: 16px; }\n }\n\n .vp-playlist-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .vp-playlist-title {\n font-size: 13px;\n font-weight: 600;\n line-height: 1.3;\n color: rgba(255, 255, 255, 0.9);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n transition: color 0.2s;\n }\n\n .vp-playlist-item.active .vp-playlist-title {\n color: var(--vp-accent-color, #e50914);\n }\n\n .vp-playlist-duration {\n font-size: 11px;\n font-weight: 500;\n color: rgba(255, 255, 255, 0.4);\n background: rgba(0, 0, 0, 0.4);\n padding: 2px 6px;\n border-radius: 4px;\n align-self: flex-start;\n }\n";