import { XYCustomChart } from "semiotic/xy" import { NetworkCustomChart } from "semiotic/network" import { GeoCustomChart } from "semiotic/geo" // The watershed pictograms ARE the marks: interactive glyph scene nodes // stamped from one shared GlyphDef sign set — canvas-painted, hit-tested, // keyboard-navigable, no separate hit target. sceneNodes: nodes.map((node) => ({ type: "glyph", cx: positions[node.id].x, cy: positions[node.id].y + 24, // feet-anchored signs stand on cy size: 48, glyph: isotypeGlyphDef(node.kind), color: node.color, style: {}, datum: node, id: node.id, label: node.label, })) // The streaming level chart keeps point nodes (they carry pulse/decay), // pushed through the frame's windowed ingestion: <XYCustomChart ref={levelRef} layout={lakeLevelIsotypeLayout} layoutConfig={{ levelDomain: [671.7, 672.45] }} enableHover accessibleTable onObservation={inspect} frameProps={{ windowSize: 24, pointIdAccessor: "id", decay: { type: "linear", minOpacity: 0.38 }, pulse: { duration: 900, color: "#d72f3f", glowRadius: 7 }, staleness: { threshold: 7000, showBadge: true } }} /> levelRef.current.push({ id: crypto.randomUUID(), level: nextSensorReading })