@@ -9,8 +9,8 @@ import { validateCssColor } from "@/util/color-validator";
99import { cn , fireAndForget } from "@/util/util" ;
1010import { useAtomValue } from "jotai" ;
1111import { useCallback , useEffect , useRef , useState } from "react" ;
12- import { VTab , VTabItem } from "./vtab" ;
1312import { buildTabContextMenu } from "./tabcontextmenu" ;
13+ import { VTab , VTabItem } from "./vtab" ;
1414import { VTabBarEnv } from "./vtabbarenv" ;
1515export type { VTabItem } from "./vtab" ;
1616
@@ -195,52 +195,58 @@ export function VTabBar({ workspace, className }: VTabBarProps) {
195195 const isNextActive = nextTabId === activeTabId ;
196196 const isNextHovered = nextTabId === hoveredTabId ;
197197 return (
198- < VTabWrapper
199- key = { `${ tabId } :${ hoverResetVersion } ` }
200- tabId = { tabId }
201- active = { isActive }
202- showDivider = { ! isActive && ! isNextActive && ! isHovered && ! isNextHovered && ! ( isLast && isNewTabHovered ) }
203- isDragging = { dragTabId === tabId }
204- isReordering = { dragTabId != null }
205- hoverResetVersion = { hoverResetVersion }
206- index = { index }
207- onSelect = { ( ) => env . electron . setActiveTab ( tabId ) }
208- onClose = { ( ) => fireAndForget ( ( ) => env . electron . closeTab ( workspace . oid , tabId , false ) ) }
209- onRename = { ( newName ) =>
210- fireAndForget ( ( ) => env . rpc . UpdateTabNameCommand ( TabRpcClient , tabId , newName ) )
211- }
212- onDragStart = { ( event ) => {
213- didResetHoverForDragRef . current = false ;
214- dragSourceRef . current = tabId ;
215- event . dataTransfer . effectAllowed = "move" ;
216- event . dataTransfer . setData ( "text/plain" , tabId ) ;
217- setDragTabId ( tabId ) ;
218- setDropIndex ( index ) ;
219- setDropLineTop ( event . currentTarget . offsetTop ) ;
220- } }
221- onDragOver = { ( event ) => {
222- event . preventDefault ( ) ;
223- const rect = event . currentTarget . getBoundingClientRect ( ) ;
224- const relativeY = event . clientY - rect . top ;
225- const midpoint = event . currentTarget . offsetHeight / 2 ;
226- const insertBefore = relativeY < midpoint ;
227- setDropIndex ( insertBefore ? index : index + 1 ) ;
228- setDropLineTop (
229- insertBefore
230- ? event . currentTarget . offsetTop
231- : event . currentTarget . offsetTop + event . currentTarget . offsetHeight
232- ) ;
233- } }
234- onDrop = { ( event ) => {
235- event . preventDefault ( ) ;
236- if ( dropIndex != null ) {
237- reorder ( dropIndex ) ;
198+ < VTabWrapper
199+ key = { `${ tabId } :${ hoverResetVersion } ` }
200+ tabId = { tabId }
201+ active = { isActive }
202+ showDivider = {
203+ ! isActive &&
204+ ! isNextActive &&
205+ ! isHovered &&
206+ ! isNextHovered &&
207+ ! ( isLast && isNewTabHovered )
238208 }
239- clearDragState ( ) ;
240- } }
241- onDragEnd = { clearDragState }
242- onHoverChanged = { ( isHovered ) => setHoveredTabId ( isHovered ? tabId : null ) }
243- />
209+ isDragging = { dragTabId === tabId }
210+ isReordering = { dragTabId != null }
211+ hoverResetVersion = { hoverResetVersion }
212+ index = { index }
213+ onSelect = { ( ) => env . electron . setActiveTab ( tabId ) }
214+ onClose = { ( ) => fireAndForget ( ( ) => env . electron . closeTab ( workspace . oid , tabId , false ) ) }
215+ onRename = { ( newName ) =>
216+ fireAndForget ( ( ) => env . rpc . UpdateTabNameCommand ( TabRpcClient , tabId , newName ) )
217+ }
218+ onDragStart = { ( event ) => {
219+ didResetHoverForDragRef . current = false ;
220+ dragSourceRef . current = tabId ;
221+ event . dataTransfer . effectAllowed = "move" ;
222+ event . dataTransfer . setData ( "text/plain" , tabId ) ;
223+ setDragTabId ( tabId ) ;
224+ setDropIndex ( index ) ;
225+ setDropLineTop ( event . currentTarget . offsetTop ) ;
226+ } }
227+ onDragOver = { ( event ) => {
228+ event . preventDefault ( ) ;
229+ const rect = event . currentTarget . getBoundingClientRect ( ) ;
230+ const relativeY = event . clientY - rect . top ;
231+ const midpoint = event . currentTarget . offsetHeight / 2 ;
232+ const insertBefore = relativeY < midpoint ;
233+ setDropIndex ( insertBefore ? index : index + 1 ) ;
234+ setDropLineTop (
235+ insertBefore
236+ ? event . currentTarget . offsetTop
237+ : event . currentTarget . offsetTop + event . currentTarget . offsetHeight
238+ ) ;
239+ } }
240+ onDrop = { ( event ) => {
241+ event . preventDefault ( ) ;
242+ if ( dropIndex != null ) {
243+ reorder ( dropIndex ) ;
244+ }
245+ clearDragState ( ) ;
246+ } }
247+ onDragEnd = { clearDragState }
248+ onHoverChanged = { ( isHovered ) => setHoveredTabId ( isHovered ? tabId : null ) }
249+ />
244250 ) ;
245251 } ) }
246252 < button
0 commit comments