novo-elements 5.9.0 → 5.12.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 (30) hide show
  1. package/bundles/novo-elements.umd.js +73 -34
  2. package/bundles/novo-elements.umd.js.map +1 -1
  3. package/bundles/novo-elements.umd.min.js +1 -1
  4. package/bundles/novo-elements.umd.min.js.map +1 -1
  5. package/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.d.ts +2 -0
  6. package/elements/data-table/data-table.component.d.ts +5 -0
  7. package/elements/data-table/data-table.component.scss +2 -1
  8. package/elements/date-picker/DatePicker.d.ts +1 -0
  9. package/elements/date-picker/DatePickerInput.d.ts +1 -0
  10. package/elements/date-time-picker/DateTimePicker.d.ts +1 -0
  11. package/elements/date-time-picker/DateTimePickerInput.d.ts +1 -0
  12. package/elements/form/Form.scss +2 -1
  13. package/elements/form/NovoFormControl.d.ts +1 -0
  14. package/elements/form/controls/BaseControl.d.ts +1 -0
  15. package/esm2015/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.js +27 -2
  16. package/esm2015/elements/data-table/data-table.component.js +10 -2
  17. package/esm2015/elements/date-picker/DatePicker.js +3 -2
  18. package/esm2015/elements/date-picker/DatePickerInput.js +3 -1
  19. package/esm2015/elements/date-time-picker/DateTimePicker.js +3 -1
  20. package/esm2015/elements/date-time-picker/DateTimePickerInput.js +3 -1
  21. package/esm2015/elements/form/ControlTemplates.js +2 -2
  22. package/esm2015/elements/form/NovoFormControl.js +2 -1
  23. package/esm2015/elements/form/controls/BaseControl.js +2 -1
  24. package/esm2015/elements/form/extras/address/Address.js +5 -1
  25. package/esm2015/utils/form-utils/FormUtils.js +17 -17
  26. package/fesm2015/novo-elements.js +66 -20
  27. package/fesm2015/novo-elements.js.map +1 -1
  28. package/novo-elements.metadata.json +1 -1
  29. package/package.json +1 -1
  30. package/utils/form-utils/FormUtils.d.ts +3 -3
@@ -8030,8 +8030,10 @@
8030
8030
  this.templates = {};
8031
8031
  this.fixedHeader = false;
8032
8032
  this.maxSelected = undefined;
8033
+ this.canSelectAll = false;
8033
8034
  this._hideGlobalSearch = true;
8034
8035
  this.preferencesChanged = new core.EventEmitter();
8036
+ this.allSelected = new core.EventEmitter();
8035
8037
  this.loading = true;
8036
8038
  this.columnToTemplate = {};
8037
8039
  this.columnsLoaded = false;
@@ -8371,6 +8373,10 @@
8371
8373
  this.state.onSelectionChange();
8372
8374
  };
