import styled from '@emotion/styled'; import type { Spectrum1D } from '@zakodium/nmrium-core'; import { get1DDataXY } from '../../data/data1d/Spectrum1D/get1DDataXY.js'; import { isSpectrum1D } from '../../data/data1d/Spectrum1D/isSpectrum1D.js'; import { useBrushTracker } from '../EventsTrackers/BrushTracker.js'; import { useChartData } from '../context/ChartContext.js'; import { useScaleChecked } from '../context/ScaleContext.js'; import { useActiveSpectra } from '../hooks/useActiveSpectra.js'; import { useSetActiveSpectrumAction } from '../hooks/useSetActiveSpectrumAction.js'; import { useVerticalAlign } from '../hooks/useVerticalAlign.js'; import Line from './Line.js'; import { useInsetOptions } from './inset/InsetProvider.js'; const BOX_SIZE = 10; const Rect = styled.rect` fill: transparent; :hover { fill: #ff6f0057; } `; function useSpectra() { const { xDomains, data } = useChartData(); const inset = useInsetOptions(); if (inset) { return data?.filter((d) => isSpectrum1D(d) && d.id === inset.spectrumKey); } return data?.filter( (d) => isSpectrum1D(d) && d.display.isVisible && xDomains[d.id], ); } function LinesSeries() { const activeSpectra = useActiveSpectra(); const spectra = useSpectra() as Spectrum1D[]; const { id: insetKey = 'primary' } = useInsetOptions() || {}; return ( {spectra.map((d, i) => ( ))} {activeSpectra?.map((activeSpectrum) => ( ))} ); } interface HeadlightRectStackModeProps { spectrumID: string; index: number; } function HeadlightRectStackMode(props: HeadlightRectStackModeProps) { const { spectrumID, index } = props; const { step } = useBrushTracker(); const { width, margin, height, toolOptions: { selectedTool }, } = useChartData(); const { shiftY, spectraBottomMargin } = useScaleChecked(); const verticalAlign = useVerticalAlign(); const innerWidth = width - margin.left - margin.right; const innerHeight = height - margin.bottom - spectraBottomMargin; const { setActiveSpectrum } = useSetActiveSpectrumAction(); if ( verticalAlign !== 'stack' || selectedTool !== 'zoom' || step === 'brushing' ) { return null; } return ( { setActiveSpectrum(event, spectrumID); }} data-no-export="true" /> ); } export default LinesSeries;