ngxsmk-datepicker 1.4.5 โ†’ 1.4.6

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sachin Dilshan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,15 +1,13 @@
1
- # ngxsmk-datepicker Library
1
+ # **ngxsmk-datepicker**
2
2
 
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.
3
+ npm i ngxsmk-datepicker
4
4
 
5
- ## ๐Ÿ“ฆ Package Information
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.
6
6
 
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.5
11
- - **License**: MIT
12
- - **Author**: Sachin Dilshan
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.
13
11
 
14
12
  ## ๐Ÿ“ท Screenshots
15
13
 
@@ -21,167 +19,172 @@ A modern, powerful, and fully customizable date and date-range picker component
21
19
  <img src="https://github.com/toozuuu/ngxsmk-datepicker/raw/main/projects/ngxsmk-datepicker/docs/3.png" alt="Angular Single Date Selection" width="420" />
22
20
  </p>
23
21
 
24
- ## ๐Ÿš€ Performance Optimizations
25
-
26
- This library has been optimized for maximum performance:
27
-
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
22
+ ## **โœจ Features**
33
23
 
34
- ## โœจ Features
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.
35
34
 
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
35
+ ## **๐Ÿš€ Installation**
46
36
 
47
- ## ๐Ÿš€ Installation
37
+ Install the package using npm:
48
38
 
49
- ```bash
50
- npm install ngxsmk-datepicker
51
- ```
39
+ npm install ngxsmk-datepicker
52
40
 
53
- ## ๐Ÿ“– Usage
41
+ ## **Usage**
54
42
 
55
43
  ngxsmk-datepicker is a standalone component, so you can import it directly into your component or module.
56
44
 
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
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**
136
128
 
137
129
  You can easily customize the colors of the datepicker by overriding the CSS custom properties in your own stylesheet.
138
130
 
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
- ```
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
+ }
146
136
 
147
137
  To enable the dark theme, simply bind the theme input:
148
138
 
149
- ```html
150
139
  <ngxsmk-datepicker [theme]="'dark'"></ngxsmk-datepicker>
151
- ```
152
140
 
153
- ## ๐ŸŒ Localization
141
+ ## **๐ŸŒ Localization**
154
142
 
155
143
  The `locale` input controls all internationalization. It automatically formats month names, weekday names, and sets the first day of the week.
156
144
 
157
- ```html
158
- <!-- Renders the calendar in German -->
145
+ <!-- Renders the calendar in German -->
159
146
  <ngxsmk-datepicker [locale]="'de-DE'"></ngxsmk-datepicker>
160
147
 
161
- <!-- Renders the calendar in French -->
148
+ <!-- Renders the calendar in French -->
162
149
  <ngxsmk-datepicker [locale]="'fr-FR'"></ngxsmk-datepicker>
163
- ```
164
150
 
165
- ## ๐ŸŽฏ Browser Support
151
+ ## **๐Ÿš€ Performance Optimizations**
166
152
 
167
- - **Chrome** 90+
168
- - **Firefox** 88+
169
- - **Safari** 14+
170
- - **Edge** 90+
171
- - **Mobile Safari** 14+
172
- - **Chrome Mobile** 90+
153
+ This library has been optimized for maximum performance:
173
154
 
174
- ## ๐Ÿ“Š Performance Metrics
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
175
160
 
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
161
+ ## **๐Ÿ“ฑ Demo Application**
181
162
 
182
- ## ๐Ÿ”ง Development
163
+ A comprehensive demo application is included to showcase all features:
183
164
 
184
- ### Building the Library
165
+ ```bash
166
+ # Clone the repository
167
+ git clone https://github.com/toozuuu/ngxsmk-datepicker.git
168
+ cd ngxsmk-datepicker
169
+
170
+ # Install dependencies
171
+ npm install
172
+
173
+ # Run the demo app
174
+ npm start
175
+ ```
176
+
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)
184
+
185
+ ## **๐Ÿ”ง Development**
186
+
187
+ ### **Building the Library**
185
188
 
186
189
  ```bash
187
190
  # Build the library
@@ -194,7 +197,7 @@ npm run build:optimized
194
197
  npm run build:analyze
195
198
  ```
196
199
 
197
- ### Testing
200
+ ### **Running Tests**
198
201
 
199
202
  ```bash
