@wavemaker/app-runtime-wm-build 11.3.6-rc.5322 → 11.3.6-rc.5325

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/app-runtime-wm-build",
3
- "version": "11.3.6-rc.5322",
3
+ "version": "11.3.6-rc.5325",
4
4
  "description": "All modules required for a wavemaker application.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -8973,9 +8973,11 @@
8973
8973
  });
8974
8974
  };
8975
8975
  var getKeyboardFocusableElements = function(element) {
8976
- return [ element.querySelectorAll('a, button, input, textarea, select, details, iframe, embed, object, summary dialog, audio[controls], video[controls], [contenteditable], [tabindex]:not([tabindex="-1"])') ].filter((function(el) {
8977
- return !el[0].hasAttribute("disabled") && !el[0].hasAttribute("hidden");
8978
- }))[0];
8976
+ var elementNodeList = element.querySelectorAll("a, button, input, textarea, select, details, iframe, embed, object, summary dialog, audio[controls], video[controls], [contenteditable]");
8977
+ var elements = Array.from(elementNodeList);
8978
+ return elements.filter((function(el) {
8979
+ return !el.hasAttribute("disabled") && !el.hasAttribute("hidden") && (!el.hasAttribute("tabindex") || el.hasAttribute("tabindex") && !el.getAttribute("tabindex").startsWith("-"));
8980
+ }));
8979
8981
  };
8980
8982
  exports.APPLY_STYLES_TYPE = void 0;
8981
8983
  (function(APPLY_STYLES_TYPE) {
@@ -15060,7 +15062,7 @@
15060
15062
  }
15061
15063
  var markup = "<" + tagName$q + " wmPopover " + transpiler.getAttrMarkup(attrs) + ">";
15062
15064
  var contextAttrs = table ? 'let-row="row"' : "";
15063
- markup += "<ng-template " + contextAttrs + '><button class="popover-start"></button>';
15065
+ markup += "<ng-template " + contextAttrs + '><div tabindex="0" class="popover-start sr-only" aria-label="">popover content start</div>';
15064
15066
  if (popoverTemplate) {
15065
15067
  markup += "" + (popoverTemplate ? popoverTemplate : "");
15066
15068
  }
@@ -15071,7 +15073,7 @@
15071
15073
  if (shared.get("hasPopoverContent")) {
15072
15074
  markup += "</div>";
15073
15075
  }
15074
- return markup + '<button class="popover-end"></button></ng-template></' + tagName$q + ">";
15076
+ return markup + '<div tabindex="0" class="popover-end sr-only" aria-label="">popover content ended</div></ng-template></' + tagName$q + ">";
15075
15077
  }
15076
15078
  };
15077
15079
  }));
@@ -27414,14 +27416,18 @@
27414
27416
  var newDay = newDate.getDate().toString();
27415
27417
  _.filter($("span:contains(" + newDay + ")").not(".is-other-month"), (function(obj) {
27416
27418
  if ($(obj).text() === newDay) {
27419
+ if ($(obj).hasClass("selected")) {
27420
+ $(obj).parent().attr("aria-selected", "true");
27421
+ }
27417
27422
  $(obj).attr("aria-label", moment(newDate).format("dddd, MMMM Do YYYY"));
27423
+ $("[bsdatepickerdaydecorator]").not(".is-other-month").attr("tabindex", "-1");
27424
+ $(obj).attr("tabindex", "0");
27418
27425
  $(obj).focus();
27419
27426
  _this.activeDate = newDate;
27420
27427
  }
27421
27428
  }));
27422
27429
  if (newDate.getMonth() === (new Date).getMonth() && newDate.getFullYear() === (new Date).getFullYear()) {
27423
27430
  _this.hightlightToday();
27424
- $("span:contains(" + (new Date).getDate().toString() + ")").not(".is-other-month").parent().attr("aria-selected", "true");
27425
27431
  }
27426
27432
  }));
27427
27433
  };
@@ -27463,6 +27469,9 @@
27463
27469
  if (event.originalEvent) {
27464
27470
  _this.setFocusForDate(-1);
27465
27471
  }
