@energycap/components 0.28.7 → 0.28.8

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.
@@ -6223,7 +6223,7 @@ class TableSelectableRowComponent {
6223
6223
  else {
6224
6224
  let rowCheckbox = (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.rowCheckboxes) === null || _b === void 0 ? void 0 : _b.at(this.rowIndex);
6225
6225
  if (!this.isHeader && !rowCheckbox) {
6226
- rowCheckbox = new FormControl(false);
6226
+ rowCheckbox = new FormControl(this.isSelected);
6227
6227
  (_c = this.context) === null || _c === void 0 ? void 0 : _c.rowCheckboxes.push(rowCheckbox);
6228
6228
  }
6229
6229
  this.formControl = this.isHeader ? this.context.selectAllCheckbox : rowCheckbox;
@@ -6242,6 +6242,9 @@ class TableSelectableRowComponent {
6242
6242
  if (changes.enabled && !this.enabled && ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.value) === true) {
6243
6243
  this.formControl.setValue(false);
6244
6244
  }
6245
+ if (changes.isSelected && this.formControl) {
6246
+ this.formControl.setValue(this.isSelected);
6247
+ }
6245
6248
  }
6246
6249
  /** Tell the header checkbox to refresh the selectAll subscription because a row was removed*/
6247
6250
  ngOnDestroy() {
@@ -6344,7 +6347,7 @@ TableSelectableRowComponent.propDecorators = {
6344
6347
  context: [{ type: Input, args: ['selectionContext',] }],
6345
6348
  rowIndex: [{ type: Input }],
6346
6349
  lockedColOptions: [{ type: Input }],
6347
- isSelected: [{ type: HostBinding, args: ['class.is-selected',] }],
6350
+ isSelected: [{ type: HostBinding, args: ['class.is-selected',] }, { type: Input }],
6348
6351
  isHeader: [{ type: HostBinding, args: ['class.is-header',] }],
6349
6352
  rowClicked: [{ type: HostListener, args: ['click', ['$event'],] }]
6350
6353
  };
@@ -6440,6 +6443,8 @@ class SearchableTableComponent {
6440
6443
  this.removeCard = false;
6441
6444
  /** Classes to add to the overlay/card element */
6442
6445
  this.overlayClasses = '';
6446
+ /** When true the overlay and table will not have flex-shrink-max but instead flex-grow */
6447
+ this.fillParentHeight = false;
6443
6448
  /**
6444
6449
  * Text displayed in the footer.
6445
6450
  * Sometimes `noDataMessage`, sometimes `noSearchResultsMessage`
@@ -6590,8 +6595,8 @@ class SearchableTableComponent {
6590
6595
  SearchableTableComponent.decorators = [
6591
6596
  { type: Component, args: [{
6592
6597
  selector: 'ec-searchable-table',
6593
- template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column flex-shrink-max {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"flex-shrink-max {{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"d-flex flex-shrink align-items-center\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto mr-2 font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"p-2 d-flex\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>",
6594
- styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:flex;flex:1 1;flex-direction:column;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}footer{font-size:.75rem;line-height:1rem}footer.has-results{color:rgba(26,26,35,.38);text-align:right}.card.has-mask{min-height:15rem}"]
6598
+ template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"{{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"d-flex flex-shrink align-items-center\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto mr-2 font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"p-2 d-flex\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>",
6599
+ styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{--ec-flex-ec-table:var(--ec-flex-properties,0 1 auto);--ec-flex-overlay-section:var(--ec-flex-properties,0 1 auto);--ec-flex-properties:0 1 auto;display:flex;flex:1 1;flex-direction:column;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-flex-ec-table);min-height:0}footer{font-size:.75rem;line-height:1rem}footer.has-results{color:rgba(26,26,35,.38);text-align:right}.card.has-mask{min-height:15rem}"]
6595
6600
  },] }
6596
6601
  ];
6597
6602
  SearchableTableComponent.ctorParameters = () => [
@@ -6635,7 +6640,8 @@ SearchableTableComponent.propDecorators = {
6635
6640
  selectable: [{ type: Input }],
6636
6641
  customContentTemplate: [{ type: Input }],
6637
6642
  removeCard: [{ type: Input }],
6638
- overlayClasses: [{ type: Input }]
6643
+ overlayClasses: [{ type: Input }],
6644
+ fillParentHeight: [{ type: Input }]
6639
6645
  };
6640
6646
 
6641
6647
  class TableDetailRowComponent {
@@ -7036,7 +7042,7 @@ class TableComponent {
7036
7042
  TableComponent.decorators = [
7037
7043
  { type: Component, args: [{
7038
7044
  selector: 'ec-table',
7039
- template: "<div class=\"selectable-table-toolbar\"\r\n *ngIf=\"hasSelection\">\r\n <ng-container *ngTemplateOutlet=\"selectionToolbarTemplate\"></ng-container>\r\n</div>\r\n<div id=\"{{id}}-scroll-container\" \r\n class=\"table-scroll-container\">\r\n <table class=\"main-table\"\r\n id=\"{{id}}\"\r\n [ecResizableTable]=\"resizable\"\r\n [containerEl]=\"el\"\r\n [sortableTable]=\"sortable\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </table>\r\n</div>",
7045
+ template: "<div class=\"selectable-table-toolbar\"\r\n *ngIf=\"hasSelection && selectionToolbarTemplate\">\r\n <ng-container *ngTemplateOutlet=\"selectionToolbarTemplate\"></ng-container>\r\n</div>\r\n<div id=\"{{id}}-scroll-container\" \r\n class=\"table-scroll-container\">\r\n <table class=\"main-table\"\r\n id=\"{{id}}\"\r\n [ecResizableTable]=\"resizable\"\r\n [containerEl]=\"el\"\r\n [sortableTable]=\"sortable\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </table>\r\n</div>",
7040
7046
  encapsulation: ViewEncapsulation.None,
7041
7047
  styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}ec-table{display:flex;min-height:0;position:relative}ec-table .table-scroll-container{flex:1 1;min-height:0;overflow-y:auto}ec-table .main-table{border-collapse:separate;border-spacing:0;font-size:.75rem;width:100%}ec-table .main-table th{border-bottom:1px solid rgba(26,26,35,.87);color:rgba(26,26,35,.66);font-weight:400;height:2rem;line-height:1rem;overflow:hidden;padding:.5rem;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}ec-table .main-table th:first-child{padding-left:1rem}ec-table .main-table th:last-child{padding-right:1rem}ec-table .main-table td{border-top:1px solid rgba(26,26,35,.18);height:2rem;line-height:1rem;overflow:hidden;padding:.5rem;text-overflow:ellipsis;vertical-align:top;white-space:nowrap}ec-table .main-table td:first-child{padding-left:1rem}ec-table .main-table td:last-child{padding-right:1rem}ec-table .main-table tbody>tr:first-child td{border-top:0}ec-table .main-table tbody>tr.is-error td{background-color:#ecc4c5}ec-table .main-table tbody>tr.is-success td{background-color:#dff0d8}ec-table .main-table tfoot td{font-weight:700}ec-table .main-table tbody>tr.is-selected,ec-table .main-table tbody>tr.is-selected>td{background-color:#dae4e9}ec-table .main-table tr.is-heading td{border-top:0;color:rgba(26,26,35,.66);font-size:.75rem;font-weight:700;line-height:1.333333333;padding-bottom:0;text-transform:uppercase;vertical-align:bottom}ec-table .main-table tr.is-heading+tr td{border-top:0}ec-table .main-table td.actions-col,ec-table .main-table th.actions-col{padding:0}ec-table .main-table td.actions-1,ec-table .main-table th.actions-1{width:2.0625rem}ec-table .main-table td.actions-2,ec-table .main-table th.actions-2{width:4.0625rem}ec-table .main-table td.actions-3,ec-table .main-table th.actions-3{width:6.0625rem}ec-table .main-table td.actions-4,ec-table .main-table th.actions-4{width:8.0625rem}ec-table .main-table td.actions-5,ec-table .main-table th.actions-5{width:10.0625rem}ec-table.is-condensed td,ec-table.is-condensed th{height:1.5rem;padding-bottom:.25rem;padding-top:.25rem}ec-table.is-condensed:not(.has-borders)>table td{border-bottom-width:0;border-top-width:0}ec-table .selectable-table-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid rgba(26,26,35,.87);display:flex;height:3rem;left:calc(var(--selection-toolbar-left, 0rem) + 1.5625rem);padding:0 .5rem;position:absolute;right:0;top:0;z-index:4}ec-table.is-scrollable>.table-scroll-container>table{position:relative}ec-table.is-scrollable>.table-scroll-container>table>thead th{background-color:#fff;position:sticky!important;top:0;z-index:1}ec-table.is-scrollable>.table-scroll-container>table>tfoot td{background-color:#fff;bottom:0;position:sticky!important;z-index:1}ec-table.is-scrollable.bg-body>.table-scroll-container>table>tfoot td,ec-table.is-scrollable.bg-body>.table-scroll-container>table>thead th{background-color:#f1f3f4}ec-table.is-sortable th[data-sortfield]{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}ec-table.is-sortable th[data-sortfield].is-resizable .content-wrapper{cursor:pointer;display:flex}ec-table.is-sortable th[data-sortfield].is-resizable .content{flex:0 1 auto}ec-table.is-sortable th[data-sortfield].is-resizable .content-wrapper:after{background-position:50%;background-repeat:no-repeat;content:\"\";display:none;flex:none;height:.875rem;margin:0 .25rem;vertical-align:top;width:.875rem}ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-asc .content-wrapper:after,ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-desc .content-wrapper:after{background-image:url('data:image/svg+xml;charset=utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path fill=\"rgba(26, 26, 35, 0.66)\" d=\"M14 8.828V27a2 2 0 1 0 4 0V8.828l4.586 4.586a2 2 0 0 0 2.828-2.828l-8-8a2 2 0 0 0-2.828 0l-8 8a2 2 0 0 0 2.828 2.828L14 8.828z\"/></svg>');display:inline-block}ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-desc .content-wrapper:after{transform:scaleY(-1)}ec-table.is-sortable th[data-sortfield].is-resizable.text-right .content-wrapper{flex-direction:row-reverse}ec-table.is-sortable th[data-sortfield]:not(.is-resizable){cursor:pointer}ec-table.is-sortable th[data-sortfield]:not(.is-resizable):after{background-position:50%;background-repeat:no-repeat;content:\"\";display:none;height:.875rem;margin:0 .25rem;vertical-align:top;width:.875rem}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-asc:after,ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-desc:after{background-image:url('data:image/svg+xml;charset=utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path fill=\"rgba(26, 26, 35, 0.66)\" d=\"M14 8.828V27a2 2 0 1 0 4 0V8.828l4.586 4.586a2 2 0 0 0 2.828-2.828l-8-8a2 2 0 0 0-2.828 0l-8 8a2 2 0 0 0 2.828 2.828L14 8.828z\"/></svg>');display:inline-block}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-desc:after{transform:scaleY(-1)}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right:after{content:\"\";display:none!important}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right:before{background-position:50%;background-repeat:no-repeat;content:\"\";display:none;height:.875rem;margin:0 .25rem;vertical-align:top;width:.875rem}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-asc:before,ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-desc:before{background-image:url('data:image/svg+xml;charset=utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><path fill=\"rgba(26, 26, 35, 0.66)\" d=\"M14 8.828V27a2 2 0 1 0 4 0V8.828l4.586 4.586a2 2 0 0 0 2.828-2.828l-8-8a2 2 0 0 0-2.828 0l-8 8a2 2 0 0 0 2.828 2.828L14 8.828z\"/></svg>');display:inline-block}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-desc:before{transform:scaleY(-1)}ec-table.is-resizable .main-table{table-layout:fixed;width:100%}ec-table.is-resizable th.is-resizable{overflow:visible;position:relative;z-index:1}ec-table.is-resizable th.is-resizable.is-active{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}ec-table.is-resizable th.is-resizable.is-active .handle:after{background-color:#0084a9}ec-table.is-resizable th.is-resizable .handle{height:100%;padding:.5rem 0 .5rem 10px;position:absolute;right:-7px;right:0;top:0;width:13px;z-index:30}ec-table.is-resizable th.is-resizable .handle:after{content:\"\";display:block;height:100%;position:relative;transition:background-color .3s ease}ec-table.is-resizable th.is-resizable .handle:hover{cursor:col-resize}ec-table.is-resizable th.is-resizable .handle:hover:after{background-color:#0084a9}ec-table.is-resizable th.is-resizable .handle:before{background-color:#d2d7d9;bottom:.5rem;content:\"\";display:block;position:absolute;right:0;top:.5rem;width:1px}ec-table.is-resizable th.is-resizable .content{overflow:hidden;text-overflow:clip;white-space:nowrap}ec-table.is-resizable th.is-resizable:last-child .handle:before{display:none}ec-table.is-resizable td,ec-table.is-resizable th{overflow:hidden;text-overflow:clip;white-space:nowrap}ec-table.is-selectable .main-table thead th{height:3rem}ec-table.is-selectable .main-table tbody>tr:hover>td{background-color:#bfe0e9;border-color:transparent;cursor:pointer}ec-table.is-selectable .main-table tbody>tr:hover.is-selected{background-color:#dae4e9}ec-table.is-selectable .main-table tbody>tr:hover+tr>td{border-color:#bfe0e9}ec-table.is-selectable th.is-resizable .handle{padding-bottom:1rem;padding-top:1rem}ec-table.is-selectable th.is-resizable .handle:before{bottom:1rem;top:1rem}ec-table.is-master-detail>table{table-layout:fixed}ec-table.is-form-table td{border-top:0;font-size:1rem;height:2.5rem;line-height:2rem;padding-bottom:.25rem;padding-top:.25rem}ec-table.is-form-table tr:first-child td{height:2.75rem;padding-top:.5rem}ec-table.is-form-table tr:last-child td{height:2.75rem;padding-bottom:.5rem}ec-table.is-fixed .main-table{table-layout:fixed}"]
7042
7048
  },] }
@@ -7923,6 +7929,7 @@ class WizardButtonsComponent {
7923
7929
  this.nextLabel = 'Next_TC';
7924
7930
  this.backLabel = 'Back_TC';
7925
7931
  this.cancelLabel = 'Cancel';
7932
+ this.saveLabel = 'Save';
7926
7933
  this.cancelId = 'cancelWizardDialog';
7927
7934
  this.saveId = 'saveWizardDialog';
7928
7935
  this.tabindex = 0;
@@ -7947,7 +7954,7 @@ class WizardButtonsComponent {
7947
7954
  WizardButtonsComponent.decorators = [
7948
7955
  { type: Component, args: [{
7949
7956
  selector: 'ec-wizard-buttons',
7950
- template: "<ec-button id=\"{{saveId}}\"\r\n class=\"ml-2\"\r\n *ngIf=\"!hideNextSaveButton\"\r\n type=\"primary\"\r\n [label]=\"(!showSave ? nextLabel : 'Save')\"\r\n [tabindex]=\"!tabindex ? 0 : tabindex\"\r\n (clicked)=\"!showSave ? onNextTab() : onSave($event)\"\r\n [disabled]=\"status?.status === 'pending' || status?.status === 'error'\">\r\n</ec-button>\r\n<ec-button id=\"previousTab\"\r\n class=\"ml-2\"\r\n *ngIf=\"showBack\"\r\n type=\"secondary\"\r\n [label]=\"backLabel\"\r\n [tabindex]=\"!tabindex ? 0 : tabindex+1\"\r\n (clicked)=\"onPreviousTab()\">\r\n</ec-button>\r\n<ec-button id=\"{{cancelId}}\"\r\n type=\"secondary\"\r\n [label]=\"cancelLabel\"\r\n [tabindex]=\"!tabindex ? 0 : tabindex+2\"\r\n (clicked)=\"onCancel()\">\r\n</ec-button>\r\n",
7957
+ template: "<ec-button id=\"{{saveId}}\"\r\n class=\"ml-2\"\r\n *ngIf=\"!hideNextSaveButton\"\r\n type=\"primary\"\r\n [label]=\"(!showSave ? nextLabel : saveLabel)\"\r\n [tabindex]=\"!tabindex ? 0 : tabindex\"\r\n (clicked)=\"!showSave ? onNextTab() : onSave($event)\"\r\n [disabled]=\"status?.status === 'pending' || status?.status === 'error'\">\r\n</ec-button>\r\n<ec-button id=\"previousTab\"\r\n class=\"ml-2\"\r\n *ngIf=\"showBack\"\r\n type=\"secondary\"\r\n [label]=\"backLabel\"\r\n [tabindex]=\"!tabindex ? 0 : tabindex+1\"\r\n (clicked)=\"onPreviousTab()\">\r\n</ec-button>\r\n<ec-button id=\"{{cancelId}}\"\r\n type=\"secondary\"\r\n [label]=\"cancelLabel\"\r\n [tabindex]=\"!tabindex ? 0 : tabindex+2\"\r\n (clicked)=\"onCancel()\">\r\n</ec-button>\r\n",
7951
7958
  styles: [":host{display:flex;flex-direction:row-reverse}:host-context(ec-page-view .titlebar>.actions){flex-direction:row}"]
7952
7959
  },] }
7953
7960
  ];
@@ -7956,6 +7963,7 @@ WizardButtonsComponent.propDecorators = {
7956
7963
  nextLabel: [{ type: Input }],
7957
7964
  backLabel: [{ type: Input }],
7958
7965
  cancelLabel: [{ type: Input }],
7966
+ saveLabel: [{ type: Input }],
7959
7967
  cancelId: [{ type: Input }],
7960
7968
  saveId: [{ type: Input }],
7961
7969
  tabindex: [{ type: Input }],
@@ -7975,8 +7983,8 @@ class WizardProgressComponent {
7975
7983
  WizardProgressComponent.decorators = [
7976
7984
  { type: Component, args: [{
7977
7985
  selector: 'ec-wizard-progress',
7978
- template: "<div *ngFor=\"let tab of tabGroup?.items; index as index\"\r\n class=\"progress-tab font-color-secondary mx-3\"\r\n [class.is-active]=\"currentTab?.id === tab.id\">\r\n <i class=\"ec-icon icon-circle-o mr-1\"\r\n *ngIf=\"!tab.completed\"></i>\r\n <i class=\"ec-icon icon-check-circle mr-1\"\r\n *ngIf=\"tab.completed\"></i>\r\n <span>{{index+1}}. {{tab.label | translate}}</span>\r\n</div>",
7979
- styles: [".progress-tab,:host{align-items:center;display:flex}.progress-tab.is-active{font-weight:700}.progress-tab:not(.is-active)>i{opacity:.4}"]
7986
+ template: "<div *ngFor=\"let tab of tabGroup?.items; index as index; first as isFirst; last as isLast\"\r\n class=\"progress-tab\"\r\n [class.ml-2]=\"!isFirst\"\r\n [class.is-active]=\"currentTab?.id === tab.id\">\r\n\r\n <i *ngIf=\"tab.completed\"\r\n class=\"ec-icon icon-check-circle mr-1 font-color-success\"></i>\r\n <span *ngIf=\"!tab.completed\">{{index+1}}.&nbsp;</span>\r\n <span>{{tab.label | translate}}</span>\r\n <i *ngIf=\"!isLast\"\r\n class=\"ec-icon icon-angle-down rotate-270 ml-2\"></i>\r\n</div>",
7987
+ styles: [":host{padding:0 1rem}.progress-tab,:host{align-items:center;display:flex}.progress-tab.is-active{font-weight:700}"]
7980
7988
  },] }
7981
7989
  ];
7982
7990
  WizardProgressComponent.ctorParameters = () => [];
@@ -8116,6 +8124,189 @@ FormControlLabelComponent.propDecorators = {
8116
8124
  hideValidationMessage: [{ type: Input }]
8117
8125
  };
8118
8126
 
8127
+ ;
8128
+ class ItemPickerSelectableContext extends TableSelectableRowContext {
8129
+ constructor() {
8130
+ super(...arguments);
8131
+ /** id/value map of the selected items. Used for keeping track of what is selected */
8132
+ this.selectedItemsMap = new Map();
8133
+ /**
8134
+ * Gives a way to tell the picker component that the map was modified externally and to update
8135
+ * the available/selected lists
8136
+ */
8137
+ this.selectedItemsMapChanged = new Subject();
8138
+ }
8139
+ }
8140
+ class ItemPickerComponent {
8141
+ constructor() {
8142
+ /** Identifier for the component. This will be added to the beginning of all internal action elements */
8143
+ this.id = '';
8144
+ /** Title displayed above the available items table */
8145
+ this.availableTitle = '';
8146
+ /** Title displayed above the selected items list */
8147
+ this.selectedTitle = '';
8148
+ /** The type of item being selected. Ex. Meters, Addresses */
8149
+ this.itemName = '';
8150
+ /** Used by the internal Searchable Table when there is no available items to choose from based on the getItems results. Do not supply
8151
+ * to inherit the default message.
8152
+ */
8153
+ this.noDataMessage = '';
8154
+ /** List of available items to pick from */
8155
+ this.availableItems = [];
8156
+ /**
8157
+ * Selected items array. Created from the selected items map. Binding to the
8158
+ * map iterate values caused angular "expression changed" errors so after a map
8159
+ * update this gets set to the values
8160
+ */
8161
+ this.selectedItems = [];
8162
+ /** Track by used for the searchable table rows */
8163
+ this.trackByIndex = (index) => index;
8164
+ this.tableStatus = new Overlay('hasData');
8165
+ /** Used to shut down our subscriptions when the component is destroyed */
8166
+ this.destroyed = new Subject();
8167
+ }
8168
+ ngOnInit() {
8169
+ this.setupRowCheckboxesWatcher();
8170
+ this.setupSelectedItemsChangedWatcher();
8171
+ }
8172
+ /**
8173
+ * Watch for changes and react if the custom item template value changes
8174
+ */
8175
+ ngOnChanges() {
8176
+ this.setInternalizedTemplates();
8177
+ }
8178
+ ngOnDestroy() {
8179
+ this.destroyed.next();
8180
+ this.destroyed.unsubscribe();
8181
+ }
8182
+ /**
8183
+ * Called by the searchable table when a new set of items are returned from the getItems call
8184
+ * @param results
8185
+ */
8186
+ onItemsChange(results) {
8187
+ // Check to see if any of the items are marked to be selected by default and if so
8188
+ // add them to the map.
8189
+ results.items.forEach(item => {
8190
+ var _a, _b;
8191
+ if (item.defaultSelected && !((_a = this.selectionContext) === null || _a === void 0 ? void 0 : _a.selectedItemsMap.has(item.id))) {
8192
+ (_b = this.selectionContext) === null || _b === void 0 ? void 0 : _b.selectedItemsMap.set(item.id, item);
8193
+ }
8194
+ });
8195
+ this.availableItems = results.items;
8196
+ }
8197
+ /**
8198
+ * Called when the clear selection link button is clicked
8199
+ */
8200
+ onClearSelectionClick() {
8201
+ this.selectionContext.selectedItemsMap = new Map();
8202
+ this.selectionContext.rowCheckboxes.controls.forEach(control => control.setValue(false));
8203
+ }
8204
+ /**
8205
+ * Called when the remove item button is clicked for a selected item
8206
+ * @param removeItem
8207
+ */
8208
+ removeSelectedItem(removeItem) {
8209
+ let foundIndex = this.availableItems.findIndex(item => item.id === removeItem.id);
8210
+ if (foundIndex > -1) {
8211
+ // Update the row checkbox since the item exists in the page being viewed
8212
+ // The value change handler for row checkboxes will update the map/selected items
8213
+ this.selectionContext.rowCheckboxes.at(foundIndex).setValue(false);
8214
+ }
8215
+ else {
8216
+ // The item being removed is not on the current page so just update the
8217
+ // map/selected items
8218
+ this.selectionContext.selectedItemsMap.delete(removeItem.id);
8219
+ this.selectedItems = Array.from(this.selectionContext.selectedItemsMap.values());
8220
+ }
8221
+ }
8222
+ /**
8223
+ * Watch for changes to the row checkboxes form array and update the selected items
8224
+ * list
8225
+ */
8226
+ setupRowCheckboxesWatcher() {
8227
+ var _a;
8228
+ (_a = this.selectionContext) === null || _a === void 0 ? void 0 : _a.rowCheckboxes.valueChanges.pipe(
8229
+ // Debounce 10 is simply to not spam the change handler on load/page change
8230
+ // Otherwise this will get called every time a new row is added to the table
8231
+ debounceTime(10), takeUntil(this.destroyed)).subscribe((rowValues) => {
8232
+ var _a;
8233
+ rowValues.forEach((selected, index) => {
8234
+ var _a, _b, _c, _d;
8235
+ let availableItem = this.availableItems[index];
8236
+ if (!selected && ((_a = this.selectionContext) === null || _a === void 0 ? void 0 : _a.selectedItemsMap.has(availableItem.id))) {
8237
+ (_b = this.selectionContext) === null || _b === void 0 ? void 0 : _b.selectedItemsMap.delete(availableItem.id);
8238
+ }
8239
+ else if (selected && !((_c = this.selectionContext) === null || _c === void 0 ? void 0 : _c.selectedItemsMap.has(availableItem.id))) {
8240
+ (_d = this.selectionContext) === null || _d === void 0 ? void 0 : _d.selectedItemsMap.set(availableItem.id, availableItem);
8241
+ }
8242
+ });
8243
+ this.selectedItems = Array.from((_a = this.selectionContext) === null || _a === void 0 ? void 0 : _a.selectedItemsMap.values());
8244
+ });
8245
+ }
8246
+ /**
8247
+ * Watch to be told if changes to the map were made outside of the component and if so update
8248
+ * the array displayed in the selected list and select checkboxes for visible available items
8249
+ */
8250
+ setupSelectedItemsChangedWatcher() {
8251
+ this.selectionContext.selectedItemsMapChanged.pipe(takeUntil(this.destroyed)).subscribe(() => {
8252
+ var _a;
8253
+ if (this.selectionContext) {
8254
+ this.selectedItems = Array.from((_a = this.selectionContext) === null || _a === void 0 ? void 0 : _a.selectedItemsMap.values());
8255
+ this.availableItems.forEach((item, index) => {
8256
+ if (this.selectionContext.selectedItemsMap.has(item.id)) {
8257
+ this.selectionContext.rowCheckboxes.at(index).setValue(true);
8258
+ }
8259
+ });
8260
+ }
8261
+ });
8262
+ }
8263
+ setInternalizedTemplates() {
8264
+ if (this.customAvailableHeaderTemplate) {
8265
+ this.internalizedAvailableHeaderTemplate = this.customAvailableHeaderTemplate;
8266
+ }
8267
+ else {
8268
+ this.internalizedAvailableHeaderTemplate = this.defaultAvailableHeaderTemplate;
8269
+ }
8270
+ if (this.customAvailableItemTemplate) {
8271
+ this.internalizedAvailableItemTemplate = this.customAvailableItemTemplate;
8272
+ }
8273
+ else {
8274
+ this.internalizedAvailableItemTemplate = this.defaultAvailableItemTemplate;
8275
+ }
8276
+ if (this.customSelectedItemTemplate) {
8277
+ this.internalizedSelectedItemTemplate = this.customSelectedItemTemplate;
8278
+ }
8279
+ else {
8280
+ this.internalizedSelectedItemTemplate = this.defaultSelectedItemTemplate;
8281
+ }
8282
+ }
8283
+ }
8284
+ ItemPickerComponent.decorators = [
8285
+ { type: Component, args: [{
8286
+ selector: 'ec-item-picker',
8287
+ template: "<div class=\"d-flex flex-grow card\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\">\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\">\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <div class=\"d-flex flex-column flex-grow\">\r\n <div class=\"d-flex flex-shrink align-items-center px-2\"\r\n [style.height.rem]=\"3\">\r\n <span class=\"text-heading-2\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItems.length\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"ml-auto\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>\r\n ClearSelection_TC\r\n </a>\r\n </div>\r\n\r\n <div class=\"d-flex flex-column flex-grow scroll-y\">\r\n <ng-container *ngIf=\"selectedItems.length\">\r\n <div *ngFor=\"let item of selectedItems; last as isLast\"\r\n class=\"d-flex align-items-center pl-2\"\r\n [class.border-bottom]=\"!isLast\">\r\n <ng-container *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\"></ng-container>\r\n\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n class=\"ml-auto\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </div>\r\n </ng-container>\r\n <span *ngIf=\"!selectedItems.length\"\r\n class=\"px-2 pt-2 font-size-small\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">\r\n ItemPickerNoItemsSelected_SC\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"selectedItems.length\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n [style.height.px]=\"40\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate let-item>\r\n {{item.label}}\r\n</ng-template>",
8288
+ styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}::ng-deep ec-table .main-table thead th{border-bottom:0}ec-searchable-table{border-right:2px solid #d2d7d9}.card{border:0}"]
8289
+ },] }
8290
+ ];
8291
+ ItemPickerComponent.ctorParameters = () => [];
8292
+ ItemPickerComponent.propDecorators = {
8293
+ id: [{ type: Input }],
8294
+ availableTitle: [{ type: Input }],
8295
+ selectedTitle: [{ type: Input }],
8296
+ itemName: [{ type: Input }],
8297
+ formModel: [{ type: Input }],
8298
+ customAvailableHeaderTemplate: [{ type: Input }],
8299
+ customAvailableItemTemplate: [{ type: Input }],
8300
+ customSelectedItemTemplate: [{ type: Input }],
8301
+ ready: [{ type: Input }],
8302
+ getItems: [{ type: Input }],
8303
+ selectionContext: [{ type: Input }],
8304
+ noDataMessage: [{ type: Input }],
8305
+ defaultAvailableHeaderTemplate: [{ type: ViewChild, args: ['defaultAvailableHeaderTemplate', { static: true },] }],
8306
+ defaultAvailableItemTemplate: [{ type: ViewChild, args: ['defaultAvailableItemTemplate', { static: true },] }],
8307
+ defaultSelectedItemTemplate: [{ type: ViewChild, args: ['defaultSelectedItemTemplate', { static: true },] }]
8308
+ };
8309
+
8119
8310
  class ComponentsModule {
8120
8311
  /**
8121
8312
  * Providing services through the forRoot pattern here ensures that the components module and the importing
@@ -8194,7 +8385,8 @@ ComponentsModule.decorators = [
8194
8385
  RelativeDatePipe,
8195
8386
  ResizableComponent,
8196
8387
  HighlightTextPipe,
8197
- FormControlLabelComponent
8388
+ FormControlLabelComponent,
8389
+ ItemPickerComponent
8198
8390
  ],
8199
8391
  imports: [
8200
8392
  CommonModule,
@@ -8270,7 +8462,8 @@ ComponentsModule.decorators = [
8270
8462
  RelativeDatePipe,
8271
8463
  ResizableComponent,
8272
8464
  HighlightTextPipe,
8273
- FormControlLabelComponent
8465
+ FormControlLabelComponent,
8466
+ ItemPickerComponent
8274
8467
  ]
8275
8468
  },] }
8276
8469
  ];
@@ -9245,5 +9438,5 @@ class HierarchyBaseTestInjectorFactory {
9245
9438
  * Generated bundle index. Do not edit.
9246
9439
  */
9247
9440
 
9248
- export { AppBarComponent, AvatarComponent, BannerComponent, ButtonComponent, CacheService, CheckboxComponent, ClickAreaForDirective, CollapsibleToggleComponent, ComboboxComponent, ComponentsModule, ConfirmComponent, ConfirmDialogContext, CopyButtonDirective, CustomValidators, DateDisplayPipe, DateTimeHelper, DialogCloseDuration, DialogCloseEvent, DialogCloseLatestEvent, DialogComponent, DialogEvent, DialogGroupComponent, DialogOpenDuration, DialogOpenEndEvent, DialogOpenStartEvent, DialogResult, DialogService, DropdownComponent, ErrorService, FileTypeExtensions, FileUploadComponent, FormControlBase, FormControlComponent, FormControlLabelComponent, FormGroupComponent, FormGroupHelper, HierarchyBase, HierarchyBaseTestInjectorFactory, HierarchyItem, HierarchyMocks, HierarchyTreeComponent, HighlightTextPipe, IfViewportWidthDirective, ItemDisplayComponent, JsonDisplayComponent, JsonHelper, MenuComponent, MockActivatedRoute, MockDateDisplayPipe, MockDialog, MockDialogContent, MockTranslateService, MockTranslationHelperService, NavGroup, NavItemActiveDirective, NumericboxComponent, Overlay, PageBaseComponent, PageBaseComponentTestHelper, PageBaseComponentTestInjectorFactory, PageInitResult, PageStatus, PageStatuses, PageTitleComponent, PageViewComponent, PanelCloseDuration, PanelOpenDuration, PopoverComponent, PopupContainerDirective, RadioButtonComponent, RadioButtonOption, RelativeDatePipe, ResizableBase, ResizableColumnComponent, ResizableComponent, RowCountPipe, ScrollService, SearchableTableComponent, SelectComponent, SpinnerComponent, SplashComponent, SplashService, SpyFactory, TableComponent, TableLockedColumnComponent, TableMasterHeaderRowComponent, TableMasterRowComponent, TablePaginationComponent, TableSelectableRowComponent, TableSelectableRowContext, TabsComponent, Tag, TagsComponent, TelemetryService, TelemetryTrackerService, TextboxComponent, TimeDisplayPipe, ToastComponent, ToastEvent, ToastService, ToasterComponent, TreeComponent, UnicodeStrings, UserPreferenceService, ValidationMessageService, ViewOverlayComponent, WindowService, WizardBaseComponent, WizardButtonsComponent, WizardProgressComponent, canadianPostalCodeRegex, clickEvent, dateInputFormatRegex, domainPattern, findAllSpacesPattern, forEachFormControl, getApiError, getControlValue, getDecimalPattern, integerPattern, isApiError, menuAnimationSpeed, mockRouterFactory, numericboxValidation, orderByIgnoreCase, otherZipCodeRegex, phoneNumberValidationPattern, sortByIgnoreCase, textboxValidation, unitedStatesZipCodeRegex, urlValidationPattern, validateFormGroupValuesAreUnique, ResizableTableDirective as ɵa, AvatarService as ɵb, TableDetailRowComponent as ɵc };
9441
+ export { AppBarComponent, AvatarComponent, BannerComponent, ButtonComponent, CacheService, CheckboxComponent, ClickAreaForDirective, CollapsibleToggleComponent, ComboboxComponent, ComponentsModule, ConfirmComponent, ConfirmDialogContext, CopyButtonDirective, CustomValidators, DateDisplayPipe, DateTimeHelper, DialogCloseDuration, DialogCloseEvent, DialogCloseLatestEvent, DialogComponent, DialogEvent, DialogGroupComponent, DialogOpenDuration, DialogOpenEndEvent, DialogOpenStartEvent, DialogResult, DialogService, DropdownComponent, ErrorService, FileTypeExtensions, FileUploadComponent, FormControlBase, FormControlComponent, FormControlLabelComponent, FormGroupComponent, FormGroupHelper, HierarchyBase, HierarchyBaseTestInjectorFactory, HierarchyItem, HierarchyMocks, HierarchyTreeComponent, HighlightTextPipe, IfViewportWidthDirective, ItemDisplayComponent, ItemPickerComponent, ItemPickerSelectableContext, JsonDisplayComponent, JsonHelper, MenuComponent, MockActivatedRoute, MockDateDisplayPipe, MockDialog, MockDialogContent, MockTranslateService, MockTranslationHelperService, NavGroup, NavItemActiveDirective, NumericboxComponent, Overlay, PageBaseComponent, PageBaseComponentTestHelper, PageBaseComponentTestInjectorFactory, PageInitResult, PageStatus, PageStatuses, PageTitleComponent, PageViewComponent, PanelCloseDuration, PanelOpenDuration, PopoverComponent, PopupContainerDirective, RadioButtonComponent, RadioButtonOption, RelativeDatePipe, ResizableBase, ResizableColumnComponent, ResizableComponent, RowCountPipe, ScrollService, SearchableTableComponent, SelectComponent, SpinnerComponent, SplashComponent, SplashService, SpyFactory, TableComponent, TableLockedColumnComponent, TableMasterHeaderRowComponent, TableMasterRowComponent, TablePaginationComponent, TableSelectableRowComponent, TableSelectableRowContext, TabsComponent, Tag, TagsComponent, TelemetryService, TelemetryTrackerService, TextboxComponent, TimeDisplayPipe, ToastComponent, ToastEvent, ToastService, ToasterComponent, TreeComponent, UnicodeStrings, UserPreferenceService, ValidationMessageService, ViewOverlayComponent, WindowService, WizardBaseComponent, WizardButtonsComponent, WizardProgressComponent, canadianPostalCodeRegex, clickEvent, dateInputFormatRegex, domainPattern, findAllSpacesPattern, forEachFormControl, getApiError, getControlValue, getDecimalPattern, integerPattern, isApiError, menuAnimationSpeed, mockRouterFactory, numericboxValidation, orderByIgnoreCase, otherZipCodeRegex, phoneNumberValidationPattern, sortByIgnoreCase, textboxValidation, unitedStatesZipCodeRegex, urlValidationPattern, validateFormGroupValuesAreUnique, ResizableTableDirective as ɵa, AvatarService as ɵb, TableDetailRowComponent as ɵc };
9249
9442
  //# sourceMappingURL=energycap-components.js.map