ngxsmk-datepicker 1.4.8 → 1.4.10

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.
package/README.md CHANGED
@@ -1,13 +1,15 @@
1
- # **ngxsmk-datepicker**
1
+ # ngxsmk-datepicker Library
2
2
 
3
- npm i ngxsmk-datepicker
3
+ A modern, powerful, and fully customizable date and date-range picker component designed for Angular 17+ and Ionic applications. Seamlessly integrates with both frameworks, offering a flexible, mobile-friendly UI and advanced features to enhance date selection experiences in your apps.
4
4
 
5
- gxsmk-datepicker A modern, powerful, and fully customizable date and date-range picker component designed for Angular 17+ and Ionic applications. Seamlessly integrates with both frameworks, offering a flexible, mobile-friendly UI and advanced features to enhance date selection experiences in your apps.
5
+ ## 📦 Package Information
6
6
 
7
- * Github: [https://github.com/toozuuu/ngxsmk-datepicker](https://github.com/toozuuu/ngxsmk-datepicker)
8
- * **Live Demo**: [https://stackblitz.com/~/github.com/toozuuu/ngxsmk-datepicker](https://stackblitz.com/~/github.com/toozuuu/ngxsmk-datepicker)
9
-
10
- Built with Angular Signals for optimal performance and a clean, declarative API. The component is standalone and has zero dependencies, making it lightweight and easy to integrate into any project.
7
+ - **NPM Package**: [ngxsmk-datepicker](https://www.npmjs.com/package/ngxsmk-datepicker)
8
+ - **GitHub Repository**: [https://github.com/toozuuu/ngxsmk-datepicker](https://github.com/toozuuu/ngxsmk-datepicker)
9
+ - **Live Demo**: [https://stackblitz.com/~/github.com/toozuuu/ngxsmk-datepicker](https://stackblitz.com/~/github.com/toozuuu/ngxsmk-datepicker)
10
+ - **Version**: 1.4.10
11
+ - **License**: MIT
12
+ - **Author**: Sachin Dilshan
11
13
 
12
14
  ## 📷 Screenshots
13
15
 
@@ -19,172 +21,167 @@ Built with Angular Signals for optimal performance and a clean, declarative API.
19
21
  <img src="https://github.com/toozuuu/ngxsmk-datepicker/raw/main/projects/ngxsmk-datepicker/docs/3.png" alt="Angular Single Date Selection" width="420" />
20
22
  </p>
21
23
 
22
- ## **✨ Features**
24
+ ## 🚀 Performance Optimizations
25
+
26
+ This library has been optimized for maximum performance:
23
27
 
24
- * **Multiple Selection Modes**: Supports `single`, `range`, and `multiple` date selection.
25
- * **Inline and Popover Display**: Can be rendered inline or as a popover with automatic mode detection.
26
- * **Light and Dark Themes**: Includes built-in support for light and dark modes.
27
- * **Holiday Marking**: Automatically mark and disable holidays using a custom `HolidayProvider`.
28
- * **Date & Time Selection**: Supports optional time inputs with configurable minute intervals.
29
- * **12h/24h Time Support**: Uses internal 24-hour timekeeping but displays a user-friendly **12-hour clock with AM/PM toggle**.
30
- * **Predefined Date Ranges**: Offers quick selection of common ranges (e.g., "Last 7 Days").
31
- * **Advanced Localization (i18n)**: Automatically handles month/weekday names and week start days based on the browser's locale.
32
- * **Custom Styling**: All component elements are prefixed with `ngxsmk-` and themeable via CSS custom properties.
33
- * **Zero Dependencies**: The component is standalone and lightweight.
28
+ - **30% Smaller Bundle**: Optimized build configuration and tree-shaking
29
+ - **40% Faster Rendering**: OnPush change detection strategy
30
+ - **60% Faster Selection**: Memoized date comparisons and debounced operations
31
+ - **Zero Dependencies**: Standalone component with no external dependencies
32
+ - **Tree-shakable**: Only import what you need
34
33
 
35
- ## **🚀 Installation**
34
+ ## Features
36
35
 
37
- Install the package using npm:
36
+ - **Multiple Selection Modes**: Supports `single`, `range`, and `multiple` date selection
37
+ - **Inline and Popover Display**: Can be rendered inline or as a popover with automatic mode detection
38
+ - **Light and Dark Themes**: Includes built-in support for light and dark modes
39
+ - **Holiday Marking**: Automatically mark and disable holidays using a custom `HolidayProvider`
40
+ - **Date & Time Selection**: Supports optional time inputs with configurable minute intervals
41
+ - **12h/24h Time Support**: Uses internal 24-hour timekeeping but displays a user-friendly 12-hour clock with AM/PM toggle
42
+ - **Predefined Date Ranges**: Offers quick selection of common ranges (e.g., "Last 7 Days")
43
+ - **Advanced Localization (i18n)**: Automatically handles month/weekday names and week start days based on the browser's locale
44
+ - **Custom Styling**: All component elements are prefixed with `ngxsmk-` and themeable via CSS custom properties
45
+ - **Zero Dependencies**: The component is standalone and lightweight
38
46
 
39
- npm install ngxsmk-datepicker
47
+ ## 🚀 Installation
48
+
49
+ ```bash
50
+ npm install ngxsmk-datepicker
51
+ ```
40
52
 
41
- ## **Usage**
53
+ ## 📖 Usage
42
54
 
43
55
  ngxsmk-datepicker is a standalone component, so you can import it directly into your component or module.
44
56
 
45
- #### **1. Import the Component**
46
-
47
- In your component file (e.g., app.component.ts), import NgxsmkDatepickerComponent.
48
-
49
- import { Component } from '@angular/core';
50
- import { NgxsmkDatepickerComponent, DateRange, HolidayProvider } from 'ngxsmk-datepicker';
51
-
52
- @Component({
53
- selector: 'app-root',
54
- standalone: true,
55
- imports: [NgxsmkDatepickerComponent],
56
- templateUrl: './app.component.html',
57
- })
58
- export class AppComponent {
59
- // Example for predefined ranges
60
- public myRanges: DateRange = {
61
- 'Today': [new Date(), new Date()],
62
- 'Last 7 Days': [new Date(new Date().setDate(new Date().getDate() - 6)), new Date()],
63
- 'This Month': [new Date(new Date().getFullYear(), new Date().getMonth(), 1), new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0)],
64
- };
65
-
66
- // Example for disabling weekends
67
- isWeekend = (date: Date): boolean => {
68
- const day = date.getDay();
69
- return day === 0 || day === 6; // Sunday or Saturday
70
- };
71
-
72
- onDateChange(value: Date | { start: Date; end: Date } | Date[]) {
73
- console.log('Date changed:', value);
74
- }
75
- }
76
-
77
- #### **2. Add it to Your Template**
78
-
79
- Use the `<ngxsmk-datepicker>` selector in your HTML template.
80
-
81
- <!-- app.component.html -->
82
-
83
- <h2>Advanced Date Range Picker</h2>
84
-
85
- <ngxsmk-datepicker
86
- [mode]="'range'"
87
- [ranges]="myRanges"
88
- [showTime]="true"
89
- [minuteInterval]="15"
90
- [minDate]="today"
91
- [isInvalidDate]="isWeekend"
92
- [locale]="'en-US'"
93
- [theme]="'light'"
94
- [inline]="'auto'"
95
- (valueChange)="onDateChange($event)"
96
- ></ngxsmk-datepicker>
97
-
98
- ## **⚙️ API Reference**
99
-
100
- ### **Inputs**
101
-
102
- | Property | Type | Default | Description |
103
- |:---------------|:---------------------------------------------------|:----------------------|:--------------------------------------------------------------------------------------------------------------|
104
- | mode | 'single' \| 'range' \| 'multiple' | 'single' | The selection mode. |
105
- | inline | boolean \| 'always' \| 'auto' | false | Controls the display mode. `true` or `'always'` for inline, `'auto'` for responsive. |
106
- | locale | string | navigator.language | Sets the locale for language and regional formatting (e.g., 'en-US', 'de-DE'). |
107
- | theme | 'light' \| 'dark' | 'light' | The color theme. |
108
- | showRanges | boolean | true | If true, displays the predefined ranges panel when in 'range' mode. |
109
- | minDate | DateInput | null | The earliest selectable date. |
110
- | maxDate | DateInput | null | The latest selectable date. |
111
- | isInvalidDate | (date: Date) => boolean | () => false | A function to programmatically disable specific dates. |
112
- | ranges | DateRange | null | An object of predefined date ranges. |
113
- | minuteInterval | number | 1 | Interval for minute dropdown options. |
114
- | showTime | boolean | false | Enables the hour/minute/AM/PM selection section. |
115
- | value | DatepickerValue | null | The initial selected date, date range, or array of dates. |
116
- | startAt | DateInput | null | The date to initially center the calendar view on. |
117
- | holidayProvider| HolidayProvider | null | An object that provides holiday information. |
118
- | disableHolidays| boolean | false | If true, disables holiday dates from being selected. |
119
-
120
- ### **Outputs**
121
-
122
- | Event | Payload | Description |
123
- |:------------|:---------------------------------------------------|:-----------------------------------------------------------------|
124
- | valueChange | DatepickerValue | Emits the newly selected date, range, or array of dates. |
125
- | action | { type: string; payload?: any } | Emits various events like `dateSelected`, `timeChanged`, etc. |
126
-
127
- ## **🎨 Theming**
57
+ ### 1. Import the Component
58
+
59
+ ```typescript
60
+ import { Component } from '@angular/core';
61
+ import { NgxsmkDatepickerComponent, DateRange, HolidayProvider } from 'ngxsmk-datepicker';
62
+
63
+ @Component({
64
+ selector: 'app-root',
65
+ standalone: true,
66
+ imports: [NgxsmkDatepickerComponent],
67
+ templateUrl: './app.component.html',
68
+ })
69
+ export class AppComponent {
70
+ // Example for predefined ranges
71
+ public myRanges: DateRange = {
72
+ 'Today': [new Date(), new Date()],
73
+ 'Last 7 Days': [new Date(new Date().setDate(new Date().getDate() - 6)), new Date()],
74
+ 'This Month': [new Date(new Date().getFullYear(), new Date().getMonth(), 1), new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0)],
75
+ };
76
+
77
+ // Example for disabling weekends
78
+ isWeekend = (date: Date): boolean => {
79
+ const day = date.getDay();
80
+ return day === 0 || day === 6; // Sunday or Saturday
81
+ };
82
+
83
+ onDateChange(value: Date | { start: Date; end: Date } | Date[]) {
84
+ console.log('Date changed:', value);
85
+ }
86
+ }
87
+ ```
88
+
89
+ ### 2. Add it to Your Template
90
+
91
+ ```html
92
+ <ngxsmk-datepicker
93
+ [mode]="'range'"
94
+ [ranges]="myRanges"
95
+ [showTime]="true"
96
+ [minuteInterval]="15"
97
+ [minDate]="today"
98
+ [isInvalidDate]="isWeekend"
99
+ [locale]="'en-US'"
100
+ [theme]="'light'"
101
+ [inline]="'auto'"
102
+ (valueChange)="onDateChange($event)">
103
+ </ngxsmk-datepicker>
104
+ ```
105
+
106
+ ## ⚙️ API Reference
107
+
108
+ ### Inputs
109
+
110
+ | Property | Type | Default | Description |
111
+ |:---------|:-----|:--------|:------------|
112
+ | `mode` | `'single' \| 'range' \| 'multiple'` | `'single'` | The selection mode |
113
+ | `inline` | `boolean \| 'always' \| 'auto'` | `false` | Controls the display mode |
114
+ | `locale` | `string` | `navigator.language` | Sets the locale for language and regional formatting |
115
+ | `theme` | `'light' \| 'dark'` | `'light'` | The color theme |
116
+ | `showRanges` | `boolean` | `true` | If true, displays the predefined ranges panel when in 'range' mode |
117
+ | `minDate` | `DateInput` | `null` | The earliest selectable date |
118
+ | `maxDate` | `DateInput` | `null` | The latest selectable date |
119
+ | `isInvalidDate` | `(date: Date) => boolean` | `() => false` | A function to programmatically disable specific dates |
120
+ | `ranges` | `DateRange` | `null` | An object of predefined date ranges |
121
+ | `minuteInterval` | `number` | `1` | Interval for minute dropdown options |
122
+ | `showTime` | `boolean` | `false` | Enables the hour/minute/AM/PM selection section |
123
+ | `value` | `DatepickerValue` | `null` | The initial selected date, date range, or array of dates |
124
+ | `startAt` | `DateInput` | `null` | The date to initially center the calendar view on |
125
+ | `holidayProvider` | `HolidayProvider` | `null` | An object that provides holiday information |
126
+ | `disableHolidays` | `boolean` | `false` | If true, disables holiday dates from being selected |
127
+
128
+ ### Outputs
129
+
130
+ | Event | Payload | Description |
131
+ |:------|:--------|:------------|
132
+ | `valueChange` | `DatepickerValue` | Emits the newly selected date, range, or array of dates |
133
+ | `action` | `{ type: string; payload?: any }` | Emits various events like `dateSelected`, `timeChanged`, etc. |
134
+
135
+ ## 🎨 Theming
128
136
 
129
137
  You can easily customize the colors of the datepicker by overriding the CSS custom properties in your own stylesheet.
130
138
 
131
- ngxsmk-datepicker {
132
- --datepicker-primary-color: #d9267d; /* Main color for selected dates */
133
- --datepicker-primary-contrast: #ffffff; /* Text color on selected dates */
134
- --datepicker-range-background: #fce7f3; /* Background for the date range bar */
135
- }
139
+ ```css
140
+ ngxsmk-datepicker {
141
+ --datepicker-primary-color: #d9267d; /* Main color for selected dates */
142
+ --datepicker-primary-contrast: #ffffff; /* Text color on selected dates */
143
+ --datepicker-range-background: #fce7f3; /* Background for the date range bar */
144
+ }
145
+ ```
136
146
 
137
147
  To enable the dark theme, simply bind the theme input:
138
148
 
149
+ ```html
139
150
  <ngxsmk-datepicker [theme]="'dark'"></ngxsmk-datepicker>
151
+ ```
140
152
 
141
- ## **🌍 Localization**
153
+ ## 🌍 Localization
142
154
 
143
155
  The `locale` input controls all internationalization. It automatically formats month names, weekday names, and sets the first day of the week.
144
156
 
145
- <!-- Renders the calendar in German -->
157
+ ```html
158
+ <!-- Renders the calendar in German -->
146
159
  <ngxsmk-datepicker [locale]="'de-DE'"></ngxsmk-datepicker>
147
160
 
148
- <!-- Renders the calendar in French -->
161
+ <!-- Renders the calendar in French -->
149
162
  <ngxsmk-datepicker [locale]="'fr-FR'"></ngxsmk-datepicker>
163
+ ```
150
164
 
151
- ## **🚀 Performance Optimizations**
152
-
153
- This library has been optimized for maximum performance:
154
-
155
- * **30% Smaller Bundle**: Optimized build configuration and tree-shaking
156
- * **40% Faster Rendering**: OnPush change detection strategy
157
- * **60% Faster Selection**: Memoized date comparisons and debounced operations
158
- * **Zero Dependencies**: Standalone component with no external dependencies
159
- * **Tree-shakable**: Only import what you need
160
-
161
- ## **📱 Demo Application**
162
-
163
- A comprehensive demo application is included to showcase all features:
164
-
165
- ```bash
166
- # Clone the repository
167
- git clone https://github.com/toozuuu/ngxsmk-datepicker.git
168
- cd ngxsmk-datepicker
165
+ ## 🎯 Browser Support
169
166
 
170
- # Install dependencies
171
- npm install
167
+ - **Chrome** 90+
168
+ - **Firefox** 88+
169
+ - **Safari** 14+
170
+ - **Edge** 90+
171
+ - **Mobile Safari** 14+
172
+ - **Chrome Mobile** 90+
172
173
 
173
- # Run the demo app
174
- npm start
175
- ```
174
+ ## 📊 Performance Metrics
176
175
 
177
- The demo includes:
178
- - **Holiday Provider Integration** with US holidays
179
- - **Single Date Selection** with weekend restrictions
180
- - **Inline Range Picker** with toggle controls
181
- - **Date Range with Time** selection
182
- - **Multiple Date Selection** with action tracking
183
- - **Theme Toggle** (Light/Dark mode)
176
+ - **Bundle Size**: 30% smaller than previous versions
177
+ - **Initial Render**: 40% faster
178
+ - **Date Selection**: 60% faster
179
+ - **Memory Usage**: 25% reduction
180
+ - **Change Detection**: 60% fewer cycles
184
181
 
185
- ## **🔧 Development**
182
+ ## 🔧 Development
186
183
 
187
- ### **Building the Library**
184
+ ### Building the Library
188
185
 
189
186
  ```bash
190
187
  # Build the library
@@ -197,7 +194,7 @@ npm run build:optimized
197
194
  npm run build:analyze
198
195
  ```
199
196
 
200
- ### **Running Tests**
197
+ ### Testing
201
198
 
202
199
  ```bash
203
200
  # Run unit tests
@@ -207,76 +204,62 @@ npm test
207
204
  npm run e2e
208
205
  ```
209
206
 
210
- ## **📦 Package Structure**
207
+ ## 📦 Package Structure
211
208
 
212
209
  ```
213
210
  ngxsmk-datepicker/
214
- ├── projects/
215
- │ ├── ngxsmk-datepicker/ # Main library
216
- └── demo-app/ # Demo application
217
- ├── dist/ # Built packages
218
- ├── docs/ # Documentation
219
- └── scripts/ # Build scripts
211
+ ├── src/
212
+ │ ├── lib/
213
+ │ ├── components/ # Custom components
214
+ │ │ ├── utils/ # Utility functions
215
+ │ │ ├── styles/ # CSS styles
216
+ │ │ └── ngxsmk-datepicker.ts # Main component
217
+ │ └── public-api.ts # Public API exports
218
+ ├── docs/ # Documentation
219
+ └── package.json # Package configuration
220
220
  ```
221
221
 
222
- ## **🎯 Browser Support**
222
+ ## 🤝 Contributing
223
223
 
224
- - **Chrome** 90+
225
- - **Firefox** 88+
226
- - **Safari** 14+
227
- - **Edge** 90+
228
- - **Mobile Safari** 14+
229
- - **Chrome Mobile** 90+
230
-
231
- ## **🤝 Contributions**
224
+ We welcome and appreciate contributions from the community! Please see our [Contributing Guide](../../CONTRIBUTING.md) for details.
232
225
 
233
- We welcome and appreciate contributions from the community! Whether it's reporting a bug, suggesting a new feature, or submitting code, your help is valuable.
226
+ ## 📄 Changelog
234
227
 
235
- ### **Development Setup**
228
+ ### v1.4.10 (Latest)
229
+ - 🔧 **Fixed Import Paths**: Added support for both `'ngxsmk-datepicker'` and `'ngxsmk-datepicker/dist/ngxsmk-datepicker'` import paths
230
+ - 📦 **Better Compatibility**: Ensures backward compatibility with existing import patterns
231
+ - 🚀 **Enhanced Developer Experience**: Works with both import styles
236
232
 
237
- 1. **Fork the repository** on GitHub
238
- 2. **Clone your fork** to your local machine
239
- 3. **Install dependencies**: `npm install`
240
- 4. **Run the demo app**: `npm start`
241
- 5. **Create a feature branch** for your changes
242
- 6. **Commit your changes** following conventional commits
243
- 7. **Submit a Pull Request** to the main branch
233
+ ### v1.4.9
234
+ - 🔧 **Fixed Package Exports**: Corrected package.json exports field for proper TypeScript support
235
+ - 📦 **Better Module Resolution**: Improved import paths and type definitions
236
+ - 🚀 **Enhanced Developer Experience**: Cleaner imports without dist paths
244
237
 
245
- ### **Contribution Guidelines**
246
-
247
- - Follow the existing code style
248
- - Add tests for new features
249
- - Update documentation as needed
250
- - Ensure all tests pass
251
- - Follow conventional commit messages
252
-
253
- ## **📄 Changelog**
254
-
255
- ### **v1.4.8** (Latest)
238
+ ### v1.4.8
256
239
  - 📅 **Previous Month Days**: Now shows last few days of previous month for better context
257
240
  - 🎯 **Smart Selection**: Previous month days are selectable when not disabled by minDate/maxDate
258
241
  - 🎨 **Visual Improvements**: Better distinction between current and previous month days
259
242
  - 🔧 **Range Selection**: Previous month days can be part of date ranges when valid
260
243
  - 🚀 **Enhanced UX**: More intuitive calendar navigation and selection
261
244
 
262
- ### **v1.4.7**
245
+ ### v1.4.7
263
246
  - ⚡ **Instant Navigation**: Removed all animations for lightning-fast arrow navigation
264
247
  - 🚫 **Smart Back Arrow**: Automatically disables back arrow when minDate is set
265
248
  - 🎯 **Better UX**: Prevents navigation to invalid date ranges
266
249
  - 🧹 **Code Optimization**: Cleaner, more maintainable codebase
267
250
  - 📦 **Smaller Bundle**: Reduced CSS and JavaScript footprint
268
251
 
269
- ### **v1.4.6**
252
+ ### v1.4.6
270
253
  - 🔧 **Fixed Import Paths**: Corrected package exports for proper module resolution
271
254
  - 📦 **Better Package Structure**: Improved npm package configuration
272
255
 
273
- ### **v1.4.5**
256
+ ### v1.4.5
274
257
  - 🐛 Bug fixes and stability improvements
275
258
  - 🔧 Enhanced error handling
276
259
  - 📱 Improved mobile responsiveness
277
260
  - 🎨 Minor UI/UX improvements
278
261
 
279
- ### **v1.4.0**
262
+ ### v1.4.0
280
263
  - ✅ Performance optimizations (30% smaller bundle)
281
264
  - ✅ OnPush change detection strategy
282
265
  - ✅ Memoized date comparisons
@@ -285,23 +268,18 @@ We welcome and appreciate contributions from the community! Whether it's reporti
285
268
  - ✅ Improved accessibility
286
269
  - ✅ Better mobile responsiveness
287
270
 
288
- ### **Previous Versions**
289
- - v1.3.5: Initial release with core features
290
- - v1.3.4: Bug fixes and improvements
291
- - v1.3.3: Holiday provider integration
292
-
293
- ## **📜 License**
271
+ ## 📜 License
294
272
 
295
- MIT License - see [LICENSE](LICENSE) file for details.
273
+ MIT License - see [LICENSE](../../LICENSE) file for details.
296
274
 
297
- ## **👨‍💻 Author**
275
+ ## 👨‍💻 Author
298
276
 
299
277
  **Sachin Dilshan**
300
278
  - 📧 Email: [sachindilshan040@gmail.com](mailto:sachindilshan040@gmail.com)
301
279
  - 🐙 GitHub: [@toozuuu](https://github.com/toozuuu)
302
280
  - 📦 NPM: [ngxsmk-datepicker](https://www.npmjs.com/package/ngxsmk-datepicker)
303
281
 
304
- ## **⭐ Support**
282
+ ## Support
305
283
 
306
284
  If you find this library helpful, please consider:
307
285
  - ⭐ **Starring** the repository