mehdi-akbari-calendar 0.1.1 → 0.1.4

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 (43) hide show
  1. package/dist/components/Calendar/Calendar.d.ts +1 -0
  2. package/dist/components/Calendar/Calendar.d.ts.map +1 -0
  3. package/dist/components/Calendar/Calendar.js +30 -0
  4. package/dist/components/internal/CalendarHeader.d.ts +1 -0
  5. package/dist/components/internal/CalendarHeader.d.ts.map +1 -0
  6. package/dist/components/internal/CalendarHeader.js +10 -0
  7. package/dist/components/internal/DayCell.d.ts +1 -0
  8. package/dist/components/internal/DayCell.d.ts.map +1 -0
  9. package/dist/components/internal/DayCell.js +16 -0
  10. package/dist/components/internal/MonthPickerView.d.ts +1 -0
  11. package/dist/components/internal/MonthPickerView.d.ts.map +1 -0
  12. package/dist/components/internal/MonthPickerView.js +10 -0
  13. package/dist/components/internal/MonthView.d.ts +1 -0
  14. package/dist/components/internal/MonthView.d.ts.map +1 -0
  15. package/dist/components/internal/MonthView.js +7 -0
  16. package/dist/components/internal/YearView.d.ts +1 -0
  17. package/dist/components/internal/YearView.d.ts.map +1 -0
  18. package/dist/components/internal/YearView.js +14 -0
  19. package/dist/hooks/useCalendar.d.ts +1 -0
  20. package/dist/hooks/useCalendar.d.ts.map +1 -0
  21. package/dist/hooks/useCalendar.js +139 -0
  22. package/dist/index.cjs +19 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +7 -18
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.react.cjs +486 -0
  29. package/dist/index.react.cjs.map +1 -0
  30. package/dist/index.react.d.ts +3 -0
  31. package/dist/index.react.d.ts.map +1 -0
  32. package/dist/index.react.js +5 -0
  33. package/dist/index.react.js.map +1 -0
  34. package/dist/types/index.d.ts +1 -0
  35. package/dist/types/index.d.ts.map +1 -0
  36. package/dist/types/index.js +2 -0
  37. package/dist/utils/dateAdapter.d.ts +1 -0
  38. package/dist/utils/dateAdapter.d.ts.map +1 -0
  39. package/dist/utils/dateAdapter.js +45 -0
  40. package/package.json +29 -28
  41. package/dist/index.mjs +0 -1
  42. package/dist/index.mjs.map +0 -1
  43. package/dist/react.d.ts +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Calendar/Calendar.tsx","../src/hooks/useCalendar.ts","../src/utils/dateAdapter.ts","../src/components/internal/CalendarHeader.tsx","../src/components/internal/DayCell.tsx","../src/components/internal/MonthView.tsx","../src/components/internal/MonthPickerView.tsx","../src/components/internal/YearView.tsx"],"sourcesContent":["\"use client\";\r\nimport React from 'react';\r\nimport clsx from 'clsx';\r\nimport { useCalendar } from '../../hooks/useCalendar';\r\nimport { CalendarHeader } from '../internal/CalendarHeader';\r\nimport { MonthView } from '../internal/MonthView';\r\nimport { MonthPickerView } from '../internal/MonthPickerView';\r\nimport { YearView } from '../internal/YearView';\r\n\r\n// ✅ مرحله ۱: ایمپورت تایپ‌های اصلی از منبع جدید و مرکزی\r\nimport type { DateRange } from '../../types';\r\n\r\n// ✅ مرحله ۲: ایمپورت تایپ‌های مخصوص هوک از خود فایل هوک\r\nimport type { UseCalendarOptions } from '../../hooks/useCalendar';\r\n\r\n// ✅ مرحله ۳: این خط حالا به درستی کار می‌کند چون DateRange از بالا ایمپورت شده است\r\nexport type { DateRange };\r\n\r\nconst CheckCircleIcon = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path>\r\n <polyline points=\"22 4 12 14.01 9 11.01\"></polyline>\r\n </svg>\r\n);\r\n\r\nexport interface PersianCalendarProps extends Omit<UseCalendarOptions, 'range'> {\r\n onDateSelect?: (date: Date | null) => void;\r\n range?: DateRange;\r\n className?: string;\r\n}\r\n\r\nexport const PersianCalendar: React.FC<PersianCalendarProps> = ({ \r\n initialDate, \r\n onDateSelect,\r\n minYear,\r\n maxYear,\r\n range,\r\n className\r\n}) => {\r\n const {\r\n viewMode,\r\n daysOfMonth,\r\n monthsOfYear,\r\n yearsOfDecade,\r\n headerTitle,\r\n calendarType,\r\n weekDays,\r\n dateFns,\r\n toggleCalendarType,\r\n goToNext,\r\n goToPrev,\r\n handleSelectDay,\r\n handleSelectMonth,\r\n handleSelectYear,\r\n handleHeaderClick,\r\n isDateSelected,\r\n isInRange,\r\n isRangeStart,\r\n isRangeEnd,\r\n isSameMonthAsCurrent,\r\n isToday,\r\n isCurrentMonth,\r\n isCurrentYear,\r\n isYearDisabled,\r\n } = useCalendar({ initialDate, minYear, maxYear, range });\r\n\r\n const onDayClick = (date: Date) => {\r\n handleSelectDay(date);\r\n if (onDateSelect) {\r\n onDateSelect(date);\r\n }\r\n };\r\n\r\n const renderView = () => {\r\n switch (viewMode) {\r\n case 'year':\r\n return <YearView years={yearsOfDecade} onSelectYear={handleSelectYear} isCurrentYear={isCurrentYear} isYearDisabled={isYearDisabled} />;\r\n case 'month':\r\n return <MonthPickerView months={monthsOfYear} onSelectMonth={handleSelectMonth} isCurrentMonth={isCurrentMonth} dateFns={dateFns} />;\r\n case 'day':\r\n default:\r\n return (\r\n <MonthView\r\n daysOfMonth={daysOfMonth}\r\n weekDays={weekDays}\r\n dateFns={dateFns}\r\n onSelectDate={onDayClick}\r\n isDateSelected={isDateSelected}\r\n isInRange={isInRange}\r\n isRangeStart={isRangeStart}\r\n isRangeEnd={isRangeEnd}\r\n isSameMonthAsCurrent={isSameMonthAsCurrent}\r\n isToday={isToday}\r\n />\r\n );\r\n }\r\n };\r\n\r\n return (\r\n <div className={clsx(\"prc-container\", className)} dir={calendarType === 'jalali' ? 'rtl' : 'ltr'}>\r\n <CalendarHeader\r\n title={headerTitle}\r\n calendarType={calendarType}\r\n onToggleCalendarType={toggleCalendarType}\r\n onNext={goToNext}\r\n onPrev={goToPrev}\r\n onTitleClick={handleHeaderClick}\r\n />\r\n <div className=\"prc-view-container\">\r\n {renderView()}\r\n </div>\r\n \r\n <footer className=\"prc-footer\">\r\n <span>𝓟𝓸𝔀𝓮𝓻𝓮𝓭 𝓫𝔂 𝓜𝓮𝓱𝓭𝓲 𝓐𝓴𝓫𝓪𝓻𝓲</span>\r\n <CheckCircleIcon />\r\n </footer>\r\n </div>\r\n );\r\n};","\"use client\";\r\nimport { useState, useMemo, useCallback } from 'react';\r\n\r\n// ✅ مرحله ۱: ایمپورت توابع از dateAdapter\r\nimport { getDateFunctions, getWeekDays } from '../utils/dateAdapter';\r\n\r\n// ✅ مرحله ۲: ایمپورت تمام تایپ‌های مورد نیاز از فایل مرکزی تایپ‌ها\r\nimport type { CalendarViewMode, DateRange, CalendarType } from '../types';\r\n\r\n// ⛔️ تعریف‌های محلی تایپ‌ها حذف شدند تا از یک منبع واحد استفاده شود.\r\n// export type CalendarViewMode = 'day' | 'month' | 'year';\r\n// export interface DateRange {\r\n// from: Date | null;\r\n// to: Date | null;\r\n// }\r\n\r\nexport interface UseCalendarOptions {\r\n initialDate?: Date;\r\n minYear?: number;\r\n maxYear?: number;\r\n initialCalendarType?: CalendarType;\r\n range?: DateRange;\r\n}\r\n\r\nexport const useCalendar = ({ \r\n initialDate = new Date(),\r\n minYear = 1300,\r\n maxYear = 1405,\r\n initialCalendarType = 'jalali',\r\n range\r\n}: UseCalendarOptions = {}) => {\r\n \r\n const [calendarType, setCalendarType] = useState<CalendarType>(initialCalendarType);\r\n const dateFns = useMemo(() => getDateFunctions(calendarType), [calendarType]);\r\n\r\n const effectiveMinYear = calendarType === 'gregorian' && minYear === 1300 ? 1920 : minYear;\r\n const effectiveMaxYear = calendarType === 'gregorian' && maxYear === 1405 ? 2030 : maxYear;\r\n\r\n const [viewMode, setViewMode] = useState<CalendarViewMode>('day');\r\n const [currentDate, setCurrentDate] = useState(dateFns.startOfMonth(initialDate));\r\n const [selectedDate, setSelectedDate] = useState<Date | null>(initialDate);\r\n\r\n const daysOfMonth = useMemo(() => {\r\n if (viewMode !== 'day') return [];\r\n const monthStart = dateFns.startOfMonth(currentDate);\r\n const monthEnd = dateFns.endOfMonth(currentDate);\r\n const startDate = dateFns.startOfWeek(monthStart);\r\n const endDate = dateFns.endOfWeek(monthEnd);\r\n return dateFns.eachDayOfInterval({ start: startDate, end: endDate });\r\n }, [currentDate, viewMode, dateFns]);\r\n\r\n const monthsOfYear = useMemo(() => {\r\n if (viewMode !== 'month') return [];\r\n return dateFns.eachMonthOfInterval({\r\n start: dateFns.startOfYear(currentDate),\r\n end: dateFns.endOfYear(currentDate),\r\n });\r\n }, [currentDate, viewMode, dateFns]);\r\n \r\n const yearsOfDecade = useMemo(() => {\r\n if (viewMode !== 'year') return [];\r\n const year = dateFns.getYear(currentDate);\r\n const decadeStartYear = Math.floor(year / 10) * 10;\r\n const years = [];\r\n for (let i = 0; i < 12; i++) {\r\n years.push(decadeStartYear + i - 1);\r\n }\r\n return years;\r\n }, [currentDate, viewMode, dateFns]);\r\n\r\n const goToNext = useCallback(() => {\r\n if (viewMode === 'day') setCurrentDate(prev => dateFns.addMonths(prev, 1));\r\n if (viewMode === 'month') setCurrentDate(prev => dateFns.addYears(prev, 1));\r\n if (viewMode === 'year') setCurrentDate(prev => dateFns.addYears(prev, 10));\r\n }, [viewMode, dateFns]);\r\n\r\n const goToPrev = useCallback(() => {\r\n if (viewMode === 'day') setCurrentDate(prev => dateFns.subMonths(prev, 1));\r\n if (viewMode === 'month') setCurrentDate(prev => dateFns.subYears(prev, 1));\r\n if (viewMode === 'year') setCurrentDate(prev => dateFns.subYears(prev, 10));\r\n }, [viewMode, dateFns]);\r\n\r\n const handleSelectDay = useCallback((date: Date) => {\r\n setSelectedDate(date);\r\n if (!dateFns.isSameMonth(currentDate, date)) {\r\n setCurrentDate(dateFns.startOfMonth(date));\r\n }\r\n }, [currentDate, dateFns]);\r\n\r\n const handleSelectMonth = useCallback((monthIndex: number) => {\r\n setCurrentDate(prev => dateFns.setMonth(prev, monthIndex));\r\n setViewMode('day');\r\n }, [dateFns]);\r\n\r\n const handleSelectYear = useCallback((year: number) => {\r\n setCurrentDate(prev => dateFns.setYear(prev, year));\r\n setViewMode('month');\r\n }, [dateFns]);\r\n \r\n const handleHeaderClick = useCallback(() => {\r\n if (viewMode === 'day') setViewMode('month');\r\n if (viewMode === 'month') setViewMode('year');\r\n }, [viewMode]);\r\n\r\n const toggleCalendarType = useCallback(() => {\r\n setCalendarType(prev => prev === 'jalali' ? 'gregorian' : 'jalali');\r\n setViewMode('day');\r\n }, []);\r\n\r\n const isDateSelected = useCallback((date: Date): boolean => {\r\n if (range) {\r\n return !!((range.from && dateFns.isSameDay(date, range.from)) || \r\n (range.to && dateFns.isSameDay(date, range.to)));\r\n }\r\n return selectedDate ? dateFns.isSameDay(date, selectedDate) : false;\r\n }, [selectedDate, range, dateFns]);\r\n\r\n const isInRange = useCallback((date: Date): boolean => {\r\n if (!range?.from || !range?.to) return false;\r\n return dateFns.isWithinInterval(date, { start: range.from, end: range.to });\r\n }, [range, dateFns]);\r\n\r\n const isRangeStart = useCallback((date: Date): boolean => {\r\n return !!(range?.from && dateFns.isSameDay(date, range.from));\r\n }, [range, dateFns]);\r\n\r\n const isRangeEnd = useCallback((date: Date): boolean => {\r\n return !!(range?.to && dateFns.isSameDay(date, range.to));\r\n }, [range, dateFns]);\r\n\r\n const headerTitle = useMemo(() => {\r\n if (viewMode === 'day') return dateFns.format(currentDate, 'LLLL yyyy');\r\n if (viewMode === 'month') return dateFns.format(currentDate, 'yyyy');\r\n if (viewMode === 'year') {\r\n const start = yearsOfDecade[0];\r\n const end = yearsOfDecade[yearsOfDecade.length - 1];\r\n return `${end} - ${start}`;\r\n }\r\n return '';\r\n }, [currentDate, viewMode, yearsOfDecade, dateFns]);\r\n \r\n return {\r\n viewMode,\r\n currentDate,\r\n selectedDate,\r\n daysOfMonth,\r\n monthsOfYear,\r\n yearsOfDecade,\r\n headerTitle,\r\n calendarType,\r\n weekDays: getWeekDays(calendarType),\r\n dateFns,\r\n toggleCalendarType,\r\n goToNext,\r\n goToPrev,\r\n handleSelectDay,\r\n handleSelectMonth,\r\n handleSelectYear,\r\n handleHeaderClick,\r\n isSameMonthAsCurrent: (date: Date) => dateFns.isSameMonth(currentDate, date),\r\n isDateSelected,\r\n isInRange,\r\n isRangeStart,\r\n isRangeEnd,\r\n isToday: (date: Date) => dateFns.isSameDay(date, new Date()),\r\n isCurrentMonth: (monthIndex: number) => dateFns.getMonth(new Date()) === monthIndex && dateFns.getYear(new Date()) === dateFns.getYear(currentDate),\r\n isCurrentYear: (year: number) => dateFns.getYear(new Date()) === year,\r\n isYearDisabled: (year: number) => year > effectiveMaxYear || year < effectiveMinYear,\r\n };\r\n};","import * as jdf from 'date-fns-jalali';\r\nimport * as df from 'date-fns';\r\nimport { faIR } from 'date-fns-jalali/locale';\r\n\r\n// ✅ تایپ از فایل مرکزی تایپ‌ها وارد شده است\r\nimport type { CalendarType } from '../types';\r\n\r\n// ⛔️ تعریف محلی تایپ حذف شده است\r\n// export type CalendarType = 'jalali' | 'gregorian';\r\n\r\nexport interface DateFunctions {\r\n startOfMonth: (date: Date) => Date;\r\n endOfMonth: (date: Date) => Date;\r\n startOfWeek: (date: Date) => Date;\r\n endOfWeek: (date: Date) => Date;\r\n eachDayOfInterval: (interval: { start: Date; end: Date }) => Date[];\r\n isSameMonth: (dateLeft: Date, dateRight: Date) => boolean;\r\n isSameDay: (dateLeft: Date, dateRight: Date) => boolean;\r\n format: (date: Date, formatStr: string) => string;\r\n addMonths: (date: Date, amount: number) => Date;\r\n subMonths: (date: Date, amount: number) => Date;\r\n getYear: (date: Date) => number;\r\n setYear: (date: Date, year: number) => Date;\r\n getMonth: (date: Date) => number;\r\n setMonth: (date: Date, month: number) => Date;\r\n startOfYear: (date: Date) => Date;\r\n eachMonthOfInterval: (interval: { start: Date; end: Date }) => Date[];\r\n endOfYear: (date: Date) => Date;\r\n addYears: (date: Date, amount: number) => Date;\r\n subYears: (date: Date, amount: number) => Date;\r\n isDate: (value: any) => boolean;\r\n isWithinInterval: (date: Date, interval: { start: Date; end: Date }) => boolean;\r\n}\r\n\r\nexport const getDateFunctions = (type: CalendarType): DateFunctions => {\r\n const isJalali = type === 'jalali';\r\n const lib: any = isJalali ? jdf : df;\r\n\r\n return {\r\n startOfMonth: lib.startOfMonth,\r\n endOfMonth: lib.endOfMonth,\r\n startOfWeek: (date: Date) => lib.startOfWeek(date, { locale: isJalali ? faIR : undefined, weekStartsOn: isJalali ? 6 : 1 }),\r\n endOfWeek: (date: Date) => lib.endOfWeek(date, { locale: isJalali ? faIR : undefined, weekStartsOn: isJalali ? 6 : 1 }),\r\n eachDayOfInterval: lib.eachDayOfInterval,\r\n isSameMonth: lib.isSameMonth,\r\n isSameDay: lib.isSameDay,\r\n format: (date: Date, formatStr: string) => {\r\n try {\r\n return lib.format(date, formatStr, { locale: isJalali ? faIR : undefined });\r\n } catch {\r\n return '';\r\n }\r\n },\r\n addMonths: lib.addMonths,\r\n subMonths: lib.subMonths,\r\n getYear: lib.getYear,\r\n setYear: lib.setYear,\r\n getMonth: lib.getMonth,\r\n setMonth: lib.setMonth,\r\n startOfYear: lib.startOfYear,\r\n eachMonthOfInterval: lib.eachMonthOfInterval,\r\n endOfYear: lib.endOfYear,\r\n addYears: lib.addYears,\r\n subYears: lib.subYears,\r\n isDate: lib.isDate,\r\n isWithinInterval: lib.isWithinInterval,\r\n };\r\n};\r\n\r\nexport const getWeekDays = (type: CalendarType) => {\r\n if (type === 'jalali') {\r\n return ['ش', 'ی', 'د', 'س', 'چ', 'پ', 'ج'];\r\n } else {\r\n return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\r\n }\r\n};","import React from 'react';\r\n\r\n// آیکون خورشید برای تقویم شمسی\r\nconst SunIcon = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"4\"></circle>\r\n <path d=\"M12 2v2\"></path>\r\n <path d=\"M12 20v2\"></path>\r\n <path d=\"m4.93 4.93 1.41 1.41\"></path>\r\n <path d=\"m17.66 17.66 1.41 1.41\"></path>\r\n <path d=\"M2 12h2\"></path>\r\n <path d=\"M20 12h2\"></path>\r\n <path d=\"m6.34 17.66-1.41 1.41\"></path>\r\n <path d=\"m19.07 4.93-1.41 1.41\"></path>\r\n </svg>\r\n);\r\n\r\n// آیکون کره زمین برای تقویم میلادی\r\nconst GlobeIcon = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\r\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line>\r\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"></path>\r\n </svg>\r\n);\r\n\r\nconst ChevronRightIcon = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>\r\n);\r\n\r\nconst ChevronLeftIcon = () => (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>\r\n);\r\n\r\ninterface CalendarHeaderProps {\r\n title: string;\r\n calendarType: 'jalali' | 'gregorian';\r\n onToggleCalendarType: () => void;\r\n onNext: () => void;\r\n onPrev: () => void;\r\n onTitleClick: () => void;\r\n}\r\n\r\nexport const CalendarHeader: React.FC<CalendarHeaderProps> = ({\r\n title,\r\n calendarType,\r\n onToggleCalendarType,\r\n onNext,\r\n onPrev,\r\n onTitleClick,\r\n}) => {\r\n return (\r\n <div className=\"calendar-header\">\r\n {/* دکمه تغییر تقویم با آیکون */}\r\n <button \r\n type=\"button\" \r\n className={`calendar-header__toggle-btn ${calendarType}`}\r\n onClick={onToggleCalendarType}\r\n title={calendarType === 'jalali' ? \"تغییر به تقویم میلادی\" : \"Switch to Persian Calendar\"}\r\n >\r\n {calendarType === 'jalali' ? <SunIcon /> : <GlobeIcon />}\r\n </button>\r\n\r\n <div className=\"calendar-header__controls\">\r\n <button type=\"button\" className=\"calendar-header__nav-button\" onClick={onPrev} aria-label=\"قبلی\">\r\n <ChevronRightIcon />\r\n </button>\r\n <button type=\"button\" className=\"calendar-header__title\" onClick={onTitleClick}>\r\n {title}\r\n </button>\r\n <button type=\"button\" className=\"calendar-header__nav-button\" onClick={onNext} aria-label=\"بعدی\">\r\n <ChevronLeftIcon />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n};","import React from 'react';\r\nimport clsx from 'clsx';\r\nimport { DateFunctions } from '../../utils/dateAdapter';\r\n\r\nexport interface DayCellProps {\r\n date: Date;\r\n isCurrentMonth: boolean;\r\n isSelected: boolean;\r\n isToday: boolean;\r\n // ✅ پراپ‌های جدید بازه\r\n isInRange?: boolean;\r\n isRangeStart?: boolean;\r\n isRangeEnd?: boolean;\r\n isDisabled?: boolean;\r\n onClick: (date: Date) => void;\r\n dateFns: DateFunctions;\r\n}\r\n\r\nexport const DayCell: React.FC<DayCellProps> = ({\r\n date,\r\n isCurrentMonth,\r\n isSelected,\r\n isToday,\r\n isInRange = false,\r\n isRangeStart = false,\r\n isRangeEnd = false,\r\n isDisabled = false,\r\n onClick,\r\n dateFns,\r\n}) => {\r\n const dayNumber = dateFns.format(date, 'd');\r\n\r\n const cellClassName = clsx('day-cell', {\r\n 'day-cell--not-current-month': !isCurrentMonth,\r\n 'day-cell--is-today': isToday,\r\n 'day-cell--is-selected': isSelected,\r\n 'day-cell--is-disabled': isDisabled,\r\n // ✅ کلاس‌های جدید\r\n 'day-cell--in-range': isInRange,\r\n 'day-cell--range-start': isRangeStart,\r\n 'day-cell--range-end': isRangeEnd,\r\n });\r\n\r\n return (\r\n <div className={cellClassName}>\r\n <button\r\n type=\"button\"\r\n className=\"day-cell__button\"\r\n onClick={() => !isDisabled && onClick(date)}\r\n disabled={isDisabled}\r\n >\r\n {dayNumber}\r\n </button>\r\n </div>\r\n );\r\n};","import React from 'react';\r\nimport { DayCell } from './DayCell';\r\nimport { DateFunctions } from '../../utils/dateAdapter';\r\n\r\ninterface MonthViewProps {\r\n daysOfMonth: Date[];\r\n weekDays: string[];\r\n dateFns: DateFunctions;\r\n onSelectDate: (date: Date) => void;\r\n isDateSelected: (date: Date) => boolean;\r\n // ✅ پراپ‌های جدید\r\n isInRange: (date: Date) => boolean;\r\n isRangeStart: (date: Date) => boolean;\r\n isRangeEnd: (date: Date) => boolean;\r\n isSameMonthAsCurrent: (date: Date) => boolean;\r\n isToday: (date: Date) => boolean;\r\n}\r\n\r\nexport const MonthView: React.FC<MonthViewProps> = ({\r\n daysOfMonth,\r\n weekDays,\r\n dateFns,\r\n onSelectDate,\r\n isDateSelected,\r\n isInRange,\r\n isRangeStart,\r\n isRangeEnd,\r\n isSameMonthAsCurrent,\r\n isToday,\r\n}) => {\r\n return (\r\n <div className=\"month-view\">\r\n <div className=\"month-view__weekdays\">\r\n {weekDays.map(dayName => (\r\n <div key={dayName} className=\"month-view__weekday-name\">\r\n {dayName}\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"month-view__days-grid\">\r\n {daysOfMonth.map(day => (\r\n <DayCell\r\n key={day.toISOString()}\r\n date={day}\r\n onClick={onSelectDate}\r\n isSelected={isDateSelected(day)}\r\n // ✅ پاس دادن مقادیر محاسباتی\r\n isInRange={isInRange(day)}\r\n isRangeStart={isRangeStart(day)}\r\n isRangeEnd={isRangeEnd(day)}\r\n isCurrentMonth={isSameMonthAsCurrent(day)}\r\n isToday={isToday(day)}\r\n dateFns={dateFns}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};","import React from 'react';\r\nimport clsx from 'clsx';\r\nimport { DateFunctions } from '../../utils/dateAdapter';\r\n\r\ninterface MonthPickerViewProps {\r\n months: Date[];\r\n onSelectMonth: (monthIndex: number) => void;\r\n isCurrentMonth: (monthIndex: number) => boolean;\r\n dateFns: DateFunctions; // ✅ دریافت توابع تاریخ\r\n}\r\n\r\nexport const MonthPickerView: React.FC<MonthPickerViewProps> = ({ \r\n months, onSelectMonth, isCurrentMonth, dateFns \r\n}) => {\r\n return (\r\n <div className=\"picker-view month-picker-view\">\r\n {months.map((monthDate, index) => {\r\n const monthClassName = clsx('picker-item', {\r\n 'picker-item--is-current': isCurrentMonth(index),\r\n });\r\n \r\n return (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n className={monthClassName}\r\n onClick={() => onSelectMonth(index)}\r\n >\r\n {dateFns.format(monthDate, 'LLLL')}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n );\r\n};","\"use client\";\r\n\r\nimport React from 'react';\r\nimport clsx from 'clsx';\r\n\r\ninterface YearViewProps {\r\n years: number[];\r\n onSelectYear: (year: number) => void;\r\n isCurrentYear: (year: number) => boolean;\r\n isYearDisabled: (year: number) => boolean;\r\n}\r\n\r\n// ✅ اطمینان حاصل کنید که کلمه export دقیقاً قبل از const قرار دارد\r\nexport const YearView: React.FC<YearViewProps> = ({ \r\n years, \r\n onSelectYear, \r\n isCurrentYear, \r\n isYearDisabled \r\n}) => {\r\n return (\r\n <div className=\"picker-view year-picker-view\">\r\n {years.map(year => {\r\n const isDisabled = isYearDisabled(year);\r\n const yearClassName = clsx('picker-item', {\r\n 'picker-item--is-current': isCurrentYear(year),\r\n 'picker-item--is-disabled': isDisabled,\r\n });\r\n\r\n return (\r\n <button\r\n key={year}\r\n type=\"button\"\r\n className={yearClassName}\r\n onClick={() => !isDisabled && onSelectYear(year)}\r\n disabled={isDisabled}\r\n aria-current={isCurrentYear(year) ? 'true' : undefined}\r\n >\r\n {year}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n );\r\n};"],"mappings":"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","names":["clsx","jsx","jsx","jsxs","clsx","jsx","clsx","jsx","jsx","jsxs","clsx"]}
