A modern, functional React component for selecting weeks with comprehensive features including week numbers, date ranges, and flexible configuration options.
npm install react-week-picker-probash
npm install react-week-picker-pro prop-types
`
Or with yarn:
`bash
yarn add react-week-picker-pro prop-types
`
Note: prop-types is a peer dependency.
๐ Quick Start
`jsx
import React, { useState } from 'react';
import WeekPicker from 'react-week-picker-pro';
import 'react-week-picker-pro/dist/style.css';
function App() {
const [selectedWeek, setSelectedWeek] = useState();
const handleWeekSelect = (weekStart, weekEnd, weekNumber) => {
setSelectedWeek(weekStart);
console.log(Selected Week ${weekNumber}: ${weekStart.toDateString()} - ${weekEnd.toDateString()});
};
return (
Select a Week
selectedWeek={selectedWeek}
onWeekSelect={handleWeekSelect}
/>
);
}
export default App;
`
๐ฏ Live Demo
Check out the interactive demo to see all features in action!
๐ API Reference
$3
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| selectedWeek | Date | undefined | Currently selected week |
| onWeekSelect | function | undefined | Callback when a week is selected |
| minDate | Date | undefined | Minimum selectable date |
| maxDate | Date | undefined | Maximum selectable date |
| className | string | '' | Additional CSS class name |
| dateFormat | string | 'MMM dd, yyyy' | Date format for display |
| showWeekNumbers | boolean | true | Whether to show week numbers |
| firstDayOfWeek | 0 \| 1 | 1 | First day of week (0=Sunday, 1=Monday) |
$3
The onWeekSelect callback receives three parameters:
`jsx
const handleWeekSelect = (weekStart, weekEnd, weekNumber) => {
// weekStart: Date - Start of the selected week
// weekEnd: Date - End of the selected week
// weekNumber: number - ISO week number
};
`
๐จ Examples
$3
`jsx
import WeekPicker from 'react-week-picker-pro';
import 'react-week-picker-pro/dist/style.css';
selectedWeek={selectedWeek}
onWeekSelect={handleWeekSelect}
/>
`
$3
`jsx
selectedWeek={selectedWeek}
onWeekSelect={handleWeekSelect}
minDate={new Date(2024, 0, 1)} // From Jan 1, 2024
maxDate={new Date(2024, 11, 31)} // Until Dec 31, 2024
/>
`
$3
`jsx
selectedWeek={selectedWeek}
onWeekSelect={handleWeekSelect}
dateFormat="yyyy-MM-dd" // ISO format
/>
`
$3
`jsx
selectedWeek={selectedWeek}
onWeekSelect={handleWeekSelect}
firstDayOfWeek={0} // Sunday first
/>
`
$3
`jsx
selectedWeek={selectedWeek}
onWeekSelect={handleWeekSelect}
showWeekNumbers={false}
/>
`
$3
`jsx
const [selectedWeek, setSelectedWeek] = useState();
const selectCurrentWeek = () => {
setSelectedWeek(new Date());
};
const clearSelection = () => {
setSelectedWeek(undefined);
};
return (
selectedWeek={selectedWeek}
onWeekSelect={(start) => setSelectedWeek(start)}
/>
);
`
๐ ๏ธ Utility Functions
The library also exports useful utility functions:
`jsx
import {
getISOWeekNumber,
getWeekStart,
getWeekEnd,
formatDate,
isSameWeek
} from 'react-week-picker-pro';
// Get ISO week number for any date
const weekNum = getISOWeekNumber(new Date()); // e.g., 27
// Get week boundaries
const weekStart = getWeekStart(new Date(), 1); // Monday first
const weekEnd = getWeekEnd(new Date(), 1);
// Format dates
const formatted = formatDate(new Date(), 'yyyy-MM-dd'); // "2025-07-07"
// Compare weeks
const sameWeek = isSameWeek(date1, date2, 1); // boolean
`
๐จ Styling & Customization
$3
The component uses BEM-style CSS classes for easy customization:
`css
.week-picker { / Main container / }
.week-picker__header { / Month/year header / }
.week-picker__nav-button { / Navigation buttons / }
.week-picker__calendar { / Calendar grid / }
.week-picker__week-row { / Week rows / }
.week-picker__week-row--selected { / Selected week / }
.week-picker__day { / Individual days / }
.week-picker__day--today { / Today highlight / }
`
$3
`css
/ Custom theme /
.week-picker {
--primary-color: #3b82f6;
--selected-bg: #dbeafe;
--hover-bg: #f9fafb;
}
.week-picker__week-row--selected {
background: var(--selected-bg);
border-color: var(--primary-color);
}
.week-picker__nav-button:hover {
background: var(--hover-bg);
}
`
$3
The component includes built-in dark mode support via CSS media queries:
`css
@media (prefers-color-scheme: dark) {
.week-picker {
background: #1f2937;
color: #f9fafb;
}
}
`
๐ฑ Responsive Design
The component is fully responsive and adapts to different screen sizes:
- Desktop: Full-featured layout with hover effects
- Tablet: Optimized spacing and touch targets
- Mobile: Compact layout with larger touch areas
โฟ Accessibility
- Keyboard Navigation: Full keyboard support
- Screen Readers: ARIA labels and semantic HTML
- Focus Management: Clear focus indicators
- WCAG Compliance: Meets accessibility standards
$3
- Arrow Keys: Navigate between months
- Enter/Space: Select week
- Tab: Navigate between interactive elements
๐ Browser Support
- Chrome 60+
- Firefox 60+
- Safari 12+
- Edge 79+
๐ฆ Bundle Size
- Minified: ~8KB
- Gzipped: ~3KB
- Zero dependencies (except peer dependencies)
๐งช Testing
The library includes comprehensive tests:
`bash
Run tests
npm test
Run tests with coverage
npm run test:coverage
Run tests in watch mode
npm run test:watch
`
๐ง Development
$3
- Node.js 18+
- npm or yarn
$3
`bash
Clone the repository
git clone https://github.com/Developer-Nijat/react-week-picker-pro.git
cd react-week-picker-pro
Install dependencies
npm install
Start development server
npm run dev
Build library
npm run build
Run tests
npm test
`
$3
`
react-week-picker-pro/
โโโ lib/ # Library source code
โ โโโ components/ # React components
โ โโโ utils/ # Utility functions
โ โโโ styles/ # CSS styles
โโโ src/ # Demo application
โโโ tests/ # Test files
โโโ dist/ # Built library
โโโ docs/ # Documentation
``