This commit is contained in:
2026-01-03 14:16:16 -08:00
commit 1f0e678d47
71 changed files with 16127 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
'use client'
import { create } from 'zustand'
export interface ThresholdState {
speedMin: number
speedMax: number
dirCenter: number
dirRange: number
setSpeedMin: (value: number) => void
setSpeedMax: (value: number) => void
setDirCenter: (value: number) => void
setDirRange: (value: number) => void
setSpeedRange: (min: number, max: number) => void
initFromURL: () => void
}
// Helper to update URL params
const updateURLParams = (params: Record<string, string>) => {
if (typeof window === 'undefined') return
const url = new URL(window.location.href)
Object.entries(params).forEach(([key, value]) => {
url.searchParams.set(key, value)
})
window.history.replaceState({}, '', url.toString())
}
// Helper to read from URL params
const getURLParam = (key: string, defaultValue: number): number => {
if (typeof window === 'undefined') return defaultValue
const params = new URLSearchParams(window.location.search)
const value = params.get(key)
return value ? parseFloat(value) : defaultValue
}
export const useThresholdStore = create<ThresholdState>((set) => ({
// Default values
speedMin: 7,
speedMax: 14,
dirCenter: 270,
dirRange: 15,
setSpeedMin: (value) => {
set({ speedMin: value })
updateURLParams({ speedMin: value.toString() })
},
setSpeedMax: (value) => {
set({ speedMax: value })
updateURLParams({ speedMax: value.toString() })
},
setDirCenter: (value) => {
set({ dirCenter: value })
updateURLParams({ dirCenter: value.toString() })
},
setDirRange: (value) => {
set({ dirRange: value })
updateURLParams({ dirRange: value.toString() })
},
setSpeedRange: (min, max) => {
set({ speedMin: min, speedMax: max })
updateURLParams({
speedMin: min.toString(),
speedMax: max.toString()
})
},
initFromURL: () => {
set({
speedMin: getURLParam('speedMin', 7),
speedMax: getURLParam('speedMax', 14),
dirCenter: getURLParam('dirCenter', 270),
dirRange: getURLParam('dirRange', 15),
})
},
}))