@skyux/forms 12.0.0-alpha.0 → 12.0.0-alpha.2

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.
@@ -1305,10 +1305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1305
1305
  class SkyFileAttachmentService {
1306
1306
  checkFiles(files, minFileSize, maxFileSize, acceptedTypes, validateFn) {
1307
1307
  const fileResults = [];
1308
- for (let index = 0; index < files.length; index++) {
1309
- const fileItem = {
1310
- file: files.item(index),
1311
- };
1308
+ files.forEach((fileItem) => {
1312
1309
  if (fileItem.file.size < minFileSize) {
1313
1310
  fileItem.errorType = 'minFileSize';
1314
1311
  fileItem.errorParam = minFileSize.toString();
@@ -1335,7 +1332,7 @@ class SkyFileAttachmentService {
1335
1332
  else {
1336
1333
  fileResults.push(fileItem);
1337
1334
  }
1338
- }
1335
+ });
1339
1336
  return fileResults;
1340
1337
  }
1341
1338
  /**
@@ -1810,8 +1807,16 @@ class SkyFileAttachmentComponent {
1810
1807
  }
1811
1808
  }
1812
1809
  }
1813
- #handleFiles(files) {
1814
- if (files) {
1810
+ #handleFiles(fileList) {
1811
+ if (fileList) {
1812
+ const files = [];
1813
+ if ('item' in fileList) {
1814
+ for (let index = 0; index < fileList.length; index++) {
1815
+ files.push({
1816
+ file: fileList.item(index),
1817
+ });
1818
+ }
1819
+ }
1815
1820
  const processedFiles = this.#fileAttachmentService.checkFiles(files, this.minFileSize, this.maxFileSize, this.acceptedTypes, this.validateFn);
1816
1821
  for (const file of processedFiles) {
1817
1822
  if (file.errorType) {
@@ -1854,7 +1859,7 @@ class SkyFileAttachmentComponent {
1854
1859
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: SkyFileAttachmentComponent, isStandalone: true, selector: "sky-file-attachment", inputs: { acceptedTypes: "acceptedTypes", acceptedTypesErrorMessage: "acceptedTypesErrorMessage", disabled: ["disabled", "disabled", booleanAttribute], helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", helpKey: "helpKey", labelText: "labelText", labelHidden: ["labelHidden", "labelHidden", booleanAttribute], hintText: "hintText", maxFileSize: "maxFileSize", minFileSize: "minFileSize", stacked: ["stacked", "stacked", booleanAttribute], validateFn: "validateFn", required: ["required", "required", booleanAttribute] }, outputs: { fileChange: "fileChange", fileClick: "fileClick" }, host: { properties: { "class.sky-form-field-stacked": "this.stacked" } }, providers: [
1855
1860
  SkyFileAttachmentService,
1856
1861
  { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
1857
- ], queries: [{ propertyName: "labelComponents", predicate: SkyFileAttachmentLabelComponent }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInputRef"], descendants: true }], hostDirectives: [{ directive: i1$1.SkyThemeComponentClassDirective }], ngImport: i0, template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [ngClass]=\"{\n 'sky-control-label-required':\n !labelText && isRequired && hasLabelComponent\n }\"\n >\n @if (labelText) {\n @if (!labelHidden) {\n <span\n class=\"sky-control-label\"\n [attr.id]=\"labelId\"\n [ngClass]=\"{\n 'sky-control-label-required': isRequired\n }\"\n >{{ labelText }}</span\n >\n }\n } @else {\n <ng-content select=\"sky-file-attachment-label\" />\n }\n @if (isRequired && (hasLabelComponent || labelText)) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (labelText && (helpPopoverContent || helpKey)) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n #fileDropDescriptionRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n skyId\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n #fileInputRef\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"isRequired\"\n (change)=\"fileChangeEvent($event)\"\n />\n @if (showFileAttachmentButton) {\n <button\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n [attr.aria-describedby]=\"\n hintText && hintTextEl.id\n | skyFileAttachmentJoinIds: fileDropDescriptionRef.id\n \"\n [attr.aria-labelledby]=\"\n attachButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [attr.aria-invalid]=\"!!(ngControl?.errors ?? fileErrorValidation)\"\n [attr.aria-errormessage]=\"\n !!(ngControl?.errors ?? fileErrorValidation) ? errorId : undefined\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n (blur)=\"onButtonBlur()\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n }\n @if (value && !isImage && currentThemeName === 'modern') {\n <sky-icon class=\"sky-file-attachment-icon\" icon=\"file-o\" />\n }\n @if (value || currentThemeName === 'default') {\n <span class=\"sky-file-attachment-file-link\">\n @if (value) {\n <a\n [href]=\"isData ? value.url : undefined\"\n [download]=\"isData ? value.file.name : undefined\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n } @else {\n <span class=\"sky-file-attachment-none sky-font-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n }\n </span>\n }\n\n @if (value) {\n <button\n class=\"sky-btn sky-btn-icon-borderless sky-file-attachment-delete\"\n type=\"button\"\n [attr.aria-labelledby]=\"\n deleteButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [disabled]=\"disabled\"\n (click)=\"deleteFileAttachment()\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n }\n </div>\n\n @if (value && isImage) {\n <img\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n }\n</div>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-file-attachment-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n</div>\n\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors ?? fileErrorValidation\"\n [labelText]=\"labelText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n @if (ngControl?.touched) {\n @if (fileErrorName === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n } @else if (fileErrorName === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n } @else if (fileErrorName === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n }\n }\n</sky-form-errors>\n\n<span\n #attachButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n }}\n</span>\n\n<span\n #deleteButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{ 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName }}\n</span>\n", styles: [".sky-file-attachment-wrapper:not(.sky-theme-modern *){--sky-override-file-attachment-accept-border-color: #72bf44;--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-control-label-color: #212327;--sky-override-file-attachment-control-label-font-size: 15px;--sky-override-file-attachment-delete-margin-left: 0;--sky-override-file-attachment-file-link-padding: 0 5px;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #212327;--sky-override-file-attachment-preview-img-border: none;--sky-override-file-attachment-preview-img-box-shadow: 0 0 5px #666;--sky-override-file-attachment-preview-img-margin: 10px;--sky-override-file-attachment-preview-img-width: auto;--sky-override-file-attachment-reject-border-color: #ef4044;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-display: block;--sky-override-file-attachment-upload-padding-right: 8px;--sky-override-file-attachment-wrapper-display: inline-block}.sky-file-attachment-wrapper:not(.sky-theme-modern *) .sky-file-attachment-delete{padding:0}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper{--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-btn-non-stacked-margin: 0 10px 0 0;--sky-override-file-attachment-control-label-color: #686c73;--sky-override-file-attachment-control-label-font-size: 13px;--sky-override-file-attachment-delete-height: 40px;--sky-override-file-attachment-delete-width: 40px;--sky-override-file-attachment-file-icon-font-size: 30px;--sky-override-file-attachment-file-icon-line-height: normal;--sky-override-file-attachment-file-icon-margin: 5px 10px 5px 5px;--sky-override-file-attachment-file-link-margin: 10px 0 0 0;--sky-override-file-attachment-file-link-padding: 0;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #686c73;--sky-override-file-attachment-preview-img-border: var( --sky-border-width-separator-dark ) solid var(--sky-color-border-separator-dark);--sky-override-file-attachment-preview-img-box-shadow: none;--sky-override-file-attachment-preview-img-margin: 0 10px 0 0;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-with-icon-align-items: flex-start}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper .sky-file-attachment-delete{padding:0}:host.sky-cmp-theme-default{--sky-override-file-attachment-hint-text-margin-top: var( --sky-margin-stacked-xs )}:host.sky-form-field-stacked{display:block}:host:not(.sky-form-field-stacked) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:var(--sky-override-file-attachment-btn-non-stacked-margin, 0)}.sky-file-attachment-wrapper{display:var(--sky-override-file-attachment-wrapper-display, flex);flex-wrap:wrap}.sky-file-attachment-label-wrapper{width:100%}.sky-file-attachment-upload{flex:1;order:2;display:var(--sky-override-file-attachment-upload-display, flex);align-items:flex-start;padding-right:var(--sky-override-file-attachment-upload-padding-right, 0);border:1px solid transparent}.sky-file-attachment-upload:has(.sky-file-attachment-icon){align-items:var(--sky-override-file-attachment-upload-with-icon-align-items, center)}.sky-file-attachment-accept{border-color:var(--sky-override-file-attachment-accept-border-color, var(--sky-color-border-success));border-style:dashed;border-width:var(--sky-override-file-attachment-accept-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-accept-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-reject{border-color:var(--sky-override-file-attachment-reject-border-color, var(--sky-color-border-danger));border-style:dashed;border-width:var(--sky-override-file-attachment-reject-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-reject-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-btn,.sky-control-label{transition:border-color .15s,box-shadow .15s,color .15s}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:var(--sky-override-file-attachment-invalid-box-shadow, none);border:var(--sky-override-file-attachment-invalid-border, var(--sky-border-width-input-error) solid var(--sky-color-border-input-error))}:host(.ng-invalid.ng-dirty) .sky-control-label{color:var(--sky-override-file-attachment-invalid-label-color, var(--sky-color-text-danger))}.sky-file-attachment-file-link{padding:var(--sky-override-file-attachment-file-link-padding, 0 0 0 var(--sky-space-gap-icon-m));margin:var(--sky-override-file-attachment-file-link-margin, 0)}.sky-file-attachment-delete{width:var(--sky-override-file-attachment-delete-width, auto);height:var(--sky-override-file-attachment-delete-height, auto);margin-left:var(--sky-override-file-attachment-delete-margin-left, var(--sky-space-gap-text_action-s))}.sky-file-attachment-preview-img{flex:0;order:1;max-width:25%;width:var(--sky-override-file-attachment-preview-img-width, var(--sky-size-thumbnail-l));height:auto;box-shadow:var(--sky-override-file-attachment-preview-img-box-shadow, var(--sky-elevation-raised-100));border:var(--sky-override-file-attachment-preview-img-border, none);margin:var(--sky-override-file-attachment-preview-img-margin, 0)}.sky-file-attachment-hint-text{margin-top:var(--sky-override-file-attachment-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-control-label{color:var(--sky-override-file-attachment-control-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-attachment-control-label-font-size, var(--sky-font-size-input-label))}.sky-file-attachment-icon{color:var(--sky-color-icon-deemphasized);margin:var(--sky-override-file-attachment-file-icon-margin, 0 0 0 var(--sky-gap-icon-m));font-size:var(--sky-override-file-attachment-file-icon-font-size, var(--sky-size-icon-xl));line-height:var(--sky-override-file-attachment-file-icon-line-height, 1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SkyFileAttachmentJoinIdsPipe, name: "skyFileAttachmentJoinIds" }, { kind: "pipe", type: SkyFileSizePipe, name: "skyFileSize" }, { kind: "component", type: SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "touched", "dirty"] }, { kind: "ngmodule", type: SkyFormsResourcesModule }, { kind: "pipe", type: i1.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyHelpInlineModule }, { kind: "component", type: i4.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i5.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1$2.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i1$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "directive", type: SkyThemeComponentClassDirective, selector: "[skyThemeClass]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1862
+ ], queries: [{ propertyName: "labelComponents", predicate: SkyFileAttachmentLabelComponent }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInputRef"], descendants: true }], hostDirectives: [{ directive: i1$1.SkyThemeComponentClassDirective }], ngImport: i0, template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [ngClass]=\"{\n 'sky-control-label-required':\n !labelText && isRequired && hasLabelComponent\n }\"\n >\n @if (labelText) {\n @if (!labelHidden) {\n <span\n class=\"sky-control-label\"\n [attr.id]=\"labelId\"\n [ngClass]=\"{\n 'sky-control-label-required': isRequired\n }\"\n >{{ labelText }}</span\n >\n }\n } @else {\n <ng-content select=\"sky-file-attachment-label\" />\n }\n @if (isRequired && (hasLabelComponent || labelText)) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (labelText && (helpPopoverContent || helpKey)) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n #fileDropDescriptionRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n skyId\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n #fileInputRef\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"isRequired\"\n (change)=\"fileChangeEvent($event)\"\n />\n @if (showFileAttachmentButton) {\n <button\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n [attr.aria-describedby]=\"\n hintText && hintTextEl.id\n | skyFileAttachmentJoinIds: fileDropDescriptionRef.id\n \"\n [attr.aria-labelledby]=\"\n attachButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [attr.aria-invalid]=\"!!(ngControl?.errors ?? fileErrorValidation)\"\n [attr.aria-errormessage]=\"\n !!(ngControl?.errors ?? fileErrorValidation) ? errorId : undefined\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n (blur)=\"onButtonBlur()\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n }\n @if (value && !isImage && currentThemeName === 'modern') {\n <sky-icon class=\"sky-file-attachment-icon\" icon=\"file-o\" />\n }\n @if (value || currentThemeName === 'default') {\n <span class=\"sky-file-attachment-file-link\">\n @if (value) {\n <a\n [href]=\"isData ? value.url : undefined\"\n [download]=\"isData ? value.file.name : undefined\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n } @else {\n <span class=\"sky-file-attachment-none sky-font-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n }\n </span>\n }\n\n @if (value) {\n <button\n class=\"sky-btn sky-btn-icon-borderless sky-file-attachment-delete\"\n type=\"button\"\n [attr.aria-labelledby]=\"\n deleteButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [disabled]=\"disabled\"\n (click)=\"deleteFileAttachment()\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n }\n </div>\n\n @if (value && isImage) {\n <img\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n }\n</div>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-file-attachment-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n</div>\n\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors\"\n [labelText]=\"labelText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n @if (ngControl?.touched) {\n @if (fileErrorName === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n } @else if (fileErrorName === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n } @else if (fileErrorName === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n }\n }\n</sky-form-errors>\n\n<span\n #attachButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n }}\n</span>\n\n<span\n #deleteButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{ 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName }}\n</span>\n", styles: [".sky-file-attachment-wrapper:not(.sky-theme-modern *){--sky-override-file-attachment-accept-border-color: #72bf44;--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-control-label-color: #212327;--sky-override-file-attachment-control-label-font-size: 15px;--sky-override-file-attachment-delete-margin-left: 0;--sky-override-file-attachment-file-link-padding: 0 5px;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #212327;--sky-override-file-attachment-preview-img-border: none;--sky-override-file-attachment-preview-img-box-shadow: 0 0 5px #666;--sky-override-file-attachment-preview-img-margin: 10px;--sky-override-file-attachment-preview-img-width: auto;--sky-override-file-attachment-reject-border-color: #ef4044;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-display: block;--sky-override-file-attachment-upload-padding-right: 8px;--sky-override-file-attachment-wrapper-display: inline-block}.sky-file-attachment-wrapper:not(.sky-theme-modern *) .sky-file-attachment-delete{padding:0}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper{--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-btn-non-stacked-margin: 0 10px 0 0;--sky-override-file-attachment-control-label-color: #686c73;--sky-override-file-attachment-control-label-font-size: 13px;--sky-override-file-attachment-delete-height: 40px;--sky-override-file-attachment-delete-width: 40px;--sky-override-file-attachment-file-icon-font-size: 30px;--sky-override-file-attachment-file-icon-line-height: normal;--sky-override-file-attachment-file-icon-margin: 5px 10px 5px 5px;--sky-override-file-attachment-file-link-margin: 10px 0 0 0;--sky-override-file-attachment-file-link-padding: 0;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #686c73;--sky-override-file-attachment-preview-img-border: var( --sky-border-width-separator-dark ) solid var(--sky-color-border-separator-dark);--sky-override-file-attachment-preview-img-box-shadow: none;--sky-override-file-attachment-preview-img-margin: 0 10px 0 0;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-with-icon-align-items: flex-start}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper .sky-file-attachment-delete{padding:0}:host.sky-cmp-theme-default{--sky-override-file-attachment-hint-text-margin-top: var( --sky-margin-stacked-xs )}:host.sky-form-field-stacked{display:block}:host:not(.sky-form-field-stacked) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:var(--sky-override-file-attachment-btn-non-stacked-margin, 0)}.sky-file-attachment-wrapper{display:var(--sky-override-file-attachment-wrapper-display, flex);flex-wrap:wrap}.sky-file-attachment-label-wrapper{width:100%}.sky-file-attachment-upload{flex:1;order:2;display:var(--sky-override-file-attachment-upload-display, flex);align-items:flex-start;padding-right:var(--sky-override-file-attachment-upload-padding-right, 0);border:1px solid transparent}.sky-file-attachment-upload:has(.sky-file-attachment-icon){align-items:var(--sky-override-file-attachment-upload-with-icon-align-items, center)}.sky-file-attachment-accept{border-color:var(--sky-override-file-attachment-accept-border-color, var(--sky-color-border-success));border-style:dashed;border-width:var(--sky-override-file-attachment-accept-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-accept-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-reject{border-color:var(--sky-override-file-attachment-reject-border-color, var(--sky-color-border-danger));border-style:dashed;border-width:var(--sky-override-file-attachment-reject-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-reject-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-btn,.sky-control-label{transition:border-color .15s,box-shadow .15s,color .15s}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:var(--sky-override-file-attachment-invalid-box-shadow, none);border:var(--sky-override-file-attachment-invalid-border, var(--sky-border-width-input-error) solid var(--sky-color-border-input-error))}:host(.ng-invalid.ng-dirty) .sky-control-label{color:var(--sky-override-file-attachment-invalid-label-color, var(--sky-color-text-danger))}.sky-file-attachment-file-link{padding:var(--sky-override-file-attachment-file-link-padding, 0 0 0 var(--sky-space-gap-icon-m));margin:var(--sky-override-file-attachment-file-link-margin, 0)}.sky-file-attachment-delete{width:var(--sky-override-file-attachment-delete-width, auto);height:var(--sky-override-file-attachment-delete-height, auto);margin-left:var(--sky-override-file-attachment-delete-margin-left, var(--sky-space-gap-text_action-s))}.sky-file-attachment-preview-img{flex:0;order:1;max-width:25%;width:var(--sky-override-file-attachment-preview-img-width, var(--sky-size-thumbnail-l));height:auto;box-shadow:var(--sky-override-file-attachment-preview-img-box-shadow, var(--sky-elevation-raised-100));border:var(--sky-override-file-attachment-preview-img-border, none);margin:var(--sky-override-file-attachment-preview-img-margin, 0)}.sky-file-attachment-hint-text{margin-top:var(--sky-override-file-attachment-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-control-label{color:var(--sky-override-file-attachment-control-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-attachment-control-label-font-size, var(--sky-font-size-input-label))}.sky-file-attachment-icon{color:var(--sky-color-icon-deemphasized);margin:var(--sky-override-file-attachment-file-icon-margin, 0 0 0 var(--sky-gap-icon-m));font-size:var(--sky-override-file-attachment-file-icon-font-size, var(--sky-size-icon-xl));line-height:var(--sky-override-file-attachment-file-icon-line-height, 1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SkyFileAttachmentJoinIdsPipe, name: "skyFileAttachmentJoinIds" }, { kind: "pipe", type: SkyFileSizePipe, name: "skyFileSize" }, { kind: "component", type: SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "touched", "dirty"] }, { kind: "ngmodule", type: SkyFormsResourcesModule }, { kind: "pipe", type: i1.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyHelpInlineModule }, { kind: "component", type: i4.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i5.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1$2.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i1$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "directive", type: SkyThemeComponentClassDirective, selector: "[skyThemeClass]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1858
1863
  }
1859
1864
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SkyFileAttachmentComponent, decorators: [{
1860
1865
  type: Component,
@@ -1873,7 +1878,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1873
1878
  ], providers: [
1874
1879
  SkyFileAttachmentService,
1875
1880
  { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
1876
- ], hostDirectives: [SkyThemeComponentClassDirective], selector: 'sky-file-attachment', template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [ngClass]=\"{\n 'sky-control-label-required':\n !labelText && isRequired && hasLabelComponent\n }\"\n >\n @if (labelText) {\n @if (!labelHidden) {\n <span\n class=\"sky-control-label\"\n [attr.id]=\"labelId\"\n [ngClass]=\"{\n 'sky-control-label-required': isRequired\n }\"\n >{{ labelText }}</span\n >\n }\n } @else {\n <ng-content select=\"sky-file-attachment-label\" />\n }\n @if (isRequired && (hasLabelComponent || labelText)) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (labelText && (helpPopoverContent || helpKey)) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n #fileDropDescriptionRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n skyId\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n #fileInputRef\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"isRequired\"\n (change)=\"fileChangeEvent($event)\"\n />\n @if (showFileAttachmentButton) {\n <button\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n [attr.aria-describedby]=\"\n hintText && hintTextEl.id\n | skyFileAttachmentJoinIds: fileDropDescriptionRef.id\n \"\n [attr.aria-labelledby]=\"\n attachButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [attr.aria-invalid]=\"!!(ngControl?.errors ?? fileErrorValidation)\"\n [attr.aria-errormessage]=\"\n !!(ngControl?.errors ?? fileErrorValidation) ? errorId : undefined\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n (blur)=\"onButtonBlur()\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n }\n @if (value && !isImage && currentThemeName === 'modern') {\n <sky-icon class=\"sky-file-attachment-icon\" icon=\"file-o\" />\n }\n @if (value || currentThemeName === 'default') {\n <span class=\"sky-file-attachment-file-link\">\n @if (value) {\n <a\n [href]=\"isData ? value.url : undefined\"\n [download]=\"isData ? value.file.name : undefined\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n } @else {\n <span class=\"sky-file-attachment-none sky-font-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n }\n </span>\n }\n\n @if (value) {\n <button\n class=\"sky-btn sky-btn-icon-borderless sky-file-attachment-delete\"\n type=\"button\"\n [attr.aria-labelledby]=\"\n deleteButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [disabled]=\"disabled\"\n (click)=\"deleteFileAttachment()\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n }\n </div>\n\n @if (value && isImage) {\n <img\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n }\n</div>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-file-attachment-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n</div>\n\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors ?? fileErrorValidation\"\n [labelText]=\"labelText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n @if (ngControl?.touched) {\n @if (fileErrorName === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n } @else if (fileErrorName === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n } @else if (fileErrorName === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n }\n }\n</sky-form-errors>\n\n<span\n #attachButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n }}\n</span>\n\n<span\n #deleteButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{ 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName }}\n</span>\n", styles: [".sky-file-attachment-wrapper:not(.sky-theme-modern *){--sky-override-file-attachment-accept-border-color: #72bf44;--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-control-label-color: #212327;--sky-override-file-attachment-control-label-font-size: 15px;--sky-override-file-attachment-delete-margin-left: 0;--sky-override-file-attachment-file-link-padding: 0 5px;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #212327;--sky-override-file-attachment-preview-img-border: none;--sky-override-file-attachment-preview-img-box-shadow: 0 0 5px #666;--sky-override-file-attachment-preview-img-margin: 10px;--sky-override-file-attachment-preview-img-width: auto;--sky-override-file-attachment-reject-border-color: #ef4044;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-display: block;--sky-override-file-attachment-upload-padding-right: 8px;--sky-override-file-attachment-wrapper-display: inline-block}.sky-file-attachment-wrapper:not(.sky-theme-modern *) .sky-file-attachment-delete{padding:0}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper{--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-btn-non-stacked-margin: 0 10px 0 0;--sky-override-file-attachment-control-label-color: #686c73;--sky-override-file-attachment-control-label-font-size: 13px;--sky-override-file-attachment-delete-height: 40px;--sky-override-file-attachment-delete-width: 40px;--sky-override-file-attachment-file-icon-font-size: 30px;--sky-override-file-attachment-file-icon-line-height: normal;--sky-override-file-attachment-file-icon-margin: 5px 10px 5px 5px;--sky-override-file-attachment-file-link-margin: 10px 0 0 0;--sky-override-file-attachment-file-link-padding: 0;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #686c73;--sky-override-file-attachment-preview-img-border: var( --sky-border-width-separator-dark ) solid var(--sky-color-border-separator-dark);--sky-override-file-attachment-preview-img-box-shadow: none;--sky-override-file-attachment-preview-img-margin: 0 10px 0 0;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-with-icon-align-items: flex-start}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper .sky-file-attachment-delete{padding:0}:host.sky-cmp-theme-default{--sky-override-file-attachment-hint-text-margin-top: var( --sky-margin-stacked-xs )}:host.sky-form-field-stacked{display:block}:host:not(.sky-form-field-stacked) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:var(--sky-override-file-attachment-btn-non-stacked-margin, 0)}.sky-file-attachment-wrapper{display:var(--sky-override-file-attachment-wrapper-display, flex);flex-wrap:wrap}.sky-file-attachment-label-wrapper{width:100%}.sky-file-attachment-upload{flex:1;order:2;display:var(--sky-override-file-attachment-upload-display, flex);align-items:flex-start;padding-right:var(--sky-override-file-attachment-upload-padding-right, 0);border:1px solid transparent}.sky-file-attachment-upload:has(.sky-file-attachment-icon){align-items:var(--sky-override-file-attachment-upload-with-icon-align-items, center)}.sky-file-attachment-accept{border-color:var(--sky-override-file-attachment-accept-border-color, var(--sky-color-border-success));border-style:dashed;border-width:var(--sky-override-file-attachment-accept-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-accept-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-reject{border-color:var(--sky-override-file-attachment-reject-border-color, var(--sky-color-border-danger));border-style:dashed;border-width:var(--sky-override-file-attachment-reject-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-reject-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-btn,.sky-control-label{transition:border-color .15s,box-shadow .15s,color .15s}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:var(--sky-override-file-attachment-invalid-box-shadow, none);border:var(--sky-override-file-attachment-invalid-border, var(--sky-border-width-input-error) solid var(--sky-color-border-input-error))}:host(.ng-invalid.ng-dirty) .sky-control-label{color:var(--sky-override-file-attachment-invalid-label-color, var(--sky-color-text-danger))}.sky-file-attachment-file-link{padding:var(--sky-override-file-attachment-file-link-padding, 0 0 0 var(--sky-space-gap-icon-m));margin:var(--sky-override-file-attachment-file-link-margin, 0)}.sky-file-attachment-delete{width:var(--sky-override-file-attachment-delete-width, auto);height:var(--sky-override-file-attachment-delete-height, auto);margin-left:var(--sky-override-file-attachment-delete-margin-left, var(--sky-space-gap-text_action-s))}.sky-file-attachment-preview-img{flex:0;order:1;max-width:25%;width:var(--sky-override-file-attachment-preview-img-width, var(--sky-size-thumbnail-l));height:auto;box-shadow:var(--sky-override-file-attachment-preview-img-box-shadow, var(--sky-elevation-raised-100));border:var(--sky-override-file-attachment-preview-img-border, none);margin:var(--sky-override-file-attachment-preview-img-margin, 0)}.sky-file-attachment-hint-text{margin-top:var(--sky-override-file-attachment-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-control-label{color:var(--sky-override-file-attachment-control-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-attachment-control-label-font-size, var(--sky-font-size-input-label))}.sky-file-attachment-icon{color:var(--sky-color-icon-deemphasized);margin:var(--sky-override-file-attachment-file-icon-margin, 0 0 0 var(--sky-gap-icon-m));font-size:var(--sky-override-file-attachment-file-icon-font-size, var(--sky-size-icon-xl));line-height:var(--sky-override-file-attachment-file-icon-line-height, 1)}\n"] }]
1881
+ ], hostDirectives: [SkyThemeComponentClassDirective], selector: 'sky-file-attachment', template: "<div class=\"sky-file-attachment-wrapper\">\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [ngClass]=\"{\n 'sky-control-label-required':\n !labelText && isRequired && hasLabelComponent\n }\"\n >\n @if (labelText) {\n @if (!labelHidden) {\n <span\n class=\"sky-control-label\"\n [attr.id]=\"labelId\"\n [ngClass]=\"{\n 'sky-control-label-required': isRequired\n }\"\n >{{ labelText }}</span\n >\n }\n } @else {\n <ng-content select=\"sky-file-attachment-label\" />\n }\n @if (isRequired && (hasLabelComponent || labelText)) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (labelText && (helpPopoverContent || helpKey)) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [labelText]=\"labelText\"\n [helpKey]=\"helpKey\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n #fileDropDescriptionRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n role=\"tooltip\"\n skyId\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n #fileInputRef\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"isRequired\"\n (change)=\"fileChangeEvent($event)\"\n />\n @if (showFileAttachmentButton) {\n <button\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n [attr.aria-describedby]=\"\n hintText && hintTextEl.id\n | skyFileAttachmentJoinIds: fileDropDescriptionRef.id\n \"\n [attr.aria-labelledby]=\"\n attachButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [attr.aria-invalid]=\"!!(ngControl?.errors ?? fileErrorValidation)\"\n [attr.aria-errormessage]=\"\n !!(ngControl?.errors ?? fileErrorValidation) ? errorId : undefined\n \"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n (blur)=\"onButtonBlur()\"\n >\n <sky-icon icon=\"folder-open-o\" />\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file'\n | skyLibResources)\n }}\n </button>\n }\n @if (value && !isImage && currentThemeName === 'modern') {\n <sky-icon class=\"sky-file-attachment-icon\" icon=\"file-o\" />\n }\n @if (value || currentThemeName === 'default') {\n <span class=\"sky-file-attachment-file-link\">\n @if (value) {\n <a\n [href]=\"isData ? value.url : undefined\"\n [download]=\"isData ? value.file.name : undefined\"\n [attr.title]=\"fileName\"\n (click)=\"emitClick()\"\n >\n {{ truncatedFileName }}\n </a>\n } @else {\n <span class=\"sky-file-attachment-none sky-font-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n }\n </span>\n }\n\n @if (value) {\n <button\n class=\"sky-btn sky-btn-icon-borderless sky-file-attachment-delete\"\n type=\"button\"\n [attr.aria-labelledby]=\"\n deleteButtonLabelRef.id\n | skyFileAttachmentJoinIds\n : (labelText\n ? labelId\n : labelComponents?.get(0)?.labelContentId?.id)\n \"\n [disabled]=\"disabled\"\n (click)=\"deleteFileAttachment()\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\" />\n </button>\n }\n </div>\n\n @if (value && isImage) {\n <img\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n }\n</div>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-file-attachment-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n</div>\n\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors\"\n [labelText]=\"labelText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n @if (ngControl?.touched) {\n @if (fileErrorName === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_file_type_error_label_text'\n | skyLibResources: fileErrorParam\n \"\n />\n } @else if (fileErrorName === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_max_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n } @else if (fileErrorName === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text'\n | skyLibResources: (fileErrorParam | skyFileSize)\n \"\n />\n }\n }\n</sky-form-errors>\n\n<span\n #attachButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file_label'\n | skyLibResources: fileName)\n : ('skyux_file_attachment_button_label_choose_file_label'\n | skyLibResources)\n }}\n</span>\n\n<span\n #deleteButtonLabelRef=\"skyId\"\n aria-hidden=\"true\"\n class=\"sky-screen-reader-only\"\n skyId\n>\n {{ 'skyux_file_attachment_file_item_remove' | skyLibResources: fileName }}\n</span>\n", styles: [".sky-file-attachment-wrapper:not(.sky-theme-modern *){--sky-override-file-attachment-accept-border-color: #72bf44;--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-control-label-color: #212327;--sky-override-file-attachment-control-label-font-size: 15px;--sky-override-file-attachment-delete-margin-left: 0;--sky-override-file-attachment-file-link-padding: 0 5px;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #212327;--sky-override-file-attachment-preview-img-border: none;--sky-override-file-attachment-preview-img-box-shadow: 0 0 5px #666;--sky-override-file-attachment-preview-img-margin: 10px;--sky-override-file-attachment-preview-img-width: auto;--sky-override-file-attachment-reject-border-color: #ef4044;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-display: block;--sky-override-file-attachment-upload-padding-right: 8px;--sky-override-file-attachment-wrapper-display: inline-block}.sky-file-attachment-wrapper:not(.sky-theme-modern *) .sky-file-attachment-delete{padding:0}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper{--sky-override-file-attachment-accept-border-radius: 5px;--sky-override-file-attachment-accept-border-width: 1px;--sky-override-file-attachment-btn-non-stacked-margin: 0 10px 0 0;--sky-override-file-attachment-control-label-color: #686c73;--sky-override-file-attachment-control-label-font-size: 13px;--sky-override-file-attachment-delete-height: 40px;--sky-override-file-attachment-delete-width: 40px;--sky-override-file-attachment-file-icon-font-size: 30px;--sky-override-file-attachment-file-icon-line-height: normal;--sky-override-file-attachment-file-icon-margin: 5px 10px 5px 5px;--sky-override-file-attachment-file-link-margin: 10px 0 0 0;--sky-override-file-attachment-file-link-padding: 0;--sky-override-file-attachment-invalid-border: 1px solid #ef4044;--sky-override-file-attachment-invalid-box-shadow: 0 0 8px rgba(239, 64, 68, .6);--sky-override-file-attachment-invalid-label-color: #686c73;--sky-override-file-attachment-preview-img-border: var( --sky-border-width-separator-dark ) solid var(--sky-color-border-separator-dark);--sky-override-file-attachment-preview-img-box-shadow: none;--sky-override-file-attachment-preview-img-margin: 0 10px 0 0;--sky-override-file-attachment-reject-border-radius: 5px;--sky-override-file-attachment-reject-border-width: 1px;--sky-override-file-attachment-upload-with-icon-align-items: flex-start}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-attachment-wrapper .sky-file-attachment-delete{padding:0}:host.sky-cmp-theme-default{--sky-override-file-attachment-hint-text-margin-top: var( --sky-margin-stacked-xs )}:host.sky-form-field-stacked{display:block}:host:not(.sky-form-field-stacked) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:var(--sky-override-file-attachment-btn-non-stacked-margin, 0)}.sky-file-attachment-wrapper{display:var(--sky-override-file-attachment-wrapper-display, flex);flex-wrap:wrap}.sky-file-attachment-label-wrapper{width:100%}.sky-file-attachment-upload{flex:1;order:2;display:var(--sky-override-file-attachment-upload-display, flex);align-items:flex-start;padding-right:var(--sky-override-file-attachment-upload-padding-right, 0);border:1px solid transparent}.sky-file-attachment-upload:has(.sky-file-attachment-icon){align-items:var(--sky-override-file-attachment-upload-with-icon-align-items, center)}.sky-file-attachment-accept{border-color:var(--sky-override-file-attachment-accept-border-color, var(--sky-color-border-success));border-style:dashed;border-width:var(--sky-override-file-attachment-accept-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-accept-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-reject{border-color:var(--sky-override-file-attachment-reject-border-color, var(--sky-color-border-danger));border-style:dashed;border-width:var(--sky-override-file-attachment-reject-border-width, var(--sky-border-width-input-hover));border-radius:var(--sky-override-file-attachment-reject-border-radius, var(--sky-border-radius-s))}.sky-file-attachment-btn,.sky-control-label{transition:border-color .15s,box-shadow .15s,color .15s}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:var(--sky-override-file-attachment-invalid-box-shadow, none);border:var(--sky-override-file-attachment-invalid-border, var(--sky-border-width-input-error) solid var(--sky-color-border-input-error))}:host(.ng-invalid.ng-dirty) .sky-control-label{color:var(--sky-override-file-attachment-invalid-label-color, var(--sky-color-text-danger))}.sky-file-attachment-file-link{padding:var(--sky-override-file-attachment-file-link-padding, 0 0 0 var(--sky-space-gap-icon-m));margin:var(--sky-override-file-attachment-file-link-margin, 0)}.sky-file-attachment-delete{width:var(--sky-override-file-attachment-delete-width, auto);height:var(--sky-override-file-attachment-delete-height, auto);margin-left:var(--sky-override-file-attachment-delete-margin-left, var(--sky-space-gap-text_action-s))}.sky-file-attachment-preview-img{flex:0;order:1;max-width:25%;width:var(--sky-override-file-attachment-preview-img-width, var(--sky-size-thumbnail-l));height:auto;box-shadow:var(--sky-override-file-attachment-preview-img-box-shadow, var(--sky-elevation-raised-100));border:var(--sky-override-file-attachment-preview-img-border, none);margin:var(--sky-override-file-attachment-preview-img-margin, 0)}.sky-file-attachment-hint-text{margin-top:var(--sky-override-file-attachment-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-control-label{color:var(--sky-override-file-attachment-control-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-attachment-control-label-font-size, var(--sky-font-size-input-label))}.sky-file-attachment-icon{color:var(--sky-color-icon-deemphasized);margin:var(--sky-override-file-attachment-file-icon-margin, 0 0 0 var(--sky-gap-icon-m));font-size:var(--sky-override-file-attachment-file-icon-font-size, var(--sky-size-icon-xl));line-height:var(--sky-override-file-attachment-file-icon-line-height, 1)}\n"] }]
1877
1882
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: SkyFileAttachmentService }, { type: SkyFileItemService }, { type: i2$2.NgControl, decorators: [{
1878
1883
  type: Self
1879
1884
  }, {
@@ -2445,6 +2450,37 @@ const MIN_FILE_SIZE_DEFAULT = 0;
2445
2450
  * on the element that receives drop events to exempt it from the drop exclusion rule.
2446
2451
  */
2447
2452
  class SkyFileDropComponent {
2453
+ /**
2454
+ * The minimum size in bytes for valid files.
2455
+ * @default 0
2456
+ */
2457
+ set minFileSize(value) {
2458
+ this.#_minFileSize = value ?? MIN_FILE_SIZE_DEFAULT;
2459
+ }
2460
+ get minFileSize() {
2461
+ return this.#_minFileSize;
2462
+ }
2463
+ /**
2464
+ * The maximum size in bytes for valid files.
2465
+ * @default 500000
2466
+ */
2467
+ set maxFileSize(value) {
2468
+ this.#_maxFileSize = value ?? MAX_FILE_SIZE_DEFAULT;
2469
+ }
2470
+ get maxFileSize() {
2471
+ return this.#_maxFileSize;
2472
+ }
2473
+ #enterEventTarget;
2474
+ #_maxFileSize;
2475
+ #_minFileSize;
2476
+ #notifyTouched;
2477
+ #notifyChange;
2478
+ #_uploadedFiles;
2479
+ #fileAttachmentService;
2480
+ #fileReaderSvc;
2481
+ #liveAnnouncerSvc;
2482
+ #resourcesSvc;
2483
+ #idSvc;
2448
2484
  constructor() {
2449
2485
  /**
2450
2486
  * Fires when users add or remove files.
@@ -2491,47 +2527,69 @@ class SkyFileDropComponent {
2491
2527
  this.acceptedOver = false;
2492
2528
  this.#_maxFileSize = MAX_FILE_SIZE_DEFAULT;
2493
2529
  this.#_minFileSize = MIN_FILE_SIZE_DEFAULT;
2530
+ this.#_uploadedFiles = [];
2494
2531
  this.#fileAttachmentService = inject(SkyFileAttachmentService);
2532
+ this.#fileReaderSvc = inject(SkyFileReaderService);
2495
2533
  this.#liveAnnouncerSvc = inject(SkyLiveAnnouncerService);
2496
2534
  this.#resourcesSvc = inject(SkyLibResourcesService);
2497
2535
  this.#idSvc = inject(SkyIdService);
2498
2536
  this.errorId = this.#idSvc.generateId();
2537
+ this.ngControl = inject(NgControl, { optional: true });
2499
2538
  this.rejectedFiles = [];
2539
+ if (this.ngControl) {
2540
+ this.ngControl.valueAccessor = this;
2541
+ }
2500
2542
  }
2501
- /**
2502
- * The minimum size in bytes for valid files.
2503
- * @default 0
2504
- */
2505
- set minFileSize(value) {
2506
- this.#_minFileSize = value ?? MIN_FILE_SIZE_DEFAULT;
2507
- }
2508
- get minFileSize() {
2509
- return this.#_minFileSize;
2510
- }
2511
- /**
2512
- * The maximum size in bytes for valid files.
2513
- * @default 500000
2514
- */
2515
- set maxFileSize(value) {
2516
- this.#_maxFileSize = value ?? MAX_FILE_SIZE_DEFAULT;
2517
- }
2518
- get maxFileSize() {
2519
- return this.#_maxFileSize;
2520
- }
2521
- #enterEventTarget;
2522
- #_maxFileSize;
2523
- #_minFileSize;
2524
- #fileAttachmentService;
2525
- #liveAnnouncerSvc;
2526
- #resourcesSvc;
2527
- #idSvc;
2528
2543
  ngOnDestroy() {
2529
2544
  this.filesChanged.complete();
2530
2545
  this.linkChanged.complete();
2531
2546
  this.linkInputBlur.complete();
2532
2547
  }
2548
+ writeValue(value) {
2549
+ if (Array.isArray(value)) {
2550
+ const linkUploads = [];
2551
+ const fileUploads = [];
2552
+ value.forEach((file) => {
2553
+ if ('url' in file && file.url !== undefined) {
2554
+ if (!('file' in file)) {
2555
+ linkUploads.push(file);
2556
+ }
2557
+ else if ('file' in file && file.file !== undefined) {
2558
+ fileUploads.push(file);
2559
+ }
2560
+ }
2561
+ });
2562
+ if (!(linkUploads.length > 0) && !(fileUploads.length > 0)) {
2563
+ this.#notifyChange?.(null);
2564
+ }
2565
+ else {
2566
+ this.#_uploadedFiles = [];
2567
+ if (linkUploads.length > 0) {
2568
+ linkUploads.forEach((file) => {
2569
+ this.uploadLink(file);
2570
+ });
2571
+ }
2572
+ if (fileUploads.length > 0) {
2573
+ // this prevents FormControl from setting an invalid value before the async
2574
+ // processes in #handleFile is complete
2575
+ this.#notifyChange?.(null);
2576
+ this.#handleFiles(fileUploads);
2577
+ }
2578
+ }
2579
+ }
2580
+ else {
2581
+ this.#notifyChange?.(null);
2582
+ }
2583
+ }
2584
+ registerOnChange(fn) {
2585
+ this.#notifyChange = fn;
2586
+ }
2587
+ registerOnTouched(fn) {
2588
+ this.#notifyTouched = fn;
2589
+ }
2533
2590
  dropClicked() {
2534
2591
  if (!this.noClick && this.inputEl) {
2592
+ this.#notifyTouched?.();
2535
2593
  this.inputEl.nativeElement.click();
2536
2594
  }
2537
2595
  }
@@ -2576,6 +2634,7 @@ class SkyFileDropComponent {
2576
2634
  fileDrop(dropEvent) {
2577
2635
  dropEvent.stopPropagation();
2578
2636
  dropEvent.preventDefault();
2637
+ this.#notifyTouched?.();
2579
2638
  this.#enterEventTarget = undefined;
2580
2639
  this.rejectedOver = false;
2581
2640
  this.acceptedOver = false;
@@ -2601,13 +2660,24 @@ class SkyFileDropComponent {
2601
2660
  }
2602
2661
  addLink(event) {
2603
2662
  event.preventDefault();
2604
- this.linkChanged.emit({ url: this.linkUrl });
2605
- this.#announceState('skyux_file_attachment_file_upload_link_added', this.linkUrl);
2663
+ this.uploadLink({ url: this.linkUrl });
2606
2664
  this.linkUrl = undefined;
2665
+ this.#notifyTouched?.();
2666
+ }
2667
+ uploadLink(file) {
2668
+ this.linkChanged.emit(file);
2669
+ this.#_uploadedFiles?.push(file);
2670
+ this.#notifyChange?.(this.#_uploadedFiles);
2671
+ this.#announceState('skyux_file_attachment_file_upload_link_added', file.url);
2607
2672
  }
2608
2673
  onLinkBlur() {
2674
+ this.#notifyTouched?.();
2609
2675
  this.linkInputBlur.emit();
2610
2676
  }
2677
+ get isRequired() {
2678
+ return (this.required ||
2679
+ (this.ngControl?.control?.hasValidator(Validators.required) ?? false));
2680
+ }
2611
2681
  #announceState(resourceString, ...args) {
2612
2682
  this.#resourcesSvc
2613
2683
  .getString(resourceString, ...args)
@@ -2629,36 +2699,45 @@ class SkyFileDropComponent {
2629
2699
  }
2630
2700
  #filesRejected(file, validFileArray, rejectedFileArray, totalFiles) {
2631
2701
  rejectedFileArray.push(file);
2702
+ this.#notifyChange?.(this.#_uploadedFiles.length > 0 ? this.#_uploadedFiles : null);
2632
2703
  this.#emitFileChangeEvent(totalFiles, rejectedFileArray, validFileArray);
2633
2704
  }
2634
- #loadFile(fileDrop, file, validFileArray, rejectedFileArray, totalFiles) {
2635
- const reader = new FileReader();
2636
- reader.addEventListener('load', (event) => {
2637
- file.url = event.target.result;
2705
+ async #loadFile(fileDrop, file, validFileArray, rejectedFileArray, totalFiles) {
2706
+ try {
2707
+ file.url = await this.#fileReaderSvc.readAsDataURL(file.file);
2638
2708
  validFileArray.push(file);
2639
2709
  fileDrop.#emitFileChangeEvent(totalFiles, rejectedFileArray, validFileArray);
2640
2710
  this.#announceState('skyux_file_attachment_file_upload_file_added', file.file.name);
2641
- });
2642
- reader.addEventListener('error', () => {
2643
- fileDrop.#filesRejected(file, validFileArray, rejectedFileArray, totalFiles);
2644
- });
2645
- reader.addEventListener('abort', () => {
2711
+ this.#_uploadedFiles?.push(file);
2712
+ this.#notifyChange?.(this.#_uploadedFiles);
2713
+ }
2714
+ catch {
2646
2715
  fileDrop.#filesRejected(file, validFileArray, rejectedFileArray, totalFiles);
2647
- });
2648
- reader.readAsDataURL(file.file);
2716
+ }
2649
2717
  }
2650
- #handleFiles(files) {
2651
- if (files) {
2718
+ #handleFiles(fileList) {
2719
+ if (fileList) {
2652
2720
  const validFileArray = [];
2653
2721
  const rejectedFileArray = [];
2654
- const totalFiles = files.length;
2722
+ const totalFiles = fileList.length;
2723
+ let files = [];
2724
+ if ('item' in fileList) {
2725
+ for (let index = 0; index < fileList.length; index++) {
2726
+ files.push({
2727
+ file: fileList.item(index),
2728
+ });
2729
+ }
2730
+ }
2731
+ else {
2732
+ files = fileList;
2733
+ }
2655
2734
  const processedFiles = this.#fileAttachmentService.checkFiles(files, this.minFileSize, this.maxFileSize, this.acceptedTypes, this.validateFn);
2656
2735
  for (const file of processedFiles) {
2657
2736
  if (file.errorType) {
2658
2737
  this.#filesRejected(file, validFileArray, rejectedFileArray, totalFiles);
2659
2738
  }
2660
2739
  else {
2661
- this.#loadFile(this, file, validFileArray, rejectedFileArray, totalFiles);
2740
+ void this.#loadFile(this, file, validFileArray, rejectedFileArray, totalFiles);
2662
2741
  }
2663
2742
  }
2664
2743
  this.rejectedFiles = rejectedFileArray;
@@ -2668,7 +2747,7 @@ class SkyFileDropComponent {
2668
2747
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: SkyFileDropComponent, isStandalone: true, selector: "sky-file-drop", inputs: { fileUploadAriaLabel: "fileUploadAriaLabel", linkUploadAriaLabel: "linkUploadAriaLabel", linkUploadHintText: "linkUploadHintText", minFileSize: "minFileSize", maxFileSize: "maxFileSize", multiple: "multiple", validateFn: "validateFn", acceptedTypes: "acceptedTypes", acceptedTypesErrorMessage: "acceptedTypesErrorMessage", noClick: "noClick", allowLinks: "allowLinks", labelText: "labelText", labelHidden: ["labelHidden", "labelHidden", booleanAttribute], hintText: "hintText", required: ["required", "required", booleanAttribute], helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", stacked: ["stacked", "stacked", booleanAttribute], helpKey: "helpKey" }, outputs: { filesChanged: "filesChanged", linkInputBlur: "linkInputBlur", linkChanged: "linkChanged" }, host: { properties: { "class.sky-form-field-stacked": "this.stacked" } }, providers: [
2669
2748
  SkyFileAttachmentService,
2670
2749
  { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },
2671
- ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<fieldset class=\"sky-file-drop-wrapper\">\n @if (labelText) {\n <legend\n class=\"sky-control-label sky-font-body-default\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden\n }\"\n >\n <span\n class=\"sky-file-drop-label-text\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</span\n >\n @if (required) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (helpPopoverContent || helpKey) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n }\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n ></button>\n\n <input\n #fileInput\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n />\n\n @if (customEl.children.length === 0) {\n <div class=\"sky-file-drop-contents sky-file-drop-upload-contents\">\n <div class=\"sky-file-drop-contents-not-over\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_invalid_file'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n }\n\n <div #customEl class=\"sky-file-drop-contents-custom\">\n <ng-content />\n </div>\n </div>\n @if (allowLinks) {\n <div class=\"sky-file-drop-col\">\n <div class=\"sky-file-drop-contents\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_label'\n | skyLibResources\n }}\n </div>\n </div>\n <sky-input-box [hintText]=\"linkUploadHintText\">\n <input\n type=\"text\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </sky-input-box>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-font-deemphasized sky-file-drop-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n </div>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [touched]=\"rejectedFiles.length > 0\"\n>\n @for (rejectedFile of rejectedFiles; track rejectedFile) {\n <div>\n @if (rejectedFile.errorType === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : rejectedFile.errorParam\n \"\n />\n } @else if (rejectedFile.errorType === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (rejectedFile.errorType === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (\n rejectedFile.errorType === 'validate' && rejectedFile.errorParam\n ) {\n <sky-form-error\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n }\n </div>\n }\n</sky-form-errors>\n", styles: [".sky-file-drop-wrapper:not(.sky-theme-modern *){--sky-override-file-drop-accept-border-color: #72bf44;--sky-override-file-drop-col-padding: 0 5px;--sky-override-file-drop-col-responsive-margin-bottom: 10px;--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-background-color: #eeeeef;--sky-override-file-drop-contents-border-color: #cdcfd2;--sky-override-file-drop-contents-border-radius: 0;--sky-override-file-drop-contents-border-width: 1px;--sky-override-file-drop-contents-padding: 10px;--sky-override-file-drop-drag-border-width: 1px;--sky-override-file-drop-hint-text-margin-top: var(--sky-margin-stacked-xs);--sky-override-file-drop-icon-font-size: 40px;--sky-override-file-drop-label-color: #212327;--sky-override-file-drop-label-font-size: 15px;--sky-override-file-drop-link-header-margin-bottom: 5px;--sky-override-file-drop-link-input-background-color: transparent;--sky-override-file-drop-link-input-margin-bottom: 10px;--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: 400;--sky-override-file-drop-text-header-font-size: 22px;--sky-override-file-drop-text-header-font-weight: 600;--sky-override-file-drop-text-header-line-height: 1.1;--sky-override-file-drop-text-line-height: 1.1;--sky-override-file-drop-text-margin-bottom: 20px;--sky-override-file-drop-text-margin-top: 5px;--sky-override-file-drop-upload-contents-active-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-box-shadow: none;--sky-override-file-drop-upload-contents-hover-border: #cdcfd2 solid 1px;--sky-override-file-upload-icon-color: #686c73;--sky-override-file-drop-upload-icon-margin-top: 10px}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-drop-wrapper{--sky-override-file-drop-col-padding: 0 var(--modern-space-xs);--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-border-color: var(--modern-color-gray-20);--sky-override-file-drop-contents-border-radius: var( --modern-border-radius-0 );--sky-override-file-drop-contents-padding: var(--modern-size-10);--sky-override-file-drop-icon-font-size: var(--modern-size-40);--sky-override-file-drop-label-font-size: 13px;--sky-override-file-drop-link-input-background-color: var( --modern-color-white );--sky-override-file-drop-link-input-margin-bottom: var( --sky-space-gap-form-l );--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-header-font-size: var( --sky-font-size-display-3 );--sky-override-file-drop-text-header-font-weight: var( --sky-font-weight-display-3 );--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: var(--sky-font-weight-body-m);--sky-override-file-drop-text-header-line-height: var( --modern-line_height-110 );--sky-override-file-drop-text-line-height: var(--modern-line_height-110);--sky-override-file-drop-text-margin-bottom: var(--modern-size-20);--sky-override-file-drop-upload-contents-active-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-box-shadow: var( --modern-shadow-size-0 );--sky-override-file-drop-upload-contents-hover-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-icon-margin-top: var(--modern-size-10)}:host.sky-form-field-stacked{display:block}:host-context(:has(+ sky-file-item):not(.sky-form-field-stacked)) .sky-file-drop-wrapper{margin-bottom:var(--sky-override-file-drop-non-stacked-with-item-margin-bottom, var(--sky-space-gap-form-l))}.sky-file-drop-col{padding:var(--sky-override-file-drop-col-padding, 0);position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border:var(--sky-override-file-drop-contents-border-width, var(--sky-border-width-input-base)) solid var(--sky-override-file-drop-contents-border-color, var(--sky-color-border-input-base));background-color:var(--sky-override-file-drop-contents-background-color, var(--sky-color-background-file_drop));border-radius:var(--sky-override-file-drop-contents-border-radius, var(--sky-border-radius-s));padding:var(--sky-override-file-drop-contents-padding, var(--sky-space-inset-balanced-s));cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:var(--sky-override-file-drop-link-header-margin-bottom, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop:active~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-active-border, var(--sky-border-width-input-active) solid var(--sky-color-border-input-active))}.sky-file-drop:focus-visible:not(:active){outline:var(--sky-override-file-drop-outline-focus, none)}.sky-file-drop:focus-visible:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-focus-border, var(--sky-border-width-input-focus) solid var(--sky-color-border-input-focus));box-shadow:var(--sky-override-file-drop-upload-contents-focus-box-shadow, var(--sky-elevation-focus))}.sky-file-drop:hover:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-hover-border, var(--sky-border-width-input-hover) solid var(--sky-color-border-input-hover))}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-override-file-drop-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:var(--sky-override-file-drop-drag-border-width, var(--sky-border-width-input-hover))}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:var(--sky-override-file-drop-accept-border-color, var(--sky-color-border-success))}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:var(--sky-override-file-drop-reject-border-color, var(--sky-color-border-danger))}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:var(--sky-override-file-drop-icon-font-size, var(--sky-size-icon-xl));max-height:var(--sky-override-file-drop-icon-font-size, auto);color:var(--sky-override-file-upload-icon-color, var(--sky-color-icon-deemphasized));margin-top:var(--sky-override-file-drop-upload-icon-margin-top, var(--sky-space-gap-stacked_supplemental-l))}.sky-file-drop-link{cursor:default}.sky-file-drop-link sky-input-box{--sky-background-color-input-box-group: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );--sky-background-color-input-box-group-focused: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );margin-bottom:var(--sky-override-file-drop-link-input-margin-bottom, var(--sky-space-gap-form-s))}.sky-file-drop-text-header{margin:0;font-size:var(--sky-override-file-drop-text-header-font-size, var(--sky-font-size-body-m));font-style:var(--sky-font-style-body-m);font-weight:var(--sky-override-file-drop-text-header-font-weight, var(--sky-font-weight-body-m));line-height:var(--sky-override-file-drop-text-header-line-height, var(--sky-font-line_height-body-m))}.sky-file-drop-text{margin-top:var(--sky-override-file-drop-text-margin-top, var(--sky-space-gap-stacked_supplemental-s));margin-bottom:var(--sky-override-file-drop-text-margin-bottom, 0);font-size:var(--sky-override-file-drop-text-font-size, var(--sky-font-size-body-s));font-style:var(--sky-font-style-body-s);font-weight:var(--sky-override-file-drop-text-font-weight, var(--sky-font-weight-body-s));line-height:var(--sky-override-file-drop-text-line-height, var(--sky-font-line_height-body-s))}.sky-file-drop-text,.sky-file-drop-text-header{display:block}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-control-label{color:var(--sky-override-file-drop-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-drop-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-font-weight-input-label);letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-font-line_height-input-label)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SkyFileSizePipe, name: "skyFileSize" }, { kind: "component", type: SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "touched", "dirty"] }, { kind: "ngmodule", type: SkyFormsResourcesModule }, { kind: "pipe", type: i1.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyHelpInlineModule }, { kind: "component", type: i4.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i5.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1$2.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "ngmodule", type: SkyInputBoxModule }, { kind: "component", type: SkyInputBoxComponent, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText"] }, { kind: "directive", type: SkyInputBoxControlDirective, selector: "input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)", inputs: ["autocomplete"] }, { kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i1$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }] }); }
2750
+ ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<fieldset class=\"sky-file-drop-wrapper\">\n @if (labelText) {\n <legend\n class=\"sky-control-label sky-font-body-default\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden\n }\"\n >\n <span\n class=\"sky-file-drop-label-text\"\n [ngClass]=\"{\n 'sky-control-label-required': isRequired\n }\"\n >{{ labelText }}</span\n >\n @if (isRequired) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (helpPopoverContent || helpKey) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n }\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n ></button>\n\n <input\n #fileInput\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n />\n\n @if (customEl.children.length === 0) {\n <div class=\"sky-file-drop-contents sky-file-drop-upload-contents\">\n <div class=\"sky-file-drop-contents-not-over\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_invalid_file'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n }\n\n <div #customEl class=\"sky-file-drop-contents-custom\">\n <ng-content />\n </div>\n </div>\n @if (allowLinks) {\n <div class=\"sky-file-drop-col\">\n <div class=\"sky-file-drop-contents\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_label'\n | skyLibResources\n }}\n </div>\n </div>\n <sky-input-box [hintText]=\"linkUploadHintText\">\n <input\n type=\"text\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </sky-input-box>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-font-deemphasized sky-file-drop-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n </div>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [touched]=\"ngControl ? ngControl.touched : rejectedFiles.length > 0\"\n [dirty]=\"ngControl?.dirty\"\n [errors]=\"ngControl?.errors\"\n>\n <ng-content select=\"sky-form-error\" />\n @for (rejectedFile of rejectedFiles; track rejectedFile) {\n <div>\n @if (rejectedFile.errorType === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : rejectedFile.errorParam\n \"\n />\n } @else if (rejectedFile.errorType === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (rejectedFile.errorType === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (\n rejectedFile.errorType === 'validate' && rejectedFile.errorParam\n ) {\n <sky-form-error\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n }\n </div>\n }\n</sky-form-errors>\n", styles: [".sky-file-drop-wrapper:not(.sky-theme-modern *){--sky-override-file-drop-accept-border-color: #72bf44;--sky-override-file-drop-col-padding: 0 5px;--sky-override-file-drop-col-responsive-margin-bottom: 10px;--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-background-color: #eeeeef;--sky-override-file-drop-contents-border-color: #cdcfd2;--sky-override-file-drop-contents-border-radius: 0;--sky-override-file-drop-contents-border-width: 1px;--sky-override-file-drop-contents-padding: 10px;--sky-override-file-drop-drag-border-width: 1px;--sky-override-file-drop-hint-text-margin-top: var(--sky-margin-stacked-xs);--sky-override-file-drop-icon-font-size: 40px;--sky-override-file-drop-label-color: #212327;--sky-override-file-drop-label-font-size: 15px;--sky-override-file-drop-link-header-margin-bottom: 5px;--sky-override-file-drop-link-input-background-color: transparent;--sky-override-file-drop-link-input-margin-bottom: 10px;--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: 400;--sky-override-file-drop-text-header-font-size: 22px;--sky-override-file-drop-text-header-font-weight: 600;--sky-override-file-drop-text-header-line-height: 1.1;--sky-override-file-drop-text-line-height: 1.1;--sky-override-file-drop-text-margin-bottom: 20px;--sky-override-file-drop-text-margin-top: 5px;--sky-override-file-drop-upload-contents-active-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-box-shadow: none;--sky-override-file-drop-upload-contents-hover-border: #cdcfd2 solid 1px;--sky-override-file-upload-icon-color: #686c73;--sky-override-file-drop-upload-icon-margin-top: 10px}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-drop-wrapper{--sky-override-file-drop-col-padding: 0 var(--modern-space-xs);--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-border-color: var(--modern-color-gray-20);--sky-override-file-drop-contents-border-radius: var( --modern-border-radius-0 );--sky-override-file-drop-contents-padding: var(--modern-size-10);--sky-override-file-drop-icon-font-size: var(--modern-size-40);--sky-override-file-drop-label-font-size: 13px;--sky-override-file-drop-link-input-background-color: var( --modern-color-white );--sky-override-file-drop-link-input-margin-bottom: var( --sky-space-gap-form-l );--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-header-font-size: var( --sky-font-size-display-3 );--sky-override-file-drop-text-header-font-weight: var( --sky-font-weight-display-3 );--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: var(--sky-font-weight-body-m);--sky-override-file-drop-text-header-line-height: var( --modern-line_height-110 );--sky-override-file-drop-text-line-height: var(--modern-line_height-110);--sky-override-file-drop-text-margin-bottom: var(--modern-size-20);--sky-override-file-drop-upload-contents-active-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-box-shadow: var( --modern-shadow-size-0 );--sky-override-file-drop-upload-contents-hover-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-icon-margin-top: var(--modern-size-10)}:host.sky-form-field-stacked{display:block}:host-context(:has(+ sky-file-item):not(.sky-form-field-stacked)) .sky-file-drop-wrapper{margin-bottom:var(--sky-override-file-drop-non-stacked-with-item-margin-bottom, var(--sky-space-gap-form-l))}.sky-file-drop-col{padding:var(--sky-override-file-drop-col-padding, 0);position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border:var(--sky-override-file-drop-contents-border-width, var(--sky-border-width-input-base)) solid var(--sky-override-file-drop-contents-border-color, var(--sky-color-border-input-base));background-color:var(--sky-override-file-drop-contents-background-color, var(--sky-color-background-file_drop));border-radius:var(--sky-override-file-drop-contents-border-radius, var(--sky-border-radius-s));padding:var(--sky-override-file-drop-contents-padding, var(--sky-space-inset-balanced-s));cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:var(--sky-override-file-drop-link-header-margin-bottom, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop:active~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-active-border, var(--sky-border-width-input-active) solid var(--sky-color-border-input-active))}.sky-file-drop:focus-visible:not(:active){outline:var(--sky-override-file-drop-outline-focus, none)}.sky-file-drop:focus-visible:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-focus-border, var(--sky-border-width-input-focus) solid var(--sky-color-border-input-focus));box-shadow:var(--sky-override-file-drop-upload-contents-focus-box-shadow, var(--sky-elevation-focus))}.sky-file-drop:hover:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-hover-border, var(--sky-border-width-input-hover) solid var(--sky-color-border-input-hover))}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-override-file-drop-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:var(--sky-override-file-drop-drag-border-width, var(--sky-border-width-input-hover))}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:var(--sky-override-file-drop-accept-border-color, var(--sky-color-border-success))}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:var(--sky-override-file-drop-reject-border-color, var(--sky-color-border-danger))}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:var(--sky-override-file-drop-icon-font-size, var(--sky-size-icon-xl));max-height:var(--sky-override-file-drop-icon-font-size, auto);color:var(--sky-override-file-upload-icon-color, var(--sky-color-icon-deemphasized));margin-top:var(--sky-override-file-drop-upload-icon-margin-top, var(--sky-space-gap-stacked_supplemental-l))}.sky-file-drop-link{cursor:default}.sky-file-drop-link sky-input-box{--sky-background-color-input-box-group: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );--sky-background-color-input-box-group-focused: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );margin-bottom:var(--sky-override-file-drop-link-input-margin-bottom, var(--sky-space-gap-form-s))}.sky-file-drop-text-header{margin:0;font-size:var(--sky-override-file-drop-text-header-font-size, var(--sky-font-size-body-m));font-style:var(--sky-font-style-body-m);font-weight:var(--sky-override-file-drop-text-header-font-weight, var(--sky-font-weight-body-m));line-height:var(--sky-override-file-drop-text-header-line-height, var(--sky-font-line_height-body-m))}.sky-file-drop-text{margin-top:var(--sky-override-file-drop-text-margin-top, var(--sky-space-gap-stacked_supplemental-s));margin-bottom:var(--sky-override-file-drop-text-margin-bottom, 0);font-size:var(--sky-override-file-drop-text-font-size, var(--sky-font-size-body-s));font-style:var(--sky-font-style-body-s);font-weight:var(--sky-override-file-drop-text-font-weight, var(--sky-font-weight-body-s));line-height:var(--sky-override-file-drop-text-line-height, var(--sky-font-line_height-body-s))}.sky-file-drop-text,.sky-file-drop-text-header{display:block}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-control-label{color:var(--sky-override-file-drop-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-drop-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-font-weight-input-label);letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-font-line_height-input-label)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SkyFileSizePipe, name: "skyFileSize" }, { kind: "component", type: SkyFormErrorComponent, selector: "sky-form-error", inputs: ["errorName", "errorText"] }, { kind: "component", type: SkyFormErrorsComponent, selector: "sky-form-errors", inputs: ["errors", "labelText", "touched", "dirty"] }, { kind: "ngmodule", type: SkyFormsResourcesModule }, { kind: "pipe", type: i1.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyHelpInlineModule }, { kind: "component", type: i4.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "helpKey", "labelledBy", "labelText", "popoverContent", "popoverTitle"], outputs: ["actionClick"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i5.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1$2.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "ngmodule", type: SkyInputBoxModule }, { kind: "component", type: SkyInputBoxComponent, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText"] }, { kind: "directive", type: SkyInputBoxControlDirective, selector: "input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)", inputs: ["autocomplete"] }, { kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i1$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }] }); }
2672
2751
  }
