feat(web): фильтры VPS в стиле reui.io + ReUI-компоненты в форме
- Регистр @reui в components.json (URL https://reui.io/r/{style}/{name}.json) - Установлены @reui/filters, @reui/autocomplete, @reui/number-field, @reui/date-selector и shadcn slider через shadcn CLI - Поправлены TS-импорты в ReUI-исходниках (type-only) и удалены неиспользуемые объявления; в packages/ui добавлены react-day-picker и date-fns для calendar - Новый VpsFiltersToolbar: тулбар с поиском, кнопкой «Фильтр» (ReUI Filters), chips с операторами, Popover «Вид» (группировка/компактность/пресеты) - vps-filters.tsx переписан под массивы значений (мультивыбор) с поддержкой операторов is_any_of / contains / gte; applyVpsFilters принимает как state, так и Filter[] (stateToActiveFilters) - В форме VPS vcpu/ramGb/diskGb/monthlyRate/dailyRate — @reui/number-field через Controller, paidUntil — @reui/date-selector (одиночная дата) - AutoCompleteInput: отступы флага size-4 leading-none, CommandList py-1, CommandItem gap-2.5, PopoverContent min-w-[220px] - build + tsc --noEmit без ошибок Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import * as React from "react"
|
||||
|
||||
const MOBILE_BREAKPOINT = 768
|
||||
|
||||
export function useIsMobile() {
|
||||
const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)
|
||||
|
||||
React.useEffect(() => {
|
||||
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)
|
||||
const onChange = () => {
|
||||
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
|
||||
}
|
||||
mql.addEventListener("change", onChange)
|
||||
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
|
||||
return () => mql.removeEventListener("change", onChange)
|
||||
}, [])
|
||||
|
||||
return !!isMobile
|
||||
}
|
||||
Reference in New Issue
Block a user