表单与选择@neumorphism-ui/date-picker

Date Picker

由父组件管理选择值。设置 name 后,以本地 YYYY-MM-DD 提交隐藏字段,避免 UTC 转换改变日期。重置也由父状态处理。

@neumorphism-ui/date-picker
Registry JSON

预览

日期按本地日历保存,而非 UTC 时间戳。

安装

安装: date-pickernpx shadcn@latest add @neumorphism-ui/date-picker

CLI 会依次处理 npm 依赖、base token、utils 和组件源码。

首次使用此 Registry?请先完成 namespace 配置 。

用法

用法: 安装npx shadcn@latest add @neumorphism-ui/date-picker @neumorphism-ui/button

Import

Date Picker import 代码
"use client";

import * as React from "react";
import { enUS, ko, ja, zhCN } from "@daypicker/react/locale";
import { DatePicker } from "@/components/ui/date-picker";
import { Button } from "@/components/ui/button";

Example

Date Picker 用法代码
const locales = { en: enUS, ko, ja, zh: zhCN };
const copy = {
  en: { label: "Due date", choose: "Select date", clear: "Clear date", locked: "Locked date", reset: "Reset date", hint: "Dates are stored as local calendar dates, not UTC timestamps." },
  ko: { label: "마감일", choose: "날짜 선택", clear: "날짜 지우기", locked: "변경 불가 날짜", reset: "날짜 초기화", hint: "날짜는 UTC 시각이 아닌 현지 달력의 날짜로 저장됩니다." },
  ja: { label: "期限", choose: "日付を選択", clear: "日付をクリア", locked: "変更不可の日付", reset: "日付をリセット", hint: "UTC時刻ではなく、現地のカレンダー日付として保存します。" },
  zh: { label: "截止日期", choose: "选择日期", clear: "清除日期", locked: "锁定日期", reset: "重置日期", hint: "日期按本地日历保存,而非 UTC 时间戳。" },
};

export default function DatePickerExample({ locale = "zh" }: { locale?: keyof typeof copy }) {
  const text = copy[locale];
  const id = React.useId();
  const [date, setDate] = React.useState<Date | undefined>(new Date(2026, 8, 15));
  return <form className="grid w-full max-w-sm gap-4" onSubmit={event => event.preventDefault()} onReset={() => setDate(new Date(2026, 8, 15))}>
    <label htmlFor={id} className="text-sm font-semibold">{text.label}</label>
    <DatePicker id={id} name="dueDate" label={text.label} value={date} onValueChange={setDate} locale={locales[locale]} placeholder={text.choose} clearLabel={text.clear} describedBy={`${id}-hint`} disabledDates={{ before: new Date(2026, 8, 10) }} startMonth={new Date(2026, 8)} endMonth={new Date(2027, 11)} />
    <p id={`${id}-hint`} className="text-sm leading-relaxed text-[var(--muted-foreground)]">{text.hint}</p>
    <Button type="reset" size="sm" className="w-fit">{text.reset}</Button>
    <DatePicker label={text.locked} value={new Date(2026, 8, 15)} onValueChange={() => {}} disabled locale={locales[locale]} clearLabel={text.clear} />
  </form>;
}

API 参考

组件属性类型默认值说明
DatePickervalue / onValueChangeDate | undefined / callback—当前日期和更改回调,空值为undefined。
DatePickerlabel / name / describedBystring—按钮名称、表单字段名和说明元素ID。
DatePickerdisabledDates / startMonth / endMonthMatcher | Matcher[] / Date—禁用日期及月份导航范围。

无障碍

  • 01

    打开时聚焦日历,关闭时恢复触发器焦点。

  • 02

    在父表单验证必填值,使用invalid和describedBy关联错误。