8373
8375
  NovoDataTable.prototype.allCurrentRowsSelected = function () {
8376
+ var _a, _b;
8377
+ if (!((_b = (_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.length)) {
8378
+ return false;
8379
+ }
8374
8380
  for (var i = 0; i < (this.dataSource.data || []).length; i++) {
8375
8381
  if (!this.isSelected((this.dataSource.data || [])[i])) {
8376
8382
  return false;
@@ -8458,11 +8464,11 @@
8458
8464
  this.ref.markForCheck();
8459
8465
  };
8460
8466
  NovoDataTable.prototype.performInteractions = function (event) {
8461
- var e_1, _b;
8467
+ var e_1, _c;
8462
8468
  if (this.listInteractions) {
8463
8469
  try {
8464
- for (var _c = __values(this.columns), _d = _c.next(); !_d.done; _d = _c.next()) {
8465
- var column = _d.value;
8470
+ for (var _d = __values(this.columns), _e = _d.next(); !_e.done; _e = _d.next()) {
8471
+ var column = _e.value;
8466
8472
  var allListColumnInteractions = this.listInteractions[column.id];
8467
8473
  var listColumnInteraction = allListColumnInteractions && allListColumnInteractions.find(function (int) { return int.event.includes(event); });
8468
8474
  if (listColumnInteraction) {
@@ -8473,7 +8479,7 @@
8473
8479
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
8474
8480
  finally {
8475
8481
  try {
8476
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
8482
+ if (_e && !_e.done && (_c = _d.return)) _c.call(_d);
8477
8483
  }
8478
8484
  finally { if (e_1) throw e_1.error; }
8479
8485
  }
@@ -8491,7 +8497,7 @@
8491
8497
  animations.transition('void <=> *', animations.animate('70ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
8492
8498
  ]),
8493
8499
  ],
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 ",
8500
+ 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\" [canSelectAll]=\"canSelectAll\"></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 ",
8495
8501
  changeDetection: core.ChangeDetectionStrategy.OnPush,
8496
8502
  providers: [DataTableState]
8497
8503
  },] }
@@ -8522,6 +8528,7 @@
8522
8528
  fixedHeader: [{ type: core.Input }],
8523
8529
  paginatorDataFeatureId: [{ type: core.Input }],
8524
8530
  maxSelected: [{ type: core.Input }],
8531
+ canSelectAll: [{ type: core.Input }],
8525
8532
  dataTableService: [{ type: core.Input }],
8526
8533
  rows: [{ type: core.Input }],
8527
8534
  outsideFilter: [{ type: core.Input }],
@@ -8532,6 +8539,7 @@
8532
8539
  forceShowHeader: [{ type: core.Input }],
8533
8540
  hideGlobalSearch: [{ type: core.Input }],
8534
8541
  preferencesChanged: [{ type: core.Output }],
8542
+ allSelected: [{ type: core.Output }],
8535
8543
  empty: [{ type: core.HostBinding, args: ['class.empty',] }],
8536
8544
  loadingClass: [{ type: core.HostBinding, args: ['class.loading',] }],
8537
8545
  listInteractions: [{ type: core.Input }]
@@ -26984,7 +26992,7 @@
26984
26992
  { type: core.Component, args: [{
26985
26993
  selector: 'novo-address',
26986
26994
  providers: [ADDRESS_VALUE_ACCESSOR],
26987
- template: "\n <span\n *ngIf=\"!config?.address1?.hidden\"\n class=\"street-address\"\n [class.invalid]=\"invalid.address1\"\n [class.focus]=\"focused.address1\"\n [class.disabled]=\"disabled.address1\"\n >\n <i\n *ngIf=\"config.address1.required\"\n class=\"required-indicator address1\"\n [ngClass]=\"{ 'bhi-circle': !valid.address1, 'bhi-check': valid.address1 }\"\n >\n </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.address1\"\n type=\"text\"\n id=\"address1\"\n name=\"address1\"\n [placeholder]=\"config.address1.label\"\n [maxlength]=\"config?.address1?.maxlength\"\n autocomplete=\"shipping street-address address-line-1\"\n [(ngModel)]=\"model.address1\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'address1')\"\n (blur)=\"isBlurred($event, 'address1')\"\n (input)=\"onInput($event, 'address1')\"\n />\n </span>\n <span\n *ngIf=\"!config?.address2?.hidden\"\n class=\"apt suite\"\n [class.invalid]=\"invalid.address2\"\n [class.focus]=\"focused.address2\"\n [class.disabled]=\"disabled.address2\"\n >\n <i\n *ngIf=\"config.address2.required\"\n class=\"required-indicator address2\"\n [ngClass]=\"{ 'bhi-circle': !valid.address2, 'bhi-check': valid.address2 }\"\n >\n </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.address2\"\n type=\"text\"\n id=\"address2\"\n name=\"address2\"\n [placeholder]=\"config.address2.label\"\n [maxlength]=\"config?.address2?.maxlength\"\n autocomplete=\"shipping address-line-2\"\n [(ngModel)]=\"model.address2\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'address2')\"\n (blur)=\"isBlurred($event, 'address2')\"\n (input)=\"onInput($event, 'address2')\"\n />\n </span>\n <span\n *ngIf=\"!config?.city?.hidden\"\n class=\"city locality\"\n [class.invalid]=\"invalid.city\"\n [class.focus]=\"focused.city\"\n [class.disabled]=\"disabled.city\"\n >\n <i *ngIf=\"config.city.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.city, 'bhi-check': valid.city }\"> </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.city\"\n type=\"text\"\n id=\"city\"\n name=\"city\"\n [placeholder]=\"config.city.label\"\n autocomplete=\"shipping city locality\"\n [maxlength]=\"config?.city?.maxlength\"\n [(ngModel)]=\"model.city\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'city')\"\n (blur)=\"isBlurred($event, 'city')\"\n (input)=\"onInput($event, 'city')\"\n />\n </span>\n <span\n *ngIf=\"!config?.state?.hidden\"\n class=\"state region\"\n [class.invalid]=\"invalid.state\"\n [class.focus]=\"focused.state\"\n [class.disabled]=\"disabled.state\"\n [tooltip]=\"tooltip.state\"\n >\n <i *ngIf=\"config.state.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.state, 'bhi-check': valid.state }\"> </i>\n <novo-picker\n [config]=\"config?.state?.pickerConfig\"\n [placeholder]=\"config?.state?.label\"\n (changed)=\"onStateChange($event)\"\n autocomplete=\"shipping region\"\n [(ngModel)]=\"model.state\"\n [disablePickerInput]=\"disabled.state\"\n ></novo-picker>\n </span>\n <span\n *ngIf=\"!config?.zip?.hidden\"\n class=\"zip postal-code\"\n [class.invalid]=\"invalid.zip\"\n [class.focus]=\"focused.zip\"\n [class.disabled]=\"disabled.zip\"\n >\n <i *ngIf=\"config.zip.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.zip, 'bhi-check': valid.zip }\"> </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.zip\"\n type=\"text\"\n id=\"zip\"\n name=\"zip\"\n [placeholder]=\"config.zip.label\"\n autocomplete=\"shipping postal-code\"\n [maxlength]=\"config?.zip?.maxlength\"\n [(ngModel)]=\"model.zip\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'zip')\"\n (blur)=\"isBlurred($event, 'zip')\"\n (input)=\"onInput($event, 'zip')\"\n />\n </span>\n <span\n *ngIf=\"!config?.countryID?.hidden\"\n class=\"country-name\"\n [class.invalid]=\"invalid.countryID\"\n [class.focus]=\"focused.countryID\"\n [class.disabled]=\"disabled.countryID\"\n >\n <i\n *ngIf=\"config.countryID.required\"\n class=\"required-indicator\"\n [ngClass]=\"{ 'bhi-circle': !valid.countryID, 'bhi-check': valid.countryID }\"\n >\n </i>\n <novo-picker\n [config]=\"config?.countryID?.pickerConfig\"\n [placeholder]=\"config.countryID.label\"\n (changed)=\"onCountryChange($event)\"\n autocomplete=\"shipping country\"\n [(ngModel)]=\"model.countryID\"\n [disablePickerInput]=\"disabled.countryID\"\n ></novo-picker>\n </span>\n "
26995
+ template: "\n <span\n *ngIf=\"!config?.address1?.hidden\"\n class=\"street-address\"\n [class.invalid]=\"invalid.address1\"\n [class.focus]=\"focused.address1\"\n [class.disabled]=\"disabled.address1\"\n >\n <i\n *ngIf=\"config.address1.required\"\n class=\"required-indicator address1\"\n [ngClass]=\"{ 'bhi-circle': !valid.address1, 'bhi-check': valid.address1 }\"\n >\n </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.address1\"\n type=\"text\"\n id=\"address1\"\n name=\"address1\"\n [placeholder]=\"config.address1.label\"\n [maxlength]=\"config?.address1?.maxlength\"\n autocomplete=\"shipping street-address address-line-1\"\n [(ngModel)]=\"model.address1\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'address1')\"\n (blur)=\"isBlurred($event, 'address1')\"\n (input)=\"onInput($event, 'address1')\"\n [disabled]=\"disabled.address1\"\n />\n </span>\n <span\n *ngIf=\"!config?.address2?.hidden\"\n class=\"apt suite\"\n [class.invalid]=\"invalid.address2\"\n [class.focus]=\"focused.address2\"\n [class.disabled]=\"disabled.address2\"\n >\n <i\n *ngIf=\"config.address2.required\"\n class=\"required-indicator address2\"\n [ngClass]=\"{ 'bhi-circle': !valid.address2, 'bhi-check': valid.address2 }\"\n >\n </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.address2\"\n type=\"text\"\n id=\"address2\"\n name=\"address2\"\n [placeholder]=\"config.address2.label\"\n [maxlength]=\"config?.address2?.maxlength\"\n autocomplete=\"shipping address-line-2\"\n [(ngModel)]=\"model.address2\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'address2')\"\n (blur)=\"isBlurred($event, 'address2')\"\n (input)=\"onInput($event, 'address2')\"\n [disabled]=\"disabled.address2\"\n />\n </span>\n <span\n *ngIf=\"!config?.city?.hidden\"\n class=\"city locality\"\n [class.invalid]=\"invalid.city\"\n [class.focus]=\"focused.city\"\n [class.disabled]=\"disabled.city\"\n >\n <i *ngIf=\"config.city.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.city, 'bhi-check': valid.city }\"> </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.city\"\n type=\"text\"\n id=\"city\"\n name=\"city\"\n [placeholder]=\"config.city.label\"\n autocomplete=\"shipping city locality\"\n [maxlength]=\"config?.city?.maxlength\"\n [(ngModel)]=\"model.city\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'city')\"\n (blur)=\"isBlurred($event, 'city')\"\n (input)=\"onInput($event, 'city')\"\n [disabled]=\"disabled.city\"\n />\n </span>\n <span\n *ngIf=\"!config?.state?.hidden\"\n class=\"state region\"\n [class.invalid]=\"invalid.state\"\n [class.focus]=\"focused.state\"\n [class.disabled]=\"disabled.state\"\n [tooltip]=\"tooltip.state\"\n >\n <i *ngIf=\"config.state.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.state, 'bhi-check': valid.state }\"> </i>\n <novo-picker\n [config]=\"config?.state?.pickerConfig\"\n [placeholder]=\"config?.state?.label\"\n (changed)=\"onStateChange($event)\"\n autocomplete=\"shipping region\"\n [(ngModel)]=\"model.state\"\n [disablePickerInput]=\"disabled.state\"\n ></novo-picker>\n </span>\n <span\n *ngIf=\"!config?.zip?.hidden\"\n class=\"zip postal-code\"\n [class.invalid]=\"invalid.zip\"\n [class.focus]=\"focused.zip\"\n [class.disabled]=\"disabled.zip\"\n >\n <i *ngIf=\"config.zip.required\" class=\"required-indicator\" [ngClass]=\"{ 'bhi-circle': !valid.zip, 'bhi-check': valid.zip }\"> </i>\n <input\n [class.maxlength-error]=\"invalidMaxlength.zip\"\n type=\"text\"\n id=\"zip\"\n name=\"zip\"\n [placeholder]=\"config.zip.label\"\n autocomplete=\"shipping postal-code\"\n [maxlength]=\"config?.zip?.maxlength\"\n [(ngModel)]=\"model.zip\"\n (ngModelChange)=\"updateControl()\"\n (focus)=\"isFocused($event, 'zip')\"\n (blur)=\"isBlurred($event, 'zip')\"\n (input)=\"onInput($event, 'zip')\"\n [disabled]=\"disabled.zip\"\n />\n </span>\n <span\n *ngIf=\"!config?.countryID?.hidden\"\n class=\"country-name\"\n [class.invalid]=\"invalid.countryID\"\n [class.focus]=\"focused.countryID\"\n [class.disabled]=\"disabled.countryID\"\n >\n <i\n *ngIf=\"config.countryID.required\"\n class=\"required-indicator\"\n [ngClass]=\"{ 'bhi-circle': !valid.countryID, 'bhi-check': valid.countryID }\"\n >\n </i>\n <novo-picker\n [config]=\"config?.countryID?.pickerConfig\"\n [placeholder]=\"config.countryID.label\"\n (changed)=\"onCountryChange($event)\"\n autocomplete=\"shipping country\"\n [(ngModel)]=\"model.countryID\"\n [disablePickerInput]=\"disabled.countryID\"\n ></novo-picker>\n </span>\n "
26988
26996
  },] }
26989
26997
  ];
26990
26998
  NovoAddressElement.ctorParameters = function () { return [
@@ -28169,7 +28177,7 @@
28169
28177
  animations.transition('startDate <=> endDate', animations.animate('200ms ease-in')),
28170
28178
  ]),
28171
28179
  ],
28172
- template: "\n <div class=\"calendar\">\n <div class=\"calendar-top\" *ngIf=\"!inline && !range\">\n <h4 class=\"day\" [attr.data-automation-id]=\"heading?.day\">{{heading?.day}}</h4>\n <h2 class=\"month\" [attr.data-automation-id]=\"heading?.month\">{{heading?.month}}</h2>\n <h1 class=\"date\" [attr.data-automation-id]=\"heading?.date\">{{heading?.date}}</h1>\n <h3 class=\"year\" [attr.data-automation-id]=\"heading?.year\">{{heading?.year}}</h3>\n </div>\n <div class=\"date-range-tabs\" *ngIf=\"range\" [class.week-select-mode]=\"weekRangeSelect\">\n <span class=\"range-tab\" (click)=\"toggleRangeSelect('startDate')\" [@startDateTextState]=\"rangeSelectMode\" data-automation-id=\"calendar-start-date\">{{selectedLabel}}</span>\n <span class=\"range-tab\" (click)=\"toggleRangeSelect('endDate')\" [@endDateTextState]=\"rangeSelectMode\" data-automation-id=\"calendar-end-date\">{{selected2Label}}</span>\n <i class=\"indicator\" [@indicatorState]=\"rangeSelectMode\"></i>\n </div>\n <div class=\"calendar-header\">\n <span class=\"previous\" (click)=\"prevMonth($event)\" data-automation-id=\"calendar-previous\"></span>\n <span class=\"heading\">\n <span class=\"month\" (click)=\"open($event, 'months')\" data-automation-id=\"header-month\">{{monthLabel}}</span>\n <span class=\"year\" (click)=\"open($event, 'years')\" data-automation-id=\"header-year\">{{month?.getFullYear()}}</span>\n </span>\n <span class=\"next\" (click)=\"nextMonth($event)\" data-automation-id=\"calendar-next\"></span>\n </div>\n <table class=\"calendar-content days\" cellspacing=\"0\" cellpadding=\"0\" [hidden]=\"!(view=='days')\">\n <thead>\n <tr>\n <th *ngFor=\"let day of weekdays\" title=\"{{day}}\" class=\"weekday\" [attr.data-automation-id]=\"day.substr(0, 2)\">{{day.substr(0, 2)}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let week of weeks\">\n <td *ngFor=\"let day of week.days\" [ngClass]=\"{\n today: day.isToday,\n 'notinmonth': day.date.getMonth() !== this.month.getMonth(),\n selected: isSelected(range, day.date, selected, selected2),\n filler: isFiller(range, day.date, selected, selected2),\n startfill: isStartFill(range, day.date, selected, selected2),\n endfill: isEndFill(range, day.date, selected, selected2),\n 'selecting-range': isSelectingRange(range, day.date, selected, selected2, hoverDay, rangeSelectMode, weekRangeSelect)\n }\" (mouseover)=\"rangeHover($event, day)\" [attr.data-automation-id]=\"day.number\">\n <button class=\"day\" [attr.data-automation-id]=\"day.number\" [disabled]=\"isDisabled(day.date, start, end)\" (click)=\"select($event, day, true)\">{{day.number}}</button>\n </td>\n </tr>\n </tbody>\n </table>\n <section class=\"calendar-content months\" [hidden]=\"view !== 'months'\">\n <div *ngFor=\"let month of months;let i = index\" (click)=\"setMonth(i)\">\n <div class=\"month\" [ngClass]=\"{selected: i === selected?.getMonth()}\" [attr.data-automation-id]=\"month\">{{month}}</div>\n </div>\n </section>\n <section class=\"calendar-content years\" [hidden]=\"view !== 'years'\">\n <div *ngFor=\"let year of years\" (click)=\"setYear(year)\">\n <div class=\"year\" [ngClass]=\"{selected: year == selected?.getFullYear()}\" [attr.data-automation-id]=\"year\">{{year}}</div>\n </div>\n </section>\n <div class=\"calendar-footer\">\n <span (click)=\"setToday()\" class=\"today\" data-automation-id=\"calendar-today\">{{ labels.today }}</span>\n </div>\n </div>\n "
28180
+ template: "\n <div class=\"calendar\">\n <div class=\"calendar-top\" *ngIf=\"!inline && !range\">\n <h4 class=\"day\" [attr.data-automation-id]=\"heading?.day\">{{heading?.day}}</h4>\n <h2 class=\"month\" [attr.data-automation-id]=\"heading?.month\">{{heading?.month}}</h2>\n <h1 class=\"date\" [attr.data-automation-id]=\"heading?.date\">{{heading?.date}}</h1>\n <h3 class=\"year\" [attr.data-automation-id]=\"heading?.year\">{{heading?.year}}</h3>\n </div>\n <div class=\"date-range-tabs\" *ngIf=\"range\" [class.week-select-mode]=\"weekRangeSelect\">\n <span class=\"range-tab\" (click)=\"toggleRangeSelect('startDate')\" [@startDateTextState]=\"rangeSelectMode\" data-automation-id=\"calendar-start-date\">{{selectedLabel}}</span>\n <span class=\"range-tab\" (click)=\"toggleRangeSelect('endDate')\" [@endDateTextState]=\"rangeSelectMode\" data-automation-id=\"calendar-end-date\">{{selected2Label}}</span>\n <i class=\"indicator\" [@indicatorState]=\"rangeSelectMode\"></i>\n </div>\n <div class=\"calendar-header\">\n <span class=\"previous\" (click)=\"prevMonth($event)\" data-automation-id=\"calendar-previous\"></span>\n <span class=\"heading\">\n <span class=\"month\" (click)=\"open($event, 'months')\" data-automation-id=\"header-month\">{{monthLabel}}</span>\n <span class=\"year\" (click)=\"open($event, 'years')\" data-automation-id=\"header-year\">{{month?.getFullYear()}}</span>\n </span>\n <span class=\"next\" (click)=\"nextMonth($event)\" data-automation-id=\"calendar-next\"></span>\n </div>\n <table class=\"calendar-content days\" cellspacing=\"0\" cellpadding=\"0\" [hidden]=\"!(view=='days')\">\n <thead>\n <tr>\n <th *ngFor=\"let day of weekdays\" title=\"{{day}}\" class=\"weekday\" [attr.data-automation-id]=\"day.substr(0, 2)\">{{day.substr(0, 2)}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let week of weeks\">\n <td *ngFor=\"let day of week.days\" [ngClass]=\"{\n today: day.isToday,\n 'notinmonth': day.date.getMonth() !== this.month.getMonth(),\n selected: isSelected(range, day.date, selected, selected2),\n filler: isFiller(range, day.date, selected, selected2),\n startfill: isStartFill(range, day.date, selected, selected2),\n endfill: isEndFill(range, day.date, selected, selected2),\n 'selecting-range': isSelectingRange(range, day.date, selected, selected2, hoverDay, rangeSelectMode, weekRangeSelect)\n }\" (mouseover)=\"rangeHover($event, day)\" [attr.data-automation-id]=\"day.number\">\n <button [title]=\"isDisabled(day.date, start, end) ? disabledDateMessage : ''\" class=\"day\" [attr.data-automation-id]=\"day.number\" [disabled]=\"isDisabled(day.date, start, end)\" (click)=\"select($event, day, true)\">{{day.number}}</button>\n </td>\n </tr>\n </tbody>\n </table>\n <section class=\"calendar-content months\" [hidden]=\"view !== 'months'\">\n <div *ngFor=\"let month of months;let i = index\" (click)=\"setMonth(i)\">\n <div class=\"month\" [ngClass]=\"{selected: i === selected?.getMonth()}\" [attr.data-automation-id]=\"month\">{{month}}</div>\n </div>\n </section>\n <section class=\"calendar-content years\" [hidden]=\"view !== 'years'\">\n <div *ngFor=\"let year of years\" (click)=\"setYear(year)\">\n <div class=\"year\" [ngClass]=\"{selected: year == selected?.getFullYear()}\" [attr.data-automation-id]=\"year\">{{year}}</div>\n </div>\n </section>\n <div class=\"calendar-footer\">\n <span (click)=\"setToday()\" class=\"today\" data-automation-id=\"calendar-today\">{{ labels.today }}</span>\n </div>\n </div>\n "
28173
28181
  },] }
28174
28182
  ];
