@leanix/components 0.4.2 → 0.4.4

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.
Files changed (27) hide show
  1. package/esm2020/lib/forms-ui/components/date-input/date-input.component.mjs +5 -4
  2. package/esm2020/lib/forms-ui/components/date-picker-ui/date-formatter.mjs +8 -0
  3. package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.mjs +310 -0
  4. package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +28 -0
  5. package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +205 -0
  6. package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker.config.mjs +29 -0
  7. package/esm2020/lib/forms-ui/components/date-picker-ui/daypicker.component.mjs +305 -0
  8. package/esm2020/lib/forms-ui/components/date-picker-ui/isBs3.mjs +2 -0
  9. package/esm2020/lib/forms-ui/components/date-picker-ui/monthpicker.component.mjs +149 -0
  10. package/esm2020/lib/forms-ui/components/date-picker-ui/yearpicker.component.mjs +153 -0
  11. package/esm2020/lib/forms-ui/forms-ui.module.mjs +6 -6
  12. package/fesm2015/leanix-components.mjs +1151 -8
  13. package/fesm2015/leanix-components.mjs.map +1 -1
  14. package/fesm2020/leanix-components.mjs +1150 -8
  15. package/fesm2020/leanix-components.mjs.map +1 -1
  16. package/lib/forms-ui/components/date-picker-ui/date-formatter.d.ts +3 -0
  17. package/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.d.ts +78 -0
  18. package/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.d.ts +15 -0
  19. package/lib/forms-ui/components/date-picker-ui/datepicker.component.d.ts +81 -0
  20. package/lib/forms-ui/components/date-picker-ui/datepicker.config.d.ts +22 -0
  21. package/lib/forms-ui/components/date-picker-ui/daypicker.component.d.ts +17 -0
  22. package/lib/forms-ui/components/date-picker-ui/isBs3.d.ts +1 -0
  23. package/lib/forms-ui/components/date-picker-ui/monthpicker.component.d.ts +14 -0
  24. package/lib/forms-ui/components/date-picker-ui/yearpicker.component.d.ts +14 -0
  25. package/lib/forms-ui/forms-ui.module.d.ts +2 -2
  26. package/package.json +1 -1
  27. package/src/lib/forms-ui/components/date-picker-ui/README.md +8 -0
@@ -22,9 +22,7 @@ import { Renderer, marked } from 'marked';
22
22
  import * as i1$4 from '@angular/cdk/clipboard';
23
23
  import { ClipboardModule } from '@angular/cdk/clipboard';
24
24
  import * as i2$1 from '@angular/forms';
25
- import { NG_VALUE_ACCESSOR, NG_VALIDATORS, UntypedFormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
26
- import * as i3 from 'ngx-bootstrap/datepicker';
27
- import { DatePickerComponent, DateFormatter, DatepickerModule } from 'ngx-bootstrap/datepicker';
25
+ import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule, UntypedFormControl, ReactiveFormsModule } from '@angular/forms';
28
26
  import * as i2 from 'ngx-infinite-scroll';
29
27
  import { InfiniteScrollModule } from 'ngx-infinite-scroll';
30
28
  import * as i1$5 from '@angular/cdk/drag-drop';
@@ -3223,6 +3221,1134 @@ function isValidDateString(dateString) {
3223
3221
  return dateString !== null && /^\d\d\d\d-\d\d-\d\d$/.test(dateString) && !isNaN$1(Date.parse(dateString));
3224
3222
  }
3225
3223
 
