diff --git a/examples/react/src/examples/TouchDevice/index.tsx b/examples/react/src/examples/TouchDevice/index.tsx index 636a36a4..2073d13a 100644 --- a/examples/react/src/examples/TouchDevice/index.tsx +++ b/examples/react/src/examples/TouchDevice/index.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { ReactFlow, Node, Edge, useNodesState, useEdgesState, Position, Connection, addEdge } from '@xyflow/react'; -import styles from './touch-device.module.css'; +import './touch-device.css'; const initialNodes: Node[] = [ { @@ -42,7 +42,6 @@ const TouchDeviceFlow = () => { onConnectEnd={onConnectEnd} onClickConnectStart={onClickConnectStart} onClickConnectEnd={onClickConnectEnd} - className={styles.flow} /> ); }; diff --git a/examples/react/src/examples/TouchDevice/touch-device.css b/examples/react/src/examples/TouchDevice/touch-device.css new file mode 100644 index 00000000..3ec36be2 --- /dev/null +++ b/examples/react/src/examples/TouchDevice/touch-device.css @@ -0,0 +1,27 @@ +.react-flow .react-flow__handle { + width: 20px; + height: 20px; + border-radius: 3px; + background-color: #9f7aea; +} + +.react-flow__handle-right { + --translate: translate(50%, -50%); +} + +.react-flow__handle-left { + --translate: translate(-50%, -50%); +} + +@keyframes bounce { + 0% { + transform: var(--translate) scale(1); + } + 50% { + transform: var(--translate) scale(1.1); + } +} + +.react-flow .react-flow__handle.clickconnecting { + animation: bounce 1600ms infinite ease-in; +} diff --git a/examples/react/src/examples/TouchDevice/touch-device.module.css b/examples/react/src/examples/TouchDevice/touch-device.module.css deleted file mode 100644 index b5f65209..00000000 --- a/examples/react/src/examples/TouchDevice/touch-device.module.css +++ /dev/null @@ -1,19 +0,0 @@ -.flow :global .react-flow__handle { - width: 20px; - height: 20px; - border-radius: 3px; - background-color: #9f7aea; -} - -.flow :global .react-flow__handle.connecting { - animation: bounce 1600ms infinite ease-out; -} - -@keyframes bounce { - 0% { - transform: translate(0, -50%) scale(1); - } - 50% { - transform: translate(0, -50%) scale(1.1); - } -} diff --git a/packages/react/src/components/Handle/index.tsx b/packages/react/src/components/Handle/index.tsx index 25794ee6..6ab33c3b 100644 --- a/packages/react/src/components/Handle/index.tsx +++ b/packages/react/src/components/Handle/index.tsx @@ -39,10 +39,12 @@ const connectingSelector = connectionClickStartHandle: clickHandle, connectionMode, } = state; + const connectingFrom = + startHandle?.nodeId === nodeId && startHandle?.handleId === handleId && startHandle?.type === type; + const connectingTo = endHandle?.nodeId === nodeId && endHandle?.handleId === handleId && endHandle?.type === type; return { - connecting: - (startHandle?.nodeId === nodeId && startHandle?.handleId === handleId && startHandle?.type === type) || - (endHandle?.nodeId === nodeId && endHandle?.handleId === handleId && endHandle?.type === type), + connectingFrom, + connectingTo, clickConnecting: clickHandle?.nodeId === nodeId && clickHandle?.handleId === handleId && clickHandle?.type === type, isPossibleEndHandle: @@ -77,7 +79,7 @@ const HandleComponent = forwardRef( const store = useStoreApi(); const nodeId = useNodeId(); const { connectOnClick, noPanClassName, rfId } = useStore(selector, shallow); - const { connecting, clickConnecting, isPossibleEndHandle, connectionInProcess } = useStore( + const { connectingFrom, connectingTo, clickConnecting, isPossibleEndHandle, connectionInProcess } = useStore( connectingSelector(nodeId, handleId, type), shallow ); @@ -210,8 +212,11 @@ const HandleComponent = forwardRef( connectable: isConnectable, connectablestart: isConnectableStart, connectableend: isConnectableEnd, - connecting: connecting || clickConnecting, - // this class is used to style the handle when the user is connecting + clickconnecting: clickConnecting, + connectingfrom: connectingFrom, + connectingto: connectingTo, + // shows where you can start a connection from + // and where you can end it while connecting connectionindicator: isConnectable && (!connectionInProcess || isPossibleEndHandle) && diff --git a/packages/system/src/styles/init.css b/packages/system/src/styles/init.css index 04ee6c98..e4d48221 100644 --- a/packages/system/src/styles/init.css +++ b/packages/system/src/styles/init.css @@ -223,13 +223,23 @@ svg.xy-flow__connectionline { min-width: 5px; min-height: 5px; - &.connecting { + &.connectingfrom { pointer-events: all; + background: violet !important; + } + + &.clickconnecting { + background: greenyellow !important; + } + + &.connectingto { + background: red !important; } &.connectionindicator { pointer-events: all; cursor: crosshair; + background: green; } &-bottom {