200
203
  # Run unit tests
@@ -204,34 +207,65 @@ npm test
204
207
  npm run e2e
205
208
  ```
206
209
 
207
- ## ๐Ÿ“ฆ Package Structure
210
+ ## **๐Ÿ“ฆ Package Structure**
208
211
 
209
212
  ```
210
213
  ngxsmk-datepicker/
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
214
+ โ”œโ”€โ”€ projects/
215
+ โ”‚ โ”œโ”€โ”€ ngxsmk-datepicker/ # Main library
216
+ โ”‚ โ””โ”€โ”€ demo-app/ # Demo application
217
+ โ”œโ”€โ”€ dist/ # Built packages
218
+ โ”œโ”€โ”€ docs/ # Documentation
219
+ โ””โ”€โ”€ scripts/ # Build scripts
220
220
  ```
221
221
 
222
- ## ๐Ÿค Contributing
222
+ ## **๐ŸŽฏ Browser Support**
223
+
224
+ - **Chrome** 90+
225
+ - **Firefox** 88+
226
+ - **Safari** 14+
227
+ - **Edge** 90+
228
+ - **Mobile Safari** 14+
229
+ - **Chrome Mobile** 90+
230
+
231
+ ## **๐Ÿค Contributions**
232
+
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.
223
234
 
224
- We welcome and appreciate contributions from the community! Please see our [Contributing Guide](../../CONTRIBUTING.md) for details.
235
+ ### **Development Setup**
225
236
 
226
- ## ๐Ÿ“„ Changelog
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
227
244
 
228
- ### v1.4.5 (Latest)
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.6** (Latest)
256
+ - โšก **Instant Navigation**: Removed all animations for lightning-fast arrow navigation
257
+ - ๐Ÿšซ **Smart Back Arrow**: Automatically disables back arrow when minDate is set
258
+ - ๐ŸŽฏ **Better UX**: Prevents navigation to invalid date ranges
259
+ - ๐Ÿงน **Code Optimization**: Cleaner, more maintainable codebase
260
+ - ๐Ÿ“ฆ **Smaller Bundle**: Reduced CSS and JavaScript footprint
261
+
262
+ ### **v1.4.5**
229
263
  - ๐Ÿ› Bug fixes and stability improvements
230
264
  - ๐Ÿ”ง Enhanced error handling
231
265
  - ๐Ÿ“ฑ Improved mobile responsiveness
232
266
  - ๐ŸŽจ Minor UI/UX improvements
233
267
 
234
- ### v1.4.0
268
+ ### **v1.4.0**
235
269
  - โœ… Performance optimizations (30% smaller bundle)
236
270
  - โœ… OnPush change detection strategy
237
271
  - โœ… Memoized date comparisons
@@ -240,18 +274,23 @@ We welcome and appreciate contributions from the community! Please see our [Cont
240
274
  - โœ… Improved accessibility
241
275
  - โœ… Better mobile responsiveness
242
276
 
243
- ## ๐Ÿ“œ License
277
+ ### **Previous Versions**
278
+ - v1.3.5: Initial release with core features
279
+ - v1.3.4: Bug fixes and improvements
280
+ - v1.3.3: Holiday provider integration
281
+
282
+ ## **๐Ÿ“œ License**
244
283
 
245
- MIT License - see [LICENSE](../../LICENSE) file for details.
284
+ MIT License - see [LICENSE](LICENSE) file for details.
246
285
 
247
- ## ๐Ÿ‘จโ€๐Ÿ’ป Author
286
+ ## **๐Ÿ‘จโ€๐Ÿ’ป Author**
248
287
 
249
288
  **Sachin Dilshan**
250
289
  - ๐Ÿ“ง Email: [sachindilshan040@gmail.com](mailto:sachindilshan040@gmail.com)
251
290
  - ๐Ÿ™ GitHub: [@toozuuu](https://github.com/toozuuu)
252
291
  - ๐Ÿ“ฆ NPM: [ngxsmk-datepicker](https://www.npmjs.com/package/ngxsmk-datepicker)
253
292
 
254
- ## โญ Support
293
+ ## **โญ Support**
255
294
 
256
295
  If you find this library helpful, please consider:
257
296
  - โญ **Starring** the repository