@@ -7,3 +7,4 @@ export interface DateRange {
7
7
  }
8
8
  export type CalendarType = 'jalali' | 'gregorian';
9
9
  export type CalendarViewMode = 'day' | 'month' | 'year';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;AAClD,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ // src/types/index.ts
2
+ export {};
@@ -33,3 +33,4 @@ export interface DateFunctions {
33
33
  }
34
34
  export declare const getDateFunctions: (type: CalendarType) => DateFunctions;
35
35
  export declare const getWeekDays: (type: CalendarType) => string[];
36
+ //# sourceMappingURL=dateAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateAdapter.d.ts","sourceRoot":"","sources":["../../src/utils/dateAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK7C,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,iBAAiB,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,KAAK,IAAI,EAAE,CAAC;IACpE,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC;IAC1D,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC;IACxD,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC,mBAAmB,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,KAAK,IAAI,EAAE,CAAC;IACtE,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IAChC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC;CACjF;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,YAAY,KAAG,aAiCrD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,YAAY,aAM7C,CAAC"}
@@ -0,0 +1,45 @@
1
+ import * as jdf from 'date-fns-jalali';
2
+ import * as df from 'date-fns';
3
+ import { faIR } from 'date-fns-jalali/locale';
4
+ export const getDateFunctions = (type) => {
5
+ const isJalali = type === 'jalali';
6
+ const lib = isJalali ? jdf : df;
7
+ return {
8
+ startOfMonth: lib.startOfMonth,
9
+ endOfMonth: lib.endOfMonth,
10
+ startOfWeek: (date) => lib.startOfWeek(date, { locale: isJalali ? faIR : undefined, weekStartsOn: isJalali ? 6 : 1 }),
11
+ endOfWeek: (date) => lib.endOfWeek(date, { locale: isJalali ? faIR : undefined, weekStartsOn: isJalali ? 6 : 1 }),
12
+ eachDayOfInterval: lib.eachDayOfInterval,
13
+ isSameMonth: lib.isSameMonth,
14
+ isSameDay: lib.isSameDay,
15
+ format: (date, formatStr) => {
16
+ try {
17
+ return lib.format(date, formatStr, { locale: isJalali ? faIR : undefined });
18
+ }
19
+ catch {
20
+ return '';
21
+ }
22
+ },
23
+ addMonths: lib.addMonths,
24
+ subMonths: lib.subMonths,
25
+ getYear: lib.getYear,
26
+ setYear: lib.setYear,
27
+ getMonth: lib.getMonth,
28
+ setMonth: lib.setMonth,
29
+ startOfYear: lib.startOfYear,
30
+ eachMonthOfInterval: lib.eachMonthOfInterval,
31
+ endOfYear: lib.endOfYear,
32
+ addYears: lib.addYears,
33
+ subYears: lib.subYears,
34
+ isDate: lib.isDate,
35
+ isWithinInterval: lib.isWithinInterval,
36
+ };
37
+ };
38
+ export const getWeekDays = (type) => {
39
+ if (type === 'jalali') {
40
+ return ['ش', 'ی', 'د', 'س', 'چ', 'پ', 'ج'];
41
+ }
42
+ else {
43
+ return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
44
+ }
45
+ };
package/package.json CHANGED
@@ -1,37 +1,45 @@
1
1
  {
2
2
  "name": "mehdi-akbari-calendar",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "A professional and customizable Persian (Jalali) calendar component for React.",
5
+ "type": "module",
5
6
  "main": "./dist/index.js",
6
7
  "module": "./dist/index.mjs",
7
8
  "types": "./dist/index.d.ts",
8
9
  "files": [
9
- "dist",
10
- "README.md",
11
- "LICENSE"
10
+ "dist"
12
11
  ],
13
12
  "exports": {
14
13
  ".": {
15
- "types": "./dist/index.d.ts",
16
- "import": "./dist/index.mjs",
17
- "require": "./dist/index.js"
14
+ "import": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.mjs"
17
+ },
18
+ "require": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ }
18
22
  },
