Home / File/ date-picker-natural-language.tsx — ui Source File

date-picker-natural-language.tsx — ui Source File

Architecture documentation for date-picker-natural-language.tsx, a tsx file in the ui codebase. 7 imports, 0 dependents.

File tsx DocumentationAtlas SearchAPI 7 imports 2 functions

Entity Profile

Dependency Diagram

graph LR
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8["date-picker-natural-language.tsx"]
  1d141819_425e_b5fd_4c8e_32f7c6a42cf2["react"]
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 --> 1d141819_425e_b5fd_4c8e_32f7c6a42cf2
  a8023de3_411c_8d95_59e9_37549a0c2d75["calendar"]
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 --> a8023de3_411c_8d95_59e9_37549a0c2d75
  e6c524b5_d047_d4f9_50b2_7f100d612cb2["field"]
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 --> e6c524b5_d047_d4f9_50b2_7f100d612cb2
  4a37d855_5768_bc5a_31ae_9f42eba9091a["input-group"]
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 --> 4a37d855_5768_bc5a_31ae_9f42eba9091a
  a3e47561_21be_d5cd_a896_ddf369cf7b61["popover"]
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 --> a3e47561_21be_d5cd_a896_ddf369cf7b61
  bac616a4_a8b3_e9e6_4624_ced1fc9bc31d["chrono-node"]
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 --> bac616a4_a8b3_e9e6_4624_ced1fc9bc31d
  d39cd1e4_1b2d_9aa2_1d29_fd0b4bfb61c3["lucide-react"]
  06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 --> d39cd1e4_1b2d_9aa2_1d29_fd0b4bfb61c3
  style 06e1b054_abbc_9a3c_3fc7_cd3e1a2052e8 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"use client"

import * as React from "react"
import { Calendar } from "@/examples/base/ui/calendar"
import { Field, FieldLabel } from "@/examples/base/ui/field"
import {
  InputGroup,
  InputGroupAddon,
  InputGroupButton,
  InputGroupInput,
} from "@/examples/base/ui/input-group"
import {
  Popover,
  PopoverContent,
  PopoverTrigger,
} from "@/examples/base/ui/popover"
import { parseDate } from "chrono-node"
import { CalendarIcon } from "lucide-react"

function formatDate(date: Date | undefined) {
  if (!date) {
    return ""
  }

  return date.toLocaleDateString("en-US", {
    day: "2-digit",
    month: "long",
    year: "numeric",
  })
}

export function DatePickerNaturalLanguage() {
  const [open, setOpen] = React.useState(false)
  const [value, setValue] = React.useState("In 2 days")
  const [date, setDate] = React.useState<Date | undefined>(
    parseDate(value) || undefined
  )

  return (
    <Field className="mx-auto max-w-xs">
      <FieldLabel htmlFor="date-optional">Schedule Date</FieldLabel>
      <InputGroup>
        <InputGroupInput
          id="date-optional"
          value={value}
          placeholder="Tomorrow or next week"
          onChange={(e) => {
            setValue(e.target.value)
            const date = parseDate(e.target.value)
            if (date) {
              setDate(date)
            }
          }}
          onKeyDown={(e) => {
            if (e.key === "ArrowDown") {
              e.preventDefault()
              setOpen(true)
            }
          }}
        />
        <InputGroupAddon align="inline-end">
          <Popover open={open} onOpenChange={setOpen}>
            <PopoverTrigger
              render={
                <InputGroupButton
                  id="date-picker"
                  variant="ghost"
                  size="icon-xs"
                  aria-label="Select date"
                />
              }
            >
              <CalendarIcon />
              <span className="sr-only">Select date</span>
            </PopoverTrigger>
            <PopoverContent
              className="w-auto overflow-hidden p-0"
              align="end"
              sideOffset={8}
            >
              <Calendar
                mode="single"
                selected={date}
                captionLayout="dropdown"
                defaultMonth={date}
                onSelect={(date) => {
                  setDate(date)
                  setValue(formatDate(date))
                  setOpen(false)
                }}
              />
            </PopoverContent>
          </Popover>
        </InputGroupAddon>
      </InputGroup>
      <div className="text-muted-foreground px-1 text-sm">
        Your post will be published on{" "}
        <span className="font-medium">{formatDate(date)}</span>.
      </div>
    </Field>
  )
}

Subdomains

Dependencies

  • calendar
  • chrono-node
  • field
  • input-group
  • lucide-react
  • popover
  • react

Frequently Asked Questions

What does date-picker-natural-language.tsx do?
date-picker-natural-language.tsx is a source file in the ui codebase, written in tsx. It belongs to the DocumentationAtlas domain, SearchAPI subdomain.
What functions are defined in date-picker-natural-language.tsx?
date-picker-natural-language.tsx defines 2 function(s): DatePickerNaturalLanguage, formatDate.
What does date-picker-natural-language.tsx depend on?
date-picker-natural-language.tsx imports 7 module(s): calendar, chrono-node, field, input-group, lucide-react, popover, react.
Where is date-picker-natural-language.tsx in the architecture?
date-picker-natural-language.tsx is located at apps/v4/examples/base/date-picker-natural-language.tsx (domain: DocumentationAtlas, subdomain: SearchAPI, directory: apps/v4/examples/base).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free