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;