28175
28183
  NovoDatePickerElement.ctorParameters = function () { return [
@@ -28185,6 +28193,7 @@
28185
28193
  range: [{ type: core.Input }],
28186
28194
  weekRangeSelect: [{ type: core.Input }],
28187
28195
  weekStart: [{ type: core.Input }],
28196
+ disabledDateMessage: [{ type: core.Input }],
28188
28197
  onSelect: [{ type: core.Output }]
28189
28198
  };
28190
28199
 
@@ -28601,7 +28610,7 @@
28601
28610
  { type: core.Component, args: [{
28602
28611
  selector: 'novo-date-picker-input',
28603
28612
  providers: [DATE_VALUE_ACCESSOR],
28604
- template: "\n <input\n type=\"text\"\n [name]=\"name\"\n [(ngModel)]=\"formattedValue\"\n [textMask]=\"maskOptions\"\n [placeholder]=\"placeholder\"\n (focus)=\"_handleFocus($event)\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur($event)\"\n #input\n data-automation-id=\"date-input\"\n [disabled]=\"disabled\"\n />\n <i *ngIf=\"!hasValue\" (click)=\"openPanel()\" class=\"bhi-calendar\"></i>\n <i *ngIf=\"hasValue\" (click)=\"clearValue()\" class=\"bhi-times\"></i>\n <novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <novo-date-picker\n [start]=\"start\"\n [end]=\"end\"\n inline=\"true\"\n (onSelect)=\"setValueAndClose($event)\"\n [ngModel]=\"value\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker>\n </novo-overlay-template>\n "
28613
+ template: "\n <input\n type=\"text\"\n [name]=\"name\"\n [(ngModel)]=\"formattedValue\"\n [textMask]=\"maskOptions\"\n [placeholder]=\"placeholder\"\n (focus)=\"_handleFocus($event)\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur($event)\"\n #input\n data-automation-id=\"date-input\"\n [disabled]=\"disabled\"\n />\n <i *ngIf=\"!hasValue\" (click)=\"openPanel()\" class=\"bhi-calendar\"></i>\n <i *ngIf=\"hasValue\" (click)=\"clearValue()\" class=\"bhi-times\"></i>\n <novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <novo-date-picker\n [start]=\"start\"\n [end]=\"end\"\n inline=\"true\"\n (onSelect)=\"setValueAndClose($event)\"\n [disabledDateMessage]=\"disabledDateMessage\"\n [ngModel]=\"value\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker>\n </novo-overlay-template>\n "
28605
28614
  },] }
28606
28615
  ];
