zextra
Version:
zikojs extra components
204 lines (187 loc) • 4.36 kB
CSS
/* :root {
--bg-panel: #18181b;
--bg-header: #27272a;
--border-color: #3f3f46;
--text-main: #f4f4f5;
--text-muted: #a1a1aa;
} */
/* * {
box-sizing: border-box;
margin: 0;
padding: 0;
} */
.floating-panel {
--bg-panel: #18181b;
--bg-header: #27272a;
--border-color: #3f3f46;
--text-main: #f4f4f5;
--text-muted: #a1a1aa;
position: fixed;
width: 380px;
height: 260px;
min-width: 260px;
min-height: 140px;
background-color: var(--bg-panel);
border: 1px solid var(--border-color);
border-radius: 10px;
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 8px 10px -6px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
z-index: 1000;
overflow: hidden;
/* opacity: 0; */
visibility: hidden;
transform: scale(0.95);
transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s ease;
}
.floating-panel.open {
opacity: 1;
visibility: visible;
transform: scale(1);
}
.floating-panel.animating {
transition: left 0.2s ease, top 0.2s ease, width 0.2s ease, height 0.2s ease, opacity 0.15s ease, transform 0.15s ease;
}
.floating-panel.minimized {
height: 42px ;
min-height: 42px ;
resize: none;
}
.floating-panel.minimized .panel-body,
.floating-panel.minimized .resize-handle {
display: none ;
}
.floating-panel.maximized {
top: 0 ;
left: 0 ;
width: 100vw ;
height: 100vh ;
max-width: 100vw ;
max-height: 100vh ;
border-radius: 0 ;
border: none ;
}
.floating-panel.maximized .panel-header {
cursor: default;
}
.floating-panel.maximized .resize-handle {
display: none ;
}
.panel-header {
height: 42px;
background-color: var(--bg-header);
border-bottom: 1px solid var(--border-color);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 12px;
cursor: move;
user-select: none;
flex-shrink: 0;
touch-action: none; /* Prevent browser scrolling while dragging */
}
.panel-title {
font-size: 0.875rem;
font-weight: 600;
color: var(--text-main);
}
.panel-controls {
display: flex;
align-items: center;
gap: 4px;
}
.ctrl-btn {
background: transparent;
border: none;
color: var(--text-muted);
width: 26px;
height: 26px;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: background-color 0.15s, color 0.15s;
}
.ctrl-btn:hover {
background-color: var(--border-color);
color: var(--text-main);
}
.ctrl-btn svg {
width: 14px;
height: 14px;
stroke: currentColor;
stroke-width: 2;
fill: none;
stroke-linecap: round;
stroke-linejoin: round;
}
.panel-body {
padding: 16px;
flex: 1;
overflow-y: auto;
font-size: 0.875rem;
color: var(--text-muted);
line-height: 1.5;
}
.resize-handle {
position: absolute;
z-index: 10;
touch-action: none; /* Prevent browser scrolling while resizing */
}
.resize-handle.n {
top: 0;
left: 8px;
right: 8px;
height: 6px;
cursor: ns-resize;
}
.resize-handle.s {
bottom: 0;
left: 8px;
right: 8px;
height: 6px;
cursor: ns-resize;
}
.resize-handle.e {
top: 8px;
bottom: 8px;
right: 0;
width: 6px;
cursor: ew-resize;
}
.resize-handle.w {
top: 8px;
bottom: 8px;
left: 0;
width: 6px;
cursor: ew-resize;
}
.resize-handle.ne {
top: 0;
right: 0;
width: 10px;
height: 10px;
cursor: nesw-resize;
}
.resize-handle.nw {
top: 0;
left: 0;
width: 10px;
height: 10px;
cursor: nwse-resize;
}
.resize-handle.se {
bottom: 0;
right: 0;
width: 10px;
height: 10px;
cursor: nwse-resize;
}
.resize-handle.sw {
bottom: 0;
left: 0;
width: 10px;
height: 10px;
cursor: nesw-resize;
}