novo-elements 5.5.2 → 5.8.1

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 (36) hide show
  1. package/bundles/novo-elements.umd.js +350 -218
  2. package/bundles/novo-elements.umd.js.map +1 -1
  3. package/bundles/novo-elements.umd.min.js +2 -2
  4. package/bundles/novo-elements.umd.min.js.map +1 -1
  5. package/elements/chips/Chips.scss +6 -0
  6. package/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.d.ts +5 -1
  7. package/elements/data-table/cells/data-table-checkbox-cell.component.d.ts +3 -0
  8. package/elements/data-table/data-table-clear-button.component.d.ts +2 -0
  9. package/elements/data-table/data-table.component.d.ts +3 -1
  10. package/elements/data-table/data-table.component.scss +3 -0
  11. package/elements/data-table/interfaces.d.ts +3 -0
  12. package/elements/data-table/state/data-table-state.service.d.ts +6 -2
  13. package/elements/picker/extras/entity-picker-results/EntityPickerResults.d.ts +1 -0
  14. package/esm2015/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.js +26 -6
  15. package/esm2015/elements/data-table/cells/data-table-checkbox-cell.component.js +16 -5
  16. package/esm2015/elements/data-table/data-table-clear-button.component.js +9 -1
  17. package/esm2015/elements/data-table/data-table.component.js +8 -3
  18. package/esm2015/elements/data-table/data-table.source.js +5 -2
  19. package/esm2015/elements/data-table/interfaces.js +1 -1
  20. package/esm2015/elements/data-table/pagination/data-table-pagination.component.js +4 -1
  21. package/esm2015/elements/data-table/sort-filter/sort-filter.directive.js +3 -1
  22. package/esm2015/elements/data-table/state/data-table-state.service.js +31 -7
  23. package/esm2015/elements/expansion/expansion-panel.js +1 -1
  24. package/esm2015/elements/picker/extras/entity-picker-results/EntityPickerResults.js +31 -1
  25. package/esm2015/index.js +1 -1
  26. package/esm2015/services/novo-label-service.js +2 -1
  27. package/esm2015/utils/app-bridge/AppBridge.js +54 -16
  28. package/esm2015/utils/form-utils/FormUtils.js +2 -2
  29. package/fesm2015/novo-elements.js +375 -231
  30. package/fesm2015/novo-elements.js.map +1 -1
  31. package/index.d.ts +1 -1
  32. package/novo-elements.metadata.json +1 -1
  33. package/package.json +1 -1
  34. package/services/novo-label-service.d.ts +1 -0
  35. package/styles/global/variables.scss +4 -1
  36. package/utils/app-bridge/AppBridge.d.ts +11 -2
@@ -3128,6 +3128,7 @@
3128
3128
  this.clearAllNormalCase = 'Clear All';
3129
3129
  this.clearSort = 'Clear Sort';
3130
3130
  this.clearFilter = 'Clear Filter';
3131
+ this.clearSelected = 'Clear Selected';
3131
3132
  this.today = 'Today';
3132
3133
  this.now = 'Now';
3133
3134
  this.isRequired = 'is required';
@@ -5814,6 +5815,8 @@
5814
5815
  return 'user';
5815
5816
  case 'CorporationDepartment':
5816
5817
  return 'department';
5818
+ case 'JobShift':
5819
+ return 'timetable contract';
5817
5820
  default:
5818
5821
  return '';
5819
5822
  }
@@ -5827,6 +5830,14 @@
5827
5830
  }
5828
5831
  return timestamp;
5829
5832
  };
