ng-primitives 0.3.0 → 0.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.
- package/date-picker/README.md +3 -0
- package/date-picker/date-picker/date-picker.directive.d.ts +61 -0
- package/date-picker/date-picker/date-picker.token.d.ts +14 -0
- package/date-picker/date-picker-cell/date-picker-cell.directive.d.ts +17 -0
- package/date-picker/date-picker-cell/date-picker-cell.token.d.ts +14 -0
- package/date-picker/date-picker-cell-render/date-picker-cell-render.directive.d.ts +43 -0
- package/date-picker/date-picker-cell-render/date-picker-cell-render.token.d.ts +19 -0
- package/date-picker/date-picker-date-button/date-picker-date-button.directive.d.ts +99 -0
- package/date-picker/date-picker-date-button/date-picker-date-button.token.d.ts +14 -0
- package/date-picker/date-picker-grid/date-picker-grid.directive.d.ts +13 -0
- package/date-picker/date-picker-grid/date-picker-grid.token.d.ts +14 -0
- package/date-picker/date-picker-label/date-picker-label.directive.d.ts +17 -0
- package/date-picker/date-picker-label/date-picker-label.token.d.ts +14 -0
- package/date-picker/date-picker-next-month/date-picker-next-month.directive.d.ts +32 -0
- package/date-picker/date-picker-next-month/date-picker-next-month.token.d.ts +14 -0
- package/date-picker/date-picker-previous-month/date-picker-previous-month.directive.d.ts +32 -0
- package/date-picker/date-picker-previous-month/date-picker-previous-month.token.d.ts +14 -0
- package/date-picker/date-picker-row-render/date-picker-row-render.directive.d.ts +49 -0
- package/date-picker/date-picker-row-render/date-picker-row-render.token.d.ts +19 -0
- package/date-picker/index.d.ts +25 -0
- package/date-time/README.md +3 -0
- package/date-time/date-adapter/date-adapter.d.ts +169 -0
- package/date-time/date-adapter/date-adapter.token.d.ts +18 -0
- package/date-time/index.d.ts +9 -0
- package/date-time/native-date-adapter/native-date-adapter.d.ts +106 -0
- package/esm2022/date-picker/date-picker/date-picker.directive.mjs +117 -0
- package/esm2022/date-picker/date-picker/date-picker.token.mjs +16 -0
- package/esm2022/date-picker/date-picker-cell/date-picker-cell.directive.mjs +50 -0
- package/esm2022/date-picker/date-picker-cell/date-picker-cell.token.mjs +16 -0
- package/esm2022/date-picker/date-picker-cell-render/date-picker-cell-render.directive.mjs +72 -0
- package/esm2022/date-picker/date-picker-cell-render/date-picker-cell-render.token.mjs +23 -0
- package/esm2022/date-picker/date-picker-date-button/date-picker-date-button.directive.mjs +277 -0
- package/esm2022/date-picker/date-picker-date-button/date-picker-date-button.token.mjs +16 -0
- package/esm2022/date-picker/date-picker-grid/date-picker-grid.directive.mjs +40 -0
- package/esm2022/date-picker/date-picker-grid/date-picker-grid.token.mjs +16 -0
- package/esm2022/date-picker/date-picker-label/date-picker-label.directive.mjs +47 -0
- package/esm2022/date-picker/date-picker-label/date-picker-label.token.mjs +16 -0
- package/esm2022/date-picker/date-picker-next-month/date-picker-next-month.directive.mjs +103 -0
- package/esm2022/date-picker/date-picker-next-month/date-picker-next-month.token.mjs +16 -0
- package/esm2022/date-picker/date-picker-previous-month/date-picker-previous-month.directive.mjs +104 -0
- package/esm2022/date-picker/date-picker-previous-month/date-picker-previous-month.token.mjs +16 -0
- package/esm2022/date-picker/date-picker-row-render/date-picker-row-render.directive.mjs +118 -0
- package/esm2022/date-picker/date-picker-row-render/date-picker-row-render.token.mjs +23 -0
- package/esm2022/date-picker/index.mjs +26 -0
- package/esm2022/date-picker/ng-primitives-date-picker.mjs +5 -0
- package/esm2022/date-time/date-adapter/date-adapter.mjs +9 -0
- package/esm2022/date-time/date-adapter/date-adapter.token.mjs +24 -0
- package/esm2022/date-time/index.mjs +9 -0
- package/esm2022/date-time/native-date-adapter/native-date-adapter.mjs +149 -0
- package/esm2022/date-time/ng-primitives-date-time.mjs +5 -0
- package/esm2022/interactions/hover/hover.directive.mjs +9 -10
- package/fesm2022/ng-primitives-date-picker.mjs +1044 -0
- package/fesm2022/ng-primitives-date-picker.mjs.map +1 -0
- package/fesm2022/ng-primitives-date-time.mjs +187 -0
- package/fesm2022/ng-primitives-date-time.mjs.map +1 -0
- package/fesm2022/ng-primitives-interactions.mjs +8 -10
- package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
- package/interactions/hover/hover.directive.d.ts +3 -3
- package/package.json +18 -1
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
9
|
+
import { computed, Directive, ElementRef, HostListener, inject } from '@angular/core';
|
|
10
|
+
import { NgpButton } from 'ng-primitives/button';
|
|
11
|
+
import { injectDateAdapter } from 'ng-primitives/date-time';
|
|
12
|
+
import { NgpDisabledToken } from 'ng-primitives/internal';
|
|
13
|
+
import { injectDatePickerCellDate } from '../date-picker-cell-render/date-picker-cell-render.token';
|
|
14
|
+
import { injectDatePicker } from '../date-picker/date-picker.token';
|
|
15
|
+
import { NgpDatePickerDateButtonToken } from './date-picker-date-button.token';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
import * as i1 from "ng-primitives/button";
|
|
18
|
+
export class NgpDatePickerDateButton {
|
|
19
|
+
constructor() {
|
|
20
|
+
/**
|
|
21
|
+
* Access the element ref.
|
|
22
|
+
*/
|
|
23
|
+
this.elementRef = inject(ElementRef);
|
|
24
|
+
/**
|
|
25
|
+
* Access the focus monitor.
|
|
26
|
+
*/
|
|
27
|
+
this.focusMonitor = inject(FocusMonitor);
|
|
28
|
+
/**
|
|
29
|
+
* Access the date picker.
|
|
30
|
+
*/
|
|
31
|
+
this.datePicker = injectDatePicker();
|
|
32
|
+
/**
|
|
33
|
+
* Access the date adapter.
|
|
34
|
+
*/
|
|
35
|
+
this.dateAdapter = injectDateAdapter();
|
|
36
|
+
/**
|
|
37
|
+
* The date this cell represents.
|
|
38
|
+
*/
|
|
39
|
+
this.date = injectDatePickerCellDate();
|
|
40
|
+
/**
|
|
41
|
+
* Determine if this is the focused date.
|
|
42
|
+
*/
|
|
43
|
+
this.focused = computed(() => this.dateAdapter.isSameDay(this.date, this.datePicker.focusedDate()));
|
|
44
|
+
/**
|
|
45
|
+
* Determine if this is the selected date.
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
this.selected = computed(() => {
|
|
49
|
+
const selected = this.datePicker.date();
|
|
50
|
+
return selected && this.dateAdapter.isSameDay(this.date, selected);
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Determine if this date is outside the current month.
|
|
54
|
+
*/
|
|
55
|
+
this.outside = computed(() => !this.dateAdapter.isSameMonth(this.date, this.datePicker.focusedDate()));
|
|
56
|
+
/**
|
|
57
|
+
* Determine if this date is today.
|
|
58
|
+
*/
|
|
59
|
+
this.today = computed(() => this.dateAdapter.isSameDay(this.date, this.dateAdapter.now()));
|
|
60
|
+
/**
|
|
61
|
+
* Determine if this date is disabled.
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
this.disabled = computed(() => {
|
|
65
|
+
const min = this.datePicker.min();
|
|
66
|
+
const max = this.datePicker.max();
|
|
67
|
+
if (this.datePicker.disabled() || this.datePicker.dateDisabled()(this.date)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (min && this.dateAdapter.compare(this.dateAdapter.startOfDay(this.date), min) < 0) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
if (max && this.dateAdapter.compare(this.dateAdapter.startOfDay(this.date), max) > 0) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
});
|
|
78
|
+
/**
|
|
79
|
+
* Determine if the element is a button.
|
|
80
|
+
*/
|
|
81
|
+
this.isButton = this.elementRef.nativeElement.tagName === 'BUTTON';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* When the button is clicked, select the date.
|
|
85
|
+
*/
|
|
86
|
+
select(event) {
|
|
87
|
+
// if the button is disabled, or is already selected, do nothing.
|
|
88
|
+
if (this.disabled() || this.selected()) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// because this may not be a button, we should stop the event from firing twice due to
|
|
92
|
+
// us listening to both the click and the keydown.enter event.
|
|
93
|
+
if (event) {
|
|
94
|
+
event.preventDefault();
|
|
95
|
+
event.stopPropagation();
|
|
96
|
+
}
|
|
97
|
+
this.datePicker.date.set(this.date);
|
|
98
|
+
this.datePicker.setFocusedDate(this.date, 'mouse', 'forward');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Focus if this is the current focused date.
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
focus() {
|
|
105
|
+
if (this.dateAdapter.isSameDay(this.date, this.datePicker.focusedDate())) {
|
|
106
|
+
this.focusMonitor.focusVia(this.elementRef, 'keyboard');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Focus the previous cell.
|
|
111
|
+
*/
|
|
112
|
+
focusPrevious(event) {
|
|
113
|
+
event.preventDefault();
|
|
114
|
+
event.stopPropagation();
|
|
115
|
+
// in rtl, the arrow keys are reversed.
|
|
116
|
+
if (this.getDirection() === 'rtl') {
|
|
117
|
+
this.focusDate(this.dateAdapter.add(this.datePicker.focusedDate(), { days: 1 }), 'forward');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.focusDate(this.dateAdapter.subtract(this.datePicker.focusedDate(), { days: 1 }), 'backward');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Focus the next cell.
|
|
125
|
+
*/
|
|
126
|
+
focusNext(event) {
|
|
127
|
+
event.preventDefault();
|
|
128
|
+
event.stopPropagation();
|
|
129
|
+
// in rtl, the arrow keys are reversed.
|
|
130
|
+
if (this.getDirection() === 'rtl') {
|
|
131
|
+
this.focusDate(this.dateAdapter.subtract(this.datePicker.focusedDate(), { days: 1 }), 'backward');
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this.focusDate(this.dateAdapter.add(this.datePicker.focusedDate(), { days: 1 }), 'forward');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Focus the above cell.
|
|
139
|
+
*/
|
|
140
|
+
focusAbove(event) {
|
|
141
|
+
event.preventDefault();
|
|
142
|
+
event.stopPropagation();
|
|
143
|
+
this.focusDate(this.dateAdapter.subtract(this.datePicker.focusedDate(), { days: 7 }), 'backward');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Focus the below cell.
|
|
147
|
+
*/
|
|
148
|
+
focusBelow(event) {
|
|
149
|
+
event.preventDefault();
|
|
150
|
+
event.stopPropagation();
|
|
151
|
+
this.focusDate(this.dateAdapter.add(this.datePicker.focusedDate(), { days: 7 }), 'forward');
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Focus the first date of the month.
|
|
155
|
+
*/
|
|
156
|
+
focusFirst(event) {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
event.stopPropagation();
|
|
159
|
+
this.focusDate(this.dateAdapter.startOfMonth(this.datePicker.focusedDate()), 'forward');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Focus the last date of the month.
|
|
163
|
+
*/
|
|
164
|
+
focusLast(event) {
|
|
165
|
+
event.preventDefault();
|
|
166
|
+
event.stopPropagation();
|
|
167
|
+
this.focusDate(this.dateAdapter.endOfMonth(this.datePicker.focusedDate()), 'backward');
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Focus the same date in the previous month.
|
|
171
|
+
*/
|
|
172
|
+
focusPreviousMonth(event) {
|
|
173
|
+
event.preventDefault();
|
|
174
|
+
event.stopPropagation();
|
|
175
|
+
const date = this.dateAdapter.getDate(this.datePicker.focusedDate());
|
|
176
|
+
let previousMonthTarget = this.dateAdapter.startOfMonth(this.datePicker.focusedDate());
|
|
177
|
+
previousMonthTarget = this.dateAdapter.subtract(previousMonthTarget, { months: 1 });
|
|
178
|
+
const lastDay = this.dateAdapter.endOfMonth(previousMonthTarget);
|
|
179
|
+
// if we are on a date that does not exist in the previous month, we should focus the last day of the month.
|
|
180
|
+
if (date > this.dateAdapter.getDate(lastDay)) {
|
|
181
|
+
this.focusDate(lastDay, 'forward');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.focusDate(this.dateAdapter.set(previousMonthTarget, { day: date }), 'forward');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Focus the same date in the next month.
|
|
190
|
+
*/
|
|
191
|
+
focusNextMonth(event) {
|
|
192
|
+
event.preventDefault();
|
|
193
|
+
event.stopPropagation();
|
|
194
|
+
const date = this.dateAdapter.getDate(this.datePicker.focusedDate());
|
|
195
|
+
let nextMonthTarget = this.dateAdapter.startOfMonth(this.datePicker.focusedDate());
|
|
196
|
+
nextMonthTarget = this.dateAdapter.add(nextMonthTarget, { months: 1 });
|
|
197
|
+
const lastDay = this.dateAdapter.endOfMonth(nextMonthTarget);
|
|
198
|
+
// if we are on a date that does not exist in the next month, we should focus the last day of the month.
|
|
199
|
+
if (date > this.dateAdapter.getDate(lastDay)) {
|
|
200
|
+
this.focusDate(lastDay, 'backward');
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.focusDate(this.dateAdapter.set(nextMonthTarget, { day: date }), 'backward');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
focusDate(date, direction) {
|
|
208
|
+
this.datePicker.setFocusedDate(date, 'keyboard', direction);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get the direction of the element.
|
|
212
|
+
*/
|
|
213
|
+
getDirection() {
|
|
214
|
+
return getComputedStyle(this.elementRef.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';
|
|
215
|
+
}
|
|
216
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerDateButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
217
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: NgpDatePickerDateButton, isStandalone: true, selector: "[ngpDatePickerDateButton]", host: { listeners: { "click": "select()", "keydown.enter": "select($event)", "keydown.space": "select($event)", "keydown.arrowLeft": "focusPrevious($event)", "keydown.arrowRight": "focusNext($event)", "keydown.arrowUp": "focusAbove($event)", "keydown.arrowDown": "focusBelow($event)", "keydown.home": "focusFirst($event)", "keydown.end": "focusLast($event)", "keydown.pageUp": "focusPreviousMonth($event)", "keydown.pageDown": "focusNextMonth($event)" }, properties: { "attr.role": "!isButton ? \"button\" : null", "attr.tabindex": "focused() ? 0 : -1", "attr.data-selected": "selected()", "attr.data-disabled": "disabled()", "attr.aria-disabled": "disabled()", "attr.data-outside-month": "outside()", "attr.data-today": "today()" } }, providers: [
|
|
218
|
+
{ provide: NgpDatePickerDateButtonToken, useExisting: NgpDatePickerDateButton },
|
|
219
|
+
{ provide: NgpDisabledToken, useExisting: NgpDatePickerDateButton },
|
|
220
|
+
], exportAs: ["ngpDatePickerDateButton"], hostDirectives: [{ directive: i1.NgpButton }], ngImport: i0 }); }
|
|
221
|
+
}
|
|
222
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerDateButton, decorators: [{
|
|
223
|
+
type: Directive,
|
|
224
|
+
args: [{
|
|
225
|
+
standalone: true,
|
|
226
|
+
selector: '[ngpDatePickerDateButton]',
|
|
227
|
+
exportAs: 'ngpDatePickerDateButton',
|
|
228
|
+
providers: [
|
|
229
|
+
{ provide: NgpDatePickerDateButtonToken, useExisting: NgpDatePickerDateButton },
|
|
230
|
+
{ provide: NgpDisabledToken, useExisting: NgpDatePickerDateButton },
|
|
231
|
+
],
|
|
232
|
+
host: {
|
|
233
|
+
'[attr.role]': '!isButton ? "button" : null',
|
|
234
|
+
'[attr.tabindex]': 'focused() ? 0 : -1',
|
|
235
|
+
'[attr.data-selected]': 'selected()',
|
|
236
|
+
'[attr.data-disabled]': 'disabled()',
|
|
237
|
+
'[attr.aria-disabled]': 'disabled()',
|
|
238
|
+
'[attr.data-outside-month]': 'outside()',
|
|
239
|
+
'[attr.data-today]': 'today()',
|
|
240
|
+
},
|
|
241
|
+
hostDirectives: [NgpButton],
|
|
242
|
+
}]
|
|
243
|
+
}], propDecorators: { select: [{
|
|
244
|
+
type: HostListener,
|
|
245
|
+
args: ['click']
|
|
246
|
+
}, {
|
|
247
|
+
type: HostListener,
|
|
248
|
+
args: ['keydown.enter', ['$event']]
|
|
249
|
+
}, {
|
|
250
|
+
type: HostListener,
|
|
251
|
+
args: ['keydown.space', ['$event']]
|
|
252
|
+
}], focusPrevious: [{
|
|
253
|
+
type: HostListener,
|
|
254
|
+
args: ['keydown.arrowLeft', ['$event']]
|
|
255
|
+
}], focusNext: [{
|
|
256
|
+
type: HostListener,
|
|
257
|
+
args: ['keydown.arrowRight', ['$event']]
|
|
258
|
+
}], focusAbove: [{
|
|
259
|
+
type: HostListener,
|
|
260
|
+
args: ['keydown.arrowUp', ['$event']]
|
|
261
|
+
}], focusBelow: [{
|
|
262
|
+
type: HostListener,
|
|
263
|
+
args: ['keydown.arrowDown', ['$event']]
|
|
264
|
+
}], focusFirst: [{
|
|
265
|
+
type: HostListener,
|
|
266
|
+
args: ['keydown.home', ['$event']]
|
|
267
|
+
}], focusLast: [{
|
|
268
|
+
type: HostListener,
|
|
269
|
+
args: ['keydown.end', ['$event']]
|
|
270
|
+
}], focusPreviousMonth: [{
|
|
271
|
+
type: HostListener,
|
|
272
|
+
args: ['keydown.pageUp', ['$event']]
|
|
273
|
+
}], focusNextMonth: [{
|
|
274
|
+
type: HostListener,
|
|
275
|
+
args: ['keydown.pageDown', ['$event']]
|
|
276
|
+
}] } });
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItZGF0ZS1idXR0b24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9kYXRlLXBpY2tlci9zcmMvZGF0ZS1waWNrZXItZGF0ZS1idXR0b24vZGF0ZS1waWNrZXItZGF0ZS1idXR0b24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFpQixnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFxQi9FLE1BQU0sT0FBTyx1QkFBdUI7SUFuQnBDO1FBb0JFOztXQUVHO1FBQ2MsZUFBVSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFFMUU7O1dBRUc7UUFDYyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyRDs7V0FFRztRQUNjLGVBQVUsR0FBRyxnQkFBZ0IsRUFBSyxDQUFDO1FBRXBEOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxpQkFBaUIsRUFBSyxDQUFDO1FBRXREOztXQUVHO1FBQ2MsU0FBSSxHQUFHLHdCQUF3QixF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O2lCQUM1Qjs4QkEyRlcsTUFBTTtzQkFIZixZQUFZO3VCQUFDLE9BQU87O3NCQUNwQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3hDLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdDL0IsYUFBYTtzQkFEdEIsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFvQm5DLFNBQVM7c0JBRGxCLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBb0JwQyxVQUFVO3NCQURuQixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWVqQyxVQUFVO3NCQURuQixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVluQyxVQUFVO3NCQURuQixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXOUIsU0FBUztzQkFEbEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVzdCLGtCQUFrQjtzQkFEM0IsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5QmhDLGNBQWM7c0JBRHZCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgMi4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3BCdXR0b24gfSBmcm9tICduZy1wcmltaXRpdmVzL2J1dHRvbic7XG5pbXBvcnQgeyBpbmplY3REYXRlQWRhcHRlciB9IGZyb20gJ25nLXByaW1pdGl2ZXMvZGF0ZS10aW1lJztcbmltcG9ydCB7IE5ncENhbkRpc2FibGUsIE5ncERpc2FibGVkVG9rZW4gfSBmcm9tICduZy1wcmltaXRpdmVzL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdERhdGVQaWNrZXJDZWxsRGF0ZSB9IGZyb20gJy4uL2RhdGUtcGlja2VyLWNlbGwtcmVuZGVyL2RhdGUtcGlja2VyLWNlbGwtcmVuZGVyLnRva2VuJztcbmltcG9ydCB7IGluamVjdERhdGVQaWNrZXIgfSBmcm9tICcuLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci50b2tlbic7XG5pbXBvcnQgeyBOZ3BEYXRlUGlja2VyRGF0ZUJ1dHRvblRva2VuIH0gZnJvbSAnLi9kYXRlLXBpY2tlci1kYXRlLWJ1dHRvbi50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tuZ3BEYXRlUGlja2VyRGF0ZUJ1dHRvbl0nLFxuICBleHBvcnRBczogJ25ncERhdGVQaWNrZXJEYXRlQnV0dG9uJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBOZ3BEYXRlUGlja2VyRGF0ZUJ1dHRvblRva2VuLCB1c2VFeGlzdGluZzogTmdwRGF0ZVBpY2tlckRhdGVCdXR0b24gfSxcbiAgICB7IHByb3ZpZGU6IE5ncERpc2FibGVkVG9rZW4sIHVzZUV4aXN0aW5nOiBOZ3BEYXRlUGlja2VyRGF0ZUJ1dHRvbiB9LFxuICBdLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnJvbGVdJzogJyFpc0J1dHRvbiA/IFwiYnV0dG9uXCIgOiBudWxsJyxcbiAgICAnW2F0dHIudGFiaW5kZXhdJzogJ2ZvY3VzZWQoKSA/IDAgOiAtMScsXG4gICAgJ1thdHRyLmRhdGEtc2VsZWN0ZWRdJzogJ3NlbGVjdGVkKCknLFxuICAgICdbYXR0ci5kYXRhLWRpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQoKScsXG4gICAgJ1thdHRyLmRhdGEtb3V0c2lkZS1tb250aF0nOiAnb3V0c2lkZSgpJyxcbiAgICAnW2F0dHIuZGF0YS10b2RheV0nOiAndG9kYXkoKScsXG4gIH0sXG4gIGhvc3REaXJlY3RpdmVzOiBbTmdwQnV0dG9uXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdwRGF0ZVBpY2tlckRhdGVCdXR0b248VD4gaW1wbGVtZW50cyBOZ3BDYW5EaXNhYmxlIHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZWxlbWVudCByZWYuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGZvY3VzIG1vbml0b3IuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzTW9uaXRvciA9IGluamVjdChGb2N1c01vbml0b3IpO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGRhdGUgcGlja2VyLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlja2VyID0gaW5qZWN0RGF0ZVBpY2tlcjxUPigpO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGRhdGUgYWRhcHRlci5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZUFkYXB0ZXIgPSBpbmplY3REYXRlQWRhcHRlcjxUPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSB0aGlzIGNlbGwgcmVwcmVzZW50cy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZSA9IGluamVjdERhdGVQaWNrZXJDZWxsRGF0ZTxUPigpO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgZm9jdXNlZCBkYXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZvY3VzZWQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuaXNTYW1lRGF5KHRoaXMuZGF0ZSwgdGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCkpLFxuICApO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBzZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGF0ZVBpY2tlci5kYXRlKCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkICYmIHRoaXMuZGF0ZUFkYXB0ZXIuaXNTYW1lRGF5KHRoaXMuZGF0ZSwgc2VsZWN0ZWQpO1xuICB9KTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZGF0ZSBpcyBvdXRzaWRlIHRoZSBjdXJyZW50IG1vbnRoLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG91dHNpZGUgPSBjb21wdXRlZChcbiAgICAoKSA9PiAhdGhpcy5kYXRlQWRhcHRlci5pc1NhbWVNb250aCh0aGlzLmRhdGUsIHRoaXMuZGF0ZVBpY2tlci5mb2N1c2VkRGF0ZSgpKSxcbiAgKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZGF0ZSBpcyB0b2RheS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB0b2RheSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5kYXRlQWRhcHRlci5pc1NhbWVEYXkodGhpcy5kYXRlLCB0aGlzLmRhdGVBZGFwdGVyLm5vdygpKSxcbiAgKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZGF0ZSBpcyBkaXNhYmxlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtaW4gPSB0aGlzLmRhdGVQaWNrZXIubWluKCk7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5kYXRlUGlja2VyLm1heCgpO1xuXG4gICAgaWYgKHRoaXMuZGF0ZVBpY2tlci5kaXNhYmxlZCgpIHx8IHRoaXMuZGF0ZVBpY2tlci5kYXRlRGlzYWJsZWQoKSh0aGlzLmRhdGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobWluICYmIHRoaXMuZGF0ZUFkYXB0ZXIuY29tcGFyZSh0aGlzLmRhdGVBZGFwdGVyLnN0YXJ0T2ZEYXkodGhpcy5kYXRlKSwgbWluKSA8IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChtYXggJiYgdGhpcy5kYXRlQWRhcHRlci5jb21wYXJlKHRoaXMuZGF0ZUFkYXB0ZXIuc3RhcnRPZkRheSh0aGlzLmRhdGUpLCBtYXgpID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IGlzIGEgYnV0dG9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQnV0dG9uID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0JVVFRPTic7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLCBzZWxlY3QgdGhlIGRhdGUuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNwYWNlJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIHNlbGVjdChldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBpZiB0aGUgYnV0dG9uIGlzIGRpc2FibGVkLCBvciBpcyBhbHJlYWR5IHNlbGVjdGVkLCBkbyBub3RoaW5nLlxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmVjYXVzZSB0aGlzIG1heSBub3QgYmUgYSBidXR0b24sIHdlIHNob3VsZCBzdG9wIHRoZSBldmVudCBmcm9tIGZpcmluZyB0d2ljZSBkdWUgdG9cbiAgICAvLyB1cyBsaXN0ZW5pbmcgdG8gYm90aCB0aGUgY2xpY2sgYW5kIHRoZSBrZXlkb3duLmVudGVyIGV2ZW50LlxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZVBpY2tlci5kYXRlLnNldCh0aGlzLmRhdGUpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5zZXRGb2N1c2VkRGF0ZSh0aGlzLmRhdGUsICdtb3VzZScsICdmb3J3YXJkJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgaWYgdGhpcyBpcyB0aGUgY3VycmVudCBmb2N1c2VkIGRhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZUFkYXB0ZXIuaXNTYW1lRGF5KHRoaXMuZGF0ZSwgdGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCkpKSB7XG4gICAgICB0aGlzLmZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLmVsZW1lbnRSZWYsICdrZXlib2FyZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgcHJldmlvdXMgY2VsbC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dMZWZ0JywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGZvY3VzUHJldmlvdXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gaW4gcnRsLCB0aGUgYXJyb3cga2V5cyBhcmUgcmV2ZXJzZWQuXG4gICAgaWYgKHRoaXMuZ2V0RGlyZWN0aW9uKCkgPT09ICdydGwnKSB7XG4gICAgICB0aGlzLmZvY3VzRGF0ZSh0aGlzLmRhdGVBZGFwdGVyLmFkZCh0aGlzLmRhdGVQaWNrZXIuZm9jdXNlZERhdGUoKSwgeyBkYXlzOiAxIH0pLCAnZm9yd2FyZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5zdWJ0cmFjdCh0aGlzLmRhdGVQaWNrZXIuZm9jdXNlZERhdGUoKSwgeyBkYXlzOiAxIH0pLFxuICAgICAgICAnYmFja3dhcmQnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIG5leHQgY2VsbC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dSaWdodCcsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBmb2N1c05leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gaW4gcnRsLCB0aGUgYXJyb3cga2V5cyBhcmUgcmV2ZXJzZWQuXG4gICAgaWYgKHRoaXMuZ2V0RGlyZWN0aW9uKCkgPT09ICdydGwnKSB7XG4gICAgICB0aGlzLmZvY3VzRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5zdWJ0cmFjdCh0aGlzLmRhdGVQaWNrZXIuZm9jdXNlZERhdGUoKSwgeyBkYXlzOiAxIH0pLFxuICAgICAgICAnYmFja3dhcmQnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c0RhdGUodGhpcy5kYXRlQWRhcHRlci5hZGQodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCksIHsgZGF5czogMSB9KSwgJ2ZvcndhcmQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIGFib3ZlIGNlbGwuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93VXAnLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgZm9jdXNBYm92ZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLmZvY3VzRGF0ZShcbiAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc3VidHJhY3QodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCksIHsgZGF5czogNyB9KSxcbiAgICAgICdiYWNrd2FyZCcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgYmVsb3cgY2VsbC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGZvY3VzQmVsb3coZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5mb2N1c0RhdGUodGhpcy5kYXRlQWRhcHRlci5hZGQodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCksIHsgZGF5czogNyB9KSwgJ2ZvcndhcmQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgZmlyc3QgZGF0ZSBvZiB0aGUgbW9udGguXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmhvbWUnLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgZm9jdXNGaXJzdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5mb2N1c0RhdGUodGhpcy5kYXRlQWRhcHRlci5zdGFydE9mTW9udGgodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCkpLCAnZm9yd2FyZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBsYXN0IGRhdGUgb2YgdGhlIG1vbnRoLlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgZm9jdXNMYXN0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZvY3VzRGF0ZSh0aGlzLmRhdGVBZGFwdGVyLmVuZE9mTW9udGgodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCkpLCAnYmFja3dhcmQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgc2FtZSBkYXRlIGluIHRoZSBwcmV2aW91cyBtb250aC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZVVwJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGZvY3VzUHJldmlvdXNNb250aChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuZGF0ZVBpY2tlci5mb2N1c2VkRGF0ZSgpKTtcblxuICAgIGxldCBwcmV2aW91c01vbnRoVGFyZ2V0ID0gdGhpcy5kYXRlQWRhcHRlci5zdGFydE9mTW9udGgodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCkpO1xuICAgIHByZXZpb3VzTW9udGhUYXJnZXQgPSB0aGlzLmRhdGVBZGFwdGVyLnN1YnRyYWN0KHByZXZpb3VzTW9udGhUYXJnZXQsIHsgbW9udGhzOiAxIH0pO1xuXG4gICAgY29uc3QgbGFzdERheSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZW5kT2ZNb250aChwcmV2aW91c01vbnRoVGFyZ2V0KTtcblxuICAgIC8vIGlmIHdlIGFyZSBvbiBhIGRhdGUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcHJldmlvdXMgbW9udGgsIHdlIHNob3VsZCBmb2N1cyB0aGUgbGFzdCBkYXkgb2YgdGhlIG1vbnRoLlxuICAgIGlmIChkYXRlID4gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGxhc3REYXkpKSB7XG4gICAgICB0aGlzLmZvY3VzRGF0ZShsYXN0RGF5LCAnZm9yd2FyZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzRGF0ZSh0aGlzLmRhdGVBZGFwdGVyLnNldChwcmV2aW91c01vbnRoVGFyZ2V0LCB7IGRheTogZGF0ZSB9KSwgJ2ZvcndhcmQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIHNhbWUgZGF0ZSBpbiB0aGUgbmV4dCBtb250aC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZURvd24nLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgZm9jdXNOZXh0TW9udGgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmRhdGVQaWNrZXIuZm9jdXNlZERhdGUoKSk7XG5cbiAgICBsZXQgbmV4dE1vbnRoVGFyZ2V0ID0gdGhpcy5kYXRlQWRhcHRlci5zdGFydE9mTW9udGgodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCkpO1xuICAgIG5leHRNb250aFRhcmdldCA9IHRoaXMuZGF0ZUFkYXB0ZXIuYWRkKG5leHRNb250aFRhcmdldCwgeyBtb250aHM6IDEgfSk7XG5cbiAgICBjb25zdCBsYXN0RGF5ID0gdGhpcy5kYXRlQWRhcHRlci5lbmRPZk1vbnRoKG5leHRNb250aFRhcmdldCk7XG5cbiAgICAvLyBpZiB3ZSBhcmUgb24gYSBkYXRlIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG5leHQgbW9udGgsIHdlIHNob3VsZCBmb2N1cyB0aGUgbGFzdCBkYXkgb2YgdGhlIG1vbnRoLlxuICAgIGlmIChkYXRlID4gdGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGxhc3REYXkpKSB7XG4gICAgICB0aGlzLmZvY3VzRGF0ZShsYXN0RGF5LCAnYmFja3dhcmQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c0RhdGUodGhpcy5kYXRlQWRhcHRlci5zZXQobmV4dE1vbnRoVGFyZ2V0LCB7IGRheTogZGF0ZSB9KSwgJ2JhY2t3YXJkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0RhdGUoZGF0ZTogVCwgZGlyZWN0aW9uOiAnZm9yd2FyZCcgfCAnYmFja3dhcmQnKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlUGlja2VyLnNldEZvY3VzZWREYXRlKGRhdGUsICdrZXlib2FyZCcsIGRpcmVjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGdldERpcmVjdGlvbigpOiAnbHRyJyB8ICdydGwnIHtcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZGlyZWN0aW9uID09PSAncnRsJyA/ICdydGwnIDogJ2x0cic7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpDatePickerDateButtonToken = new InjectionToken('NgpDatePickerDateButtonToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the DatePickerDateButton directive instance
|
|
12
|
+
*/
|
|
13
|
+
export function injectDatePickerDateButton() {
|
|
14
|
+
return inject(NgpDatePickerDateButtonToken);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItZGF0ZS1idXR0b24udG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2RhdGUtcGlja2VyL3NyYy9kYXRlLXBpY2tlci1kYXRlLWJ1dHRvbi9kYXRlLXBpY2tlci1kYXRlLWJ1dHRvbi50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FDNUQsOEJBQThCLENBQy9CLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsT0FBTyxNQUFNLENBQUMsNEJBQTRCLENBQStCLENBQUM7QUFDNUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3BEYXRlUGlja2VyRGF0ZUJ1dHRvbiB9IGZyb20gJy4vZGF0ZS1waWNrZXItZGF0ZS1idXR0b24uZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IE5ncERhdGVQaWNrZXJEYXRlQnV0dG9uVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TmdwRGF0ZVBpY2tlckRhdGVCdXR0b248dW5rbm93bj4+KFxuICAnTmdwRGF0ZVBpY2tlckRhdGVCdXR0b25Ub2tlbicsXG4pO1xuXG4vKipcbiAqIEluamVjdCB0aGUgRGF0ZVBpY2tlckRhdGVCdXR0b24gZGlyZWN0aXZlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3REYXRlUGlja2VyRGF0ZUJ1dHRvbjxUPigpOiBOZ3BEYXRlUGlja2VyRGF0ZUJ1dHRvbjxUPiB7XG4gIHJldHVybiBpbmplY3QoTmdwRGF0ZVBpY2tlckRhdGVCdXR0b25Ub2tlbikgYXMgTmdwRGF0ZVBpY2tlckRhdGVCdXR0b248VD47XG59XG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { computed, Directive } from '@angular/core';
|
|
9
|
+
import { injectDatePicker } from '../date-picker/date-picker.token';
|
|
10
|
+
import { NgpDatePickerGridToken } from './date-picker-grid.token';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export class NgpDatePickerGrid {
|
|
13
|
+
constructor() {
|
|
14
|
+
/**
|
|
15
|
+
* Access the date picker.
|
|
16
|
+
*/
|
|
17
|
+
this.datePicker = injectDatePicker();
|
|
18
|
+
/**
|
|
19
|
+
* Determine the id for the label.
|
|
20
|
+
*/
|
|
21
|
+
this.labelId = computed(() => this.datePicker.label()?.id());
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerGrid, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
24
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: NgpDatePickerGrid, isStandalone: true, selector: "[ngpDatePickerGrid]", host: { attributes: { "role": "grid" }, properties: { "attr.aria-labelledby": "labelId()", "attr.data-disabled": "datePicker.disabled()" } }, providers: [{ provide: NgpDatePickerGridToken, useExisting: NgpDatePickerGrid }], exportAs: ["ngpDatePickerGrid"], ngImport: i0 }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerGrid, decorators: [{
|
|
27
|
+
type: Directive,
|
|
28
|
+
args: [{
|
|
29
|
+
standalone: true,
|
|
30
|
+
selector: '[ngpDatePickerGrid]',
|
|
31
|
+
exportAs: 'ngpDatePickerGrid',
|
|
32
|
+
providers: [{ provide: NgpDatePickerGridToken, useExisting: NgpDatePickerGrid }],
|
|
33
|
+
host: {
|
|
34
|
+
role: 'grid',
|
|
35
|
+
'[attr.aria-labelledby]': 'labelId()',
|
|
36
|
+
'[attr.data-disabled]': 'datePicker.disabled()',
|
|
37
|
+
},
|
|
38
|
+
}]
|
|
39
|
+
}] });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItZ3JpZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2RhdGUtcGlja2VyL3NyYy9kYXRlLXBpY2tlci1ncmlkL2RhdGUtcGlja2VyLWdyaWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQWFsRSxNQUFNLE9BQU8saUJBQWlCO0lBWDlCO1FBWUU7O1dBRUc7UUFDYyxlQUFVLEdBQUcsZ0JBQWdCLEVBQUssQ0FBQztRQUVwRDs7V0FFRztRQUNnQixZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM1RTs4R0FWWSxpQkFBaUI7a0dBQWpCLGlCQUFpQixnTkFQakIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQzs7MkZBT3JFLGlCQUFpQjtrQkFYN0IsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxtQkFBbUIsRUFBRSxDQUFDO29CQUNoRixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLE1BQU07d0JBQ1osd0JBQXdCLEVBQUUsV0FBVzt3QkFDckMsc0JBQXNCLEVBQUUsdUJBQXVCO3FCQUNoRDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0RGF0ZVBpY2tlciB9IGZyb20gJy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnRva2VuJztcbmltcG9ydCB7IE5ncERhdGVQaWNrZXJHcmlkVG9rZW4gfSBmcm9tICcuL2RhdGUtcGlja2VyLWdyaWQudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmdwRGF0ZVBpY2tlckdyaWRdJyxcbiAgZXhwb3J0QXM6ICduZ3BEYXRlUGlja2VyR3JpZCcsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmdwRGF0ZVBpY2tlckdyaWRUb2tlbiwgdXNlRXhpc3Rpbmc6IE5ncERhdGVQaWNrZXJHcmlkIH1dLFxuICBob3N0OiB7XG4gICAgcm9sZTogJ2dyaWQnLFxuICAgICdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ2xhYmVsSWQoKScsXG4gICAgJ1thdHRyLmRhdGEtZGlzYWJsZWRdJzogJ2RhdGVQaWNrZXIuZGlzYWJsZWQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncERhdGVQaWNrZXJHcmlkPFQ+IHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaWNrZXIgPSBpbmplY3REYXRlUGlja2VyPFQ+KCk7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgaWQgZm9yIHRoZSBsYWJlbC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBsYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRlUGlja2VyLmxhYmVsKCk/LmlkKCkpO1xufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpDatePickerGridToken = new InjectionToken('NgpDatePickerGridToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the DatePickerGrid directive instance
|
|
12
|
+
*/
|
|
13
|
+
export function injectDatePickerGrid() {
|
|
14
|
+
return inject(NgpDatePickerGridToken);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItZ3JpZC50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvZGF0ZS1waWNrZXIvc3JjL2RhdGUtcGlja2VyLWdyaWQvZGF0ZS1waWNrZXItZ3JpZC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsd0JBQXdCLENBQ3pCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxNQUFNLENBQUMsc0JBQXNCLENBQXlCLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3BEYXRlUGlja2VyR3JpZCB9IGZyb20gJy4vZGF0ZS1waWNrZXItZ3JpZC5kaXJlY3RpdmUnO1xuXG5leHBvcnQgY29uc3QgTmdwRGF0ZVBpY2tlckdyaWRUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3BEYXRlUGlja2VyR3JpZDx1bmtub3duPj4oXG4gICdOZ3BEYXRlUGlja2VyR3JpZFRva2VuJyxcbik7XG5cbi8qKlxuICogSW5qZWN0IHRoZSBEYXRlUGlja2VyR3JpZCBkaXJlY3RpdmUgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdERhdGVQaWNrZXJHcmlkPFQ+KCk6IE5ncERhdGVQaWNrZXJHcmlkPFQ+IHtcbiAgcmV0dXJuIGluamVjdChOZ3BEYXRlUGlja2VyR3JpZFRva2VuKSBhcyBOZ3BEYXRlUGlja2VyR3JpZDxUPjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { Directive, input } from '@angular/core';
|
|
9
|
+
import { uniqueId } from 'ng-primitives/utils';
|
|
10
|
+
import { injectDatePicker } from '../date-picker/date-picker.token';
|
|
11
|
+
import { NgpDatePickerLabelToken } from './date-picker-label.token';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class NgpDatePickerLabel {
|
|
14
|
+
constructor() {
|
|
15
|
+
/**
|
|
16
|
+
* Access the date picker.
|
|
17
|
+
*/
|
|
18
|
+
this.datePicker = injectDatePicker();
|
|
19
|
+
/**
|
|
20
|
+
* Define a unique id for the label.
|
|
21
|
+
*/
|
|
22
|
+
this.id = input(uniqueId('ngp-date-picker-label'));
|
|
23
|
+
/**
|
|
24
|
+
* Define the aria live attribute.
|
|
25
|
+
*/
|
|
26
|
+
this.ariaLive = input('polite', {
|
|
27
|
+
alias: 'aria-live',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
31
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", type: NgpDatePickerLabel, isStandalone: true, selector: "[ngpDatePickerLabel]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, ariaLive: { classPropertyName: "ariaLive", publicName: "aria-live", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "id()", "attr.aria-live": "ariaLive()", "attr.data-disabled": "datePicker.disabled()" } }, providers: [{ provide: NgpDatePickerLabelToken, useExisting: NgpDatePickerLabel }], exportAs: ["ngpDatePickerLabel"], ngImport: i0 }); }
|
|
32
|
+
}
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerLabel, decorators: [{
|
|
34
|
+
type: Directive,
|
|
35
|
+
args: [{
|
|
36
|
+
standalone: true,
|
|
37
|
+
selector: '[ngpDatePickerLabel]',
|
|
38
|
+
exportAs: 'ngpDatePickerLabel',
|
|
39
|
+
providers: [{ provide: NgpDatePickerLabelToken, useExisting: NgpDatePickerLabel }],
|
|
40
|
+
host: {
|
|
41
|
+
'[id]': 'id()',
|
|
42
|
+
'[attr.aria-live]': 'ariaLive()',
|
|
43
|
+
'[attr.data-disabled]': 'datePicker.disabled()',
|
|
44
|
+
},
|
|
45
|
+
}]
|
|
46
|
+
}] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbGFiZWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9kYXRlLXBpY2tlci9zcmMvZGF0ZS1waWNrZXItbGFiZWwvZGF0ZS1waWNrZXItbGFiZWwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFhcEUsTUFBTSxPQUFPLGtCQUFrQjtJQVgvQjtRQVlFOztXQUVHO1FBQ2dCLGVBQVUsR0FBRyxnQkFBZ0IsRUFBVyxDQUFDO1FBRTVEOztXQUVHO1FBQ00sT0FBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBRXZEOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbEMsS0FBSyxFQUFFLFdBQVc7U0FDbkIsQ0FBQyxDQUFDO0tBQ0o7OEdBakJZLGtCQUFrQjtrR0FBbEIsa0JBQWtCLHViQVBsQixDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDOzsyRkFPdkUsa0JBQWtCO2tCQVg5QixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLG9CQUFvQixFQUFFLENBQUM7b0JBQ2xGLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsTUFBTTt3QkFDZCxrQkFBa0IsRUFBRSxZQUFZO3dCQUNoQyxzQkFBc0IsRUFBRSx1QkFBdUI7cUJBQ2hEO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB1bmlxdWVJZCB9IGZyb20gJ25nLXByaW1pdGl2ZXMvdXRpbHMnO1xuaW1wb3J0IHsgaW5qZWN0RGF0ZVBpY2tlciB9IGZyb20gJy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnRva2VuJztcbmltcG9ydCB7IE5ncERhdGVQaWNrZXJMYWJlbFRva2VuIH0gZnJvbSAnLi9kYXRlLXBpY2tlci1sYWJlbC50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tuZ3BEYXRlUGlja2VyTGFiZWxdJyxcbiAgZXhwb3J0QXM6ICduZ3BEYXRlUGlja2VyTGFiZWwnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ncERhdGVQaWNrZXJMYWJlbFRva2VuLCB1c2VFeGlzdGluZzogTmdwRGF0ZVBpY2tlckxhYmVsIH1dLFxuICBob3N0OiB7XG4gICAgJ1tpZF0nOiAnaWQoKScsXG4gICAgJ1thdHRyLmFyaWEtbGl2ZV0nOiAnYXJpYUxpdmUoKScsXG4gICAgJ1thdHRyLmRhdGEtZGlzYWJsZWRdJzogJ2RhdGVQaWNrZXIuZGlzYWJsZWQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncERhdGVQaWNrZXJMYWJlbCB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGRhdGUgcGlja2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGVQaWNrZXIgPSBpbmplY3REYXRlUGlja2VyPHVua25vd24+KCk7XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIGxhYmVsLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQgPSBpbnB1dCh1bmlxdWVJZCgnbmdwLWRhdGUtcGlja2VyLWxhYmVsJykpO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgdGhlIGFyaWEgbGl2ZSBhdHRyaWJ1dGUuXG4gICAqL1xuICByZWFkb25seSBhcmlhTGl2ZSA9IGlucHV0KCdwb2xpdGUnLCB7XG4gICAgYWxpYXM6ICdhcmlhLWxpdmUnLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpDatePickerLabelToken = new InjectionToken('NgpDatePickerLabelToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the DatePickerLabel directive instance
|
|
12
|
+
*/
|
|
13
|
+
export function injectDatePickerLabel() {
|
|
14
|
+
return inject(NgpDatePickerLabelToken);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbGFiZWwudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2RhdGUtcGlja2VyL3NyYy9kYXRlLXBpY2tlci1sYWJlbC9kYXRlLXBpY2tlci1sYWJlbC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQseUJBQXlCLENBQzFCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE5ncERhdGVQaWNrZXJMYWJlbCB9IGZyb20gJy4vZGF0ZS1waWNrZXItbGFiZWwuZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IE5ncERhdGVQaWNrZXJMYWJlbFRva2VuID0gbmV3IEluamVjdGlvblRva2VuPE5ncERhdGVQaWNrZXJMYWJlbD4oXG4gICdOZ3BEYXRlUGlja2VyTGFiZWxUb2tlbicsXG4pO1xuXG4vKipcbiAqIEluamVjdCB0aGUgRGF0ZVBpY2tlckxhYmVsIGRpcmVjdGl2ZSBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0RGF0ZVBpY2tlckxhYmVsKCk6IE5ncERhdGVQaWNrZXJMYWJlbCB7XG4gIHJldHVybiBpbmplY3QoTmdwRGF0ZVBpY2tlckxhYmVsVG9rZW4pO1xufVxuIl19
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { computed, Directive, ElementRef, HostListener, inject } from '@angular/core';
|
|
9
|
+
import { NgpButton } from 'ng-primitives/button';
|
|
10
|
+
import { injectDateAdapter } from 'ng-primitives/date-time';
|
|
11
|
+
import { NgpDisabledToken } from 'ng-primitives/internal';
|
|
12
|
+
import { injectDatePicker } from '../date-picker/date-picker.token';
|
|
13
|
+
import { NgpDatePickerNextMonthToken } from './date-picker-next-month.token';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "ng-primitives/button";
|
|
16
|
+
export class NgpDatePickerNextMonth {
|
|
17
|
+
constructor() {
|
|
18
|
+
/**
|
|
19
|
+
* Access the element ref.
|
|
20
|
+
*/
|
|
21
|
+
this.elementRef = inject(ElementRef);
|
|
22
|
+
/**
|
|
23
|
+
* Access the date adapter.
|
|
24
|
+
*/
|
|
25
|
+
this.dateAdapter = injectDateAdapter();
|
|
26
|
+
/**
|
|
27
|
+
* Access the date picker.
|
|
28
|
+
*/
|
|
29
|
+
this.datePicker = injectDatePicker();
|
|
30
|
+
/**
|
|
31
|
+
* Determine if this is a button element
|
|
32
|
+
*/
|
|
33
|
+
this.isButton = this.elementRef.nativeElement.tagName.toLowerCase() === 'button';
|
|
34
|
+
/**
|
|
35
|
+
* Determine if the next month is disabled.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
this.disabled = computed(() => {
|
|
39
|
+
if (this.datePicker.disabled()) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const maxDate = this.datePicker.max();
|
|
43
|
+
const lastDay = this.dateAdapter.set(this.dateAdapter.endOfMonth(this.datePicker.focusedDate()), {
|
|
44
|
+
hour: 23,
|
|
45
|
+
minute: 59,
|
|
46
|
+
second: 59,
|
|
47
|
+
millisecond: 999,
|
|
48
|
+
});
|
|
49
|
+
// if there is a max date and it is equal to or before the last day of the month, disable it.
|
|
50
|
+
if (maxDate && this.dateAdapter.compare(maxDate, lastDay) <= 0) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Navigate to the next month.
|
|
58
|
+
*/
|
|
59
|
+
navigateToNextMonth() {
|
|
60
|
+
if (this.disabled()) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// move focus to the first day of the next month.
|
|
64
|
+
let date = this.datePicker.focusedDate();
|
|
65
|
+
date = this.dateAdapter.add(date, { months: 1 });
|
|
66
|
+
date = this.dateAdapter.set(date, {
|
|
67
|
+
day: 1,
|
|
68
|
+
hour: 0,
|
|
69
|
+
minute: 0,
|
|
70
|
+
second: 0,
|
|
71
|
+
millisecond: 0,
|
|
72
|
+
});
|
|
73
|
+
this.datePicker.setFocusedDate(date, 'mouse', 'forward');
|
|
74
|
+
}
|
|
75
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerNextMonth, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
76
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: NgpDatePickerNextMonth, isStandalone: true, selector: "[ngpDatePickerNextMonth]", host: { listeners: { "click": "navigateToNextMonth()" }, properties: { "attr.data-disabled": "disabled()", "attr.aria-disabled": "disabled()", "attr.disabled": "isButton && disabled() ? true : null", "attr.type": "isButton ? \"button\" : null" } }, providers: [
|
|
77
|
+
{ provide: NgpDatePickerNextMonthToken, useExisting: NgpDatePickerNextMonth },
|
|
78
|
+
{ provide: NgpDisabledToken, useExisting: NgpDatePickerNextMonth },
|
|
79
|
+
], exportAs: ["ngpDatePickerNextMonth"], hostDirectives: [{ directive: i1.NgpButton }], ngImport: i0 }); }
|
|
80
|
+
}
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpDatePickerNextMonth, decorators: [{
|
|
82
|
+
type: Directive,
|
|
83
|
+
args: [{
|
|
84
|
+
standalone: true,
|
|
85
|
+
selector: '[ngpDatePickerNextMonth]',
|
|
86
|
+
exportAs: 'ngpDatePickerNextMonth',
|
|
87
|
+
providers: [
|
|
88
|
+
{ provide: NgpDatePickerNextMonthToken, useExisting: NgpDatePickerNextMonth },
|
|
89
|
+
{ provide: NgpDisabledToken, useExisting: NgpDatePickerNextMonth },
|
|
90
|
+
],
|
|
91
|
+
hostDirectives: [NgpButton],
|
|
92
|
+
host: {
|
|
93
|
+
'[attr.data-disabled]': 'disabled()',
|
|
94
|
+
'[attr.aria-disabled]': 'disabled()',
|
|
95
|
+
'[attr.disabled]': 'isButton && disabled() ? true : null',
|
|
96
|
+
'[attr.type]': 'isButton ? "button" : null',
|
|
97
|
+
},
|
|
98
|
+
}]
|
|
99
|
+
}], propDecorators: { navigateToNextMonth: [{
|
|
100
|
+
type: HostListener,
|
|
101
|
+
args: ['click']
|
|
102
|
+
}] } });
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbmV4dC1tb250aC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2RhdGUtcGlja2VyL3NyYy9kYXRlLXBpY2tlci1uZXh0LW1vbnRoL2RhdGUtcGlja2VyLW5leHQtbW9udGguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQWtCN0UsTUFBTSxPQUFPLHNCQUFzQjtJQWhCbkM7UUFpQkU7O1dBRUc7UUFDYyxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUUxRTs7V0FFRztRQUNjLGdCQUFXLEdBQUcsaUJBQWlCLEVBQUssQ0FBQztRQUV0RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxnQkFBZ0IsRUFBSyxDQUFDO1FBRXBEOztXQUVHO1FBQ2dCLGFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFDO1FBRS9GOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQzFEO2dCQUNFLElBQUksRUFBRSxFQUFFO2dCQUNSLE1BQU0sRUFBRSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFdBQVcsRUFBRSxHQUFHO2FBQ2pCLENBQ0YsQ0FBQztZQUVGLDZGQUE2RjtZQUM3RixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQy9ELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7S0F3Qko7SUF0QkM7O09BRUc7SUFFTyxtQkFBbUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2hDLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxDQUFDO1lBQ1QsV0FBVyxFQUFFLENBQUM7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7OEdBdEVVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLGdVQVp0QjtZQUNULEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRTtZQUM3RSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUU7U0FDbkU7OzJGQVNVLHNCQUFzQjtrQkFoQmxDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFNBQVMsRUFBRTt3QkFDVCxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxXQUFXLHdCQUF3QixFQUFFO3dCQUM3RSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLHdCQUF3QixFQUFFO3FCQUNuRTtvQkFDRCxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQzNCLElBQUksRUFBRTt3QkFDSixzQkFBc0IsRUFBRSxZQUFZO3dCQUNwQyxzQkFBc0IsRUFBRSxZQUFZO3dCQUNwQyxpQkFBaUIsRUFBRSxzQ0FBc0M7d0JBQ3pELGFBQWEsRUFBRSw0QkFBNEI7cUJBQzVDO2lCQUNGOzhCQXNEVyxtQkFBbUI7c0JBRDVCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ncEJ1dHRvbiB9IGZyb20gJ25nLXByaW1pdGl2ZXMvYnV0dG9uJztcbmltcG9ydCB7IGluamVjdERhdGVBZGFwdGVyIH0gZnJvbSAnbmctcHJpbWl0aXZlcy9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgTmdwQ2FuRGlzYWJsZSwgTmdwRGlzYWJsZWRUb2tlbiB9IGZyb20gJ25nLXByaW1pdGl2ZXMvaW50ZXJuYWwnO1xuaW1wb3J0IHsgaW5qZWN0RGF0ZVBpY2tlciB9IGZyb20gJy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnRva2VuJztcbmltcG9ydCB7IE5ncERhdGVQaWNrZXJOZXh0TW9udGhUb2tlbiB9IGZyb20gJy4vZGF0ZS1waWNrZXItbmV4dC1tb250aC50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tuZ3BEYXRlUGlja2VyTmV4dE1vbnRoXScsXG4gIGV4cG9ydEFzOiAnbmdwRGF0ZVBpY2tlck5leHRNb250aCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTmdwRGF0ZVBpY2tlck5leHRNb250aFRva2VuLCB1c2VFeGlzdGluZzogTmdwRGF0ZVBpY2tlck5leHRNb250aCB9LFxuICAgIHsgcHJvdmlkZTogTmdwRGlzYWJsZWRUb2tlbiwgdXNlRXhpc3Rpbmc6IE5ncERhdGVQaWNrZXJOZXh0TW9udGggfSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtOZ3BCdXR0b25dLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmRhdGEtZGlzYWJsZWRdJzogJ2Rpc2FibGVkKCknLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAnW2F0dHIuZGlzYWJsZWRdJzogJ2lzQnV0dG9uICYmIGRpc2FibGVkKCkgPyB0cnVlIDogbnVsbCcsXG4gICAgJ1thdHRyLnR5cGVdJzogJ2lzQnV0dG9uID8gXCJidXR0b25cIiA6IG51bGwnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ3BEYXRlUGlja2VyTmV4dE1vbnRoPFQ+IGltcGxlbWVudHMgTmdwQ2FuRGlzYWJsZSB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGVsZW1lbnQgcmVmLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAvKipcbiAgICogQWNjZXNzIHRoZSBkYXRlIGFkYXB0ZXIuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGVBZGFwdGVyID0gaW5qZWN0RGF0ZUFkYXB0ZXI8VD4oKTtcblxuICAvKipcbiAgICogQWNjZXNzIHRoZSBkYXRlIHBpY2tlci5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpY2tlciA9IGluamVjdERhdGVQaWNrZXI8VD4oKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBidXR0b24gZWxlbWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQnV0dG9uID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYnV0dG9uJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBuZXh0IG1vbnRoIGlzIGRpc2FibGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRhdGVQaWNrZXIuZGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMuZGF0ZVBpY2tlci5tYXgoKTtcbiAgICBjb25zdCBsYXN0RGF5ID0gdGhpcy5kYXRlQWRhcHRlci5zZXQoXG4gICAgICB0aGlzLmRhdGVBZGFwdGVyLmVuZE9mTW9udGgodGhpcy5kYXRlUGlja2VyLmZvY3VzZWREYXRlKCkpLFxuICAgICAge1xuICAgICAgICBob3VyOiAyMyxcbiAgICAgICAgbWludXRlOiA1OSxcbiAgICAgICAgc2Vjb25kOiA1OSxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDk5OSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIGEgbWF4IGRhdGUgYW5kIGl0IGlzIGVxdWFsIHRvIG9yIGJlZm9yZSB0aGUgbGFzdCBkYXkgb2YgdGhlIG1vbnRoLCBkaXNhYmxlIGl0LlxuICAgIGlmIChtYXhEYXRlICYmIHRoaXMuZGF0ZUFkYXB0ZXIuY29tcGFyZShtYXhEYXRlLCBsYXN0RGF5KSA8PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byB0aGUgbmV4dCBtb250aC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgcHJvdGVjdGVkIG5hdmlnYXRlVG9OZXh0TW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG1vdmUgZm9jdXMgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgbmV4dCBtb250aC5cbiAgICBsZXQgZGF0ZSA9IHRoaXMuZGF0ZVBpY2tlci5mb2N1c2VkRGF0ZSgpO1xuICAgIGRhdGUgPSB0aGlzLmRhdGVBZGFwdGVyLmFkZChkYXRlLCB7IG1vbnRoczogMSB9KTtcbiAgICBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5zZXQoZGF0ZSwge1xuICAgICAgZGF5OiAxLFxuICAgICAgaG91cjogMCxcbiAgICAgIG1pbnV0ZTogMCxcbiAgICAgIHNlY29uZDogMCxcbiAgICAgIG1pbGxpc2Vjb25kOiAwLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRlUGlja2VyLnNldEZvY3VzZWREYXRlKGRhdGUsICdtb3VzZScsICdmb3J3YXJkJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the Apache 2.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpDatePickerNextMonthToken = new InjectionToken('NgpDatePickerNextMonthToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the DatePickerNextMonth directive instance
|
|
12
|
+
*/
|
|
13
|
+
export function injectDatePickerNextMonth() {
|
|
14
|
+
return inject(NgpDatePickerNextMonthToken);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbmV4dC1tb250aC50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvZGF0ZS1waWNrZXIvc3JjL2RhdGUtcGlja2VyLW5leHQtbW9udGgvZGF0ZS1waWNrZXItbmV4dC1tb250aC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FDM0QsNkJBQTZCLENBQzlCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsT0FBTyxNQUFNLENBQUMsMkJBQTJCLENBQThCLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3BEYXRlUGlja2VyTmV4dE1vbnRoIH0gZnJvbSAnLi9kYXRlLXBpY2tlci1uZXh0LW1vbnRoLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBOZ3BEYXRlUGlja2VyTmV4dE1vbnRoVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TmdwRGF0ZVBpY2tlck5leHRNb250aDx1bmtub3duPj4oXG4gICdOZ3BEYXRlUGlja2VyTmV4dE1vbnRoVG9rZW4nLFxuKTtcblxuLyoqXG4gKiBJbmplY3QgdGhlIERhdGVQaWNrZXJOZXh0TW9udGggZGlyZWN0aXZlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3REYXRlUGlja2VyTmV4dE1vbnRoPFQ+KCk6IE5ncERhdGVQaWNrZXJOZXh0TW9udGg8VD4ge1xuICByZXR1cm4gaW5qZWN0KE5ncERhdGVQaWNrZXJOZXh0TW9udGhUb2tlbikgYXMgTmdwRGF0ZVBpY2tlck5leHRNb250aDxUPjtcbn1cbiJdfQ==
|