import { axisFixedForcePositions, networkHitTarget } from "semiotic/recipes" function chronologicalInfluenceLayout(ctx) { // year pins y; edge attraction + rect-aware collision relax x const { positioned } = axisFixedForcePositions(ctx.nodes, ctx.edges, ctx.dimensions.plot, { fixedAccessor: "year", fixedDomain: [1886, 1935], size: (d) => nodeGeometry(d), }) return { // networkHitTarget → transparent, keyboard-navigable, anchorable hit node sceneNodes: positioned.map(node => networkHitTarget({ x: node.x - node.width / 2, y: node.y - node.height / 2, width: node.width, height: node.height, datum: node, id: node.id, })), overlays: <InfluenceDiagram nodes={positioned} edges={ctx.edges} /> } } <NetworkCustomChart nodes={movements} edges={influences} layout={chronologicalInfluenceLayout} width={width} height={1010} enableHover />