refactor: extract common resize handle styles into a reusable component.
This commit is contained in:
@@ -393,11 +393,11 @@ const DocumentViewerPanel: React.FC<DocumentViewerPanelProps> = ({
|
|||||||
const resizeHandle = isSidebarVariant ? (
|
const resizeHandle = isSidebarVariant ? (
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className={`detail-panel__resize-handle${isPanelResizing ? ' is-active' : ''}`}
|
className={`resize-handle resize-handle--left${isPanelResizing ? ' is-active' : ''}`}
|
||||||
aria-label="Resize detail panel"
|
aria-label="Resize detail panel"
|
||||||
{...resizeHandleProps}
|
{...resizeHandleProps}
|
||||||
>
|
>
|
||||||
<span aria-hidden="true" />
|
<span className="resize-handle__line" aria-hidden="true" />
|
||||||
</button>
|
</button>
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
|
|||||||
@@ -103,11 +103,11 @@ const Sidebar: React.FC<SidebarProps> = ({
|
|||||||
<aside className={sidebarClassNames.join(' ')} ref={sidebarRef} style={sidebarStyle}>
|
<aside className={sidebarClassNames.join(' ')} ref={sidebarRef} style={sidebarStyle}>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className={`sidebar__resize-handle${isResizingSidebar ? ' is-active' : ''}`}
|
className={`resize-handle resize-handle--right${isResizingSidebar ? ' is-active' : ''}`}
|
||||||
aria-label="Resize sidebar"
|
aria-label="Resize sidebar"
|
||||||
{...sidebarHandleProps}
|
{...sidebarHandleProps}
|
||||||
>
|
>
|
||||||
<span aria-hidden="true" />
|
<span className="resize-handle__line" aria-hidden="true" />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<SidebarHeader
|
<SidebarHeader
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
.resize-handle {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: 1.2rem;
|
||||||
|
height: 100%;
|
||||||
|
border: none;
|
||||||
|
background: transparent;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: col-resize;
|
||||||
|
z-index: 10;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resize-handle__line {
|
||||||
|
width: 3px;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 999px;
|
||||||
|
background: transparent;
|
||||||
|
transition: background 120ms ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resize-handle:hover .resize-handle__line,
|
||||||
|
.resize-handle:focus-visible .resize-handle__line,
|
||||||
|
.resize-handle.is-active .resize-handle__line {
|
||||||
|
background: var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.resize-handle:focus-visible {
|
||||||
|
outline: 2px solid color-mix(in oklch, var(--border) 80%, transparent);
|
||||||
|
outline-offset: 2px;
|
||||||
|
border-radius: 999px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Modifiers for positioning */
|
||||||
|
.resize-handle--right {
|
||||||
|
right: -0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resize-handle--left {
|
||||||
|
left: -0.6rem;
|
||||||
|
}
|
||||||
@@ -31,41 +31,6 @@
|
|||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-panel__resize-handle {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: -0.6rem;
|
|
||||||
width: 1.2rem;
|
|
||||||
height: 100%;
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
cursor: col-resize;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-panel__resize-handle span {
|
|
||||||
width: 2px;
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 999px;
|
|
||||||
background: transparent;
|
|
||||||
transition: background 120ms ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-panel__resize-handle:hover span,
|
|
||||||
.detail-panel__resize-handle:focus-visible span,
|
|
||||||
.detail-panel__resize-handle.is-active span {
|
|
||||||
background: var(--border);
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-panel__resize-handle:focus-visible {
|
|
||||||
outline: 2px solid color-mix(in oklch, var(--border) 80%, transparent);
|
|
||||||
outline-offset: 2px;
|
|
||||||
border-radius: 999px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.panel-header {
|
.panel-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
@import './base/theme.css';
|
@import './base/theme.css';
|
||||||
@import './base/controls.css';
|
@import './base/controls.css';
|
||||||
@import './layout/panel-header-controls.css';
|
@import './layout/panel-header-controls.css';
|
||||||
|
@import './components/resize-handle.css';
|
||||||
@import './preview/preview-zoom.css';
|
@import './preview/preview-zoom.css';
|
||||||
@import './base/iconography.css';
|
@import './base/iconography.css';
|
||||||
@import './documents/controls.css';
|
@import './documents/controls.css';
|
||||||
|
|||||||
@@ -142,42 +142,6 @@
|
|||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar__resize-handle {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: -0.4rem;
|
|
||||||
width: 0.8rem;
|
|
||||||
height: 100%;
|
|
||||||
border: none;
|
|
||||||
background: transparent;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
cursor: col-resize;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar__resize-handle span {
|
|
||||||
width: 2px;
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 999px;
|
|
||||||
background: transparent;
|
|
||||||
transition: background 120ms ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar__resize-handle:hover span,
|
|
||||||
.sidebar__resize-handle:focus-visible span,
|
|
||||||
.sidebar__resize-handle.is-active span {
|
|
||||||
background: var(--border);
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar__resize-handle:focus-visible {
|
|
||||||
outline: 2px solid color-mix(in oklch, var(--border) 80%, transparent);
|
|
||||||
outline-offset: 2px;
|
|
||||||
border-radius: 999px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar__body {
|
.sidebar__body {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
@@ -423,7 +387,7 @@
|
|||||||
padding: 0 1rem 0.25rem;
|
padding: 0 1rem 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu__section > .menu__slider {
|
.menu__section>.menu__slider {
|
||||||
margin-top: -0.25rem;
|
margin-top: -0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user