@wavemaker/app-ng-runtime 11.4.0-next.25501 → 11.4.0-next.25701

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 (145) hide show
  1. app-ng-runtime/build-task/basic/tree/tree.build.d.ts +1 -2
  2. app-ng-runtime/build-task/bundles/index.umd.js +9 -11
  3. app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
  4. app-ng-runtime/build-task/esm2015/basic/tree/tree.build.js +3 -4
  5. app-ng-runtime/build-task/esm2015/data/form/form-field/form-field.build.js +3 -3
  6. app-ng-runtime/build-task/esm2015/navigation/popover/popover.build.js +3 -3
  7. app-ng-runtime/build-task/fesm2015/index.js +9 -11
  8. app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
  9. app-ng-runtime/components/base/bundles/index.umd.js +29 -4
  10. app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
  11. app-ng-runtime/components/base/esm2015/public_api.js +2 -2
  12. app-ng-runtime/components/base/esm2015/utils/widget-utils.js +22 -4
  13. app-ng-runtime/components/base/esm2015/widgets/common/base/base-field-validations.js +3 -2
  14. app-ng-runtime/components/base/esm2015/widgets/common/dialog/dialog.service.js +7 -1
  15. app-ng-runtime/components/base/fesm2015/index.js +30 -6
  16. app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
  17. app-ng-runtime/components/base/index.metadata.json +1 -1
  18. app-ng-runtime/components/base/public_api.d.ts +1 -1
  19. app-ng-runtime/components/base/utils/widget-utils.d.ts +8 -1
  20. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +2 -2
  21. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js.map +1 -1
  22. app-ng-runtime/components/basic/rich-text-editor/esm2015/rich-text-editor.component.js +3 -3
  23. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.js +2 -2
  24. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.js.map +1 -1
  25. app-ng-runtime/components/basic/tree/bundles/index.umd.js +280 -256
  26. app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
  27. app-ng-runtime/components/basic/tree/esm2015/public_api.js +2 -2
  28. app-ng-runtime/components/basic/tree/esm2015/tree.component.js +322 -0
  29. app-ng-runtime/components/basic/tree/esm2015/tree.module.js +3 -3
  30. app-ng-runtime/components/basic/tree/fesm2015/index.js +260 -248
  31. app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
  32. app-ng-runtime/components/basic/tree/index.metadata.json +1 -1
  33. app-ng-runtime/components/basic/tree/public_api.d.ts +1 -1
  34. app-ng-runtime/components/basic/tree/tree.component.d.ts +34 -0
  35. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +39 -23
  36. app-ng-runtime/components/containers/tabs/bundles/index.umd.js.map +1 -1
  37. app-ng-runtime/components/containers/tabs/esm2015/tab-pane/tab-pane.component.js +8 -1
  38. app-ng-runtime/components/containers/tabs/esm2015/tabs.animator.js +33 -13
  39. app-ng-runtime/components/containers/tabs/fesm2015/index.js +40 -13
  40. app-ng-runtime/components/containers/tabs/fesm2015/index.js.map +1 -1
  41. app-ng-runtime/components/containers/tabs/tabs.animator.d.ts +5 -1
  42. app-ng-runtime/components/data/form/bundles/index.umd.js +37 -13
  43. app-ng-runtime/components/data/form/bundles/index.umd.js.map +1 -1
  44. app-ng-runtime/components/data/form/esm2015/form-field/form-field.directive.js +26 -7
  45. app-ng-runtime/components/data/form/esm2015/form.component.js +10 -5
  46. app-ng-runtime/components/data/form/fesm2015/index.js +34 -10
  47. app-ng-runtime/components/data/form/fesm2015/index.js.map +1 -1
  48. app-ng-runtime/components/data/form/index.metadata.json +1 -1
  49. app-ng-runtime/components/data/list/bundles/index.umd.js +63 -48
  50. app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
  51. app-ng-runtime/components/data/list/esm2015/list.component.js +61 -46
  52. app-ng-runtime/components/data/list/fesm2015/index.js +60 -45
  53. app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
  54. app-ng-runtime/components/data/list/index.metadata.json +1 -1
  55. app-ng-runtime/components/data/list/list.component.d.ts +1 -1
  56. app-ng-runtime/components/data/pagination/bundles/index.umd.js +22 -5
  57. app-ng-runtime/components/data/pagination/bundles/index.umd.js.map +1 -1
  58. app-ng-runtime/components/data/pagination/esm2015/pagination.component.js +23 -6
  59. app-ng-runtime/components/data/pagination/fesm2015/index.js +22 -5
  60. app-ng-runtime/components/data/pagination/fesm2015/index.js.map +1 -1
  61. app-ng-runtime/components/data/pagination/index.metadata.json +1 -1
  62. app-ng-runtime/components/data/pagination/pagination.component.d.ts +1 -0
  63. app-ng-runtime/components/data/table/bundles/index.umd.js +66 -13
  64. app-ng-runtime/components/data/table/bundles/index.umd.js.map +1 -1
  65. app-ng-runtime/components/data/table/esm2015/table-filter.directive.js +3 -2
  66. app-ng-runtime/components/data/table/esm2015/table.component.js +63 -13
  67. app-ng-runtime/components/data/table/esm2015/table.props.js +3 -1
  68. app-ng-runtime/components/data/table/fesm2015/index.js +66 -13
  69. app-ng-runtime/components/data/table/fesm2015/index.js.map +1 -1
  70. app-ng-runtime/components/data/table/index.metadata.json +1 -1
  71. app-ng-runtime/components/data/table/table.component.d.ts +9 -0
  72. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -0
  73. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +17 -3
  74. app-ng-runtime/components/dialogs/default/bundles/index.umd.js.map +1 -1
  75. app-ng-runtime/components/dialogs/default/esm2015/base-dialog.js +18 -5
  76. app-ng-runtime/components/dialogs/default/fesm2015/index.js +17 -4
  77. app-ng-runtime/components/dialogs/default/fesm2015/index.js.map +1 -1
  78. app-ng-runtime/components/dialogs/default/index.metadata.json +1 -1
  79. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +5 -0
  80. app-ng-runtime/components/input/epoch/bundles/index.umd.js +97 -32
  81. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  82. app-ng-runtime/components/input/epoch/date-time/date-time-picker.component.d.ts +1 -0
  83. app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +73 -26
  84. app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +3 -4
  85. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time-picker.component.js +31 -11
  86. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time.component.js +2 -2
  87. app-ng-runtime/components/input/epoch/fesm2015/index.js +105 -39
  88. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  89. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  90. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +25 -19
  91. app-ng-runtime/components/navigation/menu/bundles/index.umd.js.map +1 -1
  92. app-ng-runtime/components/navigation/menu/esm2015/menu-dropdown-item/menu-dropdown-item.component.js +15 -5
  93. app-ng-runtime/components/navigation/menu/esm2015/menu.component.js +14 -19
  94. app-ng-runtime/components/navigation/menu/fesm2015/index.js +25 -20
  95. app-ng-runtime/components/navigation/menu/fesm2015/index.js.map +1 -1
  96. app-ng-runtime/components/navigation/menu/index.metadata.json +1 -1
  97. app-ng-runtime/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +7 -4
  98. app-ng-runtime/components/navigation/menu/menu.component.d.ts +3 -7
  99. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +3 -1
  100. app-ng-runtime/components/navigation/popover/bundles/index.umd.js.map +1 -1
  101. app-ng-runtime/components/navigation/popover/esm2015/popover.component.js +5 -3
  102. app-ng-runtime/components/navigation/popover/fesm2015/index.js +4 -2
  103. app-ng-runtime/components/navigation/popover/fesm2015/index.js.map +1 -1
  104. app-ng-runtime/core/bundles/index.umd.js +7 -1
  105. app-ng-runtime/core/bundles/index.umd.js.map +1 -1
  106. app-ng-runtime/core/esm2015/services/pagination.service.js +8 -2
  107. app-ng-runtime/core/fesm2015/index.js +7 -1
  108. app-ng-runtime/core/fesm2015/index.js.map +1 -1
  109. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +24 -6
  110. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js.map +1 -1
  111. app-ng-runtime/mobile/components/page/default/esm2015/page.directive.js +20 -3
  112. app-ng-runtime/mobile/components/page/default/fesm2015/index.js +19 -2
  113. app-ng-runtime/mobile/components/page/default/fesm2015/index.js.map +1 -1
  114. app-ng-runtime/mobile/components/page/default/index.metadata.json +1 -1
  115. app-ng-runtime/mobile/components/page/default/page.directive.d.ts +4 -1
  116. app-ng-runtime/mobile/core/bundles/index.umd.js +2 -1
  117. app-ng-runtime/mobile/core/bundles/index.umd.js.map +1 -1
  118. app-ng-runtime/mobile/core/esm2015/services/device.service.js +3 -2
  119. app-ng-runtime/mobile/core/fesm2015/index.js +2 -1
  120. app-ng-runtime/mobile/core/fesm2015/index.js.map +1 -1
  121. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +3 -2
  122. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js.map +1 -1
  123. app-ng-runtime/mobile/runtime-dynamic/esm2015/services/live-sync.service.js +4 -3
  124. app-ng-runtime/mobile/runtime-dynamic/fesm2015/index.js +3 -2
  125. app-ng-runtime/mobile/runtime-dynamic/fesm2015/index.js.map +1 -1
  126. app-ng-runtime/package.json +1 -1
  127. app-ng-runtime/runtime/base/bundles/index.umd.js +1 -0
  128. app-ng-runtime/runtime/base/bundles/index.umd.js.map +1 -1
  129. app-ng-runtime/runtime/base/esm2015/services/prefab-manager.service.js +2 -1
  130. app-ng-runtime/runtime/base/fesm2015/index.js +1 -0
  131. app-ng-runtime/runtime/base/fesm2015/index.js.map +1 -1
  132. app-ng-runtime/scripts/datatable/datatable.js +117 -48
  133. app-ng-runtime/scripts/summernote/dist/summernote-lite.min.js +3 -3
  134. app-ng-runtime/scripts/tree-keyboard-navigation/keyboard-navigation.js +251 -0
  135. app-ng-runtime/variables/bundles/index.umd.js +19 -16
  136. app-ng-runtime/variables/bundles/index.umd.js.map +1 -1
  137. app-ng-runtime/variables/esm2015/constants/variables.constants.js +3 -9
  138. app-ng-runtime/variables/esm2015/manager/action/notification-action.manager.js +5 -6
  139. app-ng-runtime/variables/esm2015/service/variables.service.js +8 -1
  140. app-ng-runtime/variables/fesm2015/index.js +13 -14
  141. app-ng-runtime/variables/fesm2015/index.js.map +1 -1
  142. app-ng-runtime/variables/index.metadata.json +1 -1
  143. app-ng-runtime/variables/service/variables.service.d.ts +4 -0
  144. app-ng-runtime/components/basic/tree/esm2015/tree.directive.js +0 -310
  145. app-ng-runtime/components/basic/tree/tree.directive.d.ts +0 -35
