@primereact/headless 11.0.0-alpha.6 → 11.0.0-alpha.8

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.
Files changed (88) hide show
  1. package/colorpicker/colorManager.d.ts +101 -0
  2. package/colorpicker/index.d.ts +3 -0
  3. package/colorpicker/index.mjs +2 -0
  4. package/colorpicker/index.mjs.map +1 -0
  5. package/colorpicker/input/index.d.ts +2 -0
  6. package/colorpicker/input/index.mjs +2 -0
  7. package/colorpicker/input/index.mjs.map +1 -0
  8. package/colorpicker/input/useColorPickerInput.d.ts +11 -0
  9. package/colorpicker/input/useColorPickerInput.props.d.ts +2 -0
  10. package/colorpicker/input/useColorPickerInput.test.d.ts +0 -0
  11. package/colorpicker/slider/index.d.ts +2 -0
  12. package/colorpicker/slider/index.mjs +2 -0
  13. package/colorpicker/slider/index.mjs.map +1 -0
  14. package/colorpicker/slider/useColorPickerSlider.d.ts +13 -0
  15. package/colorpicker/slider/useColorPickerSlider.props.d.ts +2 -0
  16. package/colorpicker/slider/useColorPickerSlider.test.d.ts +0 -0
  17. package/colorpicker/useColorPicker.d.ts +26 -0
  18. package/colorpicker/useColorPicker.props.d.ts +2 -0
  19. package/colorpicker/useColorPicker.test.d.ts +0 -0
  20. package/dataview/index.d.ts +2 -0
  21. package/dataview/index.mjs +2 -0
  22. package/dataview/index.mjs.map +1 -0
  23. package/dataview/useDataView.d.ts +3 -0
  24. package/dataview/useDataView.props.d.ts +2 -0
  25. package/dataview/useDataView.test.d.ts +0 -0
  26. package/datepicker/index.d.ts +2 -0
  27. package/datepicker/index.mjs +2 -0
  28. package/datepicker/index.mjs.map +1 -0
  29. package/datepicker/useDatePicker.d.ts +114 -0
  30. package/datepicker/useDatePicker.props.d.ts +2 -0
  31. package/datepicker/useDatePicker.test.d.ts +0 -0
  32. package/fileupload/index.d.ts +2 -0
  33. package/fileupload/index.mjs +2 -0
  34. package/fileupload/index.mjs.map +1 -0
  35. package/fileupload/useFileUpload.d.ts +26 -0
  36. package/fileupload/useFileUpload.props.d.ts +2 -0
  37. package/fileupload/useFileUpload.test.d.ts +0 -0
  38. package/gallery/index.d.ts +2 -0
  39. package/gallery/index.mjs +2 -0
  40. package/gallery/index.mjs.map +1 -0
  41. package/gallery/item/index.d.ts +2 -0
  42. package/gallery/item/index.mjs +2 -0
  43. package/gallery/item/index.mjs.map +1 -0
  44. package/gallery/item/useGalleryItem.d.ts +45 -0
  45. package/gallery/item/useGalleryItem.props.d.ts +2 -0
  46. package/gallery/useGallery.d.ts +31 -0
  47. package/gallery/useGallery.props.d.ts +2 -0
  48. package/gallery/useGallery.test.d.ts +0 -0
  49. package/listbox/index.d.ts +2 -0
  50. package/listbox/index.mjs +2 -0
  51. package/listbox/index.mjs.map +1 -0
  52. package/listbox/useListbox.d.ts +45 -0
  53. package/listbox/useListbox.props.d.ts +2 -0
  54. package/listbox/useListbox.test.d.ts +0 -0
  55. package/orgchart/index.d.ts +2 -0
  56. package/orgchart/index.mjs +2 -0
  57. package/orgchart/index.mjs.map +1 -0
  58. package/orgchart/useOrgChart.d.ts +20 -0
  59. package/orgchart/useOrgChart.props.d.ts +2 -0
  60. package/orgchart/useOrgChart.test.d.ts +0 -0
  61. package/overlay/index.d.ts +2 -0
  62. package/overlay/index.mjs +2 -0
  63. package/overlay/index.mjs.map +1 -0
  64. package/overlay/useOverlay.d.ts +16 -0
  65. package/overlay/useOverlay.props.d.ts +2 -0
  66. package/overlay/useOverlay.test.d.ts +0 -0
  67. package/package.json +4 -4
  68. package/password/index.d.ts +2 -0
  69. package/password/index.mjs +2 -0
  70. package/password/index.mjs.map +1 -0
  71. package/password/usePassword.d.ts +35 -0
  72. package/password/usePassword.props.d.ts +2 -0
  73. package/password/usePassword.test.d.ts +0 -0
  74. package/speeddial/index.mjs +1 -1
  75. package/speeddial/index.mjs.map +1 -1
  76. package/speeddial/useSpeedDial.d.ts +2 -1
  77. package/toast/index.d.ts +1 -0
  78. package/toast/index.mjs +1 -1
  79. package/toast/index.mjs.map +1 -1
  80. package/toast/item/index.css +1 -1
  81. package/toast/item/index.css.map +1 -1
  82. package/toast/item/index.mjs +1 -1
  83. package/toast/item/index.mjs.map +1 -1
  84. package/toast/item/useToastItem.d.ts +11 -7
  85. package/toast/toastStore.d.ts +39 -0
  86. package/toast/useToast.d.ts +12 -4
  87. package/toast/index.css +0 -2
  88. package/toast/index.css.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/datepicker/useDatePicker.ts","../../src/datepicker/useDatePicker.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useMountEffect } from '@primereact/hooks';\nimport { useDatePickerDateMeta, useDatePickerProps } from '@primereact/types/shared/datepicker';\nimport { find, findSingle, getAttribute, getFocusableElements, getIndex, getOuterWidth, isDate, isEmpty, isNotEmpty } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useDatePicker.props';\n\nconst TICKS_TO_1970 = ((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000;\n\nconst primereact = {\n config: {\n locale: {\n startsWith: 'Starts with',\n contains: 'Contains',\n notContains: 'Not contains',\n endsWith: 'Ends with',\n equals: 'Equals',\n notEquals: 'Not equals',\n noFilter: 'No Filter',\n lt: 'Less than',\n lte: 'Less than or equal to',\n gt: 'Greater than',\n gte: 'Greater than or equal to',\n dateIs: 'Date is',\n dateIsNot: 'Date is not',\n dateBefore: 'Date is before',\n dateAfter: 'Date is after',\n clear: 'Clear',\n apply: 'Apply',\n matchAll: 'Match All',\n matchAny: 'Match Any',\n addRule: 'Add Rule',\n removeRule: 'Remove Rule',\n accept: 'Yes',\n reject: 'No',\n choose: 'Choose',\n upload: 'Upload',\n cancel: 'Cancel',\n completed: 'Completed',\n pending: 'Pending',\n fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n chooseYear: 'Choose Year',\n chooseMonth: 'Choose Month',\n chooseDate: 'Choose Date',\n prevDecade: 'Previous Decade',\n nextDecade: 'Next Decade',\n prevYear: 'Previous Year',\n nextYear: 'Next Year',\n prevMonth: 'Previous Month',\n nextMonth: 'Next Month',\n prevHour: 'Previous Hour',\n nextHour: 'Next Hour',\n prevMinute: 'Previous Minute',\n nextMinute: 'Next Minute',\n prevSecond: 'Previous Second',\n nextSecond: 'Next Second',\n am: 'am',\n pm: 'pm',\n today: 'Today',\n weekHeader: 'Wk',\n firstDayOfWeek: 0,\n showMonthAfterYear: false,\n dateFormat: 'mm/dd/yy',\n weak: 'Weak',\n medium: 'Medium',\n strong: 'Strong',\n passwordPrompt: 'Enter a password',\n emptyFilterMessage: 'No results found',\n searchMessage: '{0} results are available',\n selectionMessage: '{0} items selected',\n emptySelectionMessage: 'No selected item',\n emptySearchMessage: 'No results found',\n fileChosenMessage: '{0} files',\n noFileChosenMessage: 'No file chosen',\n emptyMessage: 'No available options',\n aria: {\n trueLabel: 'True',\n falseLabel: 'False',\n nullLabel: 'Not Selected',\n star: '1 star',\n stars: '{star} stars',\n selectAll: 'All items selected',\n unselectAll: 'All items unselected',\n close: 'Close',\n previous: 'Previous',\n next: 'Next',\n navigation: 'Navigation',\n scrollTop: 'Scroll Top',\n moveTop: 'Move Top',\n moveUp: 'Move Up',\n moveDown: 'Move Down',\n moveBottom: 'Move Bottom',\n moveToTarget: 'Move to Target',\n moveToSource: 'Move to Source',\n moveAllToTarget: 'Move All to Target',\n moveAllToSource: 'Move All to Source',\n pageLabel: 'Page {page}',\n firstPageLabel: 'First Page',\n lastPageLabel: 'Last Page',\n nextPageLabel: 'Next Page',\n prevPageLabel: 'Previous Page',\n rowsPerPageLabel: 'Rows per page',\n jumpToPageDropdownLabel: 'Jump to Page Dropdown',\n jumpToPageInputLabel: 'Jump to Page Input',\n selectRow: 'Row Selected',\n unselectRow: 'Row Unselected',\n expandRow: 'Row Expanded',\n collapseRow: 'Row Collapsed',\n showFilterMenu: 'Show Filter Menu',\n hideFilterMenu: 'Hide Filter Menu',\n filterOperator: 'Filter Operator',\n filterConstraint: 'Filter Constraint',\n editRow: 'Row Edit',\n saveEdit: 'Save Edit',\n cancelEdit: 'Cancel Edit',\n listView: 'List View',\n gridView: 'Grid View',\n slide: 'Slide',\n slideNumber: '{slideNumber}',\n zoomImage: 'Zoom Image',\n zoomIn: 'Zoom In',\n zoomOut: 'Zoom Out',\n rotateRight: 'Rotate Right',\n rotateLeft: 'Rotate Left',\n listLabel: 'Option List'\n }\n }\n }\n};\n\nexport const useDatePicker = withHeadless({\n name: 'useDatePicker',\n defaultProps,\n setup: ({ props, elementRef }) => {\n const inputRef = React.useRef<{ elementRef: React.RefObject<HTMLInputElement> } | null>(null);\n const nextButtonRef = React.useRef<{ elementRef: React.RefObject<HTMLButtonElement> } | null>(null);\n const prevButtonRef = React.useRef<{ elementRef: React.RefObject<HTMLButtonElement> } | null>(null);\n const portalRef = React.useRef<{ containerRef: { current: { elementRef: React.RefObject<HTMLDivElement> } } } | null>(null);\n const overlayRef = React.useRef<HTMLDivElement | null>(null);\n const timePickerTimer = React.useRef<NodeJS.Timeout | null>(null);\n const typeUpdate = React.useRef(false);\n const selectionStart = React.useRef<number | null>(null);\n const selectionEnd = React.useRef<number | null>(null);\n const [showClearIcon, setShowClearIcon] = React.useState(true);\n const [overlayVisibleState, setOverlayVisibleState] = React.useState<boolean>(false);\n const [currentView, setCurrentView] = React.useState(props.view);\n const [currentMonth, setCurrentMonth] = React.useState<number>(0);\n const [currentYear, setCurrentYear] = React.useState<number>(0);\n const [currentHour, setCurrentHour] = React.useState<number>(0);\n const [currentMinute, setCurrentMinute] = React.useState<number>(0);\n const [currentSecond, setCurrentSecond] = React.useState<number>(0);\n const [pm, setPM] = React.useState<boolean>(false);\n const [focusedDateIndex, setFocusedDateIndex] = React.useState(0);\n const [navigationState, setNavigationState] = React.useState<{ backward?: boolean; button?: boolean } | null>(null);\n const [hoveredDateState, setHoveredDateState] = React.useState<useDatePickerDateMeta | null>(null);\n\n const getInitialValue = (): useDatePickerProps['value'] => {\n if (props.value !== undefined) {\n return typeof props.value === 'string' ? (parseValue(props.value) as useDatePickerProps['value']) : props.value;\n }\n\n if (props.defaultValue !== undefined) {\n return typeof props.defaultValue === 'string' ? (parseValue(props.defaultValue) as useDatePickerProps['value']) : props.defaultValue;\n }\n\n return null;\n };\n\n const [rawValueState, setRawValueState] = React.useState<useDatePickerProps['value']>(() => getInitialValue());\n\n const state = {\n rawValue: rawValueState,\n overlayVisible: overlayVisibleState,\n currentView,\n showClearIcon,\n hoveredDate: hoveredDateState\n };\n\n const isSelected = (dateMeta: useDatePickerDateMeta) => {\n if (rawValueState) {\n if (isSingleSelection()) {\n return isDateEquals(parseValueForComparison(rawValueState), dateMeta);\n } else if (isMultipleSelection()) {\n let selected = false;\n\n if (Array.isArray(rawValueState)) {\n for (const date of rawValueState) {\n selected = isDateEquals(parseValueForComparison(date), dateMeta);\n\n if (selected) {\n break;\n }\n }\n }\n\n return selected;\n } else if (isRangeSelection() && Array.isArray(rawValueState)) {\n const start = parseValueForComparison(rawValueState[0]);\n\n if (start === null) {\n return false;\n }\n\n if (rawValueState[1]) {\n const end = parseValueForComparison(rawValueState[1]);\n\n if (end === null) {\n return false;\n }\n\n return isDateEquals(start, dateMeta) || isDateEquals(end, dateMeta) || isDateBetween(start, end, dateMeta);\n } else {\n return isDateEquals(start, dateMeta);\n }\n }\n }\n\n return false;\n };\n\n const isInHoverRange = (dateMeta: useDatePickerDateMeta) => {\n if (!isRangeSelection() || !hoveredDateState || !rawValueState || !Array.isArray(rawValueState)) {\n return false;\n }\n\n if (rawValueState.length === 0 || rawValueState[1] !== null) {\n return false;\n }\n\n const start = parseValueForComparison(rawValueState[0]);\n\n if (!start) {\n return false;\n }\n\n const hoverDateObj = new Date(hoveredDateState.year, hoveredDateState.month, hoveredDateState.day);\n const currentDateObj = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n const rangeStart = start.getTime() < hoverDateObj.getTime() ? start : hoverDateObj;\n const rangeEnd = start.getTime() < hoverDateObj.getTime() ? hoverDateObj : start;\n const currentTime = currentDateObj.getTime();\n\n return currentTime >= rangeStart.getTime() && currentTime <= rangeEnd.getTime();\n };\n\n const onDateCellMouseEnter = (dateMeta: useDatePickerDateMeta) => {\n if (isRangeSelection() && dateMeta.selectable) {\n setHoveredDateState(dateMeta);\n }\n };\n\n const isMonthSelected = (month: number) => {\n if (isDate(rawValueState) && rawValueState !== null) {\n return (rawValueState as Date).getMonth() === month && (rawValueState as Date).getFullYear() === currentYear;\n } else if (Array.isArray(rawValueState)) {\n if (isMultipleSelection()) {\n return rawValueState?.some((currentValue) => {\n const parsedDate = parseValueForComparison(currentValue);\n\n return parsedDate ? parsedDate.getMonth() === month && parsedDate.getFullYear() === currentYear : false;\n });\n } else if (isRangeSelection()) {\n const parsedStart = rawValueState?.[0] ? parseValueForComparison(rawValueState[0]) : null;\n const parsedEnd = rawValueState?.[1] ? parseValueForComparison(rawValueState[1]) : null;\n\n if (!parsedEnd) {\n return parsedStart ? parsedStart.getFullYear() === currentYear && parsedStart.getMonth() === month : false;\n } else {\n if (!parsedStart) return false;\n\n const currentDate = new Date(currentYear as number, month, 1);\n const startDate = new Date(parsedStart.getFullYear(), parsedStart.getMonth(), 1);\n const endDate = new Date(parsedEnd.getFullYear(), parsedEnd.getMonth(), 1);\n\n return currentDate >= startDate && currentDate <= endDate;\n }\n }\n }\n\n return false;\n };\n\n const isYearSelected = (year: number) => {\n if (typeof rawValueState !== 'string' && rawValueState !== null) {\n return (rawValueState as Date).getFullYear() === year;\n } else if (Array.isArray(rawValueState)) {\n if (isMultipleSelection()) {\n return rawValueState?.some((currentValue) => {\n const parsedDate = parseValueForComparison(currentValue);\n\n return parsedDate ? parsedDate.getFullYear() === year : false;\n });\n } else if (isRangeSelection()) {\n const parsedStart = rawValueState?.[0] ? parseValueForComparison(rawValueState[0]) : null;\n const parsedEnd = rawValueState?.[1] ? parseValueForComparison(rawValueState[1]) : null;\n\n const start = parsedStart ? parsedStart.getFullYear() : null;\n const end = parsedEnd ? parsedEnd.getFullYear() : null;\n\n if (!start || !end) return false;\n\n return start === year || end === year || (start < year && end > year);\n }\n }\n\n return false;\n };\n\n const isDateEquals = (value: Date | string | null | undefined, dateMeta: useDatePickerDateMeta) => {\n if (value) {\n const dateValue = typeof value === 'string' ? (parseValue(value) as Date | string) : value;\n\n if (dateValue && dateValue instanceof Date) {\n return dateValue.getDate() === dateMeta.day && dateValue.getMonth() === dateMeta.month && dateValue.getFullYear() === dateMeta.year;\n }\n }\n\n return false;\n };\n\n const isDateBetween = (start: Date, end: Date, dateMeta: useDatePickerDateMeta) => {\n const between = false;\n const parsedStart = parseValueForComparison(start);\n const parsedEnd = parseValueForComparison(end);\n\n if (parsedStart && parsedEnd) {\n const date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n\n return parsedStart.getTime() <= date.getTime() && parsedEnd.getTime() >= date.getTime();\n }\n\n return between;\n };\n\n const sundayIndex = React.useMemo(() => {\n return primereact?.config?.locale?.firstDayOfWeek > 0 ? 7 - primereact?.config?.locale?.firstDayOfWeek : 0;\n }, []);\n\n const getFirstDayOfMonthIndex = (month: number, year: number) => {\n const day = new Date();\n\n day.setDate(1);\n day.setMonth(month);\n day.setFullYear(year);\n\n const dayIndex = day.getDay() + sundayIndex;\n\n return dayIndex >= 7 ? dayIndex - 7 : dayIndex;\n };\n\n const getDaysCountInMonth = (month: number, year: number) => {\n return 32 - daylightSavingAdjust(new Date(year, month, 32)).getDate();\n };\n\n const getDaysCountInPrevMonth = (month: number, year: number) => {\n const prev = getPreviousMonthAndYear(month, year);\n\n return getDaysCountInMonth(prev.month, prev.year);\n };\n\n const getPreviousMonthAndYear = (month: number, year: number) => {\n let m, y;\n\n if (month === 0) {\n m = 11;\n y = year - 1;\n } else {\n m = month - 1;\n y = year;\n }\n\n return { month: m, year: y };\n };\n\n const getNextMonthAndYear = (month: number, year: number) => {\n let m, y;\n\n if (month === 11) {\n m = 0;\n y = year + 1;\n } else {\n m = month + 1;\n y = year;\n }\n\n return { month: m, year: y };\n };\n\n const daylightSavingAdjust = (date: Date) => {\n if (!date) {\n date = new Date();\n }\n\n date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\n return date;\n };\n\n const isToday = (today: Date, day: number, month: number, year: number) => {\n return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;\n };\n\n const isSelectable = (day: number, month: number, year: number, otherMonth: boolean) => {\n let validMin = true;\n let validMax = true;\n let validDate = true;\n let validDay = true;\n\n if (otherMonth && !props.selectOtherMonths) {\n return false;\n }\n\n if (props.minDate) {\n if (props.minDate.getFullYear() > year) {\n validMin = false;\n } else if (props.minDate.getFullYear() === year) {\n if (props.minDate.getMonth() > month) {\n validMin = false;\n } else if (props.minDate.getMonth() === month) {\n if (props.minDate.getDate() > day) {\n validMin = false;\n }\n }\n }\n }\n\n if (props.maxDate) {\n if (props.maxDate.getFullYear() < year) {\n validMax = false;\n } else if (props.maxDate.getFullYear() === year) {\n if (props.maxDate.getMonth() < month) {\n validMax = false;\n } else if (props.maxDate.getMonth() === month) {\n if (props.maxDate.getDate() < day) {\n validMax = false;\n }\n }\n }\n }\n\n if (props.disabledDates) {\n validDate = !isDateDisabled(day, month, year);\n }\n\n if (props.disabledDays) {\n validDay = !isDayDisabled(day, month, year);\n }\n\n return validMin && validMax && validDate && validDay;\n };\n\n const onPrevButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setNavigationState({ backward: true, button: true });\n navBackward(event);\n };\n\n const onNextButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setNavigationState({ backward: false, button: true });\n navForward(event);\n };\n\n const navBackward = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLSpanElement>) => {\n event.preventDefault();\n\n if (!isEnabled()) {\n return;\n }\n\n if (currentView === 'month') {\n decrementYear();\n\n if (props.onYearChange) {\n props.onYearChange({ month: currentMonth, year: currentYear });\n }\n } else if (currentView === 'year') {\n decrementDecade();\n } else {\n if (event.shiftKey) {\n decrementYear();\n } else {\n if (currentMonth === 0) {\n setCurrentMonth(11);\n decrementYear();\n } else {\n setCurrentMonth((currentMonth as number) - 1);\n }\n\n if (props.onMonthChange) {\n props.onMonthChange({ month: currentMonth + 1, year: currentYear });\n }\n }\n }\n };\n\n const navForward = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLSpanElement>) => {\n event.preventDefault();\n\n if (!isEnabled()) {\n return;\n }\n\n if (currentView === 'month') {\n incrementYear();\n\n if (props.onYearChange) {\n props.onYearChange({ month: currentMonth, year: currentYear });\n }\n } else if (currentView === 'year') {\n incrementDecade();\n } else {\n if (event.shiftKey) {\n incrementYear();\n } else {\n if (currentMonth === 11) {\n setCurrentMonth(0);\n incrementYear();\n } else {\n setCurrentMonth((currentMonth as number) + 1);\n }\n\n if (props.onMonthChange) {\n props.onMonthChange({ month: currentMonth + 1, year: currentYear });\n }\n }\n }\n };\n\n const decrementYear = () => {\n setCurrentYear((currentYear ?? 0) - 1);\n };\n\n const decrementDecade = () => {\n setCurrentYear((currentYear ?? 0) - 10);\n };\n\n const incrementYear = () => {\n setCurrentYear((currentYear ?? 0) + 1);\n };\n\n const incrementDecade = () => {\n setCurrentYear((currentYear ?? 0) + 10);\n };\n\n const switchToMonthView = (event: React.MouseEvent<HTMLButtonElement>) => {\n setCurrentView('month');\n event.preventDefault();\n };\n\n const switchToYearView = (event: React.MouseEvent<HTMLButtonElement>) => {\n setCurrentView('year');\n event.preventDefault();\n };\n\n const isEnabled = () => {\n return !props.disabled && !props.readOnly;\n };\n\n const updateCurrentTimeMeta = (date: Date) => {\n let currentHour = date.getHours();\n\n if (props.hourFormat === '12') {\n setPM(currentHour > 11);\n\n if (currentHour >= 12) currentHour = currentHour == 12 ? 12 : currentHour - 12;\n }\n\n setCurrentHour(Math.floor(currentHour / (props.stepHour ?? 1)) * (props.stepHour ?? 1));\n setCurrentMinute(Math.floor(date.getMinutes() / (props.stepMinute ?? 1)) * (props.stepMinute ?? 1));\n setCurrentSecond(Math.floor(date.getSeconds() / (props.stepSecond ?? 1)) * (props.stepSecond ?? 1));\n };\n\n const onButtonClick = () => {\n if (isEnabled()) {\n if (!overlayVisibleState) {\n inputRef.current?.elementRef.current?.focus();\n setOverlayVisibleState(true);\n } else {\n setOverlayVisibleState(false);\n }\n }\n };\n\n const isDateDisabled = (day: number, month: number, year: number) => {\n if (props.disabledDates) {\n for (const disabledDate of props.disabledDates) {\n if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n const isDayDisabled = (day: number, month: number, year: number) => {\n if (props.disabledDays) {\n const weekday = new Date(year, month, day);\n const weekdayNumber = weekday.getDay();\n\n return props.disabledDays.indexOf(weekdayNumber) !== -1;\n }\n\n return false;\n };\n\n const onDateSelect = (event: React.MouseEvent<HTMLSpanElement> | React.KeyboardEvent<HTMLSpanElement> | null, dateMeta: useDatePickerDateMeta) => {\n if (props.disabled || !dateMeta.selectable) {\n return;\n }\n\n if (overlayRef.current) {\n (find(overlayRef.current, 'table td span:not([data-p-disabled=\"true\"])') as HTMLElement[]).forEach((cell) => (cell.tabIndex = -1));\n }\n\n if (event) {\n event.currentTarget.focus();\n }\n\n if (isMultipleSelection() && isSelected(dateMeta)) {\n if (rawValueState && Array.isArray(rawValueState)) {\n const newValue = rawValueState.filter((date) => !isDateEquals(parseValueForComparison(date), dateMeta)) as Date[];\n\n updateModel(newValue);\n }\n } else {\n if (shouldSelectDate()) {\n if (dateMeta.otherMonth) {\n setCurrentMonth(dateMeta.month);\n setCurrentYear(dateMeta.year);\n selectDate(dateMeta);\n } else {\n selectDate(dateMeta);\n }\n }\n }\n\n if (isSingleSelection() && (!props.showTime || props.hideOnDateTimeSelect)) {\n if (inputRef.current) {\n inputRef.current?.elementRef.current.focus();\n }\n\n setTimeout(() => {\n setOverlayVisibleState(false);\n }, 150);\n }\n };\n\n const selectDate = (dateMeta: useDatePickerDateMeta) => {\n let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n\n if (props.showTime) {\n if (props.hourFormat === '12' && currentHour !== 12 && pm) {\n date.setHours((currentHour as number) + 12);\n } else {\n date.setHours(currentHour as number);\n }\n\n date.setMinutes(currentMinute as number);\n date.setSeconds(props.showSeconds ? (currentSecond as number) : 0);\n }\n\n if (props.minDate && props.minDate > date) {\n date = props.minDate;\n }\n\n if (props.maxDate && props.maxDate < date) {\n date = props.maxDate;\n }\n\n setCurrentHour(date.getHours());\n setCurrentMinute(date.getMinutes());\n setCurrentSecond(date.getSeconds());\n\n let modelVal = null;\n\n if (isSingleSelection()) {\n modelVal = date;\n } else if (isMultipleSelection()) {\n if (Array.isArray(rawValueState)) {\n modelVal = [...rawValueState, date];\n } else {\n modelVal = [date];\n }\n } else if (isRangeSelection()) {\n if (rawValueState && Array.isArray(rawValueState) && rawValueState.length) {\n let startDate = parseValueForComparison(rawValueState[0]) as Date;\n let endDate = rawValueState[1];\n\n if (!endDate && date.getTime() >= startDate.getTime()) {\n endDate = date;\n setFocusedDateIndex(1);\n setHoveredDateState(null);\n } else {\n startDate = date;\n endDate = null;\n setFocusedDateIndex(0);\n setHoveredDateState(null);\n }\n\n modelVal = [startDate, endDate];\n } else {\n modelVal = [date, null];\n setFocusedDateIndex(0);\n }\n }\n\n if (modelVal !== null) {\n updateModel(modelVal as Date);\n }\n\n if (props.onDateSelect) {\n props.onDateSelect({\n value: date\n });\n }\n };\n\n const updateModel = (value: useDatePickerProps['value']) => {\n setRawValueState(value);\n\n if (props.updateModelType === 'date') {\n if (isSingleSelection()) {\n writeValue(value);\n } else {\n let stringArrValue = null;\n\n if (Array.isArray(value)) {\n stringArrValue = value.map((date) => parseValueForComparison(date));\n }\n\n writeValue(stringArrValue);\n }\n } else if (props.updateModelType == 'string') {\n if (isSingleSelection()) {\n if (value instanceof Date || typeof value === 'string' || value === null) {\n writeValue(formatDateTime(value));\n }\n } else if (isMultipleSelection()) {\n let stringArrValue: (string | null)[] | null = null;\n\n if (Array.isArray(value)) {\n stringArrValue = value.map((date) => {\n const formatted = formatDateTime(date);\n\n return typeof formatted === 'string' ? formatted : null;\n });\n }\n\n writeValue(stringArrValue);\n } else if (isRangeSelection()) {\n let stringArrValue: (string | null)[] | null = null;\n\n if (Array.isArray(value)) {\n stringArrValue = value.map((date) => {\n if (date === null || date === undefined) {\n return null;\n }\n\n const formatted = formatDateTime(date);\n\n return formatted !== null && typeof formatted === 'string' ? formatted : null;\n });\n }\n\n writeValue(stringArrValue);\n }\n }\n };\n\n const shouldSelectDate = () => {\n if (isMultipleSelection()) {\n return props.maxDateCount != null ? props.maxDateCount > (rawValueState && Array.isArray(rawValueState) ? rawValueState.length : 0) : true;\n }\n\n return true;\n };\n\n const writeValue = (newValue: useDatePickerProps['value']) => {\n setShowClearIcon(!isEmpty(newValue));\n\n if (props.onValueChange) {\n props.onValueChange({\n value: newValue\n });\n }\n };\n\n const isSingleSelection = () => {\n return props.selectionMode === 'single';\n };\n\n const isRangeSelection = () => {\n return props.selectionMode === 'range';\n };\n\n const isMultipleSelection = () => {\n return props.selectionMode === 'multiple';\n };\n\n const formatValue = (value: useDatePickerProps['value']) => {\n if (typeof value === 'string') {\n return props.dateFormat ? (isNaN(new Date(value).getTime()) ? value : formatDate(new Date(value), props.dateFormat)) : value;\n }\n\n let formattedValue: string | null = '';\n\n if (value) {\n try {\n if (isSingleSelection()) {\n const singleVal = Array.isArray(value) ? (value[0] ?? null) : value;\n\n if (singleVal == null) {\n formattedValue = '';\n } else {\n formattedValue = (formatDateTime(singleVal as string | Date) as string) ?? '';\n }\n } else if (isMultipleSelection()) {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n const dateAsString = typeof v === 'string' ? (formatDateTime(parseValueForComparison(v) as Date) as string) : (formatDateTime(v as Date) as string);\n\n formattedValue += dateAsString;\n\n if (i !== value.length - 1) {\n formattedValue += ', ';\n }\n }\n }\n } else if (isRangeSelection()) {\n if (Array.isArray(value) && value.length) {\n const startDate = parseValueForComparison(value[0]) as Date;\n const endDate = parseValueForComparison(value[1]) as Date | null;\n\n formattedValue = (formatDateTime(startDate) as string) ?? '';\n\n if (endDate) {\n formattedValue += ' - ' + ((formatDateTime(endDate) as string) ?? '');\n }\n }\n }\n } catch {\n formattedValue = typeof value === 'string' ? value : '';\n }\n }\n\n return formattedValue;\n };\n\n const formatDateTime = (date: Date | string | null) => {\n let formattedValue = null;\n\n if (isDate(date) && isNotEmpty(date)) {\n if (props.timeOnly) {\n formattedValue = formatTime(date);\n } else {\n formattedValue = formatDate(date, datePattern);\n\n if (props.showTime) {\n formattedValue += ' ' + formatTime(date);\n }\n }\n } else if (props.updateModelType === 'string') {\n formattedValue = date;\n }\n\n return formattedValue;\n };\n\n const formatDate = (date: Date, format: string) => {\n if (!date) {\n return '';\n }\n\n let iFormat: number;\n\n const lookAhead = (match: string) => {\n const matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;\n\n if (matches) {\n iFormat++;\n }\n\n return matches;\n };\n\n const formatNumber = (match: string, value: number, len: number) => {\n let num = '' + value;\n\n if (lookAhead(match)) {\n while (num.length < len) {\n num = '0' + num;\n }\n }\n\n return num;\n };\n\n const formatName = (match: string, value: number, shortNames: string[], longNames: string[]) => {\n return lookAhead(match) ? longNames[value] : shortNames[value];\n };\n\n let output = '';\n let literal = false;\n\n if (date) {\n for (iFormat = 0; iFormat < format.length; iFormat++) {\n if (literal) {\n if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n literal = false;\n } else {\n output += format.charAt(iFormat);\n }\n } else {\n switch (format.charAt(iFormat)) {\n case 'd':\n output += formatNumber('d', date.getDate(), 2);\n break;\n case 'D':\n output += formatName('D', date.getDay(), primereact?.config?.locale?.dayNamesShort, primereact?.config?.locale?.dayNames);\n break;\n case 'o':\n output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n break;\n case 'm':\n output += formatNumber('m', date.getMonth() + 1, 2);\n break;\n case 'M':\n output += formatName('M', date.getMonth(), primereact?.config?.locale?.monthNamesShort, primereact?.config?.locale?.monthNames);\n break;\n case 'y':\n output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100);\n break;\n case '@':\n output += date.getTime();\n break;\n case '!':\n output += date.getTime() * 10000 + TICKS_TO_1970;\n break;\n case \"'\":\n if (lookAhead(\"'\")) {\n output += \"'\";\n } else {\n literal = true;\n }\n\n break;\n default:\n output += format.charAt(iFormat);\n }\n }\n }\n }\n\n return output;\n };\n\n const formatTime = (date: Date) => {\n if (!date) {\n return '';\n }\n\n let output = '';\n let hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n\n if (props.hourFormat === '12' && hours > 11 && hours !== 12) {\n hours -= 12;\n }\n\n if (props.hourFormat === '12') {\n output += hours === 0 ? 12 : hours < 10 ? '0' + hours : hours;\n } else {\n output += hours < 10 ? '0' + hours : hours;\n }\n\n output += ':';\n output += minutes < 10 ? '0' + minutes : minutes;\n\n if (props.showSeconds) {\n output += ':';\n output += seconds < 10 ? '0' + seconds : seconds;\n }\n\n if (props.hourFormat === '12') {\n output += date.getHours() > 11 ? ` ${primereact?.config?.locale?.pm}` : ` ${primereact?.config?.locale?.am}`;\n }\n\n return output;\n };\n\n const clearTimePickerTimer = () => {\n if (timePickerTimer.current) {\n clearTimeout(timePickerTimer.current);\n }\n };\n\n const onTodayButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n const date = new Date();\n const dateMeta = {\n day: date.getDate(),\n month: date.getMonth(),\n year: date.getFullYear(),\n otherMonth: date.getMonth() !== currentMonth || date.getFullYear() !== currentYear,\n today: true,\n selectable: true\n };\n\n setCurrentView('date');\n onDateSelect(null, dateMeta);\n\n if (props.onTodayButtonClick) {\n props.onTodayButtonClick({\n originalEvent: event,\n date\n });\n }\n\n event.preventDefault();\n };\n\n const onClearButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n updateModel(null);\n setOverlayVisibleState(false);\n setShowClearIcon(false);\n\n if (props.onClearButtonClick) {\n props.onClearButtonClick(event);\n }\n\n event.preventDefault();\n };\n\n const onTimePickerElementMouseDown = (event: React.MouseEvent<HTMLButtonElement>, type: number, direction: number) => {\n if (isEnabled()) {\n repeat(event, null, type, direction);\n event.preventDefault();\n }\n };\n\n const onTimePickerElementMouseUp = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n if (isEnabled()) {\n clearTimePickerTimer();\n updateModelTime();\n event.preventDefault();\n }\n };\n\n const onTimePickerElementMouseLeave = () => {\n clearTimePickerTimer();\n };\n\n const onContainerButtonKeydown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (event.code) {\n case 'Tab':\n trapFocus(event);\n break;\n\n case 'Escape':\n setOverlayVisibleState(false);\n event.preventDefault();\n break;\n\n default:\n //Noop\n break;\n }\n\n if (props.onKeyDown) {\n props.onKeyDown(event);\n }\n };\n\n const onTimePickerElementKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>, type: number, direction: number) => {\n switch (event.code) {\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n if (isEnabled()) {\n repeat(event, null, type, direction);\n event.preventDefault();\n }\n\n break;\n }\n };\n\n const onTimePickerElementKeyUp = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (event.code) {\n case 'Enter':\n case 'NumpadEnter':\n\n case 'Space': {\n onTimePickerElementMouseUp(event);\n }\n }\n };\n\n const repeat = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>, interval: number | null, type: number, direction: number) => {\n const i = interval || 500;\n\n clearTimePickerTimer();\n timePickerTimer.current = setTimeout(() => {\n repeat(event, 100, type, direction);\n }, i);\n\n switch (type) {\n case 0:\n if (direction === 1) {\n incrementHour(event);\n } else {\n decrementHour(event);\n }\n\n break;\n\n case 1:\n if (direction === 1) {\n incrementMinute(event);\n } else {\n decrementMinute(event);\n }\n\n break;\n\n case 2:\n if (direction === 1) {\n incrementSecond(event);\n } else {\n decrementSecond(event);\n }\n\n break;\n }\n };\n\n const convertTo24Hour = (hours: number, pm: boolean) => {\n if (props.hourFormat == '12') {\n if (hours === 12) {\n return pm ? 12 : 0;\n } else {\n return pm ? hours + 12 : hours;\n }\n }\n\n return hours;\n };\n\n const validateTime = (hour: number, minute: number, second: number, pm: boolean) => {\n let value: Date | string | null = viewDate;\n const convertedHour = convertTo24Hour(hour, pm);\n\n if (isRangeSelection()) {\n value = Array.isArray(rawValueState) ? rawValueState[1] || rawValueState[0] : null;\n }\n\n if (isMultipleSelection()) {\n value = Array.isArray(rawValueState) ? rawValueState[rawValueState.length - 1] : null;\n }\n\n const valueDateString = value instanceof Date ? value.toDateString() : null;\n\n if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) {\n if (props.minDate.getHours() > convertedHour) {\n return false;\n }\n\n if (props.minDate.getHours() === convertedHour) {\n if (props.minDate.getMinutes() > minute) {\n return false;\n }\n\n if (props.minDate.getMinutes() === minute) {\n if (props.minDate.getSeconds() > second) {\n return false;\n }\n }\n }\n }\n\n if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) {\n if (props.maxDate.getHours() < convertedHour) {\n return false;\n }\n\n if (props.maxDate.getHours() === convertedHour) {\n if (props.maxDate.getMinutes() < minute) {\n return false;\n }\n\n if (props.maxDate.getMinutes() === minute) {\n if (props.maxDate.getSeconds() < second) {\n return false;\n }\n }\n }\n }\n\n return true;\n };\n\n const incrementHour = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n const prevHour = currentHour;\n let newHour = currentHour + Number(props.stepHour);\n let newPM = pm;\n\n if (props.hourFormat == '24') {\n newHour = newHour >= 24 ? newHour - 24 : newHour;\n } else if (props.hourFormat == '12') {\n // Before the AM/PM break, now after\n if (prevHour < 12 && newHour > 11) {\n newPM = !pm;\n }\n\n newHour = newHour >= 13 ? newHour - 12 : newHour;\n }\n\n if (validateTime(newHour, currentMinute, currentSecond, newPM)) {\n setCurrentHour(newHour);\n setPM(newPM);\n }\n\n event.preventDefault();\n };\n\n const decrementHour = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n let newHour = currentHour - Number(props.stepHour);\n let newPM = pm;\n\n if (props.hourFormat == '24') {\n newHour = newHour < 0 ? 24 + newHour : newHour;\n } else if (props.hourFormat == '12') {\n // If we were at noon/midnight, then switch\n if (currentHour === 12) {\n newPM = !pm;\n }\n\n newHour = newHour <= 0 ? 12 + newHour : newHour;\n }\n\n if (validateTime(newHour, currentMinute, currentSecond, newPM)) {\n setCurrentHour(newHour);\n setPM(newPM);\n }\n\n event.preventDefault();\n };\n\n const incrementMinute = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n const newMinute = currentMinute + Number(props.stepMinute);\n\n if (validateTime(currentHour, newMinute, currentSecond, pm)) {\n setCurrentMinute(newMinute > 59 ? newMinute - 60 : newMinute);\n }\n\n event.preventDefault();\n };\n\n const decrementMinute = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n let newMinute = currentMinute - Number(props.stepMinute);\n\n newMinute = newMinute < 0 ? 60 + newMinute : newMinute;\n\n if (validateTime(currentHour, newMinute, currentSecond, pm)) {\n setCurrentMinute(newMinute);\n }\n\n event.preventDefault();\n };\n\n const incrementSecond = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n const newSecond = currentSecond + Number(props.stepSecond);\n\n if (validateTime(currentHour, currentMinute, newSecond, pm)) {\n setCurrentSecond(newSecond > 59 ? newSecond - 60 : newSecond);\n }\n\n event.preventDefault();\n };\n\n const decrementSecond = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n let newSecond = currentSecond - Number(props.stepSecond);\n\n newSecond = newSecond < 0 ? 60 + newSecond : newSecond;\n\n if (validateTime(currentHour, currentMinute, newSecond, pm)) {\n setCurrentSecond(newSecond);\n }\n\n event.preventDefault();\n };\n\n const updateModelTime = () => {\n let valueDate: Date | string | null = viewDate;\n\n if (isRangeSelection()) {\n valueDate = Array.isArray(rawValueState) ? rawValueState[focusedDateIndex] || rawValueState[0] : null;\n }\n\n if (isMultipleSelection()) {\n valueDate = Array.isArray(rawValueState) ? rawValueState[rawValueState.length - 1] : null;\n }\n\n const dateValue = valueDate && valueDate instanceof Date ? new Date(valueDate.getTime()) : new Date();\n\n if (props.hourFormat == '12') {\n if (currentHour === 12) dateValue.setHours(pm ? 12 : 0);\n else dateValue.setHours(pm ? currentHour + 12 : currentHour);\n } else {\n dateValue.setHours(currentHour);\n }\n\n dateValue.setMinutes(currentMinute);\n dateValue.setSeconds(currentSecond);\n\n let value: useDatePickerProps['value'];\n\n if (isRangeSelection()) {\n if (Array.isArray(rawValueState)) {\n if (focusedDateIndex === 1 && rawValueState[1]) {\n value = [rawValueState[0] as Date | null, dateValue];\n } else if (focusedDateIndex === 0) {\n value = [dateValue, rawValueState[1] as Date | null];\n } else {\n value = [dateValue, null];\n }\n } else {\n value = [dateValue, null];\n }\n } else if (isMultipleSelection()) {\n if (Array.isArray(rawValueState)) {\n value = [...(rawValueState.slice(0, -1) as (Date | null)[]), dateValue];\n } else {\n value = [dateValue];\n }\n } else {\n value = dateValue;\n }\n\n updateModel(value);\n\n if (props.onDateSelect) {\n props.onDateSelect({\n value\n });\n }\n };\n\n const toggleAMPM = (event: React.MouseEvent<HTMLButtonElement>) => {\n const validHour = validateTime(currentHour, currentMinute, currentSecond, !pm);\n\n if (!validHour && (props.maxDate || props.minDate)) return;\n\n setPM(!pm);\n\n event.preventDefault();\n };\n\n const onMonthSelect = (event: React.MouseEvent<HTMLSpanElement> | React.KeyboardEvent<HTMLSpanElement>, index: number) => {\n if (props.view === 'month') {\n onDateSelect(event, {\n year: currentYear,\n month: index,\n day: 1,\n selectable: true,\n otherMonth: false,\n today: false\n });\n } else {\n setCurrentMonth(index);\n setCurrentView('date');\n\n if (props.onMonthChange) {\n props.onMonthChange({ month: currentMonth + 1, year: currentYear });\n }\n }\n\n setTimeout(updateFocus, 0);\n };\n\n const onYearSelect = (event: React.MouseEvent<HTMLSpanElement> | React.KeyboardEvent<HTMLSpanElement>, year: { value: number }) => {\n if (props.view === 'year') {\n onDateSelect(event, {\n year: year.value,\n month: 0,\n day: 1,\n selectable: true,\n otherMonth: false,\n today: false\n });\n } else {\n setCurrentYear(year.value);\n setCurrentView('month');\n\n if (props.onYearChange) {\n props.onYearChange({ month: currentMonth + 1, year: currentYear });\n }\n }\n\n setTimeout(updateFocus, 0);\n };\n\n const updateCurrentMetaData = () => {\n const _viewDate = viewDate as Date;\n\n if (!_viewDate) {\n return;\n }\n\n setCurrentMonth(_viewDate.getMonth());\n setCurrentYear(_viewDate.getFullYear());\n\n if (props.showTime || props.timeOnly) {\n let timeDate = _viewDate;\n\n if (isRangeSelection() && rawValueState && Array.isArray(rawValueState) && rawValueState[focusedDateIndex]) {\n const selectedDate = rawValueState[focusedDateIndex];\n\n if (selectedDate instanceof Date) {\n timeDate = selectedDate;\n }\n }\n\n updateCurrentTimeMeta(timeDate);\n }\n };\n\n const isValidSelection = (value: Date | Date[]) => {\n if (value == null) {\n return true;\n }\n\n let isValid = true;\n\n if (isSingleSelection() && value instanceof Date) {\n if (!isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false)) {\n isValid = false;\n }\n } else if (Array.isArray(value) && value.every((v) => isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false))) {\n if (isRangeSelection()) {\n isValid = value.length > 1 && value[1] >= value[0];\n }\n }\n\n return isValid;\n };\n\n const parseValue = (text: string): useDatePickerProps['value'] => {\n if (!text || text.trim().length === 0) {\n return null;\n }\n\n let value: useDatePickerProps['value'];\n\n if (isSingleSelection()) {\n value = parseDateTime(text) ?? null;\n } else if (isMultipleSelection()) {\n const tokens = text.split(',');\n const dateArray: (Date | null)[] = [];\n\n for (const token of tokens) {\n dateArray.push(parseDateTime(token.trim()) ?? null);\n }\n\n value = dateArray;\n } else if (isRangeSelection()) {\n const tokens = text.split(' - ');\n const dateArray: (Date | null)[] = [];\n\n for (let i = 0; i < tokens.length; i++) {\n dateArray[i] = parseDateTime(tokens[i].trim()) ?? null;\n }\n\n value = dateArray;\n }\n\n return value;\n };\n\n const parseValueForComparison = (value: useDatePickerProps['value']): Date | null => {\n if (typeof value === 'string') {\n const parsedValue = parseValue(value);\n\n if (!parsedValue) {\n return null;\n }\n\n if (isSingleSelection()) {\n return parsedValue as Date | null;\n }\n\n if (Array.isArray(parsedValue)) {\n return (parsedValue[0] ?? null) as Date | null;\n }\n\n return null;\n }\n\n if (Array.isArray(value)) {\n return (value[0] ?? null) as Date | null;\n }\n\n return (value ?? null) as Date | null;\n };\n\n const parseDateTime = (text: string) => {\n let date;\n const parts = text.match(/(?:(.+?) )?(\\d{2}:\\d{2}(?::\\d{2})?)(?: (am|pm))?/);\n\n if (props.timeOnly) {\n date = new Date();\n\n if (parts) {\n populateTime(date, parts[2], parts[3]);\n }\n } else {\n const dateFormat = datePattern;\n\n if (props.showTime) {\n if (parts) {\n date = parseDate(parts[1], dateFormat) as Date;\n populateTime(date, parts[2], parts[3]);\n }\n } else {\n date = parseDate(text, dateFormat);\n }\n }\n\n return date;\n };\n\n const populateTime = (value: Date, timeString: string, ampm: string) => {\n if (props.hourFormat == '12' && !ampm) {\n throw new Error('Invalid Time');\n }\n\n setPM(ampm === primereact?.config?.locale?.pm || ampm === primereact?.config?.locale?.pm.toLowerCase());\n const time = parseTime(timeString);\n\n value.setHours(time.hour);\n value.setMinutes(time.minute);\n\n if (time.second !== null) {\n value.setSeconds(time.second);\n }\n };\n\n const parseTime = (value: string) => {\n const tokens = value.split(':');\n const validTokenLength = props.showSeconds ? 3 : 2;\n const regex = /^[0-9][0-9]$/;\n\n if (tokens.length !== validTokenLength || !tokens[0].match(regex) || !tokens[1].match(regex) || (props.showSeconds && !tokens[2].match(regex))) {\n throw 'Invalid time';\n }\n\n let h = parseInt(tokens[0]);\n const m = parseInt(tokens[1]);\n const s = props.showSeconds ? parseInt(tokens[2]) : null;\n\n if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (props.hourFormat == '12' && h > 12) || (props.showSeconds && (s === null || isNaN(s) || s > 59))) {\n throw 'Invalid time';\n }\n\n if (props.hourFormat == '12' && h !== 12 && pm) {\n h += 12;\n } else if (props.hourFormat == '12' && h == 12 && !pm) {\n h = 0;\n }\n\n return { hour: h, minute: m, second: s };\n };\n\n const parseDate = (value: string | object, format: string) => {\n if (format == null || value == null) {\n throw 'Invalid arguments';\n }\n\n value = typeof value === 'object' ? value.toString() : value + '';\n\n if (value === '') {\n return null;\n }\n\n let iFormat: number;\n let dim;\n let extra;\n let iValue = 0;\n const shortYearCutoff = typeof props.shortYearCutoff !== 'string' ? props.shortYearCutoff : (new Date().getFullYear() % 100) + parseInt(props.shortYearCutoff, 10);\n let year = -1;\n let month = -1;\n let day = -1;\n\n let doy = -1;\n let literal = false;\n let date;\n\n const lookAhead = (match: string) => {\n const matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;\n\n if (matches) {\n iFormat++;\n }\n\n return matches;\n };\n\n const getNumber = (match: string) => {\n const isDoubled = lookAhead(match),\n size = match === '@' ? 14 : match === '!' ? 20 : match === 'y' && isDoubled ? 4 : match === 'o' ? 3 : 2,\n minSize = match === 'y' ? size : 1,\n digits = new RegExp('^\\\\d{' + minSize + ',' + size + '}'),\n num = value.substring(iValue).match(digits);\n\n if (!num) {\n throw 'Missing number at position ' + iValue;\n }\n\n iValue += num[0].length;\n\n return parseInt(num[0], 10);\n };\n\n const getName = (match: string, shortNames: string[], longNames: string[]) => {\n let index = -1;\n const arr = lookAhead(match) ? longNames : shortNames;\n const names: [number, string][] = [];\n\n for (let i = 0; i < arr.length; i++) {\n names.push([i, arr[i]]);\n }\n\n names.sort((a, b) => {\n return b[1].length - a[1].length;\n });\n\n for (let i = 0; i < names.length; i++) {\n const name = names[i][1];\n\n if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\n index = names[i][0];\n iValue += name.length;\n break;\n }\n }\n\n if (index !== -1) {\n return index + 1;\n } else {\n throw 'Unknown name at position ' + iValue;\n }\n };\n\n const checkLiteral = () => {\n if (value.charAt(iValue) !== format.charAt(iFormat)) {\n throw 'Unexpected literal at position ' + iValue;\n }\n\n iValue++;\n };\n\n if (currentView === 'month') {\n day = 1;\n }\n\n if (currentView === 'year') {\n day = 1;\n month = 1;\n }\n\n for (iFormat = 0; iFormat < format.length; iFormat++) {\n if (literal) {\n if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n switch (format.charAt(iFormat)) {\n case 'd':\n day = getNumber('d');\n break;\n case 'D':\n getName('D', primereact?.config?.locale?.dayNamesShort, primereact?.config?.locale?.dayNames);\n break;\n case 'o':\n doy = getNumber('o');\n break;\n case 'm':\n month = getNumber('m');\n break;\n case 'M':\n month = getName('M', primereact?.config?.locale?.monthNamesShort, primereact?.config?.locale?.monthNames);\n break;\n case 'y':\n year = getNumber('y');\n break;\n case '@':\n date = new Date(getNumber('@'));\n year = date.getFullYear();\n month = date.getMonth() + 1;\n day = date.getDate();\n break;\n case '!':\n date = new Date((getNumber('!') - TICKS_TO_1970) / 10000);\n year = date.getFullYear();\n month = date.getMonth() + 1;\n day = date.getDate();\n break;\n case \"'\":\n if (lookAhead(\"'\")) {\n checkLiteral();\n } else {\n literal = true;\n }\n\n break;\n default:\n checkLiteral();\n }\n }\n }\n\n if (iValue < value.length) {\n extra = value.substr(iValue);\n\n if (!/^\\s+/.test(extra)) {\n throw 'Extra/unparsed characters found in date: ' + extra;\n }\n }\n\n if (year === -1) {\n year = new Date().getFullYear();\n } else if (year < 100) {\n year += new Date().getFullYear() - (new Date().getFullYear() % 100) + (year <= (shortYearCutoff as number) ? 0 : -100);\n }\n\n if (doy > -1) {\n month = 1;\n day = doy;\n\n do {\n dim = getDaysCountInMonth(month - 1, year);\n\n if (day <= dim) {\n break;\n }\n\n month++;\n day -= dim;\n // eslint-disable-next-line\n } while (true);\n }\n\n date = daylightSavingAdjust(new Date(year, month - 1, day));\n\n if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n throw 'Invalid date'; // E.g. 31/02/00\n }\n\n return date;\n };\n\n const getWeekNumber = (date: Date) => {\n const checkDate = new Date(date.getTime());\n\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n const time = checkDate.getTime();\n\n checkDate.setMonth(0);\n checkDate.setDate(1);\n\n return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1;\n };\n\n const onDateCellKeydown = (event: React.KeyboardEvent<HTMLSpanElement>, date: useDatePickerDateMeta, groupIndex: number) => {\n event.preventDefault();\n const cellContent = event.currentTarget;\n const cell = cellContent.parentElement as HTMLTableCellElement;\n\n const cellIndex = getIndex(cell);\n\n switch (event.code) {\n case 'ArrowDown': {\n cellContent.tabIndex = -1;\n\n const nextRow = cell.parentElement?.nextElementSibling;\n\n if (nextRow) {\n const tableRowIndex = getIndex(cell.parentElement);\n const tableRows = Array.from(cell.parentElement?.parentElement?.children ?? []);\n const nextTableRows = tableRows.slice(tableRowIndex + 1);\n\n const hasNextFocusableDate = nextTableRows.find((el) => {\n const focusCell = el.children[cellIndex].children[0];\n\n return !getAttribute(focusCell, 'data-p-disabled');\n });\n\n if (hasNextFocusableDate) {\n const focusCell = hasNextFocusableDate.children[cellIndex].children[0] as HTMLElement;\n\n focusCell.tabIndex = 0;\n focusCell.focus();\n } else {\n setNavigationState({ backward: false });\n navForward(event);\n }\n } else {\n setNavigationState({ backward: false });\n navForward(event);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowUp': {\n cellContent.tabIndex = -1;\n\n if (event.altKey) {\n setOverlayVisibleState(true);\n } else {\n const prevRow = cell.parentElement?.previousElementSibling;\n\n if (prevRow) {\n const tableRowIndex = getIndex(cell.parentElement);\n const tableRows = Array.from(cell.parentElement?.parentElement?.children ?? []);\n const prevTableRows = tableRows.slice(0, tableRowIndex).reverse();\n\n const hasNextFocusableDate = prevTableRows.find((el) => {\n const focusCell = el.children[cellIndex].children[0];\n\n return !getAttribute(focusCell, 'data-p-disabled');\n });\n\n if (hasNextFocusableDate) {\n const focusCell = hasNextFocusableDate.children[cellIndex].children[0] as HTMLElement;\n\n focusCell.tabIndex = 0;\n focusCell.focus();\n } else {\n setNavigationState({ backward: true });\n navBackward(event);\n }\n } else {\n setNavigationState({ backward: true });\n navBackward(event);\n }\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowLeft': {\n cellContent.tabIndex = -1;\n const prevCell = cell.previousElementSibling;\n\n if (prevCell) {\n const cells = Array.from(cell.parentElement?.children ?? []);\n const prevCells = cells.slice(0, cellIndex).reverse();\n\n const hasPrevFocusableDate = prevCells.find((el) => {\n const focusCell = el.children[0];\n\n return getAttribute(focusCell, 'data-pc-section') !== 'weeklabelcontainer';\n });\n\n if (hasPrevFocusableDate) {\n const focusCell = hasPrevFocusableDate.children[0] as HTMLElement;\n\n focusCell.tabIndex = 0;\n focusCell.focus();\n } else {\n navigateToMonth(event, true, groupIndex);\n }\n } else {\n navigateToMonth(event, true, groupIndex);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowRight': {\n cellContent.tabIndex = -1;\n const nextCell = cell.nextElementSibling;\n\n if (nextCell) {\n const cells = Array.from(cell.parentElement?.children ?? []);\n const nextCells = cells.slice(cellIndex + 1);\n const hasNextFocusableDate = nextCells.find((el) => {\n const focusCell = el.children[0];\n\n return !getAttribute(focusCell, 'data-p-disabled');\n });\n\n if (hasNextFocusableDate) {\n const focusCell = hasNextFocusableDate.children[0] as HTMLElement;\n\n focusCell.tabIndex = 0;\n focusCell.focus();\n } else {\n navigateToMonth(event, false, groupIndex);\n }\n } else {\n navigateToMonth(event, false, groupIndex);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'Enter':\n case 'NumpadEnter':\n\n case 'Space': {\n onDateSelect(event, date);\n event.preventDefault();\n break;\n }\n\n case 'Escape': {\n setOverlayVisibleState(false);\n event.preventDefault();\n break;\n }\n\n case 'Tab': {\n trapFocus(event);\n\n break;\n }\n\n case 'Home': {\n cellContent.tabIndex = -1;\n const currentRow = cell.parentElement as HTMLTableRowElement;\n const focusCell = currentRow.children[0].children[0] as HTMLElement;\n\n if (getAttribute(focusCell, 'data-p-disabled')) {\n navigateToMonth(event, true, groupIndex);\n } else {\n focusCell.tabIndex = 0;\n focusCell.focus();\n }\n\n event.preventDefault();\n break;\n }\n\n case 'End': {\n cellContent.tabIndex = -1;\n const currentRow = cell.parentElement as HTMLTableRowElement;\n const focusCell = currentRow.children[currentRow.children.length - 1].children[0] as HTMLElement;\n\n if (getAttribute(focusCell, 'data-p-disabled')) {\n navigateToMonth(event, false, groupIndex);\n } else {\n focusCell.tabIndex = 0;\n focusCell.focus();\n }\n\n event.preventDefault();\n break;\n }\n\n case 'PageUp': {\n cellContent.tabIndex = -1;\n\n if (event.shiftKey) {\n setNavigationState({ backward: true });\n navBackward(event);\n } else {\n navigateToMonth(event, true, groupIndex);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'PageDown': {\n cellContent.tabIndex = -1;\n\n if (event.shiftKey) {\n setNavigationState({ backward: false });\n navForward(event);\n } else {\n navigateToMonth(event, false, groupIndex);\n }\n\n event.preventDefault();\n break;\n }\n\n default:\n //no op\n break;\n }\n };\n\n const navigateToMonth = (event: React.KeyboardEvent<HTMLSpanElement>, prev: boolean, groupIndex: number = 0) => {\n if (prev) {\n if (props.numberOfMonths === 1 || groupIndex === 0) {\n setNavigationState({ backward: true });\n navBackward(event);\n } else {\n const prevMonthContainer = overlayRef.current?.children[groupIndex - 1] as HTMLElement;\n const cells = find(prevMonthContainer, 'table td span:not([data-p-disabled=\"true\"])');\n const focusCell = cells[cells.length - 1] as HTMLElement;\n\n focusCell.tabIndex = 0;\n focusCell.focus();\n }\n } else {\n if (props.numberOfMonths === 1 || groupIndex === (props.numberOfMonths as number) - 1) {\n setNavigationState({ backward: false });\n navForward(event);\n } else {\n const nextMonthContainer = overlayRef.current?.children[groupIndex + 1] as HTMLElement;\n const focusCell = findSingle(nextMonthContainer, 'table td span:not([data-p-disabled=\"true\"])') as HTMLElement;\n\n focusCell.tabIndex = 0;\n focusCell.focus();\n }\n }\n };\n\n const onMonthCellKeydown = (event: React.KeyboardEvent<HTMLSpanElement>, index: number) => {\n const cell = event.currentTarget;\n\n switch (event.code) {\n case 'ArrowUp':\n\n case 'ArrowDown': {\n cell.tabIndex = -1;\n const parentCell = cell.parentElement as HTMLTableCellElement;\n const currentRow = parentCell?.parentElement as HTMLTableRowElement;\n const targetRow = event.code === 'ArrowUp' ? (currentRow?.previousElementSibling as HTMLTableRowElement) : (currentRow?.nextElementSibling as HTMLTableRowElement);\n const columnIndex = Array.from(parentCell?.parentElement?.children ?? []).indexOf(parentCell);\n const targetCellContainer = targetRow?.children[columnIndex] as HTMLTableCellElement;\n const targetElement = targetCellContainer?.children[0] as HTMLElement;\n\n if (targetElement) {\n targetElement.tabIndex = 0;\n targetElement.focus();\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowLeft': {\n cell.tabIndex = -1;\n const prevCell = cell.parentElement?.previousElementSibling?.children[0];\n\n if (prevCell) {\n (prevCell as HTMLElement).tabIndex = 0;\n (prevCell as HTMLElement).focus();\n } else {\n setNavigationState({ backward: true });\n navBackward(event);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowRight': {\n cell.tabIndex = -1;\n const nextCell = cell.parentElement?.nextElementSibling?.children[0];\n\n if (nextCell) {\n (nextCell as HTMLElement).tabIndex = 0;\n (nextCell as HTMLElement).focus();\n } else {\n setNavigationState({ backward: false });\n navForward(event);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'Home':\n case 'End':\n break;\n\n case 'PageUp': {\n if (event.shiftKey) return;\n\n setNavigationState({ backward: true });\n navBackward(event);\n\n break;\n }\n\n case 'PageDown': {\n if (event.shiftKey) return;\n\n setNavigationState({ backward: false });\n navForward(event);\n\n break;\n }\n\n case 'Enter':\n case 'NumpadEnter':\n\n case 'Space': {\n onMonthSelect(event, index);\n event.preventDefault();\n break;\n }\n\n case 'Escape': {\n setOverlayVisibleState(false);\n event.preventDefault();\n break;\n }\n\n case 'Tab': {\n trapFocus(event);\n break;\n }\n\n default:\n //no op\n break;\n }\n };\n\n const onYearCellKeydown = (event: React.KeyboardEvent<HTMLSpanElement>, year: { value: number }) => {\n const cell = event.currentTarget;\n\n switch (event.code) {\n case 'ArrowUp':\n\n case 'ArrowDown': {\n cell.tabIndex = -1;\n const parentCell = cell.parentElement as HTMLTableCellElement;\n const currentRow = parentCell?.parentElement as HTMLTableRowElement;\n const targetRow = event.code === 'ArrowUp' ? (currentRow?.previousElementSibling as HTMLTableRowElement) : (currentRow?.nextElementSibling as HTMLTableRowElement);\n const columnIndex = Array.from(parentCell?.parentElement?.children ?? []).indexOf(parentCell);\n const targetCellContainer = targetRow?.children[columnIndex] as HTMLTableCellElement;\n const targetElement = targetCellContainer?.children[0] as HTMLElement;\n\n if (targetElement) {\n targetElement.tabIndex = 0;\n targetElement.focus();\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowLeft': {\n cell.tabIndex = -1;\n const prevCell = cell.parentElement?.previousElementSibling?.children[0];\n\n if (prevCell) {\n (prevCell as HTMLElement).tabIndex = 0;\n (prevCell as HTMLElement).focus();\n } else {\n setNavigationState({ backward: true });\n navBackward(event);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowRight': {\n cell.tabIndex = -1;\n const nextCell = cell.parentElement?.nextElementSibling?.children[0];\n\n if (nextCell) {\n (nextCell as HTMLElement).tabIndex = 0;\n (nextCell as HTMLElement).focus();\n } else {\n setNavigationState({ backward: false });\n navForward(event);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'Home':\n case 'End':\n break;\n\n case 'PageUp': {\n if (event.shiftKey) return;\n\n setNavigationState({ backward: true });\n navBackward(event);\n\n break;\n }\n\n case 'PageDown': {\n if (event.shiftKey) return;\n\n setNavigationState({ backward: false });\n navForward(event);\n\n break;\n }\n\n case 'Enter':\n case 'NumpadEnter':\n\n case 'Space': {\n onYearSelect(event, year);\n event.preventDefault();\n break;\n }\n\n case 'Escape': {\n setOverlayVisibleState(false);\n event.preventDefault();\n break;\n }\n\n case 'Tab': {\n trapFocus(event);\n break;\n }\n\n default:\n //no op\n break;\n }\n };\n\n const updateFocus = () => {\n let cell: Element | null = null;\n\n if (navigationState) {\n if (navigationState.button) {\n initFocusableCell();\n\n if (navigationState.backward) {\n if (prevButtonRef.current) {\n prevButtonRef.current?.elementRef.current.focus();\n }\n } else {\n if (nextButtonRef.current) {\n nextButtonRef.current?.elementRef.current.focus();\n }\n }\n } else {\n if (!overlayRef.current) {\n return;\n }\n\n if (navigationState.backward) {\n let cells;\n\n if (currentView === 'month') {\n cells = find(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"month\"]:not([data-p-disabled=\"true\"])');\n } else if (currentView === 'year') {\n cells = find(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"year\"]:not([data-p-disabled=\"true\"])');\n } else {\n cells = find(overlayRef.current, 'table td span:not([data-pc-section=\"weeklabelcontainer\"]):not([data-p-disabled=\"true\"])');\n }\n\n if (cells && cells.length > 0) {\n cell = cells[cells.length - 1];\n }\n } else {\n if (currentView === 'month') {\n cell = findSingle(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"month\"]:not([data-p-disabled=\"true\"])');\n } else if (currentView === 'year') {\n cell = findSingle(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"year\"]:not([data-p-disabled=\"true\"])');\n } else {\n cell = findSingle(overlayRef.current, 'table td span:not([data-pc-section=\"weeklabelcontainer\"]):not([data-p-disabled=\"true\"])');\n }\n }\n\n if (cell) {\n (cell as HTMLElement).tabIndex = 0;\n (cell as HTMLElement).focus();\n }\n }\n\n setNavigationState(null);\n } else {\n initFocusableCell();\n }\n };\n\n const initFocusableCell = () => {\n let cell;\n\n if (!overlayRef.current) {\n return;\n }\n\n if (currentView === 'month') {\n const cells = find(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"month\"]');\n const selectedCell = findSingle(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"month\"][data-p-selected=\"true\"]');\n\n cells.forEach((cell) => ((cell as HTMLElement).tabIndex = -1));\n cell = selectedCell || cells[0];\n } else if (currentView === 'year') {\n const cells = find(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"year\"]');\n const selectedCell = findSingle(overlayRef.current, '[data-pc-name=\"datepickertable\"] [data-pc-section=\"year\"][data-p-selected=\"true\"]');\n\n cells.forEach((cell) => ((cell as HTMLElement).tabIndex = -1));\n cell = selectedCell || cells[0];\n } else {\n cell = findSingle(overlayRef.current, '.p-datepicker-calendar span[data-p-selected=\"true\"]');\n\n if (!cell) {\n const todayCell = findSingle(overlayRef.current, 'td[data-p-today=\"true\"] span:not([data-pc-section=\"weeklabelcontainer\"]):not([data-p-disabled=\"true\"])');\n\n if (todayCell) cell = todayCell;\n else cell = findSingle(overlayRef.current, '.p-datepicker-calendar td span:not([data-pc-section=\"weeklabelcontainer\"]):not([data-p-disabled=\"true\"])');\n }\n }\n\n if (cell) {\n (cell as HTMLElement).tabIndex = 0;\n }\n };\n\n const trapFocus = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n if (!overlayRef.current) {\n return;\n }\n\n const focusableElements = getFocusableElements(overlayRef.current) as HTMLElement[];\n\n if (focusableElements && focusableElements.length > 0) {\n if (!document.activeElement) {\n focusableElements[0].focus();\n } else {\n const focusedIndex = focusableElements.indexOf(document.activeElement as HTMLElement);\n\n if (event.shiftKey) {\n if (focusedIndex === -1 || focusedIndex === 0) focusableElements[focusableElements.length - 1].focus();\n else focusableElements[focusedIndex - 1].focus();\n } else {\n if (focusedIndex === -1) {\n if (props.timeOnly) {\n focusableElements[0].focus();\n } else {\n let elementIndex = focusableElements.findIndex((el) => el.tagName === 'SPAN');\n\n if (elementIndex === -1) {\n elementIndex = focusableElements.findIndex((el) => el.tagName === 'BUTTON');\n }\n\n if (elementIndex !== -1) {\n focusableElements[elementIndex].focus();\n } else {\n focusableElements[0].focus();\n }\n }\n } else if (focusedIndex === focusableElements.length - 1) {\n focusableElements[0].focus();\n } else {\n focusableElements[focusedIndex + 1].focus();\n }\n }\n }\n }\n };\n\n const getMonthName = (index?: number) => {\n return primereact?.config?.locale?.monthNames[index ?? currentMonth];\n };\n\n const getYear = () => {\n return currentYear;\n };\n\n const onClearClick = () => {\n updateModel(null);\n setShowClearIcon(false);\n setOverlayVisibleState(false);\n };\n\n const onInput = (event: React.ChangeEvent<HTMLInputElement>) => {\n try {\n selectionStart.current = event.target.selectionStart;\n selectionEnd.current = event.target.selectionEnd;\n\n setShowClearIcon(!isEmpty(event.target.value));\n const value = parseValue(event.target.value) as Date;\n\n if (isValidSelection(value)) {\n typeUpdate.current = true;\n updateModel(props.updateModelType === 'string' ? formatValue(value) : value);\n updateCurrentMetaData();\n }\n } catch {\n /* NoOp */\n }\n\n if (props.onInput) {\n props.onInput(event);\n }\n };\n\n const onInputClick = () => {\n if (props.showOnFocus && isEnabled() && !overlayVisibleState) {\n setOverlayVisibleState(true);\n }\n };\n\n const onInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.code === 'ArrowDown' && overlayVisibleState) {\n trapFocus(event);\n } else if (event.code === 'ArrowDown' && !overlayVisibleState) {\n setOverlayVisibleState(true);\n } else if (event.code === 'Escape') {\n if (overlayVisibleState) {\n setOverlayVisibleState(false);\n event.preventDefault();\n event.stopPropagation();\n }\n } else if (event.code === 'Tab') {\n if (overlayVisibleState && overlayRef.current) {\n (getFocusableElements(overlayRef.current) as HTMLElement[]).forEach((el) => (el.tabIndex = -1));\n }\n\n if (overlayVisibleState) {\n setOverlayVisibleState(false);\n }\n } else if (event.code === 'Enter') {\n if (props.manualInput && (event.target as HTMLInputElement).value !== null && (event.target as HTMLInputElement).value?.trim() !== '') {\n try {\n const value = parseValue((event.target as HTMLInputElement).value) as Date | Date[];\n\n if (isValidSelection(value)) {\n setOverlayVisibleState(false);\n }\n } catch {\n /* NoOp */\n }\n }\n\n if (props.onKeyDown) {\n props.onKeyDown(event);\n }\n }\n };\n\n const onInputFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (props.showonInputFocus && isEnabled()) {\n setOverlayVisibleState(true);\n }\n\n if (props.onFocus) {\n props.onFocus(event);\n }\n };\n\n const onInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (props.onBlur) {\n props.onBlur({\n originalEvent: event,\n value: event.target.value\n });\n }\n\n if (props.onValueChange) {\n event.target.value = formatValue(rawValueState);\n }\n\n if (showClearIcon) {\n setShowClearIcon(!isEmpty(event.target.value));\n }\n };\n\n const onOverlayEnter = () => {\n updateFocus();\n\n if (portalRef?.current?.containerRef?.current?.elementRef?.current) {\n const element = portalRef.current.containerRef.current.elementRef.current;\n\n if (elementRef?.current) {\n element.style.width = getOuterWidth(element) + 'px';\n element.style.minWidth = getOuterWidth(elementRef.current) + 'px';\n }\n }\n };\n\n const changeVisibleState = (isVisible: boolean) => {\n setOverlayVisibleState(isVisible);\n };\n\n const viewDate = React.useMemo<Date>(() => {\n let propValue = rawValueState;\n\n if (propValue && Array.isArray(propValue)) {\n if (isRangeSelection()) {\n if (propValue.length === 0) {\n propValue = null;\n } else if (propValue.length === 1) {\n propValue = propValue[0];\n } else {\n const start = parseValueForComparison(propValue[0]) as Date;\n const end = parseValueForComparison(propValue[1]) as Date | null;\n const lastVisibleMonth = new Date(start.getFullYear(), start.getMonth() + (props.numberOfMonths ?? 1), 1);\n\n if (!end || end < lastVisibleMonth) {\n propValue = propValue[0];\n } else {\n propValue = new Date(end.getFullYear(), end.getMonth() - (props.numberOfMonths ?? 1) + 1, 1);\n }\n }\n } else if (isMultipleSelection()) {\n propValue = propValue[propValue.length - 1];\n }\n }\n\n if (propValue && typeof propValue !== 'string') {\n return propValue as Date;\n } else {\n const today = new Date();\n\n if (props.maxDate && props.maxDate < today) {\n return props.maxDate;\n }\n\n if (props.minDate && props.minDate > today) {\n return props.minDate;\n }\n\n return today;\n }\n }, [rawValueState, props.numberOfMonths, props.maxDate, props.minDate]);\n\n const inputFieldValue = React.useMemo(() => {\n return formatValue(rawValueState);\n }, [rawValueState]);\n\n const months = React.useMemo(() => {\n const monthsArray = [];\n\n for (let i = 0; i < (props.numberOfMonths ?? 1); i++) {\n let month = (currentMonth ?? 0) + i;\n let year = currentYear ?? 0;\n\n if (month > 11) {\n month = (month % 11) - 1;\n year = year + 1;\n }\n\n const dates = [];\n const firstDay = getFirstDayOfMonthIndex(month, year);\n const daysLength = getDaysCountInMonth(month, year);\n const prevMonthDaysLength = getDaysCountInPrevMonth(month, year);\n let dayNo = 1;\n const today = new Date();\n const weekNumbers = [];\n const monthRows = Math.ceil((daysLength + firstDay) / 7);\n\n for (let i = 0; i < monthRows; i++) {\n const week = [];\n\n if (i == 0) {\n for (let j = prevMonthDaysLength - firstDay + 1; j <= prevMonthDaysLength; j++) {\n const prev = getPreviousMonthAndYear(month, year);\n\n week.push({\n day: j,\n month: prev.month,\n year: prev.year,\n otherMonth: true,\n today: isToday(today, j, prev.month, prev.year),\n selectable: isSelectable(j, prev.month, prev.year, true)\n });\n }\n\n const remainingDaysLength = 7 - week.length;\n\n for (let j = 0; j < remainingDaysLength; j++) {\n week.push({\n day: dayNo,\n month: month,\n year: year,\n otherMonth: false,\n today: isToday(today, dayNo, month, year),\n selectable: isSelectable(dayNo, month, year, false)\n });\n dayNo++;\n }\n } else {\n for (let j = 0; j < 7; j++) {\n if (dayNo > daysLength) {\n const next = getNextMonthAndYear(month, year);\n\n week.push({\n day: dayNo - daysLength,\n month: next.month,\n year: next.year,\n otherMonth: true,\n today: isToday(today, dayNo - daysLength, next.month, next.year),\n selectable: isSelectable(dayNo - daysLength, next.month, next.year, true)\n });\n } else {\n week.push({\n day: dayNo,\n month: month,\n year: year,\n otherMonth: false,\n today: isToday(today, dayNo, month, year),\n selectable: isSelectable(dayNo, month, year, false)\n });\n }\n\n dayNo++;\n }\n }\n\n weekNumbers.push(getWeekNumber(new Date(week[0].year, week[0].month, week[0].day)));\n\n dates.push(week);\n }\n\n monthsArray.push({\n month: month,\n year: year,\n dates: dates,\n weekNumbers: weekNumbers\n });\n }\n\n return monthsArray;\n }, [currentMonth, currentYear, props.numberOfMonths, props.minDate, props.maxDate, props.disabledDates, props.disabledDays, props.selectOtherMonths]);\n\n const getIndexedMonth = React.useCallback(\n (index: number = 0) => {\n return months[index];\n },\n [months]\n );\n\n const monthPickerValues = React.useMemo(() => {\n const monthPickerValuesArray = [];\n\n const isSelectableMonth = (baseMonth: number) => {\n if (props.minDate) {\n const minMonth = props.minDate.getMonth();\n const minYear = props.minDate.getFullYear();\n\n if ((currentYear as number) < minYear || (currentYear === minYear && baseMonth < minMonth)) {\n return false;\n }\n }\n\n if (props.maxDate) {\n const maxMonth = props.maxDate.getMonth();\n const maxYear = props.maxDate.getFullYear();\n\n if ((currentYear as number) > maxYear || (currentYear === maxYear && baseMonth > maxMonth)) {\n return false;\n }\n }\n\n return true;\n };\n\n for (let i = 0; i <= 11; i++) {\n monthPickerValuesArray.push({\n value: primereact?.config?.locale?.monthNamesShort[i],\n selectable: isSelectableMonth(i)\n });\n }\n\n return monthPickerValuesArray;\n }, [currentYear, props.minDate, props.maxDate]);\n\n const yearPickerValues = React.useMemo(() => {\n const yearPickerValuesArray = [];\n const base = (currentYear as number) - ((currentYear as number) % 10);\n\n const isSelectableYear = (baseYear: number) => {\n if (props.minDate) {\n if (props.minDate.getFullYear() > baseYear) return false;\n }\n\n if (props.maxDate) {\n if (props.maxDate.getFullYear() < baseYear) return false;\n }\n\n return true;\n };\n\n for (let i = 0; i < 10; i++) {\n yearPickerValuesArray.push({ value: base + i, selectable: isSelectableYear(base + i) });\n }\n\n return yearPickerValuesArray;\n }, [currentYear, props.minDate, props.maxDate]);\n\n const weekDays = React.useMemo(() => {\n const weekDays = [];\n\n let dayIndex = primereact?.config?.locale?.firstDayOfWeek;\n\n for (let i = 0; i < 7; i++) {\n weekDays.push(primereact?.config?.locale?.dayNamesMin[dayIndex]);\n dayIndex = dayIndex == 6 ? 0 : ++dayIndex;\n }\n\n return weekDays;\n }, []);\n\n const datePattern = React.useMemo(() => {\n return props.dateFormat || primereact?.config?.locale?.dateFormat;\n }, [props.dateFormat, primereact?.config?.locale]);\n\n const formattedCurrentHour = React.useMemo(() => {\n if (currentHour == 0 && props.hourFormat == '12') {\n return currentHour + 12;\n }\n\n return currentHour < 10 ? '0' + currentHour : currentHour;\n }, [currentHour, props.hourFormat]);\n\n const formattedCurrentMinute = React.useMemo(() => {\n return currentMinute < 10 ? '0' + currentMinute : currentMinute;\n }, [currentMinute]);\n\n const formattedCurrentSecond = React.useMemo(() => {\n return currentSecond < 10 ? '0' + currentSecond : currentSecond;\n }, [currentSecond]);\n\n const todayLabel = React.useMemo(() => {\n return primereact?.config?.locale?.today;\n }, [primereact?.config?.locale]);\n\n const clearLabel = React.useMemo(() => {\n return primereact?.config?.locale?.clear;\n }, [primereact?.config?.locale]);\n\n const weekHeaderLabel = React.useMemo(() => {\n return primereact?.config?.locale?.weekHeader;\n }, [primereact?.config?.locale]);\n\n const switchViewButtonDisabled = React.useMemo(() => {\n return (props.numberOfMonths as number) > 1 || !!props.disabled;\n }, [props.numberOfMonths, props.disabled]);\n\n const ampmLabel = React.useMemo(() => {\n if (pm) {\n return primereact?.config?.locale?.pm;\n }\n\n return primereact?.config?.locale?.am;\n }, [pm, primereact?.config?.locale]);\n\n // effects\n useMountEffect(() => {\n setTimeout(() => {\n if (!props.disabled) {\n initFocusableCell();\n }\n }, 300);\n });\n\n React.useEffect(() => {\n if (inputRef.current?.elementRef.current && selectionStart.current != null && selectionEnd.current != null) {\n inputRef.current.elementRef.current.selectionStart = selectionStart.current;\n inputRef.current.elementRef.current.selectionEnd = selectionEnd.current;\n selectionStart.current = null;\n selectionEnd.current = null;\n }\n }, [inputFieldValue]);\n\n React.useEffect(() => {\n updateFocus();\n }, [currentView, months]);\n\n React.useEffect(() => {\n if (props.value === undefined) return;\n\n updateCurrentMetaData();\n const initialValue = (typeof props.value === 'string' ? parseValue(props.value) : props.value) as useDatePickerProps['value'];\n\n setRawValueState(initialValue);\n\n if (!typeUpdate.current && inputRef.current && inputRef.current.elementRef.current) {\n inputRef.current.elementRef.current.value = formatValue(initialValue);\n }\n\n typeUpdate.current = false;\n }, [props.value]);\n\n React.useEffect(() => {\n if (props.value !== undefined) return;\n\n updateCurrentMetaData();\n const initialValue = (typeof props.defaultValue === 'string' ? parseValue(props.defaultValue) : props.defaultValue) as useDatePickerProps['value'];\n\n setRawValueState(initialValue);\n\n if (!typeUpdate.current && inputRef.current && inputRef.current.elementRef.current) {\n inputRef.current.elementRef.current.value = formatValue(initialValue);\n }\n\n typeUpdate.current = false;\n }, [props.defaultValue]);\n\n React.useEffect(() => {\n if (isEmpty(rawValueState)) {\n setShowClearIcon(false);\n }\n }, [rawValueState]);\n\n React.useEffect(() => {\n if (props.showTime && overlayVisibleState) {\n updateModelTime();\n }\n }, [pm]);\n\n React.useEffect(() => {\n if (!overlayVisibleState && hoveredDateState) {\n setHoveredDateState(null);\n }\n }, [overlayVisibleState]);\n\n return {\n state,\n inputRef,\n nextButtonRef,\n prevButtonRef,\n portalRef,\n overlayRef,\n //methods\n inputFieldValue,\n weekHeaderLabel,\n todayLabel,\n clearLabel,\n weekDays,\n months,\n getIndexedMonth,\n getYear,\n getMonthName,\n onPrevButtonClick,\n onNextButtonClick,\n monthPickerValues,\n yearPickerValues,\n switchToMonthView,\n switchToYearView,\n onDateSelect,\n onMonthSelect,\n onYearSelect,\n onDateCellKeydown,\n onMonthCellKeydown,\n onYearCellKeydown,\n onButtonClick,\n switchViewButtonDisabled,\n formattedCurrentHour,\n formattedCurrentMinute,\n formattedCurrentSecond,\n ampmLabel,\n onTimePickerElementMouseDown,\n onTimePickerElementMouseUp,\n onTimePickerElementMouseLeave,\n onContainerButtonKeydown,\n onTimePickerElementKeyDown,\n onTimePickerElementKeyUp,\n toggleAMPM,\n onTodayButtonClick,\n onClearButtonClick,\n onClearClick,\n onInput,\n onInputClick,\n onInputKeyDown,\n onInputFocus,\n onInputBlur,\n onOverlayEnter,\n changeVisibleState,\n // for styling\n isRangeSelection,\n isSelected,\n parseValue,\n isDateEquals,\n isMonthSelected,\n isYearSelected,\n isInHoverRange,\n onDateCellMouseEnter\n };\n }\n});\n","import type { useDatePickerProps } from '@primereact/types/shared/datepicker';\n\nexport const defaultProps: useDatePickerProps = {\n defaultValue: undefined,\n value: undefined,\n updateModelType: 'date',\n selectionMode: 'single',\n dateFormat: undefined,\n selectOtherMonths: false,\n numberOfMonths: 1,\n view: 'date',\n minDate: undefined,\n maxDate: undefined,\n maxDateCount: undefined,\n showOnFocus: true,\n autoZIndex: true,\n baseZIndex: 0,\n shortYearCutoff: '+10',\n showTime: false,\n timeOnly: false,\n hourFormat: '24',\n stepHour: 1,\n stepMinute: 1,\n stepSecond: 1,\n hideOnDateTimeSelect: false,\n hideOnRangeSelection: false,\n timeSeparator: ':',\n manualInput: true,\n showSeconds: false,\n appendTo: 'body',\n onValueChange: undefined,\n onDateSelect: undefined,\n onMonthChange: undefined,\n onYearChange: undefined,\n onTodayButtonClick: undefined,\n onClearButtonClick: undefined,\n onInput: undefined,\n onKeyDown: undefined,\n onFocus: undefined,\n onBlur: undefined\n};\n"],"mappings":"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","names":["withHeadless","useMountEffect","find","findSingle","getAttribute","getFocusableElements","getIndex","getOuterWidth","isDate","isEmpty","isNotEmpty","React","defaultProps","TICKS_TO_1970","primereact","useDatePicker","withHeadless","defaultProps","props","elementRef","_a","_b","_c","_d","_e","inputRef","nextButtonRef","prevButtonRef","portalRef","overlayRef","timePickerTimer","typeUpdate","selectionStart","selectionEnd","showClearIcon","setShowClearIcon","overlayVisibleState","setOverlayVisibleState","currentView","setCurrentView","currentMonth","setCurrentMonth","currentYear","setCurrentYear","currentHour","setCurrentHour","currentMinute","setCurrentMinute","currentSecond","setCurrentSecond","pm","setPM","focusedDateIndex","setFocusedDateIndex","navigationState","setNavigationState","hoveredDateState","setHoveredDateState","getInitialValue","parseValue","rawValueState","setRawValueState","state","isSelected","dateMeta","isSingleSelection","isDateEquals","parseValueForComparison","isMultipleSelection","selected","date","isRangeSelection","start","end","isDateBetween","isInHoverRange","hoverDateObj","currentDateObj","rangeStart","rangeEnd","currentTime","onDateCellMouseEnter","isMonthSelected","month","isDate","currentValue","parsedDate","parsedStart","parsedEnd","currentDate","startDate","endDate","isYearSelected","year","value","dateValue","sundayIndex","getFirstDayOfMonthIndex","day","dayIndex","getDaysCountInMonth","daylightSavingAdjust","getDaysCountInPrevMonth","prev","getPreviousMonthAndYear","m","y","getNextMonthAndYear","isToday","today","isSelectable","otherMonth","validMin","validMax","validDate","validDay","isDateDisabled","isDayDisabled","onPrevButtonClick","event","navBackward","onNextButtonClick","navForward","isEnabled","decrementYear","decrementDecade","incrementYear","incrementDecade","switchToMonthView","switchToYearView","updateCurrentTimeMeta","_f","onButtonClick","disabledDate","weekdayNumber","onDateSelect","find","cell","newValue","updateModel","shouldSelectDate","selectDate","modelVal","writeValue","stringArrValue","formatDateTime","formatted","isEmpty","formatValue","formatDate","formattedValue","singleVal","i","v","dateAsString","e","isNotEmpty","formatTime","datePattern","format","_g","_h","iFormat","lookAhead","match","matches","formatNumber","len","num","formatName","shortNames","longNames","output","literal","hours","minutes","seconds","clearTimePickerTimer","onTodayButtonClick","onClearButtonClick","onTimePickerElementMouseDown","type","direction","repeat","onTimePickerElementMouseUp","updateModelTime","onTimePickerElementMouseLeave","onContainerButtonKeydown","trapFocus","onTimePickerElementKeyDown","onTimePickerElementKeyUp","interval","incrementHour","decrementHour","incrementMinute","decrementMinute","incrementSecond","decrementSecond","convertTo24Hour","validateTime","hour","minute","second","viewDate","convertedHour","valueDateString","prevHour","newHour","newPM","newMinute","newSecond","valueDate","toggleAMPM","onMonthSelect","index","updateFocus","onYearSelect","updateCurrentMetaData","_viewDate","timeDate","selectedDate","isValidSelection","isValid","text","parseDateTime","tokens","dateArray","token","parsedValue","parts","populateTime","dateFormat","parseDate","timeString","ampm","time","parseTime","validTokenLength","regex","h","s","dim","extra","iValue","shortYearCutoff","doy","getNumber","isDoubled","size","minSize","digits","getName","arr","names","a","b","name","checkLiteral","getWeekNumber","checkDate","onDateCellKeydown","groupIndex","_i","_j","_k","_l","cellContent","cellIndex","getIndex","tableRowIndex","hasNextFocusableDate","el","focusCell","getAttribute","hasPrevFocusableDate","navigateToMonth","currentRow","prevMonthContainer","cells","nextMonthContainer","findSingle","onMonthCellKeydown","parentCell","targetRow","columnIndex","targetCellContainer","targetElement","prevCell","nextCell","onYearCellKeydown","initFocusableCell","selectedCell","todayCell","focusableElements","getFocusableElements","focusedIndex","elementIndex","getMonthName","getYear","onClearClick","onInput","onInputClick","onInputKeyDown","onInputFocus","onInputBlur","onOverlayEnter","element","getOuterWidth","changeVisibleState","isVisible","propValue","lastVisibleMonth","inputFieldValue","months","monthsArray","dates","firstDay","daysLength","prevMonthDaysLength","dayNo","weekNumbers","monthRows","week","j","remainingDaysLength","next","getIndexedMonth","monthPickerValues","monthPickerValuesArray","isSelectableMonth","baseMonth","minMonth","minYear","maxMonth","maxYear","yearPickerValues","yearPickerValuesArray","base","isSelectableYear","baseYear","weekDays","formattedCurrentHour","formattedCurrentMinute","formattedCurrentSecond","todayLabel","clearLabel","weekHeaderLabel","switchViewButtonDisabled","ampmLabel","useMountEffect","initialValue"]}
