/** @jsx jsx */
import type { CSSProperties } from 'react';
import { css, jsx, SerializedStyles } from '@emotion/react';
import type { Edge } from '@atlaskit/drag-and-drop-hitbox/types';
import { line } from './constants';
export type DropIndicatorProps = {
/**
* The `edge` to draw a drop indicator on.
*
* `edge` is required as for the best possible performance
* outcome you should only render this component when it needs to do something
*
* @example {closestEdge && }
*/
edge: Edge;
/**
* `gap` allows you to position the drop indicator further away from the drop target.
* `gap` should be the distance between your drop targets
* a drop indicator will be rendered halfway between the drop targets
* (the drop indicator will be offset by half of the `gap`)
*
* `gap` should be a valid CSS length.
* @example "8px"
* @example "var(--gap)"
*/
gap?: string;
};
const lineStyles = css({
display: 'block',
position: 'absolute',
zIndex: 1,
background: line.backgroundColor,
content: '""',
pointerEvents: 'none',
});
const edgeStyles: Record = {
top: css({
height: line.thickness,
top: 'var(--local-line-offset)',
right: 0,
left: 0,
}),
right: css({
width: line.thickness,
top: 0,
right: 'var(--local-line-offset)',
bottom: 0,
}),
bottom: css({
height: line.thickness,
right: 0,
bottom: 'var(--local-line-offset)',
left: 0,
}),
left: css({
width: line.thickness,
top: 0,
bottom: 0,
left: 'var(--local-line-offset)',
}),
};
/**
* __Drop indicator__
*
* A drop indicator is used to communicate the intended resting place of the draggable item. The orientation of the drop indicator should always match the direction of the content flow.
*/
export function DropIndicator({ edge, gap = '0px' }: DropIndicatorProps) {
/**
* To clearly communicate the resting place of a draggable item during a drag operation,
* the drop indicator should be positioned half way between draggable items.
*/
const lineOffset = `calc(-0.5 * (${gap} + ${line.thickness}px))`;
return (
);
}
// This default export is intended for usage with React.lazy
export default DropIndicator;