Kobana UI
GitHub

DateRangePicker

Seletor de período com opções rápidas (Hoje, Últimos 7 dias, etc.) e período personalizado com inputs de data.

Carregando...

Instalação

npx @kobana/ui add date-range-picker

Dependências instaladas automaticamente: button, input, label, popover (shadcn/ui), lucide-react

Importação

import { DateRangePicker } from "@/components/kobana/date-range-picker"

Props

DateRangePicker

PropTipoDefaultDescrição
startDatestring""Data inicial no formato ISO (YYYY-MM-DD)
endDatestring""Data final no formato ISO (YYYY-MM-DD)
onDateChange(start: string, end: string) => voidCallback ao alterar o período
quickOptionsQuickOption[]Hoje, Ontem, 7/30/90 dias, Todo PeríodoOpções de seleção rápida
labelsDateRangePickerLabelspt-BRLabels customizáveis
formatDate(dateStr: string) => stringdd/mm/yyyyFormatação de exibição
align"start" | "center" | "end""end"Alinhamento do popover
classNamestringClasses adicionais no trigger

QuickOption

PropTipoDescrição
keystringIdentificador único
labelstringTexto exibido
getRange() => { start: string; end: string }Função que retorna o período

DateRangePickerLabels

PropTipoDefault
quickSelectionstring"Seleção Rápida"
customPeriodstring"Período Personalizado"
startDatestring"Data Inicial"
endDatestring"Data Final"
applystring"Aplicar"
clearstring"Limpar"
allTimestring"Todo o Período"
fromstring"De"
untilstring"Até"

Uso

Básico

const [startDate, setStartDate] = useState("")
const [endDate, setEndDate] = useState("")

<DateRangePicker
  startDate={startDate}
  endDate={endDate}
  onDateChange={(start, end) => {
    setStartDate(start)
    setEndDate(end)
  }}
/>

Com URL params (Next.js)

const searchParams = useSearchParams()
const router = useRouter()
const pathname = usePathname()

<DateRangePicker
  startDate={searchParams.get("startDate") ?? ""}
  endDate={searchParams.get("endDate") ?? ""}
  onDateChange={(start, end) => {
    const params = new URLSearchParams(searchParams.toString())
    start ? params.set("startDate", start) : params.delete("startDate")
    end ? params.set("endDate", end) : params.delete("endDate")
    router.push(`${pathname}?${params.toString()}`)
  }}
/>

Com opções personalizadas

<DateRangePicker
  startDate={startDate}
  endDate={endDate}
  onDateChange={handleDateChange}
  quickOptions={[
    { key: "thisMonth", label: "Este mês", getRange: () => ({ start: "2025-04-01", end: "2025-04-30" }) },
    { key: "lastMonth", label: "Mês passado", getRange: () => ({ start: "2025-03-01", end: "2025-03-31" }) },
    { key: "allTime", label: "Tudo", getRange: () => ({ start: "", end: "" }) },
  ]}
/>

Com labels em inglês

<DateRangePicker
  startDate={startDate}
  endDate={endDate}
  onDateChange={handleDateChange}
  labels={{
    quickSelection: "Quick Selection",
    customPeriod: "Custom Period",
    startDate: "Start Date",
    endDate: "End Date",
    apply: "Apply",
    clear: "Clear",
    allTime: "All Time",
    from: "From",
    until: "Until",
  }}
  formatDate={(d) => new Date(d + "T00:00:00").toLocaleDateString("en-US")}
/>

On this page