UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

1 lines • 4.42 kB
{"version":3,"file":"DatePicker.mjs","names":["datePickerMessages","useControlledState"],"sources":["../../../src/base-ui/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client';\n\nimport dayjs from 'dayjs';\nimport { CalendarIcon } from 'lucide-react';\nimport { memo, useState } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport datePickerMessages from '@/i18n/resources/en/datePicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\n\nimport { clampToBounds, DEFAULT_FORMAT } from './calendar';\nimport CalendarPanel from './CalendarPanel';\nimport PickerShell from './PickerShell';\nimport { styles } from './style';\nimport type { DatePickerProps } from './type';\n\nconst PLACEHOLDER_KEY = {\n date: 'datePicker.placeholder',\n month: 'datePicker.monthPlaceholder',\n year: 'datePicker.yearPlaceholder',\n} as const;\n\nexport const formatDate = (date: Date, format: DatePickerProps['format'], fallback: string) =>\n typeof format === 'function' ? format(date) : dayjs(date).format(format ?? fallback);\n\nconst DatePicker = memo<DatePickerProps>(\n ({\n allowClear = true,\n className,\n defaultValue = null,\n disabled,\n disabledDate,\n footer,\n format,\n max,\n min,\n mode = 'date',\n onChange,\n placeholder,\n shadow,\n size,\n style,\n value,\n variant,\n }) => {\n const { t } = useTranslation(datePickerMessages);\n const [current, setCurrent] = useControlledState<Date | null>(defaultValue, {\n defaultValue,\n onChange,\n value,\n });\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date>(() => current ?? new Date());\n\n const text = current ? formatDate(current, format, DEFAULT_FORMAT[mode]) : null;\n\n return (\n <PickerShell\n className={className}\n disabled={disabled}\n open={open}\n shadow={shadow}\n showClear={allowClear && !!current}\n size={size}\n style={style}\n variant={variant}\n icon={\n <span className={styles.icon}>\n <Icon icon={CalendarIcon} size={14} />\n </span>\n }\n trigger={\n <button className={styles.trigger} disabled={disabled} type=\"button\">\n {text ?? (\n <span className={styles.placeholder}>{placeholder ?? t(PLACEHOLDER_KEY[mode])}</span>\n )}\n </button>\n }\n onClear={() => setCurrent(null)}\n onOpenChange={(next) => {\n if (next) setMonth(current ?? clampToBounds(new Date(), { max, min }));\n setOpen(next);\n }}\n >\n <CalendarPanel\n bounds={{ disabledDate, max, min }}\n mode={mode}\n month={month}\n selected={current}\n onMonthChange={setMonth}\n onSelect={(date) => {\n setCurrent(date);\n setOpen(false);\n }}\n />\n {footer && <div className={styles.footer}>{footer}</div>}\n </PickerShell>\n );\n },\n);\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,kBAAkB;CACtB,MAAM;CACN,OAAO;CACP,MAAM;AACR;AAEA,MAAa,cAAc,MAAY,QAAmC,aACxE,OAAO,WAAW,aAAa,OAAO,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,UAAU,QAAQ;AAErF,MAAM,aAAa,MAChB,EACC,aAAa,MACb,WACA,eAAe,MACf,UACA,cACA,QACA,QACA,KACA,KACA,OAAO,QACP,UACA,aACA,QACA,MACA,OACA,OACA,cACI;CACJ,MAAM,EAAE,MAAM,eAAeA,kBAAkB;CAC/C,MAAM,CAAC,SAAS,cAAcC,cAAgC,cAAc;EAC1E;EACA;EACA;CACF,CAAC;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,CAAC,OAAO,YAAY,eAAqB,2BAAW,IAAI,KAAK,CAAC;CAEpE,MAAM,OAAO,UAAU,WAAW,SAAS,QAAQ,eAAe,KAAK,IAAI;CAE3E,OACE,qBAAC,aAAD;EACa;EACD;EACJ;EACE;EACR,WAAW,cAAc,CAAC,CAAC;EACrB;EACC;EACE;EACT,MACE,oBAAC,QAAD;GAAM,WAAW,OAAO;GACtB,UAAA,oBAAC,MAAD;IAAM,MAAM;IAAc,MAAM;GAAK,CAAA;EACjC,CAAA;EAER,SACE,oBAAC,UAAD;GAAQ,WAAW,OAAO;GAAmB;GAAU,MAAK;GACzD,UAAA,QACC,oBAAC,QAAD;IAAM,WAAW,OAAO;IAAc,UAAA,eAAe,EAAE,gBAAgB,KAAK;GAAQ,CAAA;EAEhF,CAAA;EAEV,eAAe,WAAW,IAAI;EAC9B,eAAe,SAAS;GACtB,IAAI,MAAM,SAAS,WAAW,8BAAc,IAAI,KAAK,GAAG;IAAE;IAAK;GAAI,CAAC,CAAC;GACrE,QAAQ,IAAI;EACd;EAzBF,UAAA,CA2BE,oBAAC,eAAD;GACE,QAAQ;IAAE;IAAc;IAAK;GAAI;GAC3B;GACC;GACP,UAAU;GACV,eAAe;GACf,WAAW,SAAS;IAClB,WAAW,IAAI;IACf,QAAQ,KAAK;GACf;EACD,CAAA,GACA,UAAU,oBAAC,OAAD;GAAK,WAAW,OAAO;GAAS,UAAA;EAAY,CAAA,CAC5C;;AAEjB,CACF;AAEA,WAAW,cAAc"}