@f1softinternational/f1-nepali-date-picker 1.0.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 ADDED
@@ -0,0 +1,215 @@
1
+ # @f1softinternational/f1-nepali-date-picker
2
+
3
+ A modern, fully-featured Nepali Date Picker (Bikram Sambat calendar) for Angular 16+.
4
+
5
+ [![npm version](https://badge.fury.io/js/@f1softinternational%2Ff1-nepali-date-picker.svg)](https://www.npmjs.com/package/@f1softinternational/f1-nepali-date-picker)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ## Features
9
+
10
+ - 📅 **Full BS Calendar Support** - Accurate Bikram Sambat (BS) to Gregorian (AD) date conversions
11
+ - 🎨 **Modern UI** - Beautiful, themeable design with light and dark themes
12
+ - 🔧 **Angular Forms Integration** - Full `ControlValueAccessor` support for Reactive Forms and ngModel
13
+ - 🌐 **Bilingual** - Supports both English and Nepali languages
14
+ - 🔢 **Nepali Digits** - Optional Nepali numeral display
15
+ - ⚡ **Standalone Component** - Works with Angular 16+ standalone architecture
16
+ - 📱 **Responsive** - Works great on all screen sizes
17
+ - ♿ **Accessible** - Keyboard navigation and ARIA support
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ npm install @f1softinternational/f1-nepali-date-picker
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ### Standalone Component (Recommended for Angular 16+)
28
+
29
+ ```typescript
30
+ import { Component } from '@angular/core';
31
+ import { NepaliDatePickerComponent, NepaliDate } from '@f1softinternational/f1-nepali-date-picker';
32
+
33
+ @Component({
34
+ selector: 'app-my-component',
35
+ standalone: true,
36
+ imports: [NepaliDatePickerComponent],
37
+ template: `
38
+ <f1-nepali-date-picker
39
+ [(ngModel)]="selectedDate"
40
+ [theme]="'light'"
41
+ [language]="'en'"
42
+ [showTodayButton]="true"
43
+ (dateChange)="onDateChange($event)"
44
+ ></f1-nepali-date-picker>
45
+ `
46
+ })
47
+ export class MyComponent {
48
+ selectedDate: NepaliDate | null = null;
49
+
50
+ onDateChange(date: NepaliDate | null) {
51
+ console.log('Selected date:', date?.toString());
52
+ }
53
+ }
54
+ ```
55
+
56
+ ### NgModule Usage
57
+
58
+ ```typescript
59
+ import { NgModule } from '@angular/core';
60
+ import { F1NepaliDatePickerModule } from '@f1softinternational/f1-nepali-date-picker';
61
+
62
+ @NgModule({
63
+ imports: [F1NepaliDatePickerModule],
64
+ })
65
+ export class AppModule {}
66
+ ```
67
+
68
+ ### Reactive Forms
69
+
70
+ ```typescript
71
+ import { Component } from '@angular/core';
72
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
73
+ import { NepaliDatePickerComponent, NepaliDate } from '@f1softinternational/f1-nepali-date-picker';
74
+
75
+ @Component({
76
+ selector: 'app-form',
77
+ standalone: true,
78
+ imports: [ReactiveFormsModule, NepaliDatePickerComponent],
79
+ template: `
80
+ <f1-nepali-date-picker [formControl]="dateControl"></f1-nepali-date-picker>
81
+ `
82
+ })
83
+ export class FormComponent {
84
+ dateControl = new FormControl<NepaliDate | null>(null);
85
+ }
86
+ ```
87
+
88
+ ## API Reference
89
+
90
+ ### Inputs
91
+
92
+ | Input | Type | Default | Description |
93
+ |-------|------|---------|-------------|
94
+ | `minDate` | `NepaliDate` | - | Minimum selectable date |
95
+ | `maxDate` | `NepaliDate` | - | Maximum selectable date |
96
+ | `placeholder` | `string` | `'Select date'` | Placeholder text |
97
+ | `displayFormat` | `string` | `'YYYY-MM-DD'` | Date display format |
98
+ | `theme` | `'light' \| 'dark'` | `'light'` | Color theme |
99
+ | `language` | `'en' \| 'np'` | `'en'` | Language for month/day names |
100
+ | `showTodayButton` | `boolean` | `true` | Show "Today" button |
101
+ | `disabled` | `boolean` | `false` | Disable the picker |
102
+ | `useNepaliDigits` | `boolean` | `false` | Use Nepali numerals |
103
+
104
+ ### Outputs
105
+
106
+ | Output | Type | Description |
107
+ |--------|------|-------------|
108
+ | `dateChange` | `EventEmitter<NepaliDate \| null>` | Emitted when date changes |
109
+
110
+ ### Display Format Patterns
111
+
112
+ | Pattern | Description | Example |
113
+ |---------|-------------|---------|
114
+ | `YYYY` | 4-digit year | `2081` |
115
+ | `YY` | 2-digit year | `81` |
116
+ | `MM` | 2-digit month | `05` |
117
+ | `M` | Month without leading zero | `5` |
118
+ | `DD` | 2-digit day | `09` |
119
+ | `D` | Day without leading zero | `9` |
120
+ | `MMMM` | Full month name (English) | `Baisakh` |
121
+ | `mmmm` | Full month name (Nepali) | `बैशाख` |
122
+
123
+ ## NepaliDate Model
124
+
125
+ The library provides a `NepaliDate` class for date manipulation:
126
+
127
+ ```typescript
128
+ import { NepaliDate, DateConverterService } from '@f1softinternational/f1-nepali-date-picker';
129
+
130
+ // Create from year, month, day
131
+ const date = new NepaliDate(2081, 5, 15);
132
+
133
+ // Get today's date in BS
134
+ const today = NepaliDate.today();
135
+
136
+ // Convert from AD (Gregorian) date
137
+ const fromAD = NepaliDate.fromAD(new Date());
138
+
139
+ // Convert to AD
140
+ const adDate: Date = date.toAD();
141
+
142
+ // Format
143
+ console.log(date.format('YYYY-MM-DD')); // "2081-05-15"
144
+ console.log(date.format('D MMMM, YYYY')); // "15 Bhadra, 2081"
145
+
146
+ // Date arithmetic
147
+ const nextWeek = date.addDays(7);
148
+ const nextMonth = date.addMonths(1);
149
+ const nextYear = date.addYears(1);
150
+
151
+ // Comparison
152
+ date.isBefore(anotherDate);
153
+ date.isAfter(anotherDate);
154
+ date.equals(anotherDate);
155
+ ```
156
+
157
+ ## DateConverterService
158
+
159
+ Use the service for date conversion utilities:
160
+
161
+ ```typescript
162
+ import { DateConverterService } from '@f1softinternational/f1-nepali-date-picker';
163
+
164
+ @Component({...})
165
+ export class MyComponent {
166
+ constructor(private dateConverter: DateConverterService) {
167
+ // Convert AD to BS
168
+ const bsDate = this.dateConverter.convertToBS(new Date());
169
+
170
+ // Convert BS to AD
171
+ const adDate = this.dateConverter.convertToAD(bsDate);
172
+
173
+ // Get today in BS
174
+ const today = this.dateConverter.getTodayBS();
175
+
176
+ // Get month names
177
+ const months = this.dateConverter.getMonthNames('np'); // Nepali
178
+
179
+ // Get days in a month
180
+ const days = this.dateConverter.getDaysInMonth(2081, 5);
181
+ }
182
+ }
183
+ ```
184
+
185
+ ## Theming
186
+
187
+ The component uses CSS variables for theming. You can customize colors by overriding these variables:
188
+
189
+ ```css
190
+ f1-nepali-date-picker {
191
+ --f1-dp-bg: #ffffff;
192
+ --f1-dp-text: #1a1a2e;
193
+ --f1-dp-primary: #6366f1;
194
+ --f1-dp-primary-hover: #4f46e5;
195
+ --f1-dp-border: #e2e8f0;
196
+ --f1-dp-hover-bg: #f1f5f9;
197
+ --f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);
198
+ }
199
+ ```
200
+
201
+ ## Supported Date Range
202
+
203
+ The library supports BS dates from **2000 BS** to **2099 BS** (approximately 1944 AD to 2043 AD).
204
+
205
+ ## License
206
+
207
+ MIT © [F1Soft International](https://f1soft.com)
208
+
209
+ ## Contributing
210
+
211
+ Contributions are welcome! Please read our contributing guidelines before submitting a pull request.
212
+
213
+ ## Support
214
+
215
+ For issues and feature requests, please [open an issue](https://gitlab-01.f1soft.com/code-library/f1-nepali-date-picker/-/issues).
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZjFzb2Z0aW50ZXJuYXRpb25hbC1mMS1uZXBhbGktZGF0ZS1waWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9mMS1uZXBhbGktZGF0ZS1waWNrZXIvc3JjL2Yxc29mdGludGVybmF0aW9uYWwtZjEtbmVwYWxpLWRhdGUtcGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,234 @@
1
+ import { Component, Input, Output, EventEmitter, forwardRef, HostListener, ChangeDetectionStrategy, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { NepaliDate } from '../../models/nepali-date.model';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services/date-converter.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@angular/forms";
9
+ export class NepaliDatePickerComponent {
10
+ constructor(elementRef, cdr, dateConverter) {
11
+ this.elementRef = elementRef;
12
+ this.cdr = cdr;
13
+ this.dateConverter = dateConverter;
14
+ /** Placeholder text */
15
+ this.placeholder = 'Select date';
16
+ /** Display format for the input */
17
+ this.displayFormat = 'YYYY-MM-DD';
18
+ /** Theme: 'light' or 'dark' */
19
+ this.theme = 'light';
20
+ /** Language for month/day names */
21
+ this.language = 'en';
22
+ /** Show today button */
23
+ this.showTodayButton = true;
24
+ /** Disabled state */
25
+ this.disabled = false;
26
+ /** Use Nepali digits in display */
27
+ this.useNepaliDigits = false;
28
+ /** Event emitted when date changes */
29
+ this.dateChange = new EventEmitter();
30
+ // Internal state
31
+ this.isOpen = false;
32
+ this.selectedDate = null;
33
+ this.calendarGrid = [];
34
+ this.monthNames = [];
35
+ this.weekdayNames = [];
36
+ this.years = [];
37
+ // CVA callbacks
38
+ this.onChange = () => { };
39
+ this.onTouched = () => { };
40
+ this.viewDate = this.dateConverter.getTodayBS();
41
+ }
42
+ ngOnInit() {
43
+ this.monthNames = this.dateConverter.getMonthNames(this.language);
44
+ this.weekdayNames = this.dateConverter.getWeekdayNames(this.language);
45
+ this.years = this.dateConverter.getYearRange();
46
+ this.updateCalendarGrid();
47
+ }
48
+ ngOnDestroy() { }
49
+ // ControlValueAccessor implementation
50
+ writeValue(value) {
51
+ this.selectedDate = value;
52
+ if (value) {
53
+ this.viewDate = value.clone();
54
+ }
55
+ this.updateCalendarGrid();
56
+ this.cdr.markForCheck();
57
+ }
58
+ registerOnChange(fn) {
59
+ this.onChange = fn;
60
+ }
61
+ registerOnTouched(fn) {
62
+ this.onTouched = fn;
63
+ }
64
+ setDisabledState(isDisabled) {
65
+ this.disabled = isDisabled;
66
+ this.cdr.markForCheck();
67
+ }
68
+ // UI Methods
69
+ toggleCalendar() {
70
+ if (this.disabled)
71
+ return;
72
+ this.isOpen = !this.isOpen;
73
+ if (this.isOpen) {
74
+ this.onTouched();
75
+ this.updateCalendarGrid();
76
+ }
77
+ this.cdr.markForCheck();
78
+ }
79
+ closeCalendar() {
80
+ this.isOpen = false;
81
+ this.cdr.markForCheck();
82
+ }
83
+ onClickOutside(event) {
84
+ if (!this.elementRef.nativeElement.contains(event.target)) {
85
+ this.closeCalendar();
86
+ }
87
+ }
88
+ onEscapeKey() {
89
+ this.closeCalendar();
90
+ }
91
+ // Navigation
92
+ previousMonth() {
93
+ this.viewDate = this.viewDate.addMonths(-1);
94
+ this.updateCalendarGrid();
95
+ this.cdr.markForCheck();
96
+ }
97
+ nextMonth() {
98
+ this.viewDate = this.viewDate.addMonths(1);
99
+ this.updateCalendarGrid();
100
+ this.cdr.markForCheck();
101
+ }
102
+ onYearChange(event) {
103
+ const year = parseInt(event.target.value, 10);
104
+ this.viewDate = new NepaliDate(year, this.viewDate.month, 1);
105
+ // Adjust day if needed
106
+ const daysInMonth = this.dateConverter.getDaysInMonth(year, this.viewDate.month);
107
+ if (this.viewDate.day > daysInMonth) {
108
+ this.viewDate = new NepaliDate(year, this.viewDate.month, daysInMonth);
109
+ }
110
+ this.updateCalendarGrid();
111
+ this.cdr.markForCheck();
112
+ }
113
+ onMonthChange(event) {
114
+ const month = parseInt(event.target.value, 10);
115
+ const daysInMonth = this.dateConverter.getDaysInMonth(this.viewDate.year, month);
116
+ const newDay = Math.min(this.viewDate.day, daysInMonth);
117
+ this.viewDate = new NepaliDate(this.viewDate.year, month, newDay);
118
+ this.updateCalendarGrid();
119
+ this.cdr.markForCheck();
120
+ }
121
+ // Date selection
122
+ selectDate(day) {
123
+ if (day === null || this.disabled)
124
+ return;
125
+ const newDate = new NepaliDate(this.viewDate.year, this.viewDate.month, day);
126
+ if (!this.isDateSelectable(day))
127
+ return;
128
+ this.selectedDate = newDate;
129
+ this.onChange(this.selectedDate);
130
+ this.dateChange.emit(this.selectedDate);
131
+ this.closeCalendar();
132
+ this.cdr.markForCheck();
133
+ }
134
+ selectToday() {
135
+ const today = this.dateConverter.getTodayBS();
136
+ if (this.dateConverter.isDateInRange(today, this.minDate, this.maxDate)) {
137
+ this.selectedDate = today;
138
+ this.viewDate = today.clone();
139
+ this.onChange(this.selectedDate);
140
+ this.dateChange.emit(this.selectedDate);
141
+ this.updateCalendarGrid();
142
+ this.closeCalendar();
143
+ this.cdr.markForCheck();
144
+ }
145
+ }
146
+ clearDate() {
147
+ this.selectedDate = null;
148
+ this.onChange(null);
149
+ this.dateChange.emit(null);
150
+ this.cdr.markForCheck();
151
+ }
152
+ // Helper methods
153
+ updateCalendarGrid() {
154
+ this.calendarGrid = this.dateConverter.getMonthCalendarGrid(this.viewDate.year, this.viewDate.month);
155
+ }
156
+ isDateSelectable(day) {
157
+ if (day === null)
158
+ return false;
159
+ const date = new NepaliDate(this.viewDate.year, this.viewDate.month, day);
160
+ return this.dateConverter.isDateInRange(date, this.minDate, this.maxDate);
161
+ }
162
+ isToday(day) {
163
+ if (day === null)
164
+ return false;
165
+ const today = this.dateConverter.getTodayBS();
166
+ return (this.viewDate.year === today.year && this.viewDate.month === today.month && day === today.day);
167
+ }
168
+ isSelected(day) {
169
+ if (day === null || !this.selectedDate)
170
+ return false;
171
+ return (this.viewDate.year === this.selectedDate.year &&
172
+ this.viewDate.month === this.selectedDate.month &&
173
+ day === this.selectedDate.day);
174
+ }
175
+ get displayValue() {
176
+ if (!this.selectedDate)
177
+ return '';
178
+ return this.selectedDate.format(this.displayFormat, this.useNepaliDigits);
179
+ }
180
+ get currentMonthName() {
181
+ return this.monthNames[this.viewDate.month - 1];
182
+ }
183
+ trackByWeek(index) {
184
+ return index;
185
+ }
186
+ trackByDay(index) {
187
+ return index;
188
+ }
189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NepaliDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.DateConverterService }], target: i0.ɵɵFactoryTarget.Component }); }
190
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NepaliDatePickerComponent, isStandalone: true, selector: "f1-nepali-date-picker", inputs: { minDate: "minDate", maxDate: "maxDate", placeholder: "placeholder", displayFormat: "displayFormat", theme: "theme", language: "language", showTodayButton: "showTodayButton", disabled: "disabled", useNepaliDigits: "useNepaliDigits" }, outputs: { dateChange: "dateChange" }, host: { listeners: { "document:click": "onClickOutside($event)", "document:keydown.escape": "onEscapeKey()" } }, providers: [
191
+ {
192
+ provide: NG_VALUE_ACCESSOR,
193
+ useExisting: forwardRef(() => NepaliDatePickerComponent),
194
+ multi: true,
195
+ },
196
+ ], ngImport: i0, template: "<div class=\"f1-datepicker\" [class.f1-datepicker--dark]=\"theme === 'dark'\" [class.f1-datepicker--disabled]=\"disabled\">\n <!-- Input Field -->\n <div class=\"f1-datepicker__input-wrapper\" (click)=\"toggleCalendar()\">\n <input\n type=\"text\"\n class=\"f1-datepicker__input\"\n [value]=\"displayValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n readonly\n />\n <span class=\"f1-datepicker__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </span>\n <button\n *ngIf=\"selectedDate && !disabled\"\n type=\"button\"\n class=\"f1-datepicker__clear\"\n (click)=\"clearDate(); $event.stopPropagation()\"\n aria-label=\"Clear date\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Dropdown -->\n <div class=\"f1-datepicker__dropdown\" *ngIf=\"isOpen\" [@fadeIn]>\n <!-- Header -->\n <div class=\"f1-datepicker__header\">\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"previousMonth()\"\n aria-label=\"Previous month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n <div class=\"f1-datepicker__selectors\">\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.month\"\n (change)=\"onMonthChange($event)\"\n >\n <option *ngFor=\"let month of monthNames; let i = index\" [value]=\"i + 1\">\n {{ month }}\n </option>\n </select>\n\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.year\"\n (change)=\"onYearChange($event)\"\n >\n <option *ngFor=\"let year of years\" [value]=\"year\">\n {{ useNepaliDigits ? (year | number:'1.0-0') : year }}\n </option>\n </select>\n </div>\n\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"nextMonth()\"\n aria-label=\"Next month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n <!-- Weekday Headers -->\n <div class=\"f1-datepicker__weekdays\">\n <div class=\"f1-datepicker__weekday\" *ngFor=\"let day of weekdayNames\">\n {{ day }}\n </div>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"f1-datepicker__grid\">\n <div class=\"f1-datepicker__week\" *ngFor=\"let week of calendarGrid; trackBy: trackByWeek\">\n <button\n type=\"button\"\n class=\"f1-datepicker__day\"\n *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.f1-datepicker__day--empty]=\"day === null\"\n [class.f1-datepicker__day--today]=\"day !== null && isToday(day)\"\n [class.f1-datepicker__day--selected]=\"day !== null && isSelected(day)\"\n [class.f1-datepicker__day--disabled]=\"day !== null && !isDateSelectable(day)\"\n [disabled]=\"day === null || !isDateSelectable(day)\"\n (click)=\"selectDate(day)\"\n >\n {{ day !== null ? (useNepaliDigits ? day : day) : '' }}\n </button>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"f1-datepicker__footer\" *ngIf=\"showTodayButton\">\n <button\n type=\"button\"\n class=\"f1-datepicker__today-btn\"\n (click)=\"selectToday()\"\n >\n {{ language === 'np' ? '\u0906\u091C' : 'Today' }}\n </button>\n </div>\n </div>\n</div>\n", styles: [":host{display:inline-block;font-family:var(--f1-datepicker-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)}.f1-datepicker{--f1-dp-bg: #ffffff;--f1-dp-text: #1a1a2e;--f1-dp-text-muted: #64748b;--f1-dp-border: #e2e8f0;--f1-dp-primary: #6366f1;--f1-dp-primary-hover: #4f46e5;--f1-dp-primary-text: #ffffff;--f1-dp-hover-bg: #f1f5f9;--f1-dp-today-bg: #eef2ff;--f1-dp-today-border: #6366f1;--f1-dp-disabled-text: #cbd5e1;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .12);--f1-dp-input-bg: #ffffff;--f1-dp-dropdown-bg: #ffffff;position:relative;width:280px}.f1-datepicker--dark{--f1-dp-bg: #1e1e2e;--f1-dp-text: #f8fafc;--f1-dp-text-muted: #94a3b8;--f1-dp-border: #334155;--f1-dp-primary: #818cf8;--f1-dp-primary-hover: #a5b4fc;--f1-dp-primary-text: #1e1e2e;--f1-dp-hover-bg: #2d2d44;--f1-dp-today-bg: #312e81;--f1-dp-today-border: #818cf8;--f1-dp-disabled-text: #475569;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .4);--f1-dp-input-bg: #1e1e2e;--f1-dp-dropdown-bg: #1e1e2e}.f1-datepicker--disabled{opacity:.6;cursor:not-allowed}.f1-datepicker__input-wrapper{position:relative;display:flex;align-items:center;cursor:pointer}.f1-datepicker--disabled .f1-datepicker__input-wrapper{cursor:not-allowed}.f1-datepicker__input{width:100%;padding:12px 44px 12px 14px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:var(--f1-dp-input-bg);border:2px solid var(--f1-dp-border);border-radius:10px;outline:none;cursor:pointer;transition:all .2s ease}.f1-datepicker__input::placeholder{color:var(--f1-dp-text-muted)}.f1-datepicker__input:hover:not(:disabled){border-color:var(--f1-dp-primary)}.f1-datepicker__input:focus{border-color:var(--f1-dp-primary);box-shadow:0 0 0 3px #6366f126}.f1-datepicker__input:disabled{cursor:not-allowed;background:var(--f1-dp-hover-bg)}.f1-datepicker__icon{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:var(--f1-dp-text-muted);pointer-events:none;transition:color .2s ease}.f1-datepicker__input-wrapper:hover .f1-datepicker__icon{color:var(--f1-dp-primary)}.f1-datepicker__clear{position:absolute;right:38px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--f1-dp-text-muted);background:transparent;border:none;border-radius:50%;cursor:pointer;transition:all .2s ease}.f1-datepicker__clear:hover{color:var(--f1-dp-text);background:var(--f1-dp-hover-bg)}.f1-datepicker__dropdown{position:absolute;top:calc(100% + 8px);left:0;z-index:1000;width:100%;min-width:300px;padding:16px;background:var(--f1-dp-dropdown-bg);border:1px solid var(--f1-dp-border);border-radius:14px;box-shadow:var(--f1-dp-shadow);animation:slideDown .2s ease}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.f1-datepicker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.f1-datepicker__nav-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__nav-btn:hover{background:var(--f1-dp-hover-bg);color:var(--f1-dp-primary)}.f1-datepicker__nav-btn:active{transform:scale(.95)}.f1-datepicker__selectors{display:flex;gap:8px}.f1-datepicker__select{padding:8px 28px 8px 12px;font-size:14px;font-weight:600;color:var(--f1-dp-text);background:var(--f1-dp-hover-bg);border:none;border-radius:8px;cursor:pointer;transition:all .2s ease;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center}.f1-datepicker__select:hover{background-color:var(--f1-dp-border)}.f1-datepicker__select:focus{outline:none;box-shadow:0 0 0 2px var(--f1-dp-primary)}.f1-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:8px}.f1-datepicker__weekday{padding:8px 0;font-size:12px;font-weight:600;color:var(--f1-dp-text-muted);text-align:center;text-transform:uppercase;letter-spacing:.5px}.f1-datepicker__grid{display:flex;flex-direction:column;gap:4px}.f1-datepicker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.f1-datepicker__day{display:flex;align-items:center;justify-content:center;width:36px;height:36px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .15s ease}.f1-datepicker__day:hover:not(:disabled):not(.f1-datepicker__day--selected):not(.f1-datepicker__day--empty){background:var(--f1-dp-hover-bg)}.f1-datepicker__day--empty{visibility:hidden;cursor:default}.f1-datepicker__day--today{background:var(--f1-dp-today-bg);border:2px solid var(--f1-dp-today-border);font-weight:700}.f1-datepicker__day--selected{background:var(--f1-dp-primary)!important;color:var(--f1-dp-primary-text)!important;font-weight:700}.f1-datepicker__day--selected:hover{background:var(--f1-dp-primary-hover)!important}.f1-datepicker__day--disabled{color:var(--f1-dp-disabled-text);cursor:not-allowed}.f1-datepicker__day--disabled:hover{background:transparent}.f1-datepicker__footer{display:flex;justify-content:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--f1-dp-border)}.f1-datepicker__today-btn{padding:8px 20px;font-size:13px;font-weight:600;color:var(--f1-dp-primary);background:transparent;border:2px solid var(--f1-dp-primary);border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__today-btn:hover{background:var(--f1-dp-primary);color:var(--f1-dp-primary-text)}.f1-datepicker__today-btn:active{transform:scale(.98)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
197
+ }
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NepaliDatePickerComponent, decorators: [{
199
+ type: Component,
200
+ args: [{ selector: 'f1-nepali-date-picker', standalone: true, imports: [CommonModule, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
201
+ {
202
+ provide: NG_VALUE_ACCESSOR,
203
+ useExisting: forwardRef(() => NepaliDatePickerComponent),
204
+ multi: true,
205
+ },
206
+ ], template: "<div class=\"f1-datepicker\" [class.f1-datepicker--dark]=\"theme === 'dark'\" [class.f1-datepicker--disabled]=\"disabled\">\n <!-- Input Field -->\n <div class=\"f1-datepicker__input-wrapper\" (click)=\"toggleCalendar()\">\n <input\n type=\"text\"\n class=\"f1-datepicker__input\"\n [value]=\"displayValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n readonly\n />\n <span class=\"f1-datepicker__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </span>\n <button\n *ngIf=\"selectedDate && !disabled\"\n type=\"button\"\n class=\"f1-datepicker__clear\"\n (click)=\"clearDate(); $event.stopPropagation()\"\n aria-label=\"Clear date\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Dropdown -->\n <div class=\"f1-datepicker__dropdown\" *ngIf=\"isOpen\" [@fadeIn]>\n <!-- Header -->\n <div class=\"f1-datepicker__header\">\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"previousMonth()\"\n aria-label=\"Previous month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n <div class=\"f1-datepicker__selectors\">\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.month\"\n (change)=\"onMonthChange($event)\"\n >\n <option *ngFor=\"let month of monthNames; let i = index\" [value]=\"i + 1\">\n {{ month }}\n </option>\n </select>\n\n <select\n class=\"f1-datepicker__select\"\n [value]=\"viewDate.year\"\n (change)=\"onYearChange($event)\"\n >\n <option *ngFor=\"let year of years\" [value]=\"year\">\n {{ useNepaliDigits ? (year | number:'1.0-0') : year }}\n </option>\n </select>\n </div>\n\n <button\n type=\"button\"\n class=\"f1-datepicker__nav-btn\"\n (click)=\"nextMonth()\"\n aria-label=\"Next month\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n <!-- Weekday Headers -->\n <div class=\"f1-datepicker__weekdays\">\n <div class=\"f1-datepicker__weekday\" *ngFor=\"let day of weekdayNames\">\n {{ day }}\n </div>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"f1-datepicker__grid\">\n <div class=\"f1-datepicker__week\" *ngFor=\"let week of calendarGrid; trackBy: trackByWeek\">\n <button\n type=\"button\"\n class=\"f1-datepicker__day\"\n *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.f1-datepicker__day--empty]=\"day === null\"\n [class.f1-datepicker__day--today]=\"day !== null && isToday(day)\"\n [class.f1-datepicker__day--selected]=\"day !== null && isSelected(day)\"\n [class.f1-datepicker__day--disabled]=\"day !== null && !isDateSelectable(day)\"\n [disabled]=\"day === null || !isDateSelectable(day)\"\n (click)=\"selectDate(day)\"\n >\n {{ day !== null ? (useNepaliDigits ? day : day) : '' }}\n </button>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"f1-datepicker__footer\" *ngIf=\"showTodayButton\">\n <button\n type=\"button\"\n class=\"f1-datepicker__today-btn\"\n (click)=\"selectToday()\"\n >\n {{ language === 'np' ? '\u0906\u091C' : 'Today' }}\n </button>\n </div>\n </div>\n</div>\n", styles: [":host{display:inline-block;font-family:var(--f1-datepicker-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)}.f1-datepicker{--f1-dp-bg: #ffffff;--f1-dp-text: #1a1a2e;--f1-dp-text-muted: #64748b;--f1-dp-border: #e2e8f0;--f1-dp-primary: #6366f1;--f1-dp-primary-hover: #4f46e5;--f1-dp-primary-text: #ffffff;--f1-dp-hover-bg: #f1f5f9;--f1-dp-today-bg: #eef2ff;--f1-dp-today-border: #6366f1;--f1-dp-disabled-text: #cbd5e1;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .12);--f1-dp-input-bg: #ffffff;--f1-dp-dropdown-bg: #ffffff;position:relative;width:280px}.f1-datepicker--dark{--f1-dp-bg: #1e1e2e;--f1-dp-text: #f8fafc;--f1-dp-text-muted: #94a3b8;--f1-dp-border: #334155;--f1-dp-primary: #818cf8;--f1-dp-primary-hover: #a5b4fc;--f1-dp-primary-text: #1e1e2e;--f1-dp-hover-bg: #2d2d44;--f1-dp-today-bg: #312e81;--f1-dp-today-border: #818cf8;--f1-dp-disabled-text: #475569;--f1-dp-shadow: 0 10px 40px rgba(0, 0, 0, .4);--f1-dp-input-bg: #1e1e2e;--f1-dp-dropdown-bg: #1e1e2e}.f1-datepicker--disabled{opacity:.6;cursor:not-allowed}.f1-datepicker__input-wrapper{position:relative;display:flex;align-items:center;cursor:pointer}.f1-datepicker--disabled .f1-datepicker__input-wrapper{cursor:not-allowed}.f1-datepicker__input{width:100%;padding:12px 44px 12px 14px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:var(--f1-dp-input-bg);border:2px solid var(--f1-dp-border);border-radius:10px;outline:none;cursor:pointer;transition:all .2s ease}.f1-datepicker__input::placeholder{color:var(--f1-dp-text-muted)}.f1-datepicker__input:hover:not(:disabled){border-color:var(--f1-dp-primary)}.f1-datepicker__input:focus{border-color:var(--f1-dp-primary);box-shadow:0 0 0 3px #6366f126}.f1-datepicker__input:disabled{cursor:not-allowed;background:var(--f1-dp-hover-bg)}.f1-datepicker__icon{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:var(--f1-dp-text-muted);pointer-events:none;transition:color .2s ease}.f1-datepicker__input-wrapper:hover .f1-datepicker__icon{color:var(--f1-dp-primary)}.f1-datepicker__clear{position:absolute;right:38px;display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--f1-dp-text-muted);background:transparent;border:none;border-radius:50%;cursor:pointer;transition:all .2s ease}.f1-datepicker__clear:hover{color:var(--f1-dp-text);background:var(--f1-dp-hover-bg)}.f1-datepicker__dropdown{position:absolute;top:calc(100% + 8px);left:0;z-index:1000;width:100%;min-width:300px;padding:16px;background:var(--f1-dp-dropdown-bg);border:1px solid var(--f1-dp-border);border-radius:14px;box-shadow:var(--f1-dp-shadow);animation:slideDown .2s ease}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.f1-datepicker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.f1-datepicker__nav-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__nav-btn:hover{background:var(--f1-dp-hover-bg);color:var(--f1-dp-primary)}.f1-datepicker__nav-btn:active{transform:scale(.95)}.f1-datepicker__selectors{display:flex;gap:8px}.f1-datepicker__select{padding:8px 28px 8px 12px;font-size:14px;font-weight:600;color:var(--f1-dp-text);background:var(--f1-dp-hover-bg);border:none;border-radius:8px;cursor:pointer;transition:all .2s ease;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 8px center}.f1-datepicker__select:hover{background-color:var(--f1-dp-border)}.f1-datepicker__select:focus{outline:none;box-shadow:0 0 0 2px var(--f1-dp-primary)}.f1-datepicker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:8px}.f1-datepicker__weekday{padding:8px 0;font-size:12px;font-weight:600;color:var(--f1-dp-text-muted);text-align:center;text-transform:uppercase;letter-spacing:.5px}.f1-datepicker__grid{display:flex;flex-direction:column;gap:4px}.f1-datepicker__week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.f1-datepicker__day{display:flex;align-items:center;justify-content:center;width:36px;height:36px;font-size:14px;font-weight:500;color:var(--f1-dp-text);background:transparent;border:none;border-radius:8px;cursor:pointer;transition:all .15s ease}.f1-datepicker__day:hover:not(:disabled):not(.f1-datepicker__day--selected):not(.f1-datepicker__day--empty){background:var(--f1-dp-hover-bg)}.f1-datepicker__day--empty{visibility:hidden;cursor:default}.f1-datepicker__day--today{background:var(--f1-dp-today-bg);border:2px solid var(--f1-dp-today-border);font-weight:700}.f1-datepicker__day--selected{background:var(--f1-dp-primary)!important;color:var(--f1-dp-primary-text)!important;font-weight:700}.f1-datepicker__day--selected:hover{background:var(--f1-dp-primary-hover)!important}.f1-datepicker__day--disabled{color:var(--f1-dp-disabled-text);cursor:not-allowed}.f1-datepicker__day--disabled:hover{background:transparent}.f1-datepicker__footer{display:flex;justify-content:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--f1-dp-border)}.f1-datepicker__today-btn{padding:8px 20px;font-size:13px;font-weight:600;color:var(--f1-dp-primary);background:transparent;border:2px solid var(--f1-dp-primary);border-radius:8px;cursor:pointer;transition:all .2s ease}.f1-datepicker__today-btn:hover{background:var(--f1-dp-primary);color:var(--f1-dp-primary-text)}.f1-datepicker__today-btn:active{transform:scale(.98)}\n"] }]
207
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DateConverterService }]; }, propDecorators: { minDate: [{
208
+ type: Input
209
+ }], maxDate: [{
210
+ type: Input
211
+ }], placeholder: [{
212
+ type: Input
213
+ }], displayFormat: [{
214
+ type: Input
215
+ }], theme: [{
216
+ type: Input
217
+ }], language: [{
218
+ type: Input
219
+ }], showTodayButton: [{
220
+ type: Input
221
+ }], disabled: [{
222
+ type: Input
223
+ }], useNepaliDigits: [{
224
+ type: Input
225
+ }], dateChange: [{
226
+ type: Output
227
+ }], onClickOutside: [{
228
+ type: HostListener,
229
+ args: ['document:click', ['$event']]
230
+ }], onEscapeKey: [{
231
+ type: HostListener,
232
+ args: ['document:keydown.escape']
233
+ }] } });
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVwYWxpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YxLW5lcGFsaS1kYXRlLXBpY2tlci9zcmMvbGliL2NvbXBvbmVudHMvbmVwYWxpLWRhdGUtcGlja2VyL25lcGFsaS1kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mMS1uZXBhbGktZGF0ZS1waWNrZXIvc3JjL2xpYi9jb21wb25lbnRzL25lcGFsaS1kYXRlLXBpY2tlci9uZXBhbGktZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixVQUFVLEVBSVYsWUFBWSxFQUNaLHVCQUF1QixHQUUxQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBa0I1RCxNQUFNLE9BQU8seUJBQXlCO0lBNENsQyxZQUNZLFVBQXNCLEVBQ3RCLEdBQXNCLEVBQ3RCLGFBQW1DO1FBRm5DLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBeEMvQyx1QkFBdUI7UUFDZCxnQkFBVyxHQUFHLGFBQWEsQ0FBQztRQUVyQyxtQ0FBbUM7UUFDMUIsa0JBQWEsR0FBRyxZQUFZLENBQUM7UUFFdEMsK0JBQStCO1FBQ3RCLFVBQUssR0FBcUIsT0FBTyxDQUFDO1FBRTNDLG1DQUFtQztRQUMxQixhQUFRLEdBQWdCLElBQUks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QkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkF3RVAsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVExQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZXBhbGlEYXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25lcGFsaS1kYXRlLm1vZGVsJztcbmltcG9ydCB7IERhdGVDb252ZXJ0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0ZS1jb252ZXJ0ZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZjEtbmVwYWxpLWRhdGUtcGlja2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmVwYWxpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZXBhbGktZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZXBhbGlEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5lcGFsaURhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIC8qKiBNaW5pbXVtIHNlbGVjdGFibGUgZGF0ZSAqL1xuICAgIEBJbnB1dCgpIG1pbkRhdGU/OiBOZXBhbGlEYXRlO1xuXG4gICAgLyoqIE1heGltdW0gc2VsZWN0YWJsZSBkYXRlICovXG4gICAgQElucHV0KCkgbWF4RGF0ZT86IE5lcGFsaURhdGU7XG5cbiAgICAvKiogUGxhY2Vob2xkZXIgdGV4dCAqL1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBkYXRlJztcblxuICAgIC8qKiBEaXNwbGF5IGZvcm1hdCBmb3IgdGhlIGlucHV0ICovXG4gICAgQElucHV0KCkgZGlzcGxheUZvcm1hdCA9ICdZWVlZLU1NLUREJztcblxuICAgIC8qKiBUaGVtZTogJ2xpZ2h0JyBvciAnZGFyaycgKi9cbiAgICBASW5wdXQoKSB0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgICAvKiogTGFuZ3VhZ2UgZm9yIG1vbnRoL2RheSBuYW1lcyAqL1xuICAgIEBJbnB1dCgpIGxhbmd1YWdlOiAnZW4nIHwgJ25wJyA9ICdlbic7XG5cbiAgICAvKiogU2hvdyB0b2RheSBidXR0b24gKi9cbiAgICBASW5wdXQoKSBzaG93VG9kYXlCdXR0b24gPSB0cnVlO1xuXG4gICAgLyoqIERpc2FibGVkIHN0YXRlICovXG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBVc2UgTmVwYWxpIGRpZ2l0cyBpbiBkaXNwbGF5ICovXG4gICAgQElucHV0KCkgdXNlTmVwYWxpRGlnaXRzID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGUgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKSBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOZXBhbGlEYXRlIHwgbnVsbD4oKTtcblxuICAgIC8vIEludGVybmFsIHN0YXRlXG4gICAgaXNPcGVuID0gZmFsc2U7XG4gICAgc2VsZWN0ZWREYXRlOiBOZXBhbGlEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgdmlld0RhdGU6IE5lcGFsaURhdGU7XG4gICAgY2FsZW5kYXJHcmlkOiAobnVtYmVyIHwgbnVsbClbXVtdID0gW107XG4gICAgbW9udGhOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICB3ZWVrZGF5TmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgeWVhcnM6IG51bWJlcltdID0gW107XG5cbiAgICAvLyBDVkEgY2FsbGJhY2tzXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBOZXBhbGlEYXRlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBkYXRlQ29udmVydGVyOiBEYXRlQ29udmVydGVyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5kYXRlQ29udmVydGVyLmdldFRvZGF5QlMoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb250aE5hbWVzID0gdGhpcy5kYXRlQ29udmVydGVyLmdldE1vbnRoTmFtZXModGhpcy5sYW5ndWFnZSk7XG4gICAgICAgIHRoaXMud2Vla2RheU5hbWVzID0gdGhpcy5kYXRlQ29udmVydGVyLmdldFdlZWtkYXlOYW1lcyh0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgdGhpcy55ZWFycyA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRZZWFyUmFuZ2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhckdyaWQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHsgfVxuXG4gICAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBOZXBhbGlEYXRlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSB2YWx1ZS5jbG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogTmVwYWxpRGF0ZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBVSSBNZXRob2RzXG4gICAgdG9nZ2xlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyR3JpZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNsb3NlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICAgIG9uRXNjYXBlS2V5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICAvLyBOYXZpZ2F0aW9uXG4gICAgcHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMudmlld0RhdGUuYWRkTW9udGhzKC0xKTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhckdyaWQoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmV4dE1vbnRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZS5hZGRNb250aHMoMSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uWWVhckNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlLCAxMCk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh5ZWFyLCB0aGlzLnZpZXdEYXRlLm1vbnRoLCAxKTtcbiAgICAgICAgLy8gQWRqdXN0IGRheSBpZiBuZWVkZWRcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0RGF5c0luTW9udGgoeWVhciwgdGhpcy52aWV3RGF0ZS5tb250aCk7XG4gICAgICAgIGlmICh0aGlzLnZpZXdEYXRlLmRheSA+IGRheXNJbk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IE5lcGFsaURhdGUoeWVhciwgdGhpcy52aWV3RGF0ZS5tb250aCwgZGF5c0luTW9udGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIG9uTW9udGhDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUsIDEwKTtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVDb252ZXJ0ZXIuZ2V0RGF5c0luTW9udGgodGhpcy52aWV3RGF0ZS55ZWFyLCBtb250aCk7XG4gICAgICAgIGNvbnN0IG5ld0RheSA9IE1hdGgubWluKHRoaXMudmlld0RhdGUuZGF5LCBkYXlzSW5Nb250aCk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh0aGlzLnZpZXdEYXRlLnllYXIsIG1vbnRoLCBuZXdEYXkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyR3JpZCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBEYXRlIHNlbGVjdGlvblxuICAgIHNlbGVjdERhdGUoZGF5OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChkYXkgPT09IG51bGwgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgTmVwYWxpRGF0ZSh0aGlzLnZpZXdEYXRlLnllYXIsIHRoaXMudmlld0RhdGUubW9udGgsIGRheSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0ZVNlbGVjdGFibGUoZGF5KSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHNlbGVjdFRvZGF5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRUb2RheUJTKCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGVDb252ZXJ0ZXIuaXNEYXRlSW5SYW5nZSh0b2RheSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRvZGF5O1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRvZGF5LmNsb25lKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJEYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgbWV0aG9kc1xuICAgIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJHcmlkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbGVuZGFyR3JpZCA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRNb250aENhbGVuZGFyR3JpZCh0aGlzLnZpZXdEYXRlLnllYXIsIHRoaXMudmlld0RhdGUubW9udGgpO1xuICAgIH1cblxuICAgIGlzRGF0ZVNlbGVjdGFibGUoZGF5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRheSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IE5lcGFsaURhdGUodGhpcy52aWV3RGF0ZS55ZWFyLCB0aGlzLnZpZXdEYXRlLm1vbnRoLCBkYXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlQ29udmVydGVyLmlzRGF0ZUluUmFuZ2UoZGF0ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgIH1cblxuICAgIGlzVG9kYXkoZGF5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRheSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZUNvbnZlcnRlci5nZXRUb2RheUJTKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlLnllYXIgPT09IHRvZGF5LnllYXIgJiYgdGhpcy52aWV3RGF0ZS5tb250aCA9PT0gdG9kYXkubW9udGggJiYgZGF5ID09PSB0b2RheS5kYXlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKGRheTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChkYXkgPT09IG51bGwgfHwgIXRoaXMuc2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlLnllYXIgPT09IHRoaXMuc2VsZWN0ZWREYXRlLnllYXIgJiZcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUubW9udGggPT09IHRoaXMuc2VsZWN0ZWREYXRlLm1vbnRoICYmXG4gICAgICAgICAgICBkYXkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmRheVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGUuZm9ybWF0KHRoaXMuZGlzcGxheUZvcm1hdCwgdGhpcy51c2VOZXBhbGlEaWdpdHMpO1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50TW9udGhOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoTmFtZXNbdGhpcy52aWV3RGF0ZS5tb250aCAtIDFdO1xuICAgIH1cblxuICAgIHRyYWNrQnlXZWVrKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgdHJhY2tCeURheShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyXCIgW2NsYXNzLmYxLWRhdGVwaWNrZXItLWRhcmtdPVwidGhlbWUgPT09ICdkYXJrJ1wiIFtjbGFzcy5mMS1kYXRlcGlja2VyLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDwhLS0gSW5wdXQgRmllbGQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX2lucHV0LXdyYXBwZXJcIiAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoKVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faW5wdXRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9faWNvblwiPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjRcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiByeD1cIjJcIiByeT1cIjJcIj48L3JlY3Q+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIxNlwiIHkxPVwiMlwiIHgyPVwiMTZcIiB5Mj1cIjZcIj48L2xpbmU+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCI4XCIgeTE9XCIyXCIgeDI9XCI4XCIgeTI9XCI2XCI+PC9saW5lPlxuICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiM1wiIHkxPVwiMTBcIiB4Mj1cIjIxXCIgeTI9XCIxMFwiPjwvbGluZT5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWREYXRlICYmICFkaXNhYmxlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fY2xlYXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRGF0ZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIGRhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIxOFwiIHkxPVwiNlwiIHgyPVwiNlwiIHkyPVwiMThcIj48L2xpbmU+XG4gICAgICAgICAgICAgICAgPGxpbmUgeDE9XCI2XCIgeTE9XCI2XCIgeDI9XCIxOFwiIHkyPVwiMThcIj48L2xpbmU+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENhbGVuZGFyIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19kcm9wZG93blwiICpuZ0lmPVwiaXNPcGVuXCIgW0BmYWRlSW5dPlxuICAgICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX2hlYWRlclwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fbmF2LWJ0blwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIxNSAxOCA5IDEyIDE1IDZcIj48L3BvbHlsaW5lPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19zZWxlY3RvcnNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZpZXdEYXRlLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk1vbnRoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbW9udGggb2YgbW9udGhOYW1lczsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJpICsgMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZpZXdEYXRlLnllYXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uWWVhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIiBbdmFsdWVdPVwieWVhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlTmVwYWxpRGlnaXRzID8gKHllYXIgfCBudW1iZXI6JzEuMC0wJykgOiB5ZWFyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX25hdi1idG5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgbW9udGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjkgMTggMTUgMTIgOSA2XCI+PC9wb2x5bGluZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFdlZWtkYXkgSGVhZGVycyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3dlZWtkYXlzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla2RheU5hbWVzXCI+XG4gICAgICAgICAgICAgICAge3sgZGF5IH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDYWxlbmRhciBHcmlkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fZ3JpZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYxLWRhdGVwaWNrZXJfX3dlZWtcIiAqbmdGb3I9XCJsZXQgd2VlayBvZiBjYWxlbmRhckdyaWQ7IHRyYWNrQnk6IHRyYWNrQnlXZWVrXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19kYXlcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWs7IHRyYWNrQnk6IHRyYWNrQnlEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZjEtZGF0ZXBpY2tlcl9fZGF5LS1lbXB0eV09XCJkYXkgPT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZjEtZGF0ZXBpY2tlcl9fZGF5LS10b2RheV09XCJkYXkgIT09IG51bGwgJiYgaXNUb2RheShkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmYxLWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0ZWRdPVwiZGF5ICE9PSBudWxsICYmIGlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mMS1kYXRlcGlja2VyX19kYXktLWRpc2FibGVkXT1cImRheSAhPT0gbnVsbCAmJiAhaXNEYXRlU2VsZWN0YWJsZShkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRheSA9PT0gbnVsbCB8fCAhaXNEYXRlU2VsZWN0YWJsZShkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhdGUoZGF5KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBkYXkgIT09IG51bGwgPyAodXNlTmVwYWxpRGlnaXRzID8gZGF5IDogZGF5KSA6ICcnIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBGb290ZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmMS1kYXRlcGlja2VyX19mb290ZXJcIiAqbmdJZj1cInNob3dUb2RheUJ1dHRvblwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZjEtZGF0ZXBpY2tlcl9fdG9kYXktYnRuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VG9kYXkoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgbGFuZ3VhZ2UgPT09ICducCcgPyAn4KSG4KScJyA6ICdUb2RheScgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,20 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { NepaliDatePickerComponent } from './components/nepali-date-picker/nepali-date-picker.component';
3
+ import * as i0 from "@angular/core";
4
+ export class F1NepaliDatePickerModule {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: F1NepaliDatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: F1NepaliDatePickerModule, imports: [NepaliDatePickerComponent], exports: [NepaliDatePickerComponent] }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: F1NepaliDatePickerModule, imports: [NepaliDatePickerComponent] }); }
8
+ }
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: F1NepaliDatePickerModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{
12
+ imports: [
13
+ NepaliDatePickerComponent, // Standalone component, import directly
14
+ ],
15
+ exports: [
16
+ NepaliDatePickerComponent,
17
+ ],
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZjEtbmVwYWxpLWRhdGUtcGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2YxLW5lcGFsaS1kYXRlLXBpY2tlci9zcmMvbGliL2YxLW5lcGFsaS1kYXRlLXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQzs7QUFVekcsTUFBTSxPQUFPLHdCQUF3QjsrR0FBeEIsd0JBQXdCO2dIQUF4Qix3QkFBd0IsWUFOakMseUJBQXlCLGFBR3pCLHlCQUF5QjtnSEFHaEIsd0JBQXdCLFlBTmpDLHlCQUF5Qjs7NEZBTWhCLHdCQUF3QjtrQkFScEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AseUJBQXlCLEVBQUUsd0NBQXdDO3FCQUNwRTtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AseUJBQXlCO3FCQUMxQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZXBhbGlEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25lcGFsaS1kYXRlLXBpY2tlci9uZXBhbGktZGF0ZS1waWNrZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIE5lcGFsaURhdGVQaWNrZXJDb21wb25lbnQsIC8vIFN0YW5kYWxvbmUgY29tcG9uZW50LCBpbXBvcnQgZGlyZWN0bHlcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIE5lcGFsaURhdGVQaWNrZXJDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEYxTmVwYWxpRGF0ZVBpY2tlck1vZHVsZSB7IH1cbiJdfQ==