// // Copyright 2024 DXOS.org // import { type Edge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/types'; import React, { type CSSProperties, type HTMLAttributes } from 'react'; type Orientation = 'horizontal' | 'vertical'; const edgeToOrientationMap: Record = { top: 'horizontal', bottom: 'horizontal', left: 'vertical', right: 'vertical', }; const orientationStyles: Record['className']> = { horizontal: 'h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]', vertical: 'w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]', }; const edgeStyles: Record['className']> = { top: 'top-[--line-offset] before:top-[--offset-terminal]', right: 'right-[--line-offset] before:right-[--offset-terminal]', bottom: 'bottom-[--line-offset] before:bottom-[--offset-terminal]', left: 'left-[--line-offset] before:left-[--offset-terminal]', }; const strokeSize = 2; const terminalSize = 8; const offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2; export type DropIndicatorProps = { edge: Edge; gap?: number; terminalInset?: number; lineInset?: number; }; /** * This is a tailwind port of `@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box` */ export const ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize, }: DropIndicatorProps) => { const orientation = edgeToOrientationMap[edge]; return (
); };