AlignmentLine.tsx 1022 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. 'use client';
  2. import type { AlignmentLineProps } from '@/lib/types/edit';
  3. export interface AlignmentLineComponentProps extends AlignmentLineProps {
  4. canvasScale: number;
  5. }
  6. /**
  7. * Alignment line component
  8. * Displays visual alignment guides during element dragging
  9. */
  10. export function AlignmentLine({ type, axis, length, canvasScale }: AlignmentLineComponentProps) {
  11. // Alignment line position
  12. const left = axis.x * canvasScale;
  13. const top = axis.y * canvasScale;
  14. // Alignment line length
  15. const sizeStyle =
  16. type === 'vertical'
  17. ? { height: `${length * canvasScale}px` }
  18. : { width: `${length * canvasScale}px` };
  19. return (
  20. <div
  21. className="alignment-line absolute z-42"
  22. style={{
  23. left: `${left}px`,
  24. top: `${top}px`,
  25. }}
  26. >
  27. <div
  28. className={`line ${type === 'vertical' ? 'border-l border-dashed border-primary -translate-x-0.5' : 'border-t border-dashed border-primary -translate-y-0.5'}`}
  29. style={sizeStyle}
  30. />
  31. </div>
  32. );
  33. }