import { Stack, Text, SimpleGrid, useEventListener, Portal, Flex, IconButton, Tooltip, Fade, } from '@chakra-ui/react' import { BubbleStepType, DraggableStepType, InputStepType, IntegrationStepType, LogicStepType, } from 'models' import { useStepDnd } from 'contexts/StepDndContext' import React, { useState } from 'react' import { StepCard, StepCardOverlay } from './StepCard' import { LockedIcon, UnlockedIcon } from 'assets/icons' import { headerHeight } from 'components/shared/TypebotHeader' export const StepsSideBar = () => { const { setDraggedStepType, draggedStepType } = useStepDnd() const [position, setPosition] = useState({ x: 0, y: 0, }) const [relativeCoordinates, setRelativeCoordinates] = useState({ x: 0, y: 0 }) const [isLocked, setIsLocked] = useState(true) const [isExtended, setIsExtended] = useState(true) const handleMouseMove = (event: MouseEvent) => { if (!draggedStepType) return const { clientX, clientY } = event setPosition({ ...position, x: clientX - relativeCoordinates.x, y: clientY - relativeCoordinates.y, }) } useEventListener('mousemove', handleMouseMove) const handleMouseDown = (e: React.MouseEvent, type: DraggableStepType) => { const element = e.currentTarget as HTMLDivElement const rect = element.getBoundingClientRect() setPosition({ x: rect.left, y: rect.top }) const x = e.clientX - rect.left const y = e.clientY - rect.top setRelativeCoordinates({ x, y }) setDraggedStepType(type) } const handleMouseUp = () => { if (!draggedStepType) return setDraggedStepType(undefined) setPosition({ x: 0, y: 0, }) } useEventListener('mouseup', handleMouseUp) const handleLockClick = () => setIsLocked(!isLocked) const handleDockBarEnter = () => setIsExtended(true) const handleMouseLeave = () => { if (isLocked) return setIsExtended(false) } return ( : } aria-label={isLocked ? 'Unlock' : 'Lock'} size="sm" variant="outline" onClick={handleLockClick} /> Bubbles {Object.values(BubbleStepType).map((type) => ( ))} Inputs {Object.values(InputStepType).map((type) => ( ))} Logic {Object.values(LogicStepType).map((type) => ( ))} Integrations {Object.values(IntegrationStepType).map((type) => ( ))} {draggedStepType && ( )} ) }