27472
+ setTimeout((function() {
27473
+ $(".bs-datepicker-head .previous").focus();
27474
+ }));
27466
27475
  }));
27467
27476
  datePickerHead.find(".next").click((function(event) {
27468
27477
  _this.next = _this.getMonth(_this.activeDate, 2);
@@ -27471,6 +27480,9 @@
27471
27480
  if (event.originalEvent) {
27472
27481
  _this.setFocusForDate(1);
27473
27482
  }
27483
+ setTimeout((function() {
27484
+ $(".bs-datepicker-head .next").focus();
27485
+ }));
27474
27486
  }));
27475
27487
  datePickerHead.find(".current").click((function(event) {
27476
27488
  if (event.originalEvent) {
@@ -27485,6 +27497,19 @@
27485
27497
  }));
27486
27498
  datePickerHead.find(".next").attr("aria-label", "Next Month, " + this.next.fullMonth + " " + this.next.date.getFullYear());
27487
27499
  datePickerHead.find(".previous").attr("aria-label", "Previous Month, " + this.prev.fullMonth + " " + this.prev.date.getFullYear());
27500
+ setTimeout((function() {
27501
+ var currentNodes = datePickerHead.find(".current span");
27502
+ var msg = "Changed to month ";
27503
+ datePickerHead.find(".current").attr("aria-live", "assertive").attr("aria-atomic", "false");
27504
+ if (_this.clicked) {
27505
+ if ($(currentNodes[0]).text()) {
27506
+ datePickerHead.find(".ng-star-inserted").prepend('<div class="sr-only">' + msg + "</div>");
27507
+ }
27508
+ if ($(currentNodes[1]).text()) {
27509
+ datePickerHead.find(".current").last().prepend('<div class="sr-only"> and year </div>');
27510
+ }
27511
+ }
27512
+ }));
27488
27513
  };
27489
27514
  BaseDateTimeComponent.prototype.setFocusForMonthOrDay = function() {
27490
27515
  var activeMonthOrYear = $(".bs-datepicker-head .current").first().text();
@@ -27620,8 +27645,6 @@
27620
27645
  BaseDateTimeComponent.prototype.loadMonths = function() {
27621
27646
  var _this = this;
27622
27647
  setTimeout((function() {
27623
- var datePickerBody = $(".bs-datepicker-body");
27624
- datePickerBody.find("table.months span").attr("tabindex", "0");
27625
27648
  _this.addKeyBoardEventsForMonths();
27626
27649
  _this.addDatepickerMouseEvents();
27627
27650
  }));
@@ -27664,8 +27687,6 @@
27664
27687
  BaseDateTimeComponent.prototype.loadYears = function() {
27665
27688
  var _this = this;
27666
27689
  setTimeout((function() {
27667
- var datePickerBody = $(".bs-datepicker-body");
27668
- datePickerBody.find("table.years span").attr("tabindex", "0");
27669
27690
  _this.addKeyBoardEventsForYears();
27670
27691
  _this.addDatepickerMouseEvents();
27671
27692
  }));
@@ -27682,6 +27703,8 @@
27682
27703
  }
27683
27704
  }
27684
27705
  setTimeout((function() {
27706
+ $(".bs-datepicker-body table.months span").attr("tabindex", "-1");
27707
+ $(".bs-datepicker-body table.months span:contains(" + newMonth + ")").attr("tabindex", "0");
27685
27708
  $(".bs-datepicker-body table.months span:contains(" + newMonth + ")").focus();
27686
27709
  _this.activeDate = newDate;
27687
27710
  }));
@@ -27730,6 +27753,8 @@
27730
27753
  }
27731
27754
  }
27732
27755
  setTimeout((function() {
27756
+ $(".bs-datepicker-body table.years span").attr("tabindex", "-1");
27757
+ $(".bs-datepicker-body table.years span:contains(" + newYear + ")").attr("tabindex", "0");
27733
27758
  $(".bs-datepicker-body table.years span:contains(" + newYear + ")").focus();
27734
27759
  _this.activeDate = newDate;
27735
27760
  }));
