@artemy-tech/datepicker 0.0.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +409 -142
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -3
- package/dist/index.d.ts +20 -3
- package/dist/index.js +394 -127
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Calendar/Calendar.tsx","../src/components/DatePicker/DatePicker.tsx","../src/hooks/useClickOutside.ts","../src/components/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["export { Calendar } from './components/Calendar'\nexport type { CalendarProps } from './components/Calendar'\n\nexport { DatePicker } from './components/DatePicker'\nexport type { DatePickerProps } from './components/DatePicker'\n\nexport { DateRangePicker } from './components/DateRangePicker'\nexport type { DateRangePickerProps, DateRange } from './components/DateRangePicker'\n\nexport const VERSION = '0.0.1'\n","import { DayPicker, DayPickerProps } from 'react-day-picker'\n\nexport type CalendarProps = DayPickerProps & {\n className?: string\n}\n\nexport function Calendar({ className, ...props }: CalendarProps) {\n return (\n <DayPicker\n className={['datepicker-calendar', className].filter(Boolean).join(' ')}\n {...props}\n />\n )\n}\n","import { useCallback, useRef, useState } from 'react'\nimport { format, isValid, parse } from 'date-fns'\nimport { ru } from 'date-fns/locale'\nimport { useClickOutside } from '../../hooks/useClickOutside'\nimport { Calendar } from '../Calendar'\n\nconst DATE_FORMAT = 'dd.MM.yyyy'\n\nfunction applyMask(digits: string): string {\n const d = digits.slice(0, 8)\n let result = ''\n for (let i = 0; i < d.length; i++) {\n if (i === 2 || i === 4) result += '.'\n result += d[i]\n }\n return result\n}\n\nfunction getCursorPos(masked: string, digitCount: number): number {\n if (digitCount === 0) return 0\n let count = 0\n for (let i = 0; i < masked.length; i++) {\n if (/\\d/.test(masked[i])) {\n count++\n if (count === digitCount) return i + 1\n }\n }\n return masked.length\n}\n\nfunction parseDate(masked: string): Date | undefined {\n if (masked.replace(/\\D/g, '').length !== 8) return undefined\n const date = parse(masked, DATE_FORMAT, new Date())\n // round-trip check prevents day-overflow (e.g. 32.01 → Jan 32 → Feb 1)\n return isValid(date) && format(date, DATE_FORMAT) === masked ? date : undefined\n}\n\nexport interface DatePickerProps {\n value?: Date\n defaultValue?: Date\n onChange?: (date: Date | undefined) => void\n label?: string\n placeholder?: string\n fromDate?: Date\n toDate?: Date\n disabled?: boolean\n failed?: boolean\n className?: string\n}\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n label,\n placeholder = 'дд.мм.гггг',\n fromDate,\n toDate,\n disabled = false,\n failed = false,\n className,\n}: DatePickerProps) {\n const isControlled = value !== undefined\n const [internalDate, setInternalDate] = useState<Date | undefined>(defaultValue)\n const [open, setOpen] = useState(false)\n const [focused, setFocused] = useState(false)\n const [inputValue, setInputValue] = useState(() =>\n defaultValue && isValid(defaultValue) ? format(defaultValue, DATE_FORMAT) : '',\n )\n const [inputInvalid, setInputInvalid] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const selected = isControlled ? value : internalDate\n const filled = inputValue.length > 0\n\n const close = useCallback(() => setOpen(false), [])\n useClickOutside(containerRef, close)\n\n function commit(masked: string) {\n const digits = masked.replace(/\\D/g, '')\n if (digits.length === 0) {\n setInputInvalid(false)\n if (!isControlled) setInternalDate(undefined)\n onChange?.(undefined)\n } else if (digits.length === 8) {\n const date = parseDate(masked)\n setInputInvalid(!date)\n if (!isControlled) setInternalDate(date)\n onChange?.(date)\n } else {\n setInputInvalid(false)\n }\n }\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n const input = e.target\n const cursorPos = input.selectionStart ?? 0\n const raw = input.value\n const digits = raw.replace(/\\D/g, '').slice(0, 8)\n const masked = applyMask(digits)\n const digitsBeforeCursor = raw.slice(0, cursorPos).replace(/\\D/g, '').length\n const newCursorPos = getCursorPos(masked, digitsBeforeCursor)\n setInputValue(masked)\n commit(masked)\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(newCursorPos, newCursorPos))\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const input = e.currentTarget\n const pos = input.selectionStart ?? 0\n\n if (e.key.length === 1 && !/\\d/.test(e.key) && !e.ctrlKey && !e.metaKey) {\n e.preventDefault()\n return\n }\n\n if (e.key === 'Backspace' && pos > 0 && input.value[pos - 1] === '.') {\n e.preventDefault()\n const val = input.value\n const masked = applyMask((val.slice(0, pos - 2) + val.slice(pos)).replace(/\\D/g, ''))\n setInputValue(masked)\n commit(masked)\n requestAnimationFrame(() => input.setSelectionRange(pos - 2, pos - 2))\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLInputElement>) {\n e.preventDefault()\n const masked = applyMask(e.clipboardData.getData('text').replace(/\\D/g, ''))\n setInputValue(masked)\n commit(masked)\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(masked.length, masked.length))\n }\n\n function handleSelect(date: Date | undefined) {\n if (!isControlled) setInternalDate(date)\n setInputValue(date && isValid(date) ? format(date, DATE_FORMAT) : '')\n setInputInvalid(false)\n onChange?.(date)\n setOpen(false)\n }\n\n return (\n <div\n ref={containerRef}\n className={['datepicker', className].filter(Boolean).join(' ')}\n data-focused={focused || open || undefined}\n data-filled={filled || undefined}\n data-failed={failed || inputInvalid || undefined}\n data-disabled={disabled || undefined}\n >\n <div className=\"datepicker__field\" onClick={() => !disabled && inputRef.current?.focus()}>\n {label && <span className=\"datepicker__label\">{label}</span>}\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"datepicker__input\"\n value={inputValue}\n placeholder={label && !focused ? undefined : placeholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={() => { setFocused(true); if (!disabled) setOpen(true) }}\n onBlur={() => setFocused(false)}\n aria-label={label ?? 'Выберите дату'}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={inputInvalid || undefined}\n />\n </div>\n {open && (\n <div className=\"datepicker__popover\" role=\"dialog\" aria-label=\"Календарь\">\n <Calendar\n mode=\"single\"\n selected={selected}\n onSelect={handleSelect}\n startMonth={fromDate}\n endMonth={toDate}\n locale={ru}\n />\n </div>\n )}\n </div>\n )\n}\n","import { RefObject, useEffect } from 'react'\n\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void) {\n useEffect(() => {\n function listener(e: MouseEvent) {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n document.addEventListener('mousedown', listener)\n return () => document.removeEventListener('mousedown', listener)\n }, [ref, handler])\n}\n","import { useCallback, useRef, useState } from 'react'\nimport { format, isValid, parse } from 'date-fns'\nimport { ru } from 'date-fns/locale'\nimport type { DateRange } from 'react-day-picker'\nimport { useClickOutside } from '../../hooks/useClickOutside'\nimport { Calendar } from '../Calendar'\n\nconst DATE_FORMAT = 'dd.MM.yyyy'\n\nfunction applyDateMask(digits: string): string {\n const d = digits.slice(0, 8)\n let result = ''\n for (let i = 0; i < d.length; i++) {\n if (i === 2 || i === 4) result += '.'\n result += d[i]\n }\n return result\n}\n\nfunction applyRangeMask(digits: string): string {\n const all = digits.slice(0, 16)\n const fromMasked = applyDateMask(all.slice(0, 8))\n const toDigits = all.slice(8)\n if (toDigits.length === 0) return fromMasked\n return `${fromMasked} — ${applyDateMask(toDigits)}`\n}\n\nfunction getRangeCursorPos(masked: string, digitCount: number): number {\n if (digitCount === 0) return 0\n let count = 0\n for (let i = 0; i < masked.length; i++) {\n if (/\\d/.test(masked[i])) {\n count++\n if (count === digitCount) return i + 1\n }\n }\n return masked.length\n}\n\nfunction parseDate(masked: string): Date | undefined {\n if (masked.replace(/\\D/g, '').length !== 8) return undefined\n const date = parse(masked, DATE_FORMAT, new Date())\n return isValid(date) && format(date, DATE_FORMAT) === masked ? date : undefined\n}\n\nfunction formatRange(from: Date | undefined, to: Date | undefined): string {\n if (!from) return ''\n const fromStr = format(from, DATE_FORMAT)\n if (!to) return fromStr\n return `${fromStr} — ${format(to, DATE_FORMAT)}`\n}\n\nexport type { DateRange }\n\nexport interface DateRangePickerProps {\n value?: DateRange\n defaultValue?: DateRange\n onChange?: (range: DateRange | undefined) => void\n label?: string\n fromDate?: Date\n toDate?: Date\n disabled?: boolean\n failed?: boolean\n className?: string\n}\n\nexport function DateRangePicker({\n value,\n defaultValue,\n onChange,\n label,\n fromDate: fromConstraint,\n toDate: toConstraint,\n disabled = false,\n failed = false,\n className,\n}: DateRangePickerProps) {\n const isControlled = value !== undefined\n\n const [internalFrom, setInternalFrom] = useState<Date | undefined>(defaultValue?.from)\n const [internalTo, setInternalTo] = useState<Date | undefined>(defaultValue?.to)\n const [inputValue, setInputValue] = useState(() =>\n formatRange(defaultValue?.from, defaultValue?.to),\n )\n const [inputInvalid, setInputInvalid] = useState(false)\n const [open, setOpen] = useState(false)\n const [focused, setFocused] = useState(false)\n\n // Calendar picking state — managed separately from confirmed dates\n const [anchorDate, setAnchorDate] = useState<Date | undefined>(undefined)\n const [hoveredDate, setHoveredDate] = useState<Date | undefined>(undefined)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const confirmedFrom = isControlled ? value?.from : internalFrom\n const confirmedTo = isControlled ? value?.to : internalTo\n const filled = inputValue.length > 0\n\n const close = useCallback(() => {\n setOpen(false)\n setAnchorDate(undefined)\n setHoveredDate(undefined)\n }, [])\n useClickOutside(containerRef, close)\n\n // Visual range shown in calendar\n const calendarSelected: DateRange | undefined = anchorDate\n ? hoveredDate\n ? anchorDate <= hoveredDate\n ? { from: anchorDate, to: hoveredDate }\n : { from: hoveredDate, to: anchorDate }\n : { from: anchorDate, to: undefined }\n : { from: confirmedFrom, to: confirmedTo }\n\n // ── Calendar handlers ─────────────────────────────────────────\n\n // All selection logic lives here. onSelect is a no-op so calendar display is fully controlled.\n function handleDayClick(day: Date) {\n if (!anchorDate) {\n // Phase 1: pick the \"from\" anchor\n setAnchorDate(day)\n if (!isControlled) { setInternalFrom(day); setInternalTo(undefined) }\n setInputValue(format(day, DATE_FORMAT))\n setInputInvalid(false)\n onChange?.(day ? { from: day, to: undefined } : undefined)\n } else {\n // Phase 2: pick \"to\" and close\n let from = anchorDate, to = day\n if (day < anchorDate) { from = day; to = anchorDate }\n if (!isControlled) { setInternalFrom(from); setInternalTo(to) }\n setInputValue(formatRange(from, to))\n setInputInvalid(false)\n onChange?.({ from, to })\n close()\n }\n }\n\n function handleDayMouseEnter(day: Date) {\n if (anchorDate) setHoveredDate(day)\n }\n\n // ── Text input handlers ───────────────────────────────────────\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n const input = e.target\n const cursorPos = input.selectionStart ?? 0\n const raw = input.value\n const digits = raw.replace(/\\D/g, '').slice(0, 16)\n const masked = applyRangeMask(digits)\n const digitsBeforeCursor = raw.slice(0, cursorPos).replace(/\\D/g, '').length\n\n setInputValue(masked)\n setAnchorDate(undefined)\n setHoveredDate(undefined)\n\n const fromDigits = digits.slice(0, 8)\n const toDigits = digits.slice(8)\n const parsedFrom = fromDigits.length === 8 ? parseDate(applyDateMask(fromDigits)) : undefined\n const parsedTo = toDigits.length === 8 ? parseDate(applyDateMask(toDigits)) : undefined\n const fromComplete = fromDigits.length === 8\n const toComplete = toDigits.length === 8\n setInputInvalid((fromComplete && !parsedFrom) || (toComplete && !parsedTo))\n\n if (!isControlled) { setInternalFrom(parsedFrom); setInternalTo(parsedTo) }\n onChange?.(parsedFrom || parsedTo ? { from: parsedFrom, to: parsedTo } : undefined)\n\n requestAnimationFrame(() =>\n inputRef.current?.setSelectionRange(\n getRangeCursorPos(masked, digitsBeforeCursor),\n getRangeCursorPos(masked, digitsBeforeCursor),\n ),\n )\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const input = e.currentTarget\n const pos = input.selectionStart ?? 0\n\n if (e.key.length === 1 && !/\\d/.test(e.key) && !e.ctrlKey && !e.metaKey) {\n e.preventDefault()\n return\n }\n if (e.key === 'Backspace' && pos > 0 && /[\\s—]/.test(input.value[pos - 1])) {\n // skip over separator characters\n e.preventDefault()\n const val = input.value\n const charsToSkip = val.slice(0, pos).match(/[\\s—]+$/)?.[0].length ?? 1\n const newPos = pos - charsToSkip\n const masked = applyRangeMask((val.slice(0, newPos - 1) + val.slice(newPos)).replace(/\\D/g, ''))\n setInputValue(masked)\n requestAnimationFrame(() => input.setSelectionRange(newPos - 1, newPos - 1))\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLInputElement>) {\n e.preventDefault()\n const text = e.clipboardData.getData('text')\n const digits = text.replace(/\\D/g, '').slice(0, 16)\n const masked = applyRangeMask(digits)\n setInputValue(masked)\n setAnchorDate(undefined)\n setHoveredDate(undefined)\n\n const parsedFrom = digits.length >= 8 ? parseDate(applyDateMask(digits.slice(0, 8))) : undefined\n const parsedTo = digits.length >= 16 ? parseDate(applyDateMask(digits.slice(8, 16))) : undefined\n setInputInvalid((digits.length >= 8 && !parsedFrom) || (digits.length >= 16 && !parsedTo))\n if (!isControlled) { setInternalFrom(parsedFrom); setInternalTo(parsedTo) }\n onChange?.(parsedFrom || parsedTo ? { from: parsedFrom, to: parsedTo } : undefined)\n\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(masked.length, masked.length))\n }\n\n const placeholder = label && !focused && !filled ? undefined : 'дд.мм.гггг — дд.мм.гггг'\n\n return (\n <div\n ref={containerRef}\n className={['datepicker', 'daterangepicker', className].filter(Boolean).join(' ')}\n data-focused={focused || open || undefined}\n data-filled={filled || undefined}\n data-failed={failed || inputInvalid || undefined}\n data-disabled={disabled || undefined}\n >\n <div className=\"datepicker__field\" onClick={() => !disabled && inputRef.current?.focus()}>\n {label && <span className=\"datepicker__label\">{label}</span>}\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"datepicker__input\"\n value={inputValue}\n placeholder={placeholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={() => { setFocused(true); if (!disabled) setOpen(true) }}\n onBlur={() => setFocused(false)}\n aria-label={label ?? 'Выберите период'}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={inputInvalid || undefined}\n />\n </div>\n {open && (\n <div className=\"datepicker__popover\" role=\"dialog\" aria-label=\"Выберите период\">\n <Calendar\n mode=\"range\"\n selected={calendarSelected}\n onSelect={() => {}}\n onDayClick={handleDayClick}\n onDayMouseEnter={handleDayMouseEnter}\n onDayMouseLeave={() => setHoveredDate(undefined)}\n startMonth={fromConstraint}\n endMonth={toConstraint}\n numberOfMonths={2}\n locale={ru}\n />\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","names":["import_react","import_jsx_runtime","_a","import_react","import_date_fns","import_locale","import_jsx_runtime","DATE_FORMAT","parseDate","_a"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Calendar/Calendar.tsx","../src/components/DatePicker/DatePicker.tsx","../src/hooks/useClickOutside.ts","../src/components/TimePanel/TimePanel.tsx","../src/components/icons/CalendarIcon.tsx","../src/components/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["export { Calendar } from './components/Calendar'\nexport type { CalendarProps } from './components/Calendar'\n\nexport { DatePicker } from './components/DatePicker'\nexport type { DatePickerProps, DatePickerShowTime } from './components/DatePicker'\n\nexport { DateRangePicker } from './components/DateRangePicker'\nexport type { DateRangePickerProps, DateRange } from './components/DateRangePicker'\n\nexport const VERSION = '0.0.1'\n","import { DayPicker, DayPickerProps } from 'react-day-picker'\n\nexport type CalendarProps = DayPickerProps & {\n className?: string\n}\n\nexport function Calendar({ className, ...props }: CalendarProps) {\n return (\n <DayPicker\n className={['datepicker-calendar', className].filter(Boolean).join(' ')}\n {...props}\n />\n )\n}\n","import { useCallback, useRef, useState, type ReactNode } from 'react'\nimport { format, isValid, parse } from 'date-fns'\nimport { ru } from 'date-fns/locale'\nimport { useClickOutside } from '../../hooks/useClickOutside'\nimport { Calendar } from '../Calendar'\nimport { TimePanel } from '../TimePanel'\nimport { CalendarIcon } from '../icons/CalendarIcon'\n\nexport type DatePickerSize = 's' | 'm' | 'l'\nexport type DatePickerShowTime = boolean | { format: 'HH:mm' | 'HH:mm:ss' }\n\nconst DATE_FORMAT = 'dd.MM.yyyy'\n\nfunction resolveTimeFormat(showTime?: DatePickerShowTime): 'HH:mm' | 'HH:mm:ss' | null {\n if (!showTime) return null\n if (showTime === true) return 'HH:mm:ss'\n return showTime.format\n}\n\nfunction buildDateFormat(timeFormat: string | null) {\n return timeFormat ? `${DATE_FORMAT} ${timeFormat}` : DATE_FORMAT\n}\n\nfunction buildMaxDigits(timeFormat: string | null) {\n if (!timeFormat) return 8\n return timeFormat === 'HH:mm' ? 12 : 14\n}\n\nfunction buildPlaceholder(timeFormat: string | null) {\n if (!timeFormat) return 'дд.мм.гггг'\n return timeFormat === 'HH:mm' ? 'дд.мм.гггг чч:мм' : 'дд.мм.гггг чч:мм:сс'\n}\n\nfunction applyMask(digits: string, maxDigits: number): string {\n const d = digits.slice(0, maxDigits)\n let result = ''\n for (let i = 0; i < d.length; i++) {\n if (i === 2 || i === 4) result += '.'\n else if (i === 8) result += ' '\n else if (i === 10 || i === 12) result += ':'\n result += d[i]\n }\n return result\n}\n\nfunction getCursorPos(masked: string, digitCount: number): number {\n if (digitCount === 0) return 0\n let count = 0\n for (let i = 0; i < masked.length; i++) {\n if (/\\d/.test(masked[i])) {\n count++\n if (count === digitCount) return i + 1\n }\n }\n return masked.length\n}\n\nfunction parseDateTime(masked: string, dateFormat: string, maxDigits: number): Date | undefined {\n if (masked.replace(/\\D/g, '').length !== maxDigits) return undefined\n const date = parse(masked, dateFormat, new Date())\n return isValid(date) && format(date, dateFormat) === masked ? date : undefined\n}\n\nexport interface DatePickerProps {\n value?: Date\n defaultValue?: Date\n onChange?: (date: Date | undefined) => void\n label?: string\n placeholder?: string\n fromDate?: Date\n toDate?: Date\n disabled?: boolean\n failed?: boolean\n size?: DatePickerSize\n noCalendar?: boolean\n showTime?: DatePickerShowTime\n icon?: ReactNode | false\n iconPosition?: 'start' | 'end'\n className?: string\n}\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n label,\n placeholder,\n fromDate,\n toDate,\n disabled = false,\n failed = false,\n size = 'm',\n noCalendar = false,\n showTime,\n icon,\n iconPosition = 'end',\n className,\n}: DatePickerProps) {\n const timeFormat = resolveTimeFormat(showTime)\n const dateFormat = buildDateFormat(timeFormat)\n const maxDigits = buildMaxDigits(timeFormat)\n const defaultPlaceholder = placeholder ?? buildPlaceholder(timeFormat)\n const showSeconds = timeFormat === 'HH:mm:ss'\n\n const resolvedIcon = icon === false ? null : (icon ?? <CalendarIcon />)\n\n const isControlled = value !== undefined\n const [internalDate, setInternalDate] = useState<Date | undefined>(defaultValue)\n const [open, setOpen] = useState(false)\n const [focused, setFocused] = useState(false)\n const [inputValue, setInputValue] = useState(() =>\n defaultValue && isValid(defaultValue) ? format(defaultValue, dateFormat) : '',\n )\n const [inputInvalid, setInputInvalid] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const lastValidRef = useRef(inputValue)\n\n const selected = isControlled ? value : internalDate\n const filled = inputValue.length > 0\n\n const close = useCallback(() => setOpen(false), [])\n useClickOutside(containerRef, close)\n\n function applyValid(masked: string, date: Date | undefined) {\n lastValidRef.current = masked\n setInputValue(masked)\n setInputInvalid(false)\n if (!isControlled) setInternalDate(date)\n onChange?.(date)\n }\n\n function commit(masked: string) {\n const digits = masked.replace(/\\D/g, '')\n if (digits.length === 0) {\n lastValidRef.current = ''\n setInputInvalid(false)\n if (!isControlled) setInternalDate(undefined)\n onChange?.(undefined)\n } else if (digits.length === maxDigits) {\n const date = parseDateTime(masked, dateFormat, maxDigits)\n if (date) lastValidRef.current = masked\n setInputInvalid(!date)\n if (!isControlled) setInternalDate(date)\n onChange?.(date)\n } else {\n setInputInvalid(false)\n }\n }\n\n function handleBlur() {\n setFocused(false)\n const digits = inputValue.replace(/\\D/g, '')\n if ((digits.length > 0 && digits.length < maxDigits) || inputInvalid) {\n setInputValue(lastValidRef.current)\n setInputInvalid(false)\n }\n }\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n const input = e.target\n const cursorPos = input.selectionStart ?? 0\n const raw = input.value\n const digits = raw.replace(/\\D/g, '').slice(0, maxDigits)\n const masked = applyMask(digits, maxDigits)\n const digitsBeforeCursor = raw.slice(0, cursorPos).replace(/\\D/g, '').length\n const newCursorPos = getCursorPos(masked, digitsBeforeCursor)\n setInputValue(masked)\n commit(masked)\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(newCursorPos, newCursorPos))\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const input = e.currentTarget\n const pos = input.selectionStart ?? 0\n\n if (e.key.length === 1 && !/\\d/.test(e.key) && !e.ctrlKey && !e.metaKey) {\n e.preventDefault()\n return\n }\n\n if (e.key === 'Backspace' && pos > 0 && /[.: ]/.test(input.value[pos - 1])) {\n e.preventDefault()\n const val = input.value\n const masked = applyMask((val.slice(0, pos - 2) + val.slice(pos)).replace(/\\D/g, ''), maxDigits)\n setInputValue(masked)\n commit(masked)\n requestAnimationFrame(() => input.setSelectionRange(pos - 2, pos - 2))\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLInputElement>) {\n e.preventDefault()\n const masked = applyMask(e.clipboardData.getData('text').replace(/\\D/g, ''), maxDigits)\n setInputValue(masked)\n commit(masked)\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(masked.length, masked.length))\n }\n\n function handleCalendarSelect(date: Date | undefined) {\n if (!date || !isValid(date)) {\n applyValid('', undefined)\n if (!timeFormat) setOpen(false)\n return\n }\n\n let dateToCommit = date\n if (timeFormat) {\n // Preserve currently-selected or currently-typed time when picking a new date\n const base = selected && isValid(selected) ? selected : new Date(0)\n dateToCommit = new Date(\n date.getFullYear(), date.getMonth(), date.getDate(),\n base.getHours(), base.getMinutes(), base.getSeconds(),\n )\n }\n\n applyValid(format(dateToCommit, dateFormat), dateToCommit)\n if (!timeFormat) setOpen(false)\n }\n\n function handleTimeChange(h: number, m: number, s: number) {\n const base = selected && isValid(selected) ? selected : new Date()\n const newDate = new Date(base.getFullYear(), base.getMonth(), base.getDate(), h, m, s)\n applyValid(format(newDate, dateFormat), newDate)\n }\n\n return (\n <div\n ref={containerRef}\n className={['datepicker', `datepicker--${size}`, className].filter(Boolean).join(' ')}\n data-focused={focused || open || undefined}\n data-filled={filled || undefined}\n data-failed={failed || inputInvalid || undefined}\n data-disabled={disabled || undefined}\n >\n <div\n className=\"datepicker__field\"\n data-icon-start={resolvedIcon && iconPosition === 'start' ? true : undefined}\n data-icon-end={resolvedIcon && iconPosition === 'end' ? true : undefined}\n onClick={() => !disabled && inputRef.current?.focus()}\n >\n {resolvedIcon && iconPosition === 'start' && (\n <span className=\"datepicker__icon datepicker__icon--start\">{resolvedIcon}</span>\n )}\n {label && <span className=\"datepicker__label\">{label}</span>}\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"datepicker__input\"\n value={inputValue}\n placeholder={label && !focused ? undefined : defaultPlaceholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={() => { setFocused(true); if (!disabled && !noCalendar) setOpen(true) }}\n onBlur={handleBlur}\n aria-label={label ?? 'Выберите дату'}\n aria-expanded={!noCalendar ? open : undefined}\n aria-haspopup={!noCalendar ? 'dialog' : undefined}\n aria-invalid={inputInvalid || undefined}\n />\n {resolvedIcon && iconPosition === 'end' && (\n <span className=\"datepicker__icon datepicker__icon--end\">{resolvedIcon}</span>\n )}\n </div>\n {!noCalendar && open && (\n <div\n className={[\n 'datepicker__popover',\n `datepicker__popover--${size}`,\n timeFormat && 'datepicker__popover--with-time',\n ].filter(Boolean).join(' ')}\n role=\"dialog\"\n aria-label=\"Календарь\"\n >\n {timeFormat ? (\n <>\n <div className=\"datepicker__popover-body\">\n <div className=\"datepicker__popover-calendar\">\n <Calendar\n mode=\"single\"\n selected={selected}\n onSelect={handleCalendarSelect}\n startMonth={fromDate}\n endMonth={toDate}\n locale={ru}\n />\n </div>\n <div className=\"datepicker__time-separator\" />\n <div className=\"datepicker__popover-time\">\n <TimePanel\n value={selected}\n showSeconds={showSeconds}\n onChange={handleTimeChange}\n />\n </div>\n </div>\n <div className=\"datepicker__popover-footer\">\n <button\n className=\"datepicker__ok-btn\"\n type=\"button\"\n onClick={() => setOpen(false)}\n >\n OK\n </button>\n </div>\n </>\n ) : (\n <Calendar\n mode=\"single\"\n selected={selected}\n onSelect={handleCalendarSelect}\n startMonth={fromDate}\n endMonth={toDate}\n locale={ru}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n","import { RefObject, useEffect } from 'react'\n\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void) {\n useEffect(() => {\n function listener(e: MouseEvent) {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n document.addEventListener('mousedown', listener)\n return () => document.removeEventListener('mousedown', listener)\n }, [ref, handler])\n}\n","import { useEffect, useRef } from 'react'\n\nconst HOURS = Array.from({ length: 24 }, (_, i) => i)\nconst MINUTES = Array.from({ length: 60 }, (_, i) => i)\nconst SECONDS = Array.from({ length: 60 }, (_, i) => i)\n\nfunction pad2(n: number) {\n return String(n).padStart(2, '0')\n}\n\ninterface ColumnProps {\n values: number[]\n selected: number\n onSelect: (v: number) => void\n}\n\nfunction Column({ values, selected, onSelect }: ColumnProps) {\n const selectedRef = useRef<HTMLButtonElement>(null)\n\n useEffect(() => {\n selectedRef.current?.scrollIntoView({ block: 'center', behavior: 'instant' })\n }, [selected])\n\n return (\n <div className=\"time-panel__column\">\n {values.map((v) => (\n <button\n key={v}\n ref={v === selected ? selectedRef : undefined}\n className=\"time-panel__item\"\n data-selected={v === selected || undefined}\n onClick={() => onSelect(v)}\n type=\"button\"\n tabIndex={-1}\n >\n {pad2(v)}\n </button>\n ))}\n </div>\n )\n}\n\nexport interface TimePanelProps {\n value: Date | undefined\n showSeconds: boolean\n onChange: (h: number, m: number, s: number) => void\n}\n\nexport function TimePanel({ value, showSeconds, onChange }: TimePanelProps) {\n const h = value?.getHours() ?? 0\n const m = value?.getMinutes() ?? 0\n const s = value?.getSeconds() ?? 0\n\n return (\n <div className=\"time-panel\">\n <Column values={HOURS} selected={h} onSelect={(v) => onChange(v, m, s)} />\n <Column values={MINUTES} selected={m} onSelect={(v) => onChange(h, v, s)} />\n {showSeconds && (\n <Column values={SECONDS} selected={s} onSelect={(v) => onChange(h, m, v)} />\n )}\n </div>\n )\n}\n","export function CalendarIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1\" y=\"2.5\" width=\"14\" height=\"12\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M1 6.5H15\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 1V4M11 1V4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n","import { useCallback, useRef, useState, type ReactNode } from 'react'\nimport { format, isValid, parse } from 'date-fns'\nimport { ru } from 'date-fns/locale'\nimport type { DateRange } from 'react-day-picker'\nimport type { DatePickerShowTime } from '../DatePicker/DatePicker'\nimport { useClickOutside } from '../../hooks/useClickOutside'\nimport { Calendar } from '../Calendar'\nimport { TimePanel } from '../TimePanel'\nimport { CalendarIcon } from '../icons/CalendarIcon'\n\nconst DATE_FORMAT = 'dd.MM.yyyy'\n\nfunction applyDateMask(digits: string): string {\n const d = digits.slice(0, 8)\n let result = ''\n for (let i = 0; i < d.length; i++) {\n if (i === 2 || i === 4) result += '.'\n result += d[i]\n }\n return result\n}\n\nfunction applyRangeMask(digits: string): string {\n const all = digits.slice(0, 16)\n const fromMasked = applyDateMask(all.slice(0, 8))\n const toDigits = all.slice(8)\n if (toDigits.length === 0) return fromMasked\n return `${fromMasked} — ${applyDateMask(toDigits)}`\n}\n\nfunction getRangeCursorPos(masked: string, digitCount: number): number {\n if (digitCount === 0) return 0\n let count = 0\n for (let i = 0; i < masked.length; i++) {\n if (/\\d/.test(masked[i])) {\n count++\n if (count === digitCount) return i + 1\n }\n }\n return masked.length\n}\n\nfunction parseDate(masked: string): Date | undefined {\n if (masked.replace(/\\D/g, '').length !== 8) return undefined\n const date = parse(masked, DATE_FORMAT, new Date())\n return isValid(date) && format(date, DATE_FORMAT) === masked ? date : undefined\n}\n\nfunction formatRange(from: Date | undefined, to: Date | undefined): string {\n if (!from) return ''\n const fromStr = format(from, DATE_FORMAT)\n if (!to) return fromStr\n return `${fromStr} — ${format(to, DATE_FORMAT)}`\n}\n\nfunction resolveShowSeconds(showTime?: DatePickerShowTime): boolean {\n if (!showTime) return false\n if (showTime === true) return true\n return showTime.format === 'HH:mm:ss'\n}\n\nexport type { DateRange }\nexport type { DatePickerShowTime }\n\nexport type DateRangePickerSize = 's' | 'm' | 'l'\nexport type DateRangePickerCalendarLayout = 'vertical' | 'horizontal'\n\nexport interface DateRangePickerProps {\n value?: DateRange\n defaultValue?: DateRange\n onChange?: (range: DateRange | undefined) => void\n label?: string\n fromDate?: Date\n toDate?: Date\n disabled?: boolean\n failed?: boolean\n size?: DateRangePickerSize\n calendarLayout?: DateRangePickerCalendarLayout\n showTime?: DatePickerShowTime\n icon?: ReactNode | false\n iconPosition?: 'start' | 'end'\n className?: string\n}\n\nexport function DateRangePicker({\n value,\n defaultValue,\n onChange,\n label,\n fromDate: fromConstraint,\n toDate: toConstraint,\n disabled = false,\n failed = false,\n size = 'm',\n calendarLayout = 'vertical',\n showTime,\n icon,\n iconPosition = 'end',\n className,\n}: DateRangePickerProps) {\n const resolvedIcon = icon === false ? null : (icon ?? <CalendarIcon />)\n\n const isControlled = value !== undefined\n const showSeconds = resolveShowSeconds(showTime)\n\n const [internalFrom, setInternalFrom] = useState<Date | undefined>(defaultValue?.from)\n const [internalTo, setInternalTo] = useState<Date | undefined>(defaultValue?.to)\n const [inputValue, setInputValue] = useState(() =>\n formatRange(defaultValue?.from, defaultValue?.to),\n )\n const [inputInvalid, setInputInvalid] = useState(false)\n const [open, setOpen] = useState(false)\n const [focused, setFocused] = useState(false)\n\n const [anchorDate, setAnchorDate] = useState<Date | undefined>(undefined)\n const [hoveredDate, setHoveredDate] = useState<Date | undefined>(undefined)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const confirmedFrom = isControlled ? value?.from : internalFrom\n const confirmedTo = isControlled ? value?.to : internalTo\n const filled = inputValue.length > 0\n\n const close = useCallback(() => {\n setOpen(false)\n setAnchorDate(undefined)\n setHoveredDate(undefined)\n }, [])\n useClickOutside(containerRef, close)\n\n const calendarSelected: DateRange | undefined = anchorDate\n ? hoveredDate\n ? anchorDate <= hoveredDate\n ? { from: anchorDate, to: hoveredDate }\n : { from: hoveredDate, to: anchorDate }\n : { from: anchorDate, to: undefined }\n : { from: confirmedFrom, to: confirmedTo }\n\n function handleDayClick(day: Date) {\n if (!anchorDate) {\n const from = showTime\n ? new Date(day.getFullYear(), day.getMonth(), day.getDate(),\n confirmedFrom?.getHours() ?? 0, confirmedFrom?.getMinutes() ?? 0, confirmedFrom?.getSeconds() ?? 0)\n : day\n setAnchorDate(from)\n if (!isControlled) { setInternalFrom(from); setInternalTo(undefined) }\n setInputValue(format(day, DATE_FORMAT))\n setInputInvalid(false)\n onChange?.({ from, to: undefined })\n } else {\n let from = anchorDate, to = showTime\n ? new Date(day.getFullYear(), day.getMonth(), day.getDate(),\n confirmedTo?.getHours() ?? 0, confirmedTo?.getMinutes() ?? 0, confirmedTo?.getSeconds() ?? 0)\n : day\n if (day < anchorDate) { const tmp = from; from = to; to = tmp }\n if (!isControlled) { setInternalFrom(from); setInternalTo(to) }\n setInputValue(formatRange(from, to))\n setInputInvalid(false)\n onChange?.({ from, to })\n if (!showTime) close()\n else setAnchorDate(undefined)\n }\n }\n\n function handleDayMouseEnter(day: Date) {\n if (anchorDate) setHoveredDate(day)\n }\n\n function handleFromTimeChange(h: number, m: number, s: number) {\n const base = confirmedFrom ?? new Date()\n const newDate = new Date(base.getFullYear(), base.getMonth(), base.getDate(), h, m, s)\n if (!isControlled) setInternalFrom(newDate)\n onChange?.({ from: newDate, to: confirmedTo })\n }\n\n function handleToTimeChange(h: number, m: number, s: number) {\n const base = confirmedTo ?? new Date()\n const newDate = new Date(base.getFullYear(), base.getMonth(), base.getDate(), h, m, s)\n if (!isControlled) setInternalTo(newDate)\n onChange?.({ from: confirmedFrom, to: newDate })\n }\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n const input = e.target\n const cursorPos = input.selectionStart ?? 0\n const raw = input.value\n const digits = raw.replace(/\\D/g, '').slice(0, 16)\n const masked = applyRangeMask(digits)\n const digitsBeforeCursor = raw.slice(0, cursorPos).replace(/\\D/g, '').length\n\n setInputValue(masked)\n setAnchorDate(undefined)\n setHoveredDate(undefined)\n\n const fromDigits = digits.slice(0, 8)\n const toDigits = digits.slice(8)\n const parsedFrom = fromDigits.length === 8 ? parseDate(applyDateMask(fromDigits)) : undefined\n const parsedTo = toDigits.length === 8 ? parseDate(applyDateMask(toDigits)) : undefined\n const fromComplete = fromDigits.length === 8\n const toComplete = toDigits.length === 8\n setInputInvalid((fromComplete && !parsedFrom) || (toComplete && !parsedTo))\n\n if (!isControlled) { setInternalFrom(parsedFrom); setInternalTo(parsedTo) }\n onChange?.(parsedFrom || parsedTo ? { from: parsedFrom, to: parsedTo } : undefined)\n\n requestAnimationFrame(() =>\n inputRef.current?.setSelectionRange(\n getRangeCursorPos(masked, digitsBeforeCursor),\n getRangeCursorPos(masked, digitsBeforeCursor),\n ),\n )\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const input = e.currentTarget\n const pos = input.selectionStart ?? 0\n\n if (e.key.length === 1 && !/\\d/.test(e.key) && !e.ctrlKey && !e.metaKey) {\n e.preventDefault()\n return\n }\n if (e.key === 'Backspace' && pos > 0 && /[\\s—]/.test(input.value[pos - 1])) {\n e.preventDefault()\n const val = input.value\n const charsToSkip = val.slice(0, pos).match(/[\\s—]+$/)?.[0].length ?? 1\n const newPos = pos - charsToSkip\n const masked = applyRangeMask((val.slice(0, newPos - 1) + val.slice(newPos)).replace(/\\D/g, ''))\n setInputValue(masked)\n requestAnimationFrame(() => input.setSelectionRange(newPos - 1, newPos - 1))\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLInputElement>) {\n e.preventDefault()\n const text = e.clipboardData.getData('text')\n const digits = text.replace(/\\D/g, '').slice(0, 16)\n const masked = applyRangeMask(digits)\n setInputValue(masked)\n setAnchorDate(undefined)\n setHoveredDate(undefined)\n\n const parsedFrom = digits.length >= 8 ? parseDate(applyDateMask(digits.slice(0, 8))) : undefined\n const parsedTo = digits.length >= 16 ? parseDate(applyDateMask(digits.slice(8, 16))) : undefined\n setInputInvalid((digits.length >= 8 && !parsedFrom) || (digits.length >= 16 && !parsedTo))\n if (!isControlled) { setInternalFrom(parsedFrom); setInternalTo(parsedTo) }\n onChange?.(parsedFrom || parsedTo ? { from: parsedFrom, to: parsedTo } : undefined)\n\n requestAnimationFrame(() => inputRef.current?.setSelectionRange(masked.length, masked.length))\n }\n\n const placeholder = label && !focused && !filled ? undefined : 'дд.мм.гггг — дд.мм.гггг'\n\n return (\n <div\n ref={containerRef}\n className={['datepicker', 'daterangepicker', `datepicker--${size}`, className].filter(Boolean).join(' ')}\n data-focused={focused || open || undefined}\n data-filled={filled || undefined}\n data-failed={failed || inputInvalid || undefined}\n data-disabled={disabled || undefined}\n >\n <div\n className=\"datepicker__field\"\n data-icon-start={resolvedIcon && iconPosition === 'start' ? true : undefined}\n data-icon-end={resolvedIcon && iconPosition === 'end' ? true : undefined}\n onClick={() => !disabled && inputRef.current?.focus()}\n >\n {resolvedIcon && iconPosition === 'start' && (\n <span className=\"datepicker__icon datepicker__icon--start\">{resolvedIcon}</span>\n )}\n {label && <span className=\"datepicker__label\">{label}</span>}\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"datepicker__input\"\n value={inputValue}\n placeholder={placeholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={() => { setFocused(true); if (!disabled) setOpen(true) }}\n onBlur={() => setFocused(false)}\n aria-label={label ?? 'Выберите период'}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-invalid={inputInvalid || undefined}\n />\n {resolvedIcon && iconPosition === 'end' && (\n <span className=\"datepicker__icon datepicker__icon--end\">{resolvedIcon}</span>\n )}\n </div>\n {open && (\n <div\n className={[\n 'datepicker__popover',\n `datepicker__popover--${size}`,\n calendarLayout === 'horizontal' && 'datepicker__popover--horizontal',\n showTime && 'datepicker__popover--with-time',\n ].filter(Boolean).join(' ')}\n role=\"dialog\"\n aria-label=\"Выберите период\"\n >\n {showTime ? (\n <>\n <div className=\"datepicker__popover-body\">\n <div className=\"datepicker__popover-calendar\">\n <Calendar\n mode=\"range\"\n selected={calendarSelected}\n onSelect={() => {}}\n onDayClick={handleDayClick}\n onDayMouseEnter={handleDayMouseEnter}\n onDayMouseLeave={() => setHoveredDate(undefined)}\n startMonth={fromConstraint}\n endMonth={toConstraint}\n numberOfMonths={2}\n locale={ru}\n />\n </div>\n </div>\n <div className=\"datepicker__time-row\">\n <div className=\"datepicker__time-col\">\n <span className=\"datepicker__time-label\">Начало</span>\n <TimePanel value={confirmedFrom} showSeconds={showSeconds} onChange={handleFromTimeChange} />\n </div>\n <div className=\"datepicker__time-separator\" />\n <div className=\"datepicker__time-col\">\n <span className=\"datepicker__time-label\">Конец</span>\n <TimePanel value={confirmedTo} showSeconds={showSeconds} onChange={handleToTimeChange} />\n </div>\n </div>\n <div className=\"datepicker__popover-footer\">\n <button className=\"datepicker__ok-btn\" type=\"button\" onClick={close}>OK</button>\n </div>\n </>\n ) : (\n <Calendar\n mode=\"range\"\n selected={calendarSelected}\n onSelect={() => {}}\n onDayClick={handleDayClick}\n onDayMouseEnter={handleDayMouseEnter}\n onDayMouseLeave={() => setHoveredDate(undefined)}\n startMonth={fromConstraint}\n endMonth={toConstraint}\n numberOfMonths={2}\n locale={ru}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_a","import_react","import_date_fns","import_locale","import_jsx_runtime","DATE_FORMAT","_a"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { DayPickerProps, DateRange } from 'react-day-picker';
|
|
3
3
|
export { DateRange } from 'react-day-picker';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
4
5
|
|
|
5
6
|
type CalendarProps = DayPickerProps & {
|
|
6
7
|
className?: string;
|
|
7
8
|
};
|
|
8
9
|
declare function Calendar({ className, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
9
10
|
|
|
11
|
+
type DatePickerSize = 's' | 'm' | 'l';
|
|
12
|
+
type DatePickerShowTime = boolean | {
|
|
13
|
+
format: 'HH:mm' | 'HH:mm:ss';
|
|
14
|
+
};
|
|
10
15
|
interface DatePickerProps {
|
|
11
16
|
value?: Date;
|
|
12
17
|
defaultValue?: Date;
|
|
@@ -17,10 +22,17 @@ interface DatePickerProps {
|
|
|
17
22
|
toDate?: Date;
|
|
18
23
|
disabled?: boolean;
|
|
19
24
|
failed?: boolean;
|
|
25
|
+
size?: DatePickerSize;
|
|
26
|
+
noCalendar?: boolean;
|
|
27
|
+
showTime?: DatePickerShowTime;
|
|
28
|
+
icon?: ReactNode | false;
|
|
29
|
+
iconPosition?: 'start' | 'end';
|
|
20
30
|
className?: string;
|
|
21
31
|
}
|
|
22
|
-
declare function DatePicker({ value, defaultValue, onChange, label, placeholder, fromDate, toDate, disabled, failed, className, }: DatePickerProps): react_jsx_runtime.JSX.Element;
|
|
32
|
+
declare function DatePicker({ value, defaultValue, onChange, label, placeholder, fromDate, toDate, disabled, failed, size, noCalendar, showTime, icon, iconPosition, className, }: DatePickerProps): react_jsx_runtime.JSX.Element;
|
|
23
33
|
|
|
34
|
+
type DateRangePickerSize = 's' | 'm' | 'l';
|
|
35
|
+
type DateRangePickerCalendarLayout = 'vertical' | 'horizontal';
|
|
24
36
|
interface DateRangePickerProps {
|
|
25
37
|
value?: DateRange;
|
|
26
38
|
defaultValue?: DateRange;
|
|
@@ -30,10 +42,15 @@ interface DateRangePickerProps {
|
|
|
30
42
|
toDate?: Date;
|
|
31
43
|
disabled?: boolean;
|
|
32
44
|
failed?: boolean;
|
|
45
|
+
size?: DateRangePickerSize;
|
|
46
|
+
calendarLayout?: DateRangePickerCalendarLayout;
|
|
47
|
+
showTime?: DatePickerShowTime;
|
|
48
|
+
icon?: ReactNode | false;
|
|
49
|
+
iconPosition?: 'start' | 'end';
|
|
33
50
|
className?: string;
|
|
34
51
|
}
|
|
35
|
-
declare function DateRangePicker({ value, defaultValue, onChange, label, fromDate: fromConstraint, toDate: toConstraint, disabled, failed, className, }: DateRangePickerProps): react_jsx_runtime.JSX.Element;
|
|
52
|
+
declare function DateRangePicker({ value, defaultValue, onChange, label, fromDate: fromConstraint, toDate: toConstraint, disabled, failed, size, calendarLayout, showTime, icon, iconPosition, className, }: DateRangePickerProps): react_jsx_runtime.JSX.Element;
|
|
36
53
|
|
|
37
54
|
declare const VERSION = "0.0.1";
|
|
38
55
|
|
|
39
|
-
export { Calendar, type CalendarProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, VERSION };
|
|
56
|
+
export { Calendar, type CalendarProps, DatePicker, type DatePickerProps, type DatePickerShowTime, DateRangePicker, type DateRangePickerProps, VERSION };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { DayPickerProps, DateRange } from 'react-day-picker';
|
|
3
3
|
export { DateRange } from 'react-day-picker';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
4
5
|
|
|
5
6
|
type CalendarProps = DayPickerProps & {
|
|
6
7
|
className?: string;
|
|
7
8
|
};
|
|
8
9
|
declare function Calendar({ className, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
|
|
9
10
|
|
|
11
|
+
type DatePickerSize = 's' | 'm' | 'l';
|
|
12
|
+
type DatePickerShowTime = boolean | {
|
|
13
|
+
format: 'HH:mm' | 'HH:mm:ss';
|
|
14
|
+
};
|
|
10
15
|
interface DatePickerProps {
|
|
11
16
|
value?: Date;
|
|
12
17
|
defaultValue?: Date;
|
|
@@ -17,10 +22,17 @@ interface DatePickerProps {
|
|
|
17
22
|
toDate?: Date;
|
|
18
23
|
disabled?: boolean;
|
|
19
24
|
failed?: boolean;
|
|
25
|
+
size?: DatePickerSize;
|
|
26
|
+
noCalendar?: boolean;
|
|
27
|
+
showTime?: DatePickerShowTime;
|
|
28
|
+
icon?: ReactNode | false;
|
|
29
|
+
iconPosition?: 'start' | 'end';
|
|
20
30
|
className?: string;
|
|
21
31
|
}
|
|
22
|
-
declare function DatePicker({ value, defaultValue, onChange, label, placeholder, fromDate, toDate, disabled, failed, className, }: DatePickerProps): react_jsx_runtime.JSX.Element;
|
|
32
|
+
declare function DatePicker({ value, defaultValue, onChange, label, placeholder, fromDate, toDate, disabled, failed, size, noCalendar, showTime, icon, iconPosition, className, }: DatePickerProps): react_jsx_runtime.JSX.Element;
|
|
23
33
|
|
|
34
|
+
type DateRangePickerSize = 's' | 'm' | 'l';
|
|
35
|
+
type DateRangePickerCalendarLayout = 'vertical' | 'horizontal';
|
|
24
36
|
interface DateRangePickerProps {
|
|
25
37
|
value?: DateRange;
|
|
26
38
|
defaultValue?: DateRange;
|
|
@@ -30,10 +42,15 @@ interface DateRangePickerProps {
|
|
|
30
42
|
toDate?: Date;
|
|
31
43
|
disabled?: boolean;
|
|
32
44
|
failed?: boolean;
|
|
45
|
+
size?: DateRangePickerSize;
|
|
46
|
+
calendarLayout?: DateRangePickerCalendarLayout;
|
|
47
|
+
showTime?: DatePickerShowTime;
|
|
48
|
+
icon?: ReactNode | false;
|
|
49
|
+
iconPosition?: 'start' | 'end';
|
|
33
50
|
className?: string;
|
|
34
51
|
}
|
|
35
|
-
declare function DateRangePicker({ value, defaultValue, onChange, label, fromDate: fromConstraint, toDate: toConstraint, disabled, failed, className, }: DateRangePickerProps): react_jsx_runtime.JSX.Element;
|
|
52
|
+
declare function DateRangePicker({ value, defaultValue, onChange, label, fromDate: fromConstraint, toDate: toConstraint, disabled, failed, size, calendarLayout, showTime, icon, iconPosition, className, }: DateRangePickerProps): react_jsx_runtime.JSX.Element;
|
|
36
53
|
|
|
37
54
|
declare const VERSION = "0.0.1";
|
|
38
55
|
|
|
39
|
-
export { Calendar, type CalendarProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, VERSION };
|
|
56
|
+
export { Calendar, type CalendarProps, DatePicker, type DatePickerProps, type DatePickerShowTime, DateRangePicker, type DateRangePickerProps, VERSION };
|