ngxsmk-datepicker 2.3.1 → 2.4.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.
@@ -1,60 +0,0 @@
1
- # Feature scoping: Enhanced Localization & Enhanced Time Selection
2
-
3
- **Last updated:** May 2, 2026 · Aligns with [ROADMAP.md](../../../ROADMAP.md) (Current Focus).
4
-
5
- This document defines **concrete inputs and behaviors** for roadmap items *Enhanced Localization* and *Enhanced Time Selection* so implementations can proceed without API ambiguity. Until shipped, treat these as **design proposals**; minor renames may occur in minor releases with changelog notes.
6
-
7
- ---
8
-
9
- ## Enhanced Localization
10
-
11
- ### Existing building blocks
12
-
13
- - `@Input() locale: string` — BCP 47 locale tag.
14
- - `@Input() displayFormat` / `dateFormatPattern` — custom format strings (see README).
15
- - `@Input() weekStart` — override first day of week.
16
- - `@Input() rtl` — explicit RTL override.
17
-
18
- ### Proposed additions (backlog)
19
-
20
- | Input | Type | Purpose |
21
- |-------|------|---------|
22
- | `numberingSystem` | `'latn' \| 'arab' \| 'arabext' \| ... \| undefined` | Pass-through to `Intl` / formatting where supported; `undefined` = locale default. |
23
- | `calendarPreference` | `'gregory' \| 'iso8601' \| undefined` | Opt-in calendar system for display (browser capability dependent). |
24
- | `currencyDisplayForAddons` | `'symbol' \| 'narrowSymbol' \| 'code'` | If future price/booking templates show currency beside dates. |
25
-
26
- ### Non-input work
27
-
28
- - Expand **preset format tokens** documentation table (mirror Angular `DatePipe` where aligned).
29
- - Optional **`Intl.NumberFormat`** wrapper for footer chips / custom templates.
30
-
31
- ---
32
-
33
- ## Enhanced Time Selection
34
-
35
- ### Existing building blocks
36
-
37
- - `@Input() showTime`, `showSeconds`, `use24Hour`, `minuteInterval`, `secondInterval`
38
- - `@Input() timezone` — IANA zone for “today” and conversions ([timezone.utils](../src/lib/utils/timezone.utils.ts))
39
- - `@Input() timeRangeMode` — paired times in range mode
40
- - `@Input() mobileTimePickerStyle`
41
-
42
- ### Proposed additions (backlog)
43
-
44
- | Input | Type | Purpose |
45
- |-------|------|---------|
46
- | `timeZoneDisplay` | `'short' \| 'long' \| 'shortOffset' \| 'longOffset'` | How zone appears next to time when `timezone` is set (Intl-dependent). |
47
- | `showTimezoneSelector` | `boolean` | Future: opt-in UI to pick among a bounded list of zones (requires design). |
48
- | `timeStepRounding` | `'floor' \| 'ceil' \| 'nearest'` | When snapping typed times to `minuteInterval`. |
49
-
50
- ### Behaviors to clarify in docs
51
-
52
- - **Range + time**: document ordering of date vs. time commit when `showTime` is true (single source of truth in component today).
53
- - **DST transitions**: document that normalization uses the configured `timezone` utilities.
54
-
55
- ---
56
-
57
- ## Versioning
58
-
59
- - New `@Input()` names land in **minor** releases with defaults preserving current behavior.
60
- - Breaking renames only in **major** releases per [MIGRATION.md](../../../MIGRATION.md).
@@ -1,148 +0,0 @@
1
- # Ionic Integration Testing Guide
2
-
3
- **Last updated:** June 3, 2026 - **Current stable:** v2.3.1
4
-
5
- This document provides comprehensive testing instructions for verifying ngxsmk-datepicker compatibility with Ionic Framework.
6
-
7
- ## Automated Tests
8
-
9
- ### E2E Tests
10
-
11
- Run the Ionic integration E2E tests:
12
-
13
- ```bash
14
- npm run e2e -- e2e/ionic-integration.spec.ts
15
- ```
16
-
17
- ### Test Coverage
18
-
19
- The E2E tests cover:
20
- - Focus management
21
- - Keyboard behavior
22
- - ion-modal integration
23
- - ion-popover integration
24
- - Scroll behavior
25
- - SSR compatibility
26
- - Safe area insets
27
-
28
- ## Manual Testing
29
-
30
- See `e2e/ionic-test-manual.md` for detailed manual testing instructions.
31
-
32
- ## Test Components
33
-
34
- ### Using the Test Component
35
-
36
- 1. **Add to your Ionic app**:
37
- ```typescript
38
- import { IonicTestComponent } from './ionic-test/ionic-test.component';
39
-
40
- @Component({
41
- imports: [IonicTestComponent],
42
- template: '<app-ionic-test></app-ionic-test>'
43
- })
44
- ```
45
-
46
- 2. **Add route**:
47
- ```typescript
48
- { path: 'ionic-test', component: IonicTestComponent }
49
- ```
50
-
51
- 3. **Navigate to test page** and follow manual testing guide
52
-
53
- ## Test Scenarios Summary
54
-
55
- ### ✅ Focus Management
56
- - **Test**: Verify focus trapping doesn't conflict with Ionic
57
- - **Status**: Automated + Manual testing required
58
- - **Files**: `e2e/ionic-integration.spec.ts` (Focus Management section)
59
-
60
- ### ✅ Keyboard Behavior
61
- - **Test**: Verify keyboard show/hide on iOS and Android
62
- - **Status**: Automated + Manual testing required
63
- - **Files**: `e2e/ionic-integration.spec.ts` (Keyboard Behavior section)
64
-
65
- ### ✅ ion-modal Integration
66
- - **Test**: Verify datepicker works inside Ionic modals
67
- - **Status**: Automated + Manual testing required
68
- - **Files**: `e2e/ionic-integration.spec.ts` (ion-modal Integration section)
69
-
70
- ### ✅ ion-popover Integration
71
- - **Test**: Verify datepicker works inside Ionic popovers
72
- - **Status**: Automated + Manual testing required
73
- - **Files**: `e2e/ionic-integration.spec.ts` (ion-popover Integration section)
74
-
75
- ### ✅ Scroll Behavior
76
- - **Test**: Verify scrolling works correctly in ion-content
77
- - **Status**: Automated + Manual testing required
78
- - **Files**: `e2e/ionic-integration.spec.ts` (Scroll Behavior section)
79
-
80
- ### ✅ SSR Compatibility
81
- - **Test**: Verify server-side rendering works with Ionic
82
- - **Status**: Automated + Manual testing required
83
- - **Files**: `e2e/ionic-integration.spec.ts` (SSR Compatibility section)
84
-
85
- ## Running Tests
86
-
87
- ### All Tests
88
- ```bash
89
- npm run e2e
90
- ```
91
-
92
- ### Specific Test File
93
- ```bash
94
- npx playwright test e2e/ionic-integration.spec.ts
95
- ```
96
-
97
- ### Specific Test
98
- ```bash
99
- npx playwright test e2e/ionic-integration.spec.ts -g "Focus Management"
100
- ```
101
-
102
- ### Mobile Viewport
103
- ```bash
104
- npx playwright test e2e/ionic-integration.spec.ts --project="Mobile Chrome"
105
- ```
106
-
107
- ### iOS Safari
108
- ```bash
109
- npx playwright test e2e/ionic-integration.spec.ts --project="Mobile Safari"
110
- ```
111
-
112
- ## Test Results
113
-
114
- After running tests, check:
115
- - Test report: `test-results/`
116
- - Screenshots: `test-results/` (on failure)
117
- - Videos: `test-results/` (on failure)
118
- - HTML report: `playwright-report/`
119
-
120
- ## Continuous Integration
121
-
122
- Add to your CI pipeline:
123
-
124
- ```yaml
125
- # .github/workflows/test-ionic.yml
126
- name: Ionic Integration Tests
127
-
128
- on: [push, pull_request]
129
-
130
- jobs:
131
- test:
132
- runs-on: ubuntu-latest
133
- steps:
134
- - uses: actions/checkout@v3
135
- - uses: actions/setup-node@v3
136
- - run: npm install
137
- - run: npm run e2e -- e2e/ionic-integration.spec.ts
138
- ```
139
-
140
- ## Next Steps
141
-
142
- 1. **Run automated tests** to verify basic functionality
143
- 2. **Perform manual testing** on real devices
144
- 3. **Test in your Ionic app** with real use cases
145
- 4. **Report issues** with detailed information
146
-
147
-
148
-
@@ -1,38 +0,0 @@
1
- # Refactor plan: thin `NgxsmkDatepickerComponent`
2
-
3
- **Last updated:** May 2, 2026
4
-
5
- This plan operationalizes [IMPROVEMENT_REPORT.md](../../IMPROVEMENT_REPORT.md) items **1.1**–**1.6** without blocking feature work. Phases are incremental and test-backed.
6
-
7
- ## Goals
8
-
9
- - Move orchestration of calendar **generation** and **month arrays** behind `CalendarGenerationService` (already exists—expand responsibilities).
10
- - Move **input ↔ model** normalization boundaries closer to `DatepickerParsingService` / a thin `InputFacade`.
11
- - Keep **public `@Input` / `@Output` API** stable unless explicitly versioned.
12
-
13
- ## Phase 1 — Boundaries only (low risk)
14
-
15
- 1. List public methods on `NgxsmkDatepickerComponent` that only delegate to `CalendarGenerationService`; replace with direct service calls from tests where duplicated.
16
- 2. Ensure `generateCalendar()` becomes a thin orchestrator: **invalidate revision signals → assign `multiCalendarMonths` → CD**.
17
-
18
- ## Phase 2 — Extract pure builders
19
-
20
- 1. Move `buildCalendarMonths` logic that does not need component closure into `CalendarGenerationService` with explicit parameters (`firstDayOfWeek`, `syncScroll`, `count`).
21
- 2. Unit-test service methods in isolation with Jasmine.
22
-
23
- ## Phase 3 — Parsing facade
24
-
25
- 1. Route typed-input updates through `DatepickerParsingService` + single `applyUserInput()` private method on the component.
26
- 2. Reduce branching between native picker vs. text input vs. inline.
27
-
28
- ## Phase 4 — Touch / positioning (optional)
29
-
30
- 1. Confirm `TouchGestureHandlerService` and `PopoverPositioningService` own all DOM measurements; component emits intents only.
31
-
32
- ## Verification
33
-
34
- - `npm run test` (ngxsmk-datepicker project)
35
- - `npm run e2e` with demo-app smoke + playground scenarios
36
- - Bundle size check script if touching public exports
37
-
38
- See also [FEATURE_SCOPING.md](./FEATURE_SCOPING.md) for upcoming API additions.
package/docs/SEO.md DELETED
@@ -1,214 +0,0 @@
1
- # SEO Optimization Guide
2
-
3
- **Last updated:** June 3, 2026 - **Current stable:** v2.3.1
4
-
5
- This document outlines the SEO optimizations implemented for ngxsmk-datepicker to improve search engine visibility and discoverability.
6
-
7
- ## Overview
8
-
9
- ngxsmk-datepicker has been optimized for search engines with comprehensive meta tags, structured data, semantic HTML, and proper content organization.
10
-
11
- ## Implemented SEO Features
12
-
13
- ### 1. Meta Tags
14
-
15
- #### Primary Meta Tags
16
- - **Title**: Optimized with primary keywords and brand name
17
- - **Description**: Compelling description with key features and benefits
18
- - **Keywords**: Comprehensive keyword list covering all use cases
19
- - **Author**: Proper attribution
20
- - **Robots**: Optimized for indexing and crawling
21
- - **Canonical URL**: Prevents duplicate content issues
22
-
23
- #### Open Graph Tags
24
- - Complete Open Graph implementation for social media sharing
25
- - Optimized images with proper dimensions
26
- - Multi-locale support
27
- - Article metadata
28
-
29
- #### Twitter Card Tags
30
- - Summary large image card
31
- - Creator attribution
32
- - Additional metadata labels
33
-
34
- ### 2. Structured Data (Schema.org)
35
-
36
- #### SoftwareApplication Schema
37
- - Complete application information
38
- - Author and publisher details
39
- - Version information
40
- - License and repository links
41
- - Screenshots and descriptions
42
-
43
- #### WebPage Schema
44
- - Page hierarchy and breadcrumbs
45
- - Language specification
46
- - Main entity relationships
47
-
48
- #### HowTo Schema
49
- - Step-by-step installation guide
50
- - Usage instructions
51
- - Linked to relevant sections
52
-
53
- ### 3. Technical SEO
54
-
55
- #### robots.txt
56
- - Proper crawl directives
57
- - Sitemap reference
58
- - Disallow rules for private areas
59
-
60
- #### sitemap.xml
61
- - Complete site structure
62
- - Priority and change frequency
63
- - Last modification dates
64
- - All important pages included
65
-
66
- #### Semantic HTML
67
- - Proper heading hierarchy (H1-H6)
68
- - ARIA labels and roles
69
- - Semantic HTML5 elements
70
- - Alt text for images
71
-
72
- ### 4. Content Optimization
73
-
74
- #### README.md
75
- - Keyword-rich content
76
- - Clear headings and structure
77
- - Comprehensive feature list
78
- - Installation and usage guides
79
- - Code examples with proper formatting
80
-
81
- #### Documentation
82
- - Well-organized sections
83
- - Search-friendly content
84
- - Internal linking
85
- - Code examples with syntax highlighting
86
-
87
- ### 5. Performance SEO
88
-
89
- #### Bundle Size
90
- - Lightweight bundle (~127KB)
91
- - Tree-shakeable exports
92
- - Minimal dependencies
93
-
94
- #### SSR Support
95
- - Server-side rendering compatible
96
- - Fast initial page load
97
- - Improved Core Web Vitals
98
-
99
- #### Accessibility
100
- - WCAG compliant
101
- - Keyboard navigation
102
- - Screen reader support
103
- - ARIA attributes
104
-
105
- ## Best Practices for Users
106
-
107
- ### When Using ngxsmk-datepicker in Your App
108
-
109
- 1. **Add Semantic HTML**
110
- ```html
111
- <label for="date-input">Select Date</label>
112
- <ngxsmk-datepicker
113
- id="date-input"
114
- [value]="selectedDate"
115
- aria-label="Date picker for selecting appointment date">
116
- </ngxsmk-datepicker>
117
- ```
118
-
119
- 2. **Use Proper Headings**
120
- ```html
121
- <h1>Appointment Booking</h1>
122
- <h2>Select Your Preferred Date</h2>
123
- <ngxsmk-datepicker [value]="date"></ngxsmk-datepicker>
124
- ```
125
-
126
- 3. **Provide Context**
127
- ```html
128
- <section aria-labelledby="date-selection-heading">
129
- <h2 id="date-selection-heading">Date Selection</h2>
130
- <p>Choose a date for your appointment</p>
131
- <ngxsmk-datepicker [value]="date"></ngxsmk-datepicker>
132
- </section>
133
- ```
134
-
135
- 4. **Optimize Images**
136
- - Use descriptive alt text
137
- - Optimize image sizes
138
- - Use appropriate formats (WebP, AVIF)
139
-
140
- 5. **Page Speed**
141
- - Lazy load components when possible
142
- - Use SSR for better initial load
143
- - Minimize JavaScript bundle size
144
-
145
- ## SEO Checklist
146
-
147
- - [x] Meta tags (title, description, keywords)
148
- - [x] Open Graph tags
149
- - [x] Twitter Card tags
150
- - [x] Structured data (Schema.org)
151
- - [x] robots.txt
152
- - [x] sitemap.xml
153
- - [x] Canonical URLs
154
- - [x] Semantic HTML
155
- - [x] ARIA labels
156
- - [x] Alt text for images
157
- - [x] Proper heading hierarchy
158
- - [x] Mobile-friendly design
159
- - [x] Fast page load times
160
- - [x] SSR compatibility
161
- - [x] Accessibility features
162
-
163
- ## Monitoring and Analytics
164
-
165
- ### Google Search Console
166
- - Monitor search performance
167
- - Track keyword rankings
168
- - Identify crawl errors
169
- - Submit sitemap
170
-
171
- ### Google Analytics
172
- - Track user behavior
173
- - Monitor page views
174
- - Analyze traffic sources
175
- - Measure engagement
176
-
177
- ### Lighthouse Scores
178
- - Performance: Target 90+
179
- - Accessibility: Target 95+
180
- - Best Practices: Target 90+
181
- - SEO: Target 95+
182
-
183
- ## Future Enhancements
184
-
185
- 1. **International SEO**
186
- - Multi-language support
187
- - Hreflang tags
188
- - Localized content
189
-
190
- 2. **Rich Snippets**
191
- - FAQ schema
192
- - Review schema
193
- - Video schema
194
-
195
- 3. **Content Marketing**
196
- - Blog posts
197
- - Tutorials
198
- - Case studies
199
-
200
- 4. **Link Building**
201
- - Community engagement
202
- - Documentation improvements
203
- - Example projects
204
-
205
- ## Resources
206
-
207
- - [Google Search Central](https://developers.google.com/search)
208
- - [Schema.org Documentation](https://schema.org/)
209
- - [Open Graph Protocol](https://ogp.me/)
210
- - [Twitter Cards](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards)
211
- - [Web.dev SEO Guide](https://web.dev/learn/seo/)
212
-
213
-
214
-