UNPKG

ngxsmk-datepicker

Version:

<!-- SEO Keywords: Angular DatePicker, Angular Date Range Picker, Lightweight Calendar Component, Angular Signals DatePicker, SSR Ready DatePicker, Zoneless Angular, A11y DatePicker, Mobile-Friendly DatePicker, Ionic DatePicker Meta Description: The

228 lines (170 loc) 6.06 kB
# Ionic Framework Integration Guide **Last updated:** March 21, 2026 · **Current stable:** v2.2.8 This guide provides step-by-step instructions for integrating ngxsmk-datepicker with Ionic Angular applications. ## Quick Start ### 1. Install Dependencies ```bash npm install ngxsmk-datepicker @ionic/angular ``` ### 2. Import Ionic Integration Styles Add to your `global.scss` or main stylesheet: ```scss @import 'ngxsmk-datepicker/styles/ionic-integration.css'; ``` Or import directly in your component: ```typescript import 'ngxsmk-datepicker/styles/ionic-integration.css'; ``` ### 3. Use Inline Mode (Recommended) ```typescript import { Component } from '@angular/core'; import { NgxsmkDatepickerComponent } from 'ngxsmk-datepicker'; import { IonContent, IonItem, IonLabel } from '@ionic/angular/standalone'; @Component({ selector: 'app-datepicker', standalone: true, imports: [NgxsmkDatepickerComponent, IonContent, IonItem, IonLabel], template: ` <ion-content> <ion-item> <ion-label>Select Date</ion-label> <ngxsmk-datepicker [inline]="true" mode="single" [locale]="'en-US'"> </ngxsmk-datepicker> </ion-item> </ion-content> ` }) export class DatepickerPage {} ``` ## Configuration Options ### Disable Focus Trap (for Ionic Modals) When using datepicker inside `ion-modal`, disable focus trapping to avoid conflicts: ```typescript <ngxsmk-datepicker [inline]="true" [disableFocusTrap]="true" mode="single"> </ngxsmk-datepicker> ``` ### Ionic Theme Integration The integration styles automatically map Ionic theme variables: - `--ion-color-primary``--datepicker-primary-color` - `--ion-background-color``--datepicker-background` - `--ion-text-color``--datepicker-text-color` - `--ion-border-color``--datepicker-border-color` ## Usage Patterns ### Pattern 1: Inline in ion-content (Recommended) ```typescript <ion-content> <ion-item> <ion-label>Date</ion-label> <ngxsmk-datepicker [inline]="true" mode="single"></ngxsmk-datepicker> </ion-item> </ion-content> ``` **Pros**: No z-index conflicts, no scroll locking issues, works perfectly with Ionic gestures ### Pattern 2: Inside ion-modal ```typescript async openDatepickerModal() { const modal = await this.modalController.create({ component: DatepickerModalPage, cssClass: 'datepicker-modal' }); return await modal.present(); } ``` ```typescript // DatepickerModalPage <ion-header> <ion-toolbar> <ion-title>Select Date</ion-title> </ion-toolbar> </ion-header> <ion-content> <ngxsmk-datepicker [inline]="true" [disableFocusTrap]="true" mode="single"> </ngxsmk-datepicker> </ion-content> ``` **Pros**: Native Ionic modal behavior, handles safe areas automatically ### Pattern 3: Inside ion-popover ```typescript async openDatepickerPopover(event: Event) { const popover = await this.popoverController.create({ component: DatepickerPopoverPage, event: event, cssClass: 'datepicker-popover' }); return await popover.present(); } ``` **Note**: Use `[inline]="true"` and `[disableFocusTrap]="true"` inside popovers. ## Testing Checklist ### iOS Safari - [ ] Datepicker opens correctly in `ion-content` - [ ] Datepicker opens correctly in `ion-modal` - [ ] Safe area insets are respected (notch, home indicator) - [ ] Keyboard doesn't cover datepicker - [ ] Swipe gestures work (swipe-to-go-back) - [ ] Pull-to-refresh works - [ ] Focus management works correctly - [ ] No layout shifts when keyboard opens/closes ### Android Chrome - [ ] Datepicker opens correctly in `ion-content` - [ ] Datepicker opens correctly in `ion-modal` - [ ] Keyboard doesn't cause layout issues - [ ] Swipe gestures work - [ ] Focus management works correctly - [ ] No double scroll behavior ### Ionic Web - [ ] Datepicker works in browser - [ ] Z-index conflicts resolved - [ ] Positioning correct in all scenarios - [ ] SSR works correctly ## Troubleshooting ### Issue: Datepicker appears behind ion-modal backdrop **Solution**: Use `[inline]="true"` or import `ionic-integration.css` ### Issue: Body scroll is locked when datepicker opens **Solution**: Import `ionic-integration.css` which disables body scroll lock in Ionic apps ### Issue: Touch gestures don't work (swipe-to-go-back) **Solution**: Use `[inline]="true"` mode to avoid touch event conflicts ### Issue: Datepicker doesn't respect safe areas on iOS **Solution**: Safe area insets are automatically added in `ionic-integration.css` ### Issue: Focus jumps unexpectedly **Solution**: Set `[disableFocusTrap]="true"` when inside Ionic overlays ## Capacitor Integration For Capacitor apps, handle keyboard events: ```typescript import { Capacitor } from '@capacitor/core'; import { Keyboard } from '@capacitor/keyboard'; @Component({ // ... }) export class DatepickerPage { ngOnInit() { if (Capacitor.isNativePlatform()) { Keyboard.addListener('keyboardWillShow', () => { // Adjust datepicker position if needed }); Keyboard.addListener('keyboardWillHide', () => { // Restore datepicker position }); } } } ``` ## Best Practices 1. **Always use `[inline]="true"`** in Ionic apps to avoid most compatibility issues 2. **Import `ionic-integration.css`** for automatic fixes 3. **Use `[disableFocusTrap]="true"`** inside `ion-modal` and `ion-popover` 4. **Test on real devices** - iOS and Android behavior differs from browsers 5. **Use `ion-modal`** for popover-style datepickers instead of native popover mode ## Additional Resources - [Ionic Overlay System](https://ionicframework.com/docs/utilities/overlays) - [Ionic Theming](https://ionicframework.com/docs/theming/basics) - [Capacitor Keyboard Plugin](https://capacitorjs.com/docs/apis/keyboard)