28607
28616
  NovoDatePickerInputElement.ctorParameters = function () { return [
@@ -28619,6 +28628,7 @@
28619
28628
  format: [{ type: core.Input }],
28620
28629
  textMaskEnabled: [{ type: core.Input }],
28621
28630
  allowInvalidDate: [{ type: core.Input }],
28631
+ disabledDateMessage: [{ type: core.Input }],
28622
28632
  disabled: [{ type: core.HostBinding, args: ['class.disabled',] }, { type: core.Input }],
28623
28633
  weekStart: [{ type: core.Input }],
28624
28634
  blurEvent: [{ type: core.Output }],
@@ -29121,28 +29131,41 @@
29121
29131
  _this.toaster = toaster;
29122
29132
  _this.role = 'columnheader';
29123
29133
  _this.maxSelected = undefined;
29134
+ _this.canSelectAll = false;
29124
29135
  _this.checked = false;
29125
29136
  renderer.setAttribute(elementRef.nativeElement, 'data-automation-id', "novo-checkbox-column-header-" + columnDef.cssClassFriendlyName);
29126
29137
  renderer.addClass(elementRef.nativeElement, "novo-checkbox-column-" + columnDef.cssClassFriendlyName);
29127
29138
  renderer.addClass(elementRef.nativeElement, 'novo-data-table-checkbox-header-cell');
29128
29139
  _this.selectionSubscription = _this.dataTable.state.selectionSource.subscribe(function () {
29129
29140
  _this.checked = _this.dataTable.allCurrentRowsSelected();
29141
+ if (_this.canSelectAll) {
29142
+ _this.selectAllChanged();
29143
+ }
29130
29144
  _this.ref.markForCheck();
29131
29145
  });
29132
29146
  _this.paginationSubscription = _this.dataTable.state.paginationSource.subscribe(function (event) {
29133
29147
  if (event.isPageSizeChange) {
29134
29148
  _this.checked = false;
29149
+ if (_this.canSelectAll) {
29150
+ _this.selectAllChanged();
29151
+ }
29135
29152
  _this.dataTable.selectRows(false);
29136
29153
  _this.dataTable.state.checkRetainment('pageSize');
29137
29154
  _this.dataTable.state.reset(false, true);
29138
29155
  }
29139
29156
  else {
29140
29157
  _this.checked = _this.dataTable.allCurrentRowsSelected();
29158
+ if (_this.canSelectAll) {
29159
+ _this.selectAllChanged();
29160
+ }
29141
29161
  }
29142
29162
  _this.ref.markForCheck();
29143
29163
  });
29144
29164
  _this.resetSubscription = _this.dataTable.state.resetSource.subscribe(function () {
29145
29165
  _this.checked = false;
29166
+ if (_this.canSelectAll) {
29167
+ _this.selectAllChanged();
29168
+ }
29146
29169
  _this.ref.markForCheck();
29147
29170
  });
29148
29171
  return _this;
@@ -29177,6 +29200,17 @@
29177
29200
  else {
29178
29201
  this.dataTable.selectRows(!this.checked);
29179
29202
  }
29203
+ if (this.canSelectAll) {
29204
+ this.selectAllChanged();
29205
+ }
29206
+ };
29207
+ NovoDataTableCheckboxHeaderCell.prototype.selectAllChanged = function () {
29208
+ var _a, _b, _c;
29209
+ var allSelectedEvent = {
29210
+ allSelected: this.checked,
29211
+ selectedCount: (_c = (_b = (_a = this.dataTable) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.selected) === null || _c === void 0 ? void 0 : _c.length,
29212
+ };
29213
+ this.dataTable.allSelected.emit(allSelectedEvent);
29180
29214
  };
29181
29215
  return NovoDataTableCheckboxHeaderCell;
29182
29216
  }(table.CdkHeaderCell));
@@ -29197,7 +29231,8 @@
29197
29231
  ]; };
29198
29232
  NovoDataTableCheckboxHeaderCell.propDecorators = {
29199
29233
  role: [{ type: core.HostBinding, args: ['attr.role',] }],
29200
- maxSelected: [{ type: core.Input }]
29234
+ maxSelected: [{ type: core.Input }],
29235
+ canSelectAll: [{ type: core.Input }]
29201
29236
  };
29202
29237
 
29203
29238
  var NovoDataTableHeaderCell = /** @class */ (function (_super) {
@@ -29859,7 +29894,7 @@
29859
29894
  animations.transition('date <=> time', animations.animate('200ms ease-in')),
29860
29895
  ]),
29861
29896
  ],