@@ -45,22 +45,32 @@ class DateTimePickerComponent {
45
45
  }
46
46
  }
47
47
  validateSelectedDate() {
48
- var _a, _b, _c, _d, _e, _f, _g;
48
+ var _a, _b, _c, _d, _e;
49
49
  if (!this.changedValue) {
50
50
  return true;
51
51
  }
52
52
  const cd = moment(this.changedValue);
53
- if (((_a = this._bsDatepickerConfig) === null || _a === void 0 ? void 0 : _a.minDate) && ((_b = this._bsDatepickerConfig) === null || _b === void 0 ? void 0 : _b.minDate) > this.changedValue) {
53
+ const minDate = (_a = this._bsDatepickerConfig) === null || _a === void 0 ? void 0 : _a.minDate;
54
+ const maxDate = (_b = this._bsDatepickerConfig) === null || _b === void 0 ? void 0 : _b.maxDate;
55
+ if (minDate
56
+ && ((this.mode === 'DATE'
57
+ && moment(minDate).startOf('day').toDate() > this.changedValue)
58
+ || (this.mode !== 'DATE'
59
+ && minDate > this.changedValue))) {
54
60
  return false;
55
61
  }
56
- if (((_c = this._bsDatepickerConfig) === null || _c === void 0 ? void 0 : _c.maxDate) && ((_d = this._bsDatepickerConfig) === null || _d === void 0 ? void 0 : _d.maxDate) < this.changedValue) {
62
+ if (maxDate
63
+ && ((this.mode === 'DATE'
64
+ && moment(maxDate).endOf('day').toDate() < this.changedValue)
65
+ || (this.mode !== 'DATE'
66
+ && maxDate < this.changedValue))) {
57
67
  return false;
58
68
  }
59
- if (((_f = (_e = this._bsDatepickerConfig) === null || _e === void 0 ? void 0 : _e.daysDisabled) === null || _f === void 0 ? void 0 : _f.indexOf(cd.day())) >= 0) {
69
+ if (((_d = (_c = this._bsDatepickerConfig) === null || _c === void 0 ? void 0 : _c.daysDisabled) === null || _d === void 0 ? void 0 : _d.indexOf(cd.day())) >= 0) {
60
70
  return false;
61
71
  }
62
72
  const cdSt = cd.startOf('day').toDate().getTime();
63
- if ((_g = this.excludedDatesToDisable) === null || _g === void 0 ? void 0 : _g.find(d => d.getTime() === cdSt)) {
73
+ if ((_e = this.excludedDatesToDisable) === null || _e === void 0 ? void 0 : _e.find(d => d.getTime() === cdSt)) {
64
74
  return false;
65
75
  }
66
76
  return true;
@@ -113,6 +123,11 @@ class DateTimePickerComponent {
113
123
  newVal.setMilliseconds(oldVal.getMilliseconds());
114
124
  }
115
125
  this.changedValue = newVal;
126
+ if (this.mode === 'DATE'
127
+ && oldVal !== newVal
128
+ && this.validateSelectedDate()) {
129
+ this.onOkClick();
130
+ }
116
131
  }
117
132
  onTimeUpdate(newVal) {
118
133
  this.changedValue = newVal;
@@ -131,6 +146,10 @@ class DateTimePickerComponent {
131
146
  this.triggerChange();
132
147
  this.hideModal();
133
148
  }
149
+ setToday() {
150
+ const today = moment().startOf('day').toDate();
151
+ this.onDateUpdate(today);
152
+ }
134
153
  reset() {
135
154
  this.changedValue = this._value;
136
155
  }
@@ -191,15 +210,16 @@ DateTimePickerComponent.decorators = [
191
210
  </div>
192
211
  <div class="modal-footer">
193
212
  <button
194
- class="btn btn-secondary clear-btn"
195
- (click)="clear()">{{appLocale.MESSAGE_DATE_PICKER_CLEAR || "Clear" }}</button>
213
+ *ngIf="mode === 'DATE_TIME' || mode === 'DATE'"
214
+ class="btn btn-secondary today-btn"
215
+ (click)="setToday()">{{appLocale.MESSAGE_DATE_PICKER_TODAY || "Today" }}</button>
196
216
  <button
197
217
  class="btn btn-primary pull-right ok-btn"
218
+ *ngIf="mode === 'DATE_TIME' || mode === 'TIME'"
198
219
  (click)="onOkClick()">{{appLocale.MESSAGE_DATE_PICKER_OK || "Ok" }}</button>
199
220
  <button
200
- class="btn btn-secondary pull-right cancel-btn"
201
- (click)="hideModal()">{{appLocale.MESSAGE_DATE_PICKER_CANCEL || "Cancel" }}</button>
202
-
221
+ class="btn btn-secondary pull-right clear-btn"
222
+ (click)="clear()">{{appLocale.MESSAGE_DATE_PICKER_CLEAR || "Clear" }}</button>
203
223
  </div>
204
224
  </div>
205
225
  </ng-template>
@@ -344,6 +364,7 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
344
364
  constructor(inj, WIDGET_CONFIG) {
345
365
  super(inj, WIDGET_CONFIG);
346
366
  this.isReadOnly = false;
367
+ this.clicked = false;
347
368
  this.formatsByLocale = { 'timezone': '' };
348
369
  /**
349
370
  * This is an internal property used to map the containerClass, showWeekNumbers etc., to the bsDatepicker
@@ -359,7 +380,6 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
359
380
  this.loadNativeDateInput = isMobile() && !this.showcustompicker;
360
381
  }
361
382
  get timeZone() { return this.inj.get(AbstractI18nService).getTimezone(this); }
362
- ;
363
383
  /**
364
384
  * returns true if the input value is default (i.e open date picker on input click)
365
385
  * @param1 dropdownvalue, user selected value (by default datepicker opens on input click)
@@ -409,7 +429,7 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
409
429
  };
410
430
  }
411
431
  /* WMS-18269 | Extending the existing validation for 'required' */
412
- if (this["show"] && this["required"]) {
432
+ if (this['show'] && this['required']) {
413
433
  return !!c.value ? null : { required: true };
414
434
  }
415
435
  this.validateType = '';
@@ -535,6 +555,7 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
535
555
  * @param isMouseEvent - boolean value represents the event is mouse event/ keyboard event
536
556
  */
537
557
  setActiveDateFocus(newDate, isMouseEvent) {
558
+ this.setNextData(newDate);
538
559
  const activeMonth = this.activeDate.getMonth();
539
560
  // check for keyboard event
540
561
  if (!isMouseEvent) {
@@ -549,14 +570,18 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
549
570
  const newDay = newDate.getDate().toString();
550
571
  _.filter($(`span:contains(${newDay})`).not('.is-other-month'), (obj) => {
551
572
  if ($(obj).text() === newDay) {
573
+ if ($(obj).hasClass('selected')) {
574
+ $(obj).parent().attr('aria-selected', 'true');
575
+ }
552
576
  $(obj).attr('aria-label', moment(newDate).format('dddd, MMMM Do YYYY'));
577
+ $('[bsdatepickerdaydecorator]').not('.is-other-month').attr('tabindex', '-1');
578
+ $(obj).attr('tabindex', '0');
553
579
  $(obj).focus();
554
580
  this.activeDate = newDate;
555
581
  }
556
582
  });
557
583
  if (newDate.getMonth() === new Date().getMonth() && newDate.getFullYear() === new Date().getFullYear()) {
558
584
  this.hightlightToday();
559
- $(`span:contains(${new Date().getDate().toString()})`).not('.is-other-month').parent().attr('aria-selected', 'true');
560
585
  }
561
586
  });
562
587
  }
@@ -581,22 +606,46 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
581
606
  this.loadYears();
582
607
  }
583
608
  }
609
+ getMonth(date, inc) {
610
+ const currentMonth = new Date(date);
611
+ let month = currentMonth.getMonth();
612
+ const year = currentMonth.getFullYear();
613
+ month += inc;
614
+ const newDate = new Date(year, month);
615
+ const fullMonth = newDate.toLocaleString('en-US', { month: 'long' });
616
+ return {
617
+ date: newDate,
618
+ fullMonth: fullMonth
619
+ };
620
+ }
584
621
  /**
585
622
  * This method sets the mouse events to Datepicker popup. These events are required when we navigate date picker through mouse.
586
623
  */
587
624
  addDatepickerMouseEvents() {
588
625
  const datePickerHead = $(`.bs-datepicker-head`);
589
626
  datePickerHead.find(`.previous`).click((event) => {
627
+ this.next = this.getMonth(this.activeDate, 0);
628
+ this.prev = this.getMonth(this.activeDate, -2);
629
+ this.clicked = true;
590
630
  // check for original mouse click
591
631
  if (event.originalEvent) {
592
632
  this.setFocusForDate(-1);
593
633
  }
634
+ setTimeout(() => {
635
+ $(`.bs-datepicker-head .previous`).focus();
636
+ });
594
637
  });
595
638
  datePickerHead.find(`.next`).click((event) => {
639
+ this.next = this.getMonth(this.activeDate, 2);
640
+ this.prev = this.getMonth(this.activeDate, 0);
641
+ this.clicked = true;
596
642
  // check for original mouse click
597
643
  if (event.originalEvent) {
598
644
  this.setFocusForDate(1);
599
645
  }
646
+ setTimeout(() => {
647
+ $(`.bs-datepicker-head .next`).focus();
648
+ });
600
649
  });
601
650
  datePickerHead.find(`.current`).click((event) => {
602
651
  // check for original mouse click
@@ -611,8 +660,24 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
611
660
  this.setFocusForMonthOrDay();
612
661
  }
613
662
  });
614
- datePickerHead.find('.next').attr('aria-label', 'Next');
615
- datePickerHead.find('.previous').attr('aria-label', 'Previous');
663
+ datePickerHead.find('.next').attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);
664
+ datePickerHead.find('.previous').attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);
665
+ setTimeout(() => {
666
+ const currentNodes = datePickerHead.find('.current span');
667
+ const msg = 'Changed to month ';
668
+ // currentNodes.each((i) => {
669
+ // msg =`${msg} ${$(currentNodes[i]).text()}`;
670
+ // });
671
+ datePickerHead.find('.current').attr("aria-live", "assertive").attr("aria-atomic", "false");
672
+ if (this.clicked) {
673
+ if ($(currentNodes[0]).text()) {
674
+ datePickerHead.find('.ng-star-inserted').prepend(`<div class="sr-only">${msg}</div>`);
675
+ }
676
+ if ($(currentNodes[1]).text()) {
677
+ datePickerHead.find('.current').last().prepend(`<div class="sr-only"> and year </div>`);
678
+ }
679
+ }
680
+ });
616
681
  }
617
682
  /**
618
683
  * This method sets focus for months/days depending on the loaded datepicker table
@@ -694,12 +759,20 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
694
759
  this.loadDays();
695
760
  this.setActiveDateFocus(this.activeDate);
696
761
  }
762
+ setNextData(nextDate) {
763
+ this.next = this.getMonth(nextDate, 1);
764
+ this.prev = this.getMonth(nextDate, -1);
765
+ }
697
766
  /**
698
767
  * This method is used to add tabindex, keybord and mouse events for days
699
768
  */
700
769
  loadDays() {
701
770
  setTimeout(() => {
702
771
  $('[bsdatepickerdaydecorator]').not('.is-other-month').attr('tabindex', '0');
772
+ // if (this.clicked === false) {
773
+ // this.next = this.getMonth(this.activeDate, 1);
774
+ // this.prev = this.getMonth(this.activeDate, -1);
775
+ // }
703
776
  this.addKeyBoardEventsForDays();
704
777
  this.addDatepickerMouseEvents();
705
778
  });
@@ -768,8 +841,6 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
768
841
  */
769
842
  loadMonths() {
770
843
  setTimeout(() => {
771
- const datePickerBody = $('.bs-datepicker-body');
772
- datePickerBody.find('table.months span').attr('tabindex', '0');
773
844
  this.addKeyBoardEventsForMonths();
774
845
  this.addDatepickerMouseEvents();
775
846
  });
@@ -822,8 +893,6 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
822
893
  */
823
894
  loadYears() {
824
895
  setTimeout(() => {
825
- const datePickerBody = $('.bs-datepicker-body');
826
- datePickerBody.find('table.years span').attr('tabindex', '0');
827
896
  this.addKeyBoardEventsForYears();
828
897
  this.addDatepickerMouseEvents();
829
898
  });
@@ -832,6 +901,7 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
832
901
  * This method is used to set focus for active month
833
902
  */
834
903
  setActiveMonthFocus(newDate, isMoouseEvent) {
904
+ this.setNextData(newDate);
835
905
  const newMonth = months[newDate.getMonth()];
836
906
  // check for keyboard event
837
907
  if (!isMoouseEvent) {
@@ -843,6 +913,8 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
843
913
  }
844
914
  }
845
915
  setTimeout(() => {
916
+ $(`.bs-datepicker-body table.months span`).attr('tabindex', '-1');
917
+ $(`.bs-datepicker-body table.months span:contains(${newMonth})`).attr('tabindex', '0');
846
918
  $(`.bs-datepicker-body table.months span:contains(${newMonth})`).focus();
847
919
  this.activeDate = newDate;
848
920
  });
@@ -901,6 +973,8 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
901
973
  }
902
974
  }
903
975
  setTimeout(() => {
976
+ $(`.bs-datepicker-body table.years span`).attr('tabindex', '-1');
977
+ $(`.bs-datepicker-body table.years span:contains(${newYear})`).attr('tabindex', '0');
904
978
  $(`.bs-datepicker-body table.years span:contains(${newYear})`).focus();
905
979
  this.activeDate = newDate;
906
980
  });
@@ -1081,37 +1155,27 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
1081
1155
  }
1082
1156
  onDateTimeInputBlur() {
1083
1157
  // removing the opacity on blur of the mobile widget
1084
- let displayInputElem = this.getMobileInput();
1158
+ const displayInputElem = this.getMobileInput();
1085
1159
  if (displayInputElem && !hasCordova()) {
1086
- let children = this.nativeElement.children;
1160
+ const children = this.nativeElement.children;
1087
1161
  for (let i = 0; i < children.length; i++) {
1088
1162
  children[i].classList.remove('add-opacity');
1089
1163
  }
1090
1164
  displayInputElem.classList.remove('remove-opacity');
1091
- let allDateTimeElements = this.nativeElement.getElementsByTagName('*');
1092
- for (let i = 0; i < allDateTimeElements.length; i++) {
1093
- allDateTimeElements[i].setAttribute('tabindex', this.tabindex);
1094
- }
1095
- displayInputElem.removeAttribute('tabindex');
1096
1165
  }
1097
1166
  }
1098
1167
  onDateTimeInputFocus(skipFocus = false) {
1099
1168
  if (!this.loadNativeDateInput) {
1100
1169
  return;
1101
1170
  }
1102
- let displayInputElem = this.getMobileInput();
1171
+ const displayInputElem = this.getMobileInput();
1103
1172
  // toggling the classes to show and hide the native widget using opacity
1104
1173
  if (skipFocus && !hasCordova()) {
1105
- let children = this.nativeElement.children;
1174
+ const children = this.nativeElement.children;
1106
1175
  for (let i = 0; i < children.length; i++) {
1107
1176
  children[i].classList.add('add-opacity');
1108
1177
  }
1109
1178
  displayInputElem.classList.add('remove-opacity');
1110
- let allDateTimeElements = this.nativeElement.getElementsByTagName('*');
1111
- for (let i = 0; i < allDateTimeElements.length; i++) {
1112
- allDateTimeElements[i].setAttribute('tabindex', '-1');
1113
- }
1114
- displayInputElem.setAttribute('tabindex', this.tabindex);
1115
1179
  return;
1116
1180
  }
1117
1181
  if (displayInputElem && this._triggeredByUser) {
@@ -1201,9 +1265,12 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
1201
1265
  this.containerTarget = getContainerTargetClass(this.nativeElement);
1202
1266
  this.isReadOnly = this.dataentrymode != 'undefined' && !this.isDataEntryModeEnabledOnInput(this.dataentrymode);
1203
1267
  // this mobileinput width varies in ios hence setting width here.
1204
- let mobileInput = this.getMobileInput();
1268
+ const mobileInput = this.getMobileInput();
1205
1269
  if (mobileInput) {
1206
- mobileInput.style.width = mobileInput.parentElement.clientWidth + 'px';
1270
+ setTimeout(() => {
1271
+ mobileInput.style.width = '100%';
1272
+ mobileInput.style.height = '100%';
1273
+ });
1207
1274
  }
1208
1275
  }
1209
1276
  ngOnDestroy() {
@@ -1417,7 +1484,6 @@ class DateComponent extends BaseDateTimeComponent {
1417
1484
  if (!skipFocus) {
1418
1485
  this.onDateTimeInputFocus();
1419
1486
  }
1420
- return;
1421
1487
  }
1422
1488
  if ($event.type === 'click') {
1423
1489
  this.invokeEventCallback('click', { $event: $event });
@@ -1449,7 +1515,7 @@ class DateComponent extends BaseDateTimeComponent {
1449
1515
  if (this.isDropDownDisplayEnabledOnInput(this.showdropdownon)) {
1450
1516
  event.stopPropagation();
1451
1517
  const action = this.keyEventPlugin.constructor.getEventFullKey(event);
1452
- if (action === 'enter' || action === 'arrowdown') {
1518
+ if (action === 'enter') {
1453
1519
  const newVal = getDateObj(event.target.value, { pattern: this.datepattern });
1454
1520
  event.preventDefault();
1455
1521
  const formattedDate = getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this);
@@ -1500,7 +1566,7 @@ DateComponent.initializeProps = registerProps$2();
1500
1566
  DateComponent.decorators = [
1501
1567
  { type: Component, args: [{
1502
1568
  selector: '[wmDate]',
1503
- template: " <input class=\"form-control app-textbox app-dateinput display-input\"\n focus-target\n type=\"text\"\n [name]=\"name\"\n [tabindex]=\"tabindex\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n [disabled]=\"disabled || readonly\"\n [autofocus]=\"autofocus\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"hint\"\n (change)=\"onDisplayDateChange($event)\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event);\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled || readonly\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isOpen\"\n #datepicker=\"bsDatepicker\"\n bsDatepicker\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n placement=\"bottom right\"\n [isDisabled]=\"disabled || readonly\"\n [bsValue]=\"bsDataValue\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n (bsValueChange)=\"onDateChange($event)\">\n</div>\n\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n mode=\"DATE\"\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDataValue\"\n (change)=\"onDateChange($event)\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n tabindex=\"1000000\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event);\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
1569
+ template: " <input class=\"form-control app-textbox app-dateinput display-input\"\n focus-target\n type=\"text\"\n [name]=\"name\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n [disabled]=\"disabled || readonly\"\n [autofocus]=\"autofocus\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"hint\"\n (change)=\"onDisplayDateChange($event)\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event);\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n [tabindex]=\"-1\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isOpen\"\n #datepicker=\"bsDatepicker\"\n bsDatepicker\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n placement=\"bottom right\"\n [isDisabled]=\"disabled || readonly\"\n [bsValue]=\"bsDataValue\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n (bsValueChange)=\"onDateChange($event)\">\n</div>\n\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n mode=\"DATE\"\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDataValue\"\n (change)=\"onDateChange($event)\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n [tabindex]=\"tabindex || 0\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event);\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n [attr.aria-label]=\"displayValue ? 'Change Date' + displayValue : 'Choose Date'\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
1504
1570
  providers: [
1505
1571
  provideAs(DateComponent, NG_VALUE_ACCESSOR, true),
1506
1572
  provideAs(DateComponent, NG_VALIDATORS, true),
@@ -1961,7 +2027,7 @@ DatetimeComponent.initializeProps = registerProps$1();
1961
2027
  DatetimeComponent.decorators = [
1962
2028
  { type: Component, args: [{
1963
2029
  selector: '[wmDateTime]',
1964
- template: " <div dropdown\n [isOpen]=\"isTimeOpen\"\n autoClose=\"false\"\n [container]=\"'body'\"\n (onShown)=\"onTimepickerOpen()\"\n style=\"display: inherit;\">\n <input class=\"form-control app-textbox display-input\"\n [attr.aria-label]=\"hint\"\n focus-target\n [name]=\"name\"\n [tabindex]=\"tabindex\"\n type=\"text\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDateChange($event)\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-date\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n aria-label=\"Select time\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleTimePicker(!isTimeOpen, $event)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-time\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n focus-target\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isDateOpen\"\n placement=\"bottom right\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n #datepicker=bsDatepicker\n bsDatepicker\n [isDisabled]=\"disabled || readonly || isCurrentDate\"\n [bsValue]=\"bsDateValue\"\n (bsValueChange)=\"onModelUpdate($event, 'date')\">\n </div>\n <div *dropdownMenu\n class=\"dropdown-menu\"\n aria-label=\"timepicker dropdown\"\n aria-controls=\"time\"\n (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"disabled || readonly || isCurrentDate\"\n [(ngModel)]=\"bsTimeValue\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\"\n (ngModelChange)=\"onModelUpdate($event, 'time')\"></timepicker>\n </div>\n </div>\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDateValue\"\n (change)=\"onModelUpdate($event, 'date')\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n tabindex=\"1000000\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event)\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
2030
+ template: " <div dropdown\n [isOpen]=\"isTimeOpen\"\n autoClose=\"false\"\n [container]=\"'body'\"\n (onShown)=\"onTimepickerOpen()\"\n style=\"display: inherit;\">\n <input class=\"form-control app-textbox display-input\"\n [attr.aria-label]=\"hint\"\n focus-target\n [name]=\"name\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n type=\"text\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDateChange($event)\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-date\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n aria-label=\"Select time\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleTimePicker(!isTimeOpen, $event)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-time\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n focus-target\n [tabindex]=\"-1\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isDateOpen\"\n placement=\"bottom right\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n #datepicker=bsDatepicker\n bsDatepicker\n [isDisabled]=\"disabled || readonly || isCurrentDate\"\n [bsValue]=\"bsDateValue\"\n (bsValueChange)=\"onModelUpdate($event, 'date')\">\n </div>\n <div *dropdownMenu\n class=\"dropdown-menu\"\n aria-label=\"timepicker dropdown\"\n aria-controls=\"time\"\n (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"disabled || readonly || isCurrentDate\"\n [(ngModel)]=\"bsTimeValue\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\"\n (ngModelChange)=\"onModelUpdate($event, 'time')\"></timepicker>\n </div>\n </div>\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDateValue\"\n (change)=\"onModelUpdate($event, 'date')\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n [tabindex]=\"tabindex || 0\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event)\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
1965
2031
  providers: [
1966
2032
  provideAs(DatetimeComponent, NG_VALUE_ACCESSOR, true),
1967
2033
  provideAs(DatetimeComponent, NG_VALIDATORS, true),