{"version":3,"file":"DatePickerCustomHeader.mjs","sources":[""],"sourcesContent":["import { isValidDate } from \"@web3r/flowerkit/date\";\r\nimport { formatDate } from \"date-fns\";\r\nimport type { ReactNode, MouseEvent } from \"react\";\r\nimport {\r\n  cloneElement,\r\n  isValidElement,\r\n  useContext,\r\n  useMemo,\r\n} from \"react\";\r\nimport { DatePickerFastNav } from \"./DatePickerFastNav\";\r\nimport { Btn } from \"../../btn\";\r\nimport type { TDatePickerCustomHeaderSlotProps, THeaderStateActions, TDatePickerCustomHeaderProps } from \"../config/types\";\r\nimport { DatePickerContext } from \"../context\";\r\nimport { getDateFormat } from \"../lib\";\r\n\r\n/**\r\n * Шапка календаря\r\n * @returns {ReactNode}\r\n */\r\nexport const DatePickerCustomHeader = ({\r\n  dateInputValue,\r\n  pickerRef,\r\n  name,\r\n  date,\r\n  maxDate,\r\n  minDate,\r\n  changeYear,\r\n  changeMonth,\r\n  decreaseMonth,\r\n  increaseMonth,\r\n  prevMonthButtonDisabled,\r\n  nextMonthButtonDisabled,\r\n  onCtrlChange,\r\n  slotHeader,\r\n  dateFormat,\r\n  timeFormat,\r\n  isTime,\r\n  isFastNav,\r\n  iconPrev,\r\n  iconNext,\r\n}: TDatePickerCustomHeaderProps): ReactNode => {\r\n\r\n  const { getCN } = useContext(DatePickerContext);\r\n\r\n  const stateActions = useMemo<THeaderStateActions>(() => ({\r\n    decreaseMonth,\r\n    changeYear,\r\n    changeMonth,\r\n    increaseMonth,\r\n  }), [ changeMonth, changeYear, decreaseMonth, increaseMonth ]);\r\n\r\n  const onPrevClick = (event: MouseEvent) => {\r\n    event.preventDefault();\r\n    if (typeof onCtrlChange === \"function\") {\r\n      onCtrlChange({\r\n        data: {\r\n          name,\r\n          value: date,\r\n          dateInputValue,\r\n          type: \"decreaseMonth\",\r\n        },\r\n        ref: pickerRef,\r\n        event,\r\n        stateActions,\r\n      });\r\n    } else {\r\n      decreaseMonth();\r\n    }\r\n  };\r\n\r\n  const onNextClick = (event: MouseEvent) => {\r\n    event.preventDefault();\r\n    if (typeof onCtrlChange === \"function\") {\r\n      onCtrlChange({\r\n        data: {\r\n          name,\r\n          value: date,\r\n          dateInputValue,\r\n          type: \"increaseMonth\",\r\n        },\r\n        ref: pickerRef,\r\n        event: event,\r\n        stateActions,\r\n      });\r\n    } else {\r\n      increaseMonth();\r\n    }\r\n  };\r\n\r\n  const format = getDateFormat(isTime, dateFormat, timeFormat);\r\n  const currentDateTitle = isValidDate(date) ? formatDate(date, format) : \"\";\r\n\r\n  const customSlot = useMemo<ReactNode>(() => isValidElement<TDatePickerCustomHeaderSlotProps>(slotHeader) ? cloneElement(slotHeader, {\r\n    ...slotHeader?.props ?? {},\r\n    stateActions,\r\n    date,\r\n  }) : null, [ slotHeader, date, onCtrlChange, stateActions ]);\r\n\r\n  return (\r\n    <header className={getCN(\"ctrl\")}>\r\n      <div className={getCN(\"ctrlLayout\")}>\r\n        <div className={getCN(\"ctrlNav\", { isPrev: true })}>\n          <Btn size={\"small\"} iconSize={\"medium\"} icon={iconPrev} label={null} onClick={onPrevClick}\n            isDisabled={prevMonthButtonDisabled} type={\"button\"} />\n        </div>\n        <div className={getCN(\"ctrlCurrent\")}>\r\n          {currentDateTitle}\r\n        </div>\r\n        <div className={getCN(\"ctrlNav\", { isNext: true })}>\n          <Btn size={\"small\"} iconSize={\"medium\"} icon={iconNext} label={null} onClick={onNextClick}\n            isDisabled={nextMonthButtonDisabled} type={\"button\"} />\n        </div>\n      </div>\r\n      {isFastNav && <DatePickerFastNav name={name} dateInputValue={dateInputValue}\r\n        pickerRef={pickerRef} maxDate={maxDate} minDate={minDate} isPrevMonthDisabled={prevMonthButtonDisabled}\r\n        isNextMonthDisabled={nextMonthButtonDisabled} stateActions={stateActions}\r\n        date={date} onCtrlChange={onCtrlChange} />}\r\n      {!!customSlot && <div className={getCN(\"ctrlSlot\")}>{customSlot}</div>}\r\n    </header>\r\n  );\r\n\r\n};\r\n"],"names":["DatePickerCustomHeader","dateInputValue","pickerRef","name","date","maxDate","minDate","changeYear","changeMonth","decreaseMonth","increaseMonth","prevMonthButtonDisabled","nextMonthButtonDisabled","onCtrlChange","slotHeader","dateFormat","timeFormat","isTime","isFastNav","iconPrev","iconNext","getCN","useContext","DatePickerContext","stateActions","useMemo","onPrevClick","event","preventDefault","data","value","type","ref","onNextClick","format","getDateFormat","currentDateTitle","isValidDate","formatDate","customSlot","isValidElement","cloneElement","props","_jsxs","className","children","_jsx","isPrev","Btn","size","iconSize","icon","label","onClick","isDisabled","isNext","DatePickerFastNav","isPrevMonthDisabled","isNextMonthDisabled"],"mappings":"sXAmBO,MAAMA,uBAAyB,EACpCC,8BACAC,oBACAC,UACAC,UACAC,gBACAC,gBACAC,sBACAC,wBACAC,4BACAC,4BACAC,gDACAC,gDACAC,0BACAC,sBACAC,sBACAC,sBACAC,cACAC,oBACAC,kBACAC,sBAGA,MAAMC,MAAEA,OAAUC,WAAWC,mBAE7B,MAAMC,aAAeC,QAA6B,KAAA,CAChDhB,4BACAF,sBACAC,wBACAE,8BACE,CAAEF,YAAaD,WAAYE,cAAeC,gBAE9C,MAAMgB,YAAeC,QACnBA,MAAMC,iBACN,UAAWf,eAAiB,WAC1BA,aAAa,CACXgB,KAAM,CACJ1B,UACA2B,MAAO1B,KACPH,8BACA8B,KAAM,iBAERC,IAAK9B,UACLyB,YACAH,iCAGFf,iBAIJ,MAAMwB,YAAeN,QACnBA,MAAMC,iBACN,UAAWf,eAAiB,WAC1BA,aAAa,CACXgB,KAAM,CACJ1B,UACA2B,MAAO1B,KACPH,8BACA8B,KAAM,iBAERC,IAAK9B,UACLyB,MAAOA,MACPH,iCAGFd,iBAIJ,MAAMwB,OAASC,cAAclB,OAAQF,WAAYC,YACjD,MAAMoB,iBAAmBC,YAAYjC,MAAQkC,WAAWlC,KAAM8B,QAAU,GAExE,MAAMK,WAAad,QAAmB,IAAMe,eAAiD1B,YAAc2B,aAAa3B,WAAY,IAC/HA,YAAY4B,OAAS,GACxBlB,0BACApB,YACG,KAAM,CAAEU,WAAYV,KAAMS,aAAcW;AAE7C,OACEmB,KAAA,SAAA,CAAQC,UAAWvB,MAAM,QAAQwB,SAAA,CAC/BF,KAAA,MAAA,CAAKC,UAAWvB,MAAM,cAAcwB,SAAA,CAClCC,IAAA,MAAA,CAAKF,UAAWvB,MAAM,UAAW,CAAE0B,OAAQ,OAAQF,SACjDC,IAACE,IAAG,CAACC,KAAM,QAASC,SAAU,SAAUC,KAAMhC,SAAUiC,MAAO,KAAMC,QAAS3B,YAC5E4B,WAAY3C,wBAAyBoB,KAAM,aAE/Ce,IAAA,MAAA,CAAKF,UAAWvB,MAAM,eAAewB,SAClCT,mBAEHU,IAAA,MAAA,CAAKF,UAAWvB,MAAM,UAAW,CAAEkC,OAAQ,OAAQV,SACjDC,IAACE,IAAG,CAACC,KAAM,QAASC,SAAU,SAAUC,KAAM/B,SAAUgC,MAAO,KAAMC,QAASpB,YAC5EqB,WAAY1C,wBAAyBmB,KAAM,gBAGhDb,WAAa4B,IAACU,kBAAiB,CAACrD,KAAMA,KAAMF,eAAgBA,eAC3DC,UAAWA,UAAWG,QAASA,QAASC,QAASA,QAASmD,oBAAqB9C,wBAC/E+C,oBAAqB9C,wBAAyBY,aAAcA,aAC5DpB,KAAMA,KAAMS,aAAcA,iBACzB0B,YAAcO,IAAA,MAAA,CAAKF,UAAWvB,MAAM,YAAYwB,SAAEN"}