ngxsmk-datepicker 3.0.3 → 3.0.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.
- package/README.md +81 -87
- package/fesm2022/ngxsmk-datepicker.mjs +1521 -1094
- package/package.json +1 -1
- package/types/ngxsmk-datepicker.d.ts +110 -7
- package/CHANGELOG.md +0 -1338
- package/LICENSE +0 -21
- package/MIGRATION.md +0 -1818
package/README.md
CHANGED
|
@@ -11,18 +11,17 @@
|
|
|
11
11
|
### _The Gold Standard for Premium Angular Calendar Selection_
|
|
12
12
|
|
|
13
13
|
[](https://www.npmjs.com/package/ngxsmk-datepicker)
|
|
14
|
-
[](https://www.npmjs.com/package/ngxsmk-datepicker)
|
|
15
15
|
[](https://angular.io/)
|
|
16
16
|
[](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/LICENSE)
|
|
17
|
+
[](https://whatsapp.com/channel/0029Vb8PWpz1XquUOnGPUM2p)
|
|
17
18
|
[](https://buymeacoffee.com/toozuuu)
|
|
18
19
|
[](https://bundlephobia.com/package/ngxsmk-datepicker)
|
|
19
20
|
[](https://angular.dev/guide/zoneless)
|
|
20
21
|
|
|
21
22
|
**`npm i ngxsmk-datepicker`**
|
|
22
23
|
|
|
23
|
-
[Live
|
|
24
|
-
|
|
25
|
-
*StackBlitz:* after it boots, run `npm install` then `npm start` in the terminal to serve the demo app (`demo-app`).
|
|
24
|
+
[Explore Live Demo](https://ngxsmk.github.io/ngxsmk-datepicker/) • [WhatsApp Channel](https://whatsapp.com/channel/0029Vb8PWpz1XquUOnGPUM2p) • [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
25
|
|
|
27
26
|
</div>
|
|
28
27
|
|
|
@@ -44,16 +43,14 @@
|
|
|
44
43
|
|
|
45
44
|
1. [📷 Screenshots](#-screenshots)
|
|
46
45
|
2. [✨ Features](#-features)
|
|
47
|
-
3. [
|
|
48
|
-
4. [
|
|
49
|
-
5. [
|
|
50
|
-
6. [
|
|
51
|
-
7. [
|
|
52
|
-
8. [
|
|
53
|
-
9. [
|
|
54
|
-
10. [
|
|
55
|
-
11. [🎨 Theming](#-theming)
|
|
56
|
-
12. [⌨️ Keyboard Navigation](#-keyboard-navigation)
|
|
46
|
+
3. [📋 Compatibility](#-compatibility)
|
|
47
|
+
4. [🌍 Localization (i18n)](#-localization-i18n)
|
|
48
|
+
5. [📦 Installation](#-installation)
|
|
49
|
+
6. [🚀 Quick Start](#-quick-start)
|
|
50
|
+
7. [🔌 Framework Integration](#-framework-integration)
|
|
51
|
+
8. [⚙️ API Reference](#-api-reference)
|
|
52
|
+
9. [🎨 Theming](#-theming)
|
|
53
|
+
10. [⌨️ Keyboard Navigation](#-keyboard-navigation)
|
|
57
54
|
|
|
58
55
|
---
|
|
59
56
|
|
|
@@ -72,7 +69,7 @@
|
|
|
72
69
|
- 💎 **Signal-Driven Engine**: Hyper-reactive state management using Angular Signals.
|
|
73
70
|
- 🌓 **Native Dark Mode**: Beautifully crafted themes for light and dark environments.
|
|
74
71
|
- 📱 **Mobile-First UX**: Native mobile picker integration with touch gestures and haptic feedback.
|
|
75
|
-
- 🧩 **
|
|
72
|
+
- 🧩 **Zero Dependencies**: Lightweight standalone component with no external bloat.
|
|
76
73
|
- ⚡ **Performance++**: Lazy-loaded calendar months, memoized calculations, and tree-shakable architecture.
|
|
77
74
|
|
|
78
75
|
### **Advanced Functionality**
|
|
@@ -81,16 +78,30 @@
|
|
|
81
78
|
- 🗓️ **Adjacent Month Days (`showOtherMonths`)**: Display trailing and leading days from adjacent months in the calendar grid.
|
|
82
79
|
- 📐 **Responsive Control (`[responsive]`)**: Disable viewport max-width responsive overrides for fixed-width container embedding (#299).
|
|
83
80
|
- 🌐 **8-Language i18n**: Full localization for `en`, `de`, `es`, `sv`, `ko`, `zh`, `ja`, and `fr`.
|
|
84
|
-
- 🔢 **ISO Week Numbers**: Optional week-number column via `[showWeekNumbers]`.
|
|
85
|
-
- ⌨️ **Guided Input Masking**: `[inputMask]` auto-inserts separators as users type (e.g. `12` → `12/`).
|
|
86
|
-
- 🌍 **Secondary Calendars**: Annotate day cells with Hijri, Jalali, Hebrew, Buddhist, or Japanese dates via `[secondaryCalendar]`.
|
|
87
|
-
- 🏨 **Availability Calendars**: Per-day prices, indicator dots, and classes via `[dayMetadata]`; server-driven blocked dates via `[asyncDateFilter]`.
|
|
88
|
-
- 🎛️ **Custom Action Bars**: `[calendarHeaderTemplate]` / `[calendarFooterTemplate]` slots with `clear()`/`close()` actions.
|
|
89
81
|
- 🛠️ **Plugin Architecture**: Extend functionality via hooks for rendering, validation, and shortcuts.
|
|
90
82
|
- 🧪 **Signal Forms Native**: Direct integration with Angular 21's new Signal Forms API.
|
|
91
83
|
- 🚀 **Zoneless Ready**: Optimized for the future of Angular—works perfectly without zone.js.
|
|
92
84
|
- ♿ **Full Accessibility**: WAI-ARIA compliant with extensive keyboard navigation support.
|
|
93
85
|
|
|
86
|
+
## **⚖️ Why ngxsmk-datepicker? (Comparison)**
|
|
87
|
+
|
|
88
|
+
| Capability | **ngxsmk-datepicker** | @angular/material | ngx-bootstrap | ng-pick-datetime |
|
|
89
|
+
| --- | :---: | :---: | :---: | :---: |
|
|
90
|
+
| Standalone / no NgModule | ✅ | ✅ | ⚠️ | ❌ |
|
|
91
|
+
| Signals & Zoneless-ready | ✅ | ⚠️ | ❌ | ❌ |
|
|
92
|
+
| SSR / Angular Universal | ✅ | ✅ | ⚠️ | ❌ |
|
|
93
|
+
| Date **range** picker | ✅ | ✅ | ✅ | ✅ |
|
|
94
|
+
| Multiple / week / month / quarter / year modes | ✅ | ❌ | ❌ | ❌ |
|
|
95
|
+
| Time & timezone-aware selection | ✅ | ❌ | ⚠️ | ✅ |
|
|
96
|
+
| Natural-language input ("next friday") | ✅ | ❌ | ❌ | ❌ |
|
|
97
|
+
| Dual-range **comparison** highlight | ✅ | ❌ | ❌ | ❌ |
|
|
98
|
+
| Built-in i18n (8 languages) + RTL | ✅ | ⚠️ | ⚠️ | ⚠️ |
|
|
99
|
+
| React / Vue / Web-Component wrappers | ✅ | ❌ | ❌ | ❌ |
|
|
100
|
+
| Zero peer-dep bloat (only Luxon) | ✅ | ⚠️ | ⚠️ | ⚠️ |
|
|
101
|
+
| Actively maintained (Angular 17–21+) | ✅ | ✅ | ⚠️ | ❌ |
|
|
102
|
+
|
|
103
|
+
<sub>✅ first-class · ⚠️ partial / extra
|
|
104
|
+
|
|
94
105
|
## Why this library?
|
|
95
106
|
|
|
96
107
|
Use **ngxsmk-datepicker** when you want an enterprise-grade **date / range picker** with strong **mobile**, **i18n**, **timezone**, **Ionic**, and **SSR** support on **Angular 17–22+**, without adopting a heavy Material UI stack or legacy Day.js dependencies.
|
|
@@ -109,15 +120,7 @@ Use **ngxsmk-datepicker** when you want an enterprise-grade **date / range picke
|
|
|
109
120
|
| **Google Calendar Sync & Multi-Calendars** | ✅ Built-in | ❌ Requires custom code | ❌ Not supported |
|
|
110
121
|
| **SSR / Hydration Safety** | ✅ 100% Guarded (`DOCUMENT`) | ⚠️ Requires CDK SSR overlays | ❌ Window access errors |
|
|
111
122
|
|
|
112
|
-
This is **not** a heavy UI framework; it is a **standalone datepicker** engineered for maximum performance, accessibility, and theming flexibility. 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
|
|
113
|
-
|
|
114
|
-
## **🌐 Discoverability**
|
|
115
|
-
|
|
116
|
-
**Maintainers (GitHub):** consider repository **Topics** such as: `angular`, `datepicker`, `date-range-picker`, `luxon`, `standalone-components`, `i18n`, `angular-universal`, `ionic`, `accessibility`.
|
|
117
|
-
|
|
118
|
-
**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.
|
|
119
|
-
|
|
120
|
-
**Security:** report sensitive issues per [SECURITY.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/SECURITY.md), not via public issues.
|
|
123
|
+
This is **not** a heavy UI framework; it is a **standalone datepicker** engineered for maximum performance, accessibility, and theming flexibility. 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.</sub>
|
|
121
124
|
|
|
122
125
|
## **📋 Compatibility**
|
|
123
126
|
|
|
@@ -177,36 +180,21 @@ Features marked as experimental may change:
|
|
|
177
180
|
|
|
178
181
|
For details, see [CONTRIBUTING.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/CONTRIBUTING.md#deprecation-policy).
|
|
179
182
|
|
|
180
|
-
##
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
ng add ngxsmk-datepicker
|
|
184
|
-
```
|
|
183
|
+
## **🚀 Installation**
|
|
185
184
|
|
|
186
|
-
|
|
185
|
+
Install the package using npm:
|
|
187
186
|
|
|
188
187
|
```bash
|
|
189
|
-
npm install ngxsmk-datepicker@
|
|
188
|
+
npm install ngxsmk-datepicker@latest
|
|
190
189
|
```
|
|
191
190
|
|
|
192
191
|
### Alternative installation
|
|
193
192
|
|
|
194
|
-
You can install without npm using
|
|
195
|
-
|
|
196
|
-
| Method | Command |
|
|
197
|
-
|--------|--------|
|
|
198
|
-
| **Yarn** | `yarn add ngxsmk-datepicker@3.0.3` |
|
|
199
|
-
| **pnpm** | `pnpm add ngxsmk-datepicker@3.0.3` |
|
|
200
|
-
| **Bun** | `bun add ngxsmk-datepicker@3.0.3` |
|
|
201
|
-
| **From Git** | `npm install github:NGXSMK/ngxsmk-datepicker#v3.0.3` (requires the repo to have built output or you build from source) |
|
|
202
|
-
| **Local path** | Build the library in the repo (`npx ng build ngxsmk-datepicker`), then `npm install /path/to/ngxsmk-datepicker/dist/ngxsmk-datepicker` |
|
|
203
|
-
| **CDN (ESM)** | Use [unpkg](https://unpkg.com/ngxsmk-datepicker@3.0.3/) or [jsDelivr](https://cdn.jsdelivr.net/npm/ngxsmk-datepicker@3.0.3/) in your bundler or import map; peer dependencies (Angular, etc.) must be installed in your app. |
|
|
204
|
-
|
|
205
|
-
For all options and caveats, see [docs/INSTALLATION.md](docs/INSTALLATION.md).
|
|
193
|
+
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.
|
|
206
194
|
|
|
207
195
|
## **Usage**
|
|
208
196
|
|
|
209
|
-
ngxsmk-datepicker is a standalone component, so you can import it directly into your component or module.
|
|
197
|
+
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>`).
|
|
210
198
|
|
|
211
199
|
### Signal Forms (Angular 21)
|
|
212
200
|
|
|
@@ -276,7 +264,7 @@ For detailed Signal Forms integration including dirty state tracking, see the [S
|
|
|
276
264
|
|
|
277
265
|
#### **1. Import the Component**
|
|
278
266
|
|
|
279
|
-
|
|
267
|
+
In your component file (e.g., app.component.ts), import NgxsmkDatepickerComponent.
|
|
280
268
|
|
|
281
269
|
import { Component } from '@angular/core';
|
|
282
270
|
import { NgxsmkDatepickerComponent, DateRange, HolidayProvider } from 'ngxsmk-datepicker';
|
|
@@ -306,8 +294,6 @@ All public exports (component, utilities, types, services) come from the main pa
|
|
|
306
294
|
}
|
|
307
295
|
}
|
|
308
296
|
|
|
309
|
-
**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>`).
|
|
310
|
-
|
|
311
297
|
#### **2. Add it to Your Template**
|
|
312
298
|
|
|
313
299
|
Use the `<ngxsmk-datepicker>` selector in your HTML template.
|
|
@@ -388,7 +374,7 @@ export class MaterialFormComponent {
|
|
|
388
374
|
}
|
|
389
375
|
```
|
|
390
376
|
|
|
391
|
-
**Non-Standalone (NgModules):** Add the directive file from [INTEGRATION.md § Angular Material](
|
|
377
|
+
**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.
|
|
392
378
|
|
|
393
379
|
**With Date Range:**
|
|
394
380
|
|
|
@@ -407,9 +393,6 @@ For best integration with Ionic, import the integration styles in your global CS
|
|
|
407
393
|
@import "ngxsmk-datepicker/styles/ionic-integration.css";
|
|
408
394
|
```
|
|
409
395
|
|
|
410
|
-
**Automatic Theming:**
|
|
411
|
-
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.
|
|
412
|
-
|
|
413
396
|
Works seamlessly with Ionic form components and follows Ionic design patterns:
|
|
414
397
|
|
|
415
398
|
```typescript
|
|
@@ -579,17 +562,10 @@ By default, the datepicker input is `readonly` to prevent invalid date strings a
|
|
|
579
562
|
| enableGoogleCalendar| boolean | false | Enable seamless Google Calendar integration and sync. |
|
|
580
563
|
| googleClientId | string \| null | null | Google API OAuth 2.0 Web Client ID for authentication. |
|
|
581
564
|
| calendars | number | 1 | Multi-calendar display layout (supports 1, 2, or 3 side-by-side calendars). |
|
|
565
|
+
| changeActiveMonthOnSelection | boolean | true | If false, selecting a date won't shift the visible month(s) — useful in multi-calendar mode to keep both calendars fixed when picking a date from the second/third one. |
|
|
582
566
|
| rangePresetFactory | (today: Date) => DatePreset[] | null | Callback function supplying dynamic rolling range presets. |
|
|
583
567
|
| showTimezoneSelector | boolean | false | Enables searchable IANA timezone selection dropdown UI. |
|
|
584
568
|
| enableNaturalLanguage | boolean | false | Enables manual relative keyboard typing input (e.g. "today", "in 3 days"). |
|
|
585
|
-
| showWeekNumbers | boolean | false | Shows an ISO 8601 week-number column on the left of the day grid. |
|
|
586
|
-
| weekNumberLabel | string | 'Wk' | Header label for the week-number column (e.g. "KW", "S"). |
|
|
587
|
-
| inputMask | boolean \| string | false | Guided input masking while typing: `true` uses `displayFormat` (or MM/DD/YYYY); a string (e.g. `'DD.MM.YYYY'`) sets an explicit pattern. Requires `allowTyping`. |
|
|
588
|
-
| asyncDateFilter | (start: Date, end: Date) => Promise<DateInput[]> | null | Server-driven disabled dates: called with the visible range on every navigation; resolved dates are disabled. Stale responses are discarded. |
|
|
589
|
-
| secondaryCalendar | 'islamic' \| 'persian' \| 'hebrew' \| 'buddhist' \| 'japanese' | null | Annotates each day cell with its date in a second calendar system (rendered via Intl; the grid stays Gregorian). |
|
|
590
|
-
| dayMetadata | (date: Date) => DayMetadata | null | Per-day decorations without templates: label under the day number (e.g. a price), indicator dot color, extra CSS classes, tooltip. |
|
|
591
|
-
| calendarHeaderTemplate | TemplateRef | null | Custom content at the top of the popover/inline calendar. Context: `let-actions` → `{ clear(), close() }`. |
|
|
592
|
-
| calendarFooterTemplate | TemplateRef | null | Replaces the default Clear/Close footer with custom actions. Context: `let-actions` → `{ clear(), close() }`. |
|
|
593
569
|
|
|
594
570
|
### **Outputs**
|
|
595
571
|
|
|
@@ -601,8 +577,6 @@ By default, the datepicker input is `readonly` to prevent invalid date strings a
|
|
|
601
577
|
| invalidRange | { start: Date; end: Date; disabledDatesInside: Date[] } | Emitted when selected date range contains disabled dates. |
|
|
602
578
|
| naturalLanguageResolved | Date \| { start: Date; end: Date } | Emitted when user types relative natural language date input. |
|
|
603
579
|
| timezoneChange | string | Emitted when timezone selection is changed. |
|
|
604
|
-
| asyncDateFilterLoading | boolean | Emits true while an `asyncDateFilter` request is in flight, false when it settles. |
|
|
605
|
-
| asyncDateFilterError | unknown | Emitted when `asyncDateFilter` rejects; the previous disabled set is kept. |
|
|
606
580
|
|
|
607
581
|
## **🎨 Theming**
|
|
608
582
|
|
|
@@ -670,14 +644,14 @@ The `locale` input controls all internationalization. It automatically formats m
|
|
|
670
644
|
|
|
671
645
|
ngxsmk-datepicker v2.4.0+ now features **full localization synchronization** for:
|
|
672
646
|
|
|
673
|
-
-
|
|
674
|
-
-
|
|
675
|
-
-
|
|
676
|
-
-
|
|
647
|
+
- 🇺🇸 English (`en`)
|
|
648
|
+
- 🇩🇪 German (`de`)
|
|
649
|
+
- 🇫🇷 French (`fr`)
|
|
650
|
+
- 🇪🇸 Spanish (`es`)
|
|
677
651
|
- 🇸🇪 Swedish (`sv`)
|
|
678
|
-
-
|
|
679
|
-
-
|
|
680
|
-
-
|
|
652
|
+
- 🇰🇷 Korean (`ko`)
|
|
653
|
+
- 🇨🇳 Chinese (`zh`)
|
|
654
|
+
- 🇯🇵 Japanese (`ja`)
|
|
681
655
|
|
|
682
656
|
### **Usage Example**
|
|
683
657
|
|
|
@@ -742,7 +716,7 @@ const myHooks: DatepickerHooks = {
|
|
|
742
716
|
<ngxsmk-datepicker [hooks]="myHooks" [customShortcuts]="shortcuts" mode="single"> </ngxsmk-datepicker>
|
|
743
717
|
```
|
|
744
718
|
|
|
745
|
-
All date cells are keyboard accessible with proper ARIA attributes for screen readers.
|
|
719
|
+
All date cells are keyboard accessible with proper ARIA attributes for screen readers.
|
|
746
720
|
|
|
747
721
|
See [Extension Points Guide](./projects/ngxsmk-datepicker/docs/extension-points.md) for detailed customization options.
|
|
748
722
|
|
|
@@ -767,14 +741,11 @@ This library has been optimized for maximum performance:
|
|
|
767
741
|
- ✅ **Date Validation**: Fixed "Today" unselectable bug by normalizing `minDate` boundary checks.
|
|
768
742
|
- ✅ **Keyboard Shortcuts**: Updated "Today" selection shortcut to use timezone-aware calculation.
|
|
769
743
|
- ✅ **Validation messages**: User-facing i18n strings for invalid date, min/max; `validationError` output and on-screen error display
|
|
770
|
-
- ✅ **
|
|
771
|
-
- ✅ **
|
|
772
|
-
- ✅ **
|
|
773
|
-
- ✅ **
|
|
774
|
-
- ✅ **
|
|
775
|
-
- ✅ **Performance**: Optimized template bindings with memoized functions
|
|
776
|
-
- ✅ **Accessibility**: Better focus states and keyboard navigation
|
|
777
|
-
- ✅ **Build System**: Improved build configuration and optimization
|
|
744
|
+
- ✅ **Calendar loading state**: Visual spinner + text and screen-reader announcement while calendar opens/generates
|
|
745
|
+
- ✅ **Demo theme**: Light/dark theme toggle and system preference now correctly switch the demo UI
|
|
746
|
+
- ✅ **Installation options**: Full install guide (npm, Yarn, pnpm, Bun, Git, CDN, etc.) and demo page updates
|
|
747
|
+
- ✅ **Accessibility**: Loading state announced via live region; validation errors exposed for a11y
|
|
748
|
+
- ✅ **Type Safety**: New translation keys and strictly typed inputs/outputs
|
|
778
749
|
|
|
779
750
|
### **Performance Enhancements:**
|
|
780
751
|
|
|
@@ -928,9 +899,15 @@ We welcome and appreciate contributions from the community! Whether it's reporti
|
|
|
928
899
|
|
|
929
900
|
## **📄 Changelog**
|
|
930
901
|
|
|
931
|
-
|
|
902
|
+
For a full list of changes, please refer to the [CHANGELOG.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/CHANGELOG.md) file.
|
|
903
|
+
|
|
904
|
+
### **v3.0.3** (Current Stable)
|
|
932
905
|
|
|
933
|
-
|
|
906
|
+
- **npm**: Published tarballs include compiled `fesm2022/` output and type declarations.
|
|
907
|
+
|
|
908
|
+
### **Earlier Versions**
|
|
909
|
+
|
|
910
|
+
For older version details, please refer to the [full CHANGELOG.md](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/CHANGELOG.md).
|
|
934
911
|
|
|
935
912
|
## **🎨 Theming with TokiForge**
|
|
936
913
|
|
|
@@ -938,6 +915,11 @@ Looking for a powerful theming solution for your Angular application? Check out
|
|
|
938
915
|
|
|
939
916
|
### Why TokiForge?
|
|
940
917
|
|
|
918
|
+
- ✅ **Framework-agnostic** — Works with Angular, React, Vue, Svelte, and vanilla JS
|
|
919
|
+
- ✅ **Runtime theme switching** — Change themes dynamically without rebuilds
|
|
920
|
+
- ✅ **Type-safe** — Full TypeScript support for design tokens
|
|
921
|
+
- ✅ **Lightweight** — <3 KB gzipped runtime footprint
|
|
922
|
+
- ✅ **CSS custom properties** — Zero JS overhead in static mode
|
|
941
923
|
- ✅ **SSR compatible** — Works seamlessly with Angular Universal
|
|
942
924
|
|
|
943
925
|
Perfect for managing design tokens, creating theme systems, and implementing dark mode in your Angular applications!
|
|
@@ -950,9 +932,16 @@ Perfect for managing design tokens, creating theme systems, and implementing dar
|
|
|
950
932
|
|
|
951
933
|
MIT License - see [LICENSE](https://github.com/NGXSMK/ngxsmk-datepicker/blob/main/LICENSE) file for details.
|
|
952
934
|
|
|
953
|
-
## **🔍 SEO
|
|
935
|
+
## **🔍 SEO & Discoverability**
|
|
954
936
|
|
|
955
|
-
|
|
937
|
+
This library is optimized for search engine visibility, AI search engines, and global developer discovery:
|
|
938
|
+
|
|
939
|
+
- **Keywords**: Angular DatePicker, Date Range Picker, Calendar Component, Angular 17-22+, Signals, Zoneless Angular, TypeScript, Signal Forms, Timezone Dropdown, Secondary Calendars (Hijri, Jalali), SSR Compatible, Ionic DatePicker
|
|
940
|
+
- **Global & European SEO**: Optimized for worldwide developer discovery across North America, Europe (Germany, France, UK, Spain, Sweden, Netherlands, Poland), Asia (Japan, South Korea, China), and Latin America
|
|
941
|
+
- **Multi-language Support**: i18n support and hreflang meta tags for 15+ global languages and regional locales
|
|
942
|
+
- **Social & Community Visibility**: Rich Open Graph metadata, Twitter Cards, JSON-LD structured data (SoftwareApplication & Organization schema), and official [WhatsApp Channel](https://whatsapp.com/channel/0029Vb8PWpz1XquUOnGPUM2p) updates
|
|
943
|
+
- **Documentation**: Complete API documentation with live interactive code examples
|
|
944
|
+
- **Performance**: Optimized bundle size (~127KB) for fast initial page load and high Lighthouse SEO scores
|
|
956
945
|
|
|
957
946
|
## **👨💻 Author**
|
|
958
947
|
|
|
@@ -960,15 +949,20 @@ The hosted **[live demo](https://ngxsmk.github.io/ngxsmk-datepicker/)** build sh
|
|
|
960
949
|
|
|
961
950
|
- 📧 Email: [sachindilshan040@gmail.com](mailto:sachindilshan040@gmail.com)
|
|
962
951
|
- 🐙 GitHub: [@toozuuu](https://github.com/toozuuu)
|
|
952
|
+
- 💬 WhatsApp Channel: [NGXSMK Channel](https://whatsapp.com/channel/0029Vb8PWpz1XquUOnGPUM2p)
|
|
963
953
|
- 📦 NPM: [ngxsmk-datepicker](https://www.npmjs.com/package/ngxsmk-datepicker)
|
|
964
954
|
- 🌐 Website: [sachindilshan.com](https://www.sachindilshan.com/)
|
|
965
955
|
- 💼 LinkedIn: [sachindilshan](https://www.linkedin.com/in/sachindilshan/)
|
|
966
956
|
|
|
967
|
-
## **⭐ Support**
|
|
957
|
+
## **⭐ Community & Support**
|
|
958
|
+
|
|
959
|
+
Stay connected and receive updates, release announcements, and tips via our official WhatsApp Channel:
|
|
960
|
+
👉 **[Join WhatsApp Channel](https://whatsapp.com/channel/0029Vb8PWpz1XquUOnGPUM2p)**
|
|
968
961
|
|
|
969
962
|
If you find this library helpful, please consider:
|
|
970
963
|
|
|
971
964
|
- ⭐ **Starring** the repository
|
|
965
|
+
- 💬 **Joining** our [WhatsApp Channel](https://whatsapp.com/channel/0029Vb8PWpz1XquUOnGPUM2p)
|
|
972
966
|
- 🐛 **Reporting** bugs and issues
|
|
973
967
|
- 💡 **Suggesting** new features
|
|
974
968
|
- 🤝 **Contributing** code improvements
|