ngxsmk-datepicker 2.3.0-beta.0 → 2.3.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.
package/README.md CHANGED
@@ -11,7 +11,6 @@
11
11
  ### _The Gold Standard for Premium Angular Calendar Selection_
12
12
 
13
13
  [![npm version](https://img.shields.io/npm/v/ngxsmk-datepicker.svg?style=flat-square&color=6d28d9)](https://www.npmjs.com/package/ngxsmk-datepicker)
14
- [![CI](https://img.shields.io/github/actions/workflow/status/NGXSMK/ngxsmk-datepicker/ci.yml?branch=main&label=CI&style=flat-square)](https://github.com/NGXSMK/ngxsmk-datepicker/actions/workflows/ci.yml)
15
14
  [![Angular](https://img.shields.io/badge/Angular-17%2B-DD0031.svg?style=flat-square&logo=angular)](https://angular.io/)
16
15
  [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/LICENSE)
17
16
  [![Buy me a coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-toozuuu-orange?style=flat-square&logo=buy-me-a-coffee)](https://buymeacoffee.com/toozuuu)
@@ -20,23 +19,21 @@
20
19
 
21
20
  **`npm i ngxsmk-datepicker`**
22
21
 
23
- [Live demo](https://ngxsmk.github.io/ngxsmk-datepicker/) • [StackBlitz (repo)](https://stackblitz.com/github/NGXSMK/ngxsmk-datepicker) • [API docs](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/projects/ngxsmk-datepicker/docs/API.md) • [Issues](https://github.com/NGXSMK/ngxsmk-datepicker/issues) • [Buy me a coffee](https://buymeacoffee.com/toozuuu)
24
-
25
- *StackBlitz:* after it boots, run `npm install` then `npm start` in the terminal to serve the demo app (`demo-app`).
22
+ [Explore Live Demo](https://ngxsmk.github.io/ngxsmk-datepicker/) • [Buy me a coffee](https://buymeacoffee.com/toozuuu) • [API Documentation](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/projects/ngxsmk-datepicker/docs/API.md) • [Submit Issue](https://github.com/NGXSMK/ngxsmk-datepicker/issues)
26
23
 
27
24
  </div>
28
25
 
29
26
  ---
30
27
 
31
- **Last updated:** May 19, 2026 - **Current stable:** v2.3.0
28
+ **Last updated:** May 19, 2026 - **Current stable:** v2.2.15
32
29
 
33
30
  ### **Overview**
34
31
 
35
32
  **ngxsmk-datepicker** is a high-performance, enterprise-ready date and range picker engineered for the modern Angular ecosystem (v17+). Built from the ground up with **Angular Signals**, it delivers a seamless, zoneless-ready experience for both desktop and mobile (Ionic) applications.
36
33
 
37
- > **Stable Release**: `v2.3.0` is the current stable release with compiled `fesm2022` output and type declarations.
34
+ > **Stable Release**: `v2.2.15` is the current stable release with compiled `fesm2022` output and type declarations.
38
35
  >
39
- > **Stable line**: v2.2.x includes range-mode **`allowSameDay`**, **IANA timezone** support, validation fixes, and strict TypeScript improvements. Versions **2.0.10** and **2.0.11** were broken and have been **unpublished**; use **v2.1.1+** or current **v2.3.0** on npm.
36
+ > **Stable line**: v2.2.x includes **`allowSameDay`**, **IANA timezone** support, validation fixes, and strict TypeScript improvements. Versions **2.0.10** and **2.0.11** were **unpublished**; use **v2.1.1+** or **v2.2.15** on npm.
40
37
 
41
38
  ---
42
39
 
@@ -44,16 +41,14 @@
44
41
 
45
42
  1. [📷 Screenshots](#-screenshots)
46
43
  2. [✨ Features](#-features)
47
- 3. [🤔 Why this library?](#why-this-library)
48
- 4. [🌐 Discoverability](#-discoverability)
49
- 5. [📋 Compatibility](#-compatibility)
50
- 6. [🌍 Localization (i18n)](#-localization-i18n)
51
- 7. [📦 Installation](#-installation)
52
- 8. [🚀 Quick start / usage](#usage)
53
- 9. [🔌 Framework Integration](#-framework-integration)
54
- 10. [⚙️ API Reference](#-api-reference)
55
- 11. [🎨 Theming](#-theming)
56
- 12. [⌨️ Keyboard Navigation](#-keyboard-navigation)
44
+ 3. [📋 Compatibility](#-compatibility)
45
+ 4. [🌍 Localization (i18n)](#-localization-i18n)
46
+ 5. [📦 Installation](#-installation)
47
+ 6. [🚀 Quick Start](#-quick-start)
48
+ 7. [🔌 Framework Integration](#-framework-integration)
49
+ 8. [⚙️ API Reference](#-api-reference)
50
+ 9. [🎨 Theming](#-theming)
51
+ 10. [⌨️ Keyboard Navigation](#-keyboard-navigation)
57
52
 
58
53
  ---
59
54
 
@@ -72,7 +67,7 @@
72
67
  - 💎 **Signal-Driven Engine**: Hyper-reactive state management using Angular Signals.
73
68
  - 🌓 **Native Dark Mode**: Beautifully crafted themes for light and dark environments.
74
69
  - 📱 **Mobile-First UX**: Native mobile picker integration with touch gestures and haptic feedback.
75
- - 🧩 **Minimal footprint**: Standalone component; **Luxon** is the only date peer beyond Angular (no full UI suite required).
70
+ - 🧩 **Zero Dependencies**: Lightweight standalone component with no external bloat.
76
71
  - ⚡ **Performance++**: Lazy-loaded calendar months, memoized calculations, and tree-shakable architecture.
77
72
 
78
73
  ### **Advanced Functionality**
@@ -84,27 +79,6 @@
84
79
  - 🚀 **Zoneless Ready**: Optimized for the future of Angular—works perfectly without zone.js.
85
80
  - ♿ **Full Accessibility**: WAI-ARIA compliant with extensive keyboard navigation support.
86
81
 
87
- ## Why this library?
88
-
89
- Use **ngxsmk-datepicker** when you want a focused **date / range picker** with strong **mobile**, **i18n**, **timezone**, and **SSR** story on **Angular 17+**, without adopting a full Material UI stack. It is a **standalone** component with **Luxon** as the single date peer (plus Angular).
90
-
91
- | | ngxsmk-datepicker | Angular Material datepicker |
92
- | --- | --- | --- |
93
- | **Fit** | Picker-first; optional Material/CDK peers for overlays only | Part of Material; best when you already use Material forms & CDK |
94
- | **Peer deps** | Angular + **Luxon** | **@angular/material** + **@angular/cdk** |
95
- | **Forms** | Template-driven, Reactive Forms, Signals; **Signal Forms** (`[field]`) on Angular 21+ | Reactive + template-driven; integrates with Material form field |
96
- | **Stack** | Tree-shakable package aimed at picker scenarios | Broader design system and bundle footprint |
97
-
98
- This is **not** a drop-in replacement for every Material datepicker API; choose based on whether you need **Material’s form-field ecosystem** or a **standalone picker** you can theme and ship with **zoneless** / **SSR** setups. See the [live demo](https://ngxsmk.github.io/ngxsmk-datepicker/) and [COMPATIBILITY](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/projects/ngxsmk-datepicker/docs/COMPATIBILITY.md) for details.
99
-
100
- ## **🌐 Discoverability**
101
-
102
- **Maintainers (GitHub):** consider repository **Topics** such as: `angular`, `datepicker`, `date-range-picker`, `luxon`, `standalone-components`, `i18n`, `angular-universal`, `ionic`, `accessibility`.
103
-
104
- **Community:** if this project helped you, stars and accurate comparisons in blog posts or issue threads help others find it. Curated lists (for example **awesome-angular**-style repos) usually accept small PRs that add a one-line link and follow their contribution rules—check each list’s guidelines before opening a PR.
105
-
106
- **Security:** report sensitive issues per [SECURITY.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/SECURITY.md), not via public issues.
107
-
108
82
  ## **📋 Compatibility**
109
83
 
110
84
  For detailed compatibility information, see [COMPATIBILITY.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/projects/ngxsmk-datepicker/docs/COMPATIBILITY.md).
@@ -163,30 +137,21 @@ Features marked as experimental may change:
163
137
 
164
138
  For details, see [CONTRIBUTING.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/CONTRIBUTING.md#deprecation-policy).
165
139
 
166
- ## **📦 Installation**
140
+ ## **🚀 Installation**
141
+
142
+ Install the package using npm:
167
143
 
168
144
  ```bash
169
- npm install ngxsmk-datepicker@2.3.0
145
+ npm install ngxsmk-datepicker@latest
170
146
  ```
171
147
 
172
148
  ### Alternative installation
173
149
 
174
- You can install without npm using any of these methods (peer dependencies must still be installed in your app):
175
-
176
- | Method | Command |
177
- |--------|--------|
178
- | **Yarn** | `yarn add ngxsmk-datepicker@2.3.0` |
179
- | **pnpm** | `pnpm add ngxsmk-datepicker@2.3.0` |
180
- | **Bun** | `bun add ngxsmk-datepicker@2.3.0` |
181
- | **From Git** | `npm install github:NGXSMK/ngxsmk-datepicker#v2.3.0` (requires the repo to have built output or you build from source) |
182
- | **Local path** | Build the library in the repo (`npx ng build ngxsmk-datepicker`), then `npm install /path/to/ngxsmk-datepicker/dist/ngxsmk-datepicker` |
183
- | **CDN (ESM)** | Use [unpkg](https://unpkg.com/ngxsmk-datepicker@2.3.0/) or [jsDelivr](https://cdn.jsdelivr.net/npm/ngxsmk-datepicker@2.3.0/) in your bundler or import map; peer dependencies (Angular, etc.) must be installed in your app. |
184
-
185
- For all options and caveats, see [docs/INSTALLATION.md](docs/INSTALLATION.md).
150
+ You can install without npm using Yarn, pnpm, Bun, from Git, a local path, or via CDN (ESM). Peer dependencies must still be installed in your app. For all options and caveats, see [INSTALLATION.md](../../docs/INSTALLATION.md) in the repo root.
186
151
 
187
152
  ## **Usage**
188
153
 
189
- ngxsmk-datepicker is a standalone component, so you can import it directly into your component or module.
154
+ ngxsmk-datepicker is a standalone component, so you can import it directly into your component or module. If you see **NG1010** (`'imports' must be an array... Value could not be determined statically`) when using the Angular compiler plugin or in strict AOT builds, use `NgxsmkDatepickerModule` in your `imports` array instead of `NgxsmkDatepickerComponent` (same template: `<ngxsmk-datepicker>`).
190
155
 
191
156
  ### Signal Forms (Angular 21)
192
157
 
@@ -256,7 +221,7 @@ For detailed Signal Forms integration including dirty state tracking, see the [S
256
221
 
257
222
  #### **1. Import the Component**
258
223
 
259
- All public exports (component, utilities, types, services) come from the main package entry: `'ngxsmk-datepicker'` (there is no separate `/utils` subpath). In your component file (e.g., app.component.ts), import the component (or the module—see troubleshooting below).
224
+ In your component file (e.g., app.component.ts), import NgxsmkDatepickerComponent.
260
225
 
261
226
  import { Component } from '@angular/core';
262
227
  import { NgxsmkDatepickerComponent, DateRange, HolidayProvider } from 'ngxsmk-datepicker';
@@ -286,8 +251,6 @@ All public exports (component, utilities, types, services) come from the main pa
286
251
  }
287
252
  }
288
253
 
289
- **If you see NG1010** (`'imports' must be an array... Value could not be determined statically`) when using the Angular compiler plugin or in strict AOT builds, use the wrapper module instead: `import { NgxsmkDatepickerModule } from 'ngxsmk-datepicker'` and set `imports: [NgxsmkDatepickerModule]`. The template stays the same (`<ngxsmk-datepicker>`).
290
-
291
254
  #### **2. Add it to Your Template**
292
255
 
293
256
  Use the `<ngxsmk-datepicker>` selector in your HTML template.
@@ -368,7 +331,7 @@ export class MaterialFormComponent {
368
331
  }
369
332
  ```
370
333
 
371
- **Non-Standalone (NgModules):** Add the directive file from [INTEGRATION.md § Angular Material](projects/ngxsmk-datepicker/docs/INTEGRATION.md#angular-material), then add it to your module `imports` (with `NgxsmkDatepickerComponent`, `MatFormFieldModule`, etc.) and use `ngxsmkMatFormFieldControl` on the datepicker in templates.
334
+ **Non-Standalone (NgModules):** Add the directive file from [INTEGRATION.md § Angular Material](docs/INTEGRATION.md#angular-material), then add it to your module `imports` (with `NgxsmkDatepickerComponent`, `MatFormFieldModule`, etc.) and use `ngxsmkMatFormFieldControl` on the datepicker in templates.
372
335
 
373
336
  **With Date Range:**
374
337
 
@@ -387,9 +350,6 @@ For best integration with Ionic, import the integration styles in your global CS
387
350
  @import "ngxsmk-datepicker/styles/ionic-integration.css";
388
351
  ```
389
352
 
390
- **Automatic Theming:**
391
- The datepicker automatically detects and uses Ionic CSS variables (e.g., `--ion-color-primary`, `--ion-background-color`) so it matches your app's theme out of the box without extra configuration.
392
-
393
353
  Works seamlessly with Ionic form components and follows Ionic design patterns:
394
354
 
395
355
  ```typescript
@@ -633,14 +593,14 @@ The `locale` input controls all internationalization. It automatically formats m
633
593
 
634
594
  ngxsmk-datepicker v2.2.x now features **full localization synchronization** for:
635
595
 
636
- - �� English (`en`)
637
- - �� German (`de`)
638
- - �� French (`fr`)
639
- - �� Spanish (`es`)
596
+ - 🇺🇸 English (`en`)
597
+ - 🇩🇪 German (`de`)
598
+ - 🇫🇷 French (`fr`)
599
+ - 🇪🇸 Spanish (`es`)
640
600
  - 🇸🇪 Swedish (`sv`)
641
- - �� Korean (`ko`)
642
- - �� Chinese (`zh`)
643
- - �� Japanese (`ja`)
601
+ - 🇰🇷 Korean (`ko`)
602
+ - 🇨🇳 Chinese (`zh`)
603
+ - 🇯🇵 Japanese (`ja`)
644
604
 
645
605
  ### **Usage Example**
646
606
 
@@ -705,7 +665,7 @@ const myHooks: DatepickerHooks = {
705
665
  <ngxsmk-datepicker [hooks]="myHooks" [customShortcuts]="shortcuts" mode="single"> </ngxsmk-datepicker>
706
666
  ```
707
667
 
708
- All date cells are keyboard accessible with proper ARIA attributes for screen readers. The component is built with **accessibility in mind**: keyboard navigation, ARIA roles and labels, and live regions for announcements. For details see [API.md – Keyboard Support](projects/ngxsmk-datepicker/docs/API.md#keyboard-support) and the ARIA-related inputs (e.g. `closeAriaLabel`, `clearAriaLabel`) in the API reference.
668
+ All date cells are keyboard accessible with proper ARIA attributes for screen readers.
709
669
 
710
670
  See [Extension Points Guide](./projects/ngxsmk-datepicker/docs/extension-points.md) for detailed customization options.
711
671
 
@@ -730,14 +690,11 @@ This library has been optimized for maximum performance:
730
690
  - ✅ **Date Validation**: Fixed "Today" unselectable bug by normalizing `minDate` boundary checks.
731
691
  - ✅ **Keyboard Shortcuts**: Updated "Today" selection shortcut to use timezone-aware calculation.
732
692
  - ✅ **Validation messages**: User-facing i18n strings for invalid date, min/max; `validationError` output and on-screen error display
733
- - ✅ **Change Detection**: Fixed OnPush change detection issues with proper `markForCheck()` triggers
734
- - ✅ **Date Comparison**: Fixed null safety issues in date range comparisons
735
- - ✅ **Memory Leaks**: Added cache size limits to prevent memory leaks
736
- - ✅ **Type Safety**: Improved TypeScript types and null safety checks
737
- - ✅ **Mobile UX**: Enhanced mobile interactions and touch feedback
738
- - ✅ **Performance**: Optimized template bindings with memoized functions
739
- - ✅ **Accessibility**: Better focus states and keyboard navigation
740
- - ✅ **Build System**: Improved build configuration and optimization
693
+ - ✅ **Calendar loading state**: Visual spinner + text and screen-reader announcement while calendar opens/generates
694
+ - ✅ **Demo theme**: Light/dark theme toggle and system preference now correctly switch the demo UI
695
+ - ✅ **Installation options**: Full install guide (npm, Yarn, pnpm, Bun, Git, CDN, etc.) and demo page updates
696
+ - ✅ **Accessibility**: Loading state announced via live region; validation errors exposed for a11y
697
+ - ✅ **Type Safety**: New translation keys and strictly typed inputs/outputs
741
698
 
742
699
  ### **Performance Enhancements:**
743
700
 
@@ -891,9 +848,13 @@ We welcome and appreciate contributions from the community! Whether it's reporti
891
848
 
892
849
  ## **📄 Changelog**
893
850
 
894
- **Recent:** Use **v2.3.0** on npm. The v2.2.x line adds `allowSameDay` range mode, IANA timezone support, TypeScript strictness, appendToBody/popover fixes, and CSS cleanup. Versions 2.0.10 and 2.0.11 are unpublished; use v2.1.1+ or **v2.3.0**.
851
+ For a full list of changes, please refer to the [CHANGELOG.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/CHANGELOG.md) file.
852
+
853
+ ### **v2.2.15** (Current Stable)`r`n`r`n- **npm**: Published tarballs include compiled `fesm2022/` output and type declarations.
895
854
 
896
- For the full list of changes, see [CHANGELOG.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/CHANGELOG.md).
855
+ ### **Earlier Versions**
856
+
857
+ For older version details, please refer to the [full CHANGELOG.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/CHANGELOG.md).
897
858
 
898
859
  ## **🎨 Theming with TokiForge**
899
860
 
@@ -901,6 +862,11 @@ Looking for a powerful theming solution for your Angular application? Check out
901
862
 
902
863
  ### Why TokiForge?
903
864
 
865
+ - ✅ **Framework-agnostic** — Works with Angular, React, Vue, Svelte, and vanilla JS
866
+ - ✅ **Runtime theme switching** — Change themes dynamically without rebuilds
867
+ - ✅ **Type-safe** — Full TypeScript support for design tokens
868
+ - ✅ **Lightweight** — <3 KB gzipped runtime footprint
869
+ - ✅ **CSS custom properties** — Zero JS overhead in static mode
904
870
  - ✅ **SSR compatible** — Works seamlessly with Angular Universal
905
871
 
906
872
  Perfect for managing design tokens, creating theme systems, and implementing dark mode in your Angular applications!
@@ -913,9 +879,19 @@ Perfect for managing design tokens, creating theme systems, and implementing dar
913
879
 
914
880
  MIT License - see [LICENSE](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/LICENSE) file for details.
915
881
 
916
- ## **🔍 SEO (demo site)**
882
+ ## **🔍 SEO & Discoverability**
883
+
884
+ This library is optimized for search engine visibility, especially for European markets:
917
885
 
918
- The hosted **[live demo](https://ngxsmk.github.io/ngxsmk-datepicker/)** build ships with meta tags (Open Graph, Twitter cards, `hreflang`, structured data) and locale-aware content for broader discovery. For **GitHub/npm** visibility—topics, awesome lists, StackBlitz, and security reporting—see [**Discoverability**](#-discoverability) near the top of this README.
886
+ - **Keywords**: Angular datepicker, date range picker, calendar component, Angular 17-21, TypeScript, Signal Forms, SSR compatible
887
+ - **European SEO**: Optimized for Germany, France, Spain, Italy, Netherlands, Poland, Portugal, Sweden, Norway, Finland, Denmark, Belgium, Switzerland, Austria, and United Kingdom
888
+ - **Multi-language Support**: hreflang tags for 15+ European languages and locales
889
+ - **European Geo-targeting**: Geo tags and structured data optimized for European Union countries
890
+ - **Meta Tags**: Comprehensive Open Graph and Twitter Card support with European locale alternates
891
+ - **Structured Data**: JSON-LD schema markup with European audience targeting and area served information
892
+ - **Documentation**: Complete API documentation with examples
893
+ - **Performance**: Optimized bundle size (~127KB) for fast loading
894
+ - **European Localization**: Full i18n support for European date formats, week start days, and regional preferences
919
895
 
920
896
  ## **👨‍💻 Author**
921
897
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngxsmk-datepicker",
3
- "version": "2.3.0-beta.0",
3
+ "version": "2.3.0",
4
4
  "description": "Lightweight, accessible date and range picker for Angular 17+. Standalone component, Signals, SSR and zoneless-ready, Luxon-based i18n and timezones.",
5
5
  "author": {
6
6
  "name": "Sachin Dilshan",