3224
+ /* format method is monkey-patched in date-input component, leaving this implementation as dummy */
3225
+ class DateFormatter {
3226
+ format(date, format$1, locale) {
3227
+ return format(date, format$1, { locale });
3228
+ }
3229
+ }
3230
+
3231
+ /* tslint:disable: max-file-line-count */
3232
+ class DatePickerInnerComponent {
3233
+ constructor() {
3234
+ this.selectionDone = new EventEmitter(undefined);
3235
+ this.update = new EventEmitter(false);
3236
+ this.activeDateChange = new EventEmitter(undefined);
3237
+ /* tslint:disable-next-line: no-any*/
3238
+ this.stepDay = {};
3239
+ /* tslint:disable-next-line: no-any*/
3240
+ this.stepMonth = {};
3241
+ /* tslint:disable-next-line: no-any*/
3242
+ this.stepYear = {};
3243
+ this.modes = ['day', 'month', 'year'];
3244
+ this.dateFormatter = new DateFormatter();
3245
+ }
3246
+ get activeDate() {
3247
+ return this._activeDate;
3248
+ }
3249
+ set activeDate(value) {
3250
+ this._activeDate = value;
3251
+ }
3252
+ // todo: add formatter value to Date object
3253
+ ngOnInit() {
3254
+ // todo: use date for unique value
3255
+ this.uniqueId = `datepicker--${Math.floor(Math.random() * 10000)}`;
3256
+ if (this.initDate) {
3257
+ this.activeDate = this.initDate;
3258
+ this.selectedDate = new Date(this.activeDate.valueOf());
3259
+ this.update.emit(this.activeDate);
3260
+ }
3261
+ else if (this.activeDate === undefined) {
3262
+ this.activeDate = new Date();
3263
+ }
3264
+ }
3265
+ // this.refreshView should be called here to reflect the changes on the fly
3266
+ // tslint:disable-next-line:no-unused-variable
3267
+ ngOnChanges(changes) {
3268
+ this.refreshView();
3269
+ this.checkIfActiveDateGotUpdated(changes['activeDate']);
3270
+ }
3271
+ // Check if activeDate has been update and then emit the activeDateChange with the new date
3272
+ /* tslint:disable-next-line: no-any */
3273
+ checkIfActiveDateGotUpdated(activeDate) {
3274
+ if (activeDate && !activeDate.firstChange) {
3275
+ const previousValue = activeDate.previousValue;
3276
+ if (previousValue && previousValue instanceof Date && previousValue.getTime() !== activeDate.currentValue.getTime()) {
3277
+ this.activeDateChange.emit(this.activeDate);
3278
+ }
3279
+ }
3280
+ }
3281
+ setCompareHandler(handler, type) {
3282
+ if (type === 'day') {
3283
+ this.compareHandlerDay = handler;
3284
+ }
3285
+ if (type === 'month') {
3286
+ this.compareHandlerMonth = handler;
3287
+ }
3288
+ if (type === 'year') {
3289
+ this.compareHandlerYear = handler;
3290
+ }
3291
+ }
3292
+ compare(date1, date2) {
3293
+ if (date1 === undefined || date2 === undefined) {
3294
+ return undefined;
3295
+ }
3296
+ if (this.datepickerMode === 'day' && this.compareHandlerDay) {
3297
+ return this.compareHandlerDay(date1, date2);
3298
+ }
3299
+ if (this.datepickerMode === 'month' && this.compareHandlerMonth) {
3300
+ return this.compareHandlerMonth(date1, date2);
3301
+ }
3302
+ if (this.datepickerMode === 'year' && this.compareHandlerYear) {
3303
+ return this.compareHandlerYear(date1, date2);
3304
+ }
3305
+ return void 0;
3306
+ }
3307
+ setRefreshViewHandler(handler, type) {
3308
+ if (type === 'day') {
3309
+ this.refreshViewHandlerDay = handler;
3310
+ }
3311
+ if (type === 'month') {
3312
+ this.refreshViewHandlerMonth = handler;
3313
+ }
3314
+ if (type === 'year') {
3315
+ this.refreshViewHandlerYear = handler;
3316
+ }
3317
+ }
3318
+ refreshView() {
3319
+ if (this.datepickerMode === 'day' && this.refreshViewHandlerDay) {
3320
+ this.refreshViewHandlerDay();
3321
+ }
3322
+ if (this.datepickerMode === 'month' && this.refreshViewHandlerMonth) {
3323
+ this.refreshViewHandlerMonth();
3324
+ }
3325
+ if (this.datepickerMode === 'year' && this.refreshViewHandlerYear) {
3326
+ this.refreshViewHandlerYear();
3327
+ }
3328
+ }
3329
+ dateFilter(date, format) {
3330
+ return this.dateFormatter.format(date, format, this.locale);
3331
+ }
3332
+ /* tslint:disable-next-line: no-any*/
3333
+ isActive(dateObject) {
3334
+ if (this.compare(dateObject.date, this.activeDate) === 0) {
3335
+ this.activeDateId = dateObject.uid;
3336
+ return true;
3337
+ }
3338
+ return false;
3339
+ }
3340
+ /* tslint:disable-next-line: no-any*/
3341
+ createDateObject(date, format) {
3342
+ /* tslint:disable-next-line: no-any*/
3343
+ const dateObject = {};
3344
+ dateObject.date = new Date(date.getFullYear(), date.getMonth(), date.getDate());
3345
+ dateObject.date = this.fixTimeZone(dateObject.date);
3346
+ dateObject.label = this.dateFilter(date, format);
3347
+ dateObject.selected = this.compare(date, this.selectedDate) === 0;
3348
+ dateObject.disabled = this.isDisabled(date);
3349
+ dateObject.current = this.compare(date, new Date()) === 0;
3350
+ dateObject.customClass = this.getCustomClassForDate(dateObject.date);
3351
+ return dateObject;
3352
+ }
3353
+ /* tslint:disable-next-line: no-any*/
3354
+ split(arr, size) {
3355
+ /* tslint:disable-next-line: no-any*/
3356
+ const arrays = [];
3357
+ while (arr.length > 0) {
3358
+ arrays.push(arr.splice(0, size));
3359
+ }
3360
+ return arrays;
3361
+ }
3362
+ // Fix a hard-reproducible bug with timezones
3363
+ // The bug depends on OS, browser, current timezone and current date
3364
+ // i.e.
3365
+ // var date = new Date(2014, 0, 1);
3366
+ // console.log(date.getFullYear(), date.getMonth(), date.getDate(),
3367
+ // date.getHours()); can result in "2013 11 31 23" because of the bug.
3368
+ fixTimeZone(date) {
3369
+ const hours = date.getHours();
3370
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours === 23 ? hours + 2 : 0);
3371
+ }
3372
+ select(date, isManual = true) {
3373
+ if (this.datepickerMode === this.minMode) {
3374
+ if (!this.activeDate) {
3375
+ this.activeDate = new Date(0, 0, 0, 0, 0, 0, 0);
3376
+ }
3377
+ this.activeDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
3378
+ this.activeDate = this.fixTimeZone(this.activeDate);
3379
+ if (isManual) {
3380
+ this.selectionDone.emit(this.activeDate);
3381
+ }
3382
+ }
3383
+ else {
3384
+ this.activeDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
3385
+ this.activeDate = this.fixTimeZone(this.activeDate);
3386
+ if (isManual) {
3387
+ this.datepickerMode = this.modes[this.modes.indexOf(this.datepickerMode) - 1];
3388
+ }
3389
+ }
3390
+ this.selectedDate = new Date(this.activeDate.valueOf());
3391
+ this.update.emit(this.activeDate);
3392
+ this.refreshView();
3393
+ }
3394
+ move(direction) {
3395
+ /* tslint:disable-next-line: no-any*/
3396
+ let expectedStep;
3397
+ if (this.datepickerMode === 'day') {
3398
+ expectedStep = this.stepDay;
3399
+ }
3400
+ if (this.datepickerMode === 'month') {
3401
+ expectedStep = this.stepMonth;
3402
+ }
3403
+ if (this.datepickerMode === 'year') {
3404
+ expectedStep = this.stepYear;
3405
+ }
3406
+ if (expectedStep) {
3407
+ const year = this.activeDate.getFullYear() + direction * (expectedStep.years || 0);
3408
+ const month = this.activeDate.getMonth() + direction * (expectedStep.months || 0);
3409
+ this.activeDate = new Date(year, month, 1);
3410
+ this.refreshView();
3411
+ this.activeDateChange.emit(this.activeDate);
3412
+ }
3413
+ }
3414
+ toggleMode(_direction) {
3415
+ const direction = _direction || 1;
3416
+ if ((this.datepickerMode === this.maxMode && direction === 1) || (this.datepickerMode === this.minMode && direction === -1)) {
3417
+ return;
3418
+ }
3419
+ this.datepickerMode = this.modes[this.modes.indexOf(this.datepickerMode) + direction];
3420
+ this.refreshView();
3421
+ }
3422
+ getCustomClassForDate(date) {
3423
+ if (!this.customClass) {
3424
+ return '';
3425
+ }
3426
+ // todo: build a hash of custom classes, it will work faster
3427
+ const customClassObject = this.customClass.find((customClass) => {
3428
+ return customClass.date.valueOf() === date.valueOf() && customClass.mode === this.datepickerMode;
3429
+ }, this);
3430
+ return customClassObject === undefined ? '' : customClassObject.clazz;
3431
+ }
3432
+ compareDateDisabled(date1Disabled, date2) {
3433
+ if (date1Disabled === undefined || date2 === undefined) {
3434
+ return undefined;
3435
+ }
3436
+ if (date1Disabled.mode === 'day' && this.compareHandlerDay) {
3437
+ return this.compareHandlerDay(date1Disabled.date, date2);
3438
+ }
3439
+ if (date1Disabled.mode === 'month' && this.compareHandlerMonth) {
3440
+ return this.compareHandlerMonth(date1Disabled.date, date2);
3441
+ }
3442
+ if (date1Disabled.mode === 'year' && this.compareHandlerYear) {
3443
+ return this.compareHandlerYear(date1Disabled.date, date2);
3444
+ }
3445
+ return undefined;
3446
+ }
3447
+ isDisabled(date) {
3448
+ let isDateDisabled = false;
3449
+ if (this.dateDisabled) {
3450
+ this.dateDisabled.forEach((disabledDate) => {
3451
+ if (this.compareDateDisabled(disabledDate, date) === 0) {
3452
+ isDateDisabled = true;
3453
+ }
3454
+ });
3455
+ }
3456
+ if (this.dayDisabled) {
3457
+ isDateDisabled = isDateDisabled || this.dayDisabled.indexOf(date.getDay()) > -1;
3458
+ }
3459
+ return (isDateDisabled || (this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0));
3460
+ }
3461
+ }
3462
+ DatePickerInnerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatePickerInnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3463
+ DatePickerInnerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: DatePickerInnerComponent, selector: "datepicker-inner", inputs: { locale: "locale", datepickerMode: "datepickerMode", startingDay: "startingDay", yearRange: "yearRange", minDate: "minDate", maxDate: "maxDate", minMode: "minMode", maxMode: "maxMode", showWeeks: "showWeeks", formatDay: "formatDay", formatMonth: "formatMonth", formatYear: "formatYear", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatMonthTitle: "formatMonthTitle", onlyCurrentMonth: "onlyCurrentMonth", shortcutPropagation: "shortcutPropagation", customClass: "customClass", monthColLimit: "monthColLimit", yearColLimit: "yearColLimit", dateDisabled: "dateDisabled", dayDisabled: "dayDisabled", initDate: "initDate", activeDate: "activeDate" }, outputs: { selectionDone: "selectionDone", update: "update", activeDateChange: "activeDateChange" }, usesOnChanges: true, ngImport: i0, template: `
3464
+ <!--&lt;!&ndash;ng-keydown="keydown($event)"&ndash;&gt;-->
3465
+ <div *ngIf="datepickerMode" class="well well-sm bg-faded p-a card" role="application">
3466
+ <ng-content></ng-content>
3467
+ </div>
3468
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatePickerInnerComponent, decorators: [{
3470
+ type: Component,
3471
+ args: [{
3472
+ // eslint-disable-next-line @angular-eslint/component-selector
3473
+ selector: 'datepicker-inner',
3474
+ template: `
3475
+ <!--&lt;!&ndash;ng-keydown="keydown($event)"&ndash;&gt;-->
3476
+ <div *ngIf="datepickerMode" class="well well-sm bg-faded p-a card" role="application">
3477
+ <ng-content></ng-content>
3478
+ </div>
3479
+ `
3480
+ }]
3481
+ }], propDecorators: { locale: [{
3482
+ type: Input
3483
+ }], datepickerMode: [{
3484
+ type: Input
3485
+ }], startingDay: [{
3486
+ type: Input
3487
+ }], yearRange: [{
3488
+ type: Input
3489
+ }], minDate: [{
3490
+ type: Input
3491
+ }], maxDate: [{
3492
+ type: Input
3493
+ }], minMode: [{
3494
+ type: Input
3495
+ }], maxMode: [{
3496
+ type: Input
3497
+ }], showWeeks: [{
3498
+ type: Input
3499
+ }], formatDay: [{
3500
+ type: Input
3501
+ }], formatMonth: [{
3502
+ type: Input
3503
+ }], formatYear: [{
3504
+ type: Input
3505
+ }], formatDayHeader: [{
3506
+ type: Input
3507
+ }], formatDayTitle: [{
3508
+ type: Input
3509
+ }], formatMonthTitle: [{
3510
+ type: Input
3511
+ }], onlyCurrentMonth: [{
3512
+ type: Input
3513
+ }], shortcutPropagation: [{
3514
+ type: Input
3515
+ }], customClass: [{
3516
+ type: Input
3517
+ }], monthColLimit: [{
3518
+ type: Input
3519
+ }], yearColLimit: [{
3520
+ type: Input
3521
+ }], dateDisabled: [{
3522
+ type: Input
3523
+ }], dayDisabled: [{
3524
+ type: Input
3525
+ }], initDate: [{
3526
+ type: Input
3527
+ }], selectionDone: [{
3528
+ type: Output
3529
+ }], update: [{
3530
+ type: Output
3531
+ }], activeDateChange: [{
3532
+ type: Output
3533
+ }], activeDate: [{
3534
+ type: Input
3535
+ }] } });
3536
+
3537
+ class DatepickerConfig {
3538
+ constructor() {
3539
+ this.locale = 'en';
3540
+ this.datepickerMode = 'day';
3541
+ this.startingDay = 0;
3542
+ this.yearRange = 20;
3543
+ this.minMode = 'day';
3544
+ this.maxMode = 'year';
3545
+ this.showWeeks = true;
3546
+ this.formatDay = 'DD';
3547
+ this.formatMonth = 'MMMM';
3548
+ this.formatYear = 'YYYY';
3549
+ this.formatDayHeader = 'dd';
3550
+ this.formatDayTitle = 'MMMM YYYY';
3551
+ this.formatMonthTitle = 'YYYY';
3552
+ this.onlyCurrentMonth = false;
3553
+ this.monthColLimit = 3;
3554
+ this.yearColLimit = 5;
3555
+ this.shortcutPropagation = false;
3556
+ }
3557
+ }
3558
+ DatepickerConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3559
+ DatepickerConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerConfig });
3560
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerConfig, decorators: [{
3561
+ type: Injectable
3562
+ }] });
3563
+
3564
+ const isBs3 = () => true;
3565
+
3566
+ // @deprecated
3567
+ class DayPickerComponent {
3568
+ constructor(datePicker) {
3569
+ this.labels = [];
3570
+ this.rows = [];
3571
+ this.weekNumbers = [];
3572
+ this.datePicker = datePicker;
3573
+ }
3574
+ get isBs4() {
3575
+ return !isBs3();
3576
+ }
3577
+ /*protected getDaysInMonth(year:number, month:number) {
3578
+ return ((month === 1) && (year % 4 === 0) &&
3579
+ ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];
3580
+ }*/
3581
+ ngOnInit() {
3582
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
3583
+ const self = this;
3584
+ this.datePicker.stepDay = { months: 1 };
3585
+ this.datePicker.setRefreshViewHandler(function () {
3586
+ var _a;
3587
+ const year = this.activeDate.getFullYear();
3588
+ const month = this.activeDate.getMonth();
3589
+ const firstDayOfMonth = new Date(year, month, 1);
3590
+ const difference = this.startingDay - firstDayOfMonth.getDay();
3591
+ const numDisplayedFromPreviousMonth = difference > 0 ? 7 - difference : -difference;
3592
+ const firstDate = new Date(firstDayOfMonth.getTime());
3593
+ if (numDisplayedFromPreviousMonth > 0) {
3594
+ firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
3595
+ }
3596
+ // 42 is the number of days on a six-week calendar
3597
+ const _days = self.getDates(firstDate, 42);
3598
+ const days = [];
3599
+ for (let i = 0; i < 42; i++) {
3600
+ const _dateObject = this.createDateObject(_days[i], this.formatDay);
3601
+ _dateObject.secondary = ((_a = _days[i]) === null || _a === void 0 ? void 0 : _a.getMonth()) !== month;
3602
+ _dateObject.uid = this.uniqueId + '-' + i;
3603
+ days[i] = _dateObject;
3604
+ }
3605
+ self.labels = [];
3606
+ for (let j = 0; j < 7; j++) {
3607
+ self.labels[j] = {};
3608
+ self.labels[j].abbr = this.dateFilter(days[j].date, this.formatDayHeader);
3609
+ self.labels[j].full = this.dateFilter(days[j].date, 'EEEE');
3610
+ }
3611
+ self.title = this.dateFilter(this.activeDate, this.formatDayTitle);
3612
+ self.rows = this.split(days, 7);
3613
+ if (this.showWeeks) {
3614
+ self.weekNumbers = [];
3615
+ const thursdayIndex = (4 + 7 - this.startingDay) % 7;
3616
+ const numWeeks = self.rows.length;
3617
+ for (let curWeek = 0; curWeek < numWeeks; curWeek++) {
3618
+ self.weekNumbers.push(self.getISO8601WeekNumber(self.rows[curWeek][thursdayIndex].date));
3619
+ }
3620
+ }
3621
+ }, 'day');
3622
+ this.datePicker.setCompareHandler(function (date1, date2) {
3623
+ const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
3624
+ const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
3625
+ return d1.getTime() - d2.getTime();
3626
+ }, 'day');
3627
+ this.datePicker.refreshView();
3628
+ }
3629
+ getDates(startDate, n) {
3630
+ const dates = new Array(n);
3631
+ let current = new Date(startDate.getTime());
3632
+ let i = 0;
3633
+ let date;
3634
+ while (i < n) {
3635
+ date = new Date(current.getTime());
3636
+ date = this.datePicker.fixTimeZone(date);
3637
+ dates[i++] = date;
3638
+ current = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);
3639
+ }
3640
+ return dates;
3641
+ }
3642
+ getISO8601WeekNumber(date) {
3643
+ const checkDate = new Date(date.getTime());
3644
+ // Thursday
3645
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
3646
+ const time = checkDate.getTime();
3647
+ // Compare with Jan 1
3648
+ checkDate.setMonth(0);
3649
+ checkDate.setDate(1);
3650
+ return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1;
3651
+ }
3652
+ }
3653
+ DayPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DayPickerComponent, deps: [{ token: DatePickerInnerComponent }], target: i0.ɵɵFactoryTarget.Component });
3654
+ DayPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: DayPickerComponent, selector: "daypicker", ngImport: i0, template: `
3655
+ <table
3656
+ *ngIf="datePicker.datepickerMode === 'day'"
3657
+ role="grid"
3658
+ [attr.aria-labelledby]="datePicker.uniqueId + '-title'"
3659
+ aria-activedescendant="activeDateId"
3660
+ >
3661
+ <thead>
3662
+ <tr>
3663
+ <th>
3664
+ <button
3665
+ *ngIf="!isBs4"
3666
+ type="button"
3667
+ class="btn btn-default btn-secondary btn-sm pull-left float-left"
3668
+ (click)="datePicker.move(-1)"
3669
+ tabindex="-1"
3670
+ >
3671
+
3672
+ </button>
3673
+ <button
3674
+ *ngIf="isBs4"
3675
+ type="button"
3676
+ class="btn btn-default btn-secondary btn-sm pull-left float-left"
3677
+ (click)="datePicker.move(-1)"
3678
+ tabindex="-1"
3679
+ >
3680
+ &lt;
3681
+ </button>
3682
+ </th>
3683
+ <th [attr.colspan]="5 + (datePicker.showWeeks ? 1 : 0)">
3684
+ <button
3685
+ [id]="datePicker.uniqueId + '-title'"
3686
+ type="button"
3687
+ class="btn btn-default btn-secondary btn-sm"
3688
+ (click)="datePicker.toggleMode(0)"
3689
+ [disabled]="datePicker.datepickerMode === datePicker.maxMode"
3690
+ [ngClass]="{ disabled: datePicker.datepickerMode === datePicker.maxMode }"
3691
+ tabindex="-1"
3692
+ style="width:100%;"
3693
+ >
3694
+ <strong>{{ title }}</strong>
3695
+ </button>
3696
+ </th>
3697
+ <th>
3698
+ <button
3699
+ *ngIf="!isBs4"
3700
+ type="button"
3701
+ class="btn btn-default btn-secondary btn-sm pull-right float-right"
3702
+ (click)="datePicker.move(1)"
3703
+ tabindex="-1"
3704
+ >
3705
+
3706
+ </button>
3707
+ <button
3708
+ *ngIf="isBs4"
3709
+ type="button"
3710
+ class="btn btn-default btn-secondary btn-sm pull-right float-right"
3711
+ (click)="datePicker.move(1)"
3712
+ tabindex="-1"
3713
+ >
3714
+ &gt;
3715
+ </button>
3716
+ </th>
3717
+ </tr>
3718
+ <tr>
3719
+ <th *ngIf="datePicker.showWeeks"></th>
3720
+ <th *ngFor="let labelz of labels" class="text-center">
3721
+ <small aria-label="labelz.full"
3722
+ ><b>{{ labelz.abbr }}</b></small
3723
+ >
3724
+ </th>
3725
+ </tr>
3726
+ </thead>
3727
+ <tbody>
3728
+ <ng-template ngFor [ngForOf]="rows" let-rowz="$implicit" let-index="index">
3729
+ <tr *ngIf="!(datePicker.onlyCurrentMonth && rowz[0].secondary && rowz[6].secondary)">
3730
+ <td *ngIf="datePicker.showWeeks" class="h6" class="text-center">
3731
+ <em>{{ weekNumbers[index] }}</em>
3732
+ </td>
3733
+ <td *ngFor="let dtz of rowz" class="text-center" role="gridcell" [id]="dtz.uid">
3734
+ <button
3735
+ type="button"
3736
+ style="min-width:100%;"
3737
+ class="btn btn-sm {{ dtz.customClass }}"
3738
+ *ngIf="!(datePicker.onlyCurrentMonth && dtz.secondary)"
3739
+ [ngClass]="{
3740
+ 'btn-secondary': isBs4 && !dtz.selected && !datePicker.isActive(dtz),
3741
+ 'btn-info': dtz.selected,
3742
+ disabled: dtz.disabled,
3743
+ active: !isBs4 && datePicker.isActive(dtz),
3744
+ 'btn-default': !isBs4
3745
+ }"
3746
+ [disabled]="dtz.disabled"
3747
+ (click)="datePicker.select(dtz.date)"
3748
+ tabindex="-1"
3749
+ >
3750
+ <span [ngClass]="{ 'text-muted': dtz.secondary || dtz.current, 'text-info': !isBs4 && dtz.current }">{{ dtz.label }}</span>
3751
+ </button>
3752
+ </td>
3753
+ </tr>
3754
+ </ng-template>
3755
+ </tbody>
3756
+ </table>
3757
+ `, isInline: true, styles: [":host .btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}:host .btn-info .text-muted{color:#292b2c!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3758
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DayPickerComponent, decorators: [{
3759
+ type: Component,
3760
+ args: [{ selector: 'daypicker', template: `
3761
+ <table
3762
+ *ngIf="datePicker.datepickerMode === 'day'"
3763
+ role="grid"
3764
+ [attr.aria-labelledby]="datePicker.uniqueId + '-title'"
3765
+ aria-activedescendant="activeDateId"
3766
+ >
3767
+ <thead>
3768
+ <tr>
3769
+ <th>
3770
+ <button
3771
+ *ngIf="!isBs4"
3772
+ type="button"
3773
+ class="btn btn-default btn-secondary btn-sm pull-left float-left"
3774
+ (click)="datePicker.move(-1)"
3775
+ tabindex="-1"
3776
+ >
3777
+
3778
+ </button>
3779
+ <button
3780
+ *ngIf="isBs4"
3781
+ type="button"
3782
+ class="btn btn-default btn-secondary btn-sm pull-left float-left"
3783
+ (click)="datePicker.move(-1)"
3784
+ tabindex="-1"
3785
+ >
3786
+ &lt;
3787
+ </button>
3788
+ </th>
3789
+ <th [attr.colspan]="5 + (datePicker.showWeeks ? 1 : 0)">
3790
+ <button
3791
+ [id]="datePicker.uniqueId + '-title'"
3792
+ type="button"
3793
+ class="btn btn-default btn-secondary btn-sm"
3794
+ (click)="datePicker.toggleMode(0)"
3795
+ [disabled]="datePicker.datepickerMode === datePicker.maxMode"
3796
+ [ngClass]="{ disabled: datePicker.datepickerMode === datePicker.maxMode }"
3797
+ tabindex="-1"
3798
+ style="width:100%;"
3799
+ >
3800
+ <strong>{{ title }}</strong>
3801
+ </button>
3802
+ </th>
3803
+ <th>
3804
+ <button
3805
+ *ngIf="!isBs4"
3806
+ type="button"
3807
+ class="btn btn-default btn-secondary btn-sm pull-right float-right"
3808
+ (click)="datePicker.move(1)"
3809
+ tabindex="-1"
3810
+ >
3811
+
3812
+ </button>
3813
+ <button
3814
+ *ngIf="isBs4"
3815
+ type="button"
3816
+ class="btn btn-default btn-secondary btn-sm pull-right float-right"
3817
+ (click)="datePicker.move(1)"
3818
+ tabindex="-1"
3819
+ >
3820
+ &gt;
3821
+ </button>
3822
+ </th>
3823
+ </tr>
3824
+ <tr>
3825
+ <th *ngIf="datePicker.showWeeks"></th>
3826
+ <th *ngFor="let labelz of labels" class="text-center">
3827
+ <small aria-label="labelz.full"
3828
+ ><b>{{ labelz.abbr }}</b></small
3829
+ >
3830
+ </th>
3831
+ </tr>
3832
+ </thead>
3833
+ <tbody>
3834
+ <ng-template ngFor [ngForOf]="rows" let-rowz="$implicit" let-index="index">
3835
+ <tr *ngIf="!(datePicker.onlyCurrentMonth && rowz[0].secondary && rowz[6].secondary)">
3836
+ <td *ngIf="datePicker.showWeeks" class="h6" class="text-center">
3837
+ <em>{{ weekNumbers[index] }}</em>
3838
+ </td>
3839
+ <td *ngFor="let dtz of rowz" class="text-center" role="gridcell" [id]="dtz.uid">
3840
+ <button
3841
+ type="button"
3842
+ style="min-width:100%;"
3843
+ class="btn btn-sm {{ dtz.customClass }}"
3844
+ *ngIf="!(datePicker.onlyCurrentMonth && dtz.secondary)"
3845
+ [ngClass]="{
3846
+ 'btn-secondary': isBs4 && !dtz.selected && !datePicker.isActive(dtz),
3847
+ 'btn-info': dtz.selected,
3848
+ disabled: dtz.disabled,
3849
+ active: !isBs4 && datePicker.isActive(dtz),
3850
+ 'btn-default': !isBs4
3851
+ }"
3852
+ [disabled]="dtz.disabled"
3853
+ (click)="datePicker.select(dtz.date)"
3854
+ tabindex="-1"
3855
+ >
3856
+ <span [ngClass]="{ 'text-muted': dtz.secondary || dtz.current, 'text-info': !isBs4 && dtz.current }">{{ dtz.label }}</span>
3857
+ </button>
3858
+ </td>
3859
+ </tr>
3860
+ </ng-template>
3861
+ </tbody>
3862
+ </table>
3863
+ `, styles: [":host .btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}:host .btn-info .text-muted{color:#292b2c!important}\n"] }]
3864
+ }], ctorParameters: function () { return [{ type: DatePickerInnerComponent }]; } });
3865
+
3866
+ // @deprecated
3867
+ class MonthPickerComponent {
3868
+ constructor(datePicker) {
3869
+ this.rows = [];
3870
+ this.datePicker = datePicker;
3871
+ }
3872
+ get isBs4() {
3873
+ return !isBs3();
3874
+ }
3875
+ ngOnInit() {
3876
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
3877
+ const self = this;
3878
+ this.datePicker.stepMonth = { years: 1 };
3879
+ this.datePicker.setRefreshViewHandler(function () {
3880
+ const months = new Array(12);
3881
+ const year = this.activeDate.getFullYear();
3882
+ let date;
3883
+ for (let i = 0; i < 12; i++) {
3884
+ date = new Date(year, i, 1);
3885
+ date = this.fixTimeZone(date);
3886
+ months[i] = this.createDateObject(date, this.formatMonth);
3887
+ months[i].uid = this.uniqueId + '-' + i;
3888
+ }
3889
+ self.title = this.dateFilter(this.activeDate, this.formatMonthTitle);
3890
+ self.rows = this.split(months, self.datePicker.monthColLimit);
3891
+ }, 'month');
3892
+ this.datePicker.setCompareHandler(function (date1, date2) {
3893
+ const d1 = new Date(date1.getFullYear(), date1.getMonth());
3894
+ const d2 = new Date(date2.getFullYear(), date2.getMonth());
3895
+ return d1.getTime() - d2.getTime();
3896
+ }, 'month');
3897
+ this.datePicker.refreshView();
3898
+ }
3899
+ }
3900
+ MonthPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: MonthPickerComponent, deps: [{ token: DatePickerInnerComponent }], target: i0.ɵɵFactoryTarget.Component });
3901
+ MonthPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: MonthPickerComponent, selector: "monthpicker", ngImport: i0, template: `
3902
+ <table *ngIf="datePicker.datepickerMode === 'month'" role="grid">
3903
+ <thead>
3904
+ <tr>
3905
+ <th>
3906
+ <button type="button" class="btn btn-default btn-sm pull-left float-left" (click)="datePicker.move(-1)" tabindex="-1">‹</button>
3907
+ </th>
3908
+ <th [attr.colspan]="datePicker.monthColLimit - 2 <= 0 ? 1 : datePicker.monthColLimit - 2">
3909
+ <button
3910
+ [id]="datePicker.uniqueId + '-title'"
3911
+ type="button"
3912
+ class="btn btn-default btn-sm"
3913
+ (click)="datePicker.toggleMode(0)"
3914
+ [disabled]="datePicker.datepickerMode === maxMode"
3915
+ [ngClass]="{ disabled: datePicker.datepickerMode === maxMode }"
3916
+ tabindex="-1"
3917
+ style="width:100%;"
3918
+ >
3919
+ <strong>{{ title }}</strong>
3920
+ </button>
3921
+ </th>
3922
+ <th>
3923
+ <button type="button" class="btn btn-default btn-sm pull-right float-right" (click)="datePicker.move(1)" tabindex="-1">
3924
+
3925
+ </button>
3926
+ </th>
3927
+ </tr>
3928
+ </thead>
3929
+ <tbody>
3930
+ <tr *ngFor="let rowz of rows">
3931
+ <td *ngFor="let dtz of rowz" class="text-center" role="gridcell" [attr.id]="dtz.uid" [ngClass]="dtz.customClass">
3932
+ <button
3933
+ type="button"
3934
+ style="min-width:100%;"
3935
+ class="btn btn-default"
3936
+ [ngClass]="{
3937
+ 'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz),
3938
+ 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)),
3939
+ disabled: dtz.disabled,
3940
+ active: !isBs4 && datePicker.isActive(dtz)
3941
+ }"
3942
+ [disabled]="dtz.disabled"
3943
+ (click)="datePicker.select(dtz.date)"
3944
+ tabindex="-1"
3945
+ >
3946
+ <span [ngClass]="{ 'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current }">{{ dtz.label }}</span>
3947
+ </button>
3948
+ </td>
3949
+ </tr>
3950
+ </tbody>
3951
+ </table>
3952
+ `, isInline: true, styles: [":host .btn-info .text-success{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3953
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: MonthPickerComponent, decorators: [{
3954
+ type: Component,
3955
+ args: [{ selector: 'monthpicker', template: `
3956
+ <table *ngIf="datePicker.datepickerMode === 'month'" role="grid">
3957
+ <thead>
3958
+ <tr>
3959
+ <th>
3960
+ <button type="button" class="btn btn-default btn-sm pull-left float-left" (click)="datePicker.move(-1)" tabindex="-1">‹</button>
3961
+ </th>
3962
+ <th [attr.colspan]="datePicker.monthColLimit - 2 <= 0 ? 1 : datePicker.monthColLimit - 2">
3963
+ <button
3964
+ [id]="datePicker.uniqueId + '-title'"
3965
+ type="button"
3966
+ class="btn btn-default btn-sm"
3967
+ (click)="datePicker.toggleMode(0)"
3968
+ [disabled]="datePicker.datepickerMode === maxMode"
3969
+ [ngClass]="{ disabled: datePicker.datepickerMode === maxMode }"
3970
+ tabindex="-1"
3971
+ style="width:100%;"
3972
+ >
3973
+ <strong>{{ title }}</strong>
3974
+ </button>
3975
+ </th>
3976
+ <th>
3977
+ <button type="button" class="btn btn-default btn-sm pull-right float-right" (click)="datePicker.move(1)" tabindex="-1">
3978
+
3979
+ </button>
3980
+ </th>
3981
+ </tr>
3982
+ </thead>
3983
+ <tbody>
3984
+ <tr *ngFor="let rowz of rows">
3985
+ <td *ngFor="let dtz of rowz" class="text-center" role="gridcell" [attr.id]="dtz.uid" [ngClass]="dtz.customClass">
3986
+ <button
3987
+ type="button"
3988
+ style="min-width:100%;"
3989
+ class="btn btn-default"
3990
+ [ngClass]="{
3991
+ 'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz),
3992
+ 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)),
3993
+ disabled: dtz.disabled,
3994
+ active: !isBs4 && datePicker.isActive(dtz)
3995
+ }"
3996
+ [disabled]="dtz.disabled"
3997
+ (click)="datePicker.select(dtz.date)"
3998
+ tabindex="-1"
3999
+ >
4000
+ <span [ngClass]="{ 'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current }">{{ dtz.label }}</span>
4001
+ </button>
4002
+ </td>
4003
+ </tr>
4004
+ </tbody>
4005
+ </table>
4006
+ `, styles: [":host .btn-info .text-success{color:#fff!important}\n"] }]
4007
+ }], ctorParameters: function () { return [{ type: DatePickerInnerComponent }]; } });
4008
+
4009
+ // @deprecated
4010
+ class YearPickerComponent {
4011
+ constructor(datePicker) {
4012
+ this.rows = [];
4013
+ this.datePicker = datePicker;
4014
+ }
4015
+ get isBs4() {
4016
+ return !isBs3();
4017
+ }
4018
+ ngOnInit() {
4019
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
4020
+ const self = this;
4021
+ this.datePicker.stepYear = { years: this.datePicker.yearRange };
4022
+ this.datePicker.setRefreshViewHandler(function () {
4023
+ const years = new Array(this.yearRange);
4024
+ let date;
4025
+ const start = self.getStartingYear(this.activeDate.getFullYear());
4026
+ for (let i = 0; i < this.yearRange; i++) {
4027
+ date = new Date(start + i, 0, 1);
4028
+ date = this.fixTimeZone(date);
4029
+ years[i] = this.createDateObject(date, this.formatYear);
4030
+ years[i].uid = this.uniqueId + '-' + i;
4031
+ }
4032
+ self.title = [years[0].label, years[this.yearRange - 1].label].join(' - ');
4033
+ self.rows = this.split(years, self.datePicker.yearColLimit);
4034
+ }, 'year');
4035
+ this.datePicker.setCompareHandler(function (date1, date2) {
4036
+ return date1.getFullYear() - date2.getFullYear();
4037
+ }, 'year');
4038
+ this.datePicker.refreshView();
4039
+ }
4040
+ getStartingYear(year) {
4041
+ // todo: parseInt
4042
+ return ((year - 1) / this.datePicker.yearRange) * this.datePicker.yearRange + 1;
4043
+ }
4044
+ }
4045
+ YearPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: YearPickerComponent, deps: [{ token: DatePickerInnerComponent }], target: i0.ɵɵFactoryTarget.Component });
4046
+ YearPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: YearPickerComponent, selector: "yearpicker", ngImport: i0, template: `
4047
+ <table *ngIf="datePicker.datepickerMode === 'year'" role="grid">
4048
+ <thead>
4049
+ <tr>
4050
+ <th>
4051
+ <button type="button" class="btn btn-default btn-sm pull-left float-left" (click)="datePicker.move(-1)" tabindex="-1">‹</button>
4052
+ </th>
4053
+ <th [attr.colspan]="datePicker.yearColLimit - 2 <= 0 ? 1 : datePicker.yearColLimit - 2">
4054
+ <button
4055
+ [id]="datePicker.uniqueId + '-title'"
4056
+ role="heading"
4057
+ type="button"
4058
+ class="btn btn-default btn-sm"
4059
+ (click)="datePicker.toggleMode(0)"
4060
+ [disabled]="datePicker.datepickerMode === datePicker.maxMode"
4061
+ [ngClass]="{ disabled: datePicker.datepickerMode === datePicker.maxMode }"
4062
+ tabindex="-1"
4063
+ style="width:100%;"
4064
+ >
4065
+ <strong>{{ title }}</strong>
4066
+ </button>
4067
+ </th>
4068
+ <th>
4069
+ <button type="button" class="btn btn-default btn-sm pull-right float-right" (click)="datePicker.move(1)" tabindex="-1">
4070
+
4071
+ </button>
4072
+ </th>
4073
+ </tr>
4074
+ </thead>
4075
+ <tbody>
4076
+ <tr *ngFor="let rowz of rows">
4077
+ <td *ngFor="let dtz of rowz" class="text-center" role="gridcell" [attr.id]="dtz.uid">
4078
+ <button
4079
+ type="button"
4080
+ style="min-width:100%;"
4081
+ class="btn btn-default"
4082
+ [ngClass]="{
4083
+ 'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz),
4084
+ 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)),
4085
+ disabled: dtz.disabled,
4086
+ active: !isBs4 && datePicker.isActive(dtz)
4087
+ }"
4088
+ [disabled]="dtz.disabled"
4089
+ (click)="datePicker.select(dtz.date)"
4090
+ tabindex="-1"
4091
+ >
4092
+ <span [ngClass]="{ 'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current }">{{ dtz.label }}</span>
4093
+ </button>
4094
+ </td>
4095
+ </tr>
4096
+ </tbody>
4097
+ </table>
4098
+ `, isInline: true, styles: [":host .btn-info .text-success{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
4099
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: YearPickerComponent, decorators: [{
4100
+ type: Component,
4101
+ args: [{ selector: 'yearpicker', template: `
4102
+ <table *ngIf="datePicker.datepickerMode === 'year'" role="grid">
4103
+ <thead>
4104
+ <tr>
4105
+ <th>
4106
+ <button type="button" class="btn btn-default btn-sm pull-left float-left" (click)="datePicker.move(-1)" tabindex="-1">‹</button>
4107
+ </th>
4108
+ <th [attr.colspan]="datePicker.yearColLimit - 2 <= 0 ? 1 : datePicker.yearColLimit - 2">
4109
+ <button
4110
+ [id]="datePicker.uniqueId + '-title'"
4111
+ role="heading"
4112
+ type="button"
4113
+ class="btn btn-default btn-sm"
4114
+ (click)="datePicker.toggleMode(0)"
4115
+ [disabled]="datePicker.datepickerMode === datePicker.maxMode"
4116
+ [ngClass]="{ disabled: datePicker.datepickerMode === datePicker.maxMode }"
4117
+ tabindex="-1"
4118
+ style="width:100%;"
4119
+ >
4120
+ <strong>{{ title }}</strong>
4121
+ </button>
4122
+ </th>
4123
+ <th>
4124
+ <button type="button" class="btn btn-default btn-sm pull-right float-right" (click)="datePicker.move(1)" tabindex="-1">
4125
+
4126
+ </button>
4127
+ </th>
4128
+ </tr>
4129
+ </thead>
4130
+ <tbody>
4131
+ <tr *ngFor="let rowz of rows">
4132
+ <td *ngFor="let dtz of rowz" class="text-center" role="gridcell" [attr.id]="dtz.uid">
4133
+ <button
4134
+ type="button"
4135
+ style="min-width:100%;"
4136
+ class="btn btn-default"
4137
+ [ngClass]="{
4138
+ 'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz),
4139
+ 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)),
4140
+ disabled: dtz.disabled,
4141
+ active: !isBs4 && datePicker.isActive(dtz)
4142
+ }"
4143
+ [disabled]="dtz.disabled"
4144
+ (click)="datePicker.select(dtz.date)"
4145
+ tabindex="-1"
4146
+ >
4147
+ <span [ngClass]="{ 'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current }">{{ dtz.label }}</span>
4148
+ </button>
4149
+ </td>
4150
+ </tr>
4151
+ </tbody>
4152
+ </table>
4153
+ `, styles: [":host .btn-info .text-success{color:#fff!important}\n"] }]
4154
+ }], ctorParameters: function () { return [{ type: DatePickerInnerComponent }]; } });
4155
+
4156
+ const DATEPICKER_CONTROL_VALUE_ACCESSOR = {
4157
+ provide: NG_VALUE_ACCESSOR,
4158
+ useExisting: forwardRef(() => DatePickerComponent),
4159
+ multi: true
4160
+ };
4161
+ /* tslint:enable:component-selector-name component-selector-type */
4162
+ class DatePickerComponent {
4163
+ constructor(config) {
4164
+ /** sets datepicker mode, supports: `day`, `month`, `year` */
4165
+ this.datepickerMode = 'day';
4166
+ /** if false week numbers will be hidden */
4167
+ this.showWeeks = true;
4168
+ this.selectionDone = new EventEmitter(undefined);
4169
+ /** callback to invoke when the activeDate is changed. */
4170
+ this.activeDateChange = new EventEmitter(undefined);
4171
+ /* tslint:disable-next-line: no-any*/
4172
+ this.onChange = Function.prototype;
4173
+ /* tslint:disable-next-line: no-any*/
4174
+ this.onTouched = Function.prototype;
4175
+ this._now = new Date();
4176
+ this.config = config;
4177
+ this.configureOptions();
4178
+ }
4179
+ /** currently active date */
4180
+ get activeDate() {
4181
+ return this._activeDate || this._now;
4182
+ }
4183
+ set activeDate(value) {
4184
+ this._activeDate = value;
4185
+ }
4186
+ configureOptions() {
4187
+ Object.assign(this, this.config);
4188
+ }
4189
+ onUpdate(event) {
4190
+ this.activeDate = event;
4191
+ this.onChange(event);
4192
+ }
4193
+ onSelectionDone(event) {
4194
+ this.selectionDone.emit(event);
4195
+ }
4196
+ onActiveDateChange(event) {
4197
+ this.activeDateChange.emit(event);
4198
+ }
4199
+ // todo: support null value
4200
+ /* tslint:disable-next-line: no-any*/
4201
+ writeValue(value) {
4202
+ if (this._datePicker.compare(value, this._activeDate) === 0) {
4203
+ return;
4204
+ }
4205
+ if (value && value instanceof Date) {
4206
+ this.activeDate = value;
4207
+ this._datePicker.select(value, false);
4208
+ return;
4209
+ }
4210
+ this.activeDate = (value ? new Date(value) : void 0);
4211
+ }
4212
+ registerOnChange(fn) {
4213
+ this.onChange = fn;
4214
+ }
4215
+ registerOnTouched(fn) {
4216
+ this.onTouched = fn;
4217
+ }
4218
+ }
4219
+ DatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatePickerComponent, deps: [{ token: DatepickerConfig }], target: i0.ɵɵFactoryTarget.Component });
4220
+ DatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: DatePickerComponent, selector: "datepicker", inputs: { datepickerMode: "datepickerMode", initDate: "initDate", minDate: "minDate", maxDate: "maxDate", minMode: "minMode", maxMode: "maxMode", showWeeks: "showWeeks", formatDay: "formatDay", formatMonth: "formatMonth", formatYear: "formatYear", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatMonthTitle: "formatMonthTitle", startingDay: "startingDay", yearRange: "yearRange", onlyCurrentMonth: "onlyCurrentMonth", shortcutPropagation: "shortcutPropagation", monthColLimit: "monthColLimit", yearColLimit: "yearColLimit", customClass: "customClass", dateDisabled: "dateDisabled", dayDisabled: "dayDisabled", activeDate: "activeDate" }, outputs: { selectionDone: "selectionDone", activeDateChange: "activeDateChange" }, providers: [DATEPICKER_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "_datePicker", first: true, predicate: DatePickerInnerComponent, descendants: true, static: true }], ngImport: i0, template: `
4221
+ <datepicker-inner
4222
+ [activeDate]="activeDate"
4223
+ (update)="onUpdate($event)"
4224
+ [locale]="config.locale"
4225
+ [datepickerMode]="datepickerMode"
4226
+ [initDate]="initDate"
4227
+ [minDate]="minDate"
4228
+ [maxDate]="maxDate"
4229
+ [minMode]="minMode"
4230
+ [maxMode]="maxMode"
4231
+ [showWeeks]="showWeeks"
4232
+ [formatDay]="formatDay"
4233
+ [formatMonth]="formatMonth"
4234
+ [formatYear]="formatYear"
4235
+ [formatDayHeader]="formatDayHeader"
4236
+ [formatDayTitle]="formatDayTitle"
4237
+ [formatMonthTitle]="formatMonthTitle"
4238
+ [startingDay]="startingDay"
4239
+ [yearRange]="yearRange"
4240
+ [customClass]="customClass"
4241
+ [dateDisabled]="dateDisabled"
4242
+ [dayDisabled]="dayDisabled"
4243
+ [onlyCurrentMonth]="onlyCurrentMonth"
4244
+ [shortcutPropagation]="shortcutPropagation"
4245
+ [monthColLimit]="monthColLimit"
4246
+ [yearColLimit]="yearColLimit"
4247
+ (selectionDone)="onSelectionDone($event)"
4248
+ (activeDateChange)="onActiveDateChange($event)"
4249
+ >
4250
+ <daypicker tabindex="0"></daypicker>
4251
+ <monthpicker tabindex="0"></monthpicker>
4252
+ <yearpicker tabindex="0"></yearpicker>
4253
+ </datepicker-inner>
4254
+ `, isInline: true, dependencies: [{ kind: "component", type: DatePickerInnerComponent, selector: "datepicker-inner", inputs: ["locale", "datepickerMode", "startingDay", "yearRange", "minDate", "maxDate", "minMode", "maxMode", "showWeeks", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "onlyCurrentMonth", "shortcutPropagation", "customClass", "monthColLimit", "yearColLimit", "dateDisabled", "dayDisabled", "initDate", "activeDate"], outputs: ["selectionDone", "update", "activeDateChange"] }, { kind: "component", type: DayPickerComponent, selector: "daypicker" }, { kind: "component", type: MonthPickerComponent, selector: "monthpicker" }, { kind: "component", type: YearPickerComponent, selector: "yearpicker" }] });
4255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatePickerComponent, decorators: [{
4256
+ type: Component,
4257
+ args: [{
4258
+ // eslint-disable-next-line @angular-eslint/component-selector
4259
+ selector: 'datepicker',
4260
+ template: `
4261
+ <datepicker-inner
4262
+ [activeDate]="activeDate"
4263
+ (update)="onUpdate($event)"
4264
+ [locale]="config.locale"
4265
+ [datepickerMode]="datepickerMode"
4266
+ [initDate]="initDate"
4267
+ [minDate]="minDate"
4268
+ [maxDate]="maxDate"
4269
+ [minMode]="minMode"
4270
+ [maxMode]="maxMode"
4271
+ [showWeeks]="showWeeks"
4272
+ [formatDay]="formatDay"
4273
+ [formatMonth]="formatMonth"
4274
+ [formatYear]="formatYear"
4275
+ [formatDayHeader]="formatDayHeader"
4276
+ [formatDayTitle]="formatDayTitle"
4277
+ [formatMonthTitle]="formatMonthTitle"
4278
+ [startingDay]="startingDay"
4279
+ [yearRange]="yearRange"
4280
+ [customClass]="customClass"
4281
+ [dateDisabled]="dateDisabled"
4282
+ [dayDisabled]="dayDisabled"
4283
+ [onlyCurrentMonth]="onlyCurrentMonth"
4284
+ [shortcutPropagation]="shortcutPropagation"
4285
+ [monthColLimit]="monthColLimit"
4286
+ [yearColLimit]="yearColLimit"
4287
+ (selectionDone)="onSelectionDone($event)"
4288
+ (activeDateChange)="onActiveDateChange($event)"
4289
+ >
4290
+ <daypicker tabindex="0"></daypicker>
4291
+ <monthpicker tabindex="0"></monthpicker>
4292
+ <yearpicker tabindex="0"></yearpicker>
4293
+ </datepicker-inner>
4294
+ `,
4295
+ providers: [DATEPICKER_CONTROL_VALUE_ACCESSOR]
4296
+ }]
4297
+ }], ctorParameters: function () { return [{ type: DatepickerConfig }]; }, propDecorators: { datepickerMode: [{
4298
+ type: Input
4299
+ }], initDate: [{
4300
+ type: Input
4301
+ }], minDate: [{
4302
+ type: Input
4303
+ }], maxDate: [{
4304
+ type: Input
4305
+ }], minMode: [{
4306
+ type: Input
4307
+ }], maxMode: [{
4308
+ type: Input
4309
+ }], showWeeks: [{
4310
+ type: Input
4311
+ }], formatDay: [{
4312
+ type: Input
4313
+ }], formatMonth: [{
4314
+ type: Input
4315
+ }], formatYear: [{
4316
+ type: Input
4317
+ }], formatDayHeader: [{
4318
+ type: Input
4319
+ }], formatDayTitle: [{
4320
+ type: Input
4321
+ }], formatMonthTitle: [{
4322
+ type: Input
4323
+ }], startingDay: [{
4324
+ type: Input
4325
+ }], yearRange: [{
4326
+ type: Input
4327
+ }], onlyCurrentMonth: [{
4328
+ type: Input
4329
+ }], shortcutPropagation: [{
4330
+ type: Input
4331
+ }], monthColLimit: [{
4332
+ type: Input
4333
+ }], yearColLimit: [{
4334
+ type: Input
4335
+ }], customClass: [{
4336
+ type: Input
4337
+ }], dateDisabled: [{
4338
+ type: Input
4339
+ }], dayDisabled: [{
4340
+ type: Input
4341
+ }], activeDate: [{
4342
+ type: Input
4343
+ }], selectionDone: [{
4344
+ type: Output
4345
+ }], activeDateChange: [{
4346
+ type: Output
4347
+ }], _datePicker: [{
4348
+ type: ViewChild,
4349
+ args: [DatePickerInnerComponent, { static: true }]
4350
+ }] } });
4351
+
3226
4352
  const DEFAULT_MIN_DATE = new Date('0000-01-01');
3227
4353
  const DEFAULT_MAX_DATE = new Date('9999-12-31');
3228
4354
  class DateInputComponent {
@@ -3395,7 +4521,7 @@ DateInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", versi
3395
4521
  DateInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: DateInputComponent, selector: "lx-date-input", inputs: { date: "date", dateString: "dateString", valueAccessor: "valueAccessor", inputId: "inputId", renderingStyle: "renderingStyle", placeholder: "placeholder", cdk: "cdk", datepickerMode: "datepickerMode", initDateString: "initDateString", minDate: "minDate", maxDate: "maxDate", minMode: "minMode", maxMode: "maxMode", showWeeks: "showWeeks", formatDay: "formatDay", formatMonth: "formatMonth", formatYear: "formatYear", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatMonthTitle: "formatMonthTitle", startingDay: "startingDay", yearRange: "yearRange", onlyCurrentMonth: "onlyCurrentMonth", shortcutPropagation: "shortcutPropagation", customClass: "customClass", disabled: "disabled", dateDisabled: "dateDisabled", autoFocus: "autoFocus" }, outputs: { dateChange: "dateChange", dateStringChange: "dateStringChange", closeDateInput: "closeDateInput" }, providers: [
3396
4522
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },
3397
4523
  { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true }
3398
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"cdk; else withoutCdkOverlay\">\n <span\n class=\"wrapper\"\n [class.forLink]=\"renderingStyle === 'LINK'\"\n [class.has-error]=\"hasError\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <!-- TODO: The dateInput and datePicker code ist duplicated for cdk and withoutCdK use to solve a placing problem of the\n ngx-bootstrap datepicker component. Writing it in a ng-container led to an unexpected anchoring behavior of the datePicker NOT directly\n below the dateInput element -->\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [lxAutofocus]=\"autoFocus\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate : dateFormat }}</a>\n\n <ng-template\n #cdkDatepicker\n cdkConnectedOverlay\n [cdkConnectedOverlayOpen]=\"showDatepicker\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'backdrop'\"\n (backdropClick)=\"hidePopup()\"\n >\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n </ng-template>\n </span>\n</ng-container>\n\n<ng-template #withoutCdkOverlay>\n <div class=\"legacy\" [class.forLink]=\"renderingStyle === 'LINK'\">\n <div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n <span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [lxAutofocus]=\"autoFocus\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate : dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n </span>\n </div>\n</ng-template>\n", styles: [".backdrop{background-color:transparent}.datepickerContainer{z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}.legacy .backdrop{position:fixed;z-index:2;inset:0}.legacy .datepickerContainer{position:absolute}.legacy.forLink{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.DatePickerComponent, selector: "datepicker", inputs: ["datepickerMode", "showWeeks", "activeDate", "initDate", "minDate", "maxDate", "minMode", "maxMode", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "startingDay", "yearRange", "onlyCurrentMonth", "shortcutPropagation", "monthColLimit", "yearColLimit", "customClass", "dateDisabled", "dayDisabled"], outputs: ["selectionDone", "activeDateChange"] }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: AutofocusDirective, selector: "[lxAutofocus]", inputs: ["lxAutofocus", "lxAutofocusPreventScroll", "lxAutofocusTimeout"] }, { kind: "pipe", type: CustomDatePipe, name: "lxDate" }] });
4524
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"cdk; else withoutCdkOverlay\">\n <span\n class=\"wrapper\"\n [class.forLink]=\"renderingStyle === 'LINK'\"\n [class.has-error]=\"hasError\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n >\n <!-- TODO: The dateInput and datePicker code ist duplicated for cdk and withoutCdK use to solve a placing problem of the\n ngx-bootstrap datepicker component. Writing it in a ng-container led to an unexpected anchoring behavior of the datePicker NOT directly\n below the dateInput element -->\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [lxAutofocus]=\"autoFocus\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate : dateFormat }}</a>\n\n <ng-template\n #cdkDatepicker\n cdkConnectedOverlay\n [cdkConnectedOverlayOpen]=\"showDatepicker\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'backdrop'\"\n (backdropClick)=\"hidePopup()\"\n >\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n </ng-template>\n </span>\n</ng-container>\n\n<ng-template #withoutCdkOverlay>\n <div class=\"legacy\" [class.forLink]=\"renderingStyle === 'LINK'\">\n <div class=\"backdrop\" *ngIf=\"showDatepicker\" (click)=\"hidePopup()\"></div>\n <span class=\"wrapper\" [class.forLink]=\"renderingStyle === 'LINK'\" [class.has-error]=\"hasError\">\n <input\n #input\n class=\"form-control dateControl\"\n placeholder=\"{{ placeholder }}\"\n [id]=\"inputId\"\n [lxAutofocus]=\"autoFocus\"\n [(ngModel)]=\"dateString\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onDateStringChange($event)\"\n (focus)=\"showPopup()\"\n (blur)=\"onBlur()\"\n (keydown.enter)=\"hidePopup()\"\n (keydown.escape)=\"hidePopup()\"\n (keydown.tab)=\"hidePopup()\"\n (keydown.shift.tab)=\"hidePopup()\"\n [class.text-danger]=\"hasError\"\n *ngIf=\"renderingStyle === 'INPUT'\"\n />\n <a class=\"dateControl\" (click)=\"togglePopup()\" *ngIf=\"renderingStyle === 'LINK'\">{{ date | lxDate : dateFormat }}</a>\n <div class=\"datepickerContainer\">\n <div class=\"calendar\">\n <datepicker\n class=\"popup\"\n *ngIf=\"showDatepicker\"\n (selectionDone)=\"onSelectionDone($event)\"\n [ngModel]=\"date\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n >\n </datepicker>\n </div>\n </div>\n </span>\n </div>\n</ng-template>\n", styles: [".backdrop{background-color:transparent}.datepickerContainer{z-index:700}.wrapper .forLink .popup{top:15px}.dateControl,.calendar{position:relative}.popup{position:relative;left:0;z-index:700;border-radius:3px}.popup ::ng-deep .text-info{color:#2a303d}.popup ::ng-deep .text-muted{color:#99a5bb}.popup ::ng-deep .btn.active,.popup ::ng-deep .btn.active .text-info{color:#fff;background-color:#2a303d}.popup ::ng-deep .well{margin:0;border:1px solid #2a303d}:host-context(.input-group) .datepickerContainer{top:100%}.legacy .backdrop{position:fixed;z-index:2;inset:0}.legacy .datepickerContainer{position:absolute}.legacy.forLink{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DatePickerComponent, selector: "datepicker", inputs: ["datepickerMode", "initDate", "minDate", "maxDate", "minMode", "maxMode", "showWeeks", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "startingDay", "yearRange", "onlyCurrentMonth", "shortcutPropagation", "monthColLimit", "yearColLimit", "customClass", "dateDisabled", "dayDisabled", "activeDate"], outputs: ["selectionDone", "activeDateChange"] }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: AutofocusDirective, selector: "[lxAutofocus]", inputs: ["lxAutofocus", "lxAutofocusPreventScroll", "lxAutofocusTimeout"] }, { kind: "pipe", type: CustomDatePipe, name: "lxDate" }] });
3399
4525
  __decorate([
3400
4526
  Observe('initDateString')
3401
4527
  ], DateInputComponent.prototype, "initDateString$", void 0);
@@ -3482,6 +4608,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
3482
4608
  args: ['input']
3483
4609
  }] } });
3484
4610
 
4611
+ class DatepickerUiModule {
4612
+ static forRoot() {
4613
+ return { ngModule: DatepickerUiModule, providers: [DatepickerConfig] };
4614
+ }
4615
+ }
4616
+ DatepickerUiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4617
+ DatepickerUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, declarations: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent], imports: [CommonModule, FormsModule], exports: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent] });
4618
+ DatepickerUiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, imports: [CommonModule, FormsModule] });
4619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, decorators: [{
4620
+ type: NgModule,
4621
+ args: [{
4622
+ imports: [CommonModule, FormsModule],
4623
+ declarations: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent],
4624
+ exports: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent],
4625
+ entryComponents: [DatePickerComponent]
4626
+ }]
4627
+ }] });
4628
+
3485
4629
  class DragAndDropListItemComponent {
3486
4630
  constructor(element) {
3487
4631
  this.element = element;
@@ -6142,8 +7286,7 @@ LxFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
6142
7286
  ErrorMessageComponent,
6143
7287
  FormSubmitDirective], imports: [CommonModule,
6144
7288
  FormsModule,
6145
- ReactiveFormsModule, i1$2.TranslateModule, DatepickerModule,
6146
- InfiniteScrollModule,
7289
+ ReactiveFormsModule, i1$2.TranslateModule, DatepickerUiModule, InfiniteScrollModule,
6147
7290
  ClipboardModule,
6148
7291
  OverlayModule,
6149
7292
  LxCoreUiModule,
@@ -6192,7 +7335,7 @@ LxFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
6192
7335
  FormsModule,
6193
7336
  ReactiveFormsModule,
6194
7337
  TranslateModule.forChild(),
6195
- DatepickerModule,
7338
+ DatepickerUiModule.forRoot(),
6196
7339
  InfiniteScrollModule,
6197
7340
  ClipboardModule,
6198
7341
  OverlayModule,
@@ -6249,7 +7392,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
6249
7392
  FormsModule,
6250
7393
  ReactiveFormsModule,
6251
7394
  TranslateModule.forChild(),
6252
- DatepickerModule,
7395
+ DatepickerUiModule.forRoot(),
6253
7396
  InfiniteScrollModule,
6254
7397
  ClipboardModule,
6255
7398
  OverlayModule,