import { memo } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
// eslint-disable-next-line import/no-extraneous-dependencies
import { Handle, Position } from '@xyflow/react';
type NodeData = {
nodeId?: string;
label: string;
level: 'L1' | 'L2' | 'L3' | 'NOT_SET';
editUrl?: string;
isCandidate?: boolean;
orderMode?: 'normal' | 'reverse';
orderEnabled?: boolean;
l3Side?: 'top' | 'bottom';
onConfigure?: () => void;
};
function TopicClusterNode( { data }: { data: NodeData } ) {
const hierarchyHandleClass =
'!h-3.5 !w-3.5 !border-2 !border-white !bg-black !shadow-[0_0_0_1px_rgba(15,23,42,0.45)]';
const prevHandleClass =
'!h-3.5 !w-3.5 !border-2 !border-white !bg-green-500 !shadow-[0_0_0_1px_rgba(15,23,42,0.45)]';
const nextHandleClass =
'!h-3.5 !w-3.5 !border-2 !border-white !bg-blue-500 !shadow-[0_0_0_1px_rgba(15,23,42,0.45)]';
const levelColors = {
L1: 'bg-blue-100 border-blue-400',
L2: 'bg-green-100 border-green-400',
L3: 'bg-purple-100 border-purple-400',
NOT_SET: 'bg-amber-50 border-amber-300',
};
const levelLabels = {
L1: '🎯 Pillar',
L2: '📦 Cluster',
L3: '📄 Support',
NOT_SET: '⚪ Not set',
};
const hideTopHandles = 'L3' === data.level && 'top' === data.l3Side;
const hideBottomHandles = 'L3' === data.level && 'bottom' === data.l3Side;
let renderOrderHandles = null;
if ( 'L1' !== data.level && data.orderEnabled ) {
if ( 'reverse' === data.orderMode ) {
renderOrderHandles = (
<>