@ieeesa-npm/groups 0.15.12 → 0.15.13

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.
@@ -439,7 +439,8 @@ var rosterImport = {
439
439
  buttons: {
440
440
  cancel: "Cancel",
441
441
  "import": "Import Roster",
442
- downloadErrorLog: "Download Error log"
442
+ downloadErrorLog: "Download Error log",
443
+ uploadNewFile: "Upload Different File"
443
444
  },
444
445
  result: {
445
446
  successCardLabel: "Rosters added successfully",
@@ -469,7 +470,8 @@ var rosterImport = {
469
470
  downloadSample: "Download Sample File",
470
471
  dropzone: "Drag and drop file upload area",
471
472
  remove: "Remove selected file",
472
- downloadErrorLog: "Download Error log"
473
+ downloadErrorLog: "Download Error log",
474
+ uploadNewFile: "Upload different file"
473
475
  }
474
476
  };
475
477
  var rosterImportHistory = {
@@ -4837,9 +4839,15 @@ class RosterImportComponent {
4837
4839
  }
4838
4840
  if (input.files.length > 1) {
4839
4841
  this.showSingleFileOnlyError();
4842
+ // Reset so re-selecting the same file triggers change again.
4843
+ input.value = '';
4840
4844
  return;
4841
4845
  }
4842
4846
  this.processFile(input.files[0]);
4847
+ // Reset the native input value so picking the same file after an error
4848
+ // still fires the change event (otherwise the browser skips it because
4849
+ // the value hasn't changed).
4850
+ input.value = '';
4843
4851
  }
4844
4852
  /**
4845
4853
  * Handles a file dropped onto the dropzone.
@@ -4936,6 +4944,22 @@ class RosterImportComponent {
4936
4944
  this.importId = null;
4937
4945
  this.importState = 'upload';
4938
4946
  }
4947
+ /**
4948
+ * Returns from the result screen to a clean upload state so the user can
4949
+ * upload a corrected file (e.g. after downloading the error log) without
4950
+ * closing and reopening the import dialog. Clears the previous file,
4951
+ * result, errors and job id.
4952
+ * @memberof RosterImportComponent
4953
+ */
4954
+ onUploadNewFile() {
4955
+ this.selectedFile = null;
4956
+ this.errorMessage = null;
4957
+ this.noDataMessage = null;
4958
+ this.uploadResult = null;
4959
+ this.jobErrors = [];
4960
+ this.importId = null;
4961
+ this.importState = 'upload';
4962
+ }
4939
4963
  /**
4940
4964
  * Runs the real import: upload → validate → confirm. The progress bar is
4941
4965
  * shown in indeterminate mode while the chain is in flight, then the
@@ -4984,6 +5008,12 @@ class RosterImportComponent {
4984
5008
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4985
5009
  handleImportError(error) {
4986
5010
  this.importState = 'upload';
5011
+ // Reset the selected file so the user can pick a new (or the same) file
5012
+ // after an error. Without this, selectedFile stays set and the dropzone
5013
+ // shows the old filename; worse, re-selecting the same file doesn't fire
5014
+ // the input's change event (the value hasn't changed), leaving the user
5015
+ // stuck.
5016
+ this.selectedFile = null;
4987
5017
  // BE error codes take priority when present (e.g. 1071 no permission, 1072
4988
5018
  // format, 1073 too large, 1074 row limit, 1075 invalid status).
4989
5019
  const errorCodes = error?.error?.body?.errorCodes;
@@ -5181,11 +5211,11 @@ class RosterImportComponent {
5181
5211
  URL.revokeObjectURL(url);
5182
5212
  }
5183
5213
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterImportComponent, deps: [{ token: RosterImportApiService }, { token: GroupsService }], target: i0.ɵɵFactoryTarget.Component }); }
5184
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RosterImportComponent, isStandalone: true, selector: "ieeesa-roster-import", inputs: { componentData: "componentData" }, outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, ngImport: i0, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n [disabled]=\"importState === 'processing'\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n &times;\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], encapsulation: i0.ViewEncapsulation.None }); }
5214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RosterImportComponent, isStandalone: true, selector: "ieeesa-roster-import", inputs: { componentData: "componentData" }, outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, ngImport: i0, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile && importState === 'upload'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n &times;\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__upload-new-btn\"\r\n (click)=\"onUploadNewFile()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.uploadNewFile ?? 'Upload different file'\"\r\n >\r\n {{ screenTexts?.buttons?.uploadNewFile ?? 'Upload Different File' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], encapsulation: i0.ViewEncapsulation.None }); }
5185
5215
  }
5186
5216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterImportComponent, decorators: [{
5187
5217
  type: Component,
5188
- args: [{ selector: 'ieeesa-roster-import', standalone: true, imports: [CommonModule, MatButtonModule, MatProgressBarModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n [disabled]=\"importState === 'processing'\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n &times;\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"] }]
5218
+ args: [{ selector: 'ieeesa-roster-import', standalone: true, imports: [CommonModule, MatButtonModule, MatProgressBarModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile && importState === 'upload'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n &times;\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__upload-new-btn\"\r\n (click)=\"onUploadNewFile()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.uploadNewFile ?? 'Upload different file'\"\r\n >\r\n {{ screenTexts?.buttons?.uploadNewFile ?? 'Upload Different File' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"] }]
5189
5219
  }], ctorParameters: function () { return [{ type: RosterImportApiService }, { type: GroupsService }]; }, propDecorators: { componentData: [{
5190
5220
  type: Input
5191
5221
  }], submitFormResponse: [{