29862
- template: "\n <div class=\"date-time-container\">\n <div class=\"date-time-tabs\">\n <span\n class=\"date-tab\"\n (click)=\"toggleView('date')\"\n [@dateTextState]=\"componentTabState\"\n data-automation-id=\"novo-date-time-date-tab\"\n >{{ selectedLabel }}</span\n >\n <span\n class=\"time-tab\"\n (click)=\"toggleView('time')\"\n [@timeTextState]=\"componentTabState\"\n data-automation-id=\"novo-date-time-time-tab\"\n >\n <span class=\"hours\" data-automation-id=\"novo-time-picker-hours\">{{ hours }}</span\n >:<span class=\"minutes\" data-automation-id=\"novo-time-picker-minutes\">{{ minutes }}</span>\n <span *ngIf=\"!military\" class=\"meridian\"> {{ meridian }}</span>\n </span>\n <i class=\"date-time-indicator\" [@indicatorState]=\"componentTabState\"></i>\n </div>\n <div class=\"view-container\" [@containerState]=\"componentTabState\">\n <div class=\"calendar\">\n <novo-date-picker\n (onSelect)=\"onDateSelected($event)\"\n [(ngModel)]=\"model\"\n inline=\"true\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [start]=\"start\"\n [end]=\"end\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker>\n </div>\n <div class=\"time-picker\">\n <novo-time-picker (onSelect)=\"onTimeSelected($event)\" [(ngModel)]=\"model\" [military]=\"military\" inline=\"true\"></novo-time-picker>\n </div>\n </div>\n </div>\n "
29897
+ template: "\n <div class=\"date-time-container\">\n <div class=\"date-time-tabs\">\n <span\n class=\"date-tab\"\n (click)=\"toggleView('date')\"\n [@dateTextState]=\"componentTabState\"\n data-automation-id=\"novo-date-time-date-tab\"\n >{{ selectedLabel }}</span\n >\n <span\n class=\"time-tab\"\n (click)=\"toggleView('time')\"\n [@timeTextState]=\"componentTabState\"\n data-automation-id=\"novo-date-time-time-tab\"\n >\n <span class=\"hours\" data-automation-id=\"novo-time-picker-hours\">{{ hours }}</span\n >:<span class=\"minutes\" data-automation-id=\"novo-time-picker-minutes\">{{ minutes }}</span>\n <span *ngIf=\"!military\" class=\"meridian\"> {{ meridian }}</span>\n </span>\n <i class=\"date-time-indicator\" [@indicatorState]=\"componentTabState\"></i>\n </div>\n <div class=\"view-container\" [@containerState]=\"componentTabState\">\n <div class=\"calendar\">\n <novo-date-picker\n (onSelect)=\"onDateSelected($event)\"\n [(ngModel)]=\"model\"\n inline=\"true\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [start]=\"start\"\n [end]=\"end\"\n [disabledDateMessage]=\"disabledDateMessage\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker>\n </div>\n <div class=\"time-picker\">\n <novo-time-picker (onSelect)=\"onTimeSelected($event)\" [(ngModel)]=\"model\" [military]=\"military\" inline=\"true\"></novo-time-picker>\n </div>\n </div>\n </div>\n "
29863
29898
  },] }
29864
29899
  ];
29865
29900
  NovoDateTimePickerElement.ctorParameters = function () { return [
@@ -29873,6 +29908,7 @@
29873
29908
  end: [{ type: core.Input }],
29874
29909
  military: [{ type: core.Input }],
29875
29910
  weekStart: [{ type: core.Input }],
29911
+ disabledDateMessage: [{ type: core.Input }],
29876
29912
  onSelect: [{ type: core.Output }]
29877
29913
  };
29878
29914
 
@@ -29984,7 +30020,7 @@
29984
30020
  { type: core.Component, args: [{
29985
30021
  selector: 'novo-date-time-picker-input',
29986
30022
  providers: [DATE_VALUE_ACCESSOR$1],
29987
- template: "\n <novo-date-picker-input\n [ngModel]=\"datePart\"\n (ngModelChange)=\"updateDate($event)\"\n [start]=\"start\"\n [end]=\"end\"\n [maskOptions]=\"maskOptions\"\n (blurEvent)=\"handleBlur($event)\"\n (focusEvent)=\"handleFocus($event)\"\n [disabled]=\"disabled\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker-input>\n <novo-time-picker-input\n [ngModel]=\"timePart\"\n (ngModelChange)=\"updateTime($event)\"\n [military]=\"military\"\n (blurEvent)=\"handleBlur($event)\"\n (focusEvent)=\"handleFocus($event)\"\n [disabled]=\"disabled\"\n ></novo-time-picker-input>\n "
30023
+ template: "\n <novo-date-picker-input\n [ngModel]=\"datePart\"\n (ngModelChange)=\"updateDate($event)\"\n [start]=\"start\"\n [end]=\"end\"\n [disabledDateMessage]=\"disabledDateMessage\"\n [maskOptions]=\"maskOptions\"\n (blurEvent)=\"handleBlur($event)\"\n (focusEvent)=\"handleFocus($event)\"\n [disabled]=\"disabled\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker-input>\n <novo-time-picker-input\n [ngModel]=\"timePart\"\n (ngModelChange)=\"updateTime($event)\"\n [military]=\"military\"\n (blurEvent)=\"handleBlur($event)\"\n (focusEvent)=\"handleFocus($event)\"\n [disabled]=\"disabled\"\n ></novo-time-picker-input>\n "
29988
30024
  },] }
29989
30025
  ];
29990
30026
  NovoDateTimePickerInputElement.ctorParameters = function () { return [
@@ -30002,6 +30038,7 @@
30002
30038
  disabled: [{ type: core.Input }],
30003
30039
  format: [{ type: core.Input }],
30004
30040
  weekStart: [{ type: core.Input }],
30041
+ disabledDateMessage: [{ type: core.Input }],
30005
30042
  blurEvent: [{ type: core.Output }],
30006
30043
  focusEvent: [{ type: core.Output }],
30007
30044
  changeEvent: [{ type: core.Output }]
@@ -30882,6 +30919,7 @@
30882
30919
  _this.isEmpty = config.isEmpty;
30883
30920
  }
30884
30921
  _this.weekStart = config.weekStart || 0;
30922
+ _this.disabledDateMessage = config.disabledDateMessage;
30885
30923
  return _this;
30886
30924
  }
30887
30925
  return BaseControl;
@@ -31379,6 +31417,7 @@
31379
31417
  _this.tipWell = control.tipWell;
31380
31418
  _this.customControlConfig = control.customControlConfig;
31381
31419
  _this.warning = control.warning;
31420
+ _this.disabledDateMessage = control.disabledDateMessage;
31382
31421
  // Reactive Form, need to enable/disable, can't bind to [disabled]
31383
31422
  if (_this.readOnly) {
31384
31423
  _this.disable();
@@ -31731,7 +31770,7 @@
31731
31770
  return key.indexOf('customEncrypted') > -1;
31732
31771
  };
31733
31772
  FormUtils.prototype.getControlForField = function (field, http, config, overrides, forTable, fieldData) {
31734
- var e_1, _a;
31773
+ var e_1, _b;
31735
31774
  if (forTable === void 0) { forTable = false; }
31736
31775
  // TODO: if field.type overrides `determineInputType` we should use it in that method or use this method
31737
31776
  // TODO: (cont.) as the setter of the field argument
@@ -31770,7 +31809,7 @@
31770
31809
  closeOnSelect: field.closeOnSelect,
31771
31810
  layoutOptions: field.layoutOptions,
31772
31811
  };
31773
- this.inferStartDate(controlConfig, field);
31812
+ this.inferDateRange(controlConfig, field);
31774
31813
  // TODO: getControlOptions should always return the correct format
31775
31814
  var optionsConfig = this.getControlOptions(field, http, config, fieldData);