2673
2752
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SkyFileDropComponent, decorators: [{
2674
2753
  type: Component,
@@ -2687,8 +2766,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2687
2766
  SkyIdModule,
2688
2767
  SkyInputBoxModule,
2689
2768
  SkyThemeModule,
2690
- ], template: "<fieldset class=\"sky-file-drop-wrapper\">\n @if (labelText) {\n <legend\n class=\"sky-control-label sky-font-body-default\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden\n }\"\n >\n <span\n class=\"sky-file-drop-label-text\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</span\n >\n @if (required) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (helpPopoverContent || helpKey) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n }\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n ></button>\n\n <input\n #fileInput\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n />\n\n @if (customEl.children.length === 0) {\n <div class=\"sky-file-drop-contents sky-file-drop-upload-contents\">\n <div class=\"sky-file-drop-contents-not-over\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_invalid_file'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n }\n\n <div #customEl class=\"sky-file-drop-contents-custom\">\n <ng-content />\n </div>\n </div>\n @if (allowLinks) {\n <div class=\"sky-file-drop-col\">\n <div class=\"sky-file-drop-contents\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_label'\n | skyLibResources\n }}\n </div>\n </div>\n <sky-input-box [hintText]=\"linkUploadHintText\">\n <input\n type=\"text\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </sky-input-box>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-font-deemphasized sky-file-drop-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n </div>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [touched]=\"rejectedFiles.length > 0\"\n>\n @for (rejectedFile of rejectedFiles; track rejectedFile) {\n <div>\n @if (rejectedFile.errorType === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : rejectedFile.errorParam\n \"\n />\n } @else if (rejectedFile.errorType === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (rejectedFile.errorType === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (\n rejectedFile.errorType === 'validate' && rejectedFile.errorParam\n ) {\n <sky-form-error\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n }\n </div>\n }\n</sky-form-errors>\n", styles: [".sky-file-drop-wrapper:not(.sky-theme-modern *){--sky-override-file-drop-accept-border-color: #72bf44;--sky-override-file-drop-col-padding: 0 5px;--sky-override-file-drop-col-responsive-margin-bottom: 10px;--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-background-color: #eeeeef;--sky-override-file-drop-contents-border-color: #cdcfd2;--sky-override-file-drop-contents-border-radius: 0;--sky-override-file-drop-contents-border-width: 1px;--sky-override-file-drop-contents-padding: 10px;--sky-override-file-drop-drag-border-width: 1px;--sky-override-file-drop-hint-text-margin-top: var(--sky-margin-stacked-xs);--sky-override-file-drop-icon-font-size: 40px;--sky-override-file-drop-label-color: #212327;--sky-override-file-drop-label-font-size: 15px;--sky-override-file-drop-link-header-margin-bottom: 5px;--sky-override-file-drop-link-input-background-color: transparent;--sky-override-file-drop-link-input-margin-bottom: 10px;--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: 400;--sky-override-file-drop-text-header-font-size: 22px;--sky-override-file-drop-text-header-font-weight: 600;--sky-override-file-drop-text-header-line-height: 1.1;--sky-override-file-drop-text-line-height: 1.1;--sky-override-file-drop-text-margin-bottom: 20px;--sky-override-file-drop-text-margin-top: 5px;--sky-override-file-drop-upload-contents-active-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-box-shadow: none;--sky-override-file-drop-upload-contents-hover-border: #cdcfd2 solid 1px;--sky-override-file-upload-icon-color: #686c73;--sky-override-file-drop-upload-icon-margin-top: 10px}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-drop-wrapper{--sky-override-file-drop-col-padding: 0 var(--modern-space-xs);--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-border-color: var(--modern-color-gray-20);--sky-override-file-drop-contents-border-radius: var( --modern-border-radius-0 );--sky-override-file-drop-contents-padding: var(--modern-size-10);--sky-override-file-drop-icon-font-size: var(--modern-size-40);--sky-override-file-drop-label-font-size: 13px;--sky-override-file-drop-link-input-background-color: var( --modern-color-white );--sky-override-file-drop-link-input-margin-bottom: var( --sky-space-gap-form-l );--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-header-font-size: var( --sky-font-size-display-3 );--sky-override-file-drop-text-header-font-weight: var( --sky-font-weight-display-3 );--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: var(--sky-font-weight-body-m);--sky-override-file-drop-text-header-line-height: var( --modern-line_height-110 );--sky-override-file-drop-text-line-height: var(--modern-line_height-110);--sky-override-file-drop-text-margin-bottom: var(--modern-size-20);--sky-override-file-drop-upload-contents-active-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-box-shadow: var( --modern-shadow-size-0 );--sky-override-file-drop-upload-contents-hover-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-icon-margin-top: var(--modern-size-10)}:host.sky-form-field-stacked{display:block}:host-context(:has(+ sky-file-item):not(.sky-form-field-stacked)) .sky-file-drop-wrapper{margin-bottom:var(--sky-override-file-drop-non-stacked-with-item-margin-bottom, var(--sky-space-gap-form-l))}.sky-file-drop-col{padding:var(--sky-override-file-drop-col-padding, 0);position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border:var(--sky-override-file-drop-contents-border-width, var(--sky-border-width-input-base)) solid var(--sky-override-file-drop-contents-border-color, var(--sky-color-border-input-base));background-color:var(--sky-override-file-drop-contents-background-color, var(--sky-color-background-file_drop));border-radius:var(--sky-override-file-drop-contents-border-radius, var(--sky-border-radius-s));padding:var(--sky-override-file-drop-contents-padding, var(--sky-space-inset-balanced-s));cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:var(--sky-override-file-drop-link-header-margin-bottom, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop:active~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-active-border, var(--sky-border-width-input-active) solid var(--sky-color-border-input-active))}.sky-file-drop:focus-visible:not(:active){outline:var(--sky-override-file-drop-outline-focus, none)}.sky-file-drop:focus-visible:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-focus-border, var(--sky-border-width-input-focus) solid var(--sky-color-border-input-focus));box-shadow:var(--sky-override-file-drop-upload-contents-focus-box-shadow, var(--sky-elevation-focus))}.sky-file-drop:hover:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-hover-border, var(--sky-border-width-input-hover) solid var(--sky-color-border-input-hover))}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-override-file-drop-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:var(--sky-override-file-drop-drag-border-width, var(--sky-border-width-input-hover))}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:var(--sky-override-file-drop-accept-border-color, var(--sky-color-border-success))}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:var(--sky-override-file-drop-reject-border-color, var(--sky-color-border-danger))}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:var(--sky-override-file-drop-icon-font-size, var(--sky-size-icon-xl));max-height:var(--sky-override-file-drop-icon-font-size, auto);color:var(--sky-override-file-upload-icon-color, var(--sky-color-icon-deemphasized));margin-top:var(--sky-override-file-drop-upload-icon-margin-top, var(--sky-space-gap-stacked_supplemental-l))}.sky-file-drop-link{cursor:default}.sky-file-drop-link sky-input-box{--sky-background-color-input-box-group: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );--sky-background-color-input-box-group-focused: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );margin-bottom:var(--sky-override-file-drop-link-input-margin-bottom, var(--sky-space-gap-form-s))}.sky-file-drop-text-header{margin:0;font-size:var(--sky-override-file-drop-text-header-font-size, var(--sky-font-size-body-m));font-style:var(--sky-font-style-body-m);font-weight:var(--sky-override-file-drop-text-header-font-weight, var(--sky-font-weight-body-m));line-height:var(--sky-override-file-drop-text-header-line-height, var(--sky-font-line_height-body-m))}.sky-file-drop-text{margin-top:var(--sky-override-file-drop-text-margin-top, var(--sky-space-gap-stacked_supplemental-s));margin-bottom:var(--sky-override-file-drop-text-margin-bottom, 0);font-size:var(--sky-override-file-drop-text-font-size, var(--sky-font-size-body-s));font-style:var(--sky-font-style-body-s);font-weight:var(--sky-override-file-drop-text-font-weight, var(--sky-font-weight-body-s));line-height:var(--sky-override-file-drop-text-line-height, var(--sky-font-line_height-body-s))}.sky-file-drop-text,.sky-file-drop-text-header{display:block}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-control-label{color:var(--sky-override-file-drop-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-drop-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-font-weight-input-label);letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-font-line_height-input-label)}\n"] }]
2691
- }], propDecorators: { filesChanged: [{
2769
+ ], template: "<fieldset class=\"sky-file-drop-wrapper\">\n @if (labelText) {\n <legend\n class=\"sky-control-label sky-font-body-default\"\n [ngClass]=\"{\n 'sky-screen-reader-only': labelHidden\n }\"\n >\n <span\n class=\"sky-file-drop-label-text\"\n [ngClass]=\"{\n 'sky-control-label-required': isRequired\n }\"\n >{{ labelText }}</span\n >\n @if (isRequired) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_file_attachment_required' | skyLibResources\n }}</span>\n }\n @if (helpPopoverContent || helpKey) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n }\n <div\n class=\"sky-file-drop-row\"\n [ngClass]=\"{ 'sky-file-drop-allow-links': allowLinks }\"\n >\n <div\n class=\"sky-file-drop-col\"\n [ngClass]=\"{\n 'sky-file-drop-accept': acceptedOver,\n 'sky-file-drop-reject': rejectedOver\n }\"\n >\n <button\n class=\"sky-file-drop sky-file-drop-target\"\n type=\"button\"\n [attr.aria-label]=\"\n fileUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_drag_or_click' | skyLibResources)\n \"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n (click)=\"dropClicked()\"\n (dragover)=\"fileDragOver($event)\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n ></button>\n\n <input\n #fileInput\n tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"file\"\n class=\"sky-file-input-hidden\"\n [attr.multiple]=\"multiple ? multiple : null\"\n [attr.accept]=\"acceptedTypes ? acceptedTypes : null\"\n (change)=\"fileChangeEvent($event)\"\n />\n\n @if (customEl.children.length === 0) {\n <div class=\"sky-file-drop-contents sky-file-drop-upload-contents\">\n <div class=\"sky-file-drop-contents-not-over\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drag_file_here'\n | skyLibResources\n }}\n </div>\n <div class=\"sky-file-drop-text\">\n {{\n 'skyux_file_attachment_file_upload_or_click_to_browse'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"cloud-upload\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is valid -->\n <div class=\"sky-file-drop-contents-accept\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_drop_files_here'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"bullseye\" class=\"sky-file-upload-icon\" />\n </div>\n\n <!-- This will appear when file is dragged over and is invalid -->\n <div class=\"sky-file-drop-contents-reject\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_invalid_file'\n | skyLibResources\n }}\n </div>\n <sky-icon icon=\"times-circle\" class=\"sky-file-upload-icon\" />\n </div>\n </div>\n }\n\n <div #customEl class=\"sky-file-drop-contents-custom\">\n <ng-content />\n </div>\n </div>\n @if (allowLinks) {\n <div class=\"sky-file-drop-col\">\n <div class=\"sky-file-drop-contents\">\n <div class=\"sky-file-drop-link\">\n <div class=\"sky-file-drop-link-header\">\n <div\n class=\"sky-file-drop-text-header\"\n [skyThemeClass]=\"{\n 'sky-font-display-3': 'default'\n }\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_label'\n | skyLibResources\n }}\n </div>\n </div>\n <sky-input-box [hintText]=\"linkUploadHintText\">\n <input\n type=\"text\"\n [attr.aria-label]=\"\n linkUploadAriaLabel ||\n ('skyux_file_attachment_file_upload_link_label'\n | skyLibResources)\n \"\n [attr.aria-invalid]=\"!!rejectedFiles.length\"\n [attr.aria-errormessage]=\"\n labelText && rejectedFiles.length ? errorId : undefined\n \"\n [(ngModel)]=\"linkUrl\"\n (blur)=\"onLinkBlur()\"\n (keyup)=\"addLinkEnter($event)\"\n />\n </sky-input-box>\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!linkUrl\"\n (click)=\"addLink($event)\"\n >\n {{\n 'skyux_file_attachment_file_upload_link_done' | skyLibResources\n }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-font-deemphasized sky-file-drop-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n </div>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [labelText]=\"labelText\"\n [touched]=\"ngControl ? ngControl.touched : rejectedFiles.length > 0\"\n [dirty]=\"ngControl?.dirty\"\n [errors]=\"ngControl?.errors\"\n>\n <ng-content select=\"sky-form-error\" />\n @for (rejectedFile of rejectedFiles; track rejectedFile) {\n <div>\n @if (rejectedFile.errorType === 'fileType') {\n <sky-form-error\n errorName=\"fileType\"\n [errorText]=\"\n 'skyux_file_attachment_file_type_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : rejectedFile.errorParam\n \"\n />\n } @else if (rejectedFile.errorType === 'maxFileSize') {\n <sky-form-error\n errorName=\"maxFileSize\"\n [errorText]=\"\n acceptedTypesErrorMessage ??\n 'skyux_file_attachment_max_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (rejectedFile.errorType === 'minFileSize') {\n <sky-form-error\n errorName=\"minFileSize\"\n [errorText]=\"\n 'skyux_file_attachment_min_file_size_error_label_text_with_name'\n | skyLibResources\n : rejectedFile.file.name\n : (rejectedFile.errorParam | skyFileSize)\n \"\n />\n } @else if (\n rejectedFile.errorType === 'validate' && rejectedFile.errorParam\n ) {\n <sky-form-error\n errorName=\"validate\"\n [errorText]=\"rejectedFile.file.name + ': ' + rejectedFile.errorParam\"\n />\n }\n </div>\n }\n</sky-form-errors>\n", styles: [".sky-file-drop-wrapper:not(.sky-theme-modern *){--sky-override-file-drop-accept-border-color: #72bf44;--sky-override-file-drop-col-padding: 0 5px;--sky-override-file-drop-col-responsive-margin-bottom: 10px;--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-background-color: #eeeeef;--sky-override-file-drop-contents-border-color: #cdcfd2;--sky-override-file-drop-contents-border-radius: 0;--sky-override-file-drop-contents-border-width: 1px;--sky-override-file-drop-contents-padding: 10px;--sky-override-file-drop-drag-border-width: 1px;--sky-override-file-drop-hint-text-margin-top: var(--sky-margin-stacked-xs);--sky-override-file-drop-icon-font-size: 40px;--sky-override-file-drop-label-color: #212327;--sky-override-file-drop-label-font-size: 15px;--sky-override-file-drop-link-header-margin-bottom: 5px;--sky-override-file-drop-link-input-background-color: transparent;--sky-override-file-drop-link-input-margin-bottom: 10px;--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: 400;--sky-override-file-drop-text-header-font-size: 22px;--sky-override-file-drop-text-header-font-weight: 600;--sky-override-file-drop-text-header-line-height: 1.1;--sky-override-file-drop-text-line-height: 1.1;--sky-override-file-drop-text-margin-bottom: 20px;--sky-override-file-drop-text-margin-top: 5px;--sky-override-file-drop-upload-contents-active-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-border: #cdcfd2 solid 1px;--sky-override-file-drop-upload-contents-focus-box-shadow: none;--sky-override-file-drop-upload-contents-hover-border: #cdcfd2 solid 1px;--sky-override-file-upload-icon-color: #686c73;--sky-override-file-drop-upload-icon-margin-top: 10px}:host-context(.sky-theme-modern:not(.sky-theme-brand-blackbaud)) .sky-file-drop-wrapper{--sky-override-file-drop-col-padding: 0 var(--modern-space-xs);--sky-override-file-drop-col-responsive-margin-right: 0;--sky-override-file-drop-contents-border-color: var(--modern-color-gray-20);--sky-override-file-drop-contents-border-radius: var( --modern-border-radius-0 );--sky-override-file-drop-contents-padding: var(--modern-size-10);--sky-override-file-drop-icon-font-size: var(--modern-size-40);--sky-override-file-drop-label-font-size: 13px;--sky-override-file-drop-link-input-background-color: var( --modern-color-white );--sky-override-file-drop-link-input-margin-bottom: var( --sky-space-gap-form-l );--sky-override-file-drop-non-stacked-with-item-margin-bottom: 0;--sky-override-file-drop-outline-focus: auto;--sky-override-file-drop-reject-border-color: #ef4044;--sky-override-file-drop-text-header-font-size: var( --sky-font-size-display-3 );--sky-override-file-drop-text-header-font-weight: var( --sky-font-weight-display-3 );--sky-override-file-drop-text-font-size: 15px;--sky-override-file-drop-text-font-weight: var(--sky-font-weight-body-m);--sky-override-file-drop-text-header-line-height: var( --modern-line_height-110 );--sky-override-file-drop-text-line-height: var(--modern-line_height-110);--sky-override-file-drop-text-margin-bottom: var(--modern-size-20);--sky-override-file-drop-upload-contents-active-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-contents-focus-box-shadow: var( --modern-shadow-size-0 );--sky-override-file-drop-upload-contents-hover-border: var( --modern-color-gray-20 ) solid var(--modern-size-1);--sky-override-file-drop-upload-icon-margin-top: var(--modern-size-10)}:host.sky-form-field-stacked{display:block}:host-context(:has(+ sky-file-item):not(.sky-form-field-stacked)) .sky-file-drop-wrapper{margin-bottom:var(--sky-override-file-drop-non-stacked-with-item-margin-bottom, var(--sky-space-gap-form-l))}.sky-file-drop-col{padding:var(--sky-override-file-drop-col-padding, 0);position:relative}:host .sky-file-drop-row{display:block}:host .sky-file-drop-col{flex-basis:auto}:host .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-row,:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:block}:host-context(.sky-responsive-container-xs) .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:auto}:host-context(.sky-responsive-container-xs) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-bottom:var(--sky-override-file-drop-col-responsive-margin-bottom, var(--sky-space-gap-form-s))}:host-context(.sky-responsive-container-xs) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:auto}@media (min-width: 768px){:host .sky-file-drop-row{display:flex}:host .sky-file-drop-col{flex-basis:100%}:host .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}}:host-context(.sky-responsive-container-sm) .sky-file-drop-row,:host-context(.sky-responsive-container-md) .sky-file-drop-row,:host-context(.sky-responsive-container-lg) .sky-file-drop-row{display:flex}:host-context(.sky-responsive-container-sm) .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-col{flex-basis:100%}:host-context(.sky-responsive-container-sm) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-md) .sky-file-drop-col:not(:last-of-type),:host-context(.sky-responsive-container-lg) .sky-file-drop-col:not(:last-of-type){margin-right:var(--sky-override-file-drop-col-responsive-margin-right, var(--sky-space-gap-action_group-m));margin-bottom:0}:host-context(.sky-responsive-container-sm) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-md) .sky-file-drop-allow-links .sky-file-drop-col,:host-context(.sky-responsive-container-lg) .sky-file-drop-allow-links .sky-file-drop-col{flex-basis:50%}button.sky-file-drop{height:100%;position:absolute;inset:0;z-index:1}button.sky-file-drop:hover{cursor:pointer}.sky-file-drop-contents{border:var(--sky-override-file-drop-contents-border-width, var(--sky-border-width-input-base)) solid var(--sky-override-file-drop-contents-border-color, var(--sky-color-border-input-base));background-color:var(--sky-override-file-drop-contents-background-color, var(--sky-color-background-file_drop));border-radius:var(--sky-override-file-drop-contents-border-radius, var(--sky-border-radius-s));padding:var(--sky-override-file-drop-contents-padding, var(--sky-space-inset-balanced-s));cursor:pointer;width:100%;text-align:center;height:100%}.sky-file-drop-contents .sky-file-drop-link-header{margin-bottom:var(--sky-override-file-drop-link-header-margin-bottom, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop:active~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-active-border, var(--sky-border-width-input-active) solid var(--sky-color-border-input-active))}.sky-file-drop:focus-visible:not(:active){outline:var(--sky-override-file-drop-outline-focus, none)}.sky-file-drop:focus-visible:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-focus-border, var(--sky-border-width-input-focus) solid var(--sky-color-border-input-focus));box-shadow:var(--sky-override-file-drop-upload-contents-focus-box-shadow, var(--sky-elevation-focus))}.sky-file-drop:hover:not(:active)~.sky-file-drop-contents{border:var(--sky-override-file-drop-upload-contents-hover-border, var(--sky-border-width-input-hover) solid var(--sky-color-border-input-hover))}.sky-file-drop-hint-text{text-align:left;margin-top:var(--sky-override-file-drop-hint-text-margin-top, var(--sky-space-gap-stacked_supplemental-s))}.sky-file-drop-accept .sky-file-drop-contents,.sky-file-drop-reject .sky-file-drop-contents{border-style:dashed;border-width:var(--sky-override-file-drop-drag-border-width, var(--sky-border-width-input-hover))}.sky-file-drop-accept .sky-file-drop-contents-not-over,.sky-file-drop-reject .sky-file-drop-contents-not-over{display:none}.sky-file-drop-accept .sky-file-drop-contents{border-color:var(--sky-override-file-drop-accept-border-color, var(--sky-color-border-success))}.sky-file-drop-accept .sky-file-drop-contents-accept{display:block}.sky-file-drop-reject .sky-file-drop-contents{border-color:var(--sky-override-file-drop-reject-border-color, var(--sky-color-border-danger))}.sky-file-drop-reject .sky-file-drop-contents-reject{display:block}.sky-file-drop-contents-accept,.sky-file-drop-contents-reject{display:none}.sky-file-upload-icon{display:block;font-size:var(--sky-override-file-drop-icon-font-size, var(--sky-size-icon-xl));max-height:var(--sky-override-file-drop-icon-font-size, auto);color:var(--sky-override-file-upload-icon-color, var(--sky-color-icon-deemphasized));margin-top:var(--sky-override-file-drop-upload-icon-margin-top, var(--sky-space-gap-stacked_supplemental-l))}.sky-file-drop-link{cursor:default}.sky-file-drop-link sky-input-box{--sky-background-color-input-box-group: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );--sky-background-color-input-box-group-focused: var( --sky-override-file-drop-link-input-background-color, var(--bb-color-white) );margin-bottom:var(--sky-override-file-drop-link-input-margin-bottom, var(--sky-space-gap-form-s))}.sky-file-drop-text-header{margin:0;font-size:var(--sky-override-file-drop-text-header-font-size, var(--sky-font-size-body-m));font-style:var(--sky-font-style-body-m);font-weight:var(--sky-override-file-drop-text-header-font-weight, var(--sky-font-weight-body-m));line-height:var(--sky-override-file-drop-text-header-line-height, var(--sky-font-line_height-body-m))}.sky-file-drop-text{margin-top:var(--sky-override-file-drop-text-margin-top, var(--sky-space-gap-stacked_supplemental-s));margin-bottom:var(--sky-override-file-drop-text-margin-bottom, 0);font-size:var(--sky-override-file-drop-text-font-size, var(--sky-font-size-body-s));font-style:var(--sky-font-style-body-s);font-weight:var(--sky-override-file-drop-text-font-weight, var(--sky-font-weight-body-s));line-height:var(--sky-override-file-drop-text-line-height, var(--sky-font-line_height-body-s))}.sky-file-drop-text,.sky-file-drop-text-header{display:block}.sky-file-drop{background-color:transparent;border:none;display:block;-webkit-appearance:none;width:100%;padding:0}.sky-file-input-hidden{display:none}.sky-control-label{color:var(--sky-override-file-drop-label-color, var(--sky-color-text-deemphasized));font-size:var(--sky-override-file-drop-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-font-weight-input-label);letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-font-line_height-input-label)}\n"] }]
2770
+ }], ctorParameters: () => [], propDecorators: { filesChanged: [{
2692
2771
  type: Output
2693
2772
  }], linkInputBlur: [{
2694
2773
  type: Output