@@ -27896,11 +27921,6 @@
27896
27921
  children[i].classList.remove("add-opacity");
27897
27922
  }
27898
27923
  displayInputElem.classList.remove("remove-opacity");
27899
- var allDateTimeElements = this.nativeElement.getElementsByTagName("*");
27900
- for (var i = 0; i < allDateTimeElements.length; i++) {
27901
- allDateTimeElements[i].setAttribute("tabindex", this.tabindex);
27902
- }
27903
- displayInputElem.removeAttribute("tabindex");
27904
27924
  }
27905
27925
  };
27906
27926
  BaseDateTimeComponent.prototype.onDateTimeInputFocus = function(skipFocus) {
@@ -27917,11 +27937,6 @@
27917
27937
  children[i].classList.add("add-opacity");
27918
27938
  }
27919
27939
  displayInputElem.classList.add("remove-opacity");
27920
- var allDateTimeElements = this.nativeElement.getElementsByTagName("*");
27921
- for (var i = 0; i < allDateTimeElements.length; i++) {
27922
- allDateTimeElements[i].setAttribute("tabindex", "-1");
27923
- }
27924
- displayInputElem.setAttribute("tabindex", this.tabindex);
27925
27940
  return;
27926
27941
  }
27927
27942
  if (displayInputElem && this._triggeredByUser) {
@@ -28004,7 +28019,10 @@
28004
28019
  this.isReadOnly = this.dataentrymode != "undefined" && !this.isDataEntryModeEnabledOnInput(this.dataentrymode);
28005
28020
  var mobileInput = this.getMobileInput();
28006
28021
  if (mobileInput) {
28007
- mobileInput.style.width = mobileInput.parentElement.clientWidth + "px";
28022
+ setTimeout((function() {
28023
+ mobileInput.style.width = mobileInput.parentElement.clientWidth + "px";
28024
+ mobileInput.style.height = mobileInput.parentElement.clientHeight + "px";
28025
+ }));
28008
28026
  }
28009
28027
  };