5833
+ EntityPickerResult.prototype.renderTimeNoOffset = function (dateStr) {
5834
+ var timestamp = '';
5835
+ if (dateStr) {
5836
+ dateStr = dateStr.slice(0, 19);
5837
+ timestamp = this.labels.formatTime(dateStr);
5838
+ }
5839
+ return timestamp;
5840
+ };
5830
5841
  EntityPickerResult.prototype.getNameForResult = function (result) {
5831
5842
  if (result) {
5832
5843
  switch (result.searchEntity) {
@@ -5869,7 +5880,7 @@
5869
5880
  EntityPickerResult.decorators = [
5870
5881
  { type: core.Component, args: [{
5871
5882
  selector: 'entity-picker-result',
5872
- template: "\n <novo-list-item *ngIf=\"match.data\">\n <item-header>\n <item-avatar [icon]=\"getIconForResult(match.data)\"></item-avatar>\n <item-title> <span [innerHtml]=\"highlight(getNameForResult(match.data), term)\"></span> </item-title>\n </item-header>\n <item-content direction=\"horizontal\">\n <!-- COMPANY 1 -->\n <p class=\"company\" *ngIf=\"match.data.companyName || match.data?.clientCorporation?.name\">\n <i class=\"bhi-company\"></i>\n <span [innerHtml]=\"highlight(match.data.companyName || match.data?.clientCorporation?.name, term)\"></span>\n </p>\n <!-- CLIENT CONTACT -->\n <p class=\"contact\" *ngIf=\"match.data?.clientContact?.firstName\">\n <i class=\"bhi-person contact person\"></i>\n <span [innerHtml]=\"highlight(match.data.clientContact.firstName + ' ' + match.data.clientContact.lastName, term)\"></span>\n </p>\n <!-- CANDIDATE -->\n <p class=\"candidate\" *ngIf=\"match.data.candidate && match.data.searchEntity === 'Placement'\">\n <i class=\"bhi-candidate\"></i>\n <span [innerHtml]=\"highlight(match.data.candidate.firstName + ' ' + match.data.candidate.lastName, term)\"></span>\n </p>\n <!-- START & END DATE -->\n <p class=\"start-date\" *ngIf=\"match.data.dateBegin && match.data.searchEntity === 'Placement'\">\n <i class=\"bhi-calendar\"></i>\n <span [innerHtml]=\"renderTimestamp(match.data.dateBegin) + ' - ' + renderTimestamp(match.data.dateEnd)\"></span>\n </p>\n <!-- EMAIL -->\n <p class=\"email\" *ngIf=\"match.data.email\">\n <i class=\"bhi-email\"></i> <span [innerHtml]=\"highlight(match.data.email, term)\"></span>\n </p>\n <!-- PHONE -->\n <p class=\"phone\" *ngIf=\"match.data.phone\">\n <i class=\"bhi-phone\"></i> <span [innerHtml]=\"highlight(match.data.phone, term)\"></span>\n </p>\n <!-- ADDRESS -->\n <p class=\"location\" *ngIf=\"match.data.address && (match.data.address.city || match.data.address.state)\">\n <i class=\"bhi-location\"></i> <span *ngIf=\"match.data.address.city\" [innerHtml]=\"highlight(match.data.address.city, term)\"></span>\n <span *ngIf=\"match.data.address.city && match.data.address.state\">, </span>\n <span *ngIf=\"match.data.address.state\" [innerHtml]=\"highlight(match.data.address.state, term)\"></span>\n </p>\n <!-- STATUS -->\n <p class=\"status\" *ngIf=\"match.data.status\">\n <i class=\"bhi-info\"></i> <span [innerHtml]=\"highlight(match.data.status, term)\"></span>\n </p>\n <!-- OWNER -->\n <p class=\"owner\" *ngIf=\"match.data.owner && match.data.owner.name && match.data.searchEntity === 'Candidate'\">\n <i class=\"bhi-person\"></i> <span [innerHtml]=\"highlight(match.data.owner.name, term)\"></span>\n </p>\n <!-- PRIMARY DEPARTMENT -->\n <p\n class=\"primary-department\"\n *ngIf=\"match.data.primaryDepartment && match.data.primaryDepartment.name && match.data.searchEntity === 'CorporateUser'\"\n >\n <i class=\"bhi-department\"></i> <span [innerHtml]=\"highlight(match.data.primaryDepartment.name, term)\"></span>\n </p>\n <!-- OCCUPATION -->\n <p class=\"occupation\" *ngIf=\"match.data.occupation && match.data.searchEntity === 'CorporateUser'\">\n <i class=\"bhi-occupation\"></i> <span [innerHtml]=\"highlight(match.data.occupation, term)\"></span>\n </p>\n </item-content>\n </novo-list-item>\n "
5883
+ template: "\n <novo-list-item *ngIf=\"match.data\">\n <item-header>\n <item-avatar [icon]=\"getIconForResult(match.data)\"></item-avatar>\n <item-title> <span [innerHtml]=\"highlight(getNameForResult(match.data), term)\"></span> </item-title>\n </item-header>\n <item-content direction=\"horizontal\">\n <!-- COMPANY 1 -->\n <p class=\"company\" *ngIf=\"match.data.companyName || match.data?.clientCorporation?.name\">\n <i class=\"bhi-company\"></i>\n <span [innerHtml]=\"highlight(match.data.companyName || match.data?.clientCorporation?.name, term)\"></span>\n </p>\n <!-- CLIENT CONTACT -->\n <p class=\"contact\" *ngIf=\"match.data?.clientContact?.firstName\">\n <i class=\"bhi-person contact person\"></i>\n <span [innerHtml]=\"highlight(match.data.clientContact.firstName + ' ' + match.data.clientContact.lastName, term)\"></span>\n </p>\n <!-- CANDIDATE -->\n <p class=\"candidate\" *ngIf=\"match.data.candidate && match.data.searchEntity === 'Placement'\">\n <i class=\"bhi-candidate\"></i>\n <span [innerHtml]=\"highlight(match.data.candidate.firstName + ' ' + match.data.candidate.lastName, term)\"></span>\n </p>\n <!-- START & END DATE -->\n <p class=\"start-date\" *ngIf=\"match.data.dateBegin && match.data.searchEntity === 'Placement'\">\n <i class=\"bhi-calendar\"></i>\n <span [innerHtml]=\"renderTimestamp(match.data.dateBegin) + ' - ' + renderTimestamp(match.data.dateEnd)\"></span>\n </p>\n <!-- START Date -->\n <p class=\"start-date\" *ngIf=\"match.data.startTime && match.data.searchEntity === 'JobShift'\">\n <i class=\"bhi-calendar\"></i>\n <span [innerHtml]=\"renderTimestamp(match.data.startTime)\"></span>\n </p>\n <!-- START & END TIME -->\n <p class=\"start-time\" *ngIf=\"match.data.startTime && match.data.searchEntity === 'JobShift'\">\n <i class=\"bhi-clock\"></i>\n <span [innerHtml]=\"renderTimeNoOffset(match.data.startTime) + ' - ' + renderTimeNoOffset(match.data.endTime)\"></span>\n </p>\n <!-- JOBORDER -->\n <p class=\"job\" *ngIf=\"match.data.jobOrder && match.data.searchEntity === 'JobShift'\">\n <i class=\"bhi-job\"></i>\n <span [innerHtml]=\"highlight(match.data.jobOrder.title, term)\"></span>\n </p>\n <!-- OPENINGS -->\n <p class=\"openings\" *ngIf=\"match.data.openings && match.data.searchEntity === 'JobShift'\">\n <i class=\"bhi-candidate\"></i>\n <span>{{ match.data.numAssigned }} / {{ match.data.openings }}</span>\n </p>\n <!-- EMAIL -->\n <p class=\"email\" *ngIf=\"match.data.email\">\n <i class=\"bhi-email\"></i> <span [innerHtml]=\"highlight(match.data.email, term)\"></span>\n </p>\n <!-- PHONE -->\n <p class=\"phone\" *ngIf=\"match.data.phone\">\n <i class=\"bhi-phone\"></i> <span [innerHtml]=\"highlight(match.data.phone, term)\"></span>\n </p>\n <!-- ADDRESS -->\n <p class=\"location\" *ngIf=\"match.data.address && (match.data.address.city || match.data.address.state)\">\n <i class=\"bhi-location\"></i> <span *ngIf=\"match.data.address.city\" [innerHtml]=\"highlight(match.data.address.city, term)\"></span>\n <span *ngIf=\"match.data.address.city && match.data.address.state\">, </span>\n <span *ngIf=\"match.data.address.state\" [innerHtml]=\"highlight(match.data.address.state, term)\"></span>\n </p>\n <!-- STATUS -->\n <p class=\"status\" *ngIf=\"match.data.status\">\n <i class=\"bhi-info\"></i> <span [innerHtml]=\"highlight(match.data.status, term)\"></span>\n </p>\n <!-- OWNER -->\n <p class=\"owner\" *ngIf=\"match.data.owner && match.data.owner.name && match.data.searchEntity === 'Candidate'\">\n <i class=\"bhi-person\"></i> <span [innerHtml]=\"highlight(match.data.owner.name, term)\"></span>\n </p>\n <!-- PRIMARY DEPARTMENT -->\n <p\n class=\"primary-department\"\n *ngIf=\"match.data.primaryDepartment && match.data.primaryDepartment.name && match.data.searchEntity === 'CorporateUser'\"\n >\n <i class=\"bhi-department\"></i> <span [innerHtml]=\"highlight(match.data.primaryDepartment.name, term)\"></span>\n </p>\n <!-- OCCUPATION -->\n <p class=\"occupation\" *ngIf=\"match.data.occupation && match.data.searchEntity === 'CorporateUser'\">\n <i class=\"bhi-occupation\"></i> <span [innerHtml]=\"highlight(match.data.occupation, term)\"></span>\n </p>\n </item-content>\n </novo-list-item>\n "
5873
5884
  },] }
5874
5885
  ];
5875
5886
  EntityPickerResult.ctorParameters = function () { return [
@@ -6987,6 +6998,7 @@
6987
6998
  this.expandedRows = new Set();
6988
6999
  this.isForceRefresh = false;
6989
7000
  this.updates = new core.EventEmitter();
7001
+ this.retainSelected = false;
6990
7002
  }
6991
7003
  Object.defineProperty(DataTableState.prototype, "userFiltered", {
6992
7004
  get: function () {
@@ -7017,9 +7029,12 @@
7017
7029
  this.filter = undefined;
7018
7030
  }
7019
7031
  this.page = 0;
7020
- this.selectedRows.clear();
7021
- this.resetSource.next();
7032
+ if (!this.retainSelected) {
7033
+ this.selectedRows.clear();
7034
+ this.resetSource.next();
7035
+ }
7022
7036
  this.onSortFilterChange();
7037
+ this.retainSelected = false;
7023
7038
  if (fireUpdate) {
7024
7039
  this.updates.emit({
7025
7040
  sort: this.sort,
@@ -7032,8 +7047,8 @@
7032
7047
  if (fireUpdate === void 0) { fireUpdate = true; }
7033
7048
  this.sort = undefined;
7034
7049
  this.page = 0;
7035
- this.selectedRows.clear();
7036
- this.resetSource.next();
7050
+ this.checkRetainment('sort');
7051
+ this.reset(fireUpdate, true);
7037
7052
  this.onSortFilterChange();
7038
7053
  if (fireUpdate) {
7039
7054
  this.updates.emit({
@@ -7048,8 +7063,8 @@
7048
7063
  this.filter = undefined;
7049
7064
  this.globalSearch = undefined;
7050
7065
  this.page = 0;
7051
- this.selectedRows.clear();
7052
- this.resetSource.next();
7066
+ this.checkRetainment('filter');
7067
+ this.reset(fireUpdate, true);
7053
7068
  this.onSortFilterChange();
7054
7069
  if (fireUpdate) {
7055
7070
  this.updates.emit({
@@ -7059,6 +7074,20 @@
7059
7074
  });
7060
7075
  }
7061
7076
  };
7077
+ DataTableState.prototype.clearSelected = function (fireUpdate) {
7078
+ if (fireUpdate === void 0) { fireUpdate = true; }
7079
+ this.globalSearch = undefined;
7080
+ this.page = 0;
7081
+ this.reset(fireUpdate, true);
7082
+ this.onSelectionChange();
7083
+ if (fireUpdate) {
7084
+ this.updates.emit({
7085
+ sort: this.sort,
7086
+ filter: this.filter,
7087
+ globalSearch: this.globalSearch,
7088
+ });
7089
+ }
7090
+ };
7062
7091
  DataTableState.prototype.onSelectionChange = function () {
7063
7092
  this.selectionSource.next();
7064
7093
  };
@@ -7066,9 +7095,12 @@
7066
7095
  this.expandSource.next(targetId);
7067
7096
  };
7068
7097
  DataTableState.prototype.onPaginationChange = function (isPageSizeChange, pageSize) {
7098
+ this.checkRetainment('page');
7069
7099
  this.paginationSource.next({ isPageSizeChange: isPageSizeChange, pageSize: pageSize });
7070
7100
  };
7071
7101
  DataTableState.prototype.onSortFilterChange = function () {
7102
+ this.checkRetainment('sort');
7103
+ this.checkRetainment('filter');
7072
7104
  this.sortFilterSource.next({
7073
7105
  sort: this.sort,
7074
7106
  filter: this.filter,
@@ -7092,6 +7124,10 @@
7092
7124
  }
7093
7125
  }
7094
7126
  };
7127
+ DataTableState.prototype.checkRetainment = function (caller) {
7128
+ var _a;
7129
+ this.retainSelected = ((_a = this.selectionOptions) === null || _a === void 0 ? void 0 : _a.some(function (option) { return option.label === caller; })) || this.retainSelected;
7130
+ };
7095
7131
  return DataTableState;
7096
7132
  }());
7097
7133
  DataTableState.decorators = [
@@ -7103,6 +7139,7 @@
7103
7139
  this.state = state;
7104
7140
  this.ref = ref;
7105
7141
  this.labels = labels;
7142
+ this.selectedClear = new core.EventEmitter();
7106
7143
  this.sortClear = new core.EventEmitter();
7107
7144
  this.filterClear = new core.EventEmitter();
7108
7145
  this.allClear = new core.EventEmitter();
@@ -7115,9 +7152,14 @@
7115
7152
  this.state.clearFilter();
7116
7153
  this.filterClear.emit(true);
7117
7154
  };
7155
+ NovoDataTableClearButton.prototype.clearSelected = function () {
7156
+ this.state.clearSelected();
7157
+ this.selectedClear.emit(true);
7158
+ };
7118
7159
  NovoDataTableClearButton.prototype.clearAll = function () {
7119
7160
  this.state.reset();
7120
7161
  this.allClear.emit(true);
7162
+ this.selectedClear.emit(true);
7121
7163
  this.sortClear.emit(true);
7122
7164
  this.filterClear.emit(true);
7123
7165
  };
@@ -7126,7 +7168,7 @@
7126
7168
  NovoDataTableClearButton.decorators = [
7127
7169
  { type: core.Component, args: [{
7128
7170
  selector: 'novo-data-table-clear-button',
7129
- template: "\n <novo-dropdown side=\"bottom-right\" class=\"novo-data-table-clear-button\" data-automation-id=\"novo-data-table-clear-dropdown\">\n <button type=\"button\" theme=\"primary\" color=\"negative\" icon=\"collapse\" data-automation-id=\"novo-data-table-clear-dropdown-btn\">{{ labels.clear }}</button>\n <list>\n <item *ngIf=\"state.sort\" (click)=\"clearSort()\" data-automation-id=\"novo-data-table-clear-dropdown-clear-sort\">{{ labels.clearSort }}</item>\n <item *ngIf=\"state.filter\" (click)=\"clearFilter()\" data-automation-id=\"novo-data-table-clear-dropdown-clear-filter\">{{ labels.clearFilter }}</item>\n <item *ngIf=\"state.sort && state.filter\" (click)=\"clearAll()\" data-automation-id=\"novo-data-table-clear-dropdown-clear-all\">{{ labels.clearAllNormalCase }}</item>\n </list>\n </novo-dropdown>\n ",
7171
+ template: "\n <novo-dropdown side=\"bottom-right\" class=\"novo-data-table-clear-button\" data-automation-id=\"novo-data-table-clear-dropdown\">\n <button type=\"button\" theme=\"primary\" color=\"negative\" icon=\"collapse\" data-automation-id=\"novo-data-table-clear-dropdown-btn\">{{ labels.clear }}</button>\n <list>\n <item *ngIf=\"state.selected.length > 0\" (click)=\"clearSelected()\" data-automation-id=\"novo-data-table-clear-dropdown-clear-selected\">{{ labels.clearSelected }}</item>\n <item *ngIf=\"state.sort\" (click)=\"clearSort()\" data-automation-id=\"novo-data-table-clear-dropdown-clear-sort\">{{ labels.clearSort }}</item>\n <item *ngIf=\"state.filter\" (click)=\"clearFilter()\" data-automation-id=\"novo-data-table-clear-dropdown-clear-filter\">{{ labels.clearFilter }}</item>\n <item *ngIf=\"state.sort && state.filter\" (click)=\"clearAll()\" data-automation-id=\"novo-data-table-clear-dropdown-clear-all\">{{ labels.clearAllNormalCase }}</item>\n </list>\n </novo-dropdown>\n ",
7130
7172
  changeDetection: core.ChangeDetectionStrategy.OnPush
7131
7173
  },] }
7132
7174
  ];
@@ -7136,6 +7178,7 @@
7136
7178
  { type: NovoLabelService }
7137
7179
  ]; };
7138
7180
  NovoDataTableClearButton.propDecorators = {
7181
+ selectedClear: [{ type: core.Output }],
7139
7182
  sortClear: [{ type: core.Output }],
7140
7183
  filterClear: [{ type: core.Output }],
7141
7184
  allClear: [{ type: core.Output }]
@@ -7190,7 +7233,10 @@
7190
7233
  _this.current = data.results.length;
7191
7234
  _this.data = data.results;
7192
7235
  // Clear selection
7193
- _this.state.selectedRows.clear();
7236
+ if (!_this.state.retainSelected) {
7237
+ _this.state.selectedRows.clear();
7238
+ }
7239
+ _this.state.retainSelected = false;
7194
7240
  _this.state.onSelectionChange();
7195
7241
  // Mark changes
7196
7242
  setTimeout(function () {
@@ -7562,6 +7608,7 @@
7562
7608
  }
7563
7609
  }
7564
7610
  this.state.filter = filter;
7611
+ this.state.checkRetainment('filter');
7565
7612
  this.state.reset(false, true);
7566
7613
  this.state.updates.next({ filter: filter, sort: this.state.sort });
7567
7614
  this.state.onSortFilterChange();
@@ -7569,6 +7616,7 @@
7569
7616
  NovoDataTableSortFilter.prototype.sort = function (id, value, transform) {
7570
7617
  var sort = { id: id, value: value, transform: transform };
7571
7618
  this.state.sort = sort;
7619
+ this.state.checkRetainment('sort');
7572
7620
  this.state.reset(false, true);
7573
7621
  this.state.updates.next({ sort: sort, filter: this.state.filter });
7574
7622
  this.state.onSortFilterChange();
@@ -7981,6 +8029,7 @@
7981
8029
  this.trackByFn = function (index, item) { return item.id; };
7982
8030
  this.templates = {};
7983
8031
  this.fixedHeader = false;
8032
+ this.maxSelected = undefined;
7984
8033
  this._hideGlobalSearch = true;
7985
8034
  this.preferencesChanged = new core.EventEmitter();
7986
8035
  this.loading = true;
@@ -8204,6 +8253,7 @@
8204
8253
  };
8205
8254
  NovoDataTable.prototype.ngAfterContentInit = function () {
8206
8255
  var _this = this;
8256
+ var _a;
8207
8257
  if (this.displayedColumns && this.displayedColumns.length) {
8208
8258
  this.expandable = this.displayedColumns.includes('expand');
8209
8259
  }
@@ -8233,6 +8283,7 @@
8233
8283
  }
8234
8284
  this.state.page = this.paginationOptions ? this.paginationOptions.page : undefined;
8235
8285
  this.state.pageSize = this.paginationOptions ? this.paginationOptions.pageSize : undefined;
8286
+ this.state.selectionOptions = (_a = this.selectionOptions) !== null && _a !== void 0 ? _a : undefined;
8236
8287
  // Scrolling inside table
8237
8288
  this.novoDataTableContainer.nativeElement.addEventListener('scroll', this.scrollListenerHandler);
8238
8289
  this.initialized = true;
@@ -8407,11 +8458,11 @@
8407
8458
  this.ref.markForCheck();
8408
8459
  };
8409
8460
  NovoDataTable.prototype.performInteractions = function (event) {
8410
- var e_1, _a;
8461
+ var e_1, _b;
8411
8462
  if (this.listInteractions) {
8412
8463
  try {
8413
- for (var _b = __values(this.columns), _c = _b.next(); !_c.done; _c = _b.next()) {
8414
- var column = _c.value;
8464
+ for (var _c = __values(this.columns), _d = _c.next(); !_d.done; _d = _c.next()) {
8465
+ var column = _d.value;
8415
8466
  var allListColumnInteractions = this.listInteractions[column.id];
8416
8467
  var listColumnInteraction = allListColumnInteractions && allListColumnInteractions.find(function (int) { return int.event.includes(event); });
8417
8468
  if (listColumnInteraction) {
@@ -8422,7 +8473,7 @@
8422
8473
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
8423
8474
  finally {
8424
8475
  try {
8425
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
8476
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
8426
8477
  }
8427
8478
  finally { if (e_1) throw e_1.error; }
8428
8479
  }
@@ -8440,7 +8491,7 @@
8440
8491
  animations.transition('void <=> *', animations.animate('70ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
8441
8492
  ]),
8442
8493
  ],
8443
- template: "\n <header\n *ngIf=\"(!(dataSource?.totallyEmpty && !state.userFiltered) && !loading) || forceShowHeader\"\n [class.empty]=\"hideGlobalSearch && !paginationOptions && !templates['customActions']\"\n >\n <ng-container *ngTemplateOutlet=\"templates['customHeader']\"></ng-container>\n <novo-search\n alwaysOpen=\"true\"\n (searchChanged)=\"onSearchChange($event)\"\n [(ngModel)]=\"state.globalSearch\"\n *ngIf=\"!hideGlobalSearch\"\n [placeholder]=\"searchOptions?.placeholder\"\n [hint]=\"searchOptions?.tooltip\"\n >\n </novo-search>\n <novo-data-table-pagination\n *ngIf=\"paginationOptions\"\n [theme]=\"paginationOptions.theme\"\n [length]=\"dataSource?.currentTotal\"\n [page]=\"paginationOptions.page\"\n [pageSize]=\"paginationOptions.pageSize\"\n [pageSizeOptions]=\"paginationOptions.pageSizeOptions\"\n [dataFeatureId]=\"paginatorDataFeatureId\"\n >\n </novo-data-table-pagination>\n <div class=\"novo-data-table-actions\" *ngIf=\"templates['customActions']\">\n <ng-container *ngTemplateOutlet=\"templates['customActions']\"></ng-container>\n </div>\n </header>\n <div class=\"novo-data-table-loading-mask\" *ngIf=\"dataSource?.loading || loading\" data-automation-id=\"novo-data-table-loading\">\n <novo-loading></novo-loading>\n </div>\n <div class=\"novo-data-table-outside-container\" [ngClass]=\"{ 'novo-data-table-outside-container-fixed': fixedHeader }\">\n <div class=\"novo-data-table-custom-filter\" *ngIf=\"customFilter\">\n <ng-container *ngTemplateOutlet=\"templates['customFilter']\"></ng-container>\n </div>\n <div\n #novoDataTableContainer\n class=\"novo-data-table-container\"\n [ngClass]=\"{ 'novo-data-table-container-fixed': fixedHeader }\"\n [class.empty-user-filtered]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [class.empty]=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <cdk-table\n *ngIf=\"columns?.length > 0 && columnsLoaded && dataSource\"\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByFn\"\n novoDataTableSortFilter\n [class.expandable]=\"expandable\"\n [class.empty]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [hidden]=\"dataSource?.totallyEmpty && !state.userFiltered\"\n >\n <ng-container cdkColumnDef=\"selection\">\n <novo-data-table-checkbox-header-cell *cdkHeaderCellDef></novo-data-table-checkbox-header-cell>\n <novo-data-table-checkbox-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\"></novo-data-table-checkbox-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"expand\">\n <novo-data-table-expand-header-cell *cdkHeaderCellDef></novo-data-table-expand-header-cell>\n <novo-data-table-expand-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\"></novo-data-table-expand-cell>\n </ng-container>\n <ng-container *ngFor=\"let column of columns; trackBy: trackColumnsBy\" [cdkColumnDef]=\"column.id\">\n <novo-data-table-header-cell\n *cdkHeaderCellDef\n [column]=\"column\"\n [filterTemplate]=\"templates['column-filter-' + column.id]\"\n [novo-data-table-cell-config]=\"column\"\n [resized]=\"resized\"\n [defaultSort]=\"defaultSort\"\n [allowMultipleFilters]=\"allowMultipleFilters\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-header-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-header-cell]=\"column?.type === 'action' && column?.action?.options\"\n [class.fixed-header]=\"fixedHeader\"\n ></novo-data-table-header-cell>\n <novo-data-table-cell\n *cdkCellDef=\"let row\"\n [resized]=\"resized\"\n [column]=\"column\"\n [row]=\"row\"\n [template]=\"columnToTemplate[column.id]\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-cell]=\"column?.type === 'action' && column?.action?.options\"\n ></novo-data-table-cell>\n </ng-container>\n <novo-data-table-header-row\n *cdkHeaderRowDef=\"displayedColumns\"\n [fixedHeader]=\"fixedHeader\"\n data-automation-id=\"novo-data-table-header-row\"\n ></novo-data-table-header-row>\n <novo-data-table-row\n *cdkRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{ active: row[rowIdentifier] == activeRowIdentifier }\"\n [novoDataTableExpand]=\"detailRowTemplate\"\n [row]=\"row\"\n [id]=\"name + '-' + row[rowIdentifier]\"\n [dataAutomationId]=\"row[rowIdentifier]\"\n ></novo-data-table-row>\n </cdk-table>\n <div class=\"novo-data-table-footer\" *ngIf=\"templates['footer']\">\n <ng-container *ngTemplateOutlet=\"templates['footer']; context: { $implicit: columns, data: dataSource.data }\"></ng-container>\n </div>\n <div\n class=\"novo-data-table-no-results-container\"\n [style.left.px]=\"scrollLeft\"\n *ngIf=\"dataSource?.currentlyEmpty && state.userFiltered && !dataSource?.loading && !loading && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['noResultsMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"novo-data-table-empty-container\"\n *ngIf=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['emptyMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <!-- DEFAULT CELL TEMPLATE -->\n <ng-template novoTemplate=\"textCellTemplate\" let-row let-col=\"col\">\n <span [style.width.px]=\"col?.width\" [style.min-width.px]=\"col?.width\" [style.max-width.px]=\"col?.width\">{{\n row[col.id] | dataTableInterpolate: col\n }}</span>\n </ng-template>\n <ng-template novoTemplate=\"dateCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"datetimeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"timeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"currencyCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableCurrencyRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"bigdecimalCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableBigDecimalRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"numberCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"percentCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col:true }}</span>\n </ng-template>\n <ng-template novoTemplate=\"linkCellTemplate\" let-row let-col=\"col\">\n <a\n [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [style.width.px]=\"col?.width\"\n [style.min-width.px]=\"col?.width\"\n [style.max-width.px]=\"col?.width\"\n >{{ row[col.id] | dataTableInterpolate: col }}</a\n >\n </ng-template>\n <ng-template novoTemplate=\"telCellTemplate\" let-row let-col=\"col\">\n <a href=\"tel:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"mailtoCellTemplate\" let-row let-col=\"col\">\n <a href=\"mailto:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"buttonCellTemplate\" let-row let-col=\"col\">\n <p [tooltip]=\"col?.action?.tooltip\" tooltipPosition=\"right\" [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\">\n <i\n class=\"bhi-{{ col?.action?.icon }} data-table-icon\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [class.disabled]=\"isDisabled(col, row)\"\n ></i>\n </p>\n </ng-template>\n <ng-template novoTemplate=\"dropdownCellTemplate\" let-row let-col=\"col\">\n <novo-dropdown parentScrollSelector=\".novo-data-table-container\" containerClass=\"novo-data-table-dropdown\">\n <button type=\"button\" theme=\"dialogue\" [icon]=\"col.action.icon\" inverse>{{ col.label }}</button>\n <list>\n <item\n *ngFor=\"let option of col?.action?.options\"\n (action)=\"option.handlers.click({ originalEvent: $event?.originalEvent, row: row })\"\n [disabled]=\"isDisabled(option, row)\"\n >\n <span [attr.data-automation-id]=\"option.label\">{{ option.label }}</span>\n </item>\n </list>\n </novo-dropdown>\n </ng-template>\n <ng-template novoTemplate=\"defaultNoResultsMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.noMatchingRecordsMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"defaultEmptyMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.emptyTableMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"expandedRow\"> You did not provide an \"expandedRow\" template! </ng-template>\n <ng-template #detailRowTemplate let-row>\n <div class=\"novo-data-table-detail-row\" [@expand] style=\"overflow: hidden\">\n <ng-container *ngTemplateOutlet=\"templates['expandedRow']; context: { $implicit: row }\"></ng-container>\n </div>\n </ng-template>\n <!-- CUSTOM CELLS PASSED IN -->\n <ng-content></ng-content>\n ",
8494
+ template: "\n <header\n *ngIf=\"(!(dataSource?.totallyEmpty && !state.userFiltered) && !loading) || forceShowHeader\"\n [class.empty]=\"hideGlobalSearch && !paginationOptions && !templates['customActions']\"\n >\n <ng-container *ngTemplateOutlet=\"templates['customHeader']\"></ng-container>\n <novo-search\n alwaysOpen=\"true\"\n (searchChanged)=\"onSearchChange($event)\"\n [(ngModel)]=\"state.globalSearch\"\n *ngIf=\"!hideGlobalSearch\"\n [placeholder]=\"searchOptions?.placeholder\"\n [hint]=\"searchOptions?.tooltip\"\n >\n </novo-search>\n <novo-data-table-pagination\n *ngIf=\"paginationOptions\"\n [theme]=\"paginationOptions.theme\"\n [length]=\"dataSource?.currentTotal\"\n [page]=\"paginationOptions.page\"\n [pageSize]=\"paginationOptions.pageSize\"\n [pageSizeOptions]=\"paginationOptions.pageSizeOptions\"\n [dataFeatureId]=\"paginatorDataFeatureId\"\n >\n </novo-data-table-pagination>\n <div class=\"novo-data-table-actions\" *ngIf=\"templates['customActions']\">\n <ng-container *ngTemplateOutlet=\"templates['customActions']\"></ng-container>\n </div>\n </header>\n <div class=\"novo-data-table-loading-mask\" *ngIf=\"dataSource?.loading || loading\" data-automation-id=\"novo-data-table-loading\">\n <novo-loading></novo-loading>\n </div>\n <div class=\"novo-data-table-outside-container\" [ngClass]=\"{ 'novo-data-table-outside-container-fixed': fixedHeader }\">\n <div class=\"novo-data-table-custom-filter\" *ngIf=\"customFilter\">\n <ng-container *ngTemplateOutlet=\"templates['customFilter']\"></ng-container>\n </div>\n <div\n #novoDataTableContainer\n class=\"novo-data-table-container\"\n [ngClass]=\"{ 'novo-data-table-container-fixed': fixedHeader }\"\n [class.empty-user-filtered]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [class.empty]=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <cdk-table\n *ngIf=\"columns?.length > 0 && columnsLoaded && dataSource\"\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByFn\"\n novoDataTableSortFilter\n [class.expandable]=\"expandable\"\n [class.empty]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [hidden]=\"dataSource?.totallyEmpty && !state.userFiltered\"\n >\n <ng-container cdkColumnDef=\"selection\">\n <novo-data-table-checkbox-header-cell *cdkHeaderCellDef [maxSelected]=\"maxSelected\"></novo-data-table-checkbox-header-cell>\n <novo-data-table-checkbox-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\" [maxSelected]=\"maxSelected\"></novo-data-table-checkbox-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"expand\">\n <novo-data-table-expand-header-cell *cdkHeaderCellDef></novo-data-table-expand-header-cell>\n <novo-data-table-expand-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\"></novo-data-table-expand-cell>\n </ng-container>\n <ng-container *ngFor=\"let column of columns; trackBy: trackColumnsBy\" [cdkColumnDef]=\"column.id\">\n <novo-data-table-header-cell\n *cdkHeaderCellDef\n [column]=\"column\"\n [filterTemplate]=\"templates['column-filter-' + column.id]\"\n [novo-data-table-cell-config]=\"column\"\n [resized]=\"resized\"\n [defaultSort]=\"defaultSort\"\n [allowMultipleFilters]=\"allowMultipleFilters\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-header-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-header-cell]=\"column?.type === 'action' && column?.action?.options\"\n [class.fixed-header]=\"fixedHeader\"\n ></novo-data-table-header-cell>\n <novo-data-table-cell\n *cdkCellDef=\"let row\"\n [resized]=\"resized\"\n [column]=\"column\"\n [row]=\"row\"\n [template]=\"columnToTemplate[column.id]\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-cell]=\"column?.type === 'action' && column?.action?.options\"\n ></novo-data-table-cell>\n </ng-container>\n <novo-data-table-header-row\n *cdkHeaderRowDef=\"displayedColumns\"\n [fixedHeader]=\"fixedHeader\"\n data-automation-id=\"novo-data-table-header-row\"\n ></novo-data-table-header-row>\n <novo-data-table-row\n *cdkRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{ active: row[rowIdentifier] == activeRowIdentifier }\"\n [novoDataTableExpand]=\"detailRowTemplate\"\n [row]=\"row\"\n [id]=\"name + '-' + row[rowIdentifier]\"\n [dataAutomationId]=\"row[rowIdentifier]\"\n ></novo-data-table-row>\n </cdk-table>\n <div class=\"novo-data-table-footer\" *ngIf=\"templates['footer']\">\n <ng-container *ngTemplateOutlet=\"templates['footer']; context: { $implicit: columns, data: dataSource.data }\"></ng-container>\n </div>\n <div\n class=\"novo-data-table-no-results-container\"\n [style.left.px]=\"scrollLeft\"\n *ngIf=\"dataSource?.currentlyEmpty && state.userFiltered && !dataSource?.loading && !loading && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['noResultsMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"novo-data-table-empty-container\"\n *ngIf=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['emptyMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <!-- DEFAULT CELL TEMPLATE -->\n <ng-template novoTemplate=\"textCellTemplate\" let-row let-col=\"col\">\n <span [style.width.px]=\"col?.width\" [style.min-width.px]=\"col?.width\" [style.max-width.px]=\"col?.width\">{{\n row[col.id] | dataTableInterpolate: col\n }}</span>\n </ng-template>\n <ng-template novoTemplate=\"dateCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"datetimeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"timeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"currencyCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableCurrencyRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"bigdecimalCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableBigDecimalRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"numberCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"percentCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col:true }}</span>\n </ng-template>\n <ng-template novoTemplate=\"linkCellTemplate\" let-row let-col=\"col\">\n <a\n [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [style.width.px]=\"col?.width\"\n [style.min-width.px]=\"col?.width\"\n [style.max-width.px]=\"col?.width\"\n >{{ row[col.id] | dataTableInterpolate: col }}</a\n >\n </ng-template>\n <ng-template novoTemplate=\"telCellTemplate\" let-row let-col=\"col\">\n <a href=\"tel:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"mailtoCellTemplate\" let-row let-col=\"col\">\n <a href=\"mailto:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"buttonCellTemplate\" let-row let-col=\"col\">\n <p [tooltip]=\"col?.action?.tooltip\" tooltipPosition=\"right\" [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\">\n <i\n class=\"bhi-{{ col?.action?.icon }} data-table-icon\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [class.disabled]=\"isDisabled(col, row)\"\n ></i>\n </p>\n </ng-template>\n <ng-template novoTemplate=\"dropdownCellTemplate\" let-row let-col=\"col\">\n <novo-dropdown parentScrollSelector=\".novo-data-table-container\" containerClass=\"novo-data-table-dropdown\">\n <button type=\"button\" theme=\"dialogue\" [icon]=\"col.action.icon\" inverse>{{ col.label }}</button>\n <list>\n <item\n *ngFor=\"let option of col?.action?.options\"\n (action)=\"option.handlers.click({ originalEvent: $event?.originalEvent, row: row })\"\n [disabled]=\"isDisabled(option, row)\"\n >\n <span [attr.data-automation-id]=\"option.label\">{{ option.label }}</span>\n </item>\n </list>\n </novo-dropdown>\n </ng-template>\n <ng-template novoTemplate=\"defaultNoResultsMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.noMatchingRecordsMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"defaultEmptyMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.emptyTableMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"expandedRow\"> You did not provide an \"expandedRow\" template! </ng-template>\n <ng-template #detailRowTemplate let-row>\n <div class=\"novo-data-table-detail-row\" [@expand] style=\"overflow: hidden\">\n <ng-container *ngTemplateOutlet=\"templates['expandedRow']; context: { $implicit: row }\"></ng-container>\n </div>\n </ng-template>\n <!-- CUSTOM CELLS PASSED IN -->\n <ng-content></ng-content>\n ",
8444
8495
  changeDetection: core.ChangeDetectionStrategy.OnPush,
8445
8496
  providers: [DataTableState]
8446
8497
  },] }
@@ -8460,6 +8511,7 @@
8460
8511
  displayedColumns: [{ type: core.Input }],
8461
8512
  paginationOptions: [{ type: core.Input }],
8462
8513
  searchOptions: [{ type: core.Input }],
8514
+ selectionOptions: [{ type: core.Input }],
8463
8515
  defaultSort: [{ type: core.Input }],
8464
8516
  name: [{ type: core.Input }],
8465
8517
  allowMultipleFilters: [{ type: core.Input }],
@@ -8469,6 +8521,7 @@
8469
8521
  templates: [{ type: core.Input }],
8470
8522
  fixedHeader: [{ type: core.Input }],
8471
8523
  paginatorDataFeatureId: [{ type: core.Input }],
8524
+ maxSelected: [{ type: core.Input }],
8472
8525
  dataTableService: [{ type: core.Input }],
8473
8526
  rows: [{ type: core.Input }],
8474
8527
  outsideFilter: [{ type: core.Input }],
@@ -28658,6 +28711,7 @@
28658
28711
  _this.dataTable = dataTable;
28659
28712
  _this.ref = ref;
28660
28713
  _this.role = 'gridcell';
28714
+ _this.maxSelected = undefined;
28661
28715
  _this.checked = false;
28662
28716
  renderer.setAttribute(elementRef.nativeElement, 'data-automation-id', "novo-checkbox-column-" + columnDef.cssClassFriendlyName);
28663
28717
  renderer.addClass(elementRef.nativeElement, "novo-checkbox-column-" + columnDef.cssClassFriendlyName);
@@ -28672,11 +28726,23 @@
28672
28726
  });
28673
28727
  return _this;
28674
28728
  }
28729
+ Object.defineProperty(NovoDataTableCheckboxCell.prototype, "isAtLimit", {
28730
+ get: function () {
28731
+ return this.maxSelected && this.dataTable.state.selectedRows.size >= this.maxSelected && !this.checked;
28732
+ },
28733
+ enumerable: false,
28734
+ configurable: true
28735
+ });
28675
28736
  NovoDataTableCheckboxCell.prototype.ngOnInit = function () {
28676
28737
  this.checked = this.dataTable.isSelected(this.row);
28677
28738
  };
28678
28739
  NovoDataTableCheckboxCell.prototype.onClick = function () {
28679
- this.dataTable.selectRow(this.row);
28740
+ if (!this.isAtLimit) {
28741
+ this.dataTable.selectRow(this.row);
28742
+ }
28743
+ };
28744
+ NovoDataTableCheckboxCell.prototype.getTooltip = function () {
28745
+ return (this.isAtLimit) ? 'More than ' + this.maxSelected + ' items are not able to be selected at one time' : '';
28680
28746
  };
28681
28747
  NovoDataTableCheckboxCell.prototype.ngOnDestroy = function () {
28682
28748
  if (this.selectionSubscription) {
@@ -28691,7 +28757,7 @@
28691
28757
  NovoDataTableCheckboxCell.decorators = [
28692
28758
  { type: core.Component, args: [{
28693
28759
  selector: 'novo-data-table-checkbox-cell',
28694
- template: "\n <div class=\"data-table-checkbox\" (click)=\"onClick()\">\n <input type=\"checkbox\" [checked]=\"checked\">\n <label>\n <i [class.bhi-checkbox-empty]=\"!checked\"\n [class.bhi-checkbox-filled]=\"checked\"></i>\n </label>\n </div>\n ",
28760
+ template: "\n <div class=\"data-table-checkbox\" (click)=\"onClick()\" [tooltip]=\"getTooltip()\" tooltipPosition=\"right\">\n <input type=\"checkbox\" [checked]=\"checked\">\n <label>\n <i [class.bhi-checkbox-disabled]=\"isAtLimit\"\n [class.bhi-checkbox-empty]=\"!checked\"\n [class.bhi-checkbox-filled]=\"checked\"></i>\n </label>\n </div>\n ",
28695
28761
  changeDetection: core.ChangeDetectionStrategy.OnPush
28696
28762
  },] }
28697
28763
  ];
@@ -28704,7 +28770,8 @@
28704
28770
  ]; };
28705
28771
  NovoDataTableCheckboxCell.propDecorators = {
28706
28772
  role: [{ type: core.HostBinding, args: ['attr.role',] }],
28707
- row: [{ type: core.Input }]
28773
+ row: [{ type: core.Input }],
28774
+ maxSelected: [{ type: core.Input }]
28708
28775
  };
28709
28776
 
28710
28777
  var NovoDataTableExpandCell = /** @class */ (function (_super) {
@@ -28850,13 +28917,210 @@
28850
28917
  role: [{ type: core.HostBinding, args: ['attr.role',] }]
28851
28918
  };
28852
28919
 
28920
+ // NG2
28921
+ var NovoToastElement = /** @class */ (function () {
28922
+ function NovoToastElement(sanitizer) {
28923
+ this.sanitizer = sanitizer;
28924
+ this.theme = 'danger';
28925
+ this.icon = 'caution';
28926
+ this.hasDialogue = false;
28927
+ this.isCloseable = false;
28928
+ this.closed = new core.EventEmitter();
28929
+ this.show = false;
28930
+ this.animate = false;
28931
+ this.parent = null;
28932
+ this.launched = false;
28933
+ }
28934
+ Object.defineProperty(NovoToastElement.prototype, "message", {
28935
+ set: function (m) {
28936
+ this._message = this.sanitizer.bypassSecurityTrustHtml(m);
28937
+ },
28938
+ enumerable: false,
28939
+ configurable: true
28940
+ });
28941
+ NovoToastElement.prototype.ngOnInit = function () {
28942
+ if (!this.launched) {
28943
+ // clear position and time
28944
+ this.position = null;
28945
+ this.time = null;
28946
+ // set icon and styling
28947
+ this.iconClass = "bhi-" + this.icon;
28948
+ this.alertTheme = this.theme + " toast-container embedded";
28949
+ if (this.hasDialogue) {
28950
+ this.alertTheme += ' dialogue';
28951
+ }
28952
+ }
28953
+ };
28954
+ NovoToastElement.prototype.ngOnChanges = function (changes) {
28955
+ // set icon and styling
28956
+ this.iconClass = "bhi-" + this.icon;
28957
+ this.alertTheme = this.theme + " toast-container embedded";
28958
+ if (this.hasDialogue) {
28959
+ this.alertTheme += ' dialogue';
28960
+ }
28961
+ };
28962
+ NovoToastElement.prototype.clickHandler = function (event) {
28963
+ if (!this.isCloseable) {
28964
+ if (event) {
28965
+ event.stopPropagation();
28966
+ event.preventDefault();
28967
+ }
28968
+ if (this.parent) {
28969
+ this.parent.hide(this);
28970
+ }
28971
+ else {
28972
+ this.closed.emit({ closed: true });
28973
+ }
28974
+ }
28975
+ };
28976
+ NovoToastElement.prototype.close = function (event) {
28977
+ if (event) {
28978
+ event.stopPropagation();
28979
+ event.preventDefault();
28980
+ }
28981
+ if (this.parent) {
28982
+ this.parent.hide(this);
28983
+ }
28984
+ else {
28985
+ this.closed.emit({ closed: true });
28986
+ }
28987
+ };
28988
+ return NovoToastElement;
28989
+ }());
28990
+ NovoToastElement.decorators = [
28991
+ { type: core.Component, args: [{
28992
+ selector: 'novo-toast',
28993
+ host: {
28994
+ '[class]': 'alertTheme',
28995
+ '[class.show]': 'show',
28996
+ '[class.animate]': 'animate',
28997
+ '[class.embedded]': 'embedded',
28998
+ '(click)': '!isCloseable && clickHandler($event)',
28999
+ },
29000
+ template: "\n <div class=\"toast-icon\">\n <i [ngClass]=\"iconClass\"></i>\n </div>\n <div class=\"toast-content\">\n <h5 *ngIf=\"title\">{{title}}</h5>\n <p *ngIf=\"_message\" [class.message-only]=\"!title\" [innerHtml]=\"_message\"></p>\n <div *ngIf=\"link\" class=\"link-generated\">\n <input type=\"text\" [value]=\"link\" onfocus=\"this.select();\"/>\n </div>\n <div class=\"dialogue\">\n <ng-content></ng-content>\n </div>\n </div>\n <div class=\"close-icon\" *ngIf=\"isCloseable\" (click)=\"close($event)\">\n <i class=\"bhi-times\"></i>\n </div>\n "
29001
+ },] }
29002
+ ];
29003
+ NovoToastElement.ctorParameters = function () { return [
29004
+ { type: platformBrowser.DomSanitizer }
29005
+ ]; };
29006
+ NovoToastElement.propDecorators = {
29007
+ theme: [{ type: core.Input }],
29008
+ icon: [{ type: core.Input }],
29009
+ title: [{ type: core.Input }],
29010
+ hasDialogue: [{ type: core.Input }],
29011
+ link: [{ type: core.Input }],
29012
+ isCloseable: [{ type: core.Input }],
29013
+ message: [{ type: core.Input }],
29014
+ closed: [{ type: core.Output }]
29015
+ };
29016
+
29017
+ // NG2
29018
+ var NovoToastService = /** @class */ (function () {
29019
+ function NovoToastService(componentUtils) {
29020
+ this.componentUtils = componentUtils;
29021
+ this.references = [];
29022
+ this.icons = { default: 'bell', success: 'check', info: 'info', warning: 'warning', danger: 'remove' };
29023
+ this.defaults = { hideDelay: 3500, position: 'growlTopRight', theme: 'default' };
29024
+ }
29025
+ Object.defineProperty(NovoToastService.prototype, "parentViewContainer", {
29026
+ set: function (view) {
29027
+ this._parentViewContainer = view;
29028
+ },
29029
+ enumerable: false,
29030
+ configurable: true
29031
+ });
29032
+ NovoToastService.prototype.alert = function (options, toastElement) {
29033
+ var _this = this;
29034
+ if (toastElement === void 0) { toastElement = NovoToastElement; }
29035
+ return new Promise(function (resolve) {
29036
+ if (!_this._parentViewContainer) {
29037
+ console.error('No parent view container specified for the ToastService. Set it inside your main application. \nthis.toastService.parentViewContainer = view (ViewContainerRef)');
29038
+ return;
29039
+ }
29040
+ var toast = _this.componentUtils.append(toastElement, _this._parentViewContainer);
29041
+ _this.references.push(toast);
29042
+ _this.handleAlert(toast.instance, options);
29043
+ resolve(toast);
29044
+ });
29045
+ };
29046
+ NovoToastService.prototype.isVisible = function (toast) {
29047
+ return toast.show;
29048
+ };
29049
+ NovoToastService.prototype.hide = function (toast) {
29050
+ var _this = this;
29051
+ toast.animate = false;
29052
+ setTimeout(function () {
29053
+ toast.show = false;
29054
+ var REF = _this.references.filter(function (x) { return x.instance === toast; })[0];
29055
+ if (REF) {
29056
+ _this.references.splice(_this.references.indexOf(REF), 1);
29057
+ REF.destroy();
29058
+ }
29059
+ }, 300);
29060
+ };
29061
+ NovoToastService.prototype.handleAlert = function (toast, options) {
29062
+ var _this = this;
29063
+ this.setToastOnSession(toast, options);
29064
+ setTimeout(function () {
29065
+ _this.show(toast);
29066
+ }, 20);
29067
+ if (!toast.isCloseable) {
29068
+ this.toastTimer(toast);
29069
+ }
29070
+ };
29071
+ NovoToastService.prototype.setToastOnSession = function (toast, opts) {
29072
+ var OPTIONS = typeof opts === 'object' ? opts : {};
29073
+ toast.parent = this;
29074
+ toast.title = OPTIONS.title || '';
29075
+ toast.message = OPTIONS.message || '';
29076
+ toast.hideDelay = OPTIONS.hideDelay || this.defaults.hideDelay;
29077
+ toast.link = OPTIONS.link || '';
29078
+ toast.isCloseable = OPTIONS.isCloseable || false;
29079
+ var CUSTOM_CLASS = OPTIONS.customClass || '';
29080
+ var ALERT_STYLE = OPTIONS.theme || this.defaults.theme;
29081
+ var ALERT_POSITION = OPTIONS.position || this.defaults.position;
29082
+ var ALERT_ICON = OPTIONS.icon || this.icons.default;
29083
+ toast.iconClass = "bhi-" + ALERT_ICON;
29084
+ toast.launched = true;
29085
+ toast.alertTheme = ALERT_STYLE + " " + ALERT_POSITION + " " + CUSTOM_CLASS + " toast-container launched";
29086
+ };
29087
+ NovoToastService.prototype.show = function (toast) {
29088
+ toast.show = true;
29089
+ setTimeout(addClass, 25);
29090
+ /**
29091
+ * Adds animate class to be called after a timeout
29092
+ **/
29093
+ function addClass() {
29094
+ toast.animate = true;
29095
+ }
29096
+ };
29097
+ NovoToastService.prototype.toastTimer = function (toast) {
29098
+ var _this = this;
29099
+ if (toast.hideDelay < 0) {
29100
+ return;
29101
+ }
29102
+ setTimeout(function () {
29103
+ _this.hide(toast);
29104
+ }, toast.hideDelay);
29105
+ };
29106
+ return NovoToastService;
29107
+ }());
29108
+ NovoToastService.decorators = [
29109
+ { type: core.Injectable }
29110
+ ];
29111
+ NovoToastService.ctorParameters = function () { return [
29112
+ { type: ComponentUtils }
29113
+ ]; };
29114
+
28853
29115
  var NovoDataTableCheckboxHeaderCell = /** @class */ (function (_super) {
28854
29116
  __extends(NovoDataTableCheckboxHeaderCell, _super);
28855
- function NovoDataTableCheckboxHeaderCell(columnDef, elementRef, renderer, dataTable, ref) {
29117
+ function NovoDataTableCheckboxHeaderCell(columnDef, elementRef, renderer, dataTable, ref, toaster) {
28856
29118
  var _this = _super.call(this, columnDef, elementRef) || this;
28857
29119
  _this.dataTable = dataTable;
28858
29120
  _this.ref = ref;
29121
+ _this.toaster = toaster;
28859
29122
  _this.role = 'columnheader';
29123
+ _this.maxSelected = undefined;
28860
29124
  _this.checked = false;
28861
29125
  renderer.setAttribute(elementRef.nativeElement, 'data-automation-id', "novo-checkbox-column-header-" + columnDef.cssClassFriendlyName);
28862
29126
  renderer.addClass(elementRef.nativeElement, "novo-checkbox-column-" + columnDef.cssClassFriendlyName);
@@ -28869,6 +29133,8 @@
28869
29133
  if (event.isPageSizeChange) {
28870
29134
  _this.checked = false;
28871
29135
  _this.dataTable.selectRows(false);
29136
+ _this.dataTable.state.checkRetainment('pageSize');
29137
+ _this.dataTable.state.reset(false, true);
28872
29138
  }
28873
29139
  else {
28874
29140
  _this.checked = _this.dataTable.allCurrentRowsSelected();
@@ -28881,6 +29147,13 @@
28881
29147
  });
28882
29148
  return _this;
28883
29149
  }
29150
+ Object.defineProperty(NovoDataTableCheckboxHeaderCell.prototype, "isAtLimit", {
29151
+ get: function () {
29152
+ return this.maxSelected && this.dataTable.state.selectedRows.size + this.dataTable.dataSource.data.length > this.maxSelected && !this.checked;
29153
+ },
29154
+ enumerable: false,
29155
+ configurable: true
29156
+ });
28884
29157
  NovoDataTableCheckboxHeaderCell.prototype.ngOnDestroy = function () {
28885
29158
  if (this.selectionSubscription) {
28886
29159
  this.selectionSubscription.unsubscribe();
@@ -28893,7 +29166,17 @@
28893
29166
  }
28894
29167
  };
28895
29168
  NovoDataTableCheckboxHeaderCell.prototype.onClick = function () {
28896
- this.dataTable.selectRows(!this.checked);
29169
+ if (this.isAtLimit) {
29170
+ this.toaster.alert({
29171
+ theme: 'danger',
29172
+ position: 'fixedTop',
29173
+ message: 'Error, more than 500 items are not able to be selected at one time',
29174
+ icon: 'caution',
29175
+ });
29176
+ }
29177
+ else {
29178
+ this.dataTable.selectRows(!this.checked);
29179
+ }
28897
29180
  };
28898
29181
  return NovoDataTableCheckboxHeaderCell;
28899
29182
  }(table.CdkHeaderCell));
@@ -28909,10 +29192,12 @@
28909
29192
  { type: core.ElementRef },
28910
29193
  { type: core.Renderer2 },
28911
29194
  { type: NovoDataTable },
28912
- { type: core.ChangeDetectorRef }
29195
+ { type: core.ChangeDetectorRef },
29196
+ { type: NovoToastService }
28913
29197
  ]; };
28914
29198
  NovoDataTableCheckboxHeaderCell.propDecorators = {
28915
- role: [{ type: core.HostBinding, args: ['attr.role',] }]
29199
+ role: [{ type: core.HostBinding, args: ['attr.role',] }],
29200
+ maxSelected: [{ type: core.Input }]
28916
29201
  };
28917
29202
 
28918
29203
  var NovoDataTableHeaderCell = /** @class */ (function (_super) {
@@ -29028,10 +29313,12 @@
29028
29313
  this.resetSubscription.unsubscribe();
29029
29314
  };
29030
29315
  NovoDataTablePagination.prototype.selectPage = function (page) {
29316
+ this.state.checkRetainment('page');
29031
29317
  this.page = page;
29032
29318
  this.emitPageEvent();
29033
29319
  };
29034
29320
  NovoDataTablePagination.prototype.nextPage = function () {
29321
+ this.state.checkRetainment('page');
29035
29322
  if (!this.hasNextPage()) {
29036
29323
  return;
29037
29324
  }
@@ -29040,6 +29327,7 @@
29040
29327
  this.emitPageEvent();
29041
29328
  };
29042
29329
  NovoDataTablePagination.prototype.previousPage = function () {
29330
+ this.state.checkRetainment('page');
29043
29331
  if (!this.hasPreviousPage()) {
29044
29332
  return;
29045
29333
  }
@@ -30307,7 +30595,7 @@
30307
30595
  '[class.novo-expansion-panel-spacing]': '_hasSpacing()',
30308
30596
  '[class.novo-expansion-panel-padding]': 'padding',
30309
30597
  },
30310
- styles: ["@-webkit-keyframes rotate{0%{transform:rotate(0deg)}75%{transform:rotate(200deg)}to{transform:rotate(180deg)}}@-webkit-keyframes half-rotate{0%{transform:rotate(45deg)}75%{transform:rotate(100deg)}to{transform:rotate(90deg)}}@-webkit-keyframes rotateBack{0%{transform:rotate(90deg)}to{transform:rotate(0deg)}}@-webkit-keyframes show{0%{opacity:0;transform:translateX(-100%)}75%{transform:translateX(0)}to{opacity:1;transform:translateX(0)}}@keyframes rotate{0%{transform:rotate(0deg)}75%{transform:rotate(200deg)}to{transform:rotate(180deg)}}@keyframes half-rotate{0%{transform:rotate(45deg)}75%{transform:rotate(100deg)}to{transform:rotate(90deg)}}@keyframes rotateBack{0%{transform:rotate(90deg)}to{transform:rotate(0deg)}}@keyframes show{0%{opacity:0;transform:translateX(-100%)}75%{transform:translateX(0)}to{opacity:1;transform:translateX(0)}}.novo-expansion-panel{background:#fff;color:#3d464d}.novo-action-row{border-top-color:#3d464d}.novo-expansion-panel:not(.novo-expanded) .novo-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.novo-expansion-panel:not(.novo-expanded) .novo-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused,.novo-expansion-panel:not(.novo-expanded) .novo-expansion-panel-header:not([aria-disabled=true]):hover{background:rgba(0,0,0,.04)}.novo-expansion-panel-header-title{color:#3d464d}.novo-expansion-indicator:after,.novo-expansion-panel-header-description{color:#999}.novo-expansion-panel-header[aria-disabled=true]{color:#999;pointer-events:none}.novo-expansion-panel-header[aria-disabled=true] .novo-expansion-panel-header-description,.novo-expansion-panel-header[aria-disabled=true] .novo-expansion-panel-header-title{color:inherit}.novo-expansion-panel.novo-expanded[theme=company]{border-top:3px solid #39d}.novo-expansion-panel.novo-expanded[theme=candidate]{border-top:3px solid #4b7}.novo-expansion-panel.novo-expanded[theme=navigation]{border-top:3px solid #2f384f}.novo-expansion-panel.novo-expanded[theme=lead]{border-top:3px solid #a69}.novo-expansion-panel.novo-expanded[theme=contact]{border-top:3px solid #fa4}.novo-expansion-panel.novo-expanded[theme=opportunity]{border-top:3px solid #625}.novo-expansion-panel.novo-expanded[theme=job]{border-top:3px solid #b56}.novo-expansion-panel.novo-expanded[theme=earnCode],.novo-expansion-panel.novo-expanded[theme=jobCode]{border-top:3px solid #696d79}.novo-expansion-panel.novo-expanded[theme=sendout]{border-top:3px solid #747884}.novo-expansion-panel.novo-expanded[theme=placement]{border-top:3px solid #0b344f}.novo-expansion-panel.novo-expanded[theme=corporateuser],.novo-expansion-panel.novo-expanded[theme=credential],.novo-expansion-panel.novo-expanded[theme=distributionList],.novo-expansion-panel.novo-expanded[theme=task],.novo-expansion-panel.novo-expanded[theme=user]{border-top:3px solid #4f5361}.novo-expansion-panel.novo-expanded[theme=aqua]{border-top:3px solid #3bafda}.novo-expansion-panel.novo-expanded[theme=ocean]{border-top:3px solid #4a89dc}.novo-expansion-panel.novo-expanded[theme=mint]{border-top:3px solid #37bc9b}.novo-expansion-panel.novo-expanded[theme=grass]{border-top:3px solid #8cc152}.novo-expansion-panel.novo-expanded[theme=sunflower]{border-top:3px solid #f6b042}.novo-expansion-panel.novo-expanded[theme=bittersweet]{border-top:3px solid #eb6845}.novo-expansion-panel.novo-expanded[theme=grapefruit]{border-top:3px solid #da4453}.novo-expansion-panel.novo-expanded[theme=carnation]{border-top:3px solid #d770ad}.novo-expansion-panel.novo-expanded[theme=lavender]{border-top:3px solid #967adc}.novo-expansion-panel.novo-expanded[theme=positive]{border-top:3px solid #4a89dc}.novo-expansion-panel.novo-expanded[theme=success]{border-top:3px solid #8cc152}.novo-expansion-panel.novo-expanded[theme=negative]{border-top:3px solid #da4453}.novo-expansion-panel.novo-expanded[theme=warning]{border-top:3px solid #f6b042}.novo-expansion-panel.novo-expanded[theme=black]{border-top:3px solid #000}.novo-expansion-panel.novo-expanded[theme=dark]{border-top:3px solid #3d464d}.novo-expansion-panel.novo-expanded[theme=pulse]{border-top:3px solid #3bafda}.novo-expansion-panel.novo-expanded[theme=neutral]{border-top:3px solid #4f5361}.novo-expansion-panel.novo-expanded[theme=navy]{border-top:3px solid #0d2d42}.novo-expansion-panel.novo-expanded[theme=contract]{border-top:3px solid #454ea0}.novo-expansion-panel.novo-expanded[theme=mountain]{border-top:3px solid #9678b6}.novo-expansion-panel.novo-expanded[theme=billableCharge],.novo-expansion-panel.novo-expanded[theme=invoiceStatement],.novo-expansion-panel.novo-expanded[theme=payableCharge]{border-top:3px solid #696d79}.novo-expansion-panel.novo-expanded[theme=submission]{border-top:3px solid #a9adbb}.novo-expansion-panel.novo-expanded[theme=note]{border-top:3px solid #747884}.novo-expansion-panel.novo-expanded[theme=ash]{border-top:3px solid #a0a0a0}.novo-expansion-panel.novo-expanded[theme=slate]{border-top:3px solid #707070}.novo-expansion-panel.novo-expanded[theme=charcoal]{border-top:3px solid #282828}.novo-expansion-panel.novo-expanded[theme=background]{border-top:3px solid #f4f4f4}.novo-expansion-panel.novo-expanded[theme=background-dark]{border-top:3px solid #e2e2e2}.novo-expansion-panel.novo-expanded[theme=white]{border-top:3px solid #fff}.novo-expansion-panel.novo-expanded[theme=grey]{border-top:3px solid #999}.novo-expansion-panel.novo-expanded[theme=off-white]{border-top:3px solid #f4f4f4}.novo-expansion-panel.novo-expanded[theme=light]{border-top:3px solid #d9dadc}.novo-expansion-panel.novo-expanded[theme=empty]{border-top:3px solid #cccdcc}.novo-expansion-panel.novo-expanded[theme=sand]{border-top:3px solid #f4f4f4}.novo-expansion-panel.novo-expanded[theme=silver]{border-top:3px solid #e2e2e2}.novo-expansion-panel.novo-expanded[theme=stone]{border-top:3px solid #bebebe}.novo-expansion-panel{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-sizing:content-box;display:block;margin:0 16px;transition:margin 225ms ease-in-out}.novo-expansion-panel.novo-expanded{margin:16px 4px}.novo-expansion-panel.novo-expanded:first-child{margin-top:0}.novo-expansion-panel.novo-expanded:last-child{margin-bottom:0}.novo-expansion-panel-content{overflow:hidden}.novo-expansion-panel-content.novo-expanded{overflow:visible}.novo-expansion-panel-padding .novo-expansion-panel-body{padding:0 24px 16px}.novo-accordion .novo-expansion-panel-spacing:first-child{margin-top:0}.novo-accordion .novo-expansion-panel-spacing:last-child{margin-bottom:0}.novo-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.novo-action-row button.novo-button{margin-left:8px}[dir=rtl] .novo-action-row button.novo-button{margin-left:0;margin-right:8px}"]
30598
+ styles: ["@-webkit-keyframes rotate{0%{transform:rotate(0deg)}75%{transform:rotate(200deg)}to{transform:rotate(180deg)}}@-webkit-keyframes half-rotate{0%{transform:rotate(45deg)}75%{transform:rotate(100deg)}to{transform:rotate(90deg)}}@-webkit-keyframes rotateBack{0%{transform:rotate(90deg)}to{transform:rotate(0deg)}}@-webkit-keyframes show{0%{opacity:0;transform:translateX(-100%)}75%{transform:translateX(0)}to{opacity:1;transform:translateX(0)}}@keyframes rotate{0%{transform:rotate(0deg)}75%{transform:rotate(200deg)}to{transform:rotate(180deg)}}@keyframes half-rotate{0%{transform:rotate(45deg)}75%{transform:rotate(100deg)}to{transform:rotate(90deg)}}@keyframes rotateBack{0%{transform:rotate(90deg)}to{transform:rotate(0deg)}}@keyframes show{0%{opacity:0;transform:translateX(-100%)}75%{transform:translateX(0)}to{opacity:1;transform:translateX(0)}}.novo-expansion-panel{background:#fff;color:#3d464d}.novo-action-row{border-top-color:#3d464d}.novo-expansion-panel:not(.novo-expanded) .novo-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.novo-expansion-panel:not(.novo-expanded) .novo-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused,.novo-expansion-panel:not(.novo-expanded) .novo-expansion-panel-header:not([aria-disabled=true]):hover{background:rgba(0,0,0,.04)}.novo-expansion-panel-header-title{color:#3d464d}.novo-expansion-indicator:after,.novo-expansion-panel-header-description{color:#999}.novo-expansion-panel-header[aria-disabled=true]{color:#999;pointer-events:none}.novo-expansion-panel-header[aria-disabled=true] .novo-expansion-panel-header-description,.novo-expansion-panel-header[aria-disabled=true] .novo-expansion-panel-header-title{color:inherit}.novo-expansion-panel.novo-expanded[theme=company]{border-top:3px solid #39d}.novo-expansion-panel.novo-expanded[theme=candidate]{border-top:3px solid #4b7}.novo-expansion-panel.novo-expanded[theme=navigation]{border-top:3px solid #2f384f}.novo-expansion-panel.novo-expanded[theme=lead]{border-top:3px solid #a69}.novo-expansion-panel.novo-expanded[theme=contact]{border-top:3px solid #fa4}.novo-expansion-panel.novo-expanded[theme=opportunity]{border-top:3px solid #625}.novo-expansion-panel.novo-expanded[theme=job]{border-top:3px solid #b56}.novo-expansion-panel.novo-expanded[theme=earnCode],.novo-expansion-panel.novo-expanded[theme=jobCode]{border-top:3px solid #696d79}.novo-expansion-panel.novo-expanded[theme=sendout]{border-top:3px solid #747884}.novo-expansion-panel.novo-expanded[theme=placement]{border-top:3px solid #0b344f}.novo-expansion-panel.novo-expanded[theme=corporateuser],.novo-expansion-panel.novo-expanded[theme=credential],.novo-expansion-panel.novo-expanded[theme=distributionList],.novo-expansion-panel.novo-expanded[theme=task],.novo-expansion-panel.novo-expanded[theme=user]{border-top:3px solid #4f5361}.novo-expansion-panel.novo-expanded[theme=aqua]{border-top:3px solid #3bafda}.novo-expansion-panel.novo-expanded[theme=ocean]{border-top:3px solid #4a89dc}.novo-expansion-panel.novo-expanded[theme=mint]{border-top:3px solid #37bc9b}.novo-expansion-panel.novo-expanded[theme=grass]{border-top:3px solid #8cc152}.novo-expansion-panel.novo-expanded[theme=sunflower]{border-top:3px solid #f6b042}.novo-expansion-panel.novo-expanded[theme=bittersweet]{border-top:3px solid #eb6845}.novo-expansion-panel.novo-expanded[theme=grapefruit]{border-top:3px solid #da4453}.novo-expansion-panel.novo-expanded[theme=carnation]{border-top:3px solid #d770ad}.novo-expansion-panel.novo-expanded[theme=lavender]{border-top:3px solid #967adc}.novo-expansion-panel.novo-expanded[theme=positive]{border-top:3px solid #4a89dc}.novo-expansion-panel.novo-expanded[theme=success]{border-top:3px solid #8cc152}.novo-expansion-panel.novo-expanded[theme=negative]{border-top:3px solid #da4453}.novo-expansion-panel.novo-expanded[theme=warning]{border-top:3px solid #f6b042}.novo-expansion-panel.novo-expanded[theme=black]{border-top:3px solid #000}.novo-expansion-panel.novo-expanded[theme=dark]{border-top:3px solid #3d464d}.novo-expansion-panel.novo-expanded[theme=pulse]{border-top:3px solid #3bafda}.novo-expansion-panel.novo-expanded[theme=neutral]{border-top:3px solid #4f5361}.novo-expansion-panel.novo-expanded[theme=navy]{border-top:3px solid #0d2d42}.novo-expansion-panel.novo-expanded[theme=contract]{border-top:3px solid #454ea0}.novo-expansion-panel.novo-expanded[theme=mountain]{border-top:3px solid #9678b6}.novo-expansion-panel.novo-expanded[theme=billableCharge],.novo-expansion-panel.novo-expanded[theme=invoiceStatement],.novo-expansion-panel.novo-expanded[theme=payableCharge]{border-top:3px solid #696d79}.novo-expansion-panel.novo-expanded[theme=submission]{border-top:3px solid #a9adbb}.novo-expansion-panel.novo-expanded[theme=note]{border-top:3px solid #747884}.novo-expansion-panel.novo-expanded[theme=ash]{border-top:3px solid #a0a0a0}.novo-expansion-panel.novo-expanded[theme=slate]{border-top:3px solid #707070}.novo-expansion-panel.novo-expanded[theme=charcoal]{border-top:3px solid #282828}.novo-expansion-panel.novo-expanded[theme=jobShift]{border-top:3px solid #454ea0}.novo-expansion-panel.novo-expanded[theme=background]{border-top:3px solid #f4f4f4}.novo-expansion-panel.novo-expanded[theme=background-dark]{border-top:3px solid #e2e2e2}.novo-expansion-panel.novo-expanded[theme=white]{border-top:3px solid #fff}.novo-expansion-panel.novo-expanded[theme=grey]{border-top:3px solid #999}.novo-expansion-panel.novo-expanded[theme=off-white]{border-top:3px solid #f4f4f4}.novo-expansion-panel.novo-expanded[theme=light]{border-top:3px solid #d9dadc}.novo-expansion-panel.novo-expanded[theme=empty]{border-top:3px solid #cccdcc}.novo-expansion-panel.novo-expanded[theme=sand]{border-top:3px solid #f4f4f4}.novo-expansion-panel.novo-expanded[theme=silver]{border-top:3px solid #e2e2e2}.novo-expansion-panel.novo-expanded[theme=stone]{border-top:3px solid #bebebe}.novo-expansion-panel{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-sizing:content-box;display:block;margin:0 16px;transition:margin 225ms ease-in-out}.novo-expansion-panel.novo-expanded{margin:16px 4px}.novo-expansion-panel.novo-expanded:first-child{margin-top:0}.novo-expansion-panel.novo-expanded:last-child{margin-bottom:0}.novo-expansion-panel-content{overflow:hidden}.novo-expansion-panel-content.novo-expanded{overflow:visible}.novo-expansion-panel-padding .novo-expansion-panel-body{padding:0 24px 16px}.novo-accordion .novo-expansion-panel-spacing:first-child{margin-top:0}.novo-accordion .novo-expansion-panel-spacing:last-child{margin-bottom:0}.novo-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.novo-action-row button.novo-button{margin-left:8px}[dir=rtl] .novo-action-row button.novo-button{margin-left:0;margin-right:8px}"]
30311
30599
  },] }
30312
30600
  ];
30313
30601
  NovoExpansionPanel.ctorParameters = function () { return [
@@ -31907,7 +32195,7 @@
31907
32195
  var currentValue = null;
31908
32196
  var currentWorkflowOption = 'initial';
31909
32197
  if (fieldData === null || fieldData === void 0 ? void 0 : fieldData.id) {
31910
- currentValue = { value: fieldData.id, label: fieldData.label ? fieldData.label : fieldData.id };
32198
+ currentValue = Object.assign(Object.assign({}, fieldData), { value: fieldData.id, label: fieldData.label || fieldData.id });
31911
32199
  currentWorkflowOption = fieldData.id;
31912
32200
  }
31913
32201
  var updateWorkflowOptions = workflowOptions[currentWorkflowOption] || [];
@@ -32230,201 +32518,6 @@
32230
32518
  { type: ComponentUtils }
32231
32519
  ]; };
32232
32520
 
32233
- // NG2
32234
- var NovoToastElement = /** @class */ (function () {
32235
- function NovoToastElement(sanitizer) {
32236
- this.sanitizer = sanitizer;
32237
- this.theme = 'danger';
32238
- this.icon = 'caution';
32239
- this.hasDialogue = false;
32240
- this.isCloseable = false;
32241
- this.closed = new core.EventEmitter();
32242
- this.show = false;
32243
- this.animate = false;
32244
- this.parent = null;
32245
- this.launched = false;
32246
- }
32247
- Object.defineProperty(NovoToastElement.prototype, "message", {
32248
- set: function (m) {
32249
- this._message = this.sanitizer.bypassSecurityTrustHtml(m);
32250
- },
32251
- enumerable: false,
32252
- configurable: true
32253
- });
32254
- NovoToastElement.prototype.ngOnInit = function () {
32255
- if (!this.launched) {
32256
- // clear position and time
32257
- this.position = null;
32258
- this.time = null;
32259
- // set icon and styling
32260
- this.iconClass = "bhi-" + this.icon;
32261
- this.alertTheme = this.theme + " toast-container embedded";
32262
- if (this.hasDialogue) {
32263
- this.alertTheme += ' dialogue';
32264
- }
32265
- }
32266
- };
32267
- NovoToastElement.prototype.ngOnChanges = function (changes) {
32268
- // set icon and styling
32269
- this.iconClass = "bhi-" + this.icon;
32270
- this.alertTheme = this.theme + " toast-container embedded";
32271
- if (this.hasDialogue) {
32272
- this.alertTheme += ' dialogue';
32273
- }
32274
- };
32275
- NovoToastElement.prototype.clickHandler = function (event) {
32276
- if (!this.isCloseable) {
32277
- if (event) {
32278
- event.stopPropagation();
32279
- event.preventDefault();
32280
- }
32281
- if (this.parent) {
32282
- this.parent.hide(this);
32283
- }
32284
- else {
32285
- this.closed.emit({ closed: true });
32286
- }
32287
- }
32288
- };
32289
- NovoToastElement.prototype.close = function (event) {
32290
- if (event) {
32291
- event.stopPropagation();
32292
- event.preventDefault();
32293
- }
32294
- if (this.parent) {
32295
- this.parent.hide(this);
32296
- }
32297
- else {
32298
- this.closed.emit({ closed: true });
32299
- }
32300
- };
32301
- return NovoToastElement;
32302
- }());
32303
- NovoToastElement.decorators = [
32304
- { type: core.Component, args: [{
32305
- selector: 'novo-toast',
32306
- host: {
32307
- '[class]': 'alertTheme',
32308
- '[class.show]': 'show',
32309
- '[class.animate]': 'animate',
32310
- '[class.embedded]': 'embedded',
32311
- '(click)': '!isCloseable && clickHandler($event)',
32312
- },
32313
- template: "\n <div class=\"toast-icon\">\n <i [ngClass]=\"iconClass\"></i>\n </div>\n <div class=\"toast-content\">\n <h5 *ngIf=\"title\">{{title}}</h5>\n <p *ngIf=\"_message\" [class.message-only]=\"!title\" [innerHtml]=\"_message\"></p>\n <div *ngIf=\"link\" class=\"link-generated\">\n <input type=\"text\" [value]=\"link\" onfocus=\"this.select();\"/>\n </div>\n <div class=\"dialogue\">\n <ng-content></ng-content>\n </div>\n </div>\n <div class=\"close-icon\" *ngIf=\"isCloseable\" (click)=\"close($event)\">\n <i class=\"bhi-times\"></i>\n </div>\n "
32314
- },] }
32315
- ];
32316
- NovoToastElement.ctorParameters = function () { return [
32317
- { type: platformBrowser.DomSanitizer }
32318
- ]; };
32319
- NovoToastElement.propDecorators = {
32320
- theme: [{ type: core.Input }],
32321
- icon: [{ type: core.Input }],
32322
- title: [{ type: core.Input }],
32323
- hasDialogue: [{ type: core.Input }],
32324
- link: [{ type: core.Input }],
32325
- isCloseable: [{ type: core.Input }],
32326
- message: [{ type: core.Input }],
32327
- closed: [{ type: core.Output }]
32328
- };
32329
-
32330
- // NG2
32331
- var NovoToastService = /** @class */ (function () {
32332
- function NovoToastService(componentUtils) {
32333
- this.componentUtils = componentUtils;
32334
- this.references = [];
32335
- this.icons = { default: 'bell', success: 'check', info: 'info', warning: 'warning', danger: 'remove' };
32336
- this.defaults = { hideDelay: 3500, position: 'growlTopRight', theme: 'default' };
32337
- }
32338
- Object.defineProperty(NovoToastService.prototype, "parentViewContainer", {
32339
- set: function (view) {
32340
- this._parentViewContainer = view;
32341
- },
32342
- enumerable: false,
32343
- configurable: true
32344
- });
32345
- NovoToastService.prototype.alert = function (options, toastElement) {
32346
- var _this = this;
32347
- if (toastElement === void 0) { toastElement = NovoToastElement; }
32348
- return new Promise(function (resolve) {
32349
- if (!_this._parentViewContainer) {
32350
- console.error('No parent view container specified for the ToastService. Set it inside your main application. \nthis.toastService.parentViewContainer = view (ViewContainerRef)');
32351
- return;
32352
- }
32353
- var toast = _this.componentUtils.append(toastElement, _this._parentViewContainer);
32354
- _this.references.push(toast);
32355
- _this.handleAlert(toast.instance, options);
32356
- resolve(toast);
32357
- });
32358
- };
32359
- NovoToastService.prototype.isVisible = function (toast) {
32360
- return toast.show;
32361
- };
32362
- NovoToastService.prototype.hide = function (toast) {
32363
- var _this = this;
32364
- toast.animate = false;
32365
- setTimeout(function () {
32366
- toast.show = false;
32367
- var REF = _this.references.filter(function (x) { return x.instance === toast; })[0];
32368
- if (REF) {
32369
- _this.references.splice(_this.references.indexOf(REF), 1);
32370
- REF.destroy();
32371
- }
32372
- }, 300);
32373
- };
32374
- NovoToastService.prototype.handleAlert = function (toast, options) {
32375
- var _this = this;
32376
- this.setToastOnSession(toast, options);
32377
- setTimeout(function () {
32378
- _this.show(toast);
32379
- }, 20);
32380
- if (!toast.isCloseable) {
32381
- this.toastTimer(toast);
32382
- }
32383
- };
32384
- NovoToastService.prototype.setToastOnSession = function (toast, opts) {
32385
- var OPTIONS = typeof opts === 'object' ? opts : {};
32386
- toast.parent = this;
32387
- toast.title = OPTIONS.title || '';
32388
- toast.message = OPTIONS.message || '';
32389
- toast.hideDelay = OPTIONS.hideDelay || this.defaults.hideDelay;
32390
- toast.link = OPTIONS.link || '';
32391
- toast.isCloseable = OPTIONS.isCloseable || false;
32392
- var CUSTOM_CLASS = OPTIONS.customClass || '';
32393
- var ALERT_STYLE = OPTIONS.theme || this.defaults.theme;
32394
- var ALERT_POSITION = OPTIONS.position || this.defaults.position;
32395
- var ALERT_ICON = OPTIONS.icon || this.icons.default;
32396
- toast.iconClass = "bhi-" + ALERT_ICON;
32397
- toast.launched = true;
32398
- toast.alertTheme = ALERT_STYLE + " " + ALERT_POSITION + " " + CUSTOM_CLASS + " toast-container launched";
32399
- };
32400
- NovoToastService.prototype.show = function (toast) {
32401
- toast.show = true;
32402
- setTimeout(addClass, 25);
32403
- /**
32404
- * Adds animate class to be called after a timeout
32405
- **/
32406
- function addClass() {
32407
- toast.animate = true;
32408
- }
32409
- };
32410
- NovoToastService.prototype.toastTimer = function (toast) {
32411
- var _this = this;
32412
- if (toast.hideDelay < 0) {
32413
- return;
32414
- }
32415
- setTimeout(function () {
32416
- _this.hide(toast);
32417
- }, toast.hideDelay);
32418
- };
32419
- return NovoToastService;
32420
- }());
32421
- NovoToastService.decorators = [
32422
- { type: core.Injectable }
32423
- ];
32424
- NovoToastService.ctorParameters = function () { return [
32425
- { type: ComponentUtils }
32426
- ]; };
32427
-
32428
32521
  // NG2
32429
32522
  var ControlConfirmModal = /** @class */ (function () {
32430
32523
  function ControlConfirmModal(modalRef, params, labels) {
@@ -42228,6 +42321,7 @@
42228
42321
  AppBridgeHandler[AppBridgeHandler["UPDATE"] = 7] = "UPDATE";
42229
42322
  AppBridgeHandler[AppBridgeHandler["REQUEST_DATA"] = 8] = "REQUEST_DATA";
42230
42323
  AppBridgeHandler[AppBridgeHandler["CALLBACK"] = 9] = "CALLBACK";
42324
+ AppBridgeHandler[AppBridgeHandler["PING"] = 10] = "PING";
42231
42325
  })(exports.AppBridgeHandler || (exports.AppBridgeHandler = {}));
42232
42326
  var HTTP_VERBS = {
42233
42327
  GET: 'get',
@@ -42242,6 +42336,7 @@
42242
42336
  CLOSE: 'close',
42243
42337
  REFRESH: 'refresh',
42244
42338
  PIN: 'pin',
42339
+ PING: 'ping',
42245
42340
  UPDATE: 'update',
42246
42341
  HTTP_GET: 'httpGET',
42247
42342
  HTTP_POST: 'httpPOST',
@@ -42358,6 +42453,13 @@
42358
42453
  return { success: success };
42359
42454
  });
42360
42455
  });