31776
31815
  if (Array.isArray(optionsConfig) && !(type === 'chips' || type === 'picker')) {
@@ -31910,8 +31949,8 @@
31910
31949
  controlConfig.config.readOnly = controlConfig.readOnly;
31911
31950
  if (field.fields && field.fields.length) {
31912
31951
  try {
31913
- for (var _b = __values(field.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
31914
- var subfield = _c.value;
31952
+ for (var _c = __values(field.fields), _d = _c.next(); !_d.done; _d = _c.next()) {
31953
+ var subfield = _d.value;
31915
31954
  controlConfig.config[subfield.name] = {
31916
31955
  required: !!subfield.required,
31917
31956
  hidden: !!subfield.readOnly,
@@ -31949,7 +31988,7 @@
31949
31988
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
31950
31989
  finally {
31951
31990
  try {
31952
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
31991
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
31953
31992
  }
31954
31993
  finally { if (e_1) throw e_1.error; }
31955
31994
  }
@@ -32077,7 +32116,7 @@
32077
32116
  return (data && data[field.name]) || null;
32078
32117
  };
32079
32118
  FormUtils.prototype.getEmbeddedFieldData = function (field, data) {
32080
- var _a = __read(field.name.split('.'), 2), parentFieldName = _a[0], fieldName = _a[1];
32119
+ var _b = __read(field.name.split('.'), 2), parentFieldName = _b[0], fieldName = _b[1];
32081
32120
  return (data && data[parentFieldName] && data[parentFieldName][fieldName]) || null;
32082
32121
  };
32083
32122
  FormUtils.prototype.getFormFields = function (meta) {
@@ -32296,23 +32335,23 @@
32296
32335
  return dateFns.addDays(dateFns.startOfToday(), dateRange.minOffset);
32297
32336
  }
32298
32337
  };
32299
- /**
32300
- * Get the min start date of a Date base on field data.
32301
- */
32302
- FormUtils.prototype.getStartDate = function (field) {
32303
- if (field.allowedDateRange) {
32304
- return this.getStartDateFromRange(field.allowedDateRange);
32338
+ FormUtils.prototype.getEndDateFromRange = function (dateRange) {
32339
+ if (dateRange.maxDate) {
32340
+ return dateFns.parse(dateRange.maxDate);
32341
+ }
32342
+ else if (dateRange.minOffset) {
32343
+ return dateFns.addDays(dateFns.startOfToday(), dateRange.minOffset);
32305
32344
  }
32306
- // there is no restriction on the start date
32307
- return null;
32308
32345
  };
32309
- FormUtils.prototype.inferStartDate = function (controlConfig, field) {
32310
- if (field.dataType === 'Date') {
32311
- var startDate = this.getStartDate(field);
32312
- if (startDate) {
32313
- controlConfig.startDate = startDate;
32314
- }
32315
- return startDate;
32346
+ /**
32347
+ * Get the min start date and max end date of a Date base on field data.
32348
+ */
32349
+ FormUtils.prototype.inferDateRange = function (controlConfig, field) {
32350
+ var _a;
32351
+ if (field.dataType === 'Date' && field.allowedDateRange) {
32352
+ controlConfig.startDate = this.getStartDateFromRange(field.allowedDateRange);
32353
+ controlConfig.endDate = this.getEndDateFromRange(field.allowedDateRange);
32354
+ controlConfig.disabledDateMessage = (_a = field.allowedDateRange) === null || _a === void 0 ? void 0 : _a.disabledDateMessage;
32316
32355
  }
32317
32356
  };
32318
32357
  FormUtils.prototype.inflateEmbeddedProperties = function (data) {
@@ -32320,7 +32359,7 @@
32320
32359
  Object.keys(data)
32321
32360
  .filter(function (fieldName) { return fieldName.includes('.'); })
32322
32361
  .forEach(function (field) {
32323
- var _a = __read(field.split('.'), 2), parentFieldName = _a[0], fieldName = _a[1];
32362
+ var _b = __read(field.split('.'), 2), parentFieldName = _b[0], fieldName = _b[1];
32324
32363
  if (!data[parentFieldName]) {
32325
32364
  data[parentFieldName] = {};
32326
32365
  }
@@ -34267,7 +34306,7 @@
34267
34306
  NovoControlTemplates.decorators = [
34268
34307
  { type: core.Component, args: [{
34269
34308
  selector: 'novo-control-templates',
34270
- template: "\n <!---Readonly--->\n <ng-template novoTemplate=\"read-only\" let-form=\"form\" let-control>\n <div>{{ form.value[control.key] }}</div>\n </ng-template>\n <!--Textbox--->\n <ng-template novoTemplate=\"textbox\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container novo-control-input-with-label\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <input *ngIf=\"control?.type !== 'number' && control?.textMaskEnabled\" [textMask]=\"control.maskOptions\" [formControlName]=\"control.key\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (input)=\"methods.emitChange($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" autocomplete>\n <input *ngIf=\"control?.type !== 'number' && !control?.textMaskEnabled\" [class.maxlength-error]=\"errors?.maxlength\" [formControlName]=\"control.key\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (input)=\"methods.emitChange($event)\" [maxlength]=\"control?.maxlength\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" autocomplete>\n <input *ngIf=\"control?.type === 'number' && control?.subType !== 'percentage'\" [class.maxlength-error]=\"errors?.maxlength\" [formControlName]=\"control.key\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (keydown)=\"methods.restrictKeys($event)\" (input)=\"methods.emitChange($event)\" [maxlength]=\"control?.maxlength\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" step=\"any\" (mousewheel)=\"numberInput.blur()\" #numberInput>\n <!-- the percentage input does not use formControlName like a normal reactive input because instead of setting the floating point value directly, it is multiplied by 100 into a percentage value -->\n <input *ngIf=\"control?.type === 'number' && control?.subType === 'percentage'\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (keydown)=\"methods.restrictKeys($event)\" [value]=\"control?.percentValue\" [disabled]=\"control?.readOnly\" (input)=\"methods.handlePercentChange($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" step=\"any\" (mousewheel)=\"percentInput.blur()\" #percentInput>\n <label class=\"input-label\" *ngIf=\"control?.subType === 'currency'\">{{ control.currencyFormat }}</label>\n <label class=\"input-label\" *ngIf=\"control?.subType === 'percentage'\">%</label>\n </div>\n </ng-template>\n\n <!--Textarea--->\n <ng-template novoTemplate=\"text-area\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div class=\"textarea-container\" [formGroup]=\"form\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <textarea [class.maxlength-error]=\"errors?.maxlength\" [name]=\"control.key\" [attr.id]=\"control.key\" [placeholder]=\"control.placeholder\" [formControlName]=\"control.key\" autosize (input)=\"methods.handleTextAreaInput($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [maxlength]=\"control?.maxlength\"></textarea>\n </div>\n </ng-template>\n\n <!--Editor-->\n <ng-template novoTemplate=\"editor\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-editor [name]=\"control.key\" [formControlName]=\"control.key\" [startupFocus]=\"control.startupFocus\" [minimal]=\"control.minimal\" [fileBrowserImageUploadUrl]=\"control.fileBrowserImageUploadUrl\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [config]=\"control.config\"></novo-editor>\n </div>\n </ng-template>\n\n <!--AceEditor-->\n <ng-template novoTemplate=\"ace-editor\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-ace-editor [name]=\"control.key\" [formControlName]=\"control.key\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\"></novo-ace-editor>\n </div>\n </ng-template>\n\n <!--HTML5 Select-->\n <ng-template novoTemplate=\"native-select\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <select [id]=\"control.key\" [formControlName]=\"control.key\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <option *ngIf=\"control.placeholder\" value=\"\" disabled selected hidden>{{ control.placeholder }}</option>\n <option *ngFor=\"let opt of control.options\" [value]=\"opt.key\">{{opt.value}}</option>\n </select>\n </div>\n </ng-template>\n\n <!--File-->\n <ng-template novoTemplate=\"file\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-file-input [formControlName]=\"control.key\" [id]=\"control.key\" [name]=\"control.key\" [placeholder]=\"control.placeholder\" [value]=\"control.value\" [multiple]=\"control.multiple\" [layoutOptions]=\"control.layoutOptions\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" (edit)=\"methods.handleEdit($event)\" (save)=\"methods.handleSave($event)\" (delete)=\"methods.handleDelete($event)\" (upload)=\"methods.handleUpload($event)\"></novo-file-input>\n </div>\n </ng-template>\n\n <!--Tiles-->\n <ng-template novoTemplate=\"tiles\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-tiles [options]=\"control.options\" [formControlName]=\"control.key\" (onChange)=\"methods.modelChange($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [controlDisabled]=\"control.disabled\"></novo-tiles>\n </div>\n </ng-template>\n\n <!--Picker-->\n <ng-template novoTemplate=\"picker\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\">\n <novo-picker [config]=\"control.config\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" [parentScrollSelector]=\"control.parentScrollSelector\" *ngIf=\"!control.multiple\" (select)=\"methods.modelChange($event);\" (changed)=\"methods.modelChangeWithRaw($event)\" (typing)=\"methods.handleTyping($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"></novo-picker>\n <novo-chips [source]=\"control.config\" [type]=\"control.config.type\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" [maxlength]=\"control?.maxlength\" *ngIf=\"control.multiple && !control.config.columns\" [closeOnSelect]=\"control.closeOnSelect\" (changed)=\"methods.modelChangeWithRaw($event)\" (typing)=\"methods.handleTyping($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"></novo-chips>\n <novo-row-chips [source]=\"control.config\" [type]=\"control.config.type\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" *ngIf=\"control.multiple && control.config.columns\" [closeOnSelect]=\"control.closeOnSelect\" (changed)=\"methods.modelChangeWithRaw($event)\" (typing)=\"methods.handleTyping($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"></novo-row-chips>\n </div>\n </ng-template>\n\n <!--Novo Select-->\n <ng-template novoTemplate=\"select\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-select [options]=\"control.options\" [headerConfig]=\"control.headerConfig\" [placeholder]=\"control.placeholder\" [formControlName]=\"control.key\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" (onSelect)=\"methods.modelChange($event)\"></novo-select>\n </div>\n </ng-template>\n\n <!--Radio-->\n <ng-template novoTemplate=\"radio\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\">\n <novo-radio [name]=\"control.key\" [formControlName]=\"control.key\" *ngFor=\"let option of control.options\" [value]=\"option.value\" [label]=\"option.label\" [checked]=\"option.value === form.value[control.key] || (form.value[control.key] && option.value === form.value[control.key].id)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [button]=\"!!option.icon\" [icon]=\"option.icon\" [attr.data-automation-id]=\"control.key + '-' + (option?.label || option?.value)\"></novo-radio>\n </div>\n </ng-template>\n\n <!--Time-->\n <ng-template novoTemplate=\"time\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <novo-time-picker-input [attr.id]=\"control.key\" [name]=\"control.key\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" [military]=\"control.military\"></novo-time-picker-input>\n </div>\n </ng-template>\n\n <!--Date-->\n <ng-template novoTemplate=\"date\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <novo-date-picker-input [attr.id]=\"control.key\" [name]=\"control.key\" [formControlName]=\"control.key\" [start]=\"control.startDate\" [end]=\"control.endDate\" [format]=\"control.dateFormat\" [allowInvalidDate]=\"control.allowInvalidDate\" [textMaskEnabled]=\"control.textMaskEnabled\" [placeholder]=\"control.placeholder\" [weekStart]=\"control.weekStart\" (focusEvent)=\"methods.handleFocus($event)\" (blurEvent)=\"methods.handleBlur($event)\" (changeEvent)=\"methods.emitChange($event)\"></novo-date-picker-input>\n </div>\n </ng-template>\n\n <!--Date and Time-->\n <ng-template novoTemplate=\"date-time\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <novo-date-time-picker-input [attr.id]=\"control.key\" [name]=\"control.key\" [formControlName]=\"control.key\" [start]=\"control.startDate\" [end]=\"control.endDate\" [placeholder]=\"control.placeholder\" [military]=\"control.military\" [weekStart]=\"control.weekStart\" (focusEvent)=\"methods.handleFocus($event)\" (blurEvent)=\"methods.handleBlur($event)\" (changeEvent)=\"methods.emitChange($event)\" ></novo-date-time-picker-input>\n </div>\n </ng-template>\n\n <!--Address-->\n <ng-template novoTemplate=\"address\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-address [formControlName]=\"control.key\" [config]=\"control?.config\" [readOnly]=\"control?.readOnly\" (change)=\"methods.handleAddressChange($event)\" (focus)=\"methods.handleFocus($event.event, $event.field)\" (blur)=\"methods.handleBlur($event.event, $event.field)\" (validityChange)=\"methods.updateValidity()\"></novo-address>\n </div>\n </ng-template>\n\n <!--Checkbox-->\n <ng-template novoTemplate=\"checkbox\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-checkbox [formControlName]=\"control?.key\" [name]=\"control?.key\" [label]=\"control?.checkboxLabel\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [layoutOptions]=\"control?.layoutOptions\"></novo-checkbox>\n </div>\n </ng-template>\n\n <!--Checklist-->\n <ng-template novoTemplate=\"checklist\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-check-list [formControlName]=\"control.key\" [name]=\"control.key\" [options]=\"control?.options\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" (onSelect)=\"methods.modelChange($event)\"></novo-check-list>\n </div>\n </ng-template>\n\n <!--QuickNote-->\n <ng-template novoTemplate=\"quick-note\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-quick-note [formControlName]=\"control.key\" [startupFocus]=\"control?.startupFocus\" [placeholder]=\"control?.placeholder\" [config]=\"control?.config\" (change)=\"methods.modelChange($event)\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [tooltipPreline]=\"control?.tooltipPreline\"></novo-quick-note>\n </div>\n </ng-template>\n "
34309
+ template: "\n <!---Readonly--->\n <ng-template novoTemplate=\"read-only\" let-form=\"form\" let-control>\n <div>{{ form.value[control.key] }}</div>\n </ng-template>\n <!--Textbox--->\n <ng-template novoTemplate=\"textbox\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container novo-control-input-with-label\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <input *ngIf=\"control?.type !== 'number' && control?.textMaskEnabled\" [textMask]=\"control.maskOptions\" [formControlName]=\"control.key\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (input)=\"methods.emitChange($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" autocomplete>\n <input *ngIf=\"control?.type !== 'number' && !control?.textMaskEnabled\" [class.maxlength-error]=\"errors?.maxlength\" [formControlName]=\"control.key\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (input)=\"methods.emitChange($event)\" [maxlength]=\"control?.maxlength\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" autocomplete>\n <input *ngIf=\"control?.type === 'number' && control?.subType !== 'percentage'\" [class.maxlength-error]=\"errors?.maxlength\" [formControlName]=\"control.key\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (keydown)=\"methods.restrictKeys($event)\" (input)=\"methods.emitChange($event)\" [maxlength]=\"control?.maxlength\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" step=\"any\" (mousewheel)=\"numberInput.blur()\" #numberInput>\n <!-- the percentage input does not use formControlName like a normal reactive input because instead of setting the floating point value directly, it is multiplied by 100 into a percentage value -->\n <input *ngIf=\"control?.type === 'number' && control?.subType === 'percentage'\" [id]=\"control.key\" [type]=\"control?.type\" [placeholder]=\"control?.placeholder\" (keydown)=\"methods.restrictKeys($event)\" [value]=\"control?.percentValue\" [disabled]=\"control?.readOnly\" (input)=\"methods.handlePercentChange($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" step=\"any\" (mousewheel)=\"percentInput.blur()\" #percentInput>\n <label class=\"input-label\" *ngIf=\"control?.subType === 'currency'\">{{ control.currencyFormat }}</label>\n <label class=\"input-label\" *ngIf=\"control?.subType === 'percentage'\">%</label>\n </div>\n </ng-template>\n\n <!--Textarea--->\n <ng-template novoTemplate=\"text-area\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div class=\"textarea-container\" [formGroup]=\"form\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <textarea [class.maxlength-error]=\"errors?.maxlength\" [name]=\"control.key\" [attr.id]=\"control.key\" [placeholder]=\"control.placeholder\" [formControlName]=\"control.key\" autosize (input)=\"methods.handleTextAreaInput($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [maxlength]=\"control?.maxlength\"></textarea>\n </div>\n </ng-template>\n\n <!--Editor-->\n <ng-template novoTemplate=\"editor\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-editor [name]=\"control.key\" [formControlName]=\"control.key\" [startupFocus]=\"control.startupFocus\" [minimal]=\"control.minimal\" [fileBrowserImageUploadUrl]=\"control.fileBrowserImageUploadUrl\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [config]=\"control.config\"></novo-editor>\n </div>\n </ng-template>\n\n <!--AceEditor-->\n <ng-template novoTemplate=\"ace-editor\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-ace-editor [name]=\"control.key\" [formControlName]=\"control.key\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\"></novo-ace-editor>\n </div>\n </ng-template>\n\n <!--HTML5 Select-->\n <ng-template novoTemplate=\"native-select\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <select [id]=\"control.key\" [formControlName]=\"control.key\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <option *ngIf=\"control.placeholder\" value=\"\" disabled selected hidden>{{ control.placeholder }}</option>\n <option *ngFor=\"let opt of control.options\" [value]=\"opt.key\">{{opt.value}}</option>\n </select>\n </div>\n </ng-template>\n\n <!--File-->\n <ng-template novoTemplate=\"file\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-file-input [formControlName]=\"control.key\" [id]=\"control.key\" [name]=\"control.key\" [placeholder]=\"control.placeholder\" [value]=\"control.value\" [multiple]=\"control.multiple\" [layoutOptions]=\"control.layoutOptions\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" (edit)=\"methods.handleEdit($event)\" (save)=\"methods.handleSave($event)\" (delete)=\"methods.handleDelete($event)\" (upload)=\"methods.handleUpload($event)\"></novo-file-input>\n </div>\n </ng-template>\n\n <!--Tiles-->\n <ng-template novoTemplate=\"tiles\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-tiles [options]=\"control.options\" [formControlName]=\"control.key\" (onChange)=\"methods.modelChange($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [controlDisabled]=\"control.disabled\"></novo-tiles>\n </div>\n </ng-template>\n\n <!--Picker-->\n <ng-template novoTemplate=\"picker\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\">\n <novo-picker [config]=\"control.config\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" [parentScrollSelector]=\"control.parentScrollSelector\" *ngIf=\"!control.multiple\" (select)=\"methods.modelChange($event);\" (changed)=\"methods.modelChangeWithRaw($event)\" (typing)=\"methods.handleTyping($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"></novo-picker>\n <novo-chips [source]=\"control.config\" [type]=\"control.config.type\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" [maxlength]=\"control?.maxlength\" *ngIf=\"control.multiple && !control.config.columns\" [closeOnSelect]=\"control.closeOnSelect\" (changed)=\"methods.modelChangeWithRaw($event)\" (typing)=\"methods.handleTyping($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"></novo-chips>\n <novo-row-chips [source]=\"control.config\" [type]=\"control.config.type\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" *ngIf=\"control.multiple && control.config.columns\" [closeOnSelect]=\"control.closeOnSelect\" (changed)=\"methods.modelChangeWithRaw($event)\" (typing)=\"methods.handleTyping($event)\" (focus)=\"methods.handleFocus($event)\" (blur)=\"methods.handleBlur($event)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\"></novo-row-chips>\n </div>\n </ng-template>\n\n <!--Novo Select-->\n <ng-template novoTemplate=\"select\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-select [options]=\"control.options\" [headerConfig]=\"control.headerConfig\" [placeholder]=\"control.placeholder\" [formControlName]=\"control.key\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" (onSelect)=\"methods.modelChange($event)\"></novo-select>\n </div>\n </ng-template>\n\n <!--Radio-->\n <ng-template novoTemplate=\"radio\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\">\n <novo-radio [name]=\"control.key\" [formControlName]=\"control.key\" *ngFor=\"let option of control.options\" [value]=\"option.value\" [label]=\"option.label\" [checked]=\"option.value === form.value[control.key] || (form.value[control.key] && option.value === form.value[control.key].id)\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [button]=\"!!option.icon\" [icon]=\"option.icon\" [attr.data-automation-id]=\"control.key + '-' + (option?.label || option?.value)\"></novo-radio>\n </div>\n </ng-template>\n\n <!--Time-->\n <ng-template novoTemplate=\"time\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <novo-time-picker-input [attr.id]=\"control.key\" [name]=\"control.key\" [formControlName]=\"control.key\" [placeholder]=\"control.placeholder\" [military]=\"control.military\"></novo-time-picker-input>\n </div>\n </ng-template>\n\n <!--Date-->\n <ng-template novoTemplate=\"date\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <novo-date-picker-input [attr.id]=\"control.key\" [name]=\"control.key\" [formControlName]=\"control.key\" [start]=\"control.startDate\" [end]=\"control.endDate\" [disabledDateMessage]=\"control.disabledDateMessage\" [format]=\"control.dateFormat\" [allowInvalidDate]=\"control.allowInvalidDate\" [textMaskEnabled]=\"control.textMaskEnabled\" [placeholder]=\"control.placeholder\" [weekStart]=\"control.weekStart\" (focusEvent)=\"methods.handleFocus($event)\" (blurEvent)=\"methods.handleBlur($event)\" (changeEvent)=\"methods.emitChange($event)\"></novo-date-picker-input>\n </div>\n </ng-template>\n\n <!--Date and Time-->\n <ng-template novoTemplate=\"date-time\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\" class=\"novo-control-input-container\" [tooltip]=\"control.tooltip\" [tooltipPosition]=\"control.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\">\n <novo-date-time-picker-input [attr.id]=\"control.key\" [name]=\"control.key\" [formControlName]=\"control.key\" [start]=\"control.startDate\" [end]=\"control.endDate\" [placeholder]=\"control.placeholder\" [military]=\"control.military\" [weekStart]=\"control.weekStart\" (focusEvent)=\"methods.handleFocus($event)\" (blurEvent)=\"methods.handleBlur($event)\" (changeEvent)=\"methods.emitChange($event)\" ></novo-date-time-picker-input>\n </div>\n </ng-template>\n\n <!--Address-->\n <ng-template novoTemplate=\"address\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-address [formControlName]=\"control.key\" [config]=\"control?.config\" [readOnly]=\"control?.readOnly\" (change)=\"methods.handleAddressChange($event)\" (focus)=\"methods.handleFocus($event.event, $event.field)\" (blur)=\"methods.handleBlur($event.event, $event.field)\" (validityChange)=\"methods.updateValidity()\"></novo-address>\n </div>\n </ng-template>\n\n <!--Checkbox-->\n <ng-template novoTemplate=\"checkbox\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-checkbox [formControlName]=\"control?.key\" [name]=\"control?.key\" [label]=\"control?.checkboxLabel\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [layoutOptions]=\"control?.layoutOptions\"></novo-checkbox>\n </div>\n </ng-template>\n\n <!--Checklist-->\n <ng-template novoTemplate=\"checklist\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-check-list [formControlName]=\"control.key\" [name]=\"control.key\" [options]=\"control?.options\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [tooltipPreline]=\"control?.tooltipPreline\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" (onSelect)=\"methods.modelChange($event)\"></novo-check-list>\n </div>\n </ng-template>\n\n <!--QuickNote-->\n <ng-template novoTemplate=\"quick-note\" let-control let-form=\"form\" let-errors=\"errors\" let-methods=\"methods\">\n <div [formGroup]=\"form\">\n <novo-quick-note [formControlName]=\"control.key\" [startupFocus]=\"control?.startupFocus\" [placeholder]=\"control?.placeholder\" [config]=\"control?.config\" (change)=\"methods.modelChange($event)\" [tooltip]=\"control?.tooltip\" [tooltipPosition]=\"control?.tooltipPosition\" [tooltipSize]=\"control?.tooltipSize\" [removeTooltipArrow]=\"control?.removeTooltipArrow\" [tooltipAutoPosition]=\"control?.tooltipAutoPosition\" [tooltipPreline]=\"control?.tooltipPreline\"></novo-quick-note>\n </div>\n </ng-template>\n "
34271
34310
  },] }
34272
34311
  ];
34273
34312
  NovoControlTemplates.ctorParameters = function () { return [