28010
28028
  BaseDateTimeComponent.prototype.ngOnDestroy = function() {
@@ -28267,7 +28285,7 @@
28267
28285
  if (this.isDropDownDisplayEnabledOnInput(this.showdropdownon)) {
28268
28286
  event.stopPropagation();
28269
28287
  var action = this.keyEventPlugin.constructor.getEventFullKey(event);
28270
- if (action === "enter" || action === "arrowdown") {
28288
+ if (action === "enter") {
28271
28289
  var newVal = core$1.getDateObj(event.target.value, {
28272
28290
  pattern: this.datepattern
28273
28291
  });
@@ -28309,7 +28327,7 @@
28309
28327
  type: core.Component,
28310
28328
  args: [ {
28311
28329
  selector: "[wmDate]",
28312
- 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',
28330
+ 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',
28313
28331
  providers: [ base.provideAs(DateComponent, forms.NG_VALUE_ACCESSOR, true), base.provideAs(DateComponent, forms.NG_VALIDATORS, true), base.provideAsWidgetRef(DateComponent) ]
28314
28332
  } ]
28315
28333
  } ];
@@ -28761,7 +28779,7 @@
28761
28779
  type: core.Component,
28762
28780
  args: [ {
28763
28781
  selector: "[wmDateTime]",
28764
- 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',
28782
+ 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',
28765
28783
  providers: [ base.provideAs(DatetimeComponent, forms.NG_VALUE_ACCESSOR, true), base.provideAs(DatetimeComponent, forms.NG_VALIDATORS, true), base.provideAsWidgetRef(DatetimeComponent), {
28766
28784
  provide: timepicker.TimepickerConfig,
28767
28785
  deps: [ core$1.AbstractI18nService ],
@@ -35733,6 +35751,9 @@
35733
35751
  return _this.hidePopover();
35734
35752
  };
35735
35753
  }
35754
+ setTimeout((function() {
35755
+ _this.anchorRef.nativeElement.removeAttribute("aria-describedby");
35756
+ }));
35736
35757
  var deRegister = this.eventManager.addEventListener(popoverContainer, "keydown.esc", (function() {
35737
35758
  _this.isOpen = false;
35738
35759
  _this.setFocusToPopoverLink();
@@ -35740,8 +35761,6 @@
35740
35761
  }));
35741
35762
  var popoverStartBtn = popoverContainer.querySelector(".popover-start");
35742
35763
  var popoverEndBtn = popoverContainer.querySelector(".popover-end");
35743
- popoverStartBtn.setAttribute("aria-hidden", "true");
35744
- popoverEndBtn.setAttribute("aria-hidden", "true");
35745
35764
  popoverStartBtn.onkeydown = function(event) {
35746
35765
  var action = _this.keyEventPlugin.constructor.getEventFullKey(event);
35747
35766
  if (action === "shift.tab") {
@@ -35765,7 +35784,6 @@
35765
35784
  return _this.close();
35766
35785
  };
35767
35786
  }
35768
- core.setAttr(popoverContainer, "tabindex", 0);
35769
35787
  setTimeout((function() {
35770
35788
  return popoverStartBtn.focus();
35771
35789
  }), 50);
@@ -44688,9 +44706,9 @@
44688
44706
  }
44689
44707
  }
44690
44708
  };
44691
- ListComponent.prototype.onUpdate = function(evt, ui) {
44709
+ ListComponent.prototype.onUpdate = function(evt, ui, presentIndex) {
44692
44710
  var data = this.fieldDefs;
44693
- var newIndex = ui.item.index();
44711
+ var newIndex = ui === undefined ? presentIndex : ui.item.index();
44694
44712
  var oldIndex = this.$ulEle.data("oldIndex");
44695
44713
  var minIndex = _.min([ newIndex, oldIndex ]);
44696
44714
  var maxIndex = _.max([ newIndex, oldIndex ]);
@@ -44886,8 +44904,10 @@
44886
44904
  this.currentIndex = presentIndex + 1;
44887
44905
  if (this.isListElementMovable) {
44888
44906
  this.ariaText = "Item " + this.currentIndex + " grabbed, current position ";
44907
+ this.$ulEle.data("oldIndex", presentIndex);
44889
44908
  } else {
44890
44909
  this.ariaText = "Item " + this.currentIndex + " dropped, final position ";
44910
+ this.onUpdate($event, undefined, presentIndex);
44891
44911
  }
44892
44912
  }
44893
44913
  };
@@ -44932,10 +44952,12 @@
44932
44952
  this.dataNavigator.widget.maxResults = nv;
44933
44953
  this.dataNavigator.maxResults = nv;
44934
44954
  } else if (key === "enablereorder") {
44935
- if (nv) {
44955
+ if (nv && this.$ulEle) {
44956
+ this.$ulEle.attr("aria-describedby", this.titleId);
44936
44957
  this.configureDnD();
44937
44958
  this.$ulEle.sortable("enable");
44938
44959
  } else if (this.$ulEle && !nv) {
44960
+ this.$ulEle.removeAttr("aria-describedby");
44939
44961
  this.$ulEle.sortable("disable");
44940
44962
  }
44941
44963
  } else {
@@ -45089,9 +45111,18 @@
45089
45111
  _super.prototype.ngAfterViewInit.call(_this);
45090
45112
  _this.setUpCUDHandlers();
45091
45113
  _this.selectedItemWidgets = _this.multiselect ? [] : {};
45114
+ var ele = $(_this.nativeElement).find(".app-livelist-container");
45092
45115
  if (_this.enablereorder && !_this.groupby) {
45116
+ if (ele) {
45117
+ ele.attr("aria-describedby", _this.titleId);
45118
+ }
45093
45119
  _this.configureDnD();
45094
45120
  }
45121
+ if (!_this.enablereorder) {
45122
+ if (ele) {
45123
+ ele.removeAttr("aria-describedby");
45124
+ }
45125
+ }
45095
45126
  if (_this.groupby && _this.collapsible) {
45096
45127
  _this.handleHeaderClick = base.handleHeaderClick;
45097
45128
  _this.toggleAllHeaders = base.toggleAllHeaders.bind(undefined, _this);
@@ -45101,6 +45132,16 @@
45101
45132
  this.setupHandlers();
45102
45133
  var $ul = this.nativeElement.querySelector("ul.app-livelist-container");
45103
45134
  base.styler($ul, this, base.APPLY_STYLES_TYPE.SCROLLABLE_CONTAINER);
45135
+ if (this.enablereorder) {
45136
+ if ($ul) {
45137
+ $ul.setAttribute("aria-describedby", this.titleId);
45138
+ }
45139
+ }
45140
+ if (!this.enablereorder) {
45141
+ if ($ul) {
45142
+ $ul.removeAttribute("aria-describedby");
45143
+ }
45144
+ }
45104
45145
  if (core.isMobileApp() && $ul.querySelector(".app-list-item-action-panel")) {
45105
45146
  this._listAnimator = new ListAnimator(this);
45106
45147
  }
@@ -45125,7 +45166,7 @@
45125
45166
  type: core$1.Component,
45126
45167
  args: [ {
45127
45168
  selector: "div[wmList]",
45128
- template: '<div class="panel-heading" *ngIf="title || subheading || iconclass">\n <h3 class="panel-title">\n <div class="pull-left">\n <i class="app-icon panel-icon {{iconclass}}" aria-hidden="true" [hidden]="!iconclass"></i>\n </div>\n <div class="pull-left">\n <div class="heading" [innerHTML]="title"></div>\n <div class="description" [innerHTML]="subheading"></div>\n </div>\n </h3>\n</div>\n\n<nav class="app-datanavigator" [attr.aria-disabled]="dataNavigator.isDisablePrevious" aria-label="Page navigation" *ngIf="navigation === \'Inline\' && !noDataFound">\n <ul class="pager">\n <li class="previous" [ngClass]="{\'disabled\': (dataNavigator ? dataNavigator.isDisablePrevious : true)}">\n <a href="javascript:void(0);" (click)="dataNavigator.navigatePage(\'prev\', $event)"\n [attr.aria-disabled]="dataNavigator.isDisablePrevious">\n <i class="wi wi-chevron-left" aria-hidden="true"></i>\n <span class="sr-only">Go to Previous page {{dataNavigator.isDisablePrevious ? \', Disabled\' : \'\'}}</span>\n </a>\n </li>\n </ul>\n</nav>\n<div *ngIf="navigation === \'Inline\' && !noDataFound" aria-live="polite" aria-atomic="true" class="sr-only"> {{\'Page \' + dataNavigator.dn.currentPage + \' of \' + dataNavigator.pageCount }}</div>\n\n<div>\n <div id={{titleId}} class="sr-only" *ngIf="enablereorder">\n Press space bar to toggle drag drop mode, use arrow keys to move selected elements.\n </div>\n\n <div aria-live="assertive" *ngIf="listItems && enablereorder && currentIndex" class="sr-only" >\n {{ariaText + currentIndex + \' of \' + listItems.length}}\n </div>\n</div>\n\n<ul [attr.tabindex]="tabindex" [attr.aria-describedby] = "titleId" class="app-livelist-container clearfix {{direction === \'horizontal\' ? \'app-horizontal-list\': \'\'}} {{listclass}}" role="list"\n (keydown.enter)="handleKeyDown($event, \'select\')"\n\n (keydown.space)="handleKeyDown($event, \'space\')"\n\n (keydown.arrowup)="handleKeyDown($event, \'focusPrev\')"\n (keydown.arrowdown)="handleKeyDown($event, \'focusNext\')"\n (keydown.arrowleft)="handleKeyDown($event, \'focusPrev\')"\n (keydown.arrowright)="handleKeyDown($event, \'focusNext\')"\n\n (keydown.shift.arrowup)="handleKeyDown($event, \'selectPrev\')"\n (keydown.shift.arrowdown)="handleKeyDown($event, \'selectNext\')"\n (keydown.shift.arrowleft)="handleKeyDown($event, \'selectPrev\')"\n (keydown.shift.arrowright)="handleKeyDown($event, \'selectNext\')"\n [hidden]="noDataFound && !variableInflight"\n>\n <ng-template [ngIf]="!groupby" [ngIfElse]="groupedListTemplate">\n <li *ngFor="let item of fieldDefs; index as $index; first as $first; last as $last;" class="app-list-item {{direction === \'horizontal\' ? \'\' : itemsPerRowClass}}" [ngClass]="listItemRef.itemClass"\n [wmListItem]="item"\n #listItemRef="listItemRef"\n [attr.tabindex]="tabindex"\n role="listitem">\n <ng-container [ngTemplateOutlet]="listTemplate" [ngTemplateOutletContext]="{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}"></ng-container>\n </li>\n </ng-template>\n <ng-container [ngTemplateOutlet]="listLeftActionTemplate"></ng-container>\n <ng-container [ngTemplateOutlet]="listRightActionTemplate"></ng-container>\n</ul>\n\n<div class="no-data-msg" *ngIf="noDataFound && !variableInflight" [textContent]="nodatamessage"></div>\n\n<div class="loading-data-msg" *ngIf="variableInflight && !pulltorefresh">\n <span>\n <i class="app-icon panel-icon fa-spin" aria-hidden="true" [ngClass]="loadingicon"></i>\n <span class="sr-only">Loading</span>\n <span class="loading-text" [textContent]="loadingdatamsg"></span>\n </span>\n</div>\n\n<nav class="app-datanavigator" [attr.aria-disabled]="dataNavigator.isDisableNext" *ngIf="navigation === \'Inline\' && !noDataFound">\n <ul class="pager">\n <li class="next" [ngClass]="{\'disabled\': (dataNavigator ? dataNavigator.isDisableNext : true)}">\n <a href="javascript:void(0);" (click)="dataNavigator.navigatePage(\'next\', $event)"\n [attr.aria-disabled]="dataNavigator.isDisableNext">\n <i class="wi wi-chevron-right" aria-hidden="true"></i>\n <span class="sr-only">Go to Next page {{dataNavigator.isDisableNext ? \', Disabled\' : \'\'}}</span>\n </a>\n </li>\n </ul>\n</nav>\n\n<div class="panel-footer" *ngIf="navigation !== \'None\'" [hidden]="!showNavigation || (onDemandLoad && dataNavigator.isDisableNext) || (dataNavigator.dataSize <= pagesize) || (!dataNavigator.dataSize && !dataNavigator.datasource?.pagination?.next)">\n <nav wmPagination\n navigationalign.bind="navigationalign"\n navigation.bind="navControls"\n showrecordcount.bind="showrecordcount"\n maxsize.bind="maxsize"\n boundarylinks.bind="boundarylinks"\n forceellipses.bind="forceellipses"\n directionlinks.bind="directionlinks"\n show.bind="!onDemandLoad"\n paginationchange.event="beforePaginationChange($event, $index)"\n ></nav>\n <a *ngIf="onDemandLoad" href="javascript:void(0);"\n (click)="dataNavigator.navigatePage(\'next\', $event)"\n class="app-button btn btn-block"\n [ngClass]="paginationclass"\n [textContent]="ondemandmessage"\n ></a>\n</div>\n\n\x3c!--This template will be displayed when groupby is specified--\x3e\n<ng-template #groupedListTemplate>\n <li *ngFor="let groupObj of groupedData" class="app-list-item-group clearfix">\n <ul [attr.tabindex]="tabindex" class="list-group item-group" [ngClass]="listclass">\n <li class="app-list-item-header list-item list-group-header" (click)="handleHeaderClick($event)" [ngClass]="{\'collapsible-content\': collapsible}">\n <h4>{{groupObj.key}}\n <div class="header-action">\n <i class="app-icon wi action wi-chevron-up" *ngIf="collapsible"></i>\n <span *ngIf="showcount" class="label label-default">{{groupObj.data.length}}</span>\n </div>\n </h4>\n </li>\n <ul class="list-group clearfix {{direction === \'horizontal\' ? \'app-horizontal-list\': \'\'}}">\n <li *ngFor="let item of groupObj.data; index as $index; first as $first; last as $last;" [attr.tabindex]="tabindex"\n class="app-list-item group-list-item {{itemsPerRowClass}}"\n [ngClass]="listItemRef.itemClass"\n [wmListItem]="item" #listItemRef="listItemRef">\n <ng-container [ngTemplateOutlet]="listTemplate" [ngTemplateOutletContext]="{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}"></ng-container>\n </li>\n </ul>\n </ul>\n </li>\n</ng-template>\n',
45169
+ template: '<div class="panel-heading" *ngIf="title || subheading || iconclass">\n <h3 class="panel-title">\n <div class="pull-left">\n <i class="app-icon panel-icon {{iconclass}}" aria-hidden="true" [hidden]="!iconclass"></i>\n </div>\n <div class="pull-left">\n <div class="heading" [innerHTML]="title"></div>\n <div class="description" [innerHTML]="subheading"></div>\n </div>\n </h3>\n</div>\n\n<nav class="app-datanavigator" [attr.aria-disabled]="dataNavigator.isDisablePrevious" aria-label="Page navigation" *ngIf="navigation === \'Inline\' && !noDataFound">\n <ul class="pager">\n <li class="previous" [ngClass]="{\'disabled\': (dataNavigator ? dataNavigator.isDisablePrevious : true)}">\n <a href="javascript:void(0);" (click)="dataNavigator.navigatePage(\'prev\', $event)"\n [attr.aria-disabled]="dataNavigator.isDisablePrevious">\n <i class="wi wi-chevron-left" aria-hidden="true"></i>\n <span class="sr-only">Go to Previous page {{dataNavigator.isDisablePrevious ? \', Disabled\' : \'\'}}</span>\n </a>\n </li>\n </ul>\n</nav>\n<div *ngIf="navigation === \'Inline\' && !noDataFound" aria-live="polite" aria-atomic="true" class="sr-only"> {{\'Page \' + dataNavigator.dn.currentPage + \' of \' + dataNavigator.pageCount }}</div>\n\n<div>\n <div id={{titleId}} class="sr-only" *ngIf="enablereorder">\n Press space bar to toggle drag drop mode, use arrow keys to move selected elements.\n </div>\n\n <div aria-live="assertive" *ngIf="listItems && enablereorder && currentIndex" class="sr-only" >\n {{ariaText + currentIndex + \' of \' + listItems.length}}\n </div>\n</div>\n\n<ul [attr.tabindex]="tabindex" class="app-livelist-container clearfix {{direction === \'horizontal\' ? \'app-horizontal-list\': \'\'}} {{listclass}}" role="list"\n (keydown.enter)="handleKeyDown($event, \'select\')"\n\n (keydown.space)="handleKeyDown($event, \'space\')"\n\n (keydown.arrowup)="handleKeyDown($event, \'focusPrev\')"\n (keydown.arrowdown)="handleKeyDown($event, \'focusNext\')"\n (keydown.arrowleft)="handleKeyDown($event, \'focusPrev\')"\n (keydown.arrowright)="handleKeyDown($event, \'focusNext\')"\n\n (keydown.shift.arrowup)="handleKeyDown($event, \'selectPrev\')"\n (keydown.shift.arrowdown)="handleKeyDown($event, \'selectNext\')"\n (keydown.shift.arrowleft)="handleKeyDown($event, \'selectPrev\')"\n (keydown.shift.arrowright)="handleKeyDown($event, \'selectNext\')"\n [hidden]="noDataFound && !variableInflight"\n>\n <ng-template [ngIf]="!groupby" [ngIfElse]="groupedListTemplate">\n <li *ngFor="let item of fieldDefs; index as $index; first as $first; last as $last;" class="app-list-item {{direction === \'horizontal\' ? \'\' : itemsPerRowClass}}" [ngClass]="listItemRef.itemClass"\n [wmListItem]="item"\n #listItemRef="listItemRef"\n [attr.tabindex]="tabindex"\n role="listitem">\n <ng-container [ngTemplateOutlet]="listTemplate" [ngTemplateOutletContext]="{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}"></ng-container>\n </li>\n </ng-template>\n <ng-container [ngTemplateOutlet]="listLeftActionTemplate"></ng-container>\n <ng-container [ngTemplateOutlet]="listRightActionTemplate"></ng-container>\n</ul>\n\n<div class="no-data-msg" *ngIf="noDataFound && !variableInflight" [textContent]="nodatamessage"></div>\n\n<div class="loading-data-msg" *ngIf="variableInflight && !pulltorefresh">\n <span>\n <i class="app-icon panel-icon fa-spin" aria-hidden="true" [ngClass]="loadingicon"></i>\n <span class="sr-only">Loading</span>\n <span class="loading-text" [textContent]="loadingdatamsg"></span>\n </span>\n</div>\n\n<nav class="app-datanavigator" [attr.aria-disabled]="dataNavigator.isDisableNext" *ngIf="navigation === \'Inline\' && !noDataFound">\n <ul class="pager">\n <li class="next" [ngClass]="{\'disabled\': (dataNavigator ? dataNavigator.isDisableNext : true)}">\n <a href="javascript:void(0);" (click)="dataNavigator.navigatePage(\'next\', $event)"\n [attr.aria-disabled]="dataNavigator.isDisableNext">\n <i class="wi wi-chevron-right" aria-hidden="true"></i>\n <span class="sr-only">Go to Next page {{dataNavigator.isDisableNext ? \', Disabled\' : \'\'}}</span>\n </a>\n </li>\n </ul>\n</nav>\n\n<div class="panel-footer" *ngIf="navigation !== \'None\'" [hidden]="!showNavigation || (onDemandLoad && dataNavigator.isDisableNext) || (dataNavigator.dataSize <= pagesize) || (!dataNavigator.dataSize && !dataNavigator.datasource?.pagination?.next)">\n <nav wmPagination\n navigationalign.bind="navigationalign"\n navigation.bind="navControls"\n showrecordcount.bind="showrecordcount"\n maxsize.bind="maxsize"\n boundarylinks.bind="boundarylinks"\n forceellipses.bind="forceellipses"\n directionlinks.bind="directionlinks"\n show.bind="!onDemandLoad"\n paginationchange.event="beforePaginationChange($event, $index)"\n ></nav>\n <a *ngIf="onDemandLoad" href="javascript:void(0);"\n (click)="dataNavigator.navigatePage(\'next\', $event)"\n class="app-button btn btn-block"\n [ngClass]="paginationclass"\n [textContent]="ondemandmessage"\n ></a>\n</div>\n\n\x3c!--This template will be displayed when groupby is specified--\x3e\n<ng-template #groupedListTemplate>\n <li *ngFor="let groupObj of groupedData" class="app-list-item-group clearfix">\n <ul [attr.tabindex]="tabindex" class="list-group item-group" [ngClass]="listclass">\n <li class="app-list-item-header list-item list-group-header" (click)="handleHeaderClick($event)" [ngClass]="{\'collapsible-content\': collapsible}">\n <h4>{{groupObj.key}}\n <div class="header-action">\n <i class="app-icon wi action wi-chevron-up" *ngIf="collapsible"></i>\n <span *ngIf="showcount" class="label label-default">{{groupObj.data.length}}</span>\n </div>\n </h4>\n </li>\n <ul class="list-group clearfix {{direction === \'horizontal\' ? \'app-horizontal-list\': \'\'}}">\n <li *ngFor="let item of groupObj.data; index as $index; first as $first; last as $last;" [attr.tabindex]="tabindex"\n class="app-list-item group-list-item {{itemsPerRowClass}}"\n [ngClass]="listItemRef.itemClass"\n [wmListItem]="item" #listItemRef="listItemRef">\n <ng-container [ngTemplateOutlet]="listTemplate" [ngTemplateOutletContext]="{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}"></ng-container>\n </li>\n </ul>\n </ul>\n </li>\n</ng-template>\n',
45129
45170
  providers: [ base.provideAsWidgetRef(ListComponent) ]
45130
45171
  } ]
45131
45172
  } ];