42456
+ // PING
42457
+ postRobot.on(MESSAGE_TYPES.PING, function (event) {
42458
+ _this._trace(MESSAGE_TYPES.PING, event);
42459
+ return _this.httpGET('ping').then(function (result) {
42460
+ return { data: result.data, error: result.error };
42461
+ });
42462
+ });
42361
42463
  // REQUEST_DATA
42362
42464
  postRobot.on(MESSAGE_TYPES.REQUEST_DATA, function (event) {
42363
42465
  _this._trace(MESSAGE_TYPES.REQUEST_DATA, event);
@@ -42600,6 +42702,23 @@
42600
42702
  }
42601
42703
  });
42602
42704
  };
42705
+ AppBridge.prototype.ping = function () {
42706
+ var _this = this;
42707
+ return new Promise(function (resolve, reject) {
42708
+ if (_this._handlers[exports.AppBridgeHandler.PING]) {
42709
+ _this._handlers[exports.AppBridgeHandler.PING]({}, function (data, error) {
42710
+ resolve({ data: data, error: error });
42711
+ });
42712
+ }
42713
+ else {
42714
+ postRobot.sendToParent(MESSAGE_TYPES.PING, {}).then(function (event) {
42715
+ resolve({ data: event.data.data, error: event.data.error });
42716
+ }).catch(function (err) {
42717
+ reject(null);
42718
+ });
42719
+ }
42720
+ });
42721
+ };
42603
42722
  /**
42604
42723
  * Fires or responds to a pin event
42605
42724
  */
@@ -42875,12 +42994,25 @@
42875
42994
  if (this._registeredFrames.length > 0) {
42876
42995
  this._registeredFrames.forEach(function (frame) {
42877
42996
  postRobot.send(frame.source, MESSAGE_TYPES.CUSTOM_EVENT, {
42997
+ event: event,
42878
42998
  eventType: event,
42879
42999
  data: data,
42880
43000
  });
42881
43001
  });
42882
43002
  }
42883
43003
  };
43004
+ /**
43005
+ * Fires a custom event to specified frames
43006
+ * @param source Window - specific iframe contentWindow
43007
+ * @param event string - event name to fire
43008
+ * @param data any - data to be sent along with the event
43009
+ */
43010
+ AppBridge.prototype.fireEventToChild = function (source, event, data) {
43011
+ if (source instanceof HTMLIFrameElement) {
43012
+ source = source.contentWindow;
43013
+ }
43014
+ postRobot.send(source, MESSAGE_TYPES.CUSTOM_EVENT, { event: event, data: data });
43015
+ };
42884
43016
  /**
42885
43017
  * Adds an event listener to a custom event
42886
43018
  * @param event string - event name to listen to