19
23
  "./react": {
20
-
21
- "types": "./dist/index.react.d.ts",
22
- "import": "./dist/index.react.mjs",
23
- "require": "./dist/index.react.js"
24
+ "import": {
25
+ "types": "./dist/index.react.d.ts",
26
+ "default": "./dist/index.react.mjs"
27
+ },
28
+ "require": {
29
+ "types": "./dist/index.react.d.ts",
30
+ "default": "./dist/index.react.js"
31
+ }
24
32
  },
25
33
  "./styles.css": "./dist/styles.css"
26
34
  },
27
- "scripts": {
28
- "clean": "npx rimraf dist",
29
- "build:js": "tsup",
30
- "build:types": "tsc --emitDeclarationOnly --declaration",
31
- "build": "npm run clean && npm run build:js && npm run build:types && copyfiles -u 1 src/styles.css dist",
32
- "dev": "tsup --watch",
33
- "prepublishOnly": "npm run build"
34
- },
35
+ "scripts": {
36
+ "clean": "npx rimraf dist",
37
+ "build:js": "tsup",
38
+ "build:types": "tsc --project tsconfig.json",
39
+ "build": "npm run clean && npm run build:js && npm run build:types && copyfiles -u 1 src/styles.css dist",
40
+ "dev": "tsup --watch",
41
+ "prepublishOnly": "npm run build"
42
+ },
35
43
  "peerDependencies": {
36
44
  "react": ">=18",
37
45
  "react-dom": ">=18"
@@ -47,6 +55,7 @@
47
55
  "copyfiles": "^2.4.1",
48
56
  "react": "^18.3.1",
49
57
  "react-dom": "^18.3.1",
58
+ "rimraf": "^5.0.7",
50
59
  "tsup": "^8.1.0",
51
60
  "typescript": "^5.4.5"
52
61
  },
@@ -59,13 +68,5 @@
59
68
  "ui-component"
60
69
  ],
61
70
  "author": "Mehdi Akbari",
62
- "license": "MIT",
63
- "homepage": "https://github.com/your-username/persian-react-calendar#readme",
64
- "repository": {
65
- "type": "git",
66
- "url": "git+https://github.com/your-username/persian-react-calendar.git"
67
- },
68
- "bugs": {
69
- "url": "https://github.com/your-username/persian-react-calendar/issues"
70
- }
71
+ "license": "MIT"
71
72
  }
package/dist/index.mjs DELETED
@@ -1 +0,0 @@
1
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/react.d.ts DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * This is the entry point for React components.
3
- * It exports the main PersianCalendar component and its related types.
4
- */
5
- export { PersianCalendar, type PersianCalendarProps } from "./components/Calendar/Calendar";
6
- export * from "./types";