datepicker-pashuk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +161 -0
  2. package/dist/index.cjs.js +1163 -0
  3. package/dist/index.cjs.js.map +1 -0
  4. package/dist/index.esm.js +1158 -0
  5. package/dist/index.esm.js.map +1 -0
  6. package/dist/types/.storybook/main.d.ts +3 -0
  7. package/dist/types/.storybook/preview.d.ts +4 -0
  8. package/dist/types/jest.setup.d.ts +1 -0
  9. package/dist/types/src/entities/buggyComponent/ui/BuggyComponent.d.ts +1 -0
  10. package/dist/types/src/entities/calendar/assets/NextIcon.d.ts +1 -0
  11. package/dist/types/src/entities/calendar/assets/PreviousIcon.d.ts +1 -0
  12. package/dist/types/src/entities/calendar/assets/index.d.ts +2 -0
  13. package/dist/types/src/entities/calendar/lib/decorators/BaseCalendarEngine.d.ts +9 -0
  14. package/dist/types/src/entities/calendar/lib/decorators/CalenderDecorator.d.ts +7 -0
  15. package/dist/types/src/entities/calendar/lib/decorators/FromMondayDecorator.d.ts +7 -0
  16. package/dist/types/src/entities/calendar/lib/decorators/HolidayDecorator.d.ts +7 -0
  17. package/dist/types/src/entities/calendar/lib/decorators/MinMaxDecorator.d.ts +12 -0
  18. package/dist/types/src/entities/calendar/lib/decorators/RangeCalenderDecorator.d.ts +23 -0
  19. package/dist/types/src/entities/calendar/lib/decorators/TodoDecorator.d.ts +13 -0
  20. package/dist/types/src/entities/calendar/lib/decorators/ViewByWeekDecorator.d.ts +8 -0
  21. package/dist/types/src/entities/calendar/lib/decorators/WeekdayDecorator.d.ts +6 -0
  22. package/dist/types/src/entities/calendar/lib/helpers/generateMonthArray.d.ts +4 -0
  23. package/dist/types/src/entities/calendar/lib/helpers/generateYearArray.d.ts +1 -0
  24. package/dist/types/src/entities/calendar/lib/helpers/isMinMaxValue.d.ts +1 -0
  25. package/dist/types/src/entities/calendar/lib/helpers/isSameDates.d.ts +1 -0
  26. package/dist/types/src/entities/calendar/lib/helpers/validationInput.d.ts +4 -0
  27. package/dist/types/src/entities/calendar/lib/tests/constants.d.ts +67 -0
  28. package/dist/types/src/entities/calendar/model/constants.d.ts +7 -0
  29. package/dist/types/src/entities/calendar/model/service.d.ts +35 -0
  30. package/dist/types/src/entities/calendar/model/storageService.d.ts +7 -0
  31. package/dist/types/src/entities/calendar/model/types.d.ts +75 -0
  32. package/dist/types/src/entities/calendar/ui/BaseCalendar/BaseCalendar.d.ts +2 -0
  33. package/dist/types/src/entities/calendar/ui/CalendarCell/CalendarCell.d.ts +2 -0
  34. package/dist/types/src/entities/calendar/ui/CalendarGrid/CalendarGrid.d.ts +2 -0
  35. package/dist/types/src/entities/calendar/ui/CalendarHeader/CalendarHeader.d.ts +2 -0
  36. package/dist/types/src/features/calendar/Calendar.d.ts +2 -0
  37. package/dist/types/src/features/calendar/model/constants.d.ts +5 -0
  38. package/dist/types/src/features/calendarWithInput/CalendarWithInput.d.ts +2 -0
  39. package/dist/types/src/features/calendarWithInput/model/types.d.ts +5 -0
  40. package/dist/types/src/features/calenderWithTodo/lib/helperTests.d.ts +91 -0
  41. package/dist/types/src/features/calenderWithTodo/lib/useCalendarPortal.d.ts +8 -0
  42. package/dist/types/src/features/calenderWithTodo/ui/CalenderWithTodo.d.ts +2 -0
  43. package/dist/types/src/features/rangeCalender/lib/useDateRangePicker.d.ts +23 -0
  44. package/dist/types/src/features/rangeCalender/model/types.d.ts +5 -0
  45. package/dist/types/src/features/rangeCalender/ui/RangeCalender.d.ts +2 -0
  46. package/dist/types/src/index.d.ts +5 -0
  47. package/dist/types/src/shared/lib/getThemed.d.ts +2 -0
  48. package/dist/types/src/shared/lib/useCalendarService.d.ts +6 -0
  49. package/dist/types/src/shared/model/constants.d.ts +3 -0
  50. package/dist/types/src/shared/model/helperTest.d.ts +33 -0
  51. package/dist/types/src/shared/ui/ErrorBoundary/types/types.d.ts +7 -0
  52. package/dist/types/src/shared/ui/ErrorBoundary/ui/ErrorBoundary.d.ts +9 -0
  53. package/dist/types/src/shared/ui/Input/lib/maskDate.d.ts +1 -0
  54. package/dist/types/src/shared/ui/Input/model/constants.d.ts +4 -0
  55. package/dist/types/src/shared/ui/Input/model/types.d.ts +9 -0
  56. package/dist/types/src/shared/ui/Input/ui/Input.d.ts +2 -0
  57. package/dist/types/src/shared/ui/Input/ui/InputWithState.d.ts +2 -0
  58. package/dist/types/src/shared/ui/Input/ui/assets/CalendarIcon.d.ts +1 -0
  59. package/dist/types/src/shared/ui/Input/ui/assets/CloseIcon.d.ts +1 -0
  60. package/dist/types/src/shared/ui/Input/ui/assets/index.d.ts +2 -0
  61. package/dist/types/src/shared/ui/Portal/model/types.d.ts +18 -0
  62. package/dist/types/src/shared/ui/Portal/ui/Portal.d.ts +2 -0
  63. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/entities/calendar/assets/NextIcon.tsx","../src/entities/calendar/assets/PreviousIcon.tsx","../src/entities/calendar/ui/CalendarCell/CalendarCell.tsx","../src/entities/calendar/ui/CalendarGrid/CalendarGrid.tsx","../src/entities/calendar/model/constants.ts","../src/entities/calendar/ui/CalendarHeader/CalendarHeader.tsx","../src/entities/calendar/ui/BaseCalendar/BaseCalendar.tsx","../src/features/calendar/model/constants.ts","../src/shared/lib/getThemed.ts","../src/shared/model/constants.ts","../src/shared/ui/Input/model/constants.ts","../src/entities/calendar/lib/helpers/generateMonthArray.ts","../src/entities/calendar/lib/decorators/CalenderDecorator.ts","../src/entities/calendar/lib/decorators/BaseCalendarEngine.ts","../src/entities/calendar/lib/decorators/FromMondayDecorator.ts","../src/entities/calendar/lib/decorators/HolidayDecorator.ts","../src/entities/calendar/lib/helpers/isMinMaxValue.ts","../src/entities/calendar/lib/decorators/MinMaxDecorator.ts","../src/features/rangeCalender/model/types.ts","../src/entities/calendar/lib/helpers/isSameDates.ts","../src/entities/calendar/lib/decorators/RangeCalenderDecorator.ts","../src/entities/calendar/model/storageService.ts","../src/entities/calendar/lib/decorators/TodoDecorator.ts","../src/entities/calendar/lib/decorators/ViewByWeekDecorator.ts","../src/entities/calendar/lib/decorators/WeekdayDecorator.ts","../src/entities/calendar/lib/helpers/validationInput.ts","../src/entities/calendar/lib/helpers/generateYearArray.ts","../src/entities/calendar/model/service.ts","../src/shared/lib/useCalendarService.ts","../src/shared/ui/ErrorBoundary/ui/ErrorBoundary.tsx","../src/features/calendar/Calendar.tsx","../src/shared/ui/Input/lib/maskDate.ts","../src/shared/ui/Input/ui/assets/CalendarIcon.tsx","../src/shared/ui/Input/ui/assets/CloseIcon.tsx","../src/shared/ui/Input/ui/Input.tsx","../src/features/calendarWithInput/CalendarWithInput.tsx","../src/shared/ui/Portal/ui/Portal.tsx","../src/features/calenderWithTodo/lib/useCalendarPortal.tsx","../src/features/calenderWithTodo/ui/CalenderWithTodo.tsx","../src/features/rangeCalender/lib/useDateRangePicker.ts","../src/features/rangeCalender/ui/RangeCalender.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","export const NextIcon = () => {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M4.27337 4L3.33337 4.94L6.38671 8L3.33337 11.06L4.27337 12L8.27337 8L4.27337 4Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.66668 4L7.72668 4.94L10.78 8L7.72668 11.06L8.66668 12L12.6667 8L8.66668 4Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n","export const PreviousIcon = () => {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.7266 12L12.6666 11.06L9.61329 8L12.6666 4.94L11.7266 4L7.72663 8L11.7266 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.33332 12L8.27332 11.06L5.21998 8L8.27331 4.94L7.33331 4L3.33332 8L7.33332 12Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n","import type { CSSProperties, MouseEvent } from 'react';\n\nimport { CalendarCellProps } from '@entities/calendar/model/types';\n\nimport styles from './CalendarCell.module.scss';\n\nexport const CalendarCell = (props: CalendarCellProps) => {\n const {\n date,\n dayNumber,\n isCurrentMonth,\n onClick,\n isHoliday,\n isSelected,\n isInRange,\n textColor,\n backgroundColor,\n isWeekend,\n id,\n isDisabled,\n haveToDo,\n onDayClickDouble,\n } = props;\n\n const cellClasses = [\n styles.cell,\n !isCurrentMonth && styles['cell--other-month'],\n isHoliday && isCurrentMonth && styles['cell--holiday'],\n isSelected && styles['cell--selected'],\n isInRange && styles['cell--in-range'],\n isWeekend && isCurrentMonth && styles['cell--weekend'],\n ]\n .filter(Boolean)\n .join(' ');\n\n const extrasStyles: CSSProperties = {};\n\n if (isHoliday || isWeekend) {\n if (textColor) extrasStyles.color = textColor;\n if (backgroundColor) extrasStyles.backgroundColor = backgroundColor;\n }\n\n const handleOnClick = (event: MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) onClick?.(date, event);\n };\n\n const handleOnClickDoble = (event: MouseEvent<HTMLDivElement>) => {\n if (!isDisabled) onDayClickDouble?.(date, event);\n };\n\n return (\n <div\n key={id}\n className={cellClasses}\n style={extrasStyles}\n onClick={handleOnClick}\n onDoubleClick={handleOnClickDoble}\n aria-label={`Day ${dayNumber}`}\n role=\"cell\"\n >\n <span className={styles['cell__day-number']}>{dayNumber}</span>\n {haveToDo && <span className={styles['cell__todo-indicator']}>˙</span>}\n </div>\n );\n};\n","import { CalendarGridProps } from '@entities/calendar/model/types';\n\nimport { CalendarCell } from '../CalendarCell/CalendarCell';\n\nimport styles from './CalendarGrid.module.scss';\n\nexport const CalendarGrid = (props: CalendarGridProps) => {\n const { dateArray, onDayClick, onDayClickDouble } = props;\n\n return (\n <div className={styles.grid} role=\"grid\">\n {dateArray.map((el) => (\n <CalendarCell\n onClick={onDayClick}\n onDayClickDouble={onDayClickDouble}\n key={el.id}\n {...el}\n />\n ))}\n </div>\n );\n};\n","import { CalendarCellProps, Weekday } from './types';\n\nexport const FAKE_DATE: CalendarCellProps[] = [\n { id: 'prev-31', date: new Date(2022, 0, 31), dayNumber: 31, isCurrentMonth: false },\n { id: '1', date: new Date(2022, 1, 1), dayNumber: 1, isCurrentMonth: true },\n { id: '2', date: new Date(2022, 1, 2), dayNumber: 2, isCurrentMonth: true },\n { id: '3', date: new Date(2022, 1, 3), dayNumber: 3, isCurrentMonth: true },\n { id: '4', date: new Date(2022, 1, 4), dayNumber: 4, isCurrentMonth: true },\n { id: '5', date: new Date(2022, 1, 5), dayNumber: 5, isCurrentMonth: true },\n { id: '6', date: new Date(2022, 1, 6), dayNumber: 6, isCurrentMonth: true },\n { id: '7', date: new Date(2022, 1, 7), dayNumber: 7, isCurrentMonth: true },\n { id: '8', date: new Date(2022, 1, 8), dayNumber: 8, isCurrentMonth: true },\n { id: '9', date: new Date(2022, 1, 9), dayNumber: 9, isCurrentMonth: true },\n { id: '10', date: new Date(2022, 1, 10), dayNumber: 10, isCurrentMonth: true },\n { id: '11', date: new Date(2022, 1, 11), dayNumber: 11, isCurrentMonth: true },\n { id: '12', date: new Date(2022, 1, 12), dayNumber: 12, isCurrentMonth: true },\n { id: '13', date: new Date(2022, 1, 13), dayNumber: 13, isCurrentMonth: true },\n { id: '14', date: new Date(2022, 1, 14), dayNumber: 14, isCurrentMonth: true },\n { id: '15', date: new Date(2022, 1, 15), dayNumber: 15, isCurrentMonth: true },\n { id: '16', date: new Date(2022, 1, 16), dayNumber: 16, isCurrentMonth: true },\n { id: '17', date: new Date(2022, 1, 17), dayNumber: 17, isCurrentMonth: true },\n { id: '18', date: new Date(2022, 1, 18), dayNumber: 18, isCurrentMonth: true },\n { id: '19', date: new Date(2022, 1, 19), dayNumber: 19, isCurrentMonth: true },\n { id: '20', date: new Date(2022, 1, 20), dayNumber: 20, isCurrentMonth: true },\n { id: '21', date: new Date(2022, 1, 21), dayNumber: 21, isCurrentMonth: true },\n { id: '22', date: new Date(2022, 1, 22), dayNumber: 22, isCurrentMonth: true },\n { id: '23', date: new Date(2022, 1, 23), dayNumber: 23, isCurrentMonth: true },\n { id: '24', date: new Date(2022, 1, 24), dayNumber: 24, isCurrentMonth: true },\n { id: '25', date: new Date(2022, 1, 25), dayNumber: 25, isCurrentMonth: true },\n { id: '26', date: new Date(2022, 1, 26), dayNumber: 26, isCurrentMonth: true },\n { id: '27', date: new Date(2022, 1, 27), dayNumber: 27, isCurrentMonth: true },\n { id: '28', date: new Date(2022, 1, 28), dayNumber: 28, isCurrentMonth: true },\n { id: 'next-1', date: new Date(2022, 2, 1), dayNumber: 1, isCurrentMonth: false },\n { id: 'next-2', date: new Date(2022, 2, 2), dayNumber: 2, isCurrentMonth: false },\n { id: 'next-3', date: new Date(2022, 2, 3), dayNumber: 3, isCurrentMonth: false },\n { id: 'next-4', date: new Date(2022, 2, 4), dayNumber: 4, isCurrentMonth: false },\n { id: 'next-5', date: new Date(2022, 2, 5), dayNumber: 5, isCurrentMonth: false },\n { id: 'next-6', date: new Date(2022, 2, 6), dayNumber: 6, isCurrentMonth: false },\n];\n\nexport const WEEKDAY: Weekday[] = [\n {\n id: '1',\n weekday: 'Su',\n },\n {\n id: '2',\n weekday: 'Mo',\n },\n {\n id: '3',\n weekday: 'Tu',\n },\n {\n id: '4',\n weekday: 'We',\n },\n {\n id: '5',\n weekday: 'Th',\n },\n {\n id: '6',\n weekday: 'Fr',\n },\n {\n id: '7',\n weekday: 'Sa',\n },\n];\n\nexport const MONDAY_INDEX = 1;\nexport const SUNDAY_INDEX = 0;\nexport const SATURDAY_INDEX = 6;\nexport const WEEK_LENGHT = 7;\n","import { MONDAY_INDEX, SUNDAY_INDEX, WEEKDAY } from '@entities/calendar/model/constants';\nimport { CalenderHeaderProps } from '@entities/calendar/model/types';\n\nimport styles from './CalendarHeader.module.scss';\n\nexport const CalendarHeader = (props: CalenderHeaderProps) => {\n const { fromMonday } = props;\n const WEEKDAY_SORT = fromMonday\n ? [...WEEKDAY.slice(MONDAY_INDEX), WEEKDAY[SUNDAY_INDEX]]\n : WEEKDAY;\n\n return (\n <>\n <div className={styles.week}>\n {WEEKDAY_SORT.map(({ weekday, id }) => (\n <div className={styles.week__cell} key={id}>\n <span className={styles.week__weekday}>{weekday}</span>\n </div>\n ))}\n </div>\n </>\n );\n};\n","import { ChangeEvent } from 'react';\n\nimport { NextIcon, PreviousIcon } from '@entities/calendar/assets';\nimport { BaseCalendarProps } from '@entities/calendar/model/types';\n\nimport { CalendarGrid } from '../CalendarGrid/CalendarGrid';\nimport { CalendarHeader } from '../CalendarHeader/CalendarHeader';\n\nimport styles from './BaseCalendar.module.scss';\n\nexport const BaseCalendar = (props: BaseCalendarProps) => {\n const {\n fromMonday,\n dateArray,\n month,\n year,\n onClickNext,\n onClickPrevious,\n onDayClick,\n canNext,\n canPrev,\n onDayClickDouble,\n yearsArray,\n onClickNextYear,\n } = props;\n\n const handleYearChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const newYear = parseInt(e.target.value);\n\n onClickNextYear(newYear);\n };\n\n return (\n <article className={styles.calendar}>\n <header className={styles.calendar__header}>\n <button\n className={styles.calendar__button}\n type=\"button\"\n onClick={onClickPrevious}\n disabled={!canPrev}\n >\n <PreviousIcon />\n </button>\n <div className={styles.calendar__month}>\n {month}{' '}\n <select className={styles.calendar__year} value={year} onChange={handleYearChange}>\n {yearsArray.map((el) => (\n <option key={`option-yaer-${el}`} value={el}>\n {el}\n </option>\n ))}\n </select>\n </div>\n <button\n className={styles.calendar__button}\n type=\"button\"\n onClick={onClickNext}\n disabled={!canNext}\n >\n <NextIcon />\n </button>\n </header>\n\n <CalendarHeader fromMonday={fromMonday} />\n <CalendarGrid\n dateArray={dateArray}\n onDayClick={onDayClick}\n onDayClickDouble={onDayClickDouble}\n />\n {onDayClickDouble && (\n <span className={styles.calendar__notes}>Click twice on the day to add a task.</span>\n )}\n </article>\n );\n};\n","export const MOCK_DATES = [\n new Date(2026, 1, 14),\n new Date(2026, 2, 8),\n new Date(2025, 11, 31),\n new Date(2026, 1, 23),\n];\n\nexport enum THEMED {\n LIGHT = 'light',\n DARK = 'dark',\n}\n","import { THEMED } from '@features/calendar/model/constants';\n\nexport const getTheme = (darkThemed?: boolean) => {\n return darkThemed ? THEMED.DARK : THEMED.LIGHT;\n};\n","export const DATE_PARTS_LENGTH = 3;\nexport const MAX_INPUT_LENGTH = 10;\nexport const FIRST_INDEX = 1;\n","export const START_DATE_INDEX_ = 0;\nexport const START_MONTH_INDEX = 2;\nexport const START_YEAR_INDEX = 4;\nexport const MAX_DATE_LENGTH = 10;\n","import { CalendarCellProps, SectionParams } from '@entities/calendar/model/types';\nimport { FIRST_INDEX } from '@shared/model/constants';\nimport { START_DATE_INDEX_ } from '@shared/ui/Input/model/constants';\n\nexport const CELLS_LENGTH = 42;\nexport const MIN_CELLS_LENGTH = 28;\n\nexport const generateMonthArray = (\n currentDate: Date,\n params: SectionParams\n): CalendarCellProps[] => {\n const days: CalendarCellProps[] = [];\n const { selectedDate, rangeStart, rangeEnd, fromMonday } = params;\n\n const startWeekDay = fromMonday ? FIRST_INDEX : START_DATE_INDEX_;\n const firstDayOfMonth = new Date(\n currentDate.getFullYear(),\n currentDate.getMonth(),\n FIRST_INDEX - startWeekDay\n );\n\n const startWeekday = firstDayOfMonth.getDay();\n const startDate = new Date(firstDayOfMonth);\n\n startDate.setDate(firstDayOfMonth.getDate() - startWeekday + startWeekDay);\n\n const selectedTime = selectedDate?.getTime();\n const startTime = rangeStart?.getTime();\n const endTime = rangeEnd?.getTime();\n\n for (let i = 0; i < CELLS_LENGTH; i++) {\n const date = new Date(startDate);\n\n date.setDate(startDate.getDate() + i);\n\n const isCurrentMonth = date.getMonth() === currentDate.getMonth();\n\n if (\n !isCurrentMonth &&\n date.getDay() == START_DATE_INDEX_ + startWeekDay &&\n i >= MIN_CELLS_LENGTH\n ) {\n return days;\n }\n const newId = date.toISOString();\n\n const isSelected = selectedTime === date.getTime() && isCurrentMonth;\n const isInRange = !!(\n startTime &&\n endTime &&\n date.getTime() >= startTime &&\n date.getTime() <= endTime\n );\n\n const resultDay = {\n id: newId,\n date,\n dayNumber: date.getDate(),\n isCurrentMonth,\n isSelected,\n isInRange,\n };\n\n days.push(resultDay);\n }\n\n return days;\n};\n","import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\nimport { FIRST_INDEX } from '@shared/model/constants';\n\nimport { generateMonthArray } from '../helpers/generateMonthArray';\n\nexport class CalenderDecorator implements CalendarEngine {\n getNextDate(date: Date): Date {\n const newDate = new Date(date.getFullYear(), date.getMonth() + FIRST_INDEX, FIRST_INDEX);\n\n return newDate;\n }\n getPreviousDate(date: Date): Date {\n const newDate = new Date(date.getFullYear(), date.getMonth() - FIRST_INDEX, FIRST_INDEX);\n\n return newDate;\n }\n getNextYear(date: Date, newYear: number): Date {\n const newDate = new Date(newYear, date.getMonth(), FIRST_INDEX);\n\n return newDate;\n }\n\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n return generateMonthArray(currentDate, params);\n }\n}\n","import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\n\nexport abstract class BaseCalendarEngine implements CalendarEngine {\n constructor(protected engine: CalendarEngine) {}\n\n getNextDate(date: Date): Date {\n return this.engine.getNextDate(date);\n }\n getPreviousDate(date: Date): Date {\n return this.engine.getPreviousDate(date);\n }\n getNextYear(date: Date, newYear: number): Date {\n return this.engine.getNextYear(date, newYear);\n }\n abstract getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];\n}\n","import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\n\nimport { BaseCalendarEngine } from './BaseCalendarEngine';\n\nexport class FromMondayDecorator extends BaseCalendarEngine {\n private fromMonday: boolean;\n constructor(engine: CalendarEngine, fromMonday: boolean) {\n super(engine);\n this.fromMonday = fromMonday || false;\n }\n\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n const days = this.engine.getDays(currentDate, { ...params, fromMonday: this.fromMonday });\n\n return days;\n }\n}\n","import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\n\nimport { BaseCalendarEngine } from './BaseCalendarEngine';\n\nexport class HolidayDecorator extends BaseCalendarEngine {\n private holidays: Set<number>;\n\n constructor(engine: CalendarEngine, holidays: Date[]) {\n (super(engine), (this.holidays = new Set(holidays.map((el) => el.getTime()))));\n }\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n const days = this.engine.getDays(currentDate, params);\n\n return days.map((day) => {\n const dayTime = day.date.getTime();\n\n if (this.holidays.has(dayTime)) {\n return { ...day, isHoliday: true };\n }\n\n return day;\n });\n }\n}\n","import { FIRST_INDEX } from '@shared/model/constants';\nimport { START_DATE_INDEX_ } from '@shared/ui/Input/model/constants';\n\nexport const isMinMaxValue = (date: Date, minDate: Date | null, maxDate: Date | null) => {\n if (minDate) {\n const currentDate = new Date(\n date.getFullYear(),\n date.getMonth() + FIRST_INDEX,\n START_DATE_INDEX_\n );\n\n if (currentDate <= minDate) return false;\n }\n\n if (maxDate) {\n const currentDate = new Date(date.getFullYear(), date.getMonth(), START_DATE_INDEX_);\n\n if (currentDate >= maxDate) return false;\n }\n\n return true;\n};\n","import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\n\nimport { isMinMaxValue } from '../helpers/isMinMaxValue';\n\nimport { BaseCalendarEngine } from './BaseCalendarEngine';\n\nexport class MinMaxDecorator extends BaseCalendarEngine {\n private minDate: Date | null;\n private maxDate: Date | null;\n\n constructor(engine: CalendarEngine, minDate?: Date, maxDate?: Date) {\n super(engine);\n this.minDate = minDate || null;\n this.maxDate = maxDate || null;\n }\n\n private isDateInRange(date: Date): boolean {\n return isMinMaxValue(date, this.minDate, this.maxDate);\n }\n\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n const days = this.engine.getDays(currentDate, params) || [];\n\n return days.map((day) => {\n if (\n day.date.getTime() < (this.minDate?.getTime() || 0) ||\n day.date.getTime() > (this.maxDate?.getTime() || 0)\n ) {\n return { ...day, isDisabled: true, isCurrentMonth: false };\n }\n\n return day;\n });\n }\n\n getNextDate(date: Date): Date {\n const nextDate = this.engine.getNextDate(date);\n\n return this.isDateInRange(nextDate) ? nextDate : date;\n }\n\n getPreviousDate(date: Date): Date {\n const prevDate = this.engine.getPreviousDate(date);\n\n return this.isDateInRange(prevDate) ? prevDate : date;\n }\n\n getNextYear(date: Date, newYear: number): Date {\n const nextYear = this.engine.getNextYear(date, newYear);\n\n return this.isDateInRange(nextYear) ? nextYear : date;\n }\n}\n","export const INPUT_TYPE = {\n START: 'START',\n END: 'END',\n} as const;\n\nexport type ActiveInputType = keyof typeof INPUT_TYPE;\n","export const isSameDates = (firstDate: Date, secondDate: Date): boolean => {\n if (\n firstDate.getFullYear() === secondDate.getFullYear() &&\n firstDate.getMonth() === secondDate.getMonth() &&\n firstDate.getDate() === secondDate.getDate()\n )\n return true;\n\n return false;\n};\n","import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\nimport { ActiveInputType, INPUT_TYPE } from '@features/rangeCalender/model/types';\n\nimport { isSameDates } from '../helpers/isSameDates';\n\nimport { BaseCalendarEngine } from './BaseCalendarEngine';\n\ninterface RangeInput {\n rangeStart: Date | null;\n rangeEnd: Date | null;\n}\n\nexport class RangeDecorator extends BaseCalendarEngine {\n private listeners = new Set<() => void>();\n private rangeStart: Date | null;\n private rangeEnd: Date | null;\n\n constructor(_config: CalendarEngine) {\n super(_config);\n this.rangeStart = null;\n this.rangeEnd = null;\n }\n\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n const days = this.engine.getDays(currentDate, params);\n const { rangeStart, rangeEnd } = params;\n\n if (!rangeStart && !rangeEnd) return days;\n\n return days.map((day) => {\n const isStart = rangeStart ? isSameDates(day.date, rangeStart) : false;\n const isEnd = rangeEnd ? isSameDates(day.date, rangeEnd) : false;\n const inBetween =\n rangeStart && rangeEnd && day.date > rangeStart && day.date < rangeEnd ? true : false;\n\n return { ...day, isSelected: isStart || isEnd, isInRange: isStart || isEnd || inBetween };\n });\n }\n\n public getRangeStart(): Date | null {\n return this.rangeStart;\n }\n\n public getRangeEnd(): Date | null {\n return this.rangeEnd;\n }\n\n public setRangeStart(date: Date | null) {\n this.rangeStart = date;\n\n if (date && this.rangeEnd && date > this.rangeEnd) {\n this.rangeEnd = null;\n }\n this.notify();\n }\n\n public setRangeEnd(date: Date | null) {\n if (date && this.rangeStart && date < this.rangeStart) {\n return;\n }\n this.rangeEnd = date;\n this.notify();\n }\n\n public clearRange(inputType?: ActiveInputType) {\n if (inputType === INPUT_TYPE.END) {\n this.rangeEnd = null;\n } else {\n this.rangeEnd = null;\n this.rangeStart = null;\n }\n\n this.notify();\n }\n\n public handleRangeClick(date: Date): RangeInput {\n if (!this.rangeStart) {\n this.rangeStart = date;\n } else if (!this.rangeEnd) {\n if (date < this.rangeStart) {\n this.rangeStart = date;\n this.rangeEnd = null;\n } else {\n this.rangeEnd = date;\n }\n } else {\n this.rangeStart = date;\n this.rangeEnd = null;\n }\n\n this.notify();\n\n return {\n rangeStart: this.rangeStart,\n rangeEnd: this.rangeEnd,\n };\n }\n\n private notify() {\n this.listeners.forEach((listener) => listener());\n }\n\n public subscribe(listener: () => void) {\n this.listeners.add(listener);\n\n return () => this.listeners.delete(listener);\n }\n}\n","export class StorageService<T> {\n private key: string;\n private defaultValue: T;\n\n constructor(key: string, defaultValue: T) {\n this.key = key;\n this.defaultValue = defaultValue;\n }\n\n get(): T {\n const data = localStorage.getItem(this.key);\n\n return data ? JSON.parse(data) : this.defaultValue;\n }\n\n set(value: T): void {\n localStorage.setItem(this.key, JSON.stringify(value));\n }\n}\n","import { StorageService } from '@entities/calendar/model/storageService';\nimport { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\nimport { START_DATE_INDEX_ } from '@shared/ui/Input/model/constants';\n\nimport { BaseCalendarEngine } from './BaseCalendarEngine';\n\nexport class TodoDecorator extends BaseCalendarEngine {\n private STORAGE_KEY = 'calendar_todos';\n private storage = new StorageService<Record<string, string[]>>(this.STORAGE_KEY, {});\n\n constructor(engine: CalendarEngine) {\n super(engine);\n }\n\n private getDateKey(date: Date): string {\n return date.toISOString().split('T')[START_DATE_INDEX_];\n }\n\n private getAllTodos(): Record<string, string[]> {\n return this.storage.get();\n }\n\n public getTodosByDate(date: Date): string[] {\n const key = this.getDateKey(date);\n\n return this.getAllTodos()[key] || [];\n }\n\n public addTodo(date: Date, todo: string): void {\n const key = this.getDateKey(date);\n const allTodos = this.getAllTodos();\n\n allTodos[key] = allTodos[key] || [];\n allTodos[key].push(todo);\n\n this.storage.set(allTodos);\n }\n\n public deleteTodo(date: Date, todo: string): void {\n const key = this.getDateKey(date);\n const allTodos = this.getAllTodos();\n\n allTodos[key] = allTodos[key] || [];\n allTodos[key] = allTodos[key].filter((item) => item !== todo);\n\n this.storage.set(allTodos);\n }\n\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n const todos = this.getAllTodos();\n const days = this.engine.getDays(currentDate, params);\n\n return days.map((day) => {\n const key = this.getDateKey(day.date);\n const haveToDo = todos[key] && todos[key].length > 0;\n\n return {\n ...day,\n todo: todos[key] || [],\n haveToDo,\n };\n });\n }\n}\n","import { WEEK_LENGHT } from '@entities/calendar/model/constants';\nimport { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\nimport { FIRST_INDEX } from '@shared/model/constants';\nimport { START_DATE_INDEX_ } from '@shared/ui/Input/model/constants';\n\nimport { isSameDates } from '../helpers/isSameDates';\n\nimport { BaseCalendarEngine } from './BaseCalendarEngine';\n\nexport class ViewByWeekDecorator extends BaseCalendarEngine {\n constructor(engine: CalendarEngine) {\n super(engine);\n }\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n const daysArray = this.engine.getDays(currentDate, params);\n const currentDateIndex = daysArray.findIndex((day) => isSameDates(day.date, currentDate));\n\n if (currentDateIndex === -FIRST_INDEX) return daysArray.slice(START_DATE_INDEX_, WEEK_LENGHT);\n const weekCount = Math.floor(currentDateIndex / WEEK_LENGHT);\n\n return daysArray.slice(weekCount * WEEK_LENGHT, weekCount * WEEK_LENGHT + WEEK_LENGHT);\n }\n\n getNextDate(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + WEEK_LENGHT);\n }\n\n getPreviousDate(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() - WEEK_LENGHT);\n }\n}\n","import { SATURDAY_INDEX, SUNDAY_INDEX } from '@entities/calendar/model/constants';\nimport { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';\n\nimport { BaseCalendarEngine } from './BaseCalendarEngine';\n\nexport class WeekdayDecorator extends BaseCalendarEngine {\n constructor(engine: CalendarEngine) {\n super(engine);\n }\n getDays(currentDate: Date, params: SectionParams): CalendarCellProps[] {\n const days = this.engine.getDays(currentDate, params);\n\n return days.map((day) => {\n const dayDay = day.date.getDay();\n\n if (dayDay == SUNDAY_INDEX || dayDay == SATURDAY_INDEX) return { ...day, isWeekend: true };\n\n return day;\n });\n }\n}\n","import { ValidationResult } from '@entities/calendar/model/types';\nimport { DATE_PARTS_LENGTH, FIRST_INDEX, MAX_INPUT_LENGTH } from '@shared/model/constants';\n\nconst MAX_DAY = 31;\nconst MAX_MONTH = 12;\n\nexport const MAX_YEAR = 2050;\nexport const MIN_YEAR = 1970;\n\nexport const validateDateInput = (value: string): ValidationResult => {\n const validationResult: ValidationResult = {\n isValid: false,\n error: '',\n date: null,\n };\n\n const trimmed = value.trim();\n const parts = trimmed.split('.');\n\n if (parts.length !== DATE_PARTS_LENGTH) {\n return { ...validationResult, error: 'Invalid format. Expected DD.MM.YYYY' };\n }\n\n if (trimmed.length > MAX_INPUT_LENGTH) {\n return { ...validationResult, error: 'Input too long' };\n }\n\n const [dayRaw, monthRaw, yearRaw] = parts;\n const day = Number(dayRaw);\n const month = Number(monthRaw);\n const year = Number(yearRaw);\n\n if (Number.isNaN(day) || Number.isNaN(month) || Number.isNaN(year)) {\n return { ...validationResult, error: 'Invalid numeric values' };\n }\n\n if (day > MAX_DAY || day < FIRST_INDEX) {\n return { ...validationResult, error: 'The day should be from 1 to 31' };\n }\n\n if (month > MAX_MONTH || month < FIRST_INDEX) {\n return { ...validationResult, error: 'The month should be from 1 to 12' };\n }\n\n if (year > MAX_YEAR) {\n return { ...validationResult, error: `The year should be less than ${MAX_YEAR}` };\n }\n\n if (year < MIN_YEAR) {\n return { ...validationResult, error: `The year should be greater than ${MIN_YEAR}` };\n }\n\n const newDate = new Date(year, month - FIRST_INDEX, day);\n\n if (\n newDate.getFullYear() !== year ||\n newDate.getMonth() !== month - FIRST_INDEX ||\n newDate.getDate() !== day\n ) {\n return { ...validationResult, error: 'Invalid date for the given month/year' };\n }\n\n return { ...validationResult, isValid: true, date: newDate };\n};\n","import { FIRST_INDEX } from '@shared/model/constants';\n\nimport { MAX_YEAR, MIN_YEAR } from './validationInput';\n\nexport const generateYearArray = (minYear?: number, maxYear?: number) => {\n minYear ??= MIN_YEAR;\n maxYear ??= MAX_YEAR;\n\n const yearArray = [];\n\n while (minYear <= maxYear) {\n yearArray.push(minYear);\n minYear += FIRST_INDEX;\n }\n\n return yearArray;\n};\n","import { MouseEvent } from 'react';\n\nimport { ActiveInputType } from '@features/rangeCalender/model/types';\n\nimport { CalenderDecorator } from '../lib/decorators/CalenderDecorator';\nimport { FromMondayDecorator } from '../lib/decorators/FromMondayDecorator';\nimport { HolidayDecorator } from '../lib/decorators/HolidayDecorator';\nimport { MinMaxDecorator } from '../lib/decorators/MinMaxDecorator';\nimport { RangeDecorator } from '../lib/decorators/RangeCalenderDecorator';\nimport { TodoDecorator } from '../lib/decorators/TodoDecorator';\nimport { ViewByWeekDecorator } from '../lib/decorators/ViewByWeekDecorator';\nimport { WeekdayDecorator } from '../lib/decorators/WeekdayDecorator';\nimport { generateYearArray } from '../lib/helpers/generateYearArray';\nimport { validateDateInput } from '../lib/helpers/validationInput';\n\nimport { BaseCalendarProps, CalendarEngine, EngineConfig } from './types';\n\nexport class DatepickerService {\n private engine: CalendarEngine;\n private viewDate: Date;\n private selectedDate: Date | null;\n private listeners = new Set<() => void>();\n private yearsArray: number[] = [];\n\n constructor(_config?: EngineConfig) {\n this.engine = this.composeEngine(_config);\n this.viewDate = this.selectFirstDay(_config);\n this.selectedDate = _config?.defaultDate || null;\n this.yearsArray = generateYearArray(\n _config?.minDate?.getFullYear(),\n _config?.maxDate?.getFullYear()\n );\n }\n\n private composeEngine(_config?: EngineConfig): CalendarEngine {\n let engine: CalendarEngine = new CalenderDecorator();\n\n if (_config?.maxDate || _config?.minDate || _config?.defaultDate)\n engine = new MinMaxDecorator(engine, _config.minDate, _config.maxDate);\n\n if (_config?.withHoliday && _config.holidays)\n engine = new HolidayDecorator(engine, _config.holidays);\n\n if (_config?.withWeekend) engine = new WeekdayDecorator(engine);\n\n if (_config?.fromMonday) engine = new FromMondayDecorator(engine, _config.fromMonday);\n\n if (_config?.viewByWeek) engine = new ViewByWeekDecorator(engine);\n\n if (_config?.withTodo) engine = new TodoDecorator(engine);\n\n if (_config?.withRange) engine = new RangeDecorator(engine);\n\n return engine;\n }\n\n public subscribe(listener: () => void) {\n this.listeners.add(listener);\n\n return () => this.listeners.delete(listener);\n }\n\n public notify() {\n this.listeners.forEach((listener) => listener());\n }\n\n public next() {\n this.viewDate = this.engine.getNextDate(this.viewDate);\n this.notify();\n }\n public prev() {\n this.viewDate = this.engine.getPreviousDate(this.viewDate);\n this.notify();\n }\n\n public handleInputChange(value: string) {\n const result = validateDateInput(value);\n\n if (result.isValid && result.date) {\n this.selectedDate = result.date;\n this.viewDate = result.date;\n this.notify();\n }\n\n return result;\n }\n\n public getInputValue(): string {\n if (!this.selectedDate) {\n return '';\n }\n\n return this.selectedDate.toLocaleDateString();\n }\n\n public setSelectedDate(date: Date | null) {\n this.selectedDate = date;\n if (date) this.viewDate = date;\n this.notify();\n }\n\n public getSelectedDate(): Date | null {\n return this.selectedDate;\n }\n private getNextYear(newYear: number): Date {\n const newDate = this.engine.getNextYear(this.viewDate, newYear);\n\n this.viewDate = newDate;\n\n this.notify();\n\n return newDate;\n }\n public getViewModel(): BaseCalendarProps {\n const nextDate = this.engine.getNextDate(this.viewDate);\n const prevDate = this.engine.getPreviousDate(this.viewDate);\n let rangeStart = null;\n let rangeEnd = null;\n\n if (this.engine instanceof RangeDecorator) {\n rangeStart = this.engine.getRangeStart();\n rangeEnd = this.engine.getRangeEnd();\n }\n\n return {\n dateArray: this.engine.getDays(this.viewDate, {\n selectedDate: this.selectedDate,\n rangeStart: rangeStart,\n rangeEnd: rangeEnd,\n }),\n fromMonday: false,\n month: this.viewDate.toLocaleString('en-US', { month: 'long' }),\n year: this.viewDate.getFullYear(),\n onClickNext: () => this.next(),\n onClickPrevious: () => this.prev(),\n onDayClick: (date: Date, _event?: MouseEvent<HTMLDivElement>) => this.setSelectedDate(date),\n onDayRangeClick: (date: Date) => this.handleRangeClick(date.toLocaleDateString()),\n onClickNextYear: (newYear: number) => this.getNextYear(newYear),\n canNext: nextDate.getTime() !== this.viewDate.getTime(),\n canPrev: prevDate.getTime() !== this.viewDate.getTime(),\n yearsArray: this.yearsArray,\n };\n }\n\n private selectFirstDay(_config?: EngineConfig): Date {\n const min = _config?.minDate;\n const max = _config?.maxDate;\n const defaultDate = _config?.defaultDate || new Date();\n\n const isTooEarly = min && defaultDate.getTime() < min.getTime();\n const isTooLate = max && defaultDate.getTime() > max.getTime();\n\n if (isTooEarly || isTooLate) {\n return min || max || defaultDate;\n }\n\n return defaultDate;\n }\n\n public handleRangeClick(value: string) {\n const date = validateDateInput(value);\n\n if (date.isValid && date.date && this.engine instanceof RangeDecorator) {\n const { rangeStart, rangeEnd } = this.engine.handleRangeClick(date.date);\n\n this.selectedDate = rangeEnd || rangeStart;\n this.viewDate = date.date;\n this.notify();\n }\n\n return date;\n }\n\n public clearRange(inputType?: ActiveInputType) {\n if (this.engine instanceof RangeDecorator) {\n this.engine.clearRange(inputType);\n const start = this.engine.getRangeStart();\n const end = this.engine.getRangeEnd();\n\n this.selectedDate = end || start;\n this.notify();\n }\n }\n public getRange(): { start: Date | null; end: Date | null } {\n if (this.engine instanceof RangeDecorator) {\n return {\n start: this.engine.getRangeStart(),\n end: this.engine.getRangeEnd(),\n };\n }\n\n return { start: null, end: null };\n }\n\n public setRangeStart(date: Date | null) {\n if (this.engine instanceof RangeDecorator) {\n this.engine.setRangeStart(date);\n this.selectedDate = date;\n if (date) this.viewDate = date;\n this.notify();\n }\n }\n\n public setRangeEnd(date: Date | null) {\n if (this.engine instanceof RangeDecorator) {\n this.engine.setRangeEnd(date);\n this.selectedDate = date;\n if (date) this.viewDate = date;\n this.notify();\n }\n }\n\n public getRangeStart(): Date | null {\n if (this.engine instanceof RangeDecorator) {\n return this.engine.getRangeStart();\n }\n\n return null;\n }\n\n public getRangeEnd(): Date | null {\n if (this.engine instanceof RangeDecorator) {\n return this.engine.getRangeEnd();\n }\n\n return null;\n }\n\n public addTodo(date: Date, text: string) {\n if (this.engine instanceof TodoDecorator) {\n this.engine.addTodo(date, text);\n this.notify();\n }\n }\n\n public getTodosByDate(date: Date): string[] {\n if (this.engine instanceof TodoDecorator) {\n return this.engine.getTodosByDate(date);\n }\n\n return [];\n }\n\n public deleteTodo(date: Date, todo: string): void {\n if (this.engine instanceof TodoDecorator) {\n this.engine.deleteTodo(date, todo);\n this.notify();\n }\n }\n}\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { DatepickerService } from '@entities/calendar/model/service';\nimport { BaseCalendarProps, EngineConfig } from '@entities/calendar/model/types';\n\nexport const useCalendarService = (config?: EngineConfig, withTodo?: boolean) => {\n const service = useMemo(\n () => new DatepickerService({ ...config, withTodo: withTodo }),\n [config, withTodo]\n );\n\n const [viewModel, setViewModel] = useState<BaseCalendarProps>(service.getViewModel());\n\n useEffect(() => {\n const unsubscribe = service.subscribe(() => {\n setViewModel(service.getViewModel());\n });\n\n return () => {\n unsubscribe();\n };\n }, [service]);\n\n return {\n service,\n viewModel,\n };\n};\n","import { Component, ErrorInfo } from 'react';\n\nimport { Props, State } from '../types/types';\n\nimport styles from './ErrorBoundary.module.scss';\n\nexport class ErrorBoundary extends Component<Props, State> {\n public state: State = {\n hasError: false,\n };\n\n public static getDerivedStateFromError(_: Error): State {\n return { hasError: true };\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error('Uncaught error:', error, errorInfo);\n }\n\n private handleReload = () => {\n const updateState: State = { hasError: false };\n\n this.setState(updateState);\n\n window.location.reload();\n };\n\n public render() {\n if (this.state.hasError) {\n return (\n <article className={styles.errorContainer}>\n <p>Something went wrong.</p>\n <button onClick={this.handleReload} className={styles.reload}>\n ↻\n </button>\n </article>\n );\n }\n\n return this.props.children;\n }\n}\n","import { EngineConfig } from '@entities/calendar/model/types';\nimport { BaseCalendar } from '@entities/calendar/ui/BaseCalendar/BaseCalendar';\nimport { getTheme } from '@shared/lib/getThemed';\nimport { useCalendarService } from '@shared/lib/useCalendarService';\nimport { ErrorBoundary } from '@shared/ui/ErrorBoundary/ui/ErrorBoundary';\n\nexport const Calendar = (config?: EngineConfig) => {\n const { viewModel } = useCalendarService(config);\n\n const fromMonday = config?.fromMonday || false;\n const themed = getTheme(config?.darkThemed);\n\n return (\n <ErrorBoundary>\n <div data-theme={themed}>\n <BaseCalendar {...viewModel} fromMonday={fromMonday} />\n </div>\n </ErrorBoundary>\n );\n};\n","import { START_DATE_INDEX_, START_MONTH_INDEX, START_YEAR_INDEX } from '../model/constants';\n\nexport const maskDate = (value: string): string => {\n const digits = value.replace(/\\D/g, '');\n\n if (digits.length <= START_MONTH_INDEX) {\n return `${digits}`;\n }\n\n if (digits.length <= START_YEAR_INDEX) {\n return `${digits.substring(START_DATE_INDEX_, START_MONTH_INDEX)}.${digits.substring(START_MONTH_INDEX)}`;\n }\n\n return `${digits.substring(START_DATE_INDEX_, START_MONTH_INDEX)}.${digits.substring(START_MONTH_INDEX, START_YEAR_INDEX)}.${digits.substring(START_YEAR_INDEX)}`;\n};\n","export const CalendarIcon = () => {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_1_539)\">\n <path\n d=\"M8.2 9.59999C7.97333 9.59999 7.78347 9.52319 7.6304 9.36959C7.4768 9.21653 7.4 9.02666 7.4 8.79999C7.4 8.57333 7.4768 8.38319 7.6304 8.22959C7.78347 8.07653 7.97333 7.99999 8.2 7.99999C8.42667 7.99999 8.6168 8.07653 8.7704 8.22959C8.92347 8.38319 9 8.57333 9 8.79999C9 9.02666 8.92347 9.21653 8.7704 9.36959C8.6168 9.52319 8.42667 9.59999 8.2 9.59999ZM5 9.59999C4.77333 9.59999 4.5832 9.52319 4.4296 9.36959C4.27653 9.21653 4.2 9.02666 4.2 8.79999C4.2 8.57333 4.27653 8.38319 4.4296 8.22959C4.5832 8.07653 4.77333 7.99999 5 7.99999C5.22667 7.99999 5.4168 8.07653 5.5704 8.22959C5.72347 8.38319 5.8 8.57333 5.8 8.79999C5.8 9.02666 5.72347 9.21653 5.5704 9.36959C5.4168 9.52319 5.22667 9.59999 5 9.59999ZM11.4 9.59999C11.1733 9.59999 10.9835 9.52319 10.8304 9.36959C10.6768 9.21653 10.6 9.02666 10.6 8.79999C10.6 8.57333 10.6768 8.38319 10.8304 8.22959C10.9835 8.07653 11.1733 7.99999 11.4 7.99999C11.6267 7.99999 11.8165 8.07653 11.9696 8.22959C12.1232 8.38319 12.2 8.57333 12.2 8.79999C12.2 9.02666 12.1232 9.21653 11.9696 9.36959C11.8165 9.52319 11.6267 9.59999 11.4 9.59999ZM8.2 12.8C7.97333 12.8 7.78347 12.7232 7.6304 12.5696C7.4768 12.4165 7.4 12.2267 7.4 12C7.4 11.7733 7.4768 11.5835 7.6304 11.4304C7.78347 11.2768 7.97333 11.2 8.2 11.2C8.42667 11.2 8.6168 11.2768 8.7704 11.4304C8.92347 11.5835 9 11.7733 9 12C9 12.2267 8.92347 12.4165 8.7704 12.5696C8.6168 12.7232 8.42667 12.8 8.2 12.8ZM5 12.8C4.77333 12.8 4.5832 12.7232 4.4296 12.5696C4.27653 12.4165 4.2 12.2267 4.2 12C4.2 11.7733 4.27653 11.5835 4.4296 11.4304C4.5832 11.2768 4.77333 11.2 5 11.2C5.22667 11.2 5.4168 11.2768 5.5704 11.4304C5.72347 11.5835 5.8 11.7733 5.8 12C5.8 12.2267 5.72347 12.4165 5.5704 12.5696C5.4168 12.7232 5.22667 12.8 5 12.8ZM11.4 12.8C11.1733 12.8 10.9835 12.7232 10.8304 12.5696C10.6768 12.4165 10.6 12.2267 10.6 12C10.6 11.7733 10.6768 11.5835 10.8304 11.4304C10.9835 11.2768 11.1733 11.2 11.4 11.2C11.6267 11.2 11.8165 11.2768 11.9696 11.4304C12.1232 11.5835 12.2 11.7733 12.2 12C12.2 12.2267 12.1232 12.4165 11.9696 12.5696C11.8165 12.7232 11.6267 12.8 11.4 12.8ZM2.6 16C2.16 16 1.7832 15.8435 1.4696 15.5304C1.15653 15.2168 1 14.84 1 14.4V3.19999C1 2.75999 1.15653 2.38346 1.4696 2.07039C1.7832 1.75679 2.16 1.59999 2.6 1.59999H3.4V-7.62939e-06H5V1.59999H11.4V-7.62939e-06H13V1.59999H13.8C14.24 1.59999 14.6168 1.75679 14.9304 2.07039C15.2435 2.38346 15.4 2.75999 15.4 3.19999V14.4C15.4 14.84 15.2435 15.2168 14.9304 15.5304C14.6168 15.8435 14.24 16 13.8 16H2.6ZM2.6 14.4H13.8V6.39999H2.6V14.4Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_1_539\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","export const CloseIcon = () => {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12.9872 3.04239C10.2573 0.319202 5.77739 0.319202 3.04745 3.04239C0.317516 5.76559 0.317516 10.2344 3.04745 12.9576C5.77739 15.6808 10.1873 15.6808 12.9172 12.9576C15.6471 10.2344 15.7171 5.76559 12.9872 3.04239ZM9.97728 10.9327L8.01733 8.97756L6.05738 10.9327L5.0774 9.95511L7.03735 8L5.0774 6.04489L6.05738 5.06733L8.01733 7.02244L9.97728 5.06733L10.9573 6.04489L8.99731 8L10.9573 9.95511L9.97728 10.9327Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n","import { ChangeEvent, useId } from 'react';\n\nimport { maskDate } from '../lib/maskDate';\nimport { MAX_DATE_LENGTH } from '../model/constants';\nimport { InputProps } from '../model/types';\n\nimport { CalendarIcon, CloseIcon } from './assets';\nimport styles from './Input.module.scss';\n\nexport const Input = (props: InputProps) => {\n const { value, placeholder, error, label, handleIsOpen, onClear, onChange } = props;\n\n const inputId = useId();\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const maskedValue = maskDate(e.target.value);\n\n onChange?.(maskedValue);\n };\n\n const clearButtonStyles = [styles['wrapper__icon'], !value && styles['wrapper__icon--hidden']]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={styles.wrapper}>\n {label && (\n <label htmlFor={inputId} className={styles.wrapper__label}>\n {label}\n </label>\n )}\n\n <div className={styles['wrapper__input-wrapper']}>\n <button\n type=\"button\"\n onClick={handleIsOpen}\n className={styles.wrapper__icon}\n aria-label=\"Open calendar\"\n >\n <CalendarIcon />\n </button>\n\n <input\n id={inputId}\n type=\"text\"\n placeholder={placeholder ?? 'Choose Date'}\n value={value}\n className={styles.wrapper__field}\n onChange={handleChange}\n maxLength={MAX_DATE_LENGTH}\n />\n\n <button\n type=\"button\"\n onClick={onClear}\n className={clearButtonStyles}\n aria-label=\"Clear input\"\n >\n <CloseIcon />\n </button>\n </div>\n {error && <p className={styles.wrapper__error}>{error}</p>}\n </div>\n );\n};\n","import { useEffect, useState } from 'react';\n\nimport { DatepickerService } from '@entities/calendar/model/service';\nimport { BaseCalendarProps } from '@entities/calendar/model/types';\nimport { BaseCalendar } from '@entities/calendar/ui/BaseCalendar/BaseCalendar';\nimport { getTheme } from '@shared/lib/getThemed';\nimport { ErrorBoundary } from '@shared/ui/ErrorBoundary/ui/ErrorBoundary';\nimport { Input } from '@shared/ui/Input/ui/Input';\n\nimport styles from './CalendarWithInput.module.scss';\nimport { CalanderWithInputprops } from './model/types';\n\nconst service = new DatepickerService();\n\nexport const CalendarWithInput = (props: CalanderWithInputprops) => {\n const [error, setError] = useState<string>('');\n const [inputValue, setInputValue] = useState<string>(service.getInputValue());\n const [viewModel, setViewModel] = useState<BaseCalendarProps>(service.getViewModel());\n\n const [isOpenCalendar, setIsOpenCalendar] = useState<boolean>(false);\n\n const handleInputChange = (value: string) => {\n setInputValue(value);\n\n const { error } = service.handleInputChange(value);\n\n setError(error);\n };\n\n const handleClear = () => {\n service.setSelectedDate(null);\n setIsOpenCalendar(false);\n };\n\n const handleIsOpen = () => {\n setIsOpenCalendar((pr) => !pr);\n };\n\n useEffect(() => {\n const unsubscribe = service.subscribe(() => {\n setViewModel(service.getViewModel());\n setInputValue(service.getInputValue());\n });\n\n return () => {\n unsubscribe();\n };\n }, []);\n\n const themed = getTheme(props?.darkThemed);\n\n return (\n <ErrorBoundary>\n <div data-theme={themed} className={styles.wrapper}>\n <Input\n value={inputValue}\n onChange={handleInputChange}\n onClear={handleClear}\n handleIsOpen={handleIsOpen}\n error={error}\n {...props}\n />\n {isOpenCalendar && (\n <div className={styles.wrapper__calendar}>\n <BaseCalendar {...viewModel} />\n </div>\n )}\n </div>\n </ErrorBoundary>\n );\n};\n","import { ChangeEvent, MouseEventHandler, useEffect, useMemo, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { THEMED } from '@features/calendar/model/constants';\n\nimport { PortalPosition, PortalProps } from '../model/types';\n\nimport styles from './Portal.module.scss';\n\nconst containerCreate = (themed: THEMED) => {\n if (typeof document === 'undefined') return null;\n const div = document.createElement('div');\n\n div.id = `portal-root-${Math.random()}`;\n div.setAttribute('data-theme', themed);\n div.ariaLabel = 'todo-portal';\n\n return div;\n};\n\nexport const Portal = (props: PortalProps) => {\n const [inputValue, setInputValue] = useState('');\n const [todoToDelete, setTodoToDelete] = useState<string | null>(null);\n\n const {\n anchorEl,\n portalRef,\n isOpenPortal,\n onAddTodo,\n onClose,\n selectedDate,\n getTodos,\n onDeleteTodo,\n themed,\n } = props;\n\n const container = useMemo(() => containerCreate(themed), [themed]);\n\n const todos = selectedDate ? getTodos(selectedDate) : [];\n\n useEffect(() => {\n if (!container) return;\n document.body.appendChild(container);\n\n return () => {\n document.body.removeChild(container);\n };\n }, [container]);\n\n const handleClickInside: MouseEventHandler<HTMLElement> = (event) => {\n event.stopPropagation();\n };\n\n const getPosition = (): PortalPosition => {\n if (!anchorEl) return { top: '', left: '' };\n\n const { bottom, left } = anchorEl.getBoundingClientRect();\n\n const buttonWidth = anchorEl.offsetWidth || 0;\n\n const topPosition = `${bottom + window.scrollY}px`;\n\n let leftPosition = left + window.scrollX + buttonWidth;\n\n return {\n top: topPosition,\n left: `${leftPosition}px`,\n };\n };\n\n const handleAdd = () => {\n if (!inputValue.trim() || !selectedDate) return;\n\n onAddTodo(selectedDate, inputValue);\n setInputValue('');\n };\n\n const askDeleteConfirmation = (todo: string) => () => {\n setTodoToDelete(todo);\n };\n\n const cancelDelete = () => {\n setTodoToDelete(null);\n };\n\n const confirmDelete = () => {\n if (selectedDate && todoToDelete) {\n onDeleteTodo(selectedDate, todoToDelete);\n setTodoToDelete(null);\n }\n };\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const portalPosition = getPosition();\n\n if (!isOpenPortal || !container) return null;\n\n return createPortal(\n <article\n ref={portalRef}\n onClick={handleClickInside}\n className={styles.portal}\n style={{\n position: 'absolute',\n top: portalPosition.top,\n left: portalPosition.left,\n }}\n >\n <div className={styles['header']}>\n <p className={styles['header__title']}>TO DO</p>\n <button className={styles['header__close']} onClick={onClose} aria-label=\"Close portal\">\n ×\n </button>\n </div>\n <div className={styles['input-wrapper']}>\n <input\n className={styles['input-wrapper__input']}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n />\n <button className={styles['input-wrapper__button']} type=\"button\" onClick={handleAdd}>\n Add\n </button>\n </div>\n <div className={styles['todo-list']}>\n {todos?.length === 0 ? (\n <div className={styles['todo-list__empty']}>No tasks yet. Add one!</div>\n ) : (\n todos?.map((todo) => (\n <div key={`todo-item-${todo}`} className={styles['todo-list__item']}>\n {todoToDelete === todo ? (\n <>\n <span className={styles['todo-list__text']}>Are you sure?</span>\n <button onClick={confirmDelete} className={styles['todo-list__confirm-yes']}>\n Yes\n </button>\n <button onClick={cancelDelete} className={styles['todo-list__confirm-no']}>\n No\n </button>\n </>\n ) : (\n <>\n {' '}\n <span className={styles['todo-list__text']}>{todo}</span>\n <button\n className={styles['todo-list__delete']}\n onClick={askDeleteConfirmation(todo)}\n aria-label=\"Delete task\"\n >\n ×\n </button>\n </>\n )}\n </div>\n ))\n )}\n </div>\n </article>,\n container\n );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport const useCalendarPortal = () => {\n const [isOpenPortal, setIsOpenPortal] = useState<boolean>(false);\n const [selectedDate, setSelectedDate] = useState<Date | null>(null);\n\n const portalRef = useRef<HTMLDivElement | null>(null);\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const openPortal = useCallback((date: Date, element: HTMLElement) => {\n setSelectedDate(date);\n setAnchorEl(element);\n setIsOpenPortal(true);\n }, []);\n\n const closePortal = useCallback(() => {\n setIsOpenPortal(false);\n }, []);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (!isOpenPortal) return;\n\n const target = event.target as Node;\n\n if (!portalRef.current?.contains(target) && !anchorEl?.contains(target)) {\n closePortal();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpenPortal, anchorEl, closePortal]);\n\n return { isOpenPortal, selectedDate, anchorEl, portalRef, openPortal, closePortal };\n};\n","import { MouseEvent } from 'react';\n\nimport { EngineConfig } from '@entities/calendar/model/types';\nimport { BaseCalendar } from '@entities/calendar/ui/BaseCalendar/BaseCalendar';\nimport { getTheme } from '@shared/lib/getThemed';\nimport { ErrorBoundary } from '@shared/ui/ErrorBoundary/ui/ErrorBoundary';\nimport { Portal } from '@shared/ui/Portal/ui/Portal';\n\nimport { useCalendarService } from '../../../shared/lib/useCalendarService';\nimport { useCalendarPortal } from '../lib/useCalendarPortal';\n\nexport const CalendarWithTodo = (config?: EngineConfig) => {\n const { service, viewModel } = useCalendarService(config, true);\n const portal = useCalendarPortal();\n\n const onDayClickDouble = (date: Date, event?: MouseEvent<HTMLDivElement>) => {\n if (!event) return;\n service.setSelectedDate(date);\n portal.openPortal(date, event.currentTarget);\n };\n\n const onDayClick = (date: Date, event?: MouseEvent<HTMLDivElement>) => {\n if (!event) return;\n service.setSelectedDate(date);\n };\n\n const handleAddTodo = (date: Date, text: string) => service.addTodo(date, text);\n\n const handleDeleteTodo = (date: Date, todo: string) => service.deleteTodo(date, todo);\n\n const handleGetTodo = (date: Date) => service.getTodosByDate(date);\n\n const themed = getTheme(config?.darkThemed);\n\n return (\n <ErrorBoundary>\n <article data-theme={themed}>\n <BaseCalendar {...viewModel} onDayClick={onDayClick} onDayClickDouble={onDayClickDouble} />\n\n <Portal\n id={`portal-${portal.selectedDate?.getTime()}`}\n isOpenPortal={portal.isOpenPortal}\n selectedDate={portal.selectedDate}\n anchorEl={portal.anchorEl}\n portalRef={portal.portalRef}\n onClose={portal.closePortal}\n onAddTodo={handleAddTodo}\n onDeleteTodo={handleDeleteTodo}\n getTodos={handleGetTodo}\n themed={themed}\n />\n </article>\n </ErrorBoundary>\n );\n};\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { validateDateInput } from '@entities/calendar/lib/helpers/validationInput';\nimport { DatepickerService } from '@entities/calendar/model/service';\nimport { BaseCalendarProps, EngineConfig } from '@entities/calendar/model/types';\nimport { MAX_INPUT_LENGTH } from '@shared/model/constants';\nimport { maskDate } from '@shared/ui/Input/lib/maskDate';\nimport { START_DATE_INDEX_ } from '@shared/ui/Input/model/constants';\n\nimport { ActiveInputType, INPUT_TYPE } from '../model/types';\n\nexport const useDateRangePicker = (config?: EngineConfig) => {\n const [_activeInput, setActiveInput] = useState<ActiveInputType>(INPUT_TYPE.START);\n const [localStartDate, setLocalStartDate] = useState<string>('');\n const [localEndDate, setLocalEndDate] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [isOpenCalendar, setIsOpenCalendar] = useState<boolean>(false);\n\n const service = useMemo(() => new DatepickerService(config), [config]);\n const [viewModel, setViewModel] = useState<BaseCalendarProps>(service.getViewModel());\n\n useEffect(() => {\n const unsubscribe = service.subscribe(() => {\n setViewModel(service.getViewModel());\n const range = service.getRange();\n\n if (range.start) {\n setLocalStartDate(maskDate(range.start.toLocaleDateString()));\n } else {\n setLocalStartDate('');\n }\n if (range.end) {\n setLocalEndDate(maskDate(range.end.toLocaleDateString()));\n } else {\n setLocalEndDate('');\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [service]);\n\n const range = service.getRange();\n\n const setStartDateDirect = (date: Date) => {\n service.setRangeStart?.(date);\n const currentEnd = service.getRangeEnd?.();\n\n if (currentEnd && date > currentEnd) {\n service.setRangeEnd?.(null);\n setLocalEndDate('');\n }\n service.notify?.();\n };\n\n const setEndDateDirect = (date: Date) => {\n const currentStart = service.getRangeStart?.();\n\n if (currentStart && date < currentStart) {\n setError('End date cannot be earlier than start date');\n\n return false;\n }\n service.setRangeEnd?.(date);\n service.notify?.();\n\n return true;\n };\n\n const handleManualInput = (value: string, inputType: ActiveInputType) => {\n const maskedValue = maskDate(value);\n\n if (inputType === INPUT_TYPE.START) {\n setLocalStartDate(maskedValue);\n } else {\n setLocalEndDate(maskedValue);\n }\n\n if (maskedValue.length === START_DATE_INDEX_) {\n setError('');\n if (inputType === INPUT_TYPE.START) {\n service.setRangeStart?.(null);\n } else {\n service.setRangeEnd?.(null);\n }\n service.notify?.();\n\n return;\n }\n\n const validationResult = validateDateInput(maskedValue);\n\n if (maskedValue.length < MAX_INPUT_LENGTH) {\n setError(validationResult.error);\n } else {\n if (validationResult.isValid && validationResult.date) {\n if (inputType === INPUT_TYPE.START) {\n setStartDateDirect(validationResult.date);\n setError('');\n if (!range.end) {\n setActiveInput(INPUT_TYPE.END);\n }\n } else {\n const success = setEndDateDirect(validationResult.date);\n\n if (success) {\n setError('');\n }\n }\n } else {\n setError(validationResult.error || 'Invalid date');\n }\n }\n };\n\n const handleInputFocus = (input: ActiveInputType) => {\n setActiveInput(input);\n setIsOpenCalendar(true);\n };\n\n const handleClear = (inputType?: ActiveInputType) => {\n if (inputType === INPUT_TYPE.START) {\n service.setRangeStart?.(null);\n setLocalStartDate('');\n } else if (inputType === INPUT_TYPE.END) {\n service.setRangeEnd?.(null);\n setLocalEndDate('');\n } else if (!inputType) {\n service.clearRange?.();\n setLocalStartDate('');\n setLocalEndDate('');\n setIsOpenCalendar(false);\n }\n setError('');\n service.notify?.();\n };\n\n const toggleCalendar = () => {\n setIsOpenCalendar((prev) => !prev);\n };\n\n const createInputConfig = (type: ActiveInputType, localValue: string, placeholder: string) => ({\n value: localValue,\n onChange: (val: string) => handleManualInput(val, type),\n onFocus: () => handleInputFocus(type),\n placeholder,\n onClear: () => handleClear(type),\n });\n\n return {\n viewModel,\n isOpenCalendar,\n start: createInputConfig(INPUT_TYPE.START, localStartDate, 'Start Date'),\n end: createInputConfig(INPUT_TYPE.END, localEndDate, 'End Date'),\n error,\n onClear: handleClear,\n toggleCalendar,\n };\n};\n","import { MouseEvent } from 'react';\n\nimport { EngineConfig } from '@entities/calendar/model/types';\nimport { BaseCalendar } from '@entities/calendar/ui/BaseCalendar/BaseCalendar';\nimport { getTheme } from '@shared/lib/getThemed';\nimport { ErrorBoundary } from '@shared/ui/ErrorBoundary/ui/ErrorBoundary';\nimport { Input } from '@shared/ui/Input/ui/Input';\n\nimport { useDateRangePicker } from '../lib/useDateRangePicker';\n\nimport styles from './RangeCalender.module.scss';\n\nexport const RangeCalender = (_config?: EngineConfig) => {\n const { start, end, viewModel, error, onClear, isOpenCalendar, toggleCalendar } =\n useDateRangePicker(_config);\n\n const handleClearAll = () => {\n onClear();\n };\n\n const handleDayClick = (date: Date, _event?: MouseEvent<HTMLDivElement>) => {\n viewModel.onDayRangeClick(date);\n };\n const themed = getTheme(_config?.darkThemed);\n\n return (\n <ErrorBoundary>\n <article data-theme={themed}>\n <div className={styles.container}>\n <div className={styles['container__inputs']}>\n <Input handleIsOpen={toggleCalendar} {...start} error={error} />\n <Input handleIsOpen={toggleCalendar} {...end} error={error} />\n </div>\n {isOpenCalendar && (\n <>\n <BaseCalendar {...viewModel} onDayClick={handleDayClick} />\n <button className={styles['container__clear']} type=\"button\" onClick={handleClearAll}>\n Clear All\n </button>\n </>\n )}\n </div>\n </article>\n </ErrorBoundary>\n );\n};\n"],"names":["_jsxs","_jsx","styles","_Fragment"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,3 @@
1
+ import type { StorybookConfig } from '@storybook/react-vite';
2
+ declare const config: StorybookConfig;
3
+ export default config;
@@ -0,0 +1,4 @@
1
+ import type { Preview } from '@storybook/react-vite';
2
+ import '@app/styles/index.scss';
3
+ declare const preview: Preview;
4
+ export default preview;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1 @@
1
+ export declare const BuggyComponent: () => import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const NextIcon: () => import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const PreviousIcon: () => import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export { NextIcon } from './NextIcon';
2
+ export { PreviousIcon } from './PreviousIcon';
@@ -0,0 +1,9 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ export declare abstract class BaseCalendarEngine implements CalendarEngine {
3
+ protected engine: CalendarEngine;
4
+ constructor(engine: CalendarEngine);
5
+ getNextDate(date: Date): Date;
6
+ getPreviousDate(date: Date): Date;
7
+ getNextYear(date: Date, newYear: number): Date;
8
+ abstract getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
9
+ }
@@ -0,0 +1,7 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ export declare class CalenderDecorator implements CalendarEngine {
3
+ getNextDate(date: Date): Date;
4
+ getPreviousDate(date: Date): Date;
5
+ getNextYear(date: Date, newYear: number): Date;
6
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
7
+ }
@@ -0,0 +1,7 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ import { BaseCalendarEngine } from './BaseCalendarEngine';
3
+ export declare class FromMondayDecorator extends BaseCalendarEngine {
4
+ private fromMonday;
5
+ constructor(engine: CalendarEngine, fromMonday: boolean);
6
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
7
+ }
@@ -0,0 +1,7 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ import { BaseCalendarEngine } from './BaseCalendarEngine';
3
+ export declare class HolidayDecorator extends BaseCalendarEngine {
4
+ private holidays;
5
+ constructor(engine: CalendarEngine, holidays: Date[]);
6
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
7
+ }
@@ -0,0 +1,12 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ import { BaseCalendarEngine } from './BaseCalendarEngine';
3
+ export declare class MinMaxDecorator extends BaseCalendarEngine {
4
+ private minDate;
5
+ private maxDate;
6
+ constructor(engine: CalendarEngine, minDate?: Date, maxDate?: Date);
7
+ private isDateInRange;
8
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
9
+ getNextDate(date: Date): Date;
10
+ getPreviousDate(date: Date): Date;
11
+ getNextYear(date: Date, newYear: number): Date;
12
+ }
@@ -0,0 +1,23 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ import { ActiveInputType } from '@features/rangeCalender/model/types';
3
+ import { BaseCalendarEngine } from './BaseCalendarEngine';
4
+ interface RangeInput {
5
+ rangeStart: Date | null;
6
+ rangeEnd: Date | null;
7
+ }
8
+ export declare class RangeDecorator extends BaseCalendarEngine {
9
+ private listeners;
10
+ private rangeStart;
11
+ private rangeEnd;
12
+ constructor(_config: CalendarEngine);
13
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
14
+ getRangeStart(): Date | null;
15
+ getRangeEnd(): Date | null;
16
+ setRangeStart(date: Date | null): void;
17
+ setRangeEnd(date: Date | null): void;
18
+ clearRange(inputType?: ActiveInputType): void;
19
+ handleRangeClick(date: Date): RangeInput;
20
+ private notify;
21
+ subscribe(listener: () => void): () => boolean;
22
+ }
23
+ export {};
@@ -0,0 +1,13 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ import { BaseCalendarEngine } from './BaseCalendarEngine';
3
+ export declare class TodoDecorator extends BaseCalendarEngine {
4
+ private STORAGE_KEY;
5
+ private storage;
6
+ constructor(engine: CalendarEngine);
7
+ private getDateKey;
8
+ private getAllTodos;
9
+ getTodosByDate(date: Date): string[];
10
+ addTodo(date: Date, todo: string): void;
11
+ deleteTodo(date: Date, todo: string): void;
12
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
13
+ }
@@ -0,0 +1,8 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ import { BaseCalendarEngine } from './BaseCalendarEngine';
3
+ export declare class ViewByWeekDecorator extends BaseCalendarEngine {
4
+ constructor(engine: CalendarEngine);
5
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
6
+ getNextDate(date: Date): Date;
7
+ getPreviousDate(date: Date): Date;
8
+ }
@@ -0,0 +1,6 @@
1
+ import { CalendarCellProps, CalendarEngine, SectionParams } from '@entities/calendar/model/types';
2
+ import { BaseCalendarEngine } from './BaseCalendarEngine';
3
+ export declare class WeekdayDecorator extends BaseCalendarEngine {
4
+ constructor(engine: CalendarEngine);
5
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
6
+ }
@@ -0,0 +1,4 @@
1
+ import { CalendarCellProps, SectionParams } from '@entities/calendar/model/types';
2
+ export declare const CELLS_LENGTH = 42;
3
+ export declare const MIN_CELLS_LENGTH = 28;
4
+ export declare const generateMonthArray: (currentDate: Date, params: SectionParams) => CalendarCellProps[];
@@ -0,0 +1 @@
1
+ export declare const generateYearArray: (minYear?: number, maxYear?: number) => number[];
@@ -0,0 +1 @@
1
+ export declare const isMinMaxValue: (date: Date, minDate: Date | null, maxDate: Date | null) => boolean;
@@ -0,0 +1 @@
1
+ export declare const isSameDates: (firstDate: Date, secondDate: Date) => boolean;
@@ -0,0 +1,4 @@
1
+ import { ValidationResult } from '@entities/calendar/model/types';
2
+ export declare const MAX_YEAR = 2050;
3
+ export declare const MIN_YEAR = 1970;
4
+ export declare const validateDateInput: (value: string) => ValidationResult;
@@ -0,0 +1,67 @@
1
+ import { CalendarCellProps, SectionParams } from '@entities/calendar/model/types';
2
+ import { BaseCalendarEngine } from '../decorators/BaseCalendarEngine';
3
+ export declare const MOCK_DATES: {
4
+ NOV_2025: Date;
5
+ NOV_RANGE_END: Date;
6
+ FEB_2026: Date;
7
+ MAR_2024: Date;
8
+ DEC_2025: Date;
9
+ FEB_2023: Date;
10
+ };
11
+ export declare const HOLIDAY_MOCK: CalendarCellProps[];
12
+ export declare const MOCK_PARAMS: SectionParams;
13
+ export declare const WEEKDAY_MOCK: CalendarCellProps[];
14
+ export declare const MIN_MAX_MOCK: CalendarCellProps[];
15
+ export declare const MOCK_SECTION_PARAMS: SectionParams;
16
+ export declare const FIXED_GRID: {
17
+ date: Date;
18
+ }[];
19
+ export declare const expectCalendarCellStructure: (cell: CalendarCellProps) => void;
20
+ export declare const YEAR_25 = 2025;
21
+ export declare const YEAR_26 = 2026;
22
+ export declare class MockEngine extends BaseCalendarEngine {
23
+ getDays(_currentDate: Date, _params: SectionParams): CalendarCellProps[];
24
+ }
25
+ export declare const BASE_CALENDAR_PROPS: {
26
+ fromMonday: boolean;
27
+ month: string;
28
+ year: number;
29
+ yearsArray: number[];
30
+ dateArray: {
31
+ id: string;
32
+ date: Date;
33
+ dayNumber: number;
34
+ isCurrentMonth: boolean;
35
+ }[];
36
+ canNext: boolean;
37
+ canPrev: boolean;
38
+ onClickNext: jest.Mock<any, any, any>;
39
+ onClickPrevious: jest.Mock<any, any, any>;
40
+ onDayClick: jest.Mock<any, any, any>;
41
+ onClickNextYear: jest.Mock<any, any, any>;
42
+ onDayRangeClick: jest.Mock<any, any, any>;
43
+ };
44
+ export declare const DAY_CELL = 15;
45
+ export declare const DATE: Date;
46
+ export declare const COLORS_CELL: {
47
+ red: string;
48
+ blue: string;
49
+ };
50
+ export declare const BASE_CELL_PROPS: {
51
+ id: string;
52
+ date: Date;
53
+ dayNumber: number;
54
+ isCurrentMonth: boolean;
55
+ isHoliday: boolean;
56
+ isSelected: boolean;
57
+ isInRange: boolean;
58
+ isWeekend: boolean;
59
+ isDisabled: boolean;
60
+ haveToDo: boolean;
61
+ };
62
+ export declare const MOCK_DATES_GRID: {
63
+ id: string;
64
+ date: Date;
65
+ dayNumber: number;
66
+ isCurrentMonth: boolean;
67
+ }[];
@@ -0,0 +1,7 @@
1
+ import { CalendarCellProps, Weekday } from './types';
2
+ export declare const FAKE_DATE: CalendarCellProps[];
3
+ export declare const WEEKDAY: Weekday[];
4
+ export declare const MONDAY_INDEX = 1;
5
+ export declare const SUNDAY_INDEX = 0;
6
+ export declare const SATURDAY_INDEX = 6;
7
+ export declare const WEEK_LENGHT = 7;
@@ -0,0 +1,35 @@
1
+ import { ActiveInputType } from '@features/rangeCalender/model/types';
2
+ import { BaseCalendarProps, EngineConfig } from './types';
3
+ export declare class DatepickerService {
4
+ private engine;
5
+ private viewDate;
6
+ private selectedDate;
7
+ private listeners;
8
+ private yearsArray;
9
+ constructor(_config?: EngineConfig);
10
+ private composeEngine;
11
+ subscribe(listener: () => void): () => boolean;
12
+ notify(): void;
13
+ next(): void;
14
+ prev(): void;
15
+ handleInputChange(value: string): import("./types").ValidationResult;
16
+ getInputValue(): string;
17
+ setSelectedDate(date: Date | null): void;
18
+ getSelectedDate(): Date | null;
19
+ private getNextYear;
20
+ getViewModel(): BaseCalendarProps;
21
+ private selectFirstDay;
22
+ handleRangeClick(value: string): import("./types").ValidationResult;
23
+ clearRange(inputType?: ActiveInputType): void;
24
+ getRange(): {
25
+ start: Date | null;
26
+ end: Date | null;
27
+ };
28
+ setRangeStart(date: Date | null): void;
29
+ setRangeEnd(date: Date | null): void;
30
+ getRangeStart(): Date | null;
31
+ getRangeEnd(): Date | null;
32
+ addTodo(date: Date, text: string): void;
33
+ getTodosByDate(date: Date): string[];
34
+ deleteTodo(date: Date, todo: string): void;
35
+ }
@@ -0,0 +1,7 @@
1
+ export declare class StorageService<T> {
2
+ private key;
3
+ private defaultValue;
4
+ constructor(key: string, defaultValue: T);
5
+ get(): T;
6
+ set(value: T): void;
7
+ }
@@ -0,0 +1,75 @@
1
+ import { MouseEvent } from 'react';
2
+ export interface CalendarCellProps {
3
+ id: string;
4
+ date: Date;
5
+ dayNumber: number;
6
+ isCurrentMonth: boolean;
7
+ isHoliday?: boolean;
8
+ isSelected?: boolean;
9
+ isInRange?: boolean;
10
+ isWeekend?: boolean;
11
+ backgroundColor?: string;
12
+ textColor?: string;
13
+ isDisabled?: boolean;
14
+ onClick?: (_date: Date, _event?: MouseEvent<HTMLDivElement>) => void;
15
+ onDayClickDouble?: (_date: Date, _event?: MouseEvent<HTMLDivElement>) => void;
16
+ haveToDo?: boolean;
17
+ }
18
+ export interface CalendarGridProps {
19
+ dateArray: CalendarCellProps[];
20
+ onDayClick: (_date: Date, _event?: MouseEvent<HTMLDivElement>) => void;
21
+ onDayClickDouble?: (_date: Date, _event?: MouseEvent<HTMLDivElement>) => void;
22
+ }
23
+ export interface CalenderHeaderProps {
24
+ fromMonday: boolean;
25
+ }
26
+ export interface Weekday {
27
+ id: string;
28
+ weekday: string;
29
+ }
30
+ export interface BaseCalendarProps {
31
+ dateArray: CalendarCellProps[];
32
+ fromMonday: boolean;
33
+ month: string;
34
+ year: number;
35
+ onClickNext: () => void;
36
+ onClickPrevious: () => void;
37
+ onDayClick: (_date: Date, event?: MouseEvent<HTMLDivElement>) => void;
38
+ onDayClickDouble?: (_date: Date, _event?: MouseEvent<HTMLDivElement>) => void;
39
+ canNext: boolean;
40
+ canPrev: boolean;
41
+ onDayRangeClick: (_date: Date) => void;
42
+ yearsArray: number[];
43
+ onClickNextYear: (_newYear: number) => void;
44
+ darkThemed?: boolean;
45
+ }
46
+ export interface SectionParams {
47
+ selectedDate: Date | null;
48
+ rangeStart: Date | null;
49
+ rangeEnd: Date | null;
50
+ fromMonday?: boolean;
51
+ }
52
+ export interface CalendarEngine {
53
+ getNextDate(date: Date): Date;
54
+ getPreviousDate(date: Date): Date;
55
+ getNextYear(date: Date, newYear: number): Date;
56
+ getDays(currentDate: Date, params: SectionParams): CalendarCellProps[];
57
+ }
58
+ export interface ValidationResult {
59
+ isValid: boolean;
60
+ error: string;
61
+ date: Date | null;
62
+ }
63
+ export interface EngineConfig {
64
+ holidays?: Date[];
65
+ withHoliday?: boolean;
66
+ withWeekend?: boolean;
67
+ fromMonday?: boolean;
68
+ minDate?: Date;
69
+ maxDate?: Date;
70
+ defaultDate?: Date;
71
+ viewByWeek?: boolean;
72
+ withRange?: boolean;
73
+ withTodo?: boolean;
74
+ darkThemed?: boolean;
75
+ }