@@ -38,9 +38,9 @@ type RawFilterMode = "none" | "percent" | "sigma";
3838
3939export default function Sidebar ( ) {
4040 const {
41- dataType, dataSelection, xAxis, errorBars, noOfBins, noOfDataPoint, colorBy, filterPercent, isFiltered, selectedSeries,
41+ dataType, dataSelection, xAxis, errorBars, noOfBins, noOfDataPoint, colorBy, filterPercent, isFiltered, selectedSeries,
4242 sigmaK,
43- rawFilterMode,
43+ rawFilterMode,
4444 setSettings,
4545 // focusRangeMax
4646 } = usePlotSettings ( ) ;
@@ -186,146 +186,123 @@ export default function Sidebar() {
186186 ) }
187187 </ Section >
188188
189- { /* ================= Average Configuration ================= */ }
190- { visibility . averageConfig && dataType . includes ( 'average' ) && (
191- < Section title = "Average Configuration" >
189+ { /* ================= Average Configuration ================= */ }
190+ { visibility . averageConfig && dataType . includes ( 'average' ) && (
191+ < Section title = "Average Configuration" >
192192
193- { xAxis === 'phase' && pathname !== '/matrix/' ? (
194- < div className = "space-y-2 mb-4" >
195- < label className = "font-medium" >
196- Number of Bins: { noOfBins }
197- </ label >
198- < input
199- type = "range"
200- min = { 5 }
201- max = { 1000 }
202- value = { noOfBins }
203- onChange = { ( e ) =>
204- setSettings ( { noOfBins : Number ( e . target . value ) } )
205- }
206- />
207- < input
208- type = "number"
209- min = { 5 }
210- max = { 1000 }
211- value = { noOfBins }
212- onChange = { ( e ) =>
213- setSettings ( { noOfBins : Number ( e . target . value ) } )
214- }
215- className = "w-full px-2 py-1 border rounded"
216- />
217- </ div >
218- ) : (
219- < div className = "space-y-2 mb-4" >
220- < label className = "font-medium" >
221- Rebinning Factor: { noOfDataPoint }
222- </ label >
223- < input
224- type = "range"
225- min = { 1 }
226- max = { 1000 }
227- value = { noOfDataPoint }
228- onChange = { ( e ) =>
229- setSettings ( { noOfDataPoint : Number ( e . target . value ) } )
230- }
231- />
232- < input
233- type = "number"
234- min = { 1 }
235- max = { 1000 }
236- value = { noOfDataPoint }
237- onChange = { ( e ) =>
238- setSettings ( { noOfDataPoint : Number ( e . target . value ) } )
239- }
240- className = "w-full px-2 py-1 border rounded"
241- />
242- </ div >
243- ) }
193+ { xAxis === 'phase' && pathname !== '/matrix/' ? (
194+ < div className = "space-y-2 mb-4" >
195+ < label className = "font-medium" >
196+ Number of Bins: { noOfBins }
197+ </ label >
198+ < input
199+ type = "range"
200+ min = { 5 }
201+ max = { 1000 }
202+ value = { noOfBins }
203+ onChange = { ( e ) =>
204+ setSettings ( { noOfBins : Number ( e . target . value ) } )
205+ }
206+ />
207+ < input
208+ type = "number"
209+ min = { 5 }
210+ max = { 1000 }
211+ value = { noOfBins }
212+ onChange = { ( e ) =>
213+ setSettings ( { noOfBins : Number ( e . target . value ) } )
214+ }
215+ className = "w-full px-2 py-1 border rounded"
216+ />
217+ </ div >
218+ ) : (
219+ < div className = "space-y-2 mb-4" >
220+ < label className = "font-medium" >
221+ Rebinning Factor: { noOfDataPoint }
222+ </ label >
223+ < input
224+ type = "range"
225+ min = { 1 }
226+ max = { 1000 }
227+ value = { noOfDataPoint }
228+ onChange = { ( e ) =>
229+ setSettings ( { noOfDataPoint : Number ( e . target . value ) } )
230+ }
231+ />
232+ < input
233+ type = "number"
234+ min = { 1 }
235+ max = { 1000 }
236+ value = { noOfDataPoint }
237+ onChange = { ( e ) =>
238+ setSettings ( { noOfDataPoint : Number ( e . target . value ) } )
239+ }
240+ className = "w-full px-2 py-1 border rounded"
241+ />
242+ </ div >
243+ ) }
244244
245- { /* ================= Raw Filter (Dropdown) ================= */ }
246- { dataType . includes ( 'raw' ) && dataType . includes ( 'average' ) && (
247- < div className = "space-y-2 mb-4" >
248- < label className = "font-medium" > Raw Data Filter</ label >
245+ { /* ================= Raw Filter (Dropdown) ================= */ }
246+ { dataType . includes ( 'raw' ) && dataType . includes ( 'average' ) && (
247+ < div className = "space-y-2 mb-4" >
248+ < label className = "font-medium" > Raw Data Filter</ label >
249249
250- < select
251- value = { rawFilterMode }
252- onChange = { ( e ) =>
253- setSettings ( { rawFilterMode : e . target . value as RawFilterMode } )
254- }
255- className = "w-full px-2 py-1 border rounded bg-white"
256- >
257- < option value = "none" > No filter</ option >
258- < option value = "percent" > Filter by average band (%)</ option >
259- < option value = "sigma" > Filter by σ-band</ option >
260- </ select >
250+ < select
251+ value = { rawFilterMode }
252+ onChange = { ( e ) =>
253+ setSettings ( { rawFilterMode : e . target . value as RawFilterMode } )
254+ }
255+ className = "w-full px-2 py-1 border rounded bg-white"
256+ >
257+ < option value = "none" > No filter</ option >
258+ < option value = "percent" > Filter by average band (%)</ option >
259+ < option value = "sigma" > Filter by σ-band</ option >
260+ </ select >
261261
262- { /* % BAND */ }
263- { rawFilterMode === 'percent' && (
264- < >
265- < label className = "font-medium" >
266- Average Band: ±{ filterPercent } %
267- </ label >
268- < input
269- type = "range"
270- min = { 1 }
271- max = { 200 }
272- value = { filterPercent }
273- onChange = { ( e ) =>
274- setSettings ( { filterPercent : Number ( e . target . value ) } )
275- }
276- />
277- < input
278- type = "number"
279- min = { 1 }
280- max = { 200 }
281- value = { filterPercent }
282- onChange = { ( e ) =>
283- setSettings ( { filterPercent : Number ( e . target . value ) } )
262+ < div className = "space-y-1" >
263+ < label className = "font-medium text-sm text-gray-700" >
264+ { rawFilterMode === "percent"
265+ ? `Average Band (±${ filterPercent } %)`
266+ : `σ-Band (±${ sigmaK . toFixed ( 2 ) } σ)`
284267 }
285- className = "w-full px-2 py-1 border rounded"
286- />
287- < p className = "text-xs text-gray-500" >
288- Keeps raw points within ±{ filterPercent } % of the average curve.
289- </ p >
290- </ >
291- ) }
292-
293- { /* σ BAND */ }
294- { rawFilterMode === 'sigma' && (
295- < >
296- < label className = "font-medium" >
297- σ-Band: ±{ sigmaK } σ
298268 </ label >
269+
299270 < input
300271 type = "range"
301- min = { 0.5 }
302- max = { 3 }
303- step = { 0.1 }
304- value = { sigmaK }
272+ min = { rawFilterMode === "percent" ? 1 : 0.5 }
273+ max = { rawFilterMode === "percent" ? 200 : 3 }
274+ step = { rawFilterMode === "percent" ? 1 : 0.1 }
275+ value = { rawFilterMode === "percent" ? filterPercent : sigmaK }
305276 onChange = { ( e ) =>
306- setSettings ( { sigmaK : Number ( e . target . value ) } )
277+ setSettings (
278+ rawFilterMode === "percent"
279+ ? { filterPercent : Number ( e . target . value ) }
280+ : { sigmaK : Number ( e . target . value ) }
281+ )
307282 }
308283 />
284+
309285 < input
310286 type = "number"
311- min = { 0.5 }
312- max = { 3 }
313- step = { 0.1 }
314- value = { sigmaK }
287+ min = { rawFilterMode === "percent" ? 1 : 0.5 }
288+ max = { rawFilterMode === "percent" ? 200 : 3 }
289+ step = { rawFilterMode === "percent" ? 1 : 0.1 }
290+ value = { rawFilterMode === "percent" ? filterPercent : sigmaK }
315291 onChange = { ( e ) =>
316- setSettings ( { sigmaK : Number ( e . target . value ) } )
292+ setSettings (
293+ rawFilterMode === "percent"
294+ ? { filterPercent : Number ( e . target . value ) }
295+ : { sigmaK : Number ( e . target . value ) }
296+ )
317297 }
318298 className = "w-full px-2 py-1 border rounded"
319299 />
320- < p className = "text-xs text-gray-500" >
321- Keeps raw points within ±{ sigmaK } standard deviations.
322- </ p >
323- </ >
324- ) }
325- </ div >
326- ) }
327- </ Section >
328- ) }
300+ </ div >
301+
302+ </ div >
303+ ) }
304+ </ Section >
305+ ) }
329306
330307 { /* Download Button */ }
331308 { visibility . download && (
0 commit comments