ngxsmk-datepicker 2.2.2 → 2.2.3
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 +1313 -1313
- package/docs/API.md +1 -1
- package/docs/COMPATIBILITY.md +1 -1
- package/docs/INTEGRATION.md +701 -701
- package/docs/IONIC_INTEGRATION.md +1 -1
- package/docs/IONIC_TESTING.md +1 -1
- package/docs/LOCALE-GUIDE.md +1 -1
- package/docs/PLUGIN-ARCHITECTURE.md +1 -1
- package/docs/SEO.md +1 -1
- package/docs/SSR-EXAMPLE.md +1 -1
- package/docs/THEME-TOKENS.md +1 -1
- package/docs/TIMEZONE.md +1 -1
- package/docs/extension-points.md +1 -1
- package/docs/signal-forms.md +1 -1
- package/docs/signals.md +1 -1
- package/docs/ssr.md +1 -1
- package/package.json +1 -8
- package/styles/ionic-integration.css +220 -220
- package/fesm2022/ngxsmk-datepicker.mjs +0 -14153
- package/types/ngxsmk-datepicker.d.ts +0 -2412
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Ionic Framework Integration Guide
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
This guide provides step-by-step instructions for integrating ngxsmk-datepicker with Ionic Angular applications.
|
|
6
6
|
|
package/docs/IONIC_TESTING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Ionic Integration Testing Guide
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
This document provides comprehensive testing instructions for verifying ngxsmk-datepicker compatibility with Ionic Framework.
|
|
6
6
|
|
package/docs/LOCALE-GUIDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Plugin Architecture
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
ngxsmk-datepicker features a powerful **plugin architecture** that allows you to extend and customize the component's behavior without modifying its core code. This architecture is built on a **hook-based system** that provides extension points throughout the component's lifecycle.
|
|
6
6
|
|
package/docs/SEO.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SEO Optimization Guide
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
This document outlines the SEO optimizations implemented for ngxsmk-datepicker to improve search engine visibility and discoverability.
|
|
6
6
|
|
package/docs/SSR-EXAMPLE.md
CHANGED
package/docs/THEME-TOKENS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Theme Tokens & CSS Custom Properties
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
Complete reference for all CSS custom properties (CSS variables) available in ngxsmk-datepicker.
|
|
6
6
|
|
package/docs/TIMEZONE.md
CHANGED
package/docs/extension-points.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Extension Points and Hooks
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
ngxsmk-datepicker provides comprehensive extension points through the `hooks` input, allowing you to customize rendering, validation, keyboard shortcuts, formatting, and event handling.
|
|
6
6
|
|
package/docs/signal-forms.md
CHANGED
package/docs/signals.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Signals Integration Guide
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
ngxsmk-datepicker is fully compatible with Angular Signals, providing seamless integration with both traditional reactive forms and modern signal-based patterns.
|
|
6
6
|
|
package/docs/ssr.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Server-Side Rendering (SSR) Guide
|
|
2
2
|
|
|
3
|
-
**Last updated:** March
|
|
3
|
+
**Last updated:** March 9, 2026 · **Current stable:** v2.2.3
|
|
4
4
|
|
|
5
5
|
ngxsmk-datepicker is fully compatible with Angular Universal and server-side rendering. This guide covers SSR setup, best practices, and troubleshooting.
|
|
6
6
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngxsmk-datepicker",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.3",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "Sachin Dilshan",
|
|
6
6
|
"url": "https://www.linkedin.com/in/sachindilshan/"
|
|
@@ -81,13 +81,6 @@
|
|
|
81
81
|
"exports": {
|
|
82
82
|
"./styles/*": {
|
|
83
83
|
"default": "./styles/*"
|
|
84
|
-
},
|
|
85
|
-
"./package.json": {
|
|
86
|
-
"default": "./package.json"
|
|
87
|
-
},
|
|
88
|
-
".": {
|
|
89
|
-
"types": "./types/ngxsmk-datepicker.d.ts",
|
|
90
|
-
"default": "./fesm2022/ngxsmk-datepicker.mjs"
|
|
91
84
|
}
|
|
92
85
|
}
|
|
93
86
|
}
|
|
@@ -1,220 +1,220 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ionic Framework Integration Styles
|
|
3
|
-
*
|
|
4
|
-
* This file contains CSS fixes and overrides to ensure ngxsmk-datepicker
|
|
5
|
-
* works correctly with Ionic Angular applications.
|
|
6
|
-
*
|
|
7
|
-
* Import this file in your global styles or Ionic app stylesheet:
|
|
8
|
-
* @import 'ngxsmk-datepicker/styles/ionic-integration.css';
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/* ============================================
|
|
12
|
-
1. Z-INDEX CONFLICTS FIX
|
|
13
|
-
============================================ */
|
|
14
|
-
|
|
15
|
-
/* Default z-index for Ionic compatibility */
|
|
16
|
-
ion-app ngxsmk-datepicker {
|
|
17
|
-
--datepicker-z-index-base: 10001;
|
|
18
|
-
/* Below ion-alert (20001), above ion-popover (10000) */
|
|
19
|
-
--datepicker-z-index-backdrop: 10000;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/* When inside ion-modal, use higher z-index */
|
|
23
|
-
ion-modal ngxsmk-datepicker {
|
|
24
|
-
--datepicker-z-index-base: 20001;
|
|
25
|
-
/* Above modal backdrop (20000) */
|
|
26
|
-
--datepicker-z-index-backdrop: 20000;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/* When inside ion-popover, use appropriate z-index */
|
|
30
|
-
ion-popover ngxsmk-datepicker {
|
|
31
|
-
--datepicker-z-index-base: 10001;
|
|
32
|
-
/* Above popover (10000) */
|
|
33
|
-
--datepicker-z-index-backdrop: 10000;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/* ============================================
|
|
37
|
-
2. BODY SCROLL LOCK DISABLE
|
|
38
|
-
============================================ */
|
|
39
|
-
|
|
40
|
-
/* Disable body scroll lock in Ionic apps */
|
|
41
|
-
ion-app body:has(.ngxsmk-datepicker-wrapper.ngxsmk-calendar-open:not(.ngxsmk-inline-mode)),
|
|
42
|
-
ion-app html:has(.ngxsmk-datepicker-wrapper.ngxsmk-calendar-open:not(.ngxsmk-inline-mode)) {
|
|
43
|
-
overflow: auto !important;
|
|
44
|
-
position: static !important;
|
|
45
|
-
width: auto !important;
|
|
46
|
-
height: auto !important;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/* Use Ionic's scroll lock instead */
|
|
50
|
-
ion-content:has(.ngxsmk-datepicker-wrapper.ngxsmk-calendar-open:not(.ngxsmk-inline-mode)) {
|
|
51
|
-
--overflow: hidden;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/* ============================================
|
|
55
|
-
3. POSITIONING IN ION-CONTENT
|
|
56
|
-
============================================ */
|
|
57
|
-
|
|
58
|
-
/* Fix positioning when inside ion-content */
|
|
59
|
-
ion-content .ngxsmk-popover-container.ngxsmk-popover-open:not(.ngxsmk-inline-container) {
|
|
60
|
-
/* Use absolute positioning relative to ion-content */
|
|
61
|
-
position: absolute !important;
|
|
62
|
-
/* Position will be calculated by JavaScript or use inline mode */
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/* Alternative: Use inline mode in ion-content (recommended) */
|
|
66
|
-
|
|
67
|
-
/* ============================================
|
|
68
|
-
4. SAFE AREA INSETS (iOS)
|
|
69
|
-
============================================ */
|
|
70
|
-
|
|
71
|
-
/* Bottom sheet with safe area insets */
|
|
72
|
-
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-bottom-sheet:not(.ngxsmk-inline-container) {
|
|
73
|
-
padding-bottom: env(safe-area-inset-bottom) !important;
|
|
74
|
-
max-height: calc(90vh - env(safe-area-inset-bottom)) !important;
|
|
75
|
-
max-height: calc(90dvh - env(safe-area-inset-bottom)) !important;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/* Fullscreen with safe area insets */
|
|
79
|
-
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-fullscreen:not(.ngxsmk-inline-container) {
|
|
80
|
-
padding-top: env(safe-area-inset-top) !important;
|
|
81
|
-
padding-bottom: env(safe-area-inset-bottom) !important;
|
|
82
|
-
height: calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
|
|
83
|
-
height: calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/* ============================================
|
|
87
|
-
5. CSS VARIABLE MAPPING (Ionic Theming)
|
|
88
|
-
============================================ */
|
|
89
|
-
|
|
90
|
-
/* Map Ionic theme variables to datepicker variables */
|
|
91
|
-
ion-app ngxsmk-datepicker {
|
|
92
|
-
--datepicker-primary-color: var(--ion-color-primary, #6d28d9);
|
|
93
|
-
--datepicker-primary-contrast: var(--ion-color-primary-contrast, #ffffff);
|
|
94
|
-
--datepicker-background: var(--ion-background-color, #ffffff);
|
|
95
|
-
--datepicker-text-color: var(--ion-text-color, #1f2937);
|
|
96
|
-
--datepicker-subtle-text-color: var(--ion-text-color-step-400, #6b7280);
|
|
97
|
-
--datepicker-border-color: var(--ion-border-color, #e5e7eb);
|
|
98
|
-
--datepicker-hover-background: var(--ion-color-light, #f3f4f6);
|
|
99
|
-
--datepicker-range-background: var(--ion-color-primary-tint, #f5f3ff);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* Dark theme mapping */
|
|
103
|
-
ion-app.ion-theme-dark ngxsmk-datepicker {
|
|
104
|
-
--datepicker-background: var(--ion-background-color, #1f2937);
|
|
105
|
-
--datepicker-text-color: var(--ion-text-color, #f3f4f6);
|
|
106
|
-
--datepicker-subtle-text-color: var(--ion-text-color-step-400, #9ca3af);
|
|
107
|
-
--datepicker-border-color: var(--ion-border-color, #374151);
|
|
108
|
-
--datepicker-hover-background: var(--ion-color-step-100, #374151);
|
|
109
|
-
--datepicker-range-background: rgba(var(--ion-color-primary-rgb), 0.15);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/* ============================================
|
|
113
|
-
6. TOUCH GESTURE COMPATIBILITY
|
|
114
|
-
============================================ */
|
|
115
|
-
|
|
116
|
-
/* Allow Ionic gestures to work when datepicker is in inline mode */
|
|
117
|
-
|
|
118
|
-
/* Prevent touch event conflicts in popover mode */
|
|
119
|
-
.ngxsmk-popover-container.ngxsmk-popover-open:not(.ngxsmk-inline-container) {
|
|
120
|
-
/* Ionic gestures may be blocked - use inline mode instead */
|
|
121
|
-
touch-action: pan-y;
|
|
122
|
-
/* Allow vertical scrolling */
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/* ============================================
|
|
126
|
-
7. FOCUS MANAGEMENT
|
|
127
|
-
============================================ */
|
|
128
|
-
|
|
129
|
-
/* When inside ion-modal, let Ionic handle focus */
|
|
130
|
-
|
|
131
|
-
/* ============================================
|
|
132
|
-
8. KEYBOARD BEHAVIOR
|
|
133
|
-
============================================ */
|
|
134
|
-
|
|
135
|
-
/* Prevent keyboard from covering datepicker on iOS */
|
|
136
|
-
@supports (-webkit-touch-callout: none) {
|
|
137
|
-
/* iOS Safari */
|
|
138
|
-
.ngxsmk-popover-container.ngxsmk-popover-open:not(.ngxsmk-inline-container) {
|
|
139
|
-
/* Adjust position when keyboard is visible */
|
|
140
|
-
max-height: calc(100dvh - env(keyboard-inset-height, 0px)) !important;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/* ============================================
|
|
145
|
-
9. SHADOW DOM SUPPORT
|
|
146
|
-
============================================ */
|
|
147
|
-
|
|
148
|
-
/* Ensure variables cascade into Shadow DOM */
|
|
149
|
-
|
|
150
|
-
/* Global variables for Shadow DOM */
|
|
151
|
-
:root {
|
|
152
|
-
--datepicker-primary-color: var(--ion-color-primary, #6d28d9);
|
|
153
|
-
--datepicker-background: var(--ion-background-color, #ffffff);
|
|
154
|
-
--datepicker-text-color: var(--ion-text-color, #1f2937);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/* ============================================
|
|
158
|
-
10. ION-ITEM INTEGRATION
|
|
159
|
-
============================================ */
|
|
160
|
-
|
|
161
|
-
/* Better integration with ion-item */
|
|
162
|
-
ion-item ngxsmk-datepicker {
|
|
163
|
-
--padding-start: 0;
|
|
164
|
-
--padding-end: 0;
|
|
165
|
-
--inner-padding-end: 0;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
ion-item ngxsmk-datepicker .ngxsmk-input-group {
|
|
169
|
-
width: 100%;
|
|
170
|
-
border: none;
|
|
171
|
-
background: transparent;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/* ============================================
|
|
175
|
-
11. RESPONSIVE BEHAVIOR
|
|
176
|
-
============================================ */
|
|
177
|
-
|
|
178
|
-
/* On mobile, prefer inline mode in Ionic */
|
|
179
|
-
|
|
180
|
-
/* ============================================
|
|
181
|
-
12. CAPACITOR SPECIFIC
|
|
182
|
-
============================================ */
|
|
183
|
-
|
|
184
|
-
/* Capacitor status bar spacing */
|
|
185
|
-
@supports (padding-top: env(safe-area-inset-top)) {
|
|
186
|
-
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-fullscreen:not(.ngxsmk-inline-container) {
|
|
187
|
-
padding-top: calc(env(safe-area-inset-top) + var(--ion-safe-area-top, 0px)) !important;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/* ============================================
|
|
192
|
-
13. POSITIONING FIXES (Mobile)
|
|
193
|
-
============================================ */
|
|
194
|
-
|
|
195
|
-
/* Bottom Sheet Positioning */
|
|
196
|
-
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-bottom-sheet:not(.ngxsmk-inline-container) {
|
|
197
|
-
top: auto !important;
|
|
198
|
-
left: 0 !important;
|
|
199
|
-
right: 0 !important;
|
|
200
|
-
bottom: 0 !important;
|
|
201
|
-
transform: none !important;
|
|
202
|
-
width: 100% !important;
|
|
203
|
-
max-width: 100% !important;
|
|
204
|
-
border-radius: 20px 20px 0 0 !important;
|
|
205
|
-
margin: 0 !important;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/* Fullscreen Positioning */
|
|
209
|
-
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-fullscreen:not(.ngxsmk-inline-container) {
|
|
210
|
-
top: 0 !important;
|
|
211
|
-
left: 0 !important;
|
|
212
|
-
right: 0 !important;
|
|
213
|
-
bottom: 0 !important;
|
|
214
|
-
transform: none !important;
|
|
215
|
-
width: 100% !important;
|
|
216
|
-
height: 100% !important;
|
|
217
|
-
max-width: 100% !important;
|
|
218
|
-
border-radius: 0 !important;
|
|
219
|
-
margin: 0 !important;
|
|
220
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Ionic Framework Integration Styles
|
|
3
|
+
*
|
|
4
|
+
* This file contains CSS fixes and overrides to ensure ngxsmk-datepicker
|
|
5
|
+
* works correctly with Ionic Angular applications.
|
|
6
|
+
*
|
|
7
|
+
* Import this file in your global styles or Ionic app stylesheet:
|
|
8
|
+
* @import 'ngxsmk-datepicker/styles/ionic-integration.css';
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* ============================================
|
|
12
|
+
1. Z-INDEX CONFLICTS FIX
|
|
13
|
+
============================================ */
|
|
14
|
+
|
|
15
|
+
/* Default z-index for Ionic compatibility */
|
|
16
|
+
ion-app ngxsmk-datepicker {
|
|
17
|
+
--datepicker-z-index-base: 10001;
|
|
18
|
+
/* Below ion-alert (20001), above ion-popover (10000) */
|
|
19
|
+
--datepicker-z-index-backdrop: 10000;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* When inside ion-modal, use higher z-index */
|
|
23
|
+
ion-modal ngxsmk-datepicker {
|
|
24
|
+
--datepicker-z-index-base: 20001;
|
|
25
|
+
/* Above modal backdrop (20000) */
|
|
26
|
+
--datepicker-z-index-backdrop: 20000;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* When inside ion-popover, use appropriate z-index */
|
|
30
|
+
ion-popover ngxsmk-datepicker {
|
|
31
|
+
--datepicker-z-index-base: 10001;
|
|
32
|
+
/* Above popover (10000) */
|
|
33
|
+
--datepicker-z-index-backdrop: 10000;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* ============================================
|
|
37
|
+
2. BODY SCROLL LOCK DISABLE
|
|
38
|
+
============================================ */
|
|
39
|
+
|
|
40
|
+
/* Disable body scroll lock in Ionic apps */
|
|
41
|
+
ion-app body:has(.ngxsmk-datepicker-wrapper.ngxsmk-calendar-open:not(.ngxsmk-inline-mode)),
|
|
42
|
+
ion-app html:has(.ngxsmk-datepicker-wrapper.ngxsmk-calendar-open:not(.ngxsmk-inline-mode)) {
|
|
43
|
+
overflow: auto !important;
|
|
44
|
+
position: static !important;
|
|
45
|
+
width: auto !important;
|
|
46
|
+
height: auto !important;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Use Ionic's scroll lock instead */
|
|
50
|
+
ion-content:has(.ngxsmk-datepicker-wrapper.ngxsmk-calendar-open:not(.ngxsmk-inline-mode)) {
|
|
51
|
+
--overflow: hidden;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ============================================
|
|
55
|
+
3. POSITIONING IN ION-CONTENT
|
|
56
|
+
============================================ */
|
|
57
|
+
|
|
58
|
+
/* Fix positioning when inside ion-content */
|
|
59
|
+
ion-content .ngxsmk-popover-container.ngxsmk-popover-open:not(.ngxsmk-inline-container) {
|
|
60
|
+
/* Use absolute positioning relative to ion-content */
|
|
61
|
+
position: absolute !important;
|
|
62
|
+
/* Position will be calculated by JavaScript or use inline mode */
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Alternative: Use inline mode in ion-content (recommended) */
|
|
66
|
+
|
|
67
|
+
/* ============================================
|
|
68
|
+
4. SAFE AREA INSETS (iOS)
|
|
69
|
+
============================================ */
|
|
70
|
+
|
|
71
|
+
/* Bottom sheet with safe area insets */
|
|
72
|
+
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-bottom-sheet:not(.ngxsmk-inline-container) {
|
|
73
|
+
padding-bottom: env(safe-area-inset-bottom) !important;
|
|
74
|
+
max-height: calc(90vh - env(safe-area-inset-bottom)) !important;
|
|
75
|
+
max-height: calc(90dvh - env(safe-area-inset-bottom)) !important;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* Fullscreen with safe area insets */
|
|
79
|
+
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-fullscreen:not(.ngxsmk-inline-container) {
|
|
80
|
+
padding-top: env(safe-area-inset-top) !important;
|
|
81
|
+
padding-bottom: env(safe-area-inset-bottom) !important;
|
|
82
|
+
height: calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
|
|
83
|
+
height: calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* ============================================
|
|
87
|
+
5. CSS VARIABLE MAPPING (Ionic Theming)
|
|
88
|
+
============================================ */
|
|
89
|
+
|
|
90
|
+
/* Map Ionic theme variables to datepicker variables */
|
|
91
|
+
ion-app ngxsmk-datepicker {
|
|
92
|
+
--datepicker-primary-color: var(--ion-color-primary, #6d28d9);
|
|
93
|
+
--datepicker-primary-contrast: var(--ion-color-primary-contrast, #ffffff);
|
|
94
|
+
--datepicker-background: var(--ion-background-color, #ffffff);
|
|
95
|
+
--datepicker-text-color: var(--ion-text-color, #1f2937);
|
|
96
|
+
--datepicker-subtle-text-color: var(--ion-text-color-step-400, #6b7280);
|
|
97
|
+
--datepicker-border-color: var(--ion-border-color, #e5e7eb);
|
|
98
|
+
--datepicker-hover-background: var(--ion-color-light, #f3f4f6);
|
|
99
|
+
--datepicker-range-background: var(--ion-color-primary-tint, #f5f3ff);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Dark theme mapping */
|
|
103
|
+
ion-app.ion-theme-dark ngxsmk-datepicker {
|
|
104
|
+
--datepicker-background: var(--ion-background-color, #1f2937);
|
|
105
|
+
--datepicker-text-color: var(--ion-text-color, #f3f4f6);
|
|
106
|
+
--datepicker-subtle-text-color: var(--ion-text-color-step-400, #9ca3af);
|
|
107
|
+
--datepicker-border-color: var(--ion-border-color, #374151);
|
|
108
|
+
--datepicker-hover-background: var(--ion-color-step-100, #374151);
|
|
109
|
+
--datepicker-range-background: rgba(var(--ion-color-primary-rgb), 0.15);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* ============================================
|
|
113
|
+
6. TOUCH GESTURE COMPATIBILITY
|
|
114
|
+
============================================ */
|
|
115
|
+
|
|
116
|
+
/* Allow Ionic gestures to work when datepicker is in inline mode */
|
|
117
|
+
|
|
118
|
+
/* Prevent touch event conflicts in popover mode */
|
|
119
|
+
.ngxsmk-popover-container.ngxsmk-popover-open:not(.ngxsmk-inline-container) {
|
|
120
|
+
/* Ionic gestures may be blocked - use inline mode instead */
|
|
121
|
+
touch-action: pan-y;
|
|
122
|
+
/* Allow vertical scrolling */
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* ============================================
|
|
126
|
+
7. FOCUS MANAGEMENT
|
|
127
|
+
============================================ */
|
|
128
|
+
|
|
129
|
+
/* When inside ion-modal, let Ionic handle focus */
|
|
130
|
+
|
|
131
|
+
/* ============================================
|
|
132
|
+
8. KEYBOARD BEHAVIOR
|
|
133
|
+
============================================ */
|
|
134
|
+
|
|
135
|
+
/* Prevent keyboard from covering datepicker on iOS */
|
|
136
|
+
@supports (-webkit-touch-callout: none) {
|
|
137
|
+
/* iOS Safari */
|
|
138
|
+
.ngxsmk-popover-container.ngxsmk-popover-open:not(.ngxsmk-inline-container) {
|
|
139
|
+
/* Adjust position when keyboard is visible */
|
|
140
|
+
max-height: calc(100dvh - env(keyboard-inset-height, 0px)) !important;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* ============================================
|
|
145
|
+
9. SHADOW DOM SUPPORT
|
|
146
|
+
============================================ */
|
|
147
|
+
|
|
148
|
+
/* Ensure variables cascade into Shadow DOM */
|
|
149
|
+
|
|
150
|
+
/* Global variables for Shadow DOM */
|
|
151
|
+
:root {
|
|
152
|
+
--datepicker-primary-color: var(--ion-color-primary, #6d28d9);
|
|
153
|
+
--datepicker-background: var(--ion-background-color, #ffffff);
|
|
154
|
+
--datepicker-text-color: var(--ion-text-color, #1f2937);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* ============================================
|
|
158
|
+
10. ION-ITEM INTEGRATION
|
|
159
|
+
============================================ */
|
|
160
|
+
|
|
161
|
+
/* Better integration with ion-item */
|
|
162
|
+
ion-item ngxsmk-datepicker {
|
|
163
|
+
--padding-start: 0;
|
|
164
|
+
--padding-end: 0;
|
|
165
|
+
--inner-padding-end: 0;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
ion-item ngxsmk-datepicker .ngxsmk-input-group {
|
|
169
|
+
width: 100%;
|
|
170
|
+
border: none;
|
|
171
|
+
background: transparent;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* ============================================
|
|
175
|
+
11. RESPONSIVE BEHAVIOR
|
|
176
|
+
============================================ */
|
|
177
|
+
|
|
178
|
+
/* On mobile, prefer inline mode in Ionic */
|
|
179
|
+
|
|
180
|
+
/* ============================================
|
|
181
|
+
12. CAPACITOR SPECIFIC
|
|
182
|
+
============================================ */
|
|
183
|
+
|
|
184
|
+
/* Capacitor status bar spacing */
|
|
185
|
+
@supports (padding-top: env(safe-area-inset-top)) {
|
|
186
|
+
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-fullscreen:not(.ngxsmk-inline-container) {
|
|
187
|
+
padding-top: calc(env(safe-area-inset-top) + var(--ion-safe-area-top, 0px)) !important;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* ============================================
|
|
192
|
+
13. POSITIONING FIXES (Mobile)
|
|
193
|
+
============================================ */
|
|
194
|
+
|
|
195
|
+
/* Bottom Sheet Positioning */
|
|
196
|
+
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-bottom-sheet:not(.ngxsmk-inline-container) {
|
|
197
|
+
top: auto !important;
|
|
198
|
+
left: 0 !important;
|
|
199
|
+
right: 0 !important;
|
|
200
|
+
bottom: 0 !important;
|
|
201
|
+
transform: none !important;
|
|
202
|
+
width: 100% !important;
|
|
203
|
+
max-width: 100% !important;
|
|
204
|
+
border-radius: 20px 20px 0 0 !important;
|
|
205
|
+
margin: 0 !important;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/* Fullscreen Positioning */
|
|
209
|
+
.ngxsmk-popover-container.ngxsmk-popover-open.ngxsmk-fullscreen:not(.ngxsmk-inline-container) {
|
|
210
|
+
top: 0 !important;
|
|
211
|
+
left: 0 !important;
|
|
212
|
+
right: 0 !important;
|
|
213
|
+
bottom: 0 !important;
|
|
214
|
+
transform: none !important;
|
|
215
|
+
width: 100% !important;
|
|
216
|
+
height: 100% !important;
|
|
217
|
+
max-width: 100% !important;
|
|
218
|
+
border-radius: 0 !important;
|
|
219
|
+
margin: 0 !important;
|
|
220
|
+
}
|