@@ -387,18 +387,14 @@ export const AwairChart = memo(function AwairChart(
387387 useAction ( 'right:none' , { label : 'Clear' , group : 'Y-Axis Metrics' , defaultBindings : [ 'shift+n' ] , handler : ( ) => r . set ( 'none' ) } )
388388 useAction ( 'right:autorange' , { label : 'Toggle auto-range' , group : 'Y-Axis Metrics' , defaultBindings : [ 'shift+a' ] , handler : ( ) => { if ( r . val !== 'none' ) r . setAutoRange ( ! r . autoRange ) } } )
389389
390- // Time ranges
391- useAction ( 'time:00-6h' , { label : '6 hours' , group : 'Time Range' , defaultBindings : [ '6' ] , keywords : [ '6h' , '6hr' ] , handler : ( ) => handleTimeRangeClick ( 6 ) } )
392- useAction ( 'time:01-12h' , { label : '12 hours' , group : 'Time Range' , defaultBindings : [ 'ctrl+h' ] , keywords : [ '12h' , '12hr' , 'half day' ] , handler : ( ) => handleTimeRangeClick ( 12 ) } )
393- useAction ( 'time:02-1d' , { label : '1 day' , group : 'Time Range' , defaultBindings : [ '1' , 'd 1' ] , keywords : [ '1d' , '24h' , 'day' , 'today' ] , handler : ( ) => handleTimeRangeClick ( 24 ) } )
394- useAction ( 'time:03-3d' , { label : '3 days' , group : 'Time Range' , defaultBindings : [ '3' , 'd 3' ] , keywords : [ '3d' , '72h' ] , handler : ( ) => handleTimeRangeClick ( 24 * 3 ) } )
395- useAction ( 'time:04-7d' , { label : '1 week' , group : 'Time Range' , defaultBindings : [ '7' , 'w 1' ] , keywords : [ '7d' , '1w' , 'week' ] , handler : ( ) => handleTimeRangeClick ( 24 * 7 ) } )
396- useAction ( 'time:05-14d' , { label : '2 weeks' , group : 'Time Range' , defaultBindings : [ '2' , 'w 2' ] , keywords : [ '14d' , '2w' , 'fortnight' ] , handler : ( ) => handleTimeRangeClick ( 24 * 14 ) } )
397- useAction ( 'time:06-31d' , { label : '1 month' , group : 'Time Range' , defaultBindings : [ 'm 1' ] , keywords : [ '31d' , '1mo' , '1m' , 'month' ] , handler : ( ) => handleTimeRangeClick ( 24 * 31 ) } )
398- useAction ( 'time:07-62d' , { label : '2 months' , group : 'Time Range' , defaultBindings : [ 'm 2' ] , keywords : [ '62d' , '2mo' , '2m' ] , handler : ( ) => handleTimeRangeClick ( 24 * 62 ) } )
399- useAction ( 'time:08-92d' , { label : '3 months' , group : 'Time Range' , defaultBindings : [ 'm 3' ] , keywords : [ '92d' , '3mo' , '3m' , 'quarter' ] , handler : ( ) => handleTimeRangeClick ( 24 * 92 ) } )
400- useAction ( 'time:09-all' , { label : 'Full history' , group : 'Time Range' , defaultBindings : [ 'f' ] , keywords : [ 'all' , 'everything' , 'max' , 'full' ] , handler : handleAllClick } )
401- useAction ( 'time:10-latest' , { label : 'Latest' , group : 'Time Range' , defaultBindings : [ 'l' ] , keywords : [ 'now' , 'current' , 'live' ] , handler : toggleLatestMode } )
390+ // Time ranges - dynamic with digit wildcards
391+ useAction ( 'time:hours' , { label : 'N hours' , group : 'Time Range' , defaultBindings : [ '\\d+ h' , 'h \\d+' ] , keywords : [ 'hours' ] , handler : useCallback ( ( _ , captures ) => handleTimeRangeClick ( captures ?. [ 0 ] ?? 1 ) , [ handleTimeRangeClick ] ) } )
392+ useAction ( 'time:days' , { label : 'N days' , group : 'Time Range' , defaultBindings : [ '\\d+ d' , 'd \\d+' ] , keywords : [ 'days' ] , handler : useCallback ( ( _ , captures ) => handleTimeRangeClick ( ( captures ?. [ 0 ] ?? 1 ) * 24 ) , [ handleTimeRangeClick ] ) } )
393+ useAction ( 'time:weeks' , { label : 'N weeks' , group : 'Time Range' , defaultBindings : [ '\\d+ w' , 'w \\d+' ] , keywords : [ 'weeks' ] , handler : useCallback ( ( _ , captures ) => handleTimeRangeClick ( ( captures ?. [ 0 ] ?? 1 ) * 24 * 7 ) , [ handleTimeRangeClick ] ) } )
394+ useAction ( 'time:months' , { label : 'N months' , group : 'Time Range' , defaultBindings : [ '\\d+ m' , 'm \\d+' ] , keywords : [ 'months' ] , handler : useCallback ( ( _ , captures ) => handleTimeRangeClick ( ( captures ?. [ 0 ] ?? 1 ) * 24 * 31 ) , [ handleTimeRangeClick ] ) } )
395+ // Special time ranges (not digit-based)
396+ useAction ( 'time:all' , { label : 'Full history' , group : 'Time Range' , defaultBindings : [ 'f' ] , keywords : [ 'all' , 'everything' , 'max' , 'full' ] , handler : handleAllClick } )
397+ useAction ( 'time:latest' , { label : 'Latest' , group : 'Time Range' , defaultBindings : [ 'l' ] , keywords : [ 'now' , 'current' , 'live' ] , handler : toggleLatestMode } )
402398
403399 // Devices
404400 useAction ( 'device:gym' , { label : 'Gym' , group : 'Toggle devices on/off' , defaultBindings : [ 'g' ] , handler : ( ) => toggleDeviceByPattern ( 'gym' ) } )
0 commit comments