@@ -0,0 +1,114 @@
1
+ import { useDatePickerDateMeta, useDatePickerProps } from '@primereact/types/shared/datepicker';
2
+ import * as React from 'react';
3
+ export declare const useDatePicker: (inProps?: unknown) => import("@primereact/types/core").HeadlessInstance<useDatePickerProps, unknown, {
4
+ state: {
5
+ rawValue: string | string[] | Date | Date[] | (Date | null)[] | (string | null)[] | null | undefined;
6
+ overlayVisible: boolean;
7
+ currentView: "date" | "month" | "year" | undefined;
8
+ showClearIcon: boolean;
9
+ hoveredDate: useDatePickerDateMeta | null;
10
+ };
11
+ inputRef: React.RefObject<{
12
+ elementRef: React.RefObject<HTMLInputElement>;
13
+ } | null>;
14
+ nextButtonRef: React.RefObject<{
15
+ elementRef: React.RefObject<HTMLButtonElement>;
16
+ } | null>;
17
+ prevButtonRef: React.RefObject<{
18
+ elementRef: React.RefObject<HTMLButtonElement>;
19
+ } | null>;
20
+ portalRef: React.RefObject<{
21
+ containerRef: {
22
+ current: {
23
+ elementRef: React.RefObject<HTMLDivElement>;
24
+ };
25
+ };
26
+ } | null>;
27
+ overlayRef: React.RefObject<HTMLDivElement | null>;
28
+ inputFieldValue: string;
29
+ weekHeaderLabel: string;
30
+ todayLabel: string;
31
+ clearLabel: string;
32
+ weekDays: string[];
33
+ months: {
34
+ month: number;
35
+ year: number;
36
+ dates: {
37
+ day: number;
38
+ month: number;
39
+ year: number;
40
+ otherMonth: boolean;
41
+ today: boolean;
42
+ selectable: boolean;
43
+ }[][];
44
+ weekNumbers: number[];
45
+ }[];
46
+ getIndexedMonth: (index?: number) => {
47
+ month: number;
48
+ year: number;
49
+ dates: {
50
+ day: number;
51
+ month: number;
52
+ year: number;
53
+ otherMonth: boolean;
54
+ today: boolean;
55
+ selectable: boolean;
56
+ }[][];
57
+ weekNumbers: number[];
58
+ };
59
+ getYear: () => number;
60
+ getMonthName: (index?: number) => string;
61
+ onPrevButtonClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
62
+ onNextButtonClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
63
+ monthPickerValues: {
64
+ value: string;
65
+ selectable: boolean;
66
+ }[];
67
+ yearPickerValues: {
68
+ value: number;
69
+ selectable: boolean;
70
+ }[];
71
+ switchToMonthView: (event: React.MouseEvent<HTMLButtonElement>) => void;
72
+ switchToYearView: (event: React.MouseEvent<HTMLButtonElement>) => void;
73
+ onDateSelect: (event: React.MouseEvent<HTMLSpanElement> | React.KeyboardEvent<HTMLSpanElement> | null, dateMeta: useDatePickerDateMeta) => void;
74
+ onMonthSelect: (event: React.MouseEvent<HTMLSpanElement> | React.KeyboardEvent<HTMLSpanElement>, index: number) => void;
75
+ onYearSelect: (event: React.MouseEvent<HTMLSpanElement> | React.KeyboardEvent<HTMLSpanElement>, year: {
76
+ value: number;
77
+ }) => void;
78
+ onDateCellKeydown: (event: React.KeyboardEvent<HTMLSpanElement>, date: useDatePickerDateMeta, groupIndex: number) => void;
79
+ onMonthCellKeydown: (event: React.KeyboardEvent<HTMLSpanElement>, index: number) => void;
80
+ onYearCellKeydown: (event: React.KeyboardEvent<HTMLSpanElement>, year: {
81
+ value: number;
82
+ }) => void;
83
+ onButtonClick: () => void;
84
+ switchViewButtonDisabled: boolean;
85
+ formattedCurrentHour: string | number;
86
+ formattedCurrentMinute: string | number;
87
+ formattedCurrentSecond: string | number;
88
+ ampmLabel: string;
89
+ onTimePickerElementMouseDown: (event: React.MouseEvent<HTMLButtonElement>, type: number, direction: number) => void;
90
+ onTimePickerElementMouseUp: (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => void;
91
+ onTimePickerElementMouseLeave: () => void;
92
+ onContainerButtonKeydown: (event: React.KeyboardEvent<HTMLButtonElement>) => void;
93
+ onTimePickerElementKeyDown: (event: React.KeyboardEvent<HTMLButtonElement>, type: number, direction: number) => void;
94
+ onTimePickerElementKeyUp: (event: React.KeyboardEvent<HTMLButtonElement>) => void;
95
+ toggleAMPM: (event: React.MouseEvent<HTMLButtonElement>) => void;
96
+ onTodayButtonClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
97
+ onClearButtonClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
98
+ onClearClick: () => void;
99
+ onInput: (event: React.ChangeEvent<HTMLInputElement>) => void;
100
+ onInputClick: () => void;
101
+ onInputKeyDown: (event: React.KeyboardEvent<HTMLInputElement>) => void;
102
+ onInputFocus: (event: React.FocusEvent<HTMLInputElement>) => void;
103
+ onInputBlur: (event: React.FocusEvent<HTMLInputElement>) => void;
104
+ onOverlayEnter: () => void;
105
+ changeVisibleState: (isVisible: boolean) => void;
106
+ isRangeSelection: () => boolean;
107
+ isSelected: (dateMeta: useDatePickerDateMeta) => boolean;
108
+ parseValue: (text: string) => useDatePickerProps["value"];
109
+ isDateEquals: (value: Date | string | null | undefined, dateMeta: useDatePickerDateMeta) => boolean;
110
+ isMonthSelected: (month: number) => boolean;
111
+ isYearSelected: (year: number) => boolean;
112
+ isInHoverRange: (dateMeta: useDatePickerDateMeta) => boolean;
113
+ onDateCellMouseEnter: (dateMeta: useDatePickerDateMeta) => void;
114
+ }>;
@@ -0,0 +1,2 @@
1
+ import type { useDatePickerProps } from '@primereact/types/shared/datepicker';
2
+ export declare const defaultProps: useDatePickerProps;
File without changes
@@ -0,0 +1,2 @@
1
+ export * from './useFileUpload';
2
+ export * from './useFileUpload.props';
@@ -0,0 +1,2 @@
1
+ import{withHeadless as J}from"@primereact/core/headless";import{addClass as Q,isNotEmpty as D,removeClass as B}from"@primeuix/utils";import*as r from"react";var H={name:void 0,url:void 0,multiple:!1,accept:void 0,disabled:!1,auto:!1,maxFileSize:void 0,fileLimit:void 0,withCredentials:!1,customUpload:!1,invalidFileLimitMessage:"Maximum number of files exceeded, limit is {0} at most.",invalidFileSizeMessage:"{0}: Invalid file size, file size should be smaller than {1}.",invalidFileTypeMessage:"{0}: Invalid file type, allowed file types: {1}.",uploadHandler:void 0,onSelect:void 0,onBeforeUpload:void 0,onUpload:void 0,onError:void 0,onProgress:void 0,onBeforeSend:void 0,onClear:void 0,onRemove:void 0};var ie=J({name:"useFileUpload",defaultProps:H,setup({props:t,$primereact:S}){let d=r.useRef(null),c=r.useRef(null),m=r.useRef(0),[l,g]=r.useState([]),[h,T]=r.useState([]),[C,F]=r.useState([]),[U,b]=r.useState(0),u=r.useMemo(()=>D(l),[l]),w=r.useMemo(()=>D(h),[h]),x={files:l,messages:C,progress:U,uploadedFiles:h},P=()=>{u&&E(l)},p=e=>{var f,o;let i=s=>"dataTransfer"in s&&!!s.dataTransfer;u&&g([]);let n=[];t.multiple&&(n=l?[...l]:[]);let a=i(e)?(f=e.dataTransfer)==null?void 0:f.files:(o=e.target)==null?void 0:o.files;if(a){for(let s of Array.from(a))if(!k(s)&&!R()&&O(s)){if(q(s)){let v=s;v.objectURL=window.URL.createObjectURL(s)}n.push(s)}g(n),t.fileLimit&&Z(),t.auto&&D(n)&&!R()&&E(n),t.onSelect&&t.onSelect({originalEvent:e,files:n}),M()}},I=()=>{d.current&&d.current.click()},E=(e=l)=>{var n;let i=(n=e!=null?e:l)!=null?n:[];if(t.customUpload)t.fileLimit&&(m.current+=i.length),t.uploadHandler&&t.uploadHandler({files:i,options:{clear:L,props:t}});else{let a=new XMLHttpRequest,f=new FormData;t.onBeforeUpload&&t.onBeforeUpload({xhr:a,files:i});for(let o of i)f.append(t.name,o,o.name);a.upload.addEventListener("progress",o=>{if(o.lengthComputable){let s=Math.round(o.loaded*100/o.total);b(s)}t.onProgress&&t.onProgress({originalEvent:o,progress:U})}),a.onreadystatechange=()=>{a.readyState===4&&(b(0),a.status>=200&&a.status<300?(t.fileLimit&&(m.current+=i.length),t.onUpload&&t.onUpload({xhr:a,files:i}),T(o=>[...o,...i])):t.onError&&t.onError({xhr:a,files:i}),L())},t.url&&(a.open("POST",t.url,!0),t.onBeforeSend&&t.onBeforeSend({xhr:a,formData:f}),a.withCredentials=!!t.withCredentials,a.send(f))}},L=()=>{g([]),F([]),t.onClear&&t.onClear(),M()},k=e=>{if(l&&l.length){for(let i of l)if(i.name+i.type+i.size===e.name+e.type+e.size)return!0}return!1},O=e=>t.accept&&!A(e)?(F(i=>[...i,t.invalidFileTypeMessage.replace("{0}",e.name).replace("{1}",t.accept)]),!1):t.maxFileSize&&e.size>t.maxFileSize?(F(i=>[...i,t.invalidFileSizeMessage.replace("{0}",e.name).replace("{1}",z(t.maxFileSize))]),!1):!0,A=e=>{let i=t.accept.split(",").map(n=>n.trim());for(let n of i)if(j(n)?y(e.type)===y(n):e.type==n||W(e).toLowerCase()===n.toLowerCase())return!0;return!1},y=e=>e.substring(0,e.indexOf("/")),j=e=>e.indexOf("*")!==-1,W=e=>"."+e.name.split(".").pop(),q=e=>/^image\//.test(e.type),G=e=>{!t.disabled&&(!u||t.multiple)&&(e.stopPropagation(),e.preventDefault())},K=e=>{!t.disabled&&(!u||t.multiple)&&(Q(c.current,"p-fileupload-highlight"),c.current.setAttribute("data-p-highlight","true"),e.stopPropagation(),e.preventDefault())},N=()=>{t.disabled||(B(c.current,"p-fileupload-highlight"),c.current.setAttribute("data-p-highlight","false"))},V=e=>{var i;if(!t.disabled){B(c.current,"p-fileupload-highlight"),c.current.setAttribute("data-p-highlight","false"),e.stopPropagation(),e.preventDefault();let n=(i=e.dataTransfer)==null?void 0:i.files;(t.multiple||n&&n.length===1)&&p(e)}},X=e=>{M();let i=[...l],n=l[e];i.splice(e,1),g(i),t.onRemove&&t.onRemove({file:n})},Y=e=>{let i=[...h];i.splice(e,1),T(i),t.onRemove&&t.onRemove({file:l[e]})},M=()=>{d.current&&(d.current.value="")},z=e=>{var s,v;let a=((v=(s=S==null?void 0:S.config)==null?void 0:s.locale)==null?void 0:v.fileSizeTypes)||["B","KB","MB","GB","TB","PB","EB","ZB","YB"];if(e===0)return`0 ${a[0]}`;let f=Math.floor(Math.log(e)/Math.log(1024));return`${parseFloat((e/Math.pow(1024,f)).toFixed(3))} ${a[f]}`},R=()=>t.fileLimit&&t.fileLimit<l.length+m.current,Z=()=>{R()&&F(e=>[...e,t.invalidFileLimitMessage.replace("{0}",t.fileLimit.toString())])};return{state:x,uploadedFileCount:m,hasFiles:u,hasUploadedFiles:w,inputRef:d,contentRef:c,upload:P,onFileSelect:p,choose:I,uploader:E,clear:L,remove:X,removeUploadedFile:Y,formatSize:z,onDragEnter:G,onDragOver:K,onDragLeave:N,onDrop:V}}});export{H as defaultProps,ie as useFileUpload};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/fileupload/useFileUpload.ts","../../src/fileupload/useFileUpload.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { addClass, isNotEmpty, removeClass } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useFileUpload.props';\n\nexport const useFileUpload = withHeadless({\n name: 'useFileUpload',\n defaultProps,\n setup({ props, $primereact }) {\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n const uploadedFileCount = React.useRef(0);\n\n const [filesState, setFilesState] = React.useState<File[]>([]);\n const [uploadedFilesState, setUploadedFilesState] = React.useState<File[]>([]);\n const [messagesState, setMessagesState] = React.useState<string[]>([]);\n const [progressState, setProgressState] = React.useState(0);\n\n const hasFiles = React.useMemo(() => isNotEmpty(filesState), [filesState]);\n const hasUploadedFiles = React.useMemo(() => isNotEmpty(uploadedFilesState), [uploadedFilesState]);\n\n const state = {\n files: filesState,\n messages: messagesState,\n progress: progressState,\n uploadedFiles: uploadedFilesState\n };\n\n const upload = () => {\n if (hasFiles) {\n uploader(filesState);\n }\n };\n\n const onFileSelect = (event: React.ChangeEvent<HTMLInputElement> | DragEvent) => {\n const isDragEvent = (e: React.ChangeEvent<HTMLInputElement> | DragEvent): e is DragEvent => 'dataTransfer' in e && !!(e as DragEvent).dataTransfer;\n\n if (hasFiles) {\n setFilesState([]);\n }\n\n let currentFiles: File[] = [];\n\n if (props.multiple) {\n currentFiles = filesState ? [...filesState] : [];\n }\n\n const filesList = isDragEvent(event) ? event.dataTransfer?.files : (event.target as HTMLInputElement | null)?.files;\n\n if (!filesList) {\n return;\n }\n\n for (const file of Array.from(filesList)) {\n if (!isFileSelected(file) && !isFileLimitExceeded()) {\n if (validate(file)) {\n if (isImage(file)) {\n const fileWithUrl = file as File & { objectURL?: string };\n\n fileWithUrl.objectURL = window.URL.createObjectURL(file);\n }\n\n currentFiles.push(file);\n }\n }\n }\n\n setFilesState(currentFiles);\n\n if (props.fileLimit) {\n checkFileLimit();\n }\n\n if (props.auto && isNotEmpty(currentFiles) && !isFileLimitExceeded()) {\n uploader(currentFiles);\n }\n\n if (props.onSelect) {\n props.onSelect({ originalEvent: event, files: currentFiles });\n }\n\n clearInput();\n };\n\n const choose = () => {\n if (inputRef.current) {\n inputRef.current.click();\n }\n };\n\n const uploader = (uploadFiles = filesState) => {\n const filesToUpload = uploadFiles ?? filesState ?? [];\n\n if (props.customUpload) {\n if (props.fileLimit) {\n uploadedFileCount.current += filesToUpload.length;\n }\n\n if (props.uploadHandler) {\n props.uploadHandler({\n files: filesToUpload,\n options: {\n clear,\n props\n }\n });\n }\n } else {\n const xhr = new XMLHttpRequest();\n const formData = new FormData();\n\n if (props.onBeforeUpload) {\n props.onBeforeUpload({\n xhr,\n files: filesToUpload\n });\n }\n\n for (const file of filesToUpload) {\n formData.append(props.name as string, file, file.name);\n }\n\n xhr.upload.addEventListener('progress', (event) => {\n if (event.lengthComputable) {\n const progress = Math.round((event.loaded * 100) / event.total);\n\n setProgressState(progress);\n }\n\n if (props.onProgress) {\n props.onProgress({\n originalEvent: event,\n progress: progressState\n });\n }\n });\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n setProgressState(0);\n\n if (xhr.status >= 200 && xhr.status < 300) {\n if (props.fileLimit) {\n uploadedFileCount.current += filesToUpload.length;\n }\n\n if (props.onUpload) {\n props.onUpload({\n xhr,\n files: filesToUpload\n });\n }\n\n setUploadedFilesState((prevUploadedFiles) => [...prevUploadedFiles, ...filesToUpload]);\n } else {\n if (props.onError) {\n props.onError({\n xhr,\n files: filesToUpload\n });\n }\n }\n\n clear();\n }\n };\n\n if (props.url) {\n xhr.open('POST', props.url, true);\n\n if (props.onBeforeSend) {\n props.onBeforeSend({\n xhr,\n formData\n });\n }\n\n xhr.withCredentials = !!props.withCredentials;\n\n xhr.send(formData);\n }\n }\n };\n\n const clear = () => {\n setFilesState([]);\n setMessagesState([]);\n\n if (props.onClear) {\n props.onClear();\n }\n\n clearInput();\n };\n\n const isFileSelected = (file: File) => {\n if (filesState && filesState.length) {\n for (const sFile of filesState) {\n if (sFile.name + sFile.type + sFile.size === file.name + file.type + file.size) return true;\n }\n }\n\n return false;\n };\n\n const validate = (file: File) => {\n if (props.accept && !isFileTypeValid(file)) {\n setMessagesState((prevMessages) => [...prevMessages, (props.invalidFileTypeMessage as string).replace('{0}', file.name).replace('{1}', props.accept as string)]);\n\n return false;\n }\n\n if (props.maxFileSize && file.size > props.maxFileSize) {\n setMessagesState((prevMessages) => [...prevMessages, (props.invalidFileSizeMessage as string).replace('{0}', file.name).replace('{1}', formatSize(props.maxFileSize as number))]);\n\n return false;\n }\n\n return true;\n };\n\n const isFileTypeValid = (file: File) => {\n const acceptableTypes = (props.accept as string).split(',').map((type) => type.trim());\n\n for (const type of acceptableTypes) {\n const acceptable = isWildcard(type) ? getTypeClass(file.type) === getTypeClass(type) : file.type == type || getFileExtension(file).toLowerCase() === type.toLowerCase();\n\n if (acceptable) {\n return true;\n }\n }\n\n return false;\n };\n\n const getTypeClass = (fileType: string) => {\n return fileType.substring(0, fileType.indexOf('/'));\n };\n\n const isWildcard = (fileType: string) => {\n return fileType.indexOf('*') !== -1;\n };\n\n const getFileExtension = (file: File) => {\n return '.' + file.name.split('.').pop();\n };\n\n const isImage = (file: File) => {\n return /^image\\//.test(file.type);\n };\n\n const onDragEnter = (event: DragEvent) => {\n if (!props.disabled && (!hasFiles || props.multiple)) {\n event.stopPropagation();\n event.preventDefault();\n }\n };\n\n const onDragOver = (event: DragEvent) => {\n if (!props.disabled && (!hasFiles || props.multiple)) {\n // !isUnstyled &&\n addClass(contentRef.current as HTMLDivElement, 'p-fileupload-highlight');\n (contentRef.current as HTMLDivElement).setAttribute('data-p-highlight', 'true');\n event.stopPropagation();\n event.preventDefault();\n }\n };\n\n const onDragLeave = () => {\n if (!props.disabled) {\n // !isUnstyled &&\n removeClass(contentRef.current as HTMLDivElement, 'p-fileupload-highlight');\n (contentRef.current as HTMLDivElement).setAttribute('data-p-highlight', 'false');\n }\n };\n\n const onDrop = (event: DragEvent) => {\n if (!props.disabled) {\n // !isUnstyled &&\n removeClass(contentRef.current as HTMLDivElement, 'p-fileupload-highlight');\n (contentRef.current as HTMLDivElement).setAttribute('data-p-highlight', 'false');\n event.stopPropagation();\n event.preventDefault();\n\n const files = event.dataTransfer?.files;\n const allowDrop = props.multiple || (files && files.length === 1);\n\n if (allowDrop) {\n onFileSelect(event);\n }\n }\n };\n\n const remove = (index: number) => {\n clearInput();\n const currentFiles = [...filesState];\n const removedFile = filesState[index];\n\n currentFiles.splice(index, 1);\n setFilesState(currentFiles);\n\n if (props.onRemove) {\n props.onRemove({\n file: removedFile\n });\n }\n };\n\n const removeUploadedFile = (index: number) => {\n const currentUploadedFiles = [...uploadedFilesState];\n\n currentUploadedFiles.splice(index, 1);\n setUploadedFilesState(currentUploadedFiles);\n\n if (props.onRemove) {\n props.onRemove({\n file: filesState[index]\n });\n }\n };\n\n const clearInput = () => {\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n };\n\n const formatSize = (bytes: number) => {\n const k = 1024;\n const dm = 3;\n // @ts-expect-error TODO:\n const sizes = $primereact?.config?.locale?.fileSizeTypes || ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n if (bytes === 0) {\n return `0 ${sizes[0]}`;\n }\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const formattedSize = parseFloat((bytes / Math.pow(k, i)).toFixed(dm));\n\n return `${formattedSize} ${sizes[i]}`;\n };\n\n const isFileLimitExceeded = () => {\n return props.fileLimit && props.fileLimit < filesState.length + uploadedFileCount.current;\n };\n\n const checkFileLimit = () => {\n if (isFileLimitExceeded()) {\n setMessagesState((prevMessages) => [...prevMessages, (props.invalidFileLimitMessage as string).replace('{0}', (props.fileLimit as number).toString())]);\n }\n };\n\n return {\n state,\n uploadedFileCount,\n hasFiles,\n hasUploadedFiles,\n // refs\n inputRef,\n contentRef,\n // methods\n upload,\n onFileSelect,\n choose,\n uploader,\n clear,\n remove,\n removeUploadedFile,\n formatSize,\n onDragEnter,\n onDragOver,\n onDragLeave,\n onDrop\n };\n }\n});\n","import type { useFileUploadProps } from '@primereact/types/shared/fileupload';\n\nexport const defaultProps: useFileUploadProps = {\n name: undefined,\n url: undefined,\n multiple: false,\n accept: undefined,\n disabled: false,\n auto: false,\n maxFileSize: undefined,\n fileLimit: undefined,\n withCredentials: false,\n customUpload: false,\n invalidFileLimitMessage: 'Maximum number of files exceeded, limit is {0} at most.',\n invalidFileSizeMessage: '{0}: Invalid file size, file size should be smaller than {1}.',\n invalidFileTypeMessage: '{0}: Invalid file type, allowed file types: {1}.',\n uploadHandler: undefined,\n onSelect: undefined,\n onBeforeUpload: undefined,\n onUpload: undefined,\n onError: undefined,\n onProgress: undefined,\n onBeforeSend: undefined,\n onClear: undefined,\n onRemove: undefined\n};\n"],"mappings":"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","names":["withHeadless","addClass","isNotEmpty","removeClass","React","defaultProps","useFileUpload","withHeadless","defaultProps","props","$primereact","inputRef","contentRef","uploadedFileCount","filesState","setFilesState","uploadedFilesState","setUploadedFilesState","messagesState","setMessagesState","progressState","setProgressState","hasFiles","isNotEmpty","hasUploadedFiles","state","upload","uploader","onFileSelect","event","_a","_b","isDragEvent","e","currentFiles","filesList","file","isFileSelected","isFileLimitExceeded","validate","isImage","fileWithUrl","checkFileLimit","clearInput","choose","uploadFiles","filesToUpload","clear","xhr","formData","progress","prevUploadedFiles","sFile","isFileTypeValid","prevMessages","formatSize","acceptableTypes","type","isWildcard","getTypeClass","getFileExtension","fileType","onDragEnter","onDragOver","addClass","onDragLeave","removeClass","onDrop","files","remove","index","removedFile","removeUploadedFile","currentUploadedFiles","bytes","sizes","i"]}