@skyux/forms 14.0.0 → 14.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-forms.mjs","sources":["../../../../../libs/components/forms/src/lib/modules/shared/sky-forms-resources.module.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter-screen-reader.pipe.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter-indicator.component.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter-indicator.component.html","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter.directive.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter.module.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors-enabled-token.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-error.component.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-error.module.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors.component.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors.component.html","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors.module.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-group.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-group.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label-text-label.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label-text-label.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox.module.ts","../../../../../libs/components/forms/src/lib/modules/field-group/field-group.component.ts","../../../../../libs/components/forms/src/lib/modules/field-group/field-group.component.html","../../../../../libs/components/forms/src/lib/modules/field-group/field-group.module.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment-label.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment-label.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/shared/file-size.pipe.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment-join-ids.pipe.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.service.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/shared/file-item.service.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.module.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-host.service.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-control.directive.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-hint-text.pipe.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-adapter.service.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box.component.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box.component.html","../../../../../libs/components/forms/src/lib/modules/input-box/input-box.module.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-drop.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-drop.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-item.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-item.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-drop.module.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachments.module.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio-group-id.service.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio.component.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio.component.html","../../../../../libs/components/forms/src/lib/modules/radio/radio-group.component.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio-group.component.html","../../../../../libs/components/forms/src/lib/modules/radio/radio-label.component.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio-label.component.html","../../../../../libs/components/forms/src/lib/modules/radio/radio.module.ts","../../../../../libs/components/forms/src/lib/modules/required-state/required-state.directive.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-adapter.service.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-description.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-description.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-grid.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-grid.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-header.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-header.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box.module.ts","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch-label.component.ts","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch-label.component.html","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch.component.ts","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch.component.html","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch.module.ts","../../../../../libs/components/forms/src/skyux-forms.ts"],"sourcesContent":["/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-forms' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_character_count_message: { message: '{0} characters out of {1}' },\n skyux_character_count_over_limit: {\n message: 'You are over the character limit.',\n },\n skyux_form_error_character_count: {\n message: 'Limit {0} to {1} characters.',\n },\n skyux_form_error_date: { message: 'Select or enter a valid date.' },\n skyux_form_error_date_max: {\n message: 'Select or enter a date on or before {0}.',\n },\n skyux_form_error_date_min: {\n message: 'Select or enter a date on or after {0}.',\n },\n skyux_form_error_fuzzy_date_future_disabled: {\n message: 'Future dates are disabled. Select or enter a date in the past.',\n },\n skyux_form_error_fuzzy_date_invalid: {\n message: 'Select or enter a valid date.',\n },\n skyux_form_error_fuzzy_date_max_date: {\n message: 'Select or enter a date on or before {0}.',\n },\n skyux_form_error_fuzzy_date_min_date: {\n message: 'Select or enter a date on or after {0}.',\n },\n skyux_form_error_fuzzy_date_year_required: { message: 'Year is required.' },\n skyux_form_error_email: {\n message: 'Enter an email address with a valid format.',\n },\n skyux_form_error_maxlength: { message: 'Limit {0} to {1} characters.' },\n skyux_form_error_minlength: {\n message: '{0} must be at least {1} characters.',\n },\n skyux_form_error_phone: {\n message:\n 'Enter a phone number matching the format for the selected country.',\n },\n skyux_form_error_required: { message: '{0} is required.' },\n skyux_form_error_time: { message: 'Select or enter a valid time.' },\n skyux_form_error_url: { message: 'Enter a URL with a valid format.' },\n skyux_form_group_required: { message: 'Required' },\n skyux_file_attachment_button_label_choose_file: { message: 'Attach file' },\n skyux_file_attachment_button_label_choose_file_label: {\n message: 'Attach file for',\n },\n skyux_file_attachment_button_label_replace_file: {\n message: 'Replace file',\n },\n skyux_file_attachment_button_label_replace_file_label: {\n message: 'Replace file {0} for',\n },\n skyux_file_attachment_file_item_delete: { message: 'Delete {0}' },\n skyux_file_attachment_file_item_remove: { message: 'Remove file {0} for' },\n skyux_file_attachment_file_size_b_plural: { message: '{0} bytes' },\n skyux_file_attachment_file_size_b_singular: { message: '{0} byte' },\n skyux_file_attachment_file_size_gb: { message: '{0} GB' },\n skyux_file_attachment_file_size_kb: { message: '{0} KB' },\n skyux_file_attachment_file_size_mb: { message: '{0} MB' },\n skyux_file_attachment_file_upload_drag_file_here: {\n message: 'Drag a file here',\n },\n skyux_file_attachment_file_upload_drag_or_click: {\n message: 'Drag a file here or click to browse',\n },\n skyux_file_attachment_file_upload_drop_files_here: {\n message: 'Drop files here',\n },\n skyux_file_attachment_file_upload_file_added: { message: '{0} added.' },\n skyux_file_attachment_file_upload_file_replaced: {\n message: '{0} removed. {1} added.',\n },\n skyux_file_attachment_file_upload_file_removed: { message: '{0} removed.' },\n skyux_file_attachment_file_upload_image_preview_alt_text: {\n message: 'Image preview',\n },\n skyux_file_attachment_file_upload_invalid_file: {\n message: 'This file type is invalid',\n },\n skyux_file_attachment_file_upload_link_label: { message: 'Link to a file' },\n skyux_file_attachment_file_upload_or_click_to_browse: {\n message: 'or click to browse',\n },\n skyux_file_attachment_file_upload_link_done: { message: 'Done' },\n skyux_file_attachment_file_upload_link_added: {\n message: 'Link to {0} added.',\n },\n skyux_file_attachment_file_upload_link_removed: {\n message: 'Link to {0} removed.',\n },\n skyux_file_attachment_file_type_error_label_text: {\n message: 'Upload one of these file types: {0}.',\n },\n skyux_file_attachment_file_type_error_label_text_with_name: {\n message: '{0}: Upload one of these file types: {1}.',\n },\n skyux_file_attachment_max_file_size_error_label_text: {\n message: 'Upload a file under {0}.',\n },\n skyux_file_attachment_max_file_size_error_label_text_with_name: {\n message: '{0}: Upload a file under {1}.',\n },\n skyux_file_attachment_min_file_size_error_label_text: {\n message: 'Upload a file over {0}.',\n },\n skyux_file_attachment_min_file_size_error_label_text_with_name: {\n message: '{0}: Upload a file over {1}.',\n },\n skyux_file_attachment_label_no_file_chosen: { message: 'No file chosen.' },\n skyux_file_attachment_required: { message: 'Required' },\n skyux_input_box_help_inline_aria_label: {\n message: 'Show help content for {0}',\n },\n },\n 'FR-CA': {\n skyux_character_count_message: { message: '{0} caractères de {1}' },\n skyux_character_count_over_limit: {\n message: 'Vous avez dépassé la limite de caractères.',\n },\n skyux_form_error_character_count: {\n message: 'Limite {0} de {1} caractère(s).',\n },\n skyux_form_error_date: {\n message: 'Sélectionnez ou entrez une date valide.',\n },\n skyux_form_error_date_max: {\n message: 'Sélectionnez ou entrez une date le ou avant le {0}.',\n },\n skyux_form_error_date_min: {\n message: 'Sélectionnez ou entrez une date le ou après le {0}.',\n },\n skyux_form_error_fuzzy_date_future_disabled: {\n message:\n 'Les dates futures sont désactivées. Sélectionnez ou entrez une date dans le passé.',\n },\n skyux_form_error_fuzzy_date_invalid: {\n message: 'Sélectionnez ou entrez une date valide.',\n },\n skyux_form_error_fuzzy_date_max_date: {\n message: 'Sélectionnez ou entrez une date le ou avant le {0}.',\n },\n skyux_form_error_fuzzy_date_min_date: {\n message: 'Sélectionnez ou entrez une date le ou après le {0}.',\n },\n skyux_form_error_fuzzy_date_year_required: {\n message: 'L’année est requise.',\n },\n skyux_form_error_email: {\n message: 'Entrez une adresse courriel avec un format valide.',\n },\n skyux_form_error_maxlength: { message: 'Limite {0} de {1} caractère(s).' },\n skyux_form_error_minlength: {\n message: '{0} doit avoir au moins {1} caractère(s).',\n },\n skyux_form_error_phone: {\n message:\n 'Entrez un numéro de téléphone correspondant au format du pays sélectionné.',\n },\n skyux_form_error_required: { message: '{0} est requis.' },\n skyux_form_error_time: {\n message: 'Sélectionnez ou entrez une heure valide.',\n },\n skyux_form_error_url: { message: 'Entrez une URL avec un format valide.' },\n skyux_form_group_required: { message: 'Requis' },\n skyux_file_attachment_button_label_choose_file: {\n message: 'Joindre un fichier',\n },\n skyux_file_attachment_button_label_choose_file_label: {\n message: 'Joindre un fichier pour',\n },\n skyux_file_attachment_button_label_replace_file: {\n message: 'Remplacer le fichier',\n },\n skyux_file_attachment_button_label_replace_file_label: {\n message: 'Remplacer le fichier {0} pour',\n },\n skyux_file_attachment_file_item_delete: { message: 'Supprimer {0}' },\n skyux_file_attachment_file_item_remove: {\n message: 'Retirer le fichier {0} pour',\n },\n skyux_file_attachment_file_size_b_plural: { message: '{0} octets' },\n skyux_file_attachment_file_size_b_singular: { message: '{0} octet' },\n skyux_file_attachment_file_size_gb: { message: '{0} Go' },\n skyux_file_attachment_file_size_kb: { message: '{0} Ko' },\n skyux_file_attachment_file_size_mb: { message: '{0} Mo' },\n skyux_file_attachment_file_upload_drag_file_here: {\n message: 'Faites glisser un fichier ici',\n },\n skyux_file_attachment_file_upload_drag_or_click: {\n message: 'Faites glisser un fichier ici ou cliquez pour naviguer',\n },\n skyux_file_attachment_file_upload_drop_files_here: {\n message: 'Déplacez les fichiers ici',\n },\n skyux_file_attachment_file_upload_file_added: {\n message: '{0} a été ajouté.',\n },\n skyux_file_attachment_file_upload_file_replaced: {\n message: '{0} a été retiré. {1} a été ajouté.',\n },\n skyux_file_attachment_file_upload_file_removed: {\n message: '{0} a été retiré.',\n },\n skyux_file_attachment_file_upload_image_preview_alt_text: {\n message: 'Aperçu de l’image',\n },\n skyux_file_attachment_file_upload_invalid_file: {\n message: 'Ce type de fichier n’est pas valide',\n },\n skyux_file_attachment_file_upload_link_label: {\n message: 'Liens vers un fichier',\n },\n skyux_file_attachment_file_upload_or_click_to_browse: {\n message: 'ou cliquez pour naviguer',\n },\n skyux_file_attachment_file_upload_link_done: { message: 'Terminé' },\n skyux_file_attachment_file_upload_link_added: {\n message: 'Le lien vers {0} a été ajouté.',\n },\n skyux_file_attachment_file_upload_link_removed: {\n message: 'Le lien vers {0} a été retiré.',\n },\n skyux_file_attachment_file_type_error_label_text: {\n message: 'Téléversez l’un de ces types de fichier : {0}.',\n },\n skyux_file_attachment_file_type_error_label_text_with_name: {\n message: '{0} : Téléversez l’un de ces types de fichier : {1}.',\n },\n skyux_file_attachment_max_file_size_error_label_text: {\n message: 'Téléversez un fichier de moins de {0}.',\n },\n skyux_file_attachment_max_file_size_error_label_text_with_name: {\n message: '{0} : Téléversez un fichier de moins de {1}.',\n },\n skyux_file_attachment_min_file_size_error_label_text: {\n message: 'Téléversez un fichier de plus de {0}.',\n },\n skyux_file_attachment_min_file_size_error_label_text_with_name: {\n message: '{0} : Téléversez un fichier de plus de {1}.',\n },\n skyux_file_attachment_label_no_file_chosen: {\n message: 'Aucun fichier choisi.',\n },\n skyux_file_attachment_required: { message: 'Requis' },\n skyux_input_box_help_inline_aria_label: {\n message: 'Afficher le contenu de l’aide pour {0}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyFormsResourcesModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'skyCharacterCounterScreenReader',\n})\nexport class SkyCharacterCounterScreenReaderPipe implements PipeTransform {\n #previousAnnouncementPoint: number | undefined;\n\n public transform(\n characterCount: number | undefined,\n characterCountLimit: number | undefined,\n ): string {\n /* Safety check */\n /* istanbul ignore if */\n if (characterCount === undefined || characterCountLimit === undefined) {\n return '';\n }\n\n // We want to announce every 10 characters if we are within 50 of the limit or every 50 otherwise.\n const modulus =\n characterCountLimit - Math.floor(characterCount / 10) * 10 <= 50\n ? 10\n : 50;\n\n if (\n characterCount === characterCountLimit ||\n characterCount % modulus === 0 ||\n this.#previousAnnouncementPoint === undefined\n ) {\n this.#previousAnnouncementPoint = characterCount;\n } else {\n // We want the floor of the previous announcement and modulus in case the previous announcement wasn't an announcement point.\n const previousAnnouncementQuotient = Math.floor(\n this.#previousAnnouncementPoint / modulus,\n );\n // Lower limit of what announcement should have been made for the current count\n const currentAnnouncementQuotient = Math.floor(characterCount / modulus);\n // Next announcement that would be made if the current count increases\n const currentAnnouncementNextAnnouncement = Math.ceil(\n characterCount / modulus,\n );\n\n // Jump to the appropriate announcement point if the count jumps. For example, if going from 43 of 50 characters to 21 of 50 characters.\n if (\n currentAnnouncementQuotient !== previousAnnouncementQuotient &&\n currentAnnouncementNextAnnouncement !== previousAnnouncementQuotient\n ) {\n this.#previousAnnouncementPoint =\n Math.floor(characterCount / modulus) * modulus;\n }\n }\n\n return this.#previousAnnouncementPoint.toLocaleString();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: 'sky-character-counter-indicator',\n templateUrl: './character-counter-indicator.component.html',\n styleUrls: ['./character-counter-indicator.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyCharacterCounterIndicatorComponent {\n #_characterCountLimit = 0;\n #_characterCount = 0;\n\n #changeDetector: ChangeDetectorRef;\n\n constructor(changeDetector: ChangeDetectorRef) {\n this.#changeDetector = changeDetector;\n }\n\n public get characterCount(): number {\n return this.#_characterCount;\n }\n\n @Input()\n public set characterCount(count: number) {\n this.#_characterCount = count;\n this.#changeDetector.markForCheck();\n }\n\n public get characterCountLimit(): number {\n return this.#_characterCountLimit;\n }\n\n @Input()\n public set characterCountLimit(limit: number) {\n this.#_characterCountLimit = limit;\n this.#changeDetector.markForCheck();\n }\n}\n","<span\n class=\"sky-character-count-label sky-font-deemphasized\"\n [ngClass]=\"{ 'sky-error-label': characterCount > characterCountLimit }\"\n>\n {{ characterCount + '/' + characterCountLimit }}\n</span>\n<span aria-live=\"polite\" class=\"sky-screen-reader-only\">\n @if (characterCount > characterCountLimit) {\n <ng-container>{{\n 'skyux_character_count_over_limit' | skyLibResources\n }}</ng-container>\n } @else {\n @if (\n characterCount | skyCharacterCounterScreenReader: characterCountLimit;\n as screenReaderCount\n ) {\n <ng-container>{{\n 'skyux_character_count_message'\n | skyLibResources: screenReaderCount : characterCountLimit\n }}</ng-container>\n }\n }\n</span>\n","import { Directive, Input } from '@angular/core';\nimport {\n AbstractControl,\n NG_VALIDATORS,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { SkyCharacterCounterIndicatorComponent } from './character-counter-indicator.component';\n\n/**\n * Creates an input field that validates the number of characters. Place this directive on\n * an `input` or `textarea` element. If users enter more characters than allowed, then the\n * input field is invalid and the component displays an error indicator.\n * @required\n */\n@Directive({\n selector: '[skyCharacterCounter]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: SkyCharacterCounterInputDirective,\n multi: true,\n },\n ],\n standalone: false,\n})\nexport class SkyCharacterCounterInputDirective implements Validator {\n /**\n * The character count indicator component that displays the character count,\n * character limit, and over-the-limit indicator. Place this directive on an `input` or\n * `textarea` element.\n */\n @Input()\n public get skyCharacterCounterIndicator():\n | SkyCharacterCounterIndicatorComponent\n | undefined {\n return this.#_skyCharacterCounterIndicator;\n }\n public set skyCharacterCounterIndicator(\n value: SkyCharacterCounterIndicatorComponent | undefined,\n ) {\n this.#_skyCharacterCounterIndicator = value;\n this.#updateIndicatorLimit();\n }\n\n /**\n * The maximum number of characters allowed in the input field. Place this directive\n * on an `input` or `textarea` element. This property accepts `number` values.\n * @required\n */\n @Input()\n public set skyCharacterCounterLimit(value: number | undefined) {\n this.#skyCharacterCounterLimitOrDefault = value ?? 0;\n this.#updateIndicatorLimit();\n }\n\n #_skyCharacterCounterIndicator:\n | SkyCharacterCounterIndicatorComponent\n | undefined;\n\n #skyCharacterCounterLimitOrDefault = 0;\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n\n this.#updateIndicatorCount((value && value.length) || 0);\n\n if (!value) {\n return null;\n }\n\n const limit = this.#skyCharacterCounterLimitOrDefault;\n\n if (value.length > this.#skyCharacterCounterLimitOrDefault) {\n // This is needed to apply the appropriate error styles to the input.\n control.markAsTouched();\n\n return {\n skyCharacterCounter: {\n invalid: value,\n limit,\n },\n };\n }\n\n return null;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.#validatorChange = fn;\n }\n\n #updateIndicatorCount(count: number): void {\n if (this.skyCharacterCounterIndicator) {\n this.skyCharacterCounterIndicator.characterCount = count;\n }\n }\n\n #updateIndicatorLimit(): void {\n if (this.skyCharacterCounterIndicator) {\n this.skyCharacterCounterIndicator.characterCountLimit =\n this.#skyCharacterCounterLimitOrDefault;\n }\n\n this.#validatorChange();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #validatorChange = (): void => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyCharacterCounterIndicatorComponent } from './character-counter-indicator.component';\nimport { SkyCharacterCounterScreenReaderPipe } from './character-counter-screen-reader.pipe';\nimport { SkyCharacterCounterInputDirective } from './character-counter.directive';\n\n@NgModule({\n declarations: [\n SkyCharacterCounterInputDirective,\n SkyCharacterCounterIndicatorComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyCharacterCounterScreenReaderPipe,\n SkyFormsResourcesModule,\n ],\n exports: [\n SkyCharacterCounterInputDirective,\n SkyCharacterCounterIndicatorComponent,\n ],\n})\nexport class SkyCharacterCounterModule {}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * @internal\n */\nexport const SKY_FORM_ERRORS_ENABLED = new InjectionToken<boolean>(\n 'SKY_FORM_ERRORS_ENABLED',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { SkyStatusIndicatorModule } from '@skyux/indicators';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { SKY_FORM_ERRORS_ENABLED } from './form-errors-enabled-token';\n\n/**\n * Displays default and custom form field error messages for form field components.\n * Set `labelText` on the `SkyInputBoxComponent` to automatically display required,\n * maximum length, minimum length, date, email, phone number, time, and URL errors.\n * To display custom errors, include `sky-form-error` elements in the `SkyInputBoxComponent`.\n */\n@Component({\n selector: 'sky-form-error',\n imports: [SkyStatusIndicatorModule],\n template: `\n @if (formErrors) {\n <sky-status-indicator\n class=\"sky-form-error\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n >\n {{ errorText }}\n </sky-status-indicator>\n }\n `,\n styleUrl: './form-error.component.scss',\n hostDirectives: [SkyThemeComponentClassDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyFormErrorComponent {\n /**\n * The name of the error.\n * @required\n */\n @Input({ required: true })\n public errorName!: string;\n\n /**\n * The error message to display.\n * @required\n */\n @Input({ required: true })\n public errorText!: string;\n\n @HostBinding('attr.data-error-name') public get dataErrorName(): string {\n return this.errorName;\n }\n\n protected readonly formErrors = inject(SKY_FORM_ERRORS_ENABLED, {\n optional: true,\n });\n\n constructor() {\n if (!this.formErrors) {\n throw new Error(\n 'The `sky-form-error` component is not supported in the provided context.',\n );\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorComponent } from './form-error.component';\n\n@NgModule({\n imports: [SkyFormErrorComponent],\n exports: [SkyFormErrorComponent],\n})\nexport class SkyFormErrorModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n booleanAttribute,\n} from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { SkyIdModule } from '@skyux/core';\n\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyFormErrorComponent } from './form-error.component';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-form-errors',\n imports: [SkyIdModule, SkyFormErrorComponent, SkyFormsResourcesModule],\n templateUrl: './form-errors.component.html',\n styleUrls: ['./form-errors.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyFormErrorsComponent {\n /**\n * The validation errors from the form control.\n */\n @Input()\n public errors: ValidationErrors | null | undefined;\n\n /**\n * Input label text to display in the error messages.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Indicates whether the parent component's control is touched\n */\n @Input({ transform: booleanAttribute })\n public touched = false;\n\n /**\n * Indicates whether the parent component's control is dirty\n */\n @Input({ transform: booleanAttribute })\n public dirty = false;\n\n @HostBinding('attr.aria-atomic')\n protected readonly ariaAtomic = 'true';\n\n @HostBinding('attr.aria-live')\n protected readonly ariaLive = 'assertive';\n\n @HostBinding('attr.aria-relevant')\n protected readonly ariaRelevant = 'all';\n}\n","@if (labelText) {\n @if (touched) {\n @if (errors?.['required']) {\n <sky-form-error\n errorName=\"required\"\n [errorText]=\"'skyux_form_error_required' | skyLibResources: labelText\"\n />\n }\n\n @if (errors?.['minlength']; as minLengthError) {\n <sky-form-error\n errorName=\"minlength\"\n [errorText]=\"\n 'skyux_form_error_minlength'\n | skyLibResources: labelText : minLengthError.requiredLength\n \"\n />\n }\n\n @if (errors?.['skyDate'] && errors?.['skyDate']['invalid']) {\n <sky-form-error\n errorName=\"invalidDate\"\n [errorText]=\"'skyux_form_error_date' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyDate'] && errors?.['skyDate']['minDate']) {\n <sky-form-error\n errorName=\"minDate\"\n [errorText]=\"\n 'skyux_form_error_date_min'\n | skyLibResources: errors?.['skyDate']['minDateFormatted']\n \"\n />\n }\n\n @if (errors?.['skyDate'] && errors?.['skyDate']['maxDate']) {\n <sky-form-error\n errorName=\"maxDate\"\n [errorText]=\"\n 'skyux_form_error_date_max'\n | skyLibResources: errors?.['skyDate']['maxDateFormatted']\n \"\n />\n }\n\n @if (\n errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['futureDisabled']\n ) {\n <sky-form-error\n errorName=\"fuzzyFutureDisabled\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_future_disabled' | skyLibResources\n \"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['invalid']) {\n <sky-form-error\n errorName=\"fuzzyInvalidDate\"\n [errorText]=\"'skyux_form_error_fuzzy_date_invalid' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['maxDate']) {\n <sky-form-error\n errorName=\"fuzzyMaxDate\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_max_date'\n | skyLibResources: errors?.['skyFuzzyDate']['maxDateFormatted']\n \"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['minDate']) {\n <sky-form-error\n errorName=\"fuzzyMinDate\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_min_date'\n | skyLibResources\n : errors?.['skyFuzzyDate'] &&\n errors?.['skyFuzzyDate']['minDateFormatted']\n \"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['yearRequired']) {\n <sky-form-error\n errorName=\"fuzzyYearRequired\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_year_required' | skyLibResources\n \"\n />\n }\n\n @if (errors?.['skyEmail']) {\n <sky-form-error\n errorName=\"email\"\n [errorText]=\"'skyux_form_error_email' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyPhoneField']) {\n <sky-form-error\n errorName=\"phone\"\n [errorText]=\"'skyux_form_error_phone' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyTime']) {\n <sky-form-error\n errorName=\"time\"\n [errorText]=\"'skyux_form_error_time' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyUrl']) {\n <sky-form-error\n errorName=\"url\"\n [errorText]=\"'skyux_form_error_url' | skyLibResources\"\n />\n }\n }\n\n @if (touched || dirty) {\n @if (errors?.['maxlength']; as maxLengthError) {\n <sky-form-error\n errorName=\"maxlength\"\n [errorText]=\"\n 'skyux_form_error_maxlength'\n | skyLibResources: labelText : maxLengthError.requiredLength\n \"\n />\n }\n <ng-content />\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorComponent } from './form-error.component';\nimport { SkyFormErrorsComponent } from './form-errors.component';\n\n/**\n * @internal\n */\n@NgModule({\n imports: [SkyFormErrorsComponent, SkyFormErrorComponent],\n exports: [SkyFormErrorsComponent],\n})\nexport class SkyFormErrorsModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n HostBinding,\n Input,\n TemplateRef,\n booleanAttribute,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport {\n FormGroup,\n NG_VALIDATORS,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyIdModule, SkyIdService } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyThemeComponentClassDirective, SkyThemeModule } from '@skyux/theme';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyCheckboxGroupHeadingLevel } from './checkbox-group-heading-level';\nimport { SkyCheckboxGroupHeadingStyle } from './checkbox-group-heading-style';\n\nfunction numberAttribute4(value: unknown): number {\n return numberAttribute(value, 4);\n}\n\n/**\n * Organizes checkboxes into a group.\n */\n@Component({\n selector: 'sky-checkbox-group',\n templateUrl: './checkbox-group.component.html',\n styleUrl: './checkbox-group.component.scss',\n imports: [\n CommonModule,\n SkyFormErrorsModule,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIdModule,\n SkyThemeModule,\n ],\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: SkyCheckboxGroupComponent,\n multi: true,\n },\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n})\nexport class SkyCheckboxGroupComponent implements Validator {\n /**\n * The content of the help popover. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the checkbox group fieldset legend. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The text to display as the checkbox group's heading.\n */\n @Input({ required: true })\n public headingText!: string;\n\n /**\n * Indicates whether to hide the `headingText`.\n */\n @Input({ transform: booleanAttribute })\n public headingHidden = false;\n\n /**\n * The semantic heading level in the document structure. By default, the heading text is not wrapped in a heading element.\n */\n @Input({ transform: numberAttribute })\n public set headingLevel(value: SkyCheckboxGroupHeadingLevel | undefined) {\n this.#_headingLevel = value && !isNaN(value) ? value : undefined;\n this.#updateStackedClasses();\n }\n\n public get headingLevel(): SkyCheckboxGroupHeadingLevel | undefined {\n return this.#_headingLevel;\n }\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 4\n */\n @Input({ transform: numberAttribute4 })\n public set headingStyle(value: SkyCheckboxGroupHeadingStyle) {\n this.headingClass = `sky-font-heading-${value}`;\n }\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Whether the checkbox group is required.\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * Whether the checkbox group is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the checkbox group.\n */\n @Input({ transform: booleanAttribute })\n public set stacked(value: boolean) {\n this.#_stacked = value;\n this.#updateStackedClasses();\n }\n\n public get stacked(): boolean {\n return this.#_stacked;\n }\n\n /**\n * A help key that identifies the global help content to display. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the checkbox group heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n @HostBinding('class.sky-form-field-stacked')\n public stackedLg = false;\n\n @HostBinding('class.sky-field-group-stacked')\n public stackedXL = false;\n\n readonly #idSvc = inject(SkyIdService);\n protected errorId = this.#idSvc.generateId();\n protected headingClass = 'sky-font-heading-4';\n protected formErrorsDataId = 'checkbox-group-form-errors';\n protected formGroup: FormGroup | null | undefined;\n\n #_headingLevel: SkyCheckboxGroupHeadingLevel | undefined;\n #_stacked = false;\n\n public validate(formGroup: FormGroup): ValidationErrors | null {\n this.formGroup ??= formGroup;\n\n if (!this.required) {\n return null;\n }\n\n const controlNames = Object.keys(formGroup.controls);\n let atLeastOneSelected = false;\n\n controlNames.forEach((controlName) => {\n const control = formGroup.get(controlName);\n if (control?.value) {\n atLeastOneSelected = true;\n }\n });\n\n if (!atLeastOneSelected) {\n return { required: true };\n } else {\n return null;\n }\n }\n\n #updateStackedClasses(): void {\n this.stackedLg = !this.headingLevel && this.stacked;\n this.stackedXL = !!this.headingLevel && this.stacked;\n }\n}\n","<fieldset\n class=\"sky-checkbox-group\"\n [attr.aria-invalid]=\"!!formGroup?.errors\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-errormessage]=\"\n headingText && formGroup?.errors ? errorId : undefined\n \"\n>\n <legend\n class=\"sky-checkbox-group-legend\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden\n }\"\n >\n <span\n class=\"sky-checkbox-group-heading\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >\n @switch (headingLevel) {\n @case (3) {\n <h3 [class]=\"headingClass\">{{ headingText }}</h3>\n }\n @case (4) {\n <h4 [class]=\"headingClass\">{{ headingText }}</h4>\n }\n @case (5) {\n <h5 [class]=\"headingClass\">{{ headingText }}</h5>\n }\n @default {\n <span [class]=\"'sky-checkbox-group-heading-text ' + headingClass\">{{\n headingText\n }}</span>\n }\n }\n </span>\n @if (required) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_form_group_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]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n <div\n #hintTextEl=\"skyId\"\n skyId\n [ngClass]=\"{\n 'sky-checkbox-group-hint-text': !!hintText\n }\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n <span class=\"sky-checkbox-group-inline sky-switch-icon-group\">\n <ng-content select=\"sky-checkbox[iconName]\" />\n </span>\n <span class=\"sky-checkbox-group-stacked\">\n <ng-content select=\"sky-checkbox\" />\n </span>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [attr.data-sky-id]=\"formErrorsDataId\"\n [errors]=\"formGroup?.errors\"\n [labelText]=\"headingText\"\n [touched]=\"formGroup?.touched\"\n [dirty]=\"formGroup?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n","import { Component, Input } from '@angular/core';\n\n/**\n@internal\n */\n@Component({\n selector: 'sky-checkbox-label-text-label',\n styleUrls: [\n './checkbox-label-text-label.default.component.scss',\n './checkbox-label-text-label.modern.component.scss',\n ],\n templateUrl: './checkbox-label-text-label.component.html',\n standalone: false,\n})\nexport class SkyCheckboxLabelTextLabelComponent {\n @Input()\n public labelHidden = false;\n\n @Input()\n public set labelText(value: string) {\n this.#_labelText = value.trim();\n }\n\n public get labelText(): string {\n return this.#_labelText;\n }\n\n #_labelText = '';\n}\n","@if (!labelHidden) {\n <span class=\"sky-switch-label\">{{ labelText }}</span>\n}\n","import { Component } from '@angular/core';\n\n/**\n * Specifies a label for the checkbox. To display a help button beside the label, include a help button element, such as\n * `sky-help-inline`, in the `sky-checkbox-label` element and a `sky-control-help` CSS class on that help button\n * element.\n * @deprecated Use `labelText` input on `sky-checkbox-component` instead.\n */\n@Component({\n selector: 'sky-checkbox-label',\n templateUrl: './checkbox-label.component.html',\n standalone: false,\n})\nexport class SkyCheckboxLabelComponent {}\n","<span class=\"sky-switch-label\"\n ><span skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\n\nimport { SkyCheckboxChange } from './checkbox-change';\n\n/**\n * Replaces the HTML input element with `type=\"checkbox\"`. When users select a checkbox, its value\n * is driven through an `ngModel` attribute that you specify on the `sky-checkbox` element.\n */\n@Component({\n selector: 'sky-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: [\n './checkbox.default.component.scss',\n './checkbox.modern.component.scss',\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n providers: [\n { provide: NG_VALIDATORS, useExisting: SkyCheckboxComponent, multi: true },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SkyCheckboxComponent,\n multi: true,\n },\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n standalone: false,\n})\nexport class SkyCheckboxComponent\n implements AfterViewInit, ControlValueAccessor, Validator\n{\n /**\n * The ARIA label for the checkbox. This sets the checkbox's `aria-label` attribute\n * [to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility)\n * when the checkbox does not include a visible label. You must set this property for icon\n * checkboxes. If the checkbox includes a visible label, use `labelledBy` instead.\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set label(value: string | undefined) {\n this.#_label = value;\n\n if (value) {\n this.#logger.deprecated('SkyCheckboxComponent.label', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get label(): string | undefined {\n return this.#_label;\n }\n\n /**\n * The HTML element ID of the element that labels the\n * checkbox. This sets the checkbox's `aria-labelledby` attribute\n * [to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility).\n * If the checkbox does not include a visible label, use `label` instead.\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set labelledBy(value: string | undefined) {\n this.#_labelledBy = value;\n\n if (value) {\n this.#logger.deprecated('SkyCheckboxComponent.labelledBy', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get labelledBy(): string | undefined {\n return this.#_labelledBy;\n }\n\n /**\n * The ID for the checkbox.\n * If a value is not provided, an autogenerated ID is used.\n */\n @Input()\n public set id(value: string | undefined) {\n if (value) {\n this.inputId = `sky-checkbox-${value}-input`;\n } else {\n this.inputId = `sky-checkbox-${this.#defaultId}-input`;\n }\n }\n\n /**\n * Whether to disable the checkbox on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (value !== this.#_disabled) {\n this.#_disabled = value;\n this.#disabledChange.next(value);\n }\n }\n\n /**\n * Whether the checkbox is disabled.\n */\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The index for the checkbox. If not defined, the index is set to the position of the\n * checkbox on load.\n */\n @Input()\n public tabindex: number | undefined = 0;\n\n /**\n * The name for the checkbox.\n * If a value is not provided, an autogenerated ID is used.\n */\n @Input()\n public set name(value: string | undefined) {\n if (value && value !== this.#defaultId) {\n this.#_name = value;\n } else {\n this.#_name = `sky-checkbox-${this.#defaultId}`;\n }\n }\n\n public get name(): string {\n return this.#_name;\n }\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the checkbox label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n public change = new EventEmitter<SkyCheckboxChange>();\n\n /**\n * The SVG icon to display in place of the checkbox. To group icon checkboxes\n * like in the demo, place the checkboxes within a `sky-checkbox-group`.\n */\n @Input()\n public iconName: string | undefined;\n\n /**\n * The background color type after users select a checkbox where the\n * `icon` property displays an icon in place of the checkbox. The valid options correspond to\n * [the label component's](https://developer.blackbaud.com/skyux/components/label)\n * label types. `\"info\"` creates a blue background, `\"success\"` creates a green\n * background, `\"warning\"` creates an orange background, and `\"danger\"` creates a red background.\n * @default \"info\"\n * @deprecated The `checkboxType` input is no longer supported.\n */\n @Input()\n public set checkboxType(value: string | undefined) {\n if (value) {\n this.#logger.deprecated('SkyCheckboxComponent.checkboxType', {\n deprecationMajorVersion: 7,\n });\n }\n\n this.#_checkboxType = value ? value.toLowerCase() : 'info';\n }\n\n public get checkboxType(): string {\n return this.#_checkboxType;\n }\n\n /**\n * Whether the checkbox is selected.\n * @default false\n */\n @Input()\n public set checked(value: boolean | undefined) {\n const checked = !!value;\n if (checked !== this.#_checked) {\n this.#_checked = checked;\n this.#checkedChange.next(checked);\n }\n }\n\n /**\n * Whether the checkbox is selected.\n */\n public get checked(): boolean {\n return this.#_checked;\n }\n\n /**\n * Whether the checkbox is in the indeterminate state. This has no visual effect for icon checkboxes.\n * @internal\n */\n @Input()\n public set indeterminate(value: boolean | undefined) {\n if (value !== this.#_indeterminate) {\n this.#_indeterminate = !!value;\n this.#indeterminateChange.next(this.#_indeterminate);\n if (this.inputEl) {\n this.inputEl.nativeElement.indeterminate = this.#_indeterminate;\n this.#changeDetector.markForCheck();\n }\n }\n }\n\n public get indeterminate(): boolean {\n return this.#_indeterminate;\n }\n\n /**\n * Whether the input is required for form validation.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input element so that forms display an invalid state until the input element\n * is complete.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * The text to display as the checkbox's label. Use this instead of the `sky-checkbox-label` when the label is text-only.\n * Specifying `labelText` also enables automatic error message handling for checkbox.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Indicates whether to hide the `labelText`.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Whether the checkbox is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the checkbox. If the checkbox is within a checkbox group,\n * set `stacked` on the checkbox group component instead.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the checkbox label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Fires when users select or deselect the checkbox.\n */\n @Output()\n public get checkedChange(): Observable<boolean> {\n return this.#checkedChangeObs;\n }\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n public get disabledChange(): Observable<boolean> {\n return this.#disabledChangeObs;\n }\n\n /**\n * Fires when the indeterminate state changes.\n * @internal\n */\n @Output()\n public get indeterminateChange(): Observable<boolean> {\n return this.#indeterminateChangeObs;\n }\n\n @ViewChild('inputEl', { read: ElementRef })\n public set inputEl(el: ElementRef | undefined) {\n this.#_inputEl = el;\n if (el && this.indeterminate) {\n el.nativeElement.indeterminate = this.indeterminate;\n }\n }\n\n public get inputEl(): ElementRef | undefined {\n return this.#_inputEl;\n }\n\n protected get isCheckboxRequired(): boolean {\n return !!(\n this.required ||\n this.control?.hasValidator(Validators.requiredTrue) ||\n this.control?.hasValidator(Validators.required)\n );\n }\n\n protected control: AbstractControl | undefined;\n protected inputId = '';\n\n #checkedChange: Subject<boolean>;\n #checkedChangeObs: Observable<boolean>;\n #disabledChange: Subject<boolean>;\n #disabledChangeObs: Observable<boolean>;\n #indeterminateChange: Subject<boolean>;\n #indeterminateChangeObs: Observable<boolean>;\n\n #_checked = false;\n #_checkboxType = 'info';\n #_disabled = false;\n #_indeterminate = false;\n #_inputEl: ElementRef | undefined;\n #_name = '';\n #_label: string | undefined;\n #_labelledBy: string | undefined;\n\n #changeDetector = inject(ChangeDetectorRef);\n #idSvc = inject(SkyIdService);\n #defaultId = this.#idSvc.generateId();\n #logger = inject(SkyLogService);\n\n protected readonly errorId = this.#idSvc.generateId();\n\n constructor() {\n this.#checkedChange = new Subject<boolean>();\n this.#disabledChange = new Subject<boolean>();\n this.#indeterminateChange = new Subject<boolean>();\n\n this.#checkedChangeObs = this.#checkedChange.asObservable();\n this.#disabledChangeObs = this.#disabledChange.asObservable();\n this.#indeterminateChangeObs = this.#indeterminateChange.asObservable();\n this.id = this.#defaultId;\n this.name = this.#defaultId;\n }\n\n public ngAfterViewInit(): void {\n this.#checkedChange.next(this.checked);\n this.#disabledChange.next(this.disabled);\n this.#indeterminateChange.next(this.indeterminate);\n }\n\n public validate(control: AbstractControl<boolean>): ValidationErrors | null {\n this.control ||= control;\n\n // In template-driven forms, Angular's native 'required' attribute directive only works\n // on `input[type=\"checkbox\"]` selectors, so we need to write the validation logic ourselves.\n // Also, we're treating Validators.required the same as Validators.requiredTrue internally, so\n // we need to account for that decision in our custom validator.\n return this.isCheckboxRequired && control.value !== true\n ? { required: true }\n : null;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public writeValue(value: any): void {\n this.checked = !!value;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public registerOnChange(fn: (value: any) => void): void {\n this.#controlValueAccessorChangeFn = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Event handler for checkbox input element.\n * Toggles checked state if element is not disabled.\n */\n public onInteractionEvent(event: Event): void {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n\n if (!this.disabled) {\n this.indeterminate = false;\n this.#toggle();\n this.#controlValueAccessorChangeFn(this.checked);\n this.#emitChangeEvent();\n }\n }\n\n public onInputBlur(): void {\n this.onTouched();\n }\n\n /** Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor. */\n\n // istanbul ignore next\n public onTouched: () => any = () => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #controlValueAccessorChangeFn: (value: any) => void = (value) => {};\n\n #emitChangeEvent(): void {\n this.change.emit({ checked: this.checked });\n }\n\n /**\n * Toggles the `checked` value between true and false\n */\n #toggle(): void {\n this.checked = !this.checked;\n }\n}\n","<span class=\"sky-checkbox-outer-wrapper\">\n <label\n class=\"sky-checkbox-wrapper sky-switch\"\n [ngClass]=\"{\n 'sky-control-label-required': isCheckboxRequired,\n 'sky-switch-disabled': disabled\n }\"\n >\n <input\n #inputEl\n class=\"sky-checkbox-input sky-switch-input\"\n type=\"checkbox\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [required]=\"isCheckboxRequired\"\n [tabIndex]=\"tabindex\"\n [attr.aria-label]=\"labelText || label\"\n [attr.aria-labelledby]=\"labelText ? undefined : labelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-required]=\"isCheckboxRequired ? true : null\"\n [attr.aria-invalid]=\"!!control?.errors\"\n [attr.aria-errormessage]=\"\n labelText && control?.errors ? errorId : undefined\n \"\n [ngClass]=\"{\n 'sky-switch-invalid':\n (control?.touched || control?.dirty) && control?.errors\n }\"\n (blur)=\"onInputBlur()\"\n (change)=\"onInteractionEvent($event)\"\n />\n <span\n class=\"sky-switch-control\"\n [ngClass]=\"{\n 'sky-switch-control-icon': iconName,\n 'sky-switch-control-info': checkboxType === 'info',\n 'sky-switch-control-success': checkboxType === 'success',\n 'sky-switch-control-warning': checkboxType === 'warning',\n 'sky-switch-control-danger': checkboxType === 'danger'\n }\"\n [skyThemeClass]=\"{\n 'sky-rounded-corners': 'default'\n }\"\n >\n @if (iconName) {\n <sky-icon variant=\"solid\" [iconName]=\"iconName\" />\n } @else {\n @if (indeterminate) {\n <sky-icon\n class=\"sky-checkbox-icon-indeterminate sky-checkbox-icon-modern-indeterminate\"\n iconName=\"square\"\n variant=\"solid\"\n iconSize=\"s\"\n />\n } @else if (checked) {\n <sky-icon\n class=\"sky-checkbox-icon-modern-checked\"\n iconName=\"checkmark\"\n iconSize=\"s\"\n />\n }\n }\n </span>\n\n @if (labelText) {\n <sky-checkbox-label-text-label\n [labelText]=\"labelText\"\n [labelHidden]=\"labelHidden\"\n />\n } @else {\n <ng-content select=\"sky-checkbox-label\" />\n }\n </label>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n class=\"sky-checkbox-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n</span>\n<span #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-checkbox-hint-text sky-checkbox-form-margin\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n</span>\n<sky-form-errors\n [class.sky-checkbox-form-margin]=\"labelText && control?.errors\"\n [id]=\"errorId\"\n [errors]=\"control?.errors\"\n [labelText]=\"labelText\"\n [touched]=\"control?.touched\"\n [dirty]=\"control?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, SkyTrimModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyFormErrorModule } from '../form-error/form-error.module';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyCheckboxGroupComponent } from './checkbox-group.component';\nimport { SkyCheckboxLabelTextLabelComponent } from './checkbox-label-text-label.component';\nimport { SkyCheckboxLabelComponent } from './checkbox-label.component';\nimport { SkyCheckboxComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [\n SkyCheckboxComponent,\n SkyCheckboxLabelComponent,\n SkyCheckboxLabelTextLabelComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyCheckboxGroupComponent,\n SkyFormErrorModule,\n SkyFormErrorsModule,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyTrimModule,\n SkyThemeModule,\n ],\n exports: [\n SkyCheckboxComponent,\n SkyCheckboxLabelComponent,\n SkyCheckboxGroupComponent,\n SkyFormErrorModule,\n ],\n})\nexport class SkyCheckboxModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n HostBinding,\n Input,\n TemplateRef,\n booleanAttribute,\n numberAttribute,\n} from '@angular/core';\nimport { SkyIdModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyFieldGroupHeadingLevel } from './field-group-heading-level';\nimport { SkyFieldGroupHeadingStyle } from './field-group-heading-style';\n\nfunction numberAttribute3(value: unknown): number {\n return numberAttribute(value, 3);\n}\n\n/**\n * Organizes form fields into a group.\n */\n@Component({\n selector: 'sky-field-group',\n templateUrl: './field-group.component.html',\n styleUrl: './field-group.component.scss',\n imports: [CommonModule, SkyHelpInlineModule, SkyIdModule, SkyThemeModule],\n})\nexport class SkyFieldGroupComponent {\n /**\n * The text to display as the field group's heading.\n */\n @Input({ required: true })\n public headingText!: string;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Indicates whether to hide the `headingText`.\n */\n @Input({ transform: booleanAttribute })\n public headingHidden = false;\n\n /**\n * Whether the field group is stacked on another field group. When specified, the appropriate\n * vertical spacing is automatically added to the field group.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-field-group-stacked')\n public stacked = false;\n\n /**\n * The semantic heading level in the document structure.\n * @default 3\n */\n @Input({ transform: numberAttribute3 })\n public headingLevel: SkyFieldGroupHeadingLevel = 3;\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 3\n */\n @Input({ transform: numberAttribute3 })\n public set headingStyle(value: SkyFieldGroupHeadingStyle) {\n this.headingClass = `sky-font-heading-${value}`;\n }\n\n /**\n * The content of the help popover. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the field group heading. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the field group heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n protected headingClass = 'sky-font-heading-3';\n}\n","<fieldset\n class=\"sky-field-group\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n>\n <legend\n class=\"sky-field-group-legend\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden\n }\"\n >\n <span class=\"sky-field-group-heading\">\n @switch (headingLevel) {\n @case (4) {\n <h4 [class]=\"headingClass\">{{ headingText }}</h4>\n }\n @default {\n <h3 [class]=\"headingClass\">{{ headingText }}</h3>\n }\n }\n </span>\n @if (helpPopoverContent || helpKey) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n class=\"sky-field-group-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n <div #hintTextEl=\"skyId\" skyId class=\"sky-field-group-hint-text-wrapper\">\n @if (hintText) {\n <div\n class=\"sky-field-group-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 <div class=\"sky-field-group-content\">\n <ng-content />\n </div>\n</fieldset>\n","import { NgModule } from '@angular/core';\n\nimport { SkyFieldGroupComponent } from './field-group.component';\n\n@NgModule({\n imports: [SkyFieldGroupComponent],\n exports: [SkyFieldGroupComponent],\n})\nexport class SkyFieldGroupModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { SkyIdModule, SkyLogService, SkyTrimModule } from '@skyux/core';\n\n/**\n * Displays a label above the file attachment element. To display a help button\n * beside the label, include a help button element, such as `sky-help-inline`,\n * in the `sky-file-attachment-label` element and a `sky-control-help` CSS class\n * on that help button element.\n * @deprecated Use the `labelText` input on the single file attachment component\n * instead.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyIdModule, SkyTrimModule],\n selector: 'sky-file-attachment-label',\n styleUrl: 'file-attachment-label.component.scss',\n templateUrl: './file-attachment-label.component.html',\n})\nexport class SkyFileAttachmentLabelComponent {\n @ViewChild('labelContentId')\n public labelContentId: { id: string } | undefined;\n\n constructor() {\n inject(SkyLogService).deprecated('SkyFileAttachmentLabelComponent', {\n deprecationMajorVersion: 9,\n replacementRecommendation:\n 'To add a label to single file attachment, use the `labelText` input ' +\n 'on the `sky-file-attachment` component instead.',\n });\n }\n}\n","<span class=\"sky-control-label\"\n ><span #labelContentId=\"skyId\" skyId skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n","import { formatNumber } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyFileSize',\n})\nexport class SkyFileSizePipe implements PipeTransform {\n readonly #resourcesService: SkyLibResourcesService;\n readonly #defaultLocale = 'en-US';\n\n constructor(resourcesService: SkyLibResourcesService) {\n this.#resourcesService = resourcesService;\n }\n\n public transform(input?: number | string | null): string {\n let decimalPlaces = 0,\n dividend = 1,\n template: string;\n\n if (input === null || input === undefined) {\n return '';\n }\n\n if (typeof input === 'string') {\n input = Number.parseInt(input);\n }\n\n if (Math.abs(input) === 1) {\n template = 'skyux_file_attachment_file_size_b_singular';\n } else if (input < 1024) {\n template = 'skyux_file_attachment_file_size_b_plural';\n } else if (input < Math.pow(1024, 2)) {\n template = 'skyux_file_attachment_file_size_kb';\n dividend = 1024;\n } else if (input < Math.pow(1024, 3)) {\n template = 'skyux_file_attachment_file_size_mb';\n dividend = Math.pow(1024, 2);\n decimalPlaces = 1;\n } else {\n template = 'skyux_file_attachment_file_size_gb';\n dividend = Math.pow(1024, 3);\n decimalPlaces = 1;\n }\n\n const roundedSize =\n Math.floor(input / (dividend / Math.pow(10, decimalPlaces))) /\n Math.pow(10, decimalPlaces);\n\n const formattedSize = formatNumber(\n roundedSize,\n this.#defaultLocale,\n '.0-3',\n );\n\n return this.#getString(template, formattedSize);\n }\n\n #getString(key: string, ...args: unknown[]): string {\n // TODO: Need to implement the async `getString` method in a breaking change.\n return this.#resourcesService.getStringForLocale(\n { locale: this.#defaultLocale },\n key,\n ...args,\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Joins an array of IDs with a single space.\n * @internal\n */\n@Pipe({\n name: 'skyFileAttachmentJoinIds',\n})\nexport class SkyFileAttachmentJoinIdsPipe implements PipeTransform {\n public transform(...ids: (string | null | undefined)[]): string | null {\n // Remove undefined values and join with a \" \".\n return ids && ids.filter((id) => id).join(' ');\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileValidateFn } from '../shared/file-validate-function';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyFileAttachmentService {\n public checkFiles(\n files: SkyFileItem[],\n minFileSize: number,\n maxFileSize: number,\n acceptedTypes?: string,\n validateFn?: SkyFileValidateFn,\n ): SkyFileItem[] {\n const fileResults: SkyFileItem[] = [];\n\n files.forEach((fileItem) => {\n if (fileItem.file.size < minFileSize) {\n fileItem.errorType = 'minFileSize';\n fileItem.errorParam = minFileSize.toString();\n fileResults.push(fileItem);\n } else if (fileItem.file.size > maxFileSize) {\n fileItem.errorType = 'maxFileSize';\n fileItem.errorParam = maxFileSize.toString();\n fileResults.push(fileItem);\n } else if (this.fileTypeRejected(fileItem.file.type, acceptedTypes)) {\n fileItem.errorType = 'fileType';\n fileItem.errorParam = this.#getAcceptedTypesList(acceptedTypes);\n fileResults.push(fileItem);\n } else if (validateFn) {\n const errorParam = validateFn(fileItem);\n\n if (errorParam) {\n fileItem.errorType = 'validate';\n fileItem.errorParam = errorParam;\n }\n fileResults.push(fileItem);\n } else {\n fileResults.push(fileItem);\n }\n });\n return fileResults;\n }\n\n /**\n * Returns `true` if a directory is found in the provided `files` parameter.\n */\n public hasDirectory(files: FileList): boolean {\n for (let index = 0; index < files.length; index++) {\n const file: any = files.item(index);\n if (\n file.webkitGetAsEntry &&\n file.webkitGetAsEntry() &&\n file.webkitGetAsEntry().isDirectory\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n public fileTypeRejected(fileType: string, acceptedTypes?: string): boolean {\n if (!acceptedTypes) {\n return false;\n }\n\n if (!fileType) {\n return true;\n }\n\n const acceptedTypesUpper = acceptedTypes.toUpperCase();\n const typeArray = acceptedTypesUpper.split(',');\n\n return !this.#fileTypeInArray(typeArray, fileType.toUpperCase());\n }\n\n #fileTypeInArray(typeArray: string[], fileType: string): boolean {\n if (typeArray.indexOf(fileType) !== -1) {\n return true;\n }\n\n for (const type of typeArray) {\n const validSubtype = this.#getMimeSubtype(type);\n\n if (validSubtype === '*') {\n if (this.#getMimeMainType(type) === this.#getMimeMainType(fileType)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n #getAcceptedTypesList(rawTypes: string | undefined): string | undefined {\n return rawTypes\n ?.toUpperCase()\n .split(',')\n .map((type) => {\n const subType = this.#getMimeSubtype(type);\n return subType.startsWith('X-') ? subType.substr(2) : subType;\n })\n .join(', ');\n }\n\n #getMimeSubtype(type: string): string {\n return type.substr(type.indexOf('/') + 1, type.length);\n }\n\n #getMimeMainType(type: string): string {\n return type.substr(0, type.indexOf('/'));\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { SkyFileItem } from './file-item';\n\n/**\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class SkyFileItemService {\n public isFile(fileItem: SkyFileItem): boolean {\n const file = fileItem.file;\n\n return !!(\n file &&\n file !== undefined &&\n file !== null &&\n file.size !== undefined &&\n file.size !== null\n );\n }\n\n public isImage(fileItem: SkyFileItem): boolean {\n const fileTypeUpper = this.getFileTypeUpper(fileItem);\n const slashIndex = fileTypeUpper.indexOf('/');\n\n if (slashIndex >= 0) {\n switch (fileTypeUpper.substr(fileTypeUpper.indexOf('/') + 1)) {\n case 'BMP':\n case 'GIF':\n case 'JPEG':\n case 'PNG':\n return true;\n default:\n break;\n }\n }\n\n return false;\n }\n\n public getFileExtensionUpper(fileItem: SkyFileItem): string {\n let extension = '',\n name: string;\n\n /* istanbul ignore else */\n /* sanity check */\n if (fileItem) {\n const file = fileItem.file;\n if (file) {\n /* istanbul ignore next */\n name = file.name || '';\n /* istanbul ignore next */\n extension = name.substr(name.lastIndexOf('.')) || '';\n } else {\n extension = '';\n }\n }\n\n return extension.toUpperCase();\n }\n\n public getFileTypeUpper(fileItem: SkyFileItem): string {\n let fileType = '';\n /* istanbul ignore else */\n /* sanity check */\n if (fileItem) {\n const file = fileItem.file;\n if (file) {\n fileType = file.type || '';\n } else {\n fileType = '';\n }\n }\n\n return fileType.toUpperCase();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DOCUMENT,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Self,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NgControl,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport {\n SkyFileReaderService,\n SkyIdModule,\n SkyIdService,\n SkyLiveAnnouncerService,\n} from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport {\n SkyThemeComponentClassDirective,\n SkyThemeModule,\n SkyThemeService,\n} from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyFormErrorComponent } from '../../form-error/form-error.component';\nimport { SKY_FORM_ERRORS_ENABLED } from '../../form-error/form-errors-enabled-token';\nimport { SkyFormErrorsComponent } from '../../form-error/form-errors.component';\nimport { SkyFormsResourcesModule } from '../../shared/sky-forms-resources.module';\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileItemErrorType } from '../shared/file-item-error-type';\nimport { SkyFileItemService } from '../shared/file-item.service';\nimport { SkyFileSizePipe } from '../shared/file-size.pipe';\nimport { SkyFileValidateFn } from '../shared/file-validate-function';\n\nimport { SkyFileAttachmentChange } from './file-attachment-change';\nimport { SkyFileAttachmentClick } from './file-attachment-click';\nimport { SkyFileAttachmentJoinIdsPipe } from './file-attachment-join-ids.pipe';\nimport { SkyFileAttachmentLabelComponent } from './file-attachment-label.component';\nimport { SkyFileAttachmentService } from './file-attachment.service';\n\nconst MAX_FILE_SIZE_DEFAULT = 500000;\nconst MIN_FILE_SIZE_DEFAULT = 0;\n\n/**\n * Provides an element to attach a single local file.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyFileAttachmentJoinIdsPipe,\n SkyFileSizePipe,\n SkyFormErrorComponent,\n SkyFormErrorsComponent,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyThemeModule,\n SkyThemeComponentClassDirective,\n ],\n providers: [\n SkyFileAttachmentService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n selector: 'sky-file-attachment',\n styleUrl: './file-attachment.component.scss',\n templateUrl: './file-attachment.component.html',\n})\nexport class SkyFileAttachmentComponent\n implements\n AfterViewInit,\n AfterContentInit,\n ControlValueAccessor,\n OnInit,\n OnDestroy\n{\n readonly #document = inject(DOCUMENT);\n\n readonly #fileReaderSvc = inject(SkyFileReaderService);\n\n /**\n * The comma-delimited string literal of MIME types that users can attach.\n * By default, all file types are allowed.\n */\n @Input()\n public acceptedTypes: string | undefined;\n\n /**\n * A custom error message to display when a file doesn't match the accepted types.\n * This replaces a default error message that lists all accepted types.\n */\n @Input()\n public acceptedTypesErrorMessage: string | undefined;\n\n /**\n * Whether to disable the input on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n */\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the single file attachment label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the single file attachment label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * The text to display as the file attachment's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether to hide `labelText` from view.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * The maximum size in bytes for valid files.\n * @default 500000\n */\n @Input()\n public set maxFileSize(value: number | undefined) {\n this.#_maxFileSize = value ?? MAX_FILE_SIZE_DEFAULT;\n }\n\n public get maxFileSize(): number {\n return this.#_maxFileSize;\n }\n\n /**\n * The minimum size in bytes for valid files.\n * @default 0\n */\n @Input()\n public set minFileSize(value: number | undefined) {\n this.#_minFileSize = value ?? MIN_FILE_SIZE_DEFAULT;\n }\n\n public get minFileSize(): number {\n return this.#_minFileSize;\n }\n\n /**\n * Whether the single file attachment is stacked on another form component. When specified,\n * the appropriate vertical spacing is automatically added to the single file attachment.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * The custom validation function. This validation runs alongside the internal\n * file validation. This function takes a `SkyFileItem` object as a parameter.\n * @deprecated Add a custom Angular `Validator` function to the `FormControl` instead.\n */\n @Input()\n public validateFn: SkyFileValidateFn | undefined;\n\n /**\n * Fires when users add or remove files.\n * @deprecated Subscribe to the form control's `valueChanges` event instead.\n */\n @Output()\n public fileChange = new EventEmitter<SkyFileAttachmentChange>();\n\n /**\n * Fires when users select the file name link. Make sure to bind the event.\n * If you do not, the file name link will be a dead link.\n */\n @Output()\n public fileClick = new EventEmitter<SkyFileAttachmentClick>();\n\n public acceptedOver = false;\n\n public hasLabelComponent = false;\n\n public rejectedOver = false;\n\n /**\n * Whether the input is required for form validation.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input element so that forms display an invalid state until the input element\n * is complete.\n * For more information about the `aria-required` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-required).\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n public set value(value: SkyFileItem | undefined | null) {\n // The null check is needed to address a bug in Angular 4.\n // writeValue is being called twice, first time with a phantom null value\n // See: https://github.com/angular/angular/issues/14988\n const isNewValue = value !== this.value && value !== null;\n\n if (isNewValue) {\n if (value) {\n this.isImage = this.#fileItemService.isImage(value);\n } else {\n this.isImage = false;\n }\n this.#setFileName(value);\n\n this.#_value = value;\n this.#onChange(value);\n this.#updateFileAttachmentButton();\n }\n }\n\n public get value(): SkyFileItem | undefined {\n return this.#_value;\n }\n\n public currentThemeName: string | undefined;\n\n public fileName = '';\n\n public showFileAttachmentButton = true;\n\n public truncatedFileName = '';\n\n @ViewChild('fileInputRef')\n public inputEl: ElementRef | undefined;\n\n @ContentChildren(SkyFileAttachmentLabelComponent)\n public labelComponents:\n | QueryList<SkyFileAttachmentLabelComponent>\n | undefined;\n\n public isImage = false;\n\n protected get isRequired(): boolean {\n return (\n this.required ||\n (this.ngControl?.control?.hasValidator(Validators.required) ?? false)\n );\n }\n\n #enterEventTarget: EventTarget | undefined | null;\n\n #ngUnsubscribe = new Subject<void>();\n\n #_maxFileSize = MAX_FILE_SIZE_DEFAULT;\n\n #_minFileSize = MIN_FILE_SIZE_DEFAULT;\n\n #_value: SkyFileItem | undefined;\n\n #changeDetector: ChangeDetectorRef;\n #fileAttachmentService: SkyFileAttachmentService;\n #fileItemService: SkyFileItemService;\n #themeSvc: SkyThemeService | undefined;\n\n readonly #idSvc = inject(SkyIdService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n protected ngControl: NgControl | undefined;\n protected errorId = this.#idSvc.generateId();\n protected labelId = this.#idSvc.generateId();\n\n protected fileErrorName: SkyFileItemErrorType | undefined;\n protected fileErrorParam: string | undefined;\n protected fileErrorValidation: ValidationErrors | null | undefined;\n\n constructor(\n changeDetector: ChangeDetectorRef,\n fileAttachmentService: SkyFileAttachmentService,\n fileItemService: SkyFileItemService,\n @Self() @Optional() ngControl?: NgControl,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#changeDetector = changeDetector;\n this.#fileAttachmentService = fileAttachmentService;\n this.#fileItemService = fileItemService;\n this.ngControl = ngControl;\n this.#themeSvc = themeSvc;\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n if (this.#themeSvc) {\n this.#themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((themeSettings) => {\n this.currentThemeName = themeSettings.currentSettings.theme.name;\n this.#updateFileAttachmentButton();\n });\n }\n }\n\n public ngAfterViewInit(): void {\n // This is needed to address a bug in Angular 7.\n // When a control value is set initially, its value is not represented on the view.\n // See: https://github.com/angular/angular/issues/13792\n // Of note is the parent check which allows us to determine if the form is reactive.\n // Without this check there is a changed before checked error\n /* istanbul ignore else */\n if (this.ngControl) {\n setTimeout(() => {\n this.ngControl?.control?.setValue(this.value, {\n emitEvent: false,\n });\n this.#changeDetector.markForCheck();\n });\n\n // There is some disconnect between the host control and the form control.\n // This handles that by running change detection whenever the host control\n // has any changes. This is a workaround for this existing bug and will be\n // addressed in a future story that refactors file attachment.\n this.ngControl.control?.events.subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngAfterContentInit(): void {\n if (this.labelComponents) {\n this.hasLabelComponent = this.labelComponents.length > 0;\n this.#changeDetector.detectChanges();\n\n // Handles updating classes when label changes\n this.labelComponents.changes\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(\n (newLabelComponents: QueryList<SkyFileAttachmentLabelComponent>) => {\n this.hasLabelComponent = newLabelComponents.length > 0;\n this.#changeDetector.markForCheck();\n },\n );\n }\n }\n\n public onButtonBlur(): void {\n // Only mark the field as touched on blur when the document still has focus. This\n // prevents validation from occurring while the user has the file dialog open,\n // since focus moves away from the document and onto the file dialog before this\n // event fires.\n if (this.#document.hasFocus()) {\n this.#onTouched();\n }\n }\n\n public onFileCancel(): void {\n this.#onTouched();\n }\n\n public onDropClicked(): void {\n /* istanbul ignore else */\n if (this.inputEl) {\n this.inputEl.nativeElement.click();\n }\n }\n\n public fileChangeEvent(fileChangeEvent: Event): void {\n /** Set a timeout here to allow the browser to regain context from the system dialog. Without this, error messages do not read out correctly to screen readers. */\n setTimeout(() => {\n this.#handleFiles(\n (fileChangeEvent.target as HTMLInputElement | undefined)?.files,\n );\n }, 500);\n }\n\n public fileDragEnter(dragEnterEvent: DragEvent): void {\n // Save this target to know when the drag event leaves\n this.#enterEventTarget = dragEnterEvent.target;\n dragEnterEvent.stopPropagation();\n dragEnterEvent.preventDefault();\n }\n\n public fileDragOver(dragOverEvent: DragEvent): void {\n const transfer = dragOverEvent.dataTransfer;\n\n dragOverEvent.stopPropagation();\n dragOverEvent.preventDefault();\n\n if (transfer) {\n if (transfer.items) {\n const files = Array.from(transfer.items);\n\n for (const file of files) {\n if (\n file.type &&\n this.#fileAttachmentService.fileTypeRejected(\n file.type,\n this.acceptedTypes,\n )\n ) {\n this.rejectedOver = true;\n this.acceptedOver = false;\n return;\n }\n }\n\n if (files.length > 0 && !this.acceptedOver) {\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n } else if (transfer.files) {\n // If the browser does not support DataTransfer.items,\n // defer file-type checking to drop handler.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n }\n }\n\n public fileDrop(dropEvent: DragEvent): void {\n dropEvent.stopPropagation();\n dropEvent.preventDefault();\n\n this.#enterEventTarget = undefined;\n this.rejectedOver = false;\n this.acceptedOver = false;\n\n if (dropEvent.dataTransfer && dropEvent.dataTransfer.files) {\n if (dropEvent.dataTransfer.files.length > 1) {\n return;\n }\n\n if (\n this.#fileAttachmentService.hasDirectory(dropEvent.dataTransfer.files)\n ) {\n return;\n }\n\n this.#handleFiles(dropEvent.dataTransfer.files);\n }\n }\n\n public fileDragLeave(dragLeaveEvent: DragEvent): void {\n if (this.#enterEventTarget === dragLeaveEvent.target) {\n this.rejectedOver = false;\n this.acceptedOver = false;\n }\n }\n\n public deleteFileAttachment(): void {\n const fileName = this.value?.file.name;\n this.#onTouched();\n this.#emitFileChangeEvent(undefined);\n\n /* istanbul ignore else: safety check */\n if (fileName) {\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_removed',\n fileName,\n );\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public ngOnDestroy(): void {\n this.fileChange.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public registerOnChange(fn: (value: any) => any): void {\n this.#onChange = fn;\n }\n public registerOnTouched(fn: () => any): void {\n this.#onTouched = fn;\n }\n\n public writeValue(value: any): void {\n this.value = value;\n this.#changeDetector.markForCheck();\n }\n\n /**\n * @internal\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.#changeDetector.markForCheck();\n }\n\n public emitClick(): void {\n /* istanbul ignore else */\n if (this.value) {\n this.fileClick.emit({\n file: this.value,\n });\n }\n }\n\n #announceState(resourceString: string, ...args: any[]): void {\n this.#resourcesSvc\n .getString(resourceString, ...args)\n .pipe(take(1))\n .subscribe((internationalizedString) => {\n this.#liveAnnouncerSvc.announce(internationalizedString);\n });\n }\n\n #emitFileChangeEvent(currentFile?: SkyFileItem): void {\n if (currentFile && !currentFile.errorType) {\n this.writeValue(currentFile);\n this.fileErrorName = undefined;\n this.fileErrorParam = undefined;\n this.fileErrorValidation = undefined;\n } else {\n const hadValue = this.value !== undefined;\n this.writeValue(undefined);\n // Make sure value accessor is marked as dirty when a validation failure occurs\n // and the control value remains undefined.\n if (!hadValue) {\n this.#onChange(undefined);\n }\n this.fileErrorValidation = { fileError: true };\n this.fileErrorName = currentFile?.errorType;\n this.fileErrorParam = currentFile?.errorParam;\n }\n this.fileChange.emit({\n file: currentFile,\n } as SkyFileAttachmentChange);\n\n /* istanbul ignore else */\n if (this.inputEl) {\n this.inputEl.nativeElement.value = '';\n }\n }\n\n async #loadFile(file: SkyFileItem): Promise<void> {\n if (file.file) {\n try {\n const previousFileName = this.value?.file.name;\n\n if (previousFileName) {\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_replaced',\n previousFileName,\n file.file.name,\n );\n } else {\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_added',\n file.file.name,\n );\n }\n\n file.url = await this.#fileReaderSvc.readAsDataURL(file.file);\n\n this.#emitFileChangeEvent(file);\n } catch {\n this.#emitFileChangeEvent(file);\n }\n }\n }\n\n #handleFiles(fileList?: FileList | null): void {\n this.#onTouched();\n\n if (fileList) {\n const files: SkyFileItem[] = [];\n\n if ('item' in fileList) {\n for (let index = 0; index < fileList.length; index++) {\n files.push({\n file: fileList.item(index),\n } as SkyFileItem);\n }\n }\n\n const processedFiles = this.#fileAttachmentService.checkFiles(\n files,\n this.minFileSize,\n this.maxFileSize,\n this.acceptedTypes,\n this.validateFn,\n );\n\n for (const file of processedFiles) {\n if (file.errorType) {\n this.#emitFileChangeEvent(file);\n } else {\n void this.#loadFile(file);\n }\n }\n }\n }\n\n #setFileName(file?: SkyFileItem): void {\n if (file) {\n const dropName =\n this.#fileItemService.isFile(file) && file.file.name\n ? file.file.name\n : file.url;\n\n this.fileName = dropName;\n\n if (dropName.length > 26) {\n this.truncatedFileName = dropName.slice(0, 26) + '...';\n } else {\n this.truncatedFileName = dropName;\n }\n } else {\n this.fileName = '';\n this.truncatedFileName = '';\n }\n }\n\n #updateFileAttachmentButton(): void {\n this.showFileAttachmentButton = !(\n this.value && this.currentThemeName === 'modern'\n );\n this.#changeDetector.markForCheck();\n }\n\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n #onChange = (_: any): void => {\n return;\n };\n // istanbul ignore next\n #onTouched = (): void => {\n return;\n };\n}\n","<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 (cancel)=\"onFileCancel()\"\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 iconName=\"folder-open\" />\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\n class=\"sky-file-attachment-icon\"\n iconName=\"document\"\n iconSize=\"xl\"\n />\n }\n @if (value || currentThemeName === 'default') {\n <span class=\"sky-file-attachment-file-link\">\n @if (value) {\n <a\n class=\"sky-btn sky-btn-link-inline\"\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 iconName=\"delete\" />\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","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorModule } from '../../form-error/form-error.module';\n\nimport { SkyFileAttachmentLabelComponent } from './file-attachment-label.component';\nimport { SkyFileAttachmentComponent } from './file-attachment.component';\n\n@NgModule({\n exports: [\n SkyFileAttachmentComponent,\n SkyFileAttachmentLabelComponent,\n SkyFormErrorModule,\n ],\n imports: [SkyFileAttachmentComponent, SkyFileAttachmentLabelComponent],\n})\nexport class SkyFileAttachmentModule {}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { SkyInputBoxPopulateArgs } from './input-box-populate-args';\nimport { SkyInputBoxComponent } from './input-box.component';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyInputBoxHostService implements OnDestroy {\n #host: SkyInputBoxComponent | undefined;\n #requiredSubject = new BehaviorSubject<boolean>(false);\n\n public required = this.#requiredSubject.asObservable();\n\n public get controlId(): string {\n return this.#host?.controlId ?? '';\n }\n\n public get labelId(): string {\n return this.#host?.labelText ? this.#host.labelId : '';\n }\n\n public get labelText(): string {\n return this.#host?.labelText ?? '';\n }\n\n public get ariaDescribedBy(): Observable<string | undefined> | undefined {\n return this.#ariaDescribedBy;\n }\n\n #ariaDescribedBy: Observable<string | undefined> | undefined;\n\n public init(host: SkyInputBoxComponent): void {\n this.#host = host;\n this.#ariaDescribedBy = host.ariaDescribedBy.asObservable();\n }\n\n public ngOnDestroy(): void {\n this.#requiredSubject.complete();\n }\n\n public populate(args: SkyInputBoxPopulateArgs): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot populate the input box because `SkyInputBoxHostService` has not yet been initialized. Try running the `populate` method within an Angular lifecycle hook, such as `ngOnInit`.',\n );\n }\n\n this.#host.populate(args);\n }\n\n public setHintText(hintText: string | undefined): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot set hint text on the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n\n this.#host.setHostHintText(hintText);\n }\n\n public setHintTextHidden(hide: boolean): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot hide hint text on the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n\n this.#host.setHintTextHidden(hide);\n }\n\n public setHintTextScreenReaderOnly(hide: boolean): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot remove hint text on the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n\n this.#host.setHintTextScreenReaderOnly(hide);\n }\n\n /**\n * Set required so that input box displays the label correctly. When the input is supplied by the consumer it is a content\n * child that input box can read required from and this is unnecessary. When the input is supplied internally by the\n * component the input box does not have a ref to it, so the component needs to inform the input box of its required state.\n */\n public setRequired(required: boolean): void {\n this.#requiredSubject.next(required);\n }\n\n /**\n * Whether the focused element is inside the input box.\n * @internal\n */\n public focusIsInInput(el: EventTarget): boolean {\n if (!this.#host) {\n throw new Error(\n 'Cannot get whether the focus is in the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n return this.#host.containsElement(el);\n }\n\n /**\n * Returns an html element that is inside the input box.\n * @internal\n */\n public queryHost(query: string): HTMLElement | undefined {\n if (!this.#host) {\n throw new Error(\n 'Cannot query input box host because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n return this.#host.queryPopulatedElement(query);\n }\n}\n","import { Directive, HostBinding, Input, inject } from '@angular/core';\n\nimport { SkyInputBoxHostService } from './input-box-host.service';\n\n/**\n * @internal\n */\n@Directive({\n selector:\n // eslint-disable-next-line @angular-eslint/directive-selector\n 'input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)',\n})\nexport class SkyInputBoxControlDirective {\n @HostBinding('autocomplete')\n @Input()\n public set autocomplete(value: string | undefined) {\n this.#_autocomplete = value;\n }\n\n public get autocomplete(): string | undefined {\n return this.#_autocomplete || (this.#hostSvc ? 'off' : undefined);\n }\n\n #_autocomplete: string | undefined;\n #hostSvc = inject(SkyInputBoxHostService, { optional: true });\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyInputBoxHintText',\n})\nexport class SkyInputBoxHintTextPipe implements PipeTransform {\n public transform(\n hintText?: string,\n hostHintText?: string,\n ): string | undefined {\n if (hintText && hostHintText) {\n return `${hintText} ${hostHintText}`;\n }\n\n return hintText || hostHintText;\n }\n}\n","import {\n ElementRef,\n Injectable,\n RendererFactory2,\n inject,\n} from '@angular/core';\n\nconst ARIA_DESCRIBEDBY_ATTR = 'aria-describedby';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyInputBoxAdapterService {\n #renderer = inject(RendererFactory2).createRenderer(undefined, null);\n\n /**\n * Returns whether the provided input box contains the focus event target.\n */\n // TODO: remove this if no longer needed after a scalable focus monitor service is implemented\n public containsElement(inputRef: ElementRef, el: EventTarget): boolean {\n return inputRef.nativeElement.contains(el);\n }\n\n public focusControl(elRef: ElementRef): void {\n const control = elRef.nativeElement.querySelector('.sky-form-control');\n /* istanbul ignore else */\n if (control) {\n control.focus();\n }\n }\n\n /**\n * Returns the inline help element.\n */\n public getInlineHelpElement(elRef: ElementRef): HTMLElement {\n return elRef.nativeElement.querySelector('.sky-control-help');\n }\n\n /**\n * Returns true if the provided element contains the focused element.\n */\n public isFocusInElement(el: HTMLElement): boolean {\n if (el) {\n return (\n el === document.activeElement || el.contains(document.activeElement)\n );\n }\n return false;\n }\n\n public updateDescribedBy(\n inputRef: ElementRef,\n hintTextId: string,\n hintText: string | undefined,\n ): void {\n const inputEl = inputRef.nativeElement as HTMLElement;\n\n const describedByIds =\n inputEl\n .getAttribute(ARIA_DESCRIBEDBY_ATTR)\n ?.split(' ')\n .map((id) => id.trim()) ?? [];\n\n const hintTextIdIndex = describedByIds.indexOf(hintTextId);\n const previousCount = describedByIds.length;\n\n if (hintText && hintTextIdIndex < 0) {\n describedByIds.push(hintTextId);\n } else if (!hintText && hintTextIdIndex >= 0) {\n describedByIds.splice(hintTextIdIndex, 1);\n }\n\n if (describedByIds.length !== previousCount) {\n this.#setDescribedByIds(inputEl, describedByIds);\n }\n }\n\n /**\n * Queries the provided input box with the query string.\n */\n // TODO: remove this if no longer needed after a scalable focus monitor service is implemented\n public queryElement(inputRef: ElementRef, query: string): HTMLElement {\n return inputRef.nativeElement.querySelector(query);\n }\n\n #setDescribedByIds(inputEl: HTMLElement, describedByIds: string[]): void {\n if (describedByIds.length === 0) {\n this.#renderer.removeAttribute(inputEl, ARIA_DESCRIBEDBY_ATTR);\n } else {\n this.#renderer.setAttribute(\n inputEl,\n ARIA_DESCRIBEDBY_ATTR,\n describedByIds.join(' '),\n );\n }\n }\n}\n","import {\n BooleanInput,\n NumberInput,\n coerceBooleanProperty,\n coerceNumberProperty,\n} from '@angular/cdk/coercion';\nimport {\n AfterContentChecked,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n TemplateRef,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n AbstractControlDirective,\n FormControlDirective,\n FormControlName,\n NgModel,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { SkyContentInfoProvider, SkyIdService } from '@skyux/core';\n\nimport { ReplaySubject, Subject, takeUntil } from 'rxjs';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\n\nimport { SkyInputBoxAdapterService } from './input-box-adapter.service';\nimport { SkyInputBoxControlDirective } from './input-box-control.directive';\nimport { SkyInputBoxHostService } from './input-box-host.service';\nimport { SkyInputBoxPopulateArgs } from './input-box-populate-args';\n\n/**\n * A wrapper component that provides styling and accessibility to form elements.\n */\n@Component({\n selector: 'sky-input-box',\n templateUrl: './input-box.component.html',\n styleUrls: ['./input-box.component.scss'],\n providers: [\n SkyContentInfoProvider,\n SkyInputBoxAdapterService,\n SkyInputBoxHostService,\n {\n provide: SKY_FORM_ERRORS_ENABLED,\n useValue: true,\n },\n ],\n // Note that change detection is not set to OnPush; default change detection allows the\n // invalid CSS class to be added when the content control's invalid/dirty state changes.\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyInputBoxComponent\n implements OnInit, AfterContentChecked, OnDestroy\n{\n #changeRef = inject(ChangeDetectorRef);\n #inputBoxHostSvc = inject(SkyInputBoxHostService);\n #adapterService = inject(SkyInputBoxAdapterService);\n #idSvc = inject(SkyIdService);\n #elementRef = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n /**\n * Whether to visually highlight the input box in an error state. If not specified, the input box\n * displays in an error state when either the `ngModel` or the Angular `FormControl` contains an error.\n * @default undefined\n */\n @Input()\n public hasErrors: boolean | undefined;\n\n /**\n * Whether to visually highlight the input box as disabled. To disable the input box's\n * input element, use the HTML `disabled` attribute or the Angular `FormControl.disabled`\n * property. If the input element is mapped to an Angular form control\n * (e.g. `formControlName`, `ngModel`, etc.), \"disabled\" styles are applied automatically;\n * if the input element is not associated with an Angular form control, the `disabled`\n * property on the input box must be set to `true` to visually indicate\n * the disabled state on the input box.\n * @default false\n */\n @Input()\n public disabled: boolean | undefined;\n\n /**\n * The text to display as the input's label and in known validation error messages. The label\n * will automatically be associated with the `input`, `select`, `textarea`, or compatible SKY UX\n * component included in the input box.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * The maximum number of characters to allow in the input box. This property places a\n * [SKY UX character count](https://developer.blackbaud.com/skyux/components/character-count)\n * on the input element with the appropriate validator, so don't use it with inputs where\n * users are unlikely to exceed character limits. Instead, use\n * [Angular's max length validator](https://angular.io/api/forms/MaxLengthValidator) and a\n * `maxLength` attribute on the input element to handle maximum length validation.\n *\n */\n @Input()\n public set characterLimit(value: NumberInput) {\n this.#_characterLimit =\n value === undefined ? undefined : coerceNumberProperty(value, undefined);\n\n this.#updateMaxLengthValidator();\n }\n\n public get characterLimit(): number | undefined {\n return this.#_characterLimit;\n }\n\n /**\n * Whether the input box is stacked on another input box. When specified, the appropriate\n * vertical spacing is automatically added to the input box.\n */\n @Input()\n public set stacked(value: BooleanInput) {\n this.#_stacked = coerceBooleanProperty(value);\n this.cssClass = this.#_stacked ? 'sky-form-field-stacked' : '';\n }\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the input box label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the input box label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public set hintText(value: string | undefined) {\n this.#_hintText = value;\n\n this.ariaDescribedBy.next(value ? this.hintTextId : undefined);\n }\n\n public get hintText(): string | undefined {\n return this.#_hintText;\n }\n\n public hostInputTemplate: TemplateRef<unknown> | undefined;\n\n public hostButtonsTemplate: TemplateRef<unknown> | undefined;\n\n public hostButtonsInsetTemplate: TemplateRef<unknown> | undefined;\n\n public hostButtonsLeftTemplate: TemplateRef<unknown> | undefined;\n\n public formControlHasFocus = false;\n\n public hostIconsInsetTemplate: TemplateRef<unknown> | undefined;\n\n public hostIconsInsetLeftTemplate: TemplateRef<unknown> | undefined;\n\n protected hintTextHidden = false;\n\n protected hintTextScreenReaderOnly = false;\n\n protected hostHintText: string | undefined;\n\n public readonly controlId = this.#idSvc.generateId();\n public readonly labelId = this.#idSvc.generateId();\n public readonly errorId = this.#idSvc.generateId();\n public readonly hintTextId = this.#idSvc.generateId();\n public readonly ariaDescribedBy = new ReplaySubject<string | undefined>(1);\n\n #requiredByFormField: boolean | undefined;\n\n @HostBinding('class')\n public cssClass = '';\n\n @ContentChild(FormControlDirective)\n public formControl: FormControlDirective | undefined;\n\n @ContentChild(FormControlName)\n public formControlByName: FormControlName | undefined;\n\n @ContentChild(NgModel)\n public ngModel: NgModel | undefined;\n\n @ContentChild(SkyInputBoxControlDirective, {\n read: ElementRef,\n })\n public inputRef: ElementRef | undefined;\n\n protected controlDir: AbstractControlDirective | undefined;\n\n protected get isDisabled(): boolean {\n return !!(\n this.disabled ||\n this.controlDir?.control?.disabled ||\n this.inputRef?.nativeElement?.disabled\n );\n }\n\n protected get hasErrorsComputed(): boolean {\n if (this.hasErrors === undefined) {\n return this.#controlHasErrors(this.controlDir);\n }\n\n return this.hasErrors;\n }\n\n protected get required(): boolean {\n return (\n this.#hasRequiredValidator() ||\n this.inputRef?.nativeElement.required ||\n this.#requiredByFormField\n );\n }\n\n protected characterCountScreenReader = 0;\n\n #_stacked = false;\n #_characterLimit: number | undefined;\n #_hintText: string | undefined;\n\n #previousInputRef: ElementRef | undefined;\n #previousMaxLengthValidator: ValidatorFn | undefined;\n #ngUnsubscribe = new Subject<void>();\n\n public ngOnInit(): void {\n this.#inputBoxHostSvc.init(this);\n\n this.#inputBoxHostSvc.required\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((required) => {\n this.#requiredByFormField = required;\n this.#changeRef.markForCheck();\n });\n }\n\n public ngAfterContentChecked(): void {\n this.controlDir =\n this.formControl || this.formControlByName || this.ngModel;\n\n if (!this.formControlHasFocus) {\n this.characterCountScreenReader = this.controlDir?.value?.length || 0;\n }\n\n this.#updateInputRef();\n }\n\n public ngOnDestroy(): void {\n this.ariaDescribedBy.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Whether the input box component contains the focused element.\n * @internal\n */\n public containsElement(el: EventTarget): boolean {\n return this.#adapterService.containsElement(this.#elementRef, el);\n }\n\n public formControlFocusIn(): void {\n const inlineHelpEl = this.#adapterService.getInlineHelpElement(\n this.#elementRef,\n );\n if (!this.#adapterService.isFocusInElement(inlineHelpEl)) {\n this.#updateHasFocus(true);\n }\n }\n\n public formControlFocusOut(): void {\n this.characterCountScreenReader = this.controlDir?.value?.length || 0;\n this.#updateHasFocus(false);\n }\n\n public onInsetIconClick(): void {\n if (!this.isDisabled) {\n this.#adapterService.focusControl(this.#elementRef);\n }\n }\n\n public populate(args: SkyInputBoxPopulateArgs): void {\n this.hostInputTemplate = args.inputTemplate;\n this.hostButtonsTemplate = args.buttonsTemplate;\n this.hostButtonsLeftTemplate = args.buttonsLeftTemplate;\n this.hostButtonsInsetTemplate = args.buttonsInsetTemplate;\n this.hostIconsInsetTemplate = args.iconsInsetTemplate;\n this.hostIconsInsetLeftTemplate = args.iconsInsetLeftTemplate;\n this.#changeRef.markForCheck();\n }\n\n /**\n * Returns an element inside the input box.\n * This can be used to query parts of a input box\n * that was populated through the `SkyInputBoxHostService`\n * @internal\n */\n public queryPopulatedElement(query: string): HTMLElement {\n return this.#adapterService.queryElement(this.#elementRef, query);\n }\n\n public setHintTextHidden(hide: boolean): void {\n this.hintTextHidden = hide;\n this.#changeRef.markForCheck();\n }\n\n public setHostHintText(value: string | undefined): void {\n this.hostHintText = value;\n this.#changeRef.markForCheck();\n }\n\n public setHintTextScreenReaderOnly(hide: boolean): void {\n this.hintTextScreenReaderOnly = hide;\n this.#changeRef.markForCheck();\n }\n\n #hasRequiredValidator(): boolean {\n return !!this.controlDir?.control?.hasValidator(Validators.required);\n }\n\n #updateHasFocus(hasFocus: boolean): void {\n // Some components manipulate the focus of elements inside an input box programmatically,\n // which can cause an `ExpressionChangedAfterItHasBeenCheckedError` if focus was set after\n // initial change detection. Using `setTimeout()` here fixes it.\n setTimeout(() => {\n this.formControlHasFocus = hasFocus;\n this.#changeRef.markForCheck();\n });\n }\n\n #controlHasErrors(control: AbstractControlDirective | undefined): boolean {\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n #updateInputRef(): void {\n if (!this.inputRef) {\n return;\n }\n\n const inputEl = this.inputRef.nativeElement as HTMLElement;\n\n // Check for the Angular required validator and add an aria-required attribute\n // to match. For template-driven forms, the input will have a `required` attribute\n // so the aria-required attribute is unnecessary.\n const hasRequiredValidator = this.#hasRequiredValidator();\n const ariaRequired = inputEl.ariaRequired;\n\n if (hasRequiredValidator && ariaRequired !== 'true') {\n inputEl.ariaRequired = 'true';\n } else if (!hasRequiredValidator && ariaRequired === 'true') {\n inputEl.ariaRequired = null;\n }\n\n if (this.hasErrorsComputed) {\n this.#renderer.setAttribute(inputEl, 'aria-invalid', 'true');\n this.#renderer.setAttribute(inputEl, 'aria-errormessage', this.errorId);\n } else {\n this.#renderer.removeAttribute(inputEl, 'aria-invalid');\n this.#renderer.removeAttribute(inputEl, 'aria-errormessage');\n }\n\n this.#adapterService.updateDescribedBy(\n this.inputRef,\n this.hintTextId,\n this.hintText ?? this.hostHintText,\n );\n\n if (this.inputRef !== this.#previousInputRef) {\n this.#renderer.addClass(inputEl, 'sky-form-control');\n this.#renderer.setAttribute(inputEl, 'id', this.controlId);\n\n this.#updateMaxLengthValidator();\n\n this.#previousInputRef = this.inputRef;\n }\n }\n\n #updateMaxLengthValidator(): void {\n const control = this.controlDir?.control;\n\n if (this.#previousMaxLengthValidator) {\n control?.removeValidators(this.#previousMaxLengthValidator);\n this.#previousMaxLengthValidator = undefined;\n }\n\n if (control && this.characterLimit !== undefined) {\n this.#previousMaxLengthValidator = Validators.maxLength(\n this.characterLimit,\n );\n\n control.addValidators([this.#previousMaxLengthValidator]);\n }\n }\n}\n","<div\n *skyThemeIf=\"'default'\"\n class=\"sky-input-box\"\n [ngClass]=\"{\n 'sky-input-box-disabled': isDisabled\n }\"\n>\n <div class=\"sky-form-group\">\n <div class=\"sky-input-box-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"labelTemplate\" /><ng-container\n *ngTemplateOutlet=\"inlineHelpTemplate\"\n />\n <ng-container *ngTemplateOutlet=\"characterCountTemplate\" />\n </div>\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"buttonsLeftTemplate\" />\n <div\n class=\"sky-input-box-input-group-inner\"\n [ngClass]=\"{\n 'sky-field-status-active': formControlHasFocus,\n 'sky-field-status-invalid': hasErrorsComputed\n }\"\n (focusin)=\"formControlFocusIn()\"\n (focusout)=\"formControlFocusOut()\"\n >\n <ng-container *ngTemplateOutlet=\"iconsInsetLeftTemplate\" />\n <ng-container *ngTemplateOutlet=\"inputTemplate\" />\n <ng-container *ngTemplateOutlet=\"buttonsInsetTemplate\" />\n <ng-container *ngTemplateOutlet=\"iconsInsetTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"hintTextTemplate\" />\n <ng-container *ngTemplateOutlet=\"errorLabelTemplate\" />\n </div>\n</div>\n\n<div\n *skyThemeIf=\"'modern'\"\n class=\"sky-input-box\"\n [ngClass]=\"{\n 'sky-input-box-disabled': isDisabled\n }\"\n>\n <div class=\"sky-input-box-group\">\n <ng-container *ngTemplateOutlet=\"buttonsLeftTemplate\" />\n <div\n class=\"sky-input-box-group-form-control\"\n [ngClass]=\"{\n 'sky-input-box-group-form-control-focus': formControlHasFocus,\n 'sky-input-box-group-form-control-invalid': hasErrorsComputed\n }\"\n (focusin)=\"formControlFocusIn()\"\n (focusout)=\"formControlFocusOut()\"\n >\n <div class=\"sky-form-group\">\n <ng-container *ngTemplateOutlet=\"iconsInsetLeftTemplate\" />\n <div class=\"sky-input-box-form-group-inner\">\n <div class=\"sky-input-box-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"labelTemplate\" /><ng-container\n *ngTemplateOutlet=\"inlineHelpTemplate\"\n />\n <ng-container *ngTemplateOutlet=\"characterCountTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"inputTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"buttonsInsetTemplate\" />\n <ng-container *ngTemplateOutlet=\"iconsInsetTemplate\" />\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"hintTextTemplate\" />\n <ng-container *ngTemplateOutlet=\"errorLabelTemplate\" />\n</div>\n\n<ng-template #labelTemplate>\n <ng-content select=\".sky-control-label\" />\n @if (labelText) {\n <label\n class=\"sky-control-label\"\n [attr.aria-label]=\"\n characterLimit !== undefined\n ? labelText +\n ' ' +\n ('skyux_character_count_message'\n | skyLibResources: characterCountScreenReader : characterLimit)\n : null\n \"\n [for]=\"controlId\"\n [id]=\"labelId\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</label\n >\n }\n</ng-template>\n\n<ng-template #inlineHelpTemplate>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <sky-help-inline\n class=\"sky-control-help\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverContent]=\"helpPopoverContent\"\n [popoverTitle]=\"helpPopoverTitle\"\n />\n }\n <ng-content select=\".sky-control-help\" />\n</ng-template>\n\n<ng-template #characterCountTemplate>\n @if (characterLimit !== undefined) {\n <sky-character-counter-indicator\n [characterCount]=\"controlDir?.value?.length || 0\"\n [characterCountLimit]=\"characterLimit\"\n />\n }\n <ng-content select=\"sky-character-counter-indicator\" />\n</ng-template>\n\n<ng-template #inputTemplate>\n <ng-content\n select=\"input,select,.sky-form-control:not(textarea),sky-autocomplete,sky-text-editor\"\n />\n @if (hostInputTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostInputTemplate\" />\n }\n <ng-content select=\"textarea\" />\n</ng-template>\n\n<ng-template #buttonsLeftTemplate>\n <ng-content select=\".sky-input-group-btn.sky-input-box-btn-left\" />\n @if (hostButtonsLeftTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostButtonsLeftTemplate\" />\n }\n</ng-template>\n\n<ng-template #buttonsTemplate>\n <ng-content\n select=\".sky-input-group-btn:not(.sky-input-box-btn-left):not(.sky-input-box-btn-inset)\"\n />\n @if (hostButtonsTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostButtonsTemplate\" />\n }\n</ng-template>\n\n<ng-template #buttonsInsetTemplate>\n <ng-content select=\".sky-input-group-btn.sky-input-box-btn-inset\" />\n @if (hostButtonsInsetTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostButtonsInsetTemplate\" />\n }\n</ng-template>\n\n<ng-template #iconsInsetTemplate>\n <div class=\"sky-input-box-icon-inset-wrapper\" (click)=\"onInsetIconClick()\">\n <ng-content select=\".sky-input-group-icon.sky-input-box-icon-inset\" />\n @if (hostIconsInsetTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostIconsInsetTemplate\" />\n }\n </div>\n</ng-template>\n\n<ng-template #iconsInsetLeftTemplate>\n <div\n class=\"sky-input-box-icon-inset-left-wrapper\"\n (click)=\"onInsetIconClick()\"\n >\n <ng-content select=\".sky-input-group-icon.sky-input-box-icon-inset-left\" />\n @if (hostIconsInsetLeftTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostIconsInsetLeftTemplate\" />\n }\n </div>\n</ng-template>\n\n<ng-template #errorLabelTemplate>\n <sky-form-errors\n [id]=\"errorId\"\n [errors]=\"controlDir?.errors\"\n [labelText]=\"labelText\"\n [touched]=\"controlDir?.touched\"\n [dirty]=\"controlDir?.dirty\"\n >\n <ng-content\n select=\"sky-form-error,span.sky-input-box-descendent-form-error\"\n />\n </sky-form-errors>\n <ng-content select=\".sky-error-label,.sky-error-indicator\" />\n</ng-template>\n\n<ng-template #hintTextTemplate>\n @if (hintText || hostHintText) {\n <div\n class=\"sky-input-box-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n [ngClass]=\"{\n 'sky-input-box-hint-text-hidden': hintTextHidden,\n 'sky-screen-reader-only': hintTextScreenReaderOnly\n }\"\n [id]=\"hintTextId\"\n >\n {{ hintText | skyInputBoxHintText: hostHintText }}\n </div>\n }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyCharacterCounterModule } from '../character-counter/character-counter.module';\nimport { SkyFormErrorModule } from '../form-error/form-error.module';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyInputBoxControlDirective } from './input-box-control.directive';\nimport { SkyInputBoxHintTextPipe } from './input-box-hint-text.pipe';\nimport { SkyInputBoxComponent } from './input-box.component';\n\n@NgModule({\n declarations: [SkyInputBoxComponent],\n imports: [\n CommonModule,\n SkyCharacterCounterModule,\n SkyFormErrorsModule,\n SkyFormErrorModule,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyInputBoxControlDirective,\n SkyInputBoxHintTextPipe,\n SkyThemeModule,\n ],\n exports: [\n SkyInputBoxHintTextPipe,\n SkyInputBoxComponent,\n SkyInputBoxControlDirective,\n SkyFormErrorModule,\n ],\n})\nexport class SkyInputBoxModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NgControl,\n Validators,\n} from '@angular/forms';\nimport {\n SkyFileReaderService,\n SkyIdModule,\n SkyLiveAnnouncerService,\n} from '@skyux/core';\nimport { SkyIdService } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { take } from 'rxjs/operators';\n\nimport { SkyFormErrorComponent } from '../../form-error/form-error.component';\nimport { SKY_FORM_ERRORS_ENABLED } from '../../form-error/form-errors-enabled-token';\nimport { SkyFormErrorsComponent } from '../../form-error/form-errors.component';\nimport { SkyInputBoxModule } from '../../input-box/input-box.module';\nimport { SkyFormsResourcesModule } from '../../shared/sky-forms-resources.module';\nimport { SkyFileAttachmentService } from '../file-attachment/file-attachment.service';\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileSizePipe } from '../shared/file-size.pipe';\nimport { SkyFileValidateFn } from '../shared/file-validate-function';\n\nimport { SkyFileDropChange } from './file-drop-change';\nimport { SkyFileLink } from './file-link';\n\nconst MAX_FILE_SIZE_DEFAULT = 500000;\nconst MIN_FILE_SIZE_DEFAULT = 0;\n\n/**\n * Provides an element to attach multiple files where users can browse or drag and drop local files\n * or provide hyperlinks to external files. You can leave the contents of the component\n * blank to display the drop zone's default UI, or you can specify custom content to\n * display instead. When the module initializes, it disables the ability to drag and\n * drop files for the entire window to prevent the browser from opening files that are\n * accidentally dropped outside the target zone. If you implement your own file drop functionality\n * outside of the file drop component, you can place the `sky-file-drop-target` CSS class\n * on the element that receives drop events to exempt it from the drop exclusion rule.\n */\n@Component({\n selector: 'sky-file-drop',\n templateUrl: './file-drop.component.html',\n styleUrls: ['./file-drop.component.scss'],\n providers: [\n SkyFileAttachmentService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyFileSizePipe,\n SkyFormErrorComponent,\n SkyFormErrorsComponent,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyInputBoxModule,\n SkyThemeModule,\n ],\n})\nexport class SkyFileDropComponent implements OnDestroy, ControlValueAccessor {\n /**\n * Fires when users add or remove files.\n */\n @Output()\n public filesChanged = new EventEmitter<SkyFileDropChange>();\n\n /**\n * Fires when the link input box triggers a blur event.\n */\n @Output()\n public linkInputBlur = new EventEmitter<void>();\n\n /**\n * Fires when users add or remove links.\n */\n @Output()\n public linkChanged = new EventEmitter<SkyFileLink>();\n\n /**\n * The ARIA label for the file upload button. This provides a text equivalent for\n * screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @default \"Drag a file here or click to browse\"\n */\n @Input()\n public fileUploadAriaLabel: string | undefined;\n\n /**\n * The ARIA label for the link upload input. This sets the button's `aria-label` attribute to provide a text equivalent for\n * screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @default \"Link to a file\"\n */\n @Input()\n public linkUploadAriaLabel: string | undefined;\n\n /**\n * The hint text for the link upload input.\n */\n @Input()\n public linkUploadHintText: string | undefined;\n\n /**\n * The minimum size in bytes for valid files.\n * @default 0\n */\n @Input()\n public set minFileSize(value: number | undefined) {\n this.#_minFileSize = value ?? MIN_FILE_SIZE_DEFAULT;\n }\n\n public get minFileSize(): number {\n return this.#_minFileSize;\n }\n\n /**\n * The maximum size in bytes for valid files.\n * @default 500000\n */\n @Input()\n public set maxFileSize(value: number | undefined) {\n this.#_maxFileSize = value ?? MAX_FILE_SIZE_DEFAULT;\n }\n\n public get maxFileSize(): number {\n return this.#_maxFileSize;\n }\n\n /**\n * Whether users can drag and drop multiple files at the same time.\n */\n @Input()\n public multiple: boolean | undefined = true;\n\n /**\n * The custom validation function. This validation runs alongside the internal\n * file validation. This function takes a `SkyFileItem` object as a parameter.\n * The string returned is used as the error message in multi-file attachment.\n */\n @Input()\n public validateFn: SkyFileValidateFn | undefined;\n\n /**\n * The comma-delimited string literal of MIME types that users can attach.\n * By default, all file types are allowed.\n * @required\n */\n @Input()\n public acceptedTypes: string | undefined;\n\n /**\n * A custom error message to display when a file doesn't match the accepted types.\n * This replaces a default error message that lists all accepted types.\n */\n @Input()\n public acceptedTypesErrorMessage: string | undefined;\n\n /**\n * Whether to disable the option to browse for files to attach.\n */\n @Input()\n public noClick: boolean | undefined = false;\n\n /**\n * Whether to display the option to attach files from URLs rather than from local devices.\n */\n @Input()\n public allowLinks: boolean | undefined = false;\n\n /**\n * The text to display as the file attachment's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether to hide `labelText` from view.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Whether uploading a file or link is required.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input elements so that screen readers announce an invalid state until the input element\n * is complete.\n * For more information about the `aria-required` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-required).\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the file attachment label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * Whether the file attachment is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the file attachment.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the file attachment label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n @ViewChild('fileInput')\n public inputEl: ElementRef | undefined;\n\n public rejectedOver = false;\n public acceptedOver = false;\n public linkUrl: string | undefined;\n\n #enterEventTarget: any;\n\n #_maxFileSize = MAX_FILE_SIZE_DEFAULT;\n\n #_minFileSize = MIN_FILE_SIZE_DEFAULT;\n\n #notifyTouched: (() => void) | undefined;\n #notifyChange:\n | ((_: (SkyFileItem | SkyFileLink)[] | undefined | null) => void)\n | undefined;\n #_uploadedFiles: (SkyFileItem | SkyFileLink)[] = [];\n\n readonly #fileAttachmentService = inject(SkyFileAttachmentService);\n readonly #fileReaderSvc = inject(SkyFileReaderService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n readonly #idSvc = inject(SkyIdService);\n\n protected errorId = this.#idSvc.generateId();\n\n protected ngControl = inject(NgControl, { optional: true });\n\n protected rejectedFiles: SkyFileItem[] = [];\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnDestroy(): void {\n this.filesChanged.complete();\n this.linkChanged.complete();\n this.linkInputBlur.complete();\n }\n\n public writeValue(value: unknown): void {\n if (Array.isArray(value)) {\n const linkUploads: SkyFileLink[] = [];\n const fileUploads: SkyFileItem[] = [];\n\n value.forEach((file) => {\n if ('url' in file && file.url !== undefined) {\n if (!('file' in file)) {\n linkUploads.push(file);\n } else if ('file' in file && file.file !== undefined) {\n fileUploads.push(file);\n }\n }\n });\n\n if (!(linkUploads.length > 0) && !(fileUploads.length > 0)) {\n this.#notifyChange?.(null);\n } else {\n this.#_uploadedFiles = [];\n\n if (linkUploads.length > 0) {\n linkUploads.forEach((file) => {\n this.uploadLink(file);\n });\n }\n if (fileUploads.length > 0) {\n // this prevents FormControl from setting an invalid value before the async\n // processes in #handleFile is complete\n this.#notifyChange?.(null);\n this.#handleFiles(fileUploads);\n }\n }\n } else {\n this.#notifyChange?.(null);\n }\n }\n\n public registerOnChange(fn: any): void {\n this.#notifyChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n public dropClicked(): void {\n if (!this.noClick && this.inputEl) {\n this.#notifyTouched?.();\n this.inputEl.nativeElement.click();\n }\n }\n\n public fileChangeEvent(fileChangeEvent: Event): void {\n /** Set a timeout here to allow the browser to regain context from the system dialog. Without this, error messages do not read out correctly to screen readers. */\n setTimeout(() => {\n this.#handleFiles(\n (fileChangeEvent.target as HTMLInputElement | undefined)?.files,\n );\n }, 500);\n }\n\n public fileDragEnter(dragEnterEvent: DragEvent): void {\n // Save this target to know when the drag event leaves\n this.#enterEventTarget = dragEnterEvent.target;\n dragEnterEvent.stopPropagation();\n dragEnterEvent.preventDefault();\n }\n\n public fileDragOver(dragOverEvent: DragEvent): void {\n const transfer = dragOverEvent.dataTransfer;\n\n dragOverEvent.stopPropagation();\n dragOverEvent.preventDefault();\n\n if (transfer) {\n if (transfer.items) {\n const files = Array.from(transfer.items);\n\n for (const file of files) {\n if (\n file.type &&\n this.#fileAttachmentService.fileTypeRejected(\n file.type,\n this.acceptedTypes,\n )\n ) {\n this.rejectedOver = true;\n this.acceptedOver = false;\n return;\n }\n }\n\n if (files.length > 0 && !this.acceptedOver) {\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n } /* istanbul ignore next: untestable */ else if (transfer.files) {\n // If the browser does not support DataTransfer.items,\n // defer file-type checking to drop handler.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n }\n }\n\n public fileDrop(dropEvent: DragEvent): void {\n dropEvent.stopPropagation();\n dropEvent.preventDefault();\n\n this.#notifyTouched?.();\n\n this.#enterEventTarget = undefined;\n this.rejectedOver = false;\n this.acceptedOver = false;\n\n if (dropEvent.dataTransfer && dropEvent.dataTransfer.files) {\n const hasDirectory = this.#fileAttachmentService.hasDirectory(\n dropEvent.dataTransfer.files,\n );\n const invalidNumberOfFiles =\n !this.multiple && dropEvent.dataTransfer.files.length > 1;\n\n if (hasDirectory || invalidNumberOfFiles) {\n return;\n }\n\n this.#handleFiles(dropEvent.dataTransfer.files);\n }\n }\n\n public fileDragLeave(dragLeaveEvent: any): void {\n if (this.#enterEventTarget === dragLeaveEvent.target) {\n this.rejectedOver = false;\n this.acceptedOver = false;\n }\n }\n\n public addLinkEnter(event: KeyboardEvent): void {\n if (event.which === 13) {\n this.addLink(event);\n }\n }\n\n public addLink(event: Event): void {\n event.preventDefault();\n this.uploadLink({ url: this.linkUrl } as SkyFileLink);\n this.linkUrl = undefined;\n this.#notifyTouched?.();\n }\n\n protected uploadLink(file: SkyFileLink): void {\n this.linkChanged.emit(file);\n this.#_uploadedFiles?.push(file);\n this.#notifyChange?.(this.#_uploadedFiles);\n this.#announceState(\n 'skyux_file_attachment_file_upload_link_added',\n file.url,\n );\n }\n\n public onLinkBlur(): void {\n this.#notifyTouched?.();\n this.linkInputBlur.emit();\n }\n\n protected get isRequired(): boolean {\n return (\n this.required ||\n (this.ngControl?.control?.hasValidator(Validators.required) ?? false)\n );\n }\n\n #announceState(resourceString: string, ...args: any[]): void {\n this.#resourcesSvc\n .getString(resourceString, ...args)\n .pipe(take(1))\n .subscribe((internationalizedString) => {\n this.#liveAnnouncerSvc.announce(internationalizedString);\n });\n }\n\n #emitFileChangeEvent(\n totalFiles: number,\n rejectedFileArray: SkyFileItem[],\n validFileArray: SkyFileItem[],\n ): void {\n if (totalFiles === rejectedFileArray.length + validFileArray.length) {\n this.filesChanged.emit({\n files: validFileArray,\n rejectedFiles: rejectedFileArray,\n } as SkyFileDropChange);\n\n if (this.inputEl) {\n this.inputEl.nativeElement.value = '';\n }\n }\n }\n\n #filesRejected(\n file: SkyFileItem,\n validFileArray: SkyFileItem[],\n rejectedFileArray: SkyFileItem[],\n totalFiles: number,\n ): void {\n rejectedFileArray.push(file);\n this.#notifyChange?.(\n this.#_uploadedFiles.length > 0 ? this.#_uploadedFiles : null,\n );\n this.#emitFileChangeEvent(totalFiles, rejectedFileArray, validFileArray);\n }\n\n async #loadFile(\n fileDrop: SkyFileDropComponent,\n file: SkyFileItem,\n validFileArray: SkyFileItem[],\n rejectedFileArray: SkyFileItem[],\n totalFiles: number,\n ): Promise<void> {\n try {\n file.url = await this.#fileReaderSvc.readAsDataURL(file.file);\n\n validFileArray.push(file);\n fileDrop.#emitFileChangeEvent(\n totalFiles,\n rejectedFileArray,\n validFileArray,\n );\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_added',\n file.file.name,\n );\n this.#_uploadedFiles?.push(file);\n this.#notifyChange?.(this.#_uploadedFiles);\n } catch {\n fileDrop.#filesRejected(\n file,\n validFileArray,\n rejectedFileArray,\n totalFiles,\n );\n }\n }\n\n #handleFiles(fileList?: FileList | null | SkyFileItem[]): void {\n if (fileList) {\n const validFileArray: SkyFileItem[] = [];\n const rejectedFileArray: SkyFileItem[] = [];\n const totalFiles = fileList.length;\n\n let files: SkyFileItem[] = [];\n\n if ('item' in fileList) {\n for (let index = 0; index < fileList.length; index++) {\n files.push({\n file: fileList.item(index),\n } as SkyFileItem);\n }\n } else {\n files = fileList;\n }\n\n const processedFiles = this.#fileAttachmentService.checkFiles(\n files,\n this.minFileSize,\n this.maxFileSize,\n this.acceptedTypes,\n this.validateFn,\n );\n\n for (const file of processedFiles) {\n if (file.errorType) {\n this.#filesRejected(\n file,\n validFileArray,\n rejectedFileArray,\n totalFiles,\n );\n } else {\n void this.#loadFile(\n this,\n file,\n validFileArray,\n rejectedFileArray,\n totalFiles,\n );\n }\n }\n\n this.rejectedFiles = rejectedFileArray;\n }\n }\n}\n","<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\n class=\"sky-file-upload-icon\"\n iconName=\"arrow-upload\"\n iconSize=\"xl\"\n />\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\n class=\"sky-file-upload-icon sky-file-upload-icon-target\"\n iconName=\"target\"\n iconSize=\"xl\"\n />\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\n class=\"sky-file-upload-icon sky-file-upload-icon-close\"\n iconName=\"prohibited\"\n iconSize=\"xl\"\n />\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.url) {\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","import {\n Component,\n DoCheck,\n EventEmitter,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n Output,\n inject,\n} from '@angular/core';\nimport { SkyLiveAnnouncerService } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\n\nimport { take } from 'rxjs/operators';\n\nimport { SkyFormsResourcesModule } from '../../shared/sky-forms-resources.module';\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileItemService } from '../shared/file-item.service';\nimport { SkyFileSizePipe } from '../shared/file-size.pipe';\n\nimport { SkyFileLink } from './file-link';\n\n@Component({\n imports: [SkyFileSizePipe, SkyFormsResourcesModule, SkyIconModule],\n selector: 'sky-file-item',\n styleUrl: './file-item.component.scss',\n templateUrl: './file-item.component.html',\n})\nexport class SkyFileItemComponent implements DoCheck {\n /**\n * The summary information to display about file attachments. For local files,\n * the default summary includes the file name, file size, file preview, and a delete button.\n * For external files, the default summary includes the URL and a delete button.\n * You can include additional inputs to display user-entered metadata.\n * @required\n */\n @Input()\n public set fileItem(value: SkyFileItem | SkyFileLink | undefined) {\n this.#_fileItem = value;\n if (value && 'file' in value) {\n this.isFile = this.#fileItemService.isFile(value);\n this.isImage = this.#fileItemService.isImage(value);\n this.fileName = value.file.name;\n this.fileSize = value.file.size;\n } else {\n this.isFile = this.isImage = false;\n this.fileName = '';\n this.fileSize = undefined;\n }\n this.url = value?.url ?? '';\n }\n\n public get fileItem(): SkyFileItem | SkyFileLink | undefined {\n return this.#_fileItem;\n }\n\n /**\n * Fires when users select the delete button for an item. The deleted item is passed to the\n * function.\n */\n @Output()\n public deleteFile = new EventEmitter<SkyFileLink | SkyFileItem>();\n\n public fileName = '';\n\n public fileSize: number | undefined;\n\n public url = '';\n\n public icon: string | undefined;\n\n public isFile = false;\n public isImage = false;\n\n #_fileItem: SkyFileItem | SkyFileLink | undefined;\n\n #differ: KeyValueDiffer<any, any>;\n #fileItemService: SkyFileItemService;\n\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n constructor(differs: KeyValueDiffers, fileItemService: SkyFileItemService) {\n this.#differ = differs.find({}).create();\n this.#fileItemService = fileItemService;\n }\n\n public ngDoCheck(): void {\n if (this.fileItem) {\n const changes = this.#differ.diff(this.fileItem);\n\n if (changes) {\n let cls: string | undefined;\n const extensionUpper = this.#fileItemService.getFileExtensionUpper(\n this.fileItem as SkyFileItem,\n );\n let fileTypeUpper: string;\n\n switch (extensionUpper) {\n case '.PDF':\n cls = 'pdf';\n break;\n case '.GZ':\n case '.RAR':\n case '.TGZ':\n case '.ZIP':\n cls = 'archive';\n break;\n case '.PPT':\n case '.PPTX':\n cls = 'ppt';\n break;\n case '.DOC':\n case '.DOCX':\n cls = 'doc';\n break;\n case '.XLS':\n case '.XLSX':\n cls = 'xls';\n break;\n case '.TXT':\n cls = 'text';\n break;\n case '.HTM':\n case '.HTML':\n cls = 'chevron-double';\n break;\n default:\n break;\n }\n\n if (!cls) {\n fileTypeUpper = this.#fileItemService.getFileTypeUpper(\n this.fileItem as SkyFileItem,\n );\n\n switch (fileTypeUpper.substr(0, fileTypeUpper.indexOf('/'))) {\n case 'AUDIO':\n cls = 'audio';\n break;\n case 'IMAGE':\n // Normally images are displayed as thumbnails, but if an image type is not recognized\n // as being widely supported by modern browsers (e.g. TIFF files) then an icon should\n // be displayed instead.\n cls = 'image';\n break;\n case 'TEXT':\n cls = 'text';\n break;\n case 'VIDEO':\n cls = 'video';\n break;\n default:\n break;\n }\n }\n this.icon = 'document' + (cls ? '-' + cls : '');\n }\n } else {\n this.icon = undefined;\n }\n }\n\n public itemDelete(): void {\n this.deleteFile.emit(this.fileItem);\n if (!this.isFile) {\n this.#resourcesSvc\n .getString('skyux_file_attachment_file_upload_link_removed', this.url)\n .pipe(take(1))\n .subscribe((resourceString) => {\n this.#liveAnnouncerSvc.announce(resourceString);\n });\n } else {\n this.#resourcesSvc\n .getString(\n 'skyux_file_attachment_file_upload_file_removed',\n this.fileName,\n )\n .pipe(take(1))\n .subscribe((resourceString) => {\n this.#liveAnnouncerSvc.announce(resourceString);\n });\n }\n }\n}\n","@if (fileItem) {\n <div class=\"sky-file-item\">\n <div class=\"sky-file-item-title\">\n <div class=\"sky-file-item-name-container\">\n <div class=\"sky-file-item-name\">\n @if (isFile) {\n {{ fileName }}\n } @else {\n {{ url }}\n }\n </div>\n @if (isFile) {\n <div class=\"sky-file-item-size\">({{ fileSize | skyFileSize }})</div>\n }\n </div>\n <div class=\"sky-file-item-controls\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-file-item-btn-delete\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_delete'\n | skyLibResources: (isFile ? fileName : url)\n \"\n (click)=\"itemDelete()\"\n >\n <sky-icon iconName=\"delete\" />\n </button>\n </div>\n </div>\n <div class=\"sky-file-item-content\">\n <div class=\"sky-file-item-preview\">\n @if (isImage) {\n <div class=\"sky-file-item-preview-img-container\">\n <img\n class=\"sky-file-item-preview-img\"\n [src]=\"url\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n />\n </div>\n } @else if (icon) {\n <div class=\"sky-file-item-preview-other\">\n <sky-icon iconSize=\"xxxl\" [iconName]=\"icon\" />\n </div>\n }\n </div>\n <div class=\"sky-file-item-content-custom\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorModule } from '../../form-error/form-error.module';\n\nimport { SkyFileDropComponent } from './file-drop.component';\nimport { SkyFileItemComponent } from './file-item.component';\n\n@NgModule({\n exports: [SkyFileDropComponent, SkyFileItemComponent, SkyFormErrorModule],\n imports: [SkyFileDropComponent, SkyFileItemComponent],\n})\nexport class SkyFileDropModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFileAttachmentModule } from './file-attachment/file-attachment.module';\nimport { SkyFileDropModule } from './file-drop/file-drop.module';\n\n/**\n * @deprecated Import either `SkyFileAttachmentModule` or `SkyFileDropModule`.\n */\n@NgModule({\n exports: [SkyFileAttachmentModule, SkyFileDropModule],\n imports: [SkyFileAttachmentModule, SkyFileDropModule],\n})\nexport class SkyFileAttachmentsModule {}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Tracks the element IDs for all radios within a radio group.\n * @internal\n */\n@Injectable()\nexport class SkyRadioGroupIdService {\n public get radioIds(): Observable<string[]> {\n return this.#radioIdsObs;\n }\n\n #radioIds: Map<string, string>;\n #radioIds$: BehaviorSubject<string[]>;\n #radioIdsObs: Observable<string[]>;\n\n constructor() {\n this.#radioIds = new Map();\n this.#radioIds$ = new BehaviorSubject<string[]>([]);\n this.#radioIdsObs = this.#radioIds$.asObservable();\n }\n\n /**\n * Associates a radio input's ID with its parent radio group.\n * @param {string} id A unique ID for the radio component.\n * @param {string} inputElementId The ID applied to the radio input element.\n */\n public register(id: string, inputElementId: string): void {\n if (!this.#radioIds.has(id) || this.#radioIds.get(id) !== inputElementId) {\n this.#radioIds.set(id, inputElementId);\n this.#emitRadioIds();\n }\n }\n\n /**\n * Disassociates a radio input's ID with its parent radio group.\n * @param {string} id The ID used to register the radio component.\n */\n public unregister(id: string): void {\n if (this.#radioIds.has(id)) {\n this.#radioIds.delete(id);\n this.#emitRadioIds();\n }\n }\n\n #emitRadioIds(): void {\n this.#radioIds$.next(Array.from(this.#radioIds.values()));\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Provider,\n TemplateRef,\n booleanAttribute,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyRadioGroupIdService } from './radio-group-id.service';\nimport { SkyRadioChange } from './types/radio-change';\nimport { SkyRadioType } from './types/radio-type';\n\n/**\n * Provider Expression that allows sky-radio to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n */\nconst SKY_RADIO_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyRadioComponent),\n multi: true,\n};\n\n/**\n * Renders a SKY UX-themed replacement for an HTML `input` element\n * with `type=\"radio\"`. When users select a radio button, its value is driven through an\n * `ngModel` attribute that you specify on the `sky-radio` element or the parent `sky-radio-group` element.\n */\n@Component({\n selector: 'sky-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [SKY_RADIO_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [SkyThemeComponentClassDirective],\n standalone: false,\n})\nexport class SkyRadioComponent implements OnDestroy, ControlValueAccessor {\n /**\n * Fires when users focus off a radio button.\n */\n public blur = new Subject<void>();\n\n /**\n * Whether the radio button is selected.\n * @default false\n */\n @Input()\n public set checked(value: boolean | undefined) {\n const newCheckedState = !!value;\n\n if (this.#_checked !== newCheckedState) {\n this.#_checked = newCheckedState;\n this.checkedChange.next(newCheckedState);\n\n if (newCheckedState) {\n this.selectedValue = this.value;\n }\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public get checked(): boolean {\n return this.#_checked;\n }\n\n /**\n * Whether to disable the input on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (value !== this.disabled) {\n this.#_disabled = value;\n this.disabledChange.next(value);\n this.#changeDetector.markForCheck();\n }\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The ID for the radio button.\n * If a value is not provided, an autogenerated ID is used.\n */\n @Input()\n public set id(value: string | undefined) {\n if (value) {\n this.inputId = `sky-radio-${value}-input`;\n } else {\n this.inputId = `sky-radio-${this.#defaultId}-input`;\n }\n this.#radioGroupIdSvc?.register(this.#defaultId, this.inputId);\n }\n\n /**\n * The ARIA label for the radio button. This sets the radio button's `aria-label`\n * attribute to provide a text equivalent for screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)\n * when the radio button does not include a visible label. You must set this property for icon\n * radio buttons. If the radio button includes a visible label, use `labelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set label(value: string | undefined) {\n this.#_label = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioComponent.label', {\n deprecationMajorVersion: 10,\n replacementRecommendation: 'Use the `labelText` input instead.',\n });\n }\n }\n\n public get label(): string | undefined {\n return this.#_label;\n }\n\n /**\n * The HTML element ID of the element that labels\n * the radio button. This sets the radio button's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the radio button does not include a visible label, use `label` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set labelledBy(value: string | undefined) {\n this.#_labelledBy = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioComponent.labelledBy', {\n deprecationMajorVersion: 10,\n replacementRecommendation: 'Use the `labelText` input instead.',\n });\n }\n }\n\n public get labelledBy(): string | undefined {\n return this.#_labelledBy;\n }\n\n /**\n * This property is deprecated in favor of the `name` property on the `sky-radio-group element`.\n * We recommend using the `sky-radio-group` element with all radio buttons, but if you opt not to,\n * then this property specifies a name for a group of radio buttons.\n * @deprecated\n */\n @Input()\n public set name(value: string | undefined) {\n this.#_name = value;\n this.#changeDetector.markForCheck();\n }\n\n public get name(): string | undefined {\n return this.#_name;\n }\n\n /**\n * This property is deprecated in favor of\n * the `tabIndex` property on the `sky-radio-group` element. It specifies an index for the radio\n * button. If the index is not defined, it is set to the position of the radio button on load.\n * @deprecated\n */\n @Input()\n public set tabindex(value: number | undefined) {\n console.warn(\n 'The sky-radio `tabindex` property is deprecated. Please use the `tabindex` property on the sky-radio-group component.',\n );\n if (value) {\n this.#_tabindex = value;\n } else {\n this.#_tabindex = 0;\n }\n this.#changeDetector.markForCheck();\n }\n public get tabindex(): number {\n return this.#_tabindex;\n }\n\n // For setting the tabindex from the radio group\n public set groupTabIndex(value: number | undefined) {\n if (value) {\n this.#_tabindex = value;\n } else {\n this.#_tabindex = 0;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n /**\n * The value bound to the radio button's `value` property. The value usually\n * corresponds to the radio button's label, which you specify with the `sky-radio-label`\n * component.\n * @required\n */\n @Input()\n public set value(value: any) {\n /* istanbul ignore else */\n if (this.#_value !== value) {\n if (this.selectedValue && this.selectedValue === this.#_value) {\n this.selectedValue = value;\n this.#onChangeCallback(this.selectedValue);\n this.#onTouchedCallback();\n }\n\n this.#_value = value;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public get value(): any {\n return this.#_value;\n }\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to radio button. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The SVG icon to display in place of the radio button. To group radio buttons like in\n * the demo above, place the `sky-switch-icon-group` class on the direct parent element of the\n * radio buttons.\n */\n @Input()\n public iconName: string | undefined;\n\n /**\n * The background color type after users select an icon radio button.\n * The valid options correspond\n * [the label component's](https://developer.blackbaud.com/skyux/components/label)\n * label types. `danger` creates a red background, `info` creates a blue background,\n * `success` creates a green background, and `warning` creates an orange background.\n * @default \"info\"\n * @deprecated radioType is no longer supported\n */\n @Input()\n public get radioType(): SkyRadioType {\n return this.#_radioType;\n }\n public set radioType(value: SkyRadioType | undefined) {\n if (value) {\n this.#logger.deprecated('SkyRadioComponent.radioType', {\n deprecationMajorVersion: 7,\n });\n }\n\n this.#_radioType = value ?? 'info';\n }\n\n /**\n * The text to display as the radio button's label. Use this instead of the `sky-radio-label` when the label is text-only.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Indicates whether to hide the `labelText`.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the radio button label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Fires when users select a radio button.\n */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n public change = new EventEmitter<SkyRadioChange>();\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n public checkedChange = new EventEmitter<boolean>();\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n public disabledChange = new EventEmitter<boolean>();\n\n public set selectedValue(value: any) {\n if (value !== this.#_selectedValue) {\n this.#_selectedValue = value;\n }\n }\n public get selectedValue(): any {\n return this.#_selectedValue;\n }\n\n public radioGroupDisabled = false;\n\n protected inputId = '';\n\n #_checked = false;\n #_disabled = false;\n #_name: string | undefined;\n #_radioType: SkyRadioType = 'info';\n #_selectedValue: unknown;\n #_tabindex = 0;\n #_value: any;\n #_label: string | undefined;\n #_labelledBy: string | undefined;\n\n #changeDetector = inject(ChangeDetectorRef);\n #defaultId = inject(SkyIdService).generateId();\n #radioGroupIdSvc = inject(SkyRadioGroupIdService, { optional: true });\n #logger = inject(SkyLogService);\n\n constructor() {\n this.id = this.#defaultId;\n }\n\n public ngOnDestroy(): void {\n this.#radioGroupIdSvc?.unregister(this.#defaultId);\n this.#removeUniqueSelectionListener();\n this.change.complete();\n this.checkedChange.complete();\n this.disabledChange.complete();\n }\n\n public writeValue(value: unknown): void {\n if (value === undefined) {\n return;\n }\n\n this.selectedValue = value;\n this.checked = this.value === this.selectedValue;\n\n this.#changeDetector.markForCheck();\n }\n\n /**\n * @internal\n * Whether to disable the control. Implemented as a part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public setGroupDisabledState(isDisabled: boolean): void {\n this.radioGroupDisabled = isDisabled;\n this.#changeDetector.markForCheck();\n }\n\n public registerOnChange(fn: any): void {\n this.#onChangeCallback = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.#onTouchedCallback = fn;\n }\n\n public onInputChange(event: Event): void {\n event.stopPropagation();\n\n if (!this.disabled) {\n this.checked = true;\n this.change.next({\n value: this.value,\n });\n\n this.onInputFocusChange();\n this.#onChangeCallback(this.value);\n }\n }\n\n public onInputFocusChange(): void {\n this.#onTouchedCallback();\n this.blur.next();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #removeUniqueSelectionListener = (): void => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onChangeCallback = (value: any): void => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouchedCallback = (): void => {};\n}\n","<span class=\"sky-radio-outer-wrapper\">\n <label\n class=\"sky-radio-wrapper sky-switch\"\n [ngClass]=\"{ 'sky-switch-disabled': disabled || radioGroupDisabled }\"\n >\n <input\n class=\"sky-radio-input sky-switch-input\"\n type=\"radio\"\n [attr.aria-label]=\"labelText || label\"\n [attr.aria-labelledby]=\"labelText ? undefined : labelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [checked]=\"checked\"\n [disabled]=\"disabled || radioGroupDisabled\"\n [id]=\"inputId\"\n [name]=\"name\"\n [tabIndex]=\"tabindex\"\n [value]=\"value\"\n (blur)=\"onInputFocusChange()\"\n (change)=\"onInputChange($event)\"\n />\n <span\n class=\"sky-switch-control\"\n [ngClass]=\"{\n 'sky-switch-control-icon': iconName,\n 'sky-rounded-circle': !iconName,\n 'sky-switch-control-info': iconName && radioType === 'info',\n 'sky-switch-control-success': iconName && radioType === 'success',\n 'sky-switch-control-warning': iconName && radioType === 'warning',\n 'sky-switch-control-danger': iconName && radioType === 'danger'\n }\"\n >\n @if (iconName) {\n <sky-icon [iconName]=\"iconName\" />\n }\n </span>\n @if (labelText) {\n <span\n class=\"sky-switch-label sky-radio-label-text\"\n [class.sky-screen-reader-only]=\"labelHidden\"\n >{{ labelText }}</span\n >\n } @else {\n <ng-content select=\"sky-radio-label\" />\n }\n </label>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n class=\"sky-radio-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n</span>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-radio-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","import {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n HostBinding,\n Input,\n OnDestroy,\n Optional,\n QueryList,\n Self,\n TemplateRef,\n booleanAttribute,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\n\nimport { SkyRadioGroupIdService } from './radio-group-id.service';\nimport { SkyRadioComponent } from './radio.component';\nimport { SkyRadioChange } from './types/radio-change';\nimport { SkyRadioGroupHeadingLevel } from './types/radio-group-heading-level';\nimport { SkyRadioGroupHeadingStyle } from './types/radio-group-heading-style';\n\nlet nextUniqueId = 0;\n\nfunction numberAttribute4(value: unknown): number {\n return numberAttribute(value, 4);\n}\n\n/**\n * Organizes radio buttons into a group. It is required for radio\n * buttons on Angular reactive forms, and we recommend using it with all radio buttons.\n * On Angular forms, the component manages the selected values and keeps the forms up-to-date.\n * When users select a radio button, its value is driven through an `ngModel` attribute that you specify on the `sky-radio-group` element.\n */\n@Component({\n selector: 'sky-radio-group',\n templateUrl: './radio-group.component.html',\n styleUrls: ['./radio-group.component.scss'],\n providers: [\n SkyRadioGroupIdService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n standalone: false,\n})\nexport class SkyRadioGroupComponent implements AfterContentInit, OnDestroy {\n /**\n * The HTML element ID of the element that labels\n * the radio button group. This sets the radio button group's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the radio button group does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n * @deprecated Use `headingText` instead.\n */\n @Input()\n public set ariaLabelledBy(value: string | undefined) {\n this.#_ariaLabelledBy = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioGroupComponent.ariaLabelledBy', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get ariaLabelledBy(): string | undefined {\n return this.#_ariaLabelledBy;\n }\n\n /**\n * The ARIA label for the radio button group. This sets the\n * radio button group's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the radio button group includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use `headingText` instead.\n */\n @Input()\n public set ariaLabel(value: string | undefined) {\n this.#_ariaLabel = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioGroupComponent.ariaLabel', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get ariaLabel(): string | undefined {\n return this.#_ariaLabel;\n }\n\n /**\n * Whether to disable the input on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (this.#_disabled !== value) {\n this.#_disabled = value;\n this.#updateRadioButtonDisabled();\n }\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The semantic heading level in the document structure. By default, the heading text is not wrapped in a heading element.\n */\n @Input({ transform: numberAttribute })\n public set headingLevel(value: SkyRadioGroupHeadingLevel | undefined) {\n this.#_headingLevel = value && !isNaN(value) ? value : undefined;\n this.#updateStackedClasses();\n }\n\n public get headingLevel(): SkyRadioGroupHeadingLevel | undefined {\n return this.#_headingLevel;\n }\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 4\n */\n @Input({ transform: numberAttribute4 })\n public set headingStyle(value: SkyRadioGroupHeadingStyle) {\n this.headingClass = `sky-font-heading-${value}`;\n }\n\n /**\n * The name for the collection of radio buttons that the component groups together.\n * This property overwrites the deprecated `name` property on individual `sky-radio` elements,\n * and it is required unless the `name` property is set on individual `sky-radio` elements.\n * @required\n */\n @Input()\n public set name(value: string | undefined) {\n if (value) {\n this.#_name = value;\n } else {\n this.#_name = this.#defaultName;\n }\n this.#updateRadioButtonNames();\n }\n public get name(): string {\n return this.#_name;\n }\n\n /**\n * Whether the input is required for form validation.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input element so that forms display an invalid state until the input element\n * is complete.\n * For more information about the `aria-required` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-required).\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * Whether the radio button group is stacked on another form component. When specified,\n * the appropriate vertical spacing is automatically added to the radio button group.\n */\n @Input({ transform: booleanAttribute })\n public set stacked(value: boolean) {\n this.#_stacked = value;\n this.#updateStackedClasses();\n }\n\n public get stacked(): boolean {\n return this.#_stacked;\n }\n\n /**\n * The value of the radio button to select by default when the group loads.\n * The value corresponds to the `value` property of an individual `sky-radio` element within the\n * group.\n */\n // TODO: Look into more strongly typing in a breaking change\n @Input()\n public set value(value: any) {\n const isNewValue = value !== this.#controlValue;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this.#controlValue = value;\n this.#onChange(value);\n this.#updateCheckedRadioFromValue();\n }\n }\n\n /**\n * The index for all the radio buttons in the group. If the index is not defined,\n * the indices for individual radio buttons are set to their positions on load.\n * This property supports accessibility by placing focus on the currently selected radio\n * button. If no radio button is selected, it places focus on the first or last button\n * depending on how users navigate to the radio button group.\n */\n @Input()\n public set tabIndex(value: number | undefined) {\n if (this.#_tabIndex !== value) {\n this.#_tabIndex = value;\n this.#updateRadioButtonTabIndexes();\n }\n }\n public get tabIndex(): number | undefined {\n return this.#_tabIndex;\n }\n\n /**\n * The text to display as the radio group's heading.\n */\n @Input()\n public headingText: string | undefined;\n\n /**\n * Indicates whether to hide the `headingText`.\n */\n @Input({ transform: booleanAttribute })\n public headingHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * The content of the help popover. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to radio group. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the radio group heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Our radio components are usually implemented using an unordered list. This is an\n * accessibility violation because the unordered list has an implicit role which\n * interrupts the 'radiogroup' and 'radio' relationship. To correct this, we can set the\n * radio group's 'aria-owns' attribute to a space-separated list of radio IDs.\n * For more information about the `aria-owns` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-owns), and for more information about the `radio` role, see [its definition](https://www.w3.org/TR/wai-aria/#radio).\n */\n public ariaOwns: string | undefined;\n\n @ContentChildren(SkyRadioComponent, { descendants: true })\n public radios: QueryList<SkyRadioComponent> | undefined;\n\n @HostBinding('class.sky-form-field-stacked')\n public stackedLg = false;\n\n @HostBinding('class.sky-field-group-stacked')\n public stackedXL = false;\n\n protected get isRequired(): boolean {\n return (\n this.required ||\n (this.ngControl?.control?.hasValidator(Validators.required) ?? false)\n );\n }\n\n protected headingClass = 'sky-font-heading-4';\n\n #controlValue: any;\n\n #defaultName = `sky-radio-group-${nextUniqueId++}`;\n\n #ngUnsubscribe = new Subject<void>();\n\n #_disabled = false;\n\n #_name = '';\n\n #_tabIndex: number | undefined;\n\n #_ariaLabel: string | undefined;\n\n #_ariaLabelledBy: string | undefined;\n\n #_headingLevel: SkyRadioGroupHeadingLevel | undefined;\n\n #_stacked = false;\n\n #changeDetector: ChangeDetectorRef;\n #radioGroupIdSvc: SkyRadioGroupIdService;\n\n readonly #logger = inject(SkyLogService);\n readonly #idService = inject(SkyIdService);\n\n protected errorId = this.#idService.generateId();\n protected ngControl: NgControl | undefined;\n\n constructor(\n changeDetector: ChangeDetectorRef,\n radioGroupIdSvc: SkyRadioGroupIdService,\n @Self() @Optional() ngControl: NgControl,\n ) {\n if (ngControl) {\n ngControl.valueAccessor = this;\n }\n this.#changeDetector = changeDetector;\n this.#radioGroupIdSvc = radioGroupIdSvc;\n this.ngControl = ngControl;\n this.name = this.#defaultName;\n\n this.#radioGroupIdSvc.radioIds\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((ids) => {\n this.ariaOwns = ids.join(' ') || undefined;\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n // Let child radio components render before updating.\n setTimeout(() => {\n this.#resetRadioButtons();\n });\n\n // Watch for radio selections.\n this.watchForSelections();\n\n /* istanbul ignore else */\n if (this.radios) {\n this.radios.changes.pipe(takeUntil(this.#ngUnsubscribe)).subscribe(() => {\n // Wait for child radio components to finish any rendering updates.\n setTimeout(() => {\n this.#resetRadioButtons();\n });\n\n // Subscribe to the new radio buttons\n this.watchForSelections();\n });\n }\n }\n\n public watchForSelections(): void {\n /* istanbul ignore else */\n if (this.radios) {\n this.radios.forEach((radio) => {\n radio.change\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((change: SkyRadioChange) => {\n this.#onTouched();\n this.value = change.value;\n });\n radio.blur.pipe(takeUntil(this.#ngUnsubscribe)).subscribe(() => {\n this.#onTouched();\n this.#changeDetector.markForCheck();\n });\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public writeValue(value: unknown): void {\n const isNewValue = value !== this.#controlValue;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this.#controlValue = value;\n this.#updateCheckedRadioFromValue();\n }\n }\n\n /**\n * @internal\n * Whether to disable the control. Implemented as a part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.#onTouched = fn;\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onChange: (value: any) => void = () => {};\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouched: () => any = () => {};\n\n #updateRadioButtonDisabled(): void {\n if (this.radios) {\n this.radios.forEach((radio) =>\n radio.setGroupDisabledState(this.disabled),\n );\n }\n }\n\n #updateRadioButtonNames(): void {\n if (this.radios) {\n this.radios.forEach((radio) => {\n radio.name = this.name;\n });\n }\n }\n\n #updateRadioButtonTabIndexes(): void {\n if (this.radios) {\n this.radios.forEach((radio) => {\n radio.groupTabIndex = this.tabIndex;\n });\n }\n }\n\n #updateCheckedRadioFromValue(): void {\n if (!this.radios) {\n return;\n }\n\n this.radios.forEach((radio) => {\n radio.checked = this.#controlValue === radio.value;\n });\n }\n\n #resetRadioButtons(): void {\n this.#updateCheckedRadioFromValue();\n this.#updateRadioButtonNames();\n this.#updateRadioButtonTabIndexes();\n this.#updateRadioButtonDisabled();\n }\n\n #updateStackedClasses(): void {\n this.stackedLg = !this.headingLevel && this.stacked;\n this.stackedXL = !!this.headingLevel && this.stacked;\n }\n}\n","<fieldset\n class=\"sky-radio-group\"\n role=\"radiogroup\"\n [attr.aria-label]=\"headingText ? undefined : ariaLabel\"\n [attr.aria-labelledby]=\"headingText ? undefined : ariaLabelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.aria-required]=\"isRequired ? true : null\"\n [attr.required]=\"isRequired ? '' : null\"\n [attr.aria-invalid]=\"!!ngControl?.errors\"\n [attr.aria-errormessage]=\"\n headingText && ngControl?.errors ? errorId : undefined\n \"\n>\n @if (headingText) {\n <legend\n class=\"sky-radio-group-legend\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden\n }\"\n >\n <span\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >\n @switch (headingLevel) {\n @case (3) {\n <h3 [class]=\"headingClass\">{{ headingText }}</h3>\n }\n @case (4) {\n <h4 [class]=\"headingClass\">{{ headingText }}</h4>\n }\n @case (5) {\n <h5 [class]=\"headingClass\">{{ headingText }}</h5>\n }\n @default {\n <span [class]=\"'sky-radio-group-heading-text ' + headingClass\">{{\n headingText\n }}</span>\n }\n }\n </span>\n @if (required) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_form_group_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]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n }\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-radio-group-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 <div class=\"sky-radio-group-content\">\n <ng-content />\n </div>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors\"\n [labelText]=\"headingText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n","import { Component, HostListener, inject } from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\n/**\n * Specifies a label for the radio button. To display a help button beside the label, include a help button element,\n * such as `sky-help-inline`, in the `sky-radio-label` element and a `sky-control-help` CSS class on that help button\n * element.\n * @deprecated Use `labelText` input on `sky-radio-component` instead.\n */\n@Component({\n selector: 'sky-radio-label',\n templateUrl: './radio-label.component.html',\n standalone: false,\n})\nexport class SkyRadioLabelComponent {\n // When clicking on a checkbox label, Angular registers two click events.\n // This handler ignores all events except for those that deal\n // with the checkbox input explicitly.\n @HostListener('click', ['$event'])\n public onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n constructor() {\n inject(SkyLogService).deprecated('SkyToggleSwitchLabelComponent', {\n deprecationMajorVersion: 10,\n replacementRecommendation:\n 'To add a label to radio button, use the `labelText` input on the radio button component instead.',\n });\n }\n}\n","<span class=\"sky-switch-label\"\n ><span skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, SkyTrimModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyFormErrorModule } from '../form-error/form-error.module';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyRadioGroupComponent } from './radio-group.component';\nimport { SkyRadioLabelComponent } from './radio-label.component';\nimport { SkyRadioComponent } from './radio.component';\n\n@NgModule({\n declarations: [\n SkyRadioComponent,\n SkyRadioGroupComponent,\n SkyRadioLabelComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyFormErrorModule,\n SkyFormErrorsModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyFormsResourcesModule,\n SkyTrimModule,\n SkyThemeModule,\n ],\n exports: [\n SkyFormErrorModule,\n SkyRadioComponent,\n SkyRadioGroupComponent,\n SkyRadioLabelComponent,\n ],\n})\nexport class SkyRadioModule {}\n","import { Directive, Input, booleanAttribute, inject } from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\n\n/**\n * A host directive used to capture the \"required\" state of the host's form control.\n * @internal\n */\n@Directive({})\nexport class SkyRequiredStateDirective {\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * Whether the `required` attribute is set to `true`, or the control includes\n * the `Validators.required` validator.\n */\n public isRequired(): boolean {\n return (\n this.required ||\n !!this.#ngControl?.control?.hasValidator(Validators.required)\n );\n }\n\n readonly #ngControl = inject(NgControl, { optional: true, self: true });\n}\n","import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyMediaBreakpoints } from '@skyux/core';\n\nconst RESPONSIVE_CLASS_XS = 'sky-selection-box-container-xs';\nconst RESPONSIVE_CLASS_SM = 'sky-selection-box-container-sm';\nconst RESPONSIVE_CLASS_MD = 'sky-selection-box-container-md';\nconst RESPONSIVE_CLASS_LG = 'sky-selection-box-container-lg';\n\nconst BREAKPOINT_XS_MAX_PIXELS = 767;\nconst BREAKPOINT_SM_MIN_PIXELS = 768;\nconst BREAKPOINT_SM_MAX_PIXELS = 991;\nconst BREAKPOINT_MD_MIN_PIXELS = 992;\nconst BREAKPOINT_MD_MAX_PIXELS = 1439;\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkySelectionBoxAdapterService {\n #coreAdapterService: SkyCoreAdapterService;\n #renderer: Renderer2;\n\n constructor(\n coreAdapterService: SkyCoreAdapterService,\n rendererFactory: RendererFactory2,\n ) {\n this.#coreAdapterService = coreAdapterService;\n this.#renderer = rendererFactory.createRenderer(undefined, null);\n }\n\n /**\n * Sets focus on the specified element.\n */\n public focus(el: ElementRef): void {\n el.nativeElement.focus();\n }\n\n /**\n * Returns a child element with the `.sky-switch` class.\n * Useful for getting SKY UX-themed radio buttons or checkboxes.\n */\n public getControl(el: ElementRef): HTMLElement {\n return el.nativeElement.querySelector('.sky-switch');\n }\n\n /**\n * Returns a breakpoint based on the width.\n * @param width Width of the element in pixels.\n */\n public getBreakpointForWidth(width: number | undefined): SkyMediaBreakpoints {\n if (!width) {\n return SkyMediaBreakpoints.lg;\n }\n\n if (width <= BREAKPOINT_XS_MAX_PIXELS) {\n return SkyMediaBreakpoints.xs;\n } else if (\n width >= BREAKPOINT_SM_MIN_PIXELS &&\n width <= BREAKPOINT_SM_MAX_PIXELS\n ) {\n return SkyMediaBreakpoints.sm;\n } else if (\n width >= BREAKPOINT_MD_MIN_PIXELS &&\n width <= BREAKPOINT_MD_MAX_PIXELS\n ) {\n return SkyMediaBreakpoints.md;\n } else {\n return SkyMediaBreakpoints.lg;\n }\n }\n\n /**\n * Returns the width of the `parentNode` of the provided `element`.\n */\n public getParentWidth(element: ElementRef): number | undefined {\n return (\n element.nativeElement as HTMLElement | undefined\n )?.parentElement?.getBoundingClientRect()?.width;\n }\n\n /**\n * Returns `true` if the `childEl` is a descendant of the `parentEl`.\n */\n public isDescendant(parentEl: ElementRef, childEl: HTMLElement): boolean {\n return parentEl.nativeElement.contains(childEl);\n }\n\n /**\n * Sets the `tabIndex` of all focusable children of the `element` to the provided `tabIndex`.\n */\n public setChildrenTabIndex(element: ElementRef, tabIndex: number): void {\n const el = element.nativeElement;\n const focusableEls = this.#coreAdapterService.getFocusableChildren(el, {\n ignoreVisibility: true,\n });\n let index = focusableEls.length;\n while (index--) {\n focusableEls[index].tabIndex = tabIndex;\n }\n }\n\n /**\n * Adds a responsive CSS class on the provided element based on its current width.\n */\n public setResponsiveClass(\n element: ElementRef,\n breakpoint: SkyMediaBreakpoints,\n ): void {\n const nativeEl: HTMLElement = element.nativeElement;\n\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_XS);\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_SM);\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_MD);\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_LG);\n\n let newClass: string;\n\n switch (breakpoint) {\n case SkyMediaBreakpoints.xs: {\n newClass = RESPONSIVE_CLASS_XS;\n break;\n }\n case SkyMediaBreakpoints.sm: {\n newClass = RESPONSIVE_CLASS_SM;\n break;\n }\n case SkyMediaBreakpoints.md: {\n newClass = RESPONSIVE_CLASS_MD;\n break;\n }\n case SkyMediaBreakpoints.lg: {\n newClass = RESPONSIVE_CLASS_LG;\n break;\n }\n }\n\n this.#renderer.addClass(nativeEl, newClass);\n }\n\n /**\n * Sets the `tabIndex` of the `element` to the provided `tabIndex`.\n */\n public setTabIndex(element: ElementRef, tabIndex: number): void {\n const el = element.nativeElement;\n\n el.tabIndex = tabIndex;\n }\n}\n","import { Component } from '@angular/core';\n\n/**\n * Specifies the description to display in a selection box.\n */\n@Component({\n selector: 'sky-selection-box-description',\n templateUrl: './selection-box-description.component.html',\n standalone: false,\n})\nexport class SkySelectionBoxDescriptionComponent {}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyCheckboxComponent } from '../checkbox/checkbox.component';\nimport { SkyRadioComponent } from '../radio/radio.component';\n\nimport { SkySelectionBoxAdapterService } from './selection-box-adapter.service';\n\n/**\n * Creates a button to present users with a choice or question before proceeding with a one-time process.\n */\n@Component({\n selector: 'sky-selection-box',\n styleUrls: ['./selection-box.component.scss'],\n templateUrl: './selection-box.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkySelectionBoxComponent implements OnDestroy {\n /**\n * The radio button or checkbox to display in the selection box.\n * @required\n */\n @Input()\n public set control(\n value: SkyCheckboxComponent | SkyRadioComponent | undefined,\n ) {\n this.#_control = value;\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#ngUnsubscribe = new Subject<void>();\n if (value) {\n this.#updateCheckedOnControlChange();\n this.#updateDisabledState();\n }\n }\n\n public get control(): SkyCheckboxComponent | SkyRadioComponent | undefined {\n return this.#_control;\n }\n\n public set checked(value: boolean) {\n this.#_checked = value;\n this.#changeDetector.markForCheck();\n }\n\n public get checked(): boolean {\n return this.#_checked;\n }\n\n public set disabled(value: boolean) {\n if (this.selectionBoxEl) {\n this.#selectionBoxAdapterService.setTabIndex(\n this.selectionBoxEl,\n value ? -1 : 0,\n );\n }\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n @ViewChild('control', {\n read: ElementRef,\n static: false,\n })\n public controlEl: ElementRef | undefined;\n\n @ViewChild('selectionBox', {\n read: ElementRef,\n static: false,\n })\n public set selectionBoxEl(value: ElementRef | undefined) {\n this.#_selectionBoxEl = value;\n if (value) {\n this.#selectionBoxAdapterService.setTabIndex(\n value,\n this.disabled ? -1 : 0,\n );\n\n // Wait for child elements to render before overriding tabIndex values.\n // TODO: This logic is brittle since the checkbox/radio can set its own tab index\n // value at any time. We need a way to enforce the tab index for the entire lifespan of the component.\n setTimeout(() => {\n this.#selectionBoxAdapterService.setChildrenTabIndex(value, -1);\n });\n }\n }\n\n public get selectionBoxEl(): ElementRef | undefined {\n return this.#_selectionBoxEl;\n }\n\n #ngUnsubscribe = new Subject<void>();\n\n #_checked = false;\n\n #_control: SkyCheckboxComponent | SkyRadioComponent | undefined;\n\n #_disabled = false;\n\n #_selectionBoxEl: ElementRef | undefined;\n\n #changeDetector: ChangeDetectorRef;\n #selectionBoxAdapterService: SkySelectionBoxAdapterService;\n\n constructor(\n changeDetector: ChangeDetectorRef,\n selectionBoxAdapterService: SkySelectionBoxAdapterService,\n ) {\n this.#changeDetector = changeDetector;\n this.#selectionBoxAdapterService = selectionBoxAdapterService;\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public onKeydown(event: KeyboardEvent): void {\n /* istanbul ignore else */\n if (event.key === ' ') {\n this.#selectControl();\n event.preventDefault();\n }\n }\n\n #selectControl(): void {\n if (this.controlEl) {\n this.#selectionBoxAdapterService.getControl(this.controlEl).click();\n }\n\n if (this.selectionBoxEl) {\n this.#selectionBoxAdapterService.focus(this.selectionBoxEl);\n }\n }\n\n #updateCheckedOnControlChange(): void {\n /* istanbul ignore else */\n if (this.control) {\n this.control.checkedChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((value) => {\n this.checked = value;\n });\n }\n }\n\n #updateDisabledState(): void {\n /* istanbul ignore else */\n if (this.control) {\n this.control.disabledChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((value) => {\n this.disabled = value;\n });\n }\n }\n}\n","<label\n #selectionBox\n class=\"sky-selection-box sky-rounded-corners sky-btn sky-btn-default\"\n [attr.disabled]=\"disabled ? true : null\"\n [ngClass]=\"{\n 'sky-selection-box-selected': checked,\n 'sky-selection-box-disabled': disabled\n }\"\n (keydown)=\"onKeydown($event)\"\n>\n <div\n #icon\n class=\"sky-selection-box-icon\"\n [ngClass]=\"{\n 'sky-selection-box-icon-hidden': !icon.innerHTML.trim()\n }\"\n >\n <ng-content select=\"sky-icon\" />\n </div>\n\n <div class=\"sky-selection-box-content\">\n <div class=\"sky-selection-box-header sky-font-display-2\">\n <ng-content select=\"sky-selection-box-header\" />\n </div>\n <div class=\"sky-selection-box-description sky-font-deemphasized\">\n <ng-content select=\"sky-selection-box-description\" />\n </div>\n </div>\n\n <div #control class=\"sky-selection-box-control\">\n <ng-content select=\"sky-radio\" />\n <ng-content select=\"sky-checkbox\" />\n </div>\n</label>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyMutationObserverService } from '@skyux/core';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkySelectionBoxAdapterService } from './selection-box-adapter.service';\nimport { SkySelectionBoxComponent } from './selection-box.component';\nimport { SkySelectionBoxGridAlignItemsType } from './types/selection-box-grid-align-items-type';\n\nconst SKY_SELECTION_BOX_CLASS_NAME = '.sky-selection-box';\n\n/**\n * Creates a grid layout for an array of selection boxes.\n */\n@Component({\n selector: 'sky-selection-box-grid',\n templateUrl: './selection-box-grid.component.html',\n styleUrls: ['./selection-box-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkySelectionBoxGridComponent implements OnDestroy, OnInit {\n /**\n * @internal\n * How to display the selection boxes in the grid.\n * @default 'center'\n */\n @Input()\n public set alignItems(value: SkySelectionBoxGridAlignItemsType | undefined) {\n if (value) {\n this.#_alignItems = value;\n } else {\n this.#_alignItems = 'center';\n }\n }\n\n public get alignItems(): SkySelectionBoxGridAlignItemsType {\n return this.#_alignItems;\n }\n\n @ContentChildren(SkySelectionBoxComponent, {\n read: SkySelectionBoxComponent,\n })\n public selectionBoxes: QueryList<SkySelectionBoxComponent> | undefined;\n\n @ViewChild('container', {\n read: ElementRef,\n static: true,\n })\n public set containerElementRef(value: ElementRef | undefined) {\n this.#_containerElementRef = value;\n this.#destroyMutationObserver();\n if (value) {\n this.#updateBreakpointClass();\n this.#initMutationObserver();\n }\n }\n\n public get containerElementRef(): ElementRef | undefined {\n return this.#_containerElementRef;\n }\n\n #mutationObserver: MutationObserver | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #_alignItems: SkySelectionBoxGridAlignItemsType = 'center';\n\n #_containerElementRef: ElementRef | undefined;\n\n #coreAdapterService: SkyCoreAdapterService;\n #selectionBoxAdapter: SkySelectionBoxAdapterService;\n #hostElRef: ElementRef;\n #mutationObserverSvc: SkyMutationObserverService;\n #ngZone: NgZone;\n #themeSvc: SkyThemeService | undefined;\n\n constructor(\n coreAdapterService: SkyCoreAdapterService,\n selectionBoxAdapter: SkySelectionBoxAdapterService,\n hostElRef: ElementRef,\n mutationObserverSvc: SkyMutationObserverService,\n ngZone: NgZone,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#coreAdapterService = coreAdapterService;\n this.#selectionBoxAdapter = selectionBoxAdapter;\n this.#hostElRef = hostElRef;\n this.#mutationObserverSvc = mutationObserverSvc;\n this.#ngZone = ngZone;\n this.#themeSvc = themeSvc;\n }\n\n public ngOnInit(): void {\n /* istanbul ignore else */\n if (this.#themeSvc) {\n this.#themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateBreakpointClass();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n\n this.#destroyMutationObserver();\n }\n\n @HostListener('window:resize')\n public onWindowResize(): void {\n this.#updateBreakpointClass();\n }\n\n #initMutationObserver(): void {\n /* istanbul ignore else */\n if (!this.#mutationObserver && this.containerElementRef) {\n const el = this.containerElementRef.nativeElement;\n\n // MutationObserver is patched by Zone.js and therefore becomes part of the\n // Angular change detection cycle, but this can lead to infinite loops in some\n // scenarios. This will keep MutationObserver from triggering change detection.\n this.#ngZone.runOutsideAngular(() => {\n this.#mutationObserver = this.#mutationObserverSvc.create(() => {\n this.#updateChildrenHeights();\n });\n\n this.#mutationObserver.observe(el, {\n characterData: true,\n subtree: true,\n });\n });\n }\n }\n\n #destroyMutationObserver(): void {\n /* istanbul ignore else */\n if (this.#mutationObserver) {\n this.#mutationObserver.disconnect();\n this.#mutationObserver = undefined;\n }\n }\n\n #updateBreakpointClass(): void {\n const parentWidth = this.#selectionBoxAdapter.getParentWidth(\n this.#hostElRef,\n );\n\n if (this.containerElementRef) {\n this.#selectionBoxAdapter.setResponsiveClass(\n this.containerElementRef,\n this.#selectionBoxAdapter.getBreakpointForWidth(parentWidth),\n );\n }\n this.#updateChildrenHeights();\n }\n\n #updateChildrenHeights(): void {\n if (this.containerElementRef) {\n this.#coreAdapterService.resetHeight(\n this.containerElementRef,\n SKY_SELECTION_BOX_CLASS_NAME,\n );\n this.#coreAdapterService.syncMaxHeight(\n this.containerElementRef,\n SKY_SELECTION_BOX_CLASS_NAME,\n );\n }\n }\n}\n","<div\n #container\n class=\"sky-selection-box-grid\"\n [ngClass]=\"'sky-selection-box-grid-align-' + alignItems\"\n>\n <ng-content select=\"sky-selection-box\" />\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * Specifies the header to display in a selection box.\n */\n@Component({\n selector: 'sky-selection-box-header',\n templateUrl: './selection-box-header.component.html',\n standalone: false,\n})\nexport class SkySelectionBoxHeaderComponent {}\n","<ng-content />\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkySelectionBoxAdapterService } from './selection-box-adapter.service';\nimport { SkySelectionBoxDescriptionComponent } from './selection-box-description.component';\nimport { SkySelectionBoxGridComponent } from './selection-box-grid.component';\nimport { SkySelectionBoxHeaderComponent } from './selection-box-header.component';\nimport { SkySelectionBoxComponent } from './selection-box.component';\n\n@NgModule({\n declarations: [\n SkySelectionBoxGridComponent,\n SkySelectionBoxComponent,\n SkySelectionBoxDescriptionComponent,\n SkySelectionBoxHeaderComponent,\n ],\n imports: [CommonModule, SkyThemeModule],\n exports: [\n SkySelectionBoxGridComponent,\n SkySelectionBoxComponent,\n SkySelectionBoxDescriptionComponent,\n SkySelectionBoxHeaderComponent,\n ],\n providers: [SkySelectionBoxAdapterService],\n})\nexport class SkySelectionBoxModule {}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\n/**\n * Specifies the label to display beside the toggle switch. To display a help button beside the label, include a help\n * button element, such as `sky-help-inline`, in the `sky-toggle-switch` element and a `sky-control-help` CSS class on\n * that help button element.\n * @deprecated Use the `labelText` input on the toggle switch component instead.\n */\n@Component({\n selector: 'sky-toggle-switch-label',\n templateUrl: './toggle-switch-label.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyToggleSwitchLabelComponent {\n constructor() {\n inject(SkyLogService).deprecated('SkyToggleSwitchLabelComponent', {\n deprecationMajorVersion: 9,\n replacementRecommendation:\n 'To add a label to toggle switch, use the `labelText` input on the toggle switch component instead.',\n });\n }\n}\n","<span skyTrim><ng-content /></span>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n booleanAttribute,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyToggleSwitchLabelComponent } from './toggle-switch-label.component';\nimport { SkyToggleSwitchChange } from './types/toggle-switch-change';\n\nconst SKY_TOGGLE_SWITCH_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyToggleSwitchComponent),\n multi: true,\n};\nconst SKY_TOGGLE_SWITCH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyToggleSwitchComponent),\n multi: true,\n};\n\n@Component({\n selector: 'sky-toggle-switch',\n templateUrl: './toggle-switch.component.html',\n styleUrls: ['./toggle-switch.component.scss'],\n providers: [\n SKY_TOGGLE_SWITCH_CONTROL_VALUE_ACCESSOR,\n SKY_TOGGLE_SWITCH_VALIDATOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyToggleSwitchComponent\n implements AfterContentInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * The ARIA label for the toggle switch. This sets the `aria-label`\n * attribute to provide a text equivalent for screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * Use a context-sensitive label, such as \"Activate annual fundraiser\" for a toggle switch that activates and deactivates an annual fundraiser. Context is especially important if multiple toggle switches are in close proximity.\n * When the `sky-toggle-switch-label` component displays a visible label, this property is only necessary if that label requires extra context.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use the `labelText` input instead.\n */\n @Input()\n public set ariaLabel(value: string | undefined) {\n this.#_ariaLabel = value;\n\n if (value !== undefined) {\n this.#logSvc.deprecated('SkyToggleSwitchComponent.ariaLabel', {\n deprecationMajorVersion: 9,\n replacementRecommendation:\n 'To add an ARIA label to the toggle switch, use the `labelText` input instead',\n });\n }\n }\n\n public get ariaLabel(): string | undefined {\n return this.#_ariaLabel;\n }\n\n /**\n * Whether the toggle switch is selected.\n * @default false\n */\n @Input()\n public set checked(value: boolean | undefined) {\n const checked = !!value;\n if (checked !== this.#_checked) {\n this.#_checked = checked;\n this.#onChange(checked);\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.#isFirstChange && this.#control) {\n this.#control.markAsPristine();\n this.#isFirstChange = false;\n }\n }\n }\n\n public get checked(): boolean {\n return this.#_checked;\n }\n\n /**\n * Whether to disable the toggle switch on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n */\n @Input()\n public disabled: boolean | undefined = false;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the toggle switch. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The tab index for the toggle switch. If not defined, the index is set to the position\n * of the toggle switch on load.\n */\n @Input()\n public tabIndex: number | undefined = 0;\n\n /**\n * The text to display as the toggle switch's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether to hide `labelText` from view.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the toggle switch label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Fires when the checked state of a toggle switch changes.\n */\n @Output()\n public toggleChange = new EventEmitter<SkyToggleSwitchChange>();\n\n public hasLabelComponent = false;\n public labelId: string;\n\n public enableIndicatorAnimation = false;\n\n @ContentChildren(SkyToggleSwitchLabelComponent)\n public labelComponents: QueryList<SkyToggleSwitchLabelComponent> | undefined;\n\n #control: AbstractControl | undefined;\n #isFirstChange = true;\n readonly #logSvc = inject(SkyLogService);\n #ngUnsubscribe = new Subject<void>();\n\n #_ariaLabel: string | undefined;\n #_checked = false;\n\n #changeDetector: ChangeDetectorRef;\n\n constructor(changeDetector: ChangeDetectorRef, idService: SkyIdService) {\n this.#changeDetector = changeDetector;\n this.labelId = idService.generateId();\n }\n\n public ngAfterContentInit(): void {\n /* istanbul ignore else */\n if (this.labelComponents) {\n this.hasLabelComponent = this.labelComponents.length > 0;\n\n this.labelComponents.changes\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((newLabelComponents) => {\n this.hasLabelComponent = newLabelComponents.length > 0;\n // Allow the template to reload any ARIA attributes that are relying on the\n // label component existing in the DOM.\n this.#changeDetector.markForCheck();\n });\n }\n\n // Wait for the view to render before applying animation effects.\n // (Some browsers, such as Firefox, apply the animation too early.)\n setTimeout(() => {\n this.enableIndicatorAnimation = true;\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public writeValue(value: boolean): void {\n this.checked = !!value;\n this.#changeDetector.markForCheck();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n\n return null;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.#changeDetector.markForCheck();\n }\n\n public onButtonClick(event: any): void {\n event.stopPropagation();\n this.#toggleChecked();\n this.#emitChangeEvent();\n }\n\n public onButtonBlur(): void {\n this.#onTouched();\n }\n\n /* istanbul ignore next */\n #onTouched: () => any = () => {};\n /* istanbul ignore next */\n #onChange: (value: any) => void = () => {};\n\n #emitChangeEvent(): void {\n this.#onChange(this.#_checked);\n this.toggleChange.emit({\n checked: this.#_checked,\n });\n }\n\n #toggleChecked(): void {\n this.checked = !this.checked;\n }\n}\n","<span\n class=\"sky-toggle-switch\"\n [ngClass]=\"{\n 'sky-toggle-switch-with-label': hasLabelComponent || labelText\n }\"\n>\n <button\n #toggle=\"skyId\"\n class=\"sky-toggle-switch-button\"\n role=\"switch\"\n type=\"button\"\n skyId\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"labelText || ariaLabel || null\"\n [attr.aria-labelledby]=\"\n !ariaLabel && (hasLabelComponent || labelText) ? labelId : null\n \"\n [disabled]=\"disabled\"\n [ngClass]=\"{\n 'sky-toggle-switch-checked': checked,\n 'sky-toggle-switch-disabled': disabled\n }\"\n [tabIndex]=\"tabIndex\"\n (blur)=\"onButtonBlur()\"\n (click)=\"onButtonClick($event)\"\n >\n <div aria-hidden=\"true\" class=\"sky-toggle-switch-switch\">\n <i\n class=\"sky-toggle-switch-indicator\"\n [ngClass]=\"{\n 'sky-toggle-switch-transition': enableIndicatorAnimation\n }\"\n >&nbsp;</i\n >\n </div>\n </button>\n <span>\n @if (hasLabelComponent || labelText) {\n <label\n class=\"sky-toggle-switch-label\"\n [for]=\"toggle.id\"\n [attr.id]=\"labelId\"\n >\n @if (labelText) {\n @if (!labelHidden) {\n <span class=\"sky-toggle-switch-label-text\">{{ labelText }}</span>\n }\n } @else {\n <ng-content select=\"sky-toggle-switch-label\" />\n }\n </label>\n }\n <span class=\"sky-control-help-container\">\n @if (labelText && (helpPopoverContent || helpKey)) {\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n }\n <ng-content select=\".sky-control-help\" />\n </span>\n </span>\n</span>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, SkyTrimModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\n\nimport { SkyToggleSwitchLabelComponent } from './toggle-switch-label.component';\nimport { SkyToggleSwitchComponent } from './toggle-switch.component';\n\n@NgModule({\n declarations: [SkyToggleSwitchLabelComponent, SkyToggleSwitchComponent],\n imports: [\n CommonModule,\n FormsModule,\n SkyHelpInlineModule,\n SkyIdModule,\n SkyTrimModule,\n ],\n exports: [SkyToggleSwitchLabelComponent, SkyToggleSwitchComponent],\n})\nexport class SkyToggleSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.SkyCharacterCounterScreenReaderPipe","i3","i1","numberAttribute4","i2","i3.SkyFormErrorsComponent","i5","i6","i7.SkyCheckboxLabelTextLabelComponent","i4","MAX_FILE_SIZE_DEFAULT","MIN_FILE_SIZE_DEFAULT","i1.SkyFileAttachmentService","i2.SkyFileItemService","i7","i8","i9","takeUntil","i2.SkyCharacterCounterIndicatorComponent","i7.SkyInputBoxHintTextPipe","i6.SkyInputBoxComponent","i7.SkyInputBoxControlDirective","i1.SkyFileItemService","i1.SkyRadioGroupIdService","i5.SkyFormErrorsComponent","i1.SkySelectionBoxAdapterService","i2.SkySelectionBoxAdapterService"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-forms.mjs","sources":["../../../../../libs/components/forms/src/lib/modules/shared/sky-forms-resources.module.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter-screen-reader.pipe.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter-indicator.component.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter-indicator.component.html","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter.directive.ts","../../../../../libs/components/forms/src/lib/modules/character-counter/character-counter.module.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors-enabled-token.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-error.component.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-error.module.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors.component.ts","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors.component.html","../../../../../libs/components/forms/src/lib/modules/form-error/form-errors.module.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-group.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-group.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label-text-label.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label-text-label.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox-label.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox.component.ts","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox.component.html","../../../../../libs/components/forms/src/lib/modules/checkbox/checkbox.module.ts","../../../../../libs/components/forms/src/lib/modules/field-group/field-group.component.ts","../../../../../libs/components/forms/src/lib/modules/field-group/field-group.component.html","../../../../../libs/components/forms/src/lib/modules/field-group/field-group.module.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment-label.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment-label.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/shared/file-size.pipe.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment-join-ids.pipe.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.service.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/shared/file-item.service.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachment/file-attachment.module.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-host.service.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-control.directive.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-hint-text.pipe.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box-adapter.service.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box.component.ts","../../../../../libs/components/forms/src/lib/modules/input-box/input-box.component.html","../../../../../libs/components/forms/src/lib/modules/input-box/input-box.module.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-drop.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-drop.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-item.component.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-item.component.html","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-drop/file-drop.module.ts","../../../../../libs/components/forms/src/lib/modules/file-attachment/file-attachments.module.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio-group-id.service.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio.component.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio.component.html","../../../../../libs/components/forms/src/lib/modules/radio/radio-group.component.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio-group.component.html","../../../../../libs/components/forms/src/lib/modules/radio/radio-label.component.ts","../../../../../libs/components/forms/src/lib/modules/radio/radio-label.component.html","../../../../../libs/components/forms/src/lib/modules/radio/radio.module.ts","../../../../../libs/components/forms/src/lib/modules/required-state/required-state.directive.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-adapter.service.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-description.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-description.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-grid.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-grid.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-header.component.ts","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box-header.component.html","../../../../../libs/components/forms/src/lib/modules/selection-box/selection-box.module.ts","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch-label.component.ts","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch-label.component.html","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch.component.ts","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch.component.html","../../../../../libs/components/forms/src/lib/modules/toggle-switch/toggle-switch.module.ts","../../../../../libs/components/forms/src/skyux-forms.ts"],"sourcesContent":["/* istanbul ignore file */\n\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-forms' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_character_count_message: { message: '{0} characters out of {1}' },\n skyux_character_count_over_limit: {\n message: 'You are over the character limit.',\n },\n skyux_form_error_character_count: {\n message: 'Limit {0} to {1} characters.',\n },\n skyux_form_error_date: { message: 'Select or enter a valid date.' },\n skyux_form_error_date_max: {\n message: 'Select or enter a date on or before {0}.',\n },\n skyux_form_error_date_min: {\n message: 'Select or enter a date on or after {0}.',\n },\n skyux_form_error_fuzzy_date_future_disabled: {\n message: 'Future dates are disabled. Select or enter a date in the past.',\n },\n skyux_form_error_fuzzy_date_invalid: {\n message: 'Select or enter a valid date.',\n },\n skyux_form_error_fuzzy_date_max_date: {\n message: 'Select or enter a date on or before {0}.',\n },\n skyux_form_error_fuzzy_date_min_date: {\n message: 'Select or enter a date on or after {0}.',\n },\n skyux_form_error_fuzzy_date_year_required: { message: 'Year is required.' },\n skyux_form_error_email: {\n message: 'Enter an email address with a valid format.',\n },\n skyux_form_error_maxlength: { message: 'Limit {0} to {1} characters.' },\n skyux_form_error_minlength: {\n message: '{0} must be at least {1} characters.',\n },\n skyux_form_error_phone: {\n message:\n 'Enter a phone number matching the format for the selected country.',\n },\n skyux_form_error_required: { message: '{0} is required.' },\n skyux_form_error_time: { message: 'Select or enter a valid time.' },\n skyux_form_error_url: { message: 'Enter a URL with a valid format.' },\n skyux_form_group_required: { message: 'Required' },\n skyux_file_attachment_button_label_choose_file: { message: 'Attach file' },\n skyux_file_attachment_button_label_choose_file_label: {\n message: 'Attach file for',\n },\n skyux_file_attachment_button_label_replace_file: {\n message: 'Replace file',\n },\n skyux_file_attachment_button_label_replace_file_label: {\n message: 'Replace file {0} for',\n },\n skyux_file_attachment_file_item_delete: { message: 'Delete {0}' },\n skyux_file_attachment_file_item_remove: { message: 'Remove file {0} for' },\n skyux_file_attachment_file_size_b_plural: { message: '{0} bytes' },\n skyux_file_attachment_file_size_b_singular: { message: '{0} byte' },\n skyux_file_attachment_file_size_gb: { message: '{0} GB' },\n skyux_file_attachment_file_size_kb: { message: '{0} KB' },\n skyux_file_attachment_file_size_mb: { message: '{0} MB' },\n skyux_file_attachment_file_upload_drag_file_here: {\n message: 'Drag a file here',\n },\n skyux_file_attachment_file_upload_drag_or_click: {\n message: 'Drag a file here or click to browse',\n },\n skyux_file_attachment_file_upload_drop_files_here: {\n message: 'Drop files here',\n },\n skyux_file_attachment_file_upload_file_added: { message: '{0} added.' },\n skyux_file_attachment_file_upload_file_replaced: {\n message: '{0} removed. {1} added.',\n },\n skyux_file_attachment_file_upload_file_removed: { message: '{0} removed.' },\n skyux_file_attachment_file_upload_image_preview_alt_text: {\n message: 'Image preview',\n },\n skyux_file_attachment_file_upload_invalid_file: {\n message: 'This file type is invalid',\n },\n skyux_file_attachment_file_upload_link_label: { message: 'Link to a file' },\n skyux_file_attachment_file_upload_or_click_to_browse: {\n message: 'or click to browse',\n },\n skyux_file_attachment_file_upload_link_done: { message: 'Done' },\n skyux_file_attachment_file_upload_link_added: {\n message: 'Link to {0} added.',\n },\n skyux_file_attachment_file_upload_link_removed: {\n message: 'Link to {0} removed.',\n },\n skyux_file_attachment_file_type_error_label_text: {\n message: 'Upload one of these file types: {0}.',\n },\n skyux_file_attachment_file_type_error_label_text_with_name: {\n message: '{0}: Upload one of these file types: {1}.',\n },\n skyux_file_attachment_max_file_size_error_label_text: {\n message: 'Upload a file under {0}.',\n },\n skyux_file_attachment_max_file_size_error_label_text_with_name: {\n message: '{0}: Upload a file under {1}.',\n },\n skyux_file_attachment_min_file_size_error_label_text: {\n message: 'Upload a file over {0}.',\n },\n skyux_file_attachment_min_file_size_error_label_text_with_name: {\n message: '{0}: Upload a file over {1}.',\n },\n skyux_file_attachment_label_no_file_chosen: { message: 'No file chosen.' },\n skyux_file_attachment_required: { message: 'Required' },\n skyux_input_box_help_inline_aria_label: {\n message: 'Show help content for {0}',\n },\n },\n 'FR-CA': {\n skyux_character_count_message: { message: '{0} caractères de {1}' },\n skyux_character_count_over_limit: {\n message: 'Vous avez dépassé la limite de caractères.',\n },\n skyux_form_error_character_count: {\n message: 'Limite {0} de {1} caractère(s).',\n },\n skyux_form_error_date: {\n message: 'Sélectionnez ou entrez une date valide.',\n },\n skyux_form_error_date_max: {\n message: 'Sélectionnez ou entrez une date le ou avant le {0}.',\n },\n skyux_form_error_date_min: {\n message: 'Sélectionnez ou entrez une date le ou après le {0}.',\n },\n skyux_form_error_fuzzy_date_future_disabled: {\n message:\n 'Les dates futures sont désactivées. Sélectionnez ou entrez une date dans le passé.',\n },\n skyux_form_error_fuzzy_date_invalid: {\n message: 'Sélectionnez ou entrez une date valide.',\n },\n skyux_form_error_fuzzy_date_max_date: {\n message: 'Sélectionnez ou entrez une date le ou avant le {0}.',\n },\n skyux_form_error_fuzzy_date_min_date: {\n message: 'Sélectionnez ou entrez une date le ou après le {0}.',\n },\n skyux_form_error_fuzzy_date_year_required: {\n message: 'L’année est requise.',\n },\n skyux_form_error_email: {\n message: 'Entrez une adresse courriel avec un format valide.',\n },\n skyux_form_error_maxlength: { message: 'Limite {0} de {1} caractère(s).' },\n skyux_form_error_minlength: {\n message: '{0} doit avoir au moins {1} caractère(s).',\n },\n skyux_form_error_phone: {\n message:\n 'Entrez un numéro de téléphone correspondant au format du pays sélectionné.',\n },\n skyux_form_error_required: { message: '{0} est requis.' },\n skyux_form_error_time: {\n message: 'Sélectionnez ou entrez une heure valide.',\n },\n skyux_form_error_url: { message: 'Entrez une URL avec un format valide.' },\n skyux_form_group_required: { message: 'Requis' },\n skyux_file_attachment_button_label_choose_file: {\n message: 'Joindre un fichier',\n },\n skyux_file_attachment_button_label_choose_file_label: {\n message: 'Joindre un fichier pour',\n },\n skyux_file_attachment_button_label_replace_file: {\n message: 'Remplacer le fichier',\n },\n skyux_file_attachment_button_label_replace_file_label: {\n message: 'Remplacer le fichier {0} pour',\n },\n skyux_file_attachment_file_item_delete: { message: 'Supprimer {0}' },\n skyux_file_attachment_file_item_remove: {\n message: 'Retirer le fichier {0} pour',\n },\n skyux_file_attachment_file_size_b_plural: { message: '{0} octets' },\n skyux_file_attachment_file_size_b_singular: { message: '{0} octet' },\n skyux_file_attachment_file_size_gb: { message: '{0} Go' },\n skyux_file_attachment_file_size_kb: { message: '{0} Ko' },\n skyux_file_attachment_file_size_mb: { message: '{0} Mo' },\n skyux_file_attachment_file_upload_drag_file_here: {\n message: 'Faites glisser un fichier ici',\n },\n skyux_file_attachment_file_upload_drag_or_click: {\n message: 'Faites glisser un fichier ici ou cliquez pour naviguer',\n },\n skyux_file_attachment_file_upload_drop_files_here: {\n message: 'Déplacez les fichiers ici',\n },\n skyux_file_attachment_file_upload_file_added: {\n message: '{0} a été ajouté.',\n },\n skyux_file_attachment_file_upload_file_replaced: {\n message: '{0} a été retiré. {1} a été ajouté.',\n },\n skyux_file_attachment_file_upload_file_removed: {\n message: '{0} a été retiré.',\n },\n skyux_file_attachment_file_upload_image_preview_alt_text: {\n message: 'Aperçu de l’image',\n },\n skyux_file_attachment_file_upload_invalid_file: {\n message: 'Ce type de fichier n’est pas valide',\n },\n skyux_file_attachment_file_upload_link_label: {\n message: 'Liens vers un fichier',\n },\n skyux_file_attachment_file_upload_or_click_to_browse: {\n message: 'ou cliquez pour naviguer',\n },\n skyux_file_attachment_file_upload_link_done: { message: 'Terminé' },\n skyux_file_attachment_file_upload_link_added: {\n message: 'Le lien vers {0} a été ajouté.',\n },\n skyux_file_attachment_file_upload_link_removed: {\n message: 'Le lien vers {0} a été retiré.',\n },\n skyux_file_attachment_file_type_error_label_text: {\n message: 'Téléversez l’un de ces types de fichier : {0}.',\n },\n skyux_file_attachment_file_type_error_label_text_with_name: {\n message: '{0} : Téléversez l’un de ces types de fichier : {1}.',\n },\n skyux_file_attachment_max_file_size_error_label_text: {\n message: 'Téléversez un fichier de moins de {0}.',\n },\n skyux_file_attachment_max_file_size_error_label_text_with_name: {\n message: '{0} : Téléversez un fichier de moins de {1}.',\n },\n skyux_file_attachment_min_file_size_error_label_text: {\n message: 'Téléversez un fichier de plus de {0}.',\n },\n skyux_file_attachment_min_file_size_error_label_text_with_name: {\n message: '{0} : Téléversez un fichier de plus de {1}.',\n },\n skyux_file_attachment_label_no_file_chosen: {\n message: 'Aucun fichier choisi.',\n },\n skyux_file_attachment_required: { message: 'Requis' },\n skyux_input_box_help_inline_aria_label: {\n message: 'Afficher le contenu de l’aide pour {0}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyFormsResourcesModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'skyCharacterCounterScreenReader',\n})\nexport class SkyCharacterCounterScreenReaderPipe implements PipeTransform {\n #previousAnnouncementPoint: number | undefined;\n\n public transform(\n characterCount: number | undefined,\n characterCountLimit: number | undefined,\n ): string {\n /* Safety check */\n /* istanbul ignore if */\n if (characterCount === undefined || characterCountLimit === undefined) {\n return '';\n }\n\n // We want to announce every 10 characters if we are within 50 of the limit or every 50 otherwise.\n const modulus =\n characterCountLimit - Math.floor(characterCount / 10) * 10 <= 50\n ? 10\n : 50;\n\n if (\n characterCount === characterCountLimit ||\n characterCount % modulus === 0 ||\n this.#previousAnnouncementPoint === undefined\n ) {\n this.#previousAnnouncementPoint = characterCount;\n } else {\n // We want the floor of the previous announcement and modulus in case the previous announcement wasn't an announcement point.\n const previousAnnouncementQuotient = Math.floor(\n this.#previousAnnouncementPoint / modulus,\n );\n // Lower limit of what announcement should have been made for the current count\n const currentAnnouncementQuotient = Math.floor(characterCount / modulus);\n // Next announcement that would be made if the current count increases\n const currentAnnouncementNextAnnouncement = Math.ceil(\n characterCount / modulus,\n );\n\n // Jump to the appropriate announcement point if the count jumps. For example, if going from 43 of 50 characters to 21 of 50 characters.\n if (\n currentAnnouncementQuotient !== previousAnnouncementQuotient &&\n currentAnnouncementNextAnnouncement !== previousAnnouncementQuotient\n ) {\n this.#previousAnnouncementPoint =\n Math.floor(characterCount / modulus) * modulus;\n }\n }\n\n return this.#previousAnnouncementPoint.toLocaleString();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: 'sky-character-counter-indicator',\n templateUrl: './character-counter-indicator.component.html',\n styleUrls: ['./character-counter-indicator.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyCharacterCounterIndicatorComponent {\n #_characterCountLimit = 0;\n #_characterCount = 0;\n\n #changeDetector: ChangeDetectorRef;\n\n constructor(changeDetector: ChangeDetectorRef) {\n this.#changeDetector = changeDetector;\n }\n\n public get characterCount(): number {\n return this.#_characterCount;\n }\n\n @Input()\n public set characterCount(count: number) {\n this.#_characterCount = count;\n this.#changeDetector.markForCheck();\n }\n\n public get characterCountLimit(): number {\n return this.#_characterCountLimit;\n }\n\n @Input()\n public set characterCountLimit(limit: number) {\n this.#_characterCountLimit = limit;\n this.#changeDetector.markForCheck();\n }\n}\n","<span\n class=\"sky-character-count-label sky-font-deemphasized\"\n [ngClass]=\"{ 'sky-error-label': characterCount > characterCountLimit }\"\n>\n {{ characterCount + '/' + characterCountLimit }}\n</span>\n<span aria-live=\"polite\" class=\"sky-screen-reader-only\">\n @if (characterCount > characterCountLimit) {\n <ng-container>{{\n 'skyux_character_count_over_limit' | skyLibResources\n }}</ng-container>\n } @else {\n @if (\n characterCount | skyCharacterCounterScreenReader: characterCountLimit;\n as screenReaderCount\n ) {\n <ng-container>{{\n 'skyux_character_count_message'\n | skyLibResources: screenReaderCount : characterCountLimit\n }}</ng-container>\n }\n }\n</span>\n","import { Directive, Input } from '@angular/core';\nimport {\n AbstractControl,\n NG_VALIDATORS,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { SkyCharacterCounterIndicatorComponent } from './character-counter-indicator.component';\n\n/**\n * Creates an input field that validates the number of characters. Place this directive on\n * an `input` or `textarea` element. If users enter more characters than allowed, then the\n * input field is invalid and the component displays an error indicator.\n * @required\n */\n@Directive({\n selector: '[skyCharacterCounter]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: SkyCharacterCounterInputDirective,\n multi: true,\n },\n ],\n standalone: false,\n})\nexport class SkyCharacterCounterInputDirective implements Validator {\n /**\n * The character count indicator component that displays the character count,\n * character limit, and over-the-limit indicator. Place this directive on an `input` or\n * `textarea` element.\n */\n @Input()\n public get skyCharacterCounterIndicator():\n | SkyCharacterCounterIndicatorComponent\n | undefined {\n return this.#_skyCharacterCounterIndicator;\n }\n public set skyCharacterCounterIndicator(\n value: SkyCharacterCounterIndicatorComponent | undefined,\n ) {\n this.#_skyCharacterCounterIndicator = value;\n this.#updateIndicatorLimit();\n }\n\n /**\n * The maximum number of characters allowed in the input field. Place this directive\n * on an `input` or `textarea` element. This property accepts `number` values.\n * @required\n */\n @Input()\n public set skyCharacterCounterLimit(value: number | undefined) {\n this.#skyCharacterCounterLimitOrDefault = value ?? 0;\n this.#updateIndicatorLimit();\n }\n\n #_skyCharacterCounterIndicator:\n | SkyCharacterCounterIndicatorComponent\n | undefined;\n\n #skyCharacterCounterLimitOrDefault = 0;\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n\n this.#updateIndicatorCount((value && value.length) || 0);\n\n if (!value) {\n return null;\n }\n\n const limit = this.#skyCharacterCounterLimitOrDefault;\n\n if (value.length > this.#skyCharacterCounterLimitOrDefault) {\n // This is needed to apply the appropriate error styles to the input.\n control.markAsTouched();\n\n return {\n skyCharacterCounter: {\n invalid: value,\n limit,\n },\n };\n }\n\n return null;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.#validatorChange = fn;\n }\n\n #updateIndicatorCount(count: number): void {\n if (this.skyCharacterCounterIndicator) {\n this.skyCharacterCounterIndicator.characterCount = count;\n }\n }\n\n #updateIndicatorLimit(): void {\n if (this.skyCharacterCounterIndicator) {\n this.skyCharacterCounterIndicator.characterCountLimit =\n this.#skyCharacterCounterLimitOrDefault;\n }\n\n this.#validatorChange();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #validatorChange = (): void => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyCharacterCounterIndicatorComponent } from './character-counter-indicator.component';\nimport { SkyCharacterCounterScreenReaderPipe } from './character-counter-screen-reader.pipe';\nimport { SkyCharacterCounterInputDirective } from './character-counter.directive';\n\n@NgModule({\n declarations: [\n SkyCharacterCounterInputDirective,\n SkyCharacterCounterIndicatorComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyCharacterCounterScreenReaderPipe,\n SkyFormsResourcesModule,\n ],\n exports: [\n SkyCharacterCounterInputDirective,\n SkyCharacterCounterIndicatorComponent,\n ],\n})\nexport class SkyCharacterCounterModule {}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * @internal\n */\nexport const SKY_FORM_ERRORS_ENABLED = new InjectionToken<boolean>(\n 'SKY_FORM_ERRORS_ENABLED',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { SkyStatusIndicatorModule } from '@skyux/indicators';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { SKY_FORM_ERRORS_ENABLED } from './form-errors-enabled-token';\n\n/**\n * Displays default and custom form field error messages for form field components.\n * Set `labelText` on the `SkyInputBoxComponent` to automatically display required,\n * maximum length, minimum length, date, email, phone number, time, and URL errors.\n * To display custom errors, include `sky-form-error` elements in the `SkyInputBoxComponent`.\n */\n@Component({\n selector: 'sky-form-error',\n imports: [SkyStatusIndicatorModule],\n template: `\n @if (formErrors) {\n <sky-status-indicator\n class=\"sky-form-error\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n >\n {{ errorText }}\n </sky-status-indicator>\n }\n `,\n styleUrl: './form-error.component.scss',\n hostDirectives: [SkyThemeComponentClassDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyFormErrorComponent {\n /**\n * The name of the error.\n * @required\n */\n @Input({ required: true })\n public errorName!: string;\n\n /**\n * The error message to display.\n * @required\n */\n @Input({ required: true })\n public errorText!: string;\n\n @HostBinding('attr.data-error-name') public get dataErrorName(): string {\n return this.errorName;\n }\n\n protected readonly formErrors = inject(SKY_FORM_ERRORS_ENABLED, {\n optional: true,\n });\n\n constructor() {\n if (!this.formErrors) {\n throw new Error(\n 'The `sky-form-error` component is not supported in the provided context.',\n );\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorComponent } from './form-error.component';\n\n@NgModule({\n imports: [SkyFormErrorComponent],\n exports: [SkyFormErrorComponent],\n})\nexport class SkyFormErrorModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n booleanAttribute,\n} from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { SkyIdModule } from '@skyux/core';\n\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyFormErrorComponent } from './form-error.component';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-form-errors',\n imports: [SkyIdModule, SkyFormErrorComponent, SkyFormsResourcesModule],\n templateUrl: './form-errors.component.html',\n styleUrls: ['./form-errors.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyFormErrorsComponent {\n /**\n * The validation errors from the form control.\n */\n @Input()\n public errors: ValidationErrors | null | undefined;\n\n /**\n * Input label text to display in the error messages.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Indicates whether the parent component's control is touched\n */\n @Input({ transform: booleanAttribute })\n public touched = false;\n\n /**\n * Indicates whether the parent component's control is dirty\n */\n @Input({ transform: booleanAttribute })\n public dirty = false;\n\n @HostBinding('attr.aria-atomic')\n protected readonly ariaAtomic = 'true';\n\n @HostBinding('attr.aria-live')\n protected readonly ariaLive = 'assertive';\n\n @HostBinding('attr.aria-relevant')\n protected readonly ariaRelevant = 'all';\n}\n","@if (labelText) {\n @if (touched) {\n @if (errors?.['required']) {\n <sky-form-error\n errorName=\"required\"\n [errorText]=\"'skyux_form_error_required' | skyLibResources: labelText\"\n />\n }\n\n @if (errors?.['minlength']; as minLengthError) {\n <sky-form-error\n errorName=\"minlength\"\n [errorText]=\"\n 'skyux_form_error_minlength'\n | skyLibResources: labelText : minLengthError.requiredLength\n \"\n />\n }\n\n @if (errors?.['skyDate'] && errors?.['skyDate']['invalid']) {\n <sky-form-error\n errorName=\"invalidDate\"\n [errorText]=\"'skyux_form_error_date' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyDate'] && errors?.['skyDate']['minDate']) {\n <sky-form-error\n errorName=\"minDate\"\n [errorText]=\"\n 'skyux_form_error_date_min'\n | skyLibResources: errors?.['skyDate']['minDateFormatted']\n \"\n />\n }\n\n @if (errors?.['skyDate'] && errors?.['skyDate']['maxDate']) {\n <sky-form-error\n errorName=\"maxDate\"\n [errorText]=\"\n 'skyux_form_error_date_max'\n | skyLibResources: errors?.['skyDate']['maxDateFormatted']\n \"\n />\n }\n\n @if (\n errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['futureDisabled']\n ) {\n <sky-form-error\n errorName=\"fuzzyFutureDisabled\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_future_disabled' | skyLibResources\n \"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['invalid']) {\n <sky-form-error\n errorName=\"fuzzyInvalidDate\"\n [errorText]=\"'skyux_form_error_fuzzy_date_invalid' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['maxDate']) {\n <sky-form-error\n errorName=\"fuzzyMaxDate\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_max_date'\n | skyLibResources: errors?.['skyFuzzyDate']['maxDateFormatted']\n \"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['minDate']) {\n <sky-form-error\n errorName=\"fuzzyMinDate\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_min_date'\n | skyLibResources\n : errors?.['skyFuzzyDate'] &&\n errors?.['skyFuzzyDate']['minDateFormatted']\n \"\n />\n }\n\n @if (errors?.['skyFuzzyDate'] && errors?.['skyFuzzyDate']['yearRequired']) {\n <sky-form-error\n errorName=\"fuzzyYearRequired\"\n [errorText]=\"\n 'skyux_form_error_fuzzy_date_year_required' | skyLibResources\n \"\n />\n }\n\n @if (errors?.['skyEmail']) {\n <sky-form-error\n errorName=\"email\"\n [errorText]=\"'skyux_form_error_email' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyPhoneField']) {\n <sky-form-error\n errorName=\"phone\"\n [errorText]=\"'skyux_form_error_phone' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyTime']) {\n <sky-form-error\n errorName=\"time\"\n [errorText]=\"'skyux_form_error_time' | skyLibResources\"\n />\n }\n\n @if (errors?.['skyUrl']) {\n <sky-form-error\n errorName=\"url\"\n [errorText]=\"'skyux_form_error_url' | skyLibResources\"\n />\n }\n }\n\n @if (touched || dirty) {\n @if (errors?.['maxlength']; as maxLengthError) {\n <sky-form-error\n errorName=\"maxlength\"\n [errorText]=\"\n 'skyux_form_error_maxlength'\n | skyLibResources: labelText : maxLengthError.requiredLength\n \"\n />\n }\n <ng-content />\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorComponent } from './form-error.component';\nimport { SkyFormErrorsComponent } from './form-errors.component';\n\n/**\n * @internal\n */\n@NgModule({\n imports: [SkyFormErrorsComponent, SkyFormErrorComponent],\n exports: [SkyFormErrorsComponent],\n})\nexport class SkyFormErrorsModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n HostBinding,\n Input,\n TemplateRef,\n booleanAttribute,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport {\n FormGroup,\n NG_VALIDATORS,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyIdModule, SkyIdService } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyThemeComponentClassDirective, SkyThemeModule } from '@skyux/theme';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyCheckboxGroupHeadingLevel } from './checkbox-group-heading-level';\nimport { SkyCheckboxGroupHeadingStyle } from './checkbox-group-heading-style';\n\nfunction numberAttribute4(value: unknown): number {\n return numberAttribute(value, 4);\n}\n\n/**\n * Organizes checkboxes into a group.\n */\n@Component({\n selector: 'sky-checkbox-group',\n templateUrl: './checkbox-group.component.html',\n styleUrl: './checkbox-group.component.scss',\n imports: [\n CommonModule,\n SkyFormErrorsModule,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIdModule,\n SkyThemeModule,\n ],\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: SkyCheckboxGroupComponent,\n multi: true,\n },\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n})\nexport class SkyCheckboxGroupComponent implements Validator {\n /**\n * The content of the help popover. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the checkbox group fieldset legend. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The text to display as the checkbox group's heading.\n */\n @Input({ required: true })\n public headingText!: string;\n\n /**\n * Indicates whether to hide the `headingText`.\n */\n @Input({ transform: booleanAttribute })\n public headingHidden = false;\n\n /**\n * The semantic heading level in the document structure. By default, the heading text is not wrapped in a heading element.\n */\n @Input({ transform: numberAttribute })\n public set headingLevel(value: SkyCheckboxGroupHeadingLevel | undefined) {\n this.#_headingLevel = value && !isNaN(value) ? value : undefined;\n this.#updateStackedClasses();\n }\n\n public get headingLevel(): SkyCheckboxGroupHeadingLevel | undefined {\n return this.#_headingLevel;\n }\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 4\n */\n @Input({ transform: numberAttribute4 })\n public set headingStyle(value: SkyCheckboxGroupHeadingStyle) {\n this.headingClass = `sky-font-heading-${value}`;\n }\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Whether the checkbox group is required.\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * Whether the checkbox group is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the checkbox group.\n */\n @Input({ transform: booleanAttribute })\n public set stacked(value: boolean) {\n this.#_stacked = value;\n this.#updateStackedClasses();\n }\n\n public get stacked(): boolean {\n return this.#_stacked;\n }\n\n /**\n * A help key that identifies the global help content to display. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the checkbox group heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n @HostBinding('class.sky-form-field-stacked')\n public stackedLg = false;\n\n @HostBinding('class.sky-field-group-stacked')\n public stackedXL = false;\n\n readonly #idSvc = inject(SkyIdService);\n protected errorId = this.#idSvc.generateId();\n protected headingClass = 'sky-font-heading-4';\n protected formErrorsDataId = 'checkbox-group-form-errors';\n protected formGroup: FormGroup | null | undefined;\n\n #_headingLevel: SkyCheckboxGroupHeadingLevel | undefined;\n #_stacked = false;\n\n public validate(formGroup: FormGroup): ValidationErrors | null {\n this.formGroup ??= formGroup;\n\n if (!this.required) {\n return null;\n }\n\n const controlNames = Object.keys(formGroup.controls);\n let atLeastOneSelected = false;\n\n controlNames.forEach((controlName) => {\n const control = formGroup.get(controlName);\n if (control?.value) {\n atLeastOneSelected = true;\n }\n });\n\n if (!atLeastOneSelected) {\n return { required: true };\n } else {\n return null;\n }\n }\n\n #updateStackedClasses(): void {\n this.stackedLg = !this.headingLevel && this.stacked;\n this.stackedXL = !!this.headingLevel && this.stacked;\n }\n}\n","<fieldset\n class=\"sky-checkbox-group\"\n [attr.aria-invalid]=\"!!formGroup?.errors\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-errormessage]=\"\n headingText && formGroup?.errors ? errorId : undefined\n \"\n>\n <legend\n class=\"sky-checkbox-group-legend\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden\n }\"\n >\n <span\n class=\"sky-checkbox-group-heading\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >\n @switch (headingLevel) {\n @case (3) {\n <h3 [class]=\"headingClass\">{{ headingText }}</h3>\n }\n @case (4) {\n <h4 [class]=\"headingClass\">{{ headingText }}</h4>\n }\n @case (5) {\n <h5 [class]=\"headingClass\">{{ headingText }}</h5>\n }\n @default {\n <span [class]=\"'sky-checkbox-group-heading-text ' + headingClass\">{{\n headingText\n }}</span>\n }\n }\n </span>\n @if (required) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_form_group_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]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n <div\n #hintTextEl=\"skyId\"\n skyId\n [ngClass]=\"{\n 'sky-checkbox-group-hint-text': !!hintText\n }\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n <span class=\"sky-checkbox-group-inline sky-switch-icon-group\">\n <ng-content select=\"sky-checkbox[iconName]\" />\n </span>\n <span class=\"sky-checkbox-group-stacked\">\n <ng-content select=\"sky-checkbox\" />\n </span>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [attr.data-sky-id]=\"formErrorsDataId\"\n [errors]=\"formGroup?.errors\"\n [labelText]=\"headingText\"\n [touched]=\"formGroup?.touched\"\n [dirty]=\"formGroup?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n","import { Component, Input } from '@angular/core';\n\n/**\n@internal\n */\n@Component({\n selector: 'sky-checkbox-label-text-label',\n styleUrls: [\n './checkbox-label-text-label.default.component.scss',\n './checkbox-label-text-label.modern.component.scss',\n ],\n templateUrl: './checkbox-label-text-label.component.html',\n standalone: false,\n})\nexport class SkyCheckboxLabelTextLabelComponent {\n @Input()\n public labelHidden = false;\n\n @Input()\n public set labelText(value: string) {\n this.#_labelText = value.trim();\n }\n\n public get labelText(): string {\n return this.#_labelText;\n }\n\n #_labelText = '';\n}\n","@if (!labelHidden) {\n <span class=\"sky-switch-label\">{{ labelText }}</span>\n}\n","import { Component } from '@angular/core';\n\n/**\n * Specifies a label for the checkbox. To display a help button beside the label, include a help button element, such as\n * `sky-help-inline`, in the `sky-checkbox-label` element and a `sky-control-help` CSS class on that help button\n * element.\n * @deprecated Use `labelText` input on `sky-checkbox-component` instead.\n */\n@Component({\n selector: 'sky-checkbox-label',\n templateUrl: './checkbox-label.component.html',\n standalone: false,\n})\nexport class SkyCheckboxLabelComponent {}\n","<span class=\"sky-switch-label\"\n ><span skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\n\nimport { SkyCheckboxChange } from './checkbox-change';\n\n/**\n * Replaces the HTML input element with `type=\"checkbox\"`. When users select a checkbox, its value\n * is driven through an `ngModel` attribute that you specify on the `sky-checkbox` element.\n */\n@Component({\n selector: 'sky-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: [\n './checkbox.default.component.scss',\n './checkbox.modern.component.scss',\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n providers: [\n { provide: NG_VALIDATORS, useExisting: SkyCheckboxComponent, multi: true },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SkyCheckboxComponent,\n multi: true,\n },\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n standalone: false,\n})\nexport class SkyCheckboxComponent\n implements AfterViewInit, ControlValueAccessor, Validator\n{\n /**\n * The ARIA label for the checkbox. This sets the checkbox's `aria-label` attribute\n * [to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility)\n * when the checkbox does not include a visible label. You must set this property for icon\n * checkboxes. If the checkbox includes a visible label, use `labelledBy` instead.\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set label(value: string | undefined) {\n this.#_label = value;\n\n if (value) {\n this.#logger.deprecated('SkyCheckboxComponent.label', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get label(): string | undefined {\n return this.#_label;\n }\n\n /**\n * The HTML element ID of the element that labels the\n * checkbox. This sets the checkbox's `aria-labelledby` attribute\n * [to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility).\n * If the checkbox does not include a visible label, use `label` instead.\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set labelledBy(value: string | undefined) {\n this.#_labelledBy = value;\n\n if (value) {\n this.#logger.deprecated('SkyCheckboxComponent.labelledBy', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get labelledBy(): string | undefined {\n return this.#_labelledBy;\n }\n\n /**\n * The ID for the checkbox.\n * If a value is not provided, an autogenerated ID is used.\n */\n @Input()\n public set id(value: string | undefined) {\n if (value) {\n this.inputId = `sky-checkbox-${value}-input`;\n } else {\n this.inputId = `sky-checkbox-${this.#defaultId}-input`;\n }\n }\n\n /**\n * Whether to disable the checkbox on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (value !== this.#_disabled) {\n this.#_disabled = value;\n this.#disabledChange.next(value);\n }\n }\n\n /**\n * Whether the checkbox is disabled.\n */\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The index for the checkbox. If not defined, the index is set to the position of the\n * checkbox on load.\n */\n @Input()\n public tabindex: number | undefined = 0;\n\n /**\n * The name for the checkbox.\n * If a value is not provided, an autogenerated ID is used.\n */\n @Input()\n public set name(value: string | undefined) {\n if (value && value !== this.#defaultId) {\n this.#_name = value;\n } else {\n this.#_name = `sky-checkbox-${this.#defaultId}`;\n }\n }\n\n public get name(): string {\n return this.#_name;\n }\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the checkbox label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n public change = new EventEmitter<SkyCheckboxChange>();\n\n /**\n * The SVG icon to display in place of the checkbox. To group icon checkboxes\n * like in the demo, place the checkboxes within a `sky-checkbox-group`.\n */\n @Input()\n public iconName: string | undefined;\n\n /**\n * The background color type after users select a checkbox where the\n * `icon` property displays an icon in place of the checkbox. The valid options correspond to\n * [the label component's](https://developer.blackbaud.com/skyux/components/label)\n * label types. `\"info\"` creates a blue background, `\"success\"` creates a green\n * background, `\"warning\"` creates an orange background, and `\"danger\"` creates a red background.\n * @default \"info\"\n * @deprecated The `checkboxType` input is no longer supported.\n */\n @Input()\n public set checkboxType(value: string | undefined) {\n if (value) {\n this.#logger.deprecated('SkyCheckboxComponent.checkboxType', {\n deprecationMajorVersion: 7,\n });\n }\n\n this.#_checkboxType = value ? value.toLowerCase() : 'info';\n }\n\n public get checkboxType(): string {\n return this.#_checkboxType;\n }\n\n /**\n * Whether the checkbox is selected.\n * @default false\n */\n @Input()\n public set checked(value: boolean | undefined) {\n const checked = !!value;\n if (checked !== this.#_checked) {\n this.#_checked = checked;\n this.#checkedChange.next(checked);\n }\n }\n\n /**\n * Whether the checkbox is selected.\n */\n public get checked(): boolean {\n return this.#_checked;\n }\n\n /**\n * Whether the checkbox is in the indeterminate state. This has no visual effect for icon checkboxes.\n * @internal\n */\n @Input()\n public set indeterminate(value: boolean | undefined) {\n if (value !== this.#_indeterminate) {\n this.#_indeterminate = !!value;\n this.#indeterminateChange.next(this.#_indeterminate);\n if (this.inputEl) {\n this.inputEl.nativeElement.indeterminate = this.#_indeterminate;\n this.#changeDetector.markForCheck();\n }\n }\n }\n\n public get indeterminate(): boolean {\n return this.#_indeterminate;\n }\n\n /**\n * Whether the input is required for form validation.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input element so that forms display an invalid state until the input element\n * is complete.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * The text to display as the checkbox's label. Use this instead of the `sky-checkbox-label` when the label is text-only.\n * Specifying `labelText` also enables automatic error message handling for checkbox.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Indicates whether to hide the `labelText`.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Whether the checkbox is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the checkbox. If the checkbox is within a checkbox group,\n * set `stacked` on the checkbox group component instead.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the checkbox label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Fires when users select or deselect the checkbox.\n */\n @Output()\n public get checkedChange(): Observable<boolean> {\n return this.#checkedChangeObs;\n }\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n public get disabledChange(): Observable<boolean> {\n return this.#disabledChangeObs;\n }\n\n /**\n * Fires when the indeterminate state changes.\n * @internal\n */\n @Output()\n public get indeterminateChange(): Observable<boolean> {\n return this.#indeterminateChangeObs;\n }\n\n @ViewChild('inputEl', { read: ElementRef })\n public set inputEl(el: ElementRef | undefined) {\n this.#_inputEl = el;\n if (el && this.indeterminate) {\n el.nativeElement.indeterminate = this.indeterminate;\n }\n }\n\n public get inputEl(): ElementRef | undefined {\n return this.#_inputEl;\n }\n\n protected get isCheckboxRequired(): boolean {\n return !!(\n this.required ||\n this.control?.hasValidator(Validators.requiredTrue) ||\n this.control?.hasValidator(Validators.required)\n );\n }\n\n protected control: AbstractControl | undefined;\n protected inputId = '';\n\n #checkedChange: Subject<boolean>;\n #checkedChangeObs: Observable<boolean>;\n #disabledChange: Subject<boolean>;\n #disabledChangeObs: Observable<boolean>;\n #indeterminateChange: Subject<boolean>;\n #indeterminateChangeObs: Observable<boolean>;\n\n #_checked = false;\n #_checkboxType = 'info';\n #_disabled = false;\n #_indeterminate = false;\n #_inputEl: ElementRef | undefined;\n #_name = '';\n #_label: string | undefined;\n #_labelledBy: string | undefined;\n\n #changeDetector = inject(ChangeDetectorRef);\n #idSvc = inject(SkyIdService);\n #defaultId = this.#idSvc.generateId();\n #logger = inject(SkyLogService);\n\n protected readonly errorId = this.#idSvc.generateId();\n\n constructor() {\n this.#checkedChange = new Subject<boolean>();\n this.#disabledChange = new Subject<boolean>();\n this.#indeterminateChange = new Subject<boolean>();\n\n this.#checkedChangeObs = this.#checkedChange.asObservable();\n this.#disabledChangeObs = this.#disabledChange.asObservable();\n this.#indeterminateChangeObs = this.#indeterminateChange.asObservable();\n this.id = this.#defaultId;\n this.name = this.#defaultId;\n }\n\n public ngAfterViewInit(): void {\n this.#checkedChange.next(this.checked);\n this.#disabledChange.next(this.disabled);\n this.#indeterminateChange.next(this.indeterminate);\n }\n\n public validate(control: AbstractControl<boolean>): ValidationErrors | null {\n this.control ||= control;\n\n // In template-driven forms, Angular's native 'required' attribute directive only works\n // on `input[type=\"checkbox\"]` selectors, so we need to write the validation logic ourselves.\n // Also, we're treating Validators.required the same as Validators.requiredTrue internally, so\n // we need to account for that decision in our custom validator.\n return this.isCheckboxRequired && control.value !== true\n ? { required: true }\n : null;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public writeValue(value: any): void {\n this.checked = !!value;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public registerOnChange(fn: (value: any) => void): void {\n this.#controlValueAccessorChangeFn = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Event handler for checkbox input element.\n * Toggles checked state if element is not disabled.\n */\n public onInteractionEvent(event: Event): void {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n\n if (!this.disabled) {\n this.indeterminate = false;\n this.#toggle();\n this.#controlValueAccessorChangeFn(this.checked);\n this.#emitChangeEvent();\n }\n }\n\n public onInputBlur(): void {\n this.onTouched();\n }\n\n /** Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor. */\n\n // istanbul ignore next\n public onTouched: () => any = () => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #controlValueAccessorChangeFn: (value: any) => void = (value) => {};\n\n #emitChangeEvent(): void {\n this.change.emit({ checked: this.checked });\n }\n\n /**\n * Toggles the `checked` value between true and false\n */\n #toggle(): void {\n this.checked = !this.checked;\n }\n}\n","<span class=\"sky-checkbox-outer-wrapper\">\n <label\n class=\"sky-checkbox-wrapper sky-switch\"\n [ngClass]=\"{\n 'sky-control-label-required': isCheckboxRequired,\n 'sky-switch-disabled': disabled\n }\"\n >\n <input\n #inputEl\n class=\"sky-checkbox-input sky-switch-input\"\n type=\"checkbox\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [required]=\"isCheckboxRequired\"\n [tabIndex]=\"tabindex\"\n [attr.aria-label]=\"labelText || label\"\n [attr.aria-labelledby]=\"labelText ? undefined : labelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-required]=\"isCheckboxRequired ? true : null\"\n [attr.aria-invalid]=\"!!control?.errors\"\n [attr.aria-errormessage]=\"\n labelText && control?.errors ? errorId : undefined\n \"\n [ngClass]=\"{\n 'sky-switch-invalid':\n (control?.touched || control?.dirty) && control?.errors\n }\"\n (blur)=\"onInputBlur()\"\n (change)=\"onInteractionEvent($event)\"\n />\n <span\n class=\"sky-switch-control\"\n [ngClass]=\"{\n 'sky-switch-control-icon': iconName,\n 'sky-switch-control-info': checkboxType === 'info',\n 'sky-switch-control-success': checkboxType === 'success',\n 'sky-switch-control-warning': checkboxType === 'warning',\n 'sky-switch-control-danger': checkboxType === 'danger'\n }\"\n [skyThemeClass]=\"{\n 'sky-rounded-corners': 'default'\n }\"\n >\n @if (iconName) {\n <sky-icon variant=\"solid\" [iconName]=\"iconName\" />\n } @else {\n @if (indeterminate) {\n <sky-icon\n class=\"sky-checkbox-icon-indeterminate sky-checkbox-icon-modern-indeterminate\"\n iconName=\"square\"\n variant=\"solid\"\n iconSize=\"s\"\n />\n } @else if (checked) {\n <sky-icon\n class=\"sky-checkbox-icon-modern-checked\"\n iconName=\"checkmark\"\n iconSize=\"s\"\n />\n }\n }\n </span>\n\n @if (labelText) {\n <sky-checkbox-label-text-label\n [labelText]=\"labelText\"\n [labelHidden]=\"labelHidden\"\n />\n } @else {\n <ng-content select=\"sky-checkbox-label\" />\n }\n </label>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n class=\"sky-checkbox-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n</span>\n<span #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-checkbox-hint-text sky-checkbox-form-margin\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n >\n {{ hintText }}\n </div>\n }\n</span>\n<sky-form-errors\n [class.sky-checkbox-form-margin]=\"labelText && control?.errors\"\n [id]=\"errorId\"\n [errors]=\"control?.errors\"\n [labelText]=\"labelText\"\n [touched]=\"control?.touched\"\n [dirty]=\"control?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, SkyTrimModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyFormErrorModule } from '../form-error/form-error.module';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyCheckboxGroupComponent } from './checkbox-group.component';\nimport { SkyCheckboxLabelTextLabelComponent } from './checkbox-label-text-label.component';\nimport { SkyCheckboxLabelComponent } from './checkbox-label.component';\nimport { SkyCheckboxComponent } from './checkbox.component';\n\n@NgModule({\n declarations: [\n SkyCheckboxComponent,\n SkyCheckboxLabelComponent,\n SkyCheckboxLabelTextLabelComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyCheckboxGroupComponent,\n SkyFormErrorModule,\n SkyFormErrorsModule,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyTrimModule,\n SkyThemeModule,\n ],\n exports: [\n SkyCheckboxComponent,\n SkyCheckboxLabelComponent,\n SkyCheckboxGroupComponent,\n SkyFormErrorModule,\n ],\n})\nexport class SkyCheckboxModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n HostBinding,\n Input,\n TemplateRef,\n booleanAttribute,\n numberAttribute,\n} from '@angular/core';\nimport { SkyIdModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyFieldGroupHeadingLevel } from './field-group-heading-level';\nimport { SkyFieldGroupHeadingStyle } from './field-group-heading-style';\n\nfunction numberAttribute3(value: unknown): number {\n return numberAttribute(value, 3);\n}\n\n/**\n * Organizes form fields into a group.\n */\n@Component({\n selector: 'sky-field-group',\n templateUrl: './field-group.component.html',\n styleUrl: './field-group.component.scss',\n imports: [CommonModule, SkyHelpInlineModule, SkyIdModule, SkyThemeModule],\n})\nexport class SkyFieldGroupComponent {\n /**\n * The text to display as the field group's heading.\n */\n @Input({ required: true })\n public headingText!: string;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Indicates whether to hide the `headingText`.\n */\n @Input({ transform: booleanAttribute })\n public headingHidden = false;\n\n /**\n * Whether the field group is stacked on another field group. When specified, the appropriate\n * vertical spacing is automatically added to the field group.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-field-group-stacked')\n public stacked = false;\n\n /**\n * The semantic heading level in the document structure.\n * @default 3\n */\n @Input({ transform: numberAttribute3 })\n public headingLevel: SkyFieldGroupHeadingLevel = 3;\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 3\n */\n @Input({ transform: numberAttribute3 })\n public set headingStyle(value: SkyFieldGroupHeadingStyle) {\n this.headingClass = `sky-font-heading-${value}`;\n }\n\n /**\n * The content of the help popover. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the field group heading. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the field group heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n protected headingClass = 'sky-font-heading-3';\n}\n","<fieldset\n class=\"sky-field-group\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n>\n <legend\n class=\"sky-field-group-legend\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden\n }\"\n >\n <span class=\"sky-field-group-heading\">\n @switch (headingLevel) {\n @case (4) {\n <h4 [class]=\"headingClass\">{{ headingText }}</h4>\n }\n @default {\n <h3 [class]=\"headingClass\">{{ headingText }}</h3>\n }\n }\n </span>\n @if (helpPopoverContent || helpKey) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n class=\"sky-field-group-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n <div #hintTextEl=\"skyId\" skyId class=\"sky-field-group-hint-text-wrapper\">\n @if (hintText) {\n <div\n class=\"sky-field-group-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 <div class=\"sky-field-group-content\">\n <ng-content />\n </div>\n</fieldset>\n","import { NgModule } from '@angular/core';\n\nimport { SkyFieldGroupComponent } from './field-group.component';\n\n@NgModule({\n imports: [SkyFieldGroupComponent],\n exports: [SkyFieldGroupComponent],\n})\nexport class SkyFieldGroupModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { SkyIdModule, SkyLogService, SkyTrimModule } from '@skyux/core';\n\n/**\n * Displays a label above the file attachment element. To display a help button\n * beside the label, include a help button element, such as `sky-help-inline`,\n * in the `sky-file-attachment-label` element and a `sky-control-help` CSS class\n * on that help button element.\n * @deprecated Use the `labelText` input on the single file attachment component\n * instead.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyIdModule, SkyTrimModule],\n selector: 'sky-file-attachment-label',\n styleUrl: 'file-attachment-label.component.scss',\n templateUrl: './file-attachment-label.component.html',\n})\nexport class SkyFileAttachmentLabelComponent {\n @ViewChild('labelContentId')\n public labelContentId: { id: string } | undefined;\n\n constructor() {\n inject(SkyLogService).deprecated('SkyFileAttachmentLabelComponent', {\n deprecationMajorVersion: 9,\n replacementRecommendation:\n 'To add a label to single file attachment, use the `labelText` input ' +\n 'on the `sky-file-attachment` component instead.',\n });\n }\n}\n","<span class=\"sky-control-label\"\n ><span #labelContentId=\"skyId\" skyId skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n","import { formatNumber } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyFileSize',\n})\nexport class SkyFileSizePipe implements PipeTransform {\n readonly #resourcesService: SkyLibResourcesService;\n readonly #defaultLocale = 'en-US';\n\n constructor(resourcesService: SkyLibResourcesService) {\n this.#resourcesService = resourcesService;\n }\n\n public transform(input?: number | string | null): string {\n let decimalPlaces = 0,\n dividend = 1,\n template: string;\n\n if (input === null || input === undefined) {\n return '';\n }\n\n if (typeof input === 'string') {\n input = Number.parseInt(input);\n }\n\n if (Math.abs(input) === 1) {\n template = 'skyux_file_attachment_file_size_b_singular';\n } else if (input < 1024) {\n template = 'skyux_file_attachment_file_size_b_plural';\n } else if (input < Math.pow(1024, 2)) {\n template = 'skyux_file_attachment_file_size_kb';\n dividend = 1024;\n } else if (input < Math.pow(1024, 3)) {\n template = 'skyux_file_attachment_file_size_mb';\n dividend = Math.pow(1024, 2);\n decimalPlaces = 1;\n } else {\n template = 'skyux_file_attachment_file_size_gb';\n dividend = Math.pow(1024, 3);\n decimalPlaces = 1;\n }\n\n const roundedSize =\n Math.floor(input / (dividend / Math.pow(10, decimalPlaces))) /\n Math.pow(10, decimalPlaces);\n\n const formattedSize = formatNumber(\n roundedSize,\n this.#defaultLocale,\n '.0-3',\n );\n\n return this.#getString(template, formattedSize);\n }\n\n #getString(key: string, ...args: unknown[]): string {\n // TODO: Need to implement the async `getString` method in a breaking change.\n return this.#resourcesService.getStringForLocale(\n { locale: this.#defaultLocale },\n key,\n ...args,\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Joins an array of IDs with a single space.\n * @internal\n */\n@Pipe({\n name: 'skyFileAttachmentJoinIds',\n})\nexport class SkyFileAttachmentJoinIdsPipe implements PipeTransform {\n public transform(...ids: (string | null | undefined)[]): string | null {\n // Remove undefined values and join with a \" \".\n return ids && ids.filter((id) => id).join(' ');\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileValidateFn } from '../shared/file-validate-function';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyFileAttachmentService {\n public checkFiles(\n files: SkyFileItem[],\n minFileSize: number,\n maxFileSize: number,\n acceptedTypes?: string,\n validateFn?: SkyFileValidateFn,\n ): SkyFileItem[] {\n const fileResults: SkyFileItem[] = [];\n\n files.forEach((fileItem) => {\n if (fileItem.file.size < minFileSize) {\n fileItem.errorType = 'minFileSize';\n fileItem.errorParam = minFileSize.toString();\n fileResults.push(fileItem);\n } else if (fileItem.file.size > maxFileSize) {\n fileItem.errorType = 'maxFileSize';\n fileItem.errorParam = maxFileSize.toString();\n fileResults.push(fileItem);\n } else if (this.fileTypeRejected(fileItem.file.type, acceptedTypes)) {\n fileItem.errorType = 'fileType';\n fileItem.errorParam = this.#getAcceptedTypesList(acceptedTypes);\n fileResults.push(fileItem);\n } else if (validateFn) {\n const errorParam = validateFn(fileItem);\n\n if (errorParam) {\n fileItem.errorType = 'validate';\n fileItem.errorParam = errorParam;\n }\n fileResults.push(fileItem);\n } else {\n fileResults.push(fileItem);\n }\n });\n return fileResults;\n }\n\n /**\n * Returns `true` if a directory is found in the provided `files` parameter.\n */\n public hasDirectory(files: FileList): boolean {\n for (let index = 0; index < files.length; index++) {\n const file: any = files.item(index);\n if (\n file.webkitGetAsEntry &&\n file.webkitGetAsEntry() &&\n file.webkitGetAsEntry().isDirectory\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n public fileTypeRejected(fileType: string, acceptedTypes?: string): boolean {\n if (!acceptedTypes) {\n return false;\n }\n\n if (!fileType) {\n return true;\n }\n\n const acceptedTypesUpper = acceptedTypes.toUpperCase();\n const typeArray = acceptedTypesUpper.split(',');\n\n return !this.#fileTypeInArray(typeArray, fileType.toUpperCase());\n }\n\n #fileTypeInArray(typeArray: string[], fileType: string): boolean {\n if (typeArray.indexOf(fileType) !== -1) {\n return true;\n }\n\n for (const type of typeArray) {\n const validSubtype = this.#getMimeSubtype(type);\n\n if (validSubtype === '*') {\n if (this.#getMimeMainType(type) === this.#getMimeMainType(fileType)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n #getAcceptedTypesList(rawTypes: string | undefined): string | undefined {\n return rawTypes\n ?.toUpperCase()\n .split(',')\n .map((type) => {\n const subType = this.#getMimeSubtype(type);\n return subType.startsWith('X-') ? subType.substr(2) : subType;\n })\n .join(', ');\n }\n\n #getMimeSubtype(type: string): string {\n return type.substr(type.indexOf('/') + 1, type.length);\n }\n\n #getMimeMainType(type: string): string {\n return type.substr(0, type.indexOf('/'));\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { SkyFileItem } from './file-item';\n\n/**\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class SkyFileItemService {\n public isFile(fileItem: SkyFileItem): boolean {\n const file = fileItem.file;\n\n return !!(\n file &&\n file !== undefined &&\n file !== null &&\n file.size !== undefined &&\n file.size !== null\n );\n }\n\n public isImage(fileItem: SkyFileItem): boolean {\n const fileTypeUpper = this.getFileTypeUpper(fileItem);\n const slashIndex = fileTypeUpper.indexOf('/');\n\n if (slashIndex >= 0) {\n switch (fileTypeUpper.substr(fileTypeUpper.indexOf('/') + 1)) {\n case 'BMP':\n case 'GIF':\n case 'JPEG':\n case 'PNG':\n return true;\n default:\n break;\n }\n }\n\n return false;\n }\n\n public getFileExtensionUpper(fileItem: SkyFileItem): string {\n let extension = '',\n name: string;\n\n /* istanbul ignore else */\n /* sanity check */\n if (fileItem) {\n const file = fileItem.file;\n if (file) {\n /* istanbul ignore next */\n name = file.name || '';\n /* istanbul ignore next */\n extension = name.substr(name.lastIndexOf('.')) || '';\n } else {\n extension = '';\n }\n }\n\n return extension.toUpperCase();\n }\n\n public getFileTypeUpper(fileItem: SkyFileItem): string {\n let fileType = '';\n /* istanbul ignore else */\n /* sanity check */\n if (fileItem) {\n const file = fileItem.file;\n if (file) {\n fileType = file.type || '';\n } else {\n fileType = '';\n }\n }\n\n return fileType.toUpperCase();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DOCUMENT,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Self,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NgControl,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport {\n SkyFileReaderService,\n SkyIdModule,\n SkyIdService,\n SkyLiveAnnouncerService,\n} from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport {\n SkyThemeComponentClassDirective,\n SkyThemeModule,\n SkyThemeService,\n} from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyFormErrorComponent } from '../../form-error/form-error.component';\nimport { SKY_FORM_ERRORS_ENABLED } from '../../form-error/form-errors-enabled-token';\nimport { SkyFormErrorsComponent } from '../../form-error/form-errors.component';\nimport { SkyFormsResourcesModule } from '../../shared/sky-forms-resources.module';\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileItemErrorType } from '../shared/file-item-error-type';\nimport { SkyFileItemService } from '../shared/file-item.service';\nimport { SkyFileSizePipe } from '../shared/file-size.pipe';\nimport { SkyFileValidateFn } from '../shared/file-validate-function';\n\nimport { SkyFileAttachmentChange } from './file-attachment-change';\nimport { SkyFileAttachmentClick } from './file-attachment-click';\nimport { SkyFileAttachmentJoinIdsPipe } from './file-attachment-join-ids.pipe';\nimport { SkyFileAttachmentLabelComponent } from './file-attachment-label.component';\nimport { SkyFileAttachmentService } from './file-attachment.service';\n\nconst MAX_FILE_SIZE_DEFAULT = 500000;\nconst MIN_FILE_SIZE_DEFAULT = 0;\n\n/**\n * Provides an element to attach a single local file.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyFileAttachmentJoinIdsPipe,\n SkyFileSizePipe,\n SkyFormErrorComponent,\n SkyFormErrorsComponent,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyThemeModule,\n SkyThemeComponentClassDirective,\n ],\n providers: [\n SkyFileAttachmentService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n selector: 'sky-file-attachment',\n styleUrl: './file-attachment.component.scss',\n templateUrl: './file-attachment.component.html',\n})\nexport class SkyFileAttachmentComponent\n implements\n AfterViewInit,\n AfterContentInit,\n ControlValueAccessor,\n OnInit,\n OnDestroy\n{\n readonly #document = inject(DOCUMENT);\n\n readonly #fileReaderSvc = inject(SkyFileReaderService);\n\n /**\n * The comma-delimited string literal of MIME types that users can attach.\n * By default, all file types are allowed.\n */\n @Input()\n public acceptedTypes: string | undefined;\n\n /**\n * A custom error message to display when a file doesn't match the accepted types.\n * This replaces a default error message that lists all accepted types.\n */\n @Input()\n public acceptedTypesErrorMessage: string | undefined;\n\n /**\n * Whether to disable the input on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n */\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the single file attachment label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the single file attachment label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * The text to display as the file attachment's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether to hide `labelText` from view.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * The maximum size in bytes for valid files.\n * @default 500000\n */\n @Input()\n public set maxFileSize(value: number | undefined) {\n this.#_maxFileSize = value ?? MAX_FILE_SIZE_DEFAULT;\n }\n\n public get maxFileSize(): number {\n return this.#_maxFileSize;\n }\n\n /**\n * The minimum size in bytes for valid files.\n * @default 0\n */\n @Input()\n public set minFileSize(value: number | undefined) {\n this.#_minFileSize = value ?? MIN_FILE_SIZE_DEFAULT;\n }\n\n public get minFileSize(): number {\n return this.#_minFileSize;\n }\n\n /**\n * Whether the single file attachment is stacked on another form component. When specified,\n * the appropriate vertical spacing is automatically added to the single file attachment.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * The custom validation function. This validation runs alongside the internal\n * file validation. This function takes a `SkyFileItem` object as a parameter.\n * @deprecated Add a custom Angular `Validator` function to the `FormControl` instead.\n */\n @Input()\n public validateFn: SkyFileValidateFn | undefined;\n\n /**\n * Fires when users add or remove files.\n * @deprecated Subscribe to the form control's `valueChanges` event instead.\n */\n @Output()\n public fileChange = new EventEmitter<SkyFileAttachmentChange>();\n\n /**\n * Fires when users select the file name link. Make sure to bind the event.\n * If you do not, the file name link will be a dead link.\n */\n @Output()\n public fileClick = new EventEmitter<SkyFileAttachmentClick>();\n\n public acceptedOver = false;\n\n public hasLabelComponent = false;\n\n public rejectedOver = false;\n\n /**\n * Whether the input is required for form validation.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input element so that forms display an invalid state until the input element\n * is complete.\n * For more information about the `aria-required` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-required).\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n public set value(value: SkyFileItem | undefined | null) {\n // The null check is needed to address a bug in Angular 4.\n // writeValue is being called twice, first time with a phantom null value\n // See: https://github.com/angular/angular/issues/14988\n const isNewValue = value !== this.value && value !== null;\n\n if (isNewValue) {\n if (value) {\n this.isImage = this.#fileItemService.isImage(value);\n } else {\n this.isImage = false;\n }\n this.#setFileName(value);\n\n this.#_value = value;\n this.#onChange(value);\n this.#updateFileAttachmentButton();\n }\n }\n\n public get value(): SkyFileItem | undefined {\n return this.#_value;\n }\n\n public currentThemeName: string | undefined;\n\n public fileName = '';\n\n public showFileAttachmentButton = true;\n\n public truncatedFileName = '';\n\n @ViewChild('fileInputRef')\n public inputEl: ElementRef | undefined;\n\n @ContentChildren(SkyFileAttachmentLabelComponent)\n public labelComponents:\n | QueryList<SkyFileAttachmentLabelComponent>\n | undefined;\n\n public isImage = false;\n\n protected get isRequired(): boolean {\n return (\n this.required ||\n (this.ngControl?.control?.hasValidator(Validators.required) ?? false)\n );\n }\n\n #enterEventTarget: EventTarget | undefined | null;\n\n #ngUnsubscribe = new Subject<void>();\n\n #_maxFileSize = MAX_FILE_SIZE_DEFAULT;\n\n #_minFileSize = MIN_FILE_SIZE_DEFAULT;\n\n #_value: SkyFileItem | undefined;\n\n #changeDetector: ChangeDetectorRef;\n #fileAttachmentService: SkyFileAttachmentService;\n #fileItemService: SkyFileItemService;\n #themeSvc: SkyThemeService | undefined;\n\n readonly #idSvc = inject(SkyIdService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n protected ngControl: NgControl | undefined;\n protected errorId = this.#idSvc.generateId();\n protected labelId = this.#idSvc.generateId();\n\n protected fileErrorName: SkyFileItemErrorType | undefined;\n protected fileErrorParam: string | undefined;\n protected fileErrorValidation: ValidationErrors | null | undefined;\n\n constructor(\n changeDetector: ChangeDetectorRef,\n fileAttachmentService: SkyFileAttachmentService,\n fileItemService: SkyFileItemService,\n @Self() @Optional() ngControl?: NgControl,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#changeDetector = changeDetector;\n this.#fileAttachmentService = fileAttachmentService;\n this.#fileItemService = fileItemService;\n this.ngControl = ngControl;\n this.#themeSvc = themeSvc;\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n if (this.#themeSvc) {\n this.#themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((themeSettings) => {\n this.currentThemeName = themeSettings.currentSettings.theme.name;\n this.#updateFileAttachmentButton();\n });\n }\n }\n\n public ngAfterViewInit(): void {\n // This is needed to address a bug in Angular 7.\n // When a control value is set initially, its value is not represented on the view.\n // See: https://github.com/angular/angular/issues/13792\n // Of note is the parent check which allows us to determine if the form is reactive.\n // Without this check there is a changed before checked error\n /* istanbul ignore else */\n if (this.ngControl) {\n setTimeout(() => {\n this.ngControl?.control?.setValue(this.value, {\n emitEvent: false,\n });\n this.#changeDetector.markForCheck();\n });\n\n // There is some disconnect between the host control and the form control.\n // This handles that by running change detection whenever the host control\n // has any changes. This is a workaround for this existing bug and will be\n // addressed in a future story that refactors file attachment.\n this.ngControl.control?.events.subscribe(() => {\n this.#changeDetector.markForCheck();\n });\n }\n }\n\n public ngAfterContentInit(): void {\n if (this.labelComponents) {\n this.hasLabelComponent = this.labelComponents.length > 0;\n this.#changeDetector.detectChanges();\n\n // Handles updating classes when label changes\n this.labelComponents.changes\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(\n (newLabelComponents: QueryList<SkyFileAttachmentLabelComponent>) => {\n this.hasLabelComponent = newLabelComponents.length > 0;\n this.#changeDetector.markForCheck();\n },\n );\n }\n }\n\n public onButtonBlur(): void {\n // Only mark the field as touched on blur when the document still has focus. This\n // prevents validation from occurring while the user has the file dialog open,\n // since focus moves away from the document and onto the file dialog before this\n // event fires.\n if (this.#document.hasFocus()) {\n this.#onTouched();\n }\n }\n\n public onFileCancel(): void {\n this.#onTouched();\n }\n\n public onDropClicked(): void {\n /* istanbul ignore else */\n if (this.inputEl) {\n this.inputEl.nativeElement.click();\n }\n }\n\n public fileChangeEvent(fileChangeEvent: Event): void {\n /** Set a timeout here to allow the browser to regain context from the system dialog. Without this, error messages do not read out correctly to screen readers. */\n setTimeout(() => {\n this.#handleFiles(\n (fileChangeEvent.target as HTMLInputElement | undefined)?.files,\n );\n }, 500);\n }\n\n public fileDragEnter(dragEnterEvent: DragEvent): void {\n // Save this target to know when the drag event leaves\n this.#enterEventTarget = dragEnterEvent.target;\n dragEnterEvent.stopPropagation();\n dragEnterEvent.preventDefault();\n }\n\n public fileDragOver(dragOverEvent: DragEvent): void {\n const transfer = dragOverEvent.dataTransfer;\n\n dragOverEvent.stopPropagation();\n dragOverEvent.preventDefault();\n\n if (transfer) {\n if (transfer.items) {\n const files = Array.from(transfer.items);\n\n for (const file of files) {\n if (\n file.type &&\n this.#fileAttachmentService.fileTypeRejected(\n file.type,\n this.acceptedTypes,\n )\n ) {\n this.rejectedOver = true;\n this.acceptedOver = false;\n return;\n }\n }\n\n if (files.length > 0 && !this.acceptedOver) {\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n } else if (transfer.files) {\n // If the browser does not support DataTransfer.items,\n // defer file-type checking to drop handler.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n }\n }\n\n public fileDrop(dropEvent: DragEvent): void {\n dropEvent.stopPropagation();\n dropEvent.preventDefault();\n\n this.#enterEventTarget = undefined;\n this.rejectedOver = false;\n this.acceptedOver = false;\n\n if (dropEvent.dataTransfer && dropEvent.dataTransfer.files) {\n if (dropEvent.dataTransfer.files.length > 1) {\n return;\n }\n\n if (\n this.#fileAttachmentService.hasDirectory(dropEvent.dataTransfer.files)\n ) {\n return;\n }\n\n this.#handleFiles(dropEvent.dataTransfer.files);\n }\n }\n\n public fileDragLeave(dragLeaveEvent: DragEvent): void {\n if (this.#enterEventTarget === dragLeaveEvent.target) {\n this.rejectedOver = false;\n this.acceptedOver = false;\n }\n }\n\n public deleteFileAttachment(): void {\n const fileName = this.value?.file.name;\n this.#onTouched();\n this.#emitFileChangeEvent(undefined);\n\n /* istanbul ignore else: safety check */\n if (fileName) {\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_removed',\n fileName,\n );\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public ngOnDestroy(): void {\n this.fileChange.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public registerOnChange(fn: (value: any) => any): void {\n this.#onChange = fn;\n }\n public registerOnTouched(fn: () => any): void {\n this.#onTouched = fn;\n }\n\n public writeValue(value: any): void {\n this.value = value;\n this.#changeDetector.markForCheck();\n }\n\n /**\n * @internal\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.#changeDetector.markForCheck();\n }\n\n public emitClick(): void {\n /* istanbul ignore else */\n if (this.value) {\n this.fileClick.emit({\n file: this.value,\n });\n }\n }\n\n #announceState(resourceString: string, ...args: any[]): void {\n this.#resourcesSvc\n .getString(resourceString, ...args)\n .pipe(take(1))\n .subscribe((internationalizedString) => {\n this.#liveAnnouncerSvc.announce(internationalizedString);\n });\n }\n\n #emitFileChangeEvent(currentFile?: SkyFileItem): void {\n if (currentFile && !currentFile.errorType) {\n this.writeValue(currentFile);\n this.fileErrorName = undefined;\n this.fileErrorParam = undefined;\n this.fileErrorValidation = undefined;\n } else {\n const hadValue = this.value !== undefined;\n this.writeValue(undefined);\n // Make sure value accessor is marked as dirty when a validation failure occurs\n // and the control value remains undefined.\n if (!hadValue) {\n this.#onChange(undefined);\n }\n this.fileErrorValidation = { fileError: true };\n this.fileErrorName = currentFile?.errorType;\n this.fileErrorParam = currentFile?.errorParam;\n }\n this.fileChange.emit({\n file: currentFile,\n } as SkyFileAttachmentChange);\n\n /* istanbul ignore else */\n if (this.inputEl) {\n this.inputEl.nativeElement.value = '';\n }\n }\n\n async #loadFile(file: SkyFileItem): Promise<void> {\n if (file.file) {\n try {\n const previousFileName = this.value?.file.name;\n\n if (previousFileName) {\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_replaced',\n previousFileName,\n file.file.name,\n );\n } else {\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_added',\n file.file.name,\n );\n }\n\n file.url = await this.#fileReaderSvc.readAsDataURL(file.file);\n\n this.#emitFileChangeEvent(file);\n } catch {\n this.#emitFileChangeEvent(file);\n }\n }\n }\n\n #handleFiles(fileList?: FileList | null): void {\n this.#onTouched();\n\n if (fileList) {\n const files: SkyFileItem[] = [];\n\n if ('item' in fileList) {\n for (let index = 0; index < fileList.length; index++) {\n files.push({\n file: fileList.item(index),\n } as SkyFileItem);\n }\n }\n\n const processedFiles = this.#fileAttachmentService.checkFiles(\n files,\n this.minFileSize,\n this.maxFileSize,\n this.acceptedTypes,\n this.validateFn,\n );\n\n for (const file of processedFiles) {\n if (file.errorType) {\n this.#emitFileChangeEvent(file);\n } else {\n void this.#loadFile(file);\n }\n }\n }\n }\n\n #setFileName(file?: SkyFileItem): void {\n if (file) {\n const dropName =\n this.#fileItemService.isFile(file) && file.file.name\n ? file.file.name\n : file.url;\n\n this.fileName = dropName;\n\n if (dropName.length > 26) {\n this.truncatedFileName = dropName.slice(0, 26) + '...';\n } else {\n this.truncatedFileName = dropName;\n }\n } else {\n this.fileName = '';\n this.truncatedFileName = '';\n }\n }\n\n #updateFileAttachmentButton(): void {\n this.showFileAttachmentButton = !(\n this.value && this.currentThemeName === 'modern'\n );\n this.#changeDetector.markForCheck();\n }\n\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n #onChange = (_: any): void => {\n return;\n };\n // istanbul ignore next\n #onTouched = (): void => {\n return;\n };\n}\n","<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 (cancel)=\"onFileCancel()\"\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 iconName=\"folder-open\" />\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\n class=\"sky-file-attachment-icon\"\n iconName=\"document\"\n iconSize=\"xl\"\n />\n }\n @if (value || currentThemeName === 'default') {\n <span class=\"sky-file-attachment-file-link\">\n @if (value) {\n <a\n class=\"sky-btn sky-btn-link-inline\"\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 iconName=\"delete\" />\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","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorModule } from '../../form-error/form-error.module';\n\nimport { SkyFileAttachmentLabelComponent } from './file-attachment-label.component';\nimport { SkyFileAttachmentComponent } from './file-attachment.component';\n\n@NgModule({\n exports: [\n SkyFileAttachmentComponent,\n SkyFileAttachmentLabelComponent,\n SkyFormErrorModule,\n ],\n imports: [SkyFileAttachmentComponent, SkyFileAttachmentLabelComponent],\n})\nexport class SkyFileAttachmentModule {}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { SkyInputBoxPopulateArgs } from './input-box-populate-args';\nimport { SkyInputBoxComponent } from './input-box.component';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyInputBoxHostService implements OnDestroy {\n #host: SkyInputBoxComponent | undefined;\n #requiredSubject = new BehaviorSubject<boolean>(false);\n\n public required = this.#requiredSubject.asObservable();\n\n public get controlId(): string {\n return this.#host?.controlId ?? '';\n }\n\n public get labelId(): string {\n return this.#host?.labelText ? this.#host.labelId : '';\n }\n\n public get labelText(): string {\n return this.#host?.labelText ?? '';\n }\n\n public get ariaDescribedBy(): Observable<string | undefined> | undefined {\n return this.#ariaDescribedBy;\n }\n\n #ariaDescribedBy: Observable<string | undefined> | undefined;\n\n public init(host: SkyInputBoxComponent): void {\n this.#host = host;\n this.#ariaDescribedBy = host.ariaDescribedBy.asObservable();\n }\n\n public ngOnDestroy(): void {\n this.#requiredSubject.complete();\n }\n\n public populate(args: SkyInputBoxPopulateArgs): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot populate the input box because `SkyInputBoxHostService` has not yet been initialized. Try running the `populate` method within an Angular lifecycle hook, such as `ngOnInit`.',\n );\n }\n\n this.#host.populate(args);\n }\n\n public setHintText(hintText: string | undefined): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot set hint text on the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n\n this.#host.setHostHintText(hintText);\n }\n\n public setHintTextHidden(hide: boolean): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot hide hint text on the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n\n this.#host.setHintTextHidden(hide);\n }\n\n public setHintTextScreenReaderOnly(hide: boolean): void {\n if (!this.#host) {\n throw new Error(\n 'Cannot remove hint text on the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n\n this.#host.setHintTextScreenReaderOnly(hide);\n }\n\n /**\n * Set required so that input box displays the label correctly. When the input is supplied by the consumer it is a content\n * child that input box can read required from and this is unnecessary. When the input is supplied internally by the\n * component the input box does not have a ref to it, so the component needs to inform the input box of its required state.\n */\n public setRequired(required: boolean): void {\n this.#requiredSubject.next(required);\n }\n\n /**\n * Whether the focused element is inside the input box.\n * @internal\n */\n public focusIsInInput(el: EventTarget): boolean {\n if (!this.#host) {\n throw new Error(\n 'Cannot get whether the focus is in the input box because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n return this.#host.containsElement(el);\n }\n\n /**\n * Returns an html element that is inside the input box.\n * @internal\n */\n public queryHost(query: string): HTMLElement | undefined {\n if (!this.#host) {\n throw new Error(\n 'Cannot query input box host because `SkyInputBoxHostService` has not yet been initialized.',\n );\n }\n return this.#host.queryPopulatedElement(query);\n }\n}\n","import { Directive, HostBinding, Input, inject } from '@angular/core';\n\nimport { SkyInputBoxHostService } from './input-box-host.service';\n\n/**\n * @internal\n */\n@Directive({\n selector:\n // eslint-disable-next-line @angular-eslint/directive-selector\n 'input:not([skyId]):not(.sky-form-control),select:not([skyId]):not(.sky-form-control),textarea:not([skyId]):not(.sky-form-control)',\n})\nexport class SkyInputBoxControlDirective {\n @HostBinding('autocomplete')\n @Input()\n public set autocomplete(value: string | undefined) {\n this.#_autocomplete = value;\n }\n\n public get autocomplete(): string | undefined {\n return this.#_autocomplete || (this.#hostSvc ? 'off' : undefined);\n }\n\n #_autocomplete: string | undefined;\n #hostSvc = inject(SkyInputBoxHostService, { optional: true });\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyInputBoxHintText',\n})\nexport class SkyInputBoxHintTextPipe implements PipeTransform {\n public transform(\n hintText?: string,\n hostHintText?: string,\n ): string | undefined {\n if (hintText && hostHintText) {\n return `${hintText} ${hostHintText}`;\n }\n\n return hintText || hostHintText;\n }\n}\n","import {\n ElementRef,\n Injectable,\n RendererFactory2,\n inject,\n} from '@angular/core';\n\nconst ARIA_DESCRIBEDBY_ATTR = 'aria-describedby';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyInputBoxAdapterService {\n #renderer = inject(RendererFactory2).createRenderer(undefined, null);\n\n /**\n * Returns whether the provided input box contains the focus event target.\n */\n // TODO: remove this if no longer needed after a scalable focus monitor service is implemented\n public containsElement(inputRef: ElementRef, el: EventTarget): boolean {\n return inputRef.nativeElement.contains(el);\n }\n\n public focusControl(elRef: ElementRef): void {\n const control = elRef.nativeElement.querySelector('.sky-form-control');\n /* istanbul ignore else */\n if (control) {\n control.focus();\n }\n }\n\n /**\n * Returns the inline help element.\n */\n public getInlineHelpElement(elRef: ElementRef): HTMLElement {\n return elRef.nativeElement.querySelector('.sky-control-help');\n }\n\n /**\n * Returns true if the provided element contains the focused element.\n */\n public isFocusInElement(el: HTMLElement): boolean {\n if (el) {\n return (\n el === document.activeElement || el.contains(document.activeElement)\n );\n }\n return false;\n }\n\n public updateDescribedBy(\n inputRef: ElementRef,\n hintTextId: string,\n hintText: string | undefined,\n ): void {\n const inputEl = inputRef.nativeElement as HTMLElement;\n\n const describedByIds =\n inputEl\n .getAttribute(ARIA_DESCRIBEDBY_ATTR)\n ?.split(' ')\n .map((id) => id.trim()) ?? [];\n\n const hintTextIdIndex = describedByIds.indexOf(hintTextId);\n const previousCount = describedByIds.length;\n\n if (hintText && hintTextIdIndex < 0) {\n describedByIds.push(hintTextId);\n } else if (!hintText && hintTextIdIndex >= 0) {\n describedByIds.splice(hintTextIdIndex, 1);\n }\n\n if (describedByIds.length !== previousCount) {\n this.#setDescribedByIds(inputEl, describedByIds);\n }\n }\n\n /**\n * Queries the provided input box with the query string.\n */\n // TODO: remove this if no longer needed after a scalable focus monitor service is implemented\n public queryElement(inputRef: ElementRef, query: string): HTMLElement {\n return inputRef.nativeElement.querySelector(query);\n }\n\n #setDescribedByIds(inputEl: HTMLElement, describedByIds: string[]): void {\n if (describedByIds.length === 0) {\n this.#renderer.removeAttribute(inputEl, ARIA_DESCRIBEDBY_ATTR);\n } else {\n this.#renderer.setAttribute(\n inputEl,\n ARIA_DESCRIBEDBY_ATTR,\n describedByIds.join(' '),\n );\n }\n }\n}\n","import {\n BooleanInput,\n NumberInput,\n coerceBooleanProperty,\n coerceNumberProperty,\n} from '@angular/cdk/coercion';\nimport {\n AfterContentChecked,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n TemplateRef,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n AbstractControlDirective,\n FormControlDirective,\n FormControlName,\n NgModel,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { SkyContentInfoProvider, SkyIdService } from '@skyux/core';\n\nimport { ReplaySubject, Subject, takeUntil } from 'rxjs';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\n\nimport { SkyInputBoxAdapterService } from './input-box-adapter.service';\nimport { SkyInputBoxControlDirective } from './input-box-control.directive';\nimport { SkyInputBoxHostService } from './input-box-host.service';\nimport { SkyInputBoxPopulateArgs } from './input-box-populate-args';\n\n/**\n * A wrapper component that provides styling and accessibility to form elements.\n */\n@Component({\n selector: 'sky-input-box',\n templateUrl: './input-box.component.html',\n styleUrls: ['./input-box.component.scss'],\n providers: [\n SkyContentInfoProvider,\n SkyInputBoxAdapterService,\n SkyInputBoxHostService,\n {\n provide: SKY_FORM_ERRORS_ENABLED,\n useValue: true,\n },\n ],\n // Note that change detection is not set to OnPush; default change detection allows the\n // invalid CSS class to be added when the content control's invalid/dirty state changes.\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyInputBoxComponent\n implements OnInit, AfterContentChecked, OnDestroy\n{\n #changeRef = inject(ChangeDetectorRef);\n #inputBoxHostSvc = inject(SkyInputBoxHostService);\n #adapterService = inject(SkyInputBoxAdapterService);\n #idSvc = inject(SkyIdService);\n #elementRef = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n /**\n * Whether to visually highlight the input box in an error state. If not specified, the input box\n * displays in an error state when either the `ngModel` or the Angular `FormControl` contains an error.\n * @default undefined\n */\n @Input()\n public hasErrors: boolean | undefined;\n\n /**\n * Whether to visually highlight the input box as disabled. To disable the input box's\n * input element, use the HTML `disabled` attribute or the Angular `FormControl.disabled`\n * property. If the input element is mapped to an Angular form control\n * (e.g. `formControlName`, `ngModel`, etc.), \"disabled\" styles are applied automatically;\n * if the input element is not associated with an Angular form control, the `disabled`\n * property on the input box must be set to `true` to visually indicate\n * the disabled state on the input box.\n * @default false\n */\n @Input()\n public disabled: boolean | undefined;\n\n /**\n * The text to display as the input's label and in known validation error messages. The label\n * will automatically be associated with the `input`, `select`, `textarea`, or compatible SKY UX\n * component included in the input box.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * The maximum number of characters to allow in the input box. This property places a\n * [SKY UX character count](https://developer.blackbaud.com/skyux/components/character-count)\n * on the input element with the appropriate validator, so don't use it with inputs where\n * users are unlikely to exceed character limits. Instead, use\n * [Angular's max length validator](https://angular.io/api/forms/MaxLengthValidator) and a\n * `maxLength` attribute on the input element to handle maximum length validation.\n *\n */\n @Input()\n public set characterLimit(value: NumberInput) {\n this.#_characterLimit =\n value === undefined ? undefined : coerceNumberProperty(value, undefined);\n\n this.#updateMaxLengthValidator();\n }\n\n public get characterLimit(): number | undefined {\n return this.#_characterLimit;\n }\n\n /**\n * Whether the input box is stacked on another input box. When specified, the appropriate\n * vertical spacing is automatically added to the input box.\n */\n @Input()\n public set stacked(value: BooleanInput) {\n this.#_stacked = coerceBooleanProperty(value);\n this.cssClass = this.#_stacked ? 'sky-form-field-stacked' : '';\n }\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the input box label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the input box label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public set hintText(value: string | undefined) {\n this.#_hintText = value;\n\n this.ariaDescribedBy.next(value ? this.hintTextId : undefined);\n }\n\n public get hintText(): string | undefined {\n return this.#_hintText;\n }\n\n public hostInputTemplate: TemplateRef<unknown> | undefined;\n\n public hostButtonsTemplate: TemplateRef<unknown> | undefined;\n\n public hostButtonsInsetTemplate: TemplateRef<unknown> | undefined;\n\n public hostButtonsLeftTemplate: TemplateRef<unknown> | undefined;\n\n public formControlHasFocus = false;\n\n public hostIconsInsetTemplate: TemplateRef<unknown> | undefined;\n\n public hostIconsInsetLeftTemplate: TemplateRef<unknown> | undefined;\n\n protected hintTextHidden = false;\n\n protected hintTextScreenReaderOnly = false;\n\n protected hostHintText: string | undefined;\n\n public readonly controlId = this.#idSvc.generateId();\n public readonly labelId = this.#idSvc.generateId();\n public readonly errorId = this.#idSvc.generateId();\n public readonly hintTextId = this.#idSvc.generateId();\n public readonly ariaDescribedBy = new ReplaySubject<string | undefined>(1);\n\n #requiredByFormField: boolean | undefined;\n\n @HostBinding('class')\n public cssClass = '';\n\n @ContentChild(FormControlDirective)\n public formControl: FormControlDirective | undefined;\n\n @ContentChild(FormControlName)\n public formControlByName: FormControlName | undefined;\n\n @ContentChild(NgModel)\n public ngModel: NgModel | undefined;\n\n @ContentChild(SkyInputBoxControlDirective, {\n read: ElementRef,\n })\n public inputRef: ElementRef | undefined;\n\n protected controlDir: AbstractControlDirective | undefined;\n\n protected get isDisabled(): boolean {\n return !!(\n this.disabled ||\n this.controlDir?.control?.disabled ||\n this.inputRef?.nativeElement?.disabled\n );\n }\n\n protected get hasErrorsComputed(): boolean {\n if (this.hasErrors === undefined) {\n return this.#controlHasErrors(this.controlDir);\n }\n\n return this.hasErrors;\n }\n\n protected get required(): boolean {\n return (\n this.#hasRequiredValidator() ||\n this.inputRef?.nativeElement.required ||\n this.#requiredByFormField\n );\n }\n\n protected characterCountScreenReader = 0;\n\n #_stacked = false;\n #_characterLimit: number | undefined;\n #_hintText: string | undefined;\n\n #previousInputRef: ElementRef | undefined;\n #previousMaxLengthValidator: ValidatorFn | undefined;\n #ngUnsubscribe = new Subject<void>();\n\n public ngOnInit(): void {\n this.#inputBoxHostSvc.init(this);\n\n this.#inputBoxHostSvc.required\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((required) => {\n this.#requiredByFormField = required;\n this.#changeRef.markForCheck();\n });\n }\n\n public ngAfterContentChecked(): void {\n this.controlDir =\n this.formControl || this.formControlByName || this.ngModel;\n\n if (!this.formControlHasFocus) {\n this.characterCountScreenReader = this.controlDir?.value?.length || 0;\n }\n\n this.#updateInputRef();\n }\n\n public ngOnDestroy(): void {\n this.ariaDescribedBy.complete();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Whether the input box component contains the focused element.\n * @internal\n */\n public containsElement(el: EventTarget): boolean {\n return this.#adapterService.containsElement(this.#elementRef, el);\n }\n\n public formControlFocusIn(): void {\n const inlineHelpEl = this.#adapterService.getInlineHelpElement(\n this.#elementRef,\n );\n if (!this.#adapterService.isFocusInElement(inlineHelpEl)) {\n this.#updateHasFocus(true);\n }\n }\n\n public formControlFocusOut(): void {\n this.characterCountScreenReader = this.controlDir?.value?.length || 0;\n this.#updateHasFocus(false);\n }\n\n public onInsetIconClick(): void {\n if (!this.isDisabled) {\n this.#adapterService.focusControl(this.#elementRef);\n }\n }\n\n public populate(args: SkyInputBoxPopulateArgs): void {\n this.hostInputTemplate = args.inputTemplate;\n this.hostButtonsTemplate = args.buttonsTemplate;\n this.hostButtonsLeftTemplate = args.buttonsLeftTemplate;\n this.hostButtonsInsetTemplate = args.buttonsInsetTemplate;\n this.hostIconsInsetTemplate = args.iconsInsetTemplate;\n this.hostIconsInsetLeftTemplate = args.iconsInsetLeftTemplate;\n this.#changeRef.markForCheck();\n }\n\n /**\n * Returns an element inside the input box.\n * This can be used to query parts of a input box\n * that was populated through the `SkyInputBoxHostService`\n * @internal\n */\n public queryPopulatedElement(query: string): HTMLElement {\n return this.#adapterService.queryElement(this.#elementRef, query);\n }\n\n public setHintTextHidden(hide: boolean): void {\n this.hintTextHidden = hide;\n this.#changeRef.markForCheck();\n }\n\n public setHostHintText(value: string | undefined): void {\n this.hostHintText = value;\n this.#changeRef.markForCheck();\n }\n\n public setHintTextScreenReaderOnly(hide: boolean): void {\n this.hintTextScreenReaderOnly = hide;\n this.#changeRef.markForCheck();\n }\n\n #hasRequiredValidator(): boolean {\n return !!this.controlDir?.control?.hasValidator(Validators.required);\n }\n\n #updateHasFocus(hasFocus: boolean): void {\n // Some components manipulate the focus of elements inside an input box programmatically,\n // which can cause an `ExpressionChangedAfterItHasBeenCheckedError` if focus was set after\n // initial change detection. Using `setTimeout()` here fixes it.\n setTimeout(() => {\n this.formControlHasFocus = hasFocus;\n this.#changeRef.markForCheck();\n });\n }\n\n #controlHasErrors(control: AbstractControlDirective | undefined): boolean {\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n #updateInputRef(): void {\n if (!this.inputRef) {\n return;\n }\n\n const inputEl = this.inputRef.nativeElement as HTMLElement;\n\n // Check for the Angular required validator and add an aria-required attribute\n // to match. For template-driven forms, the input will have a `required` attribute\n // so the aria-required attribute is unnecessary.\n const hasRequiredValidator = this.#hasRequiredValidator();\n const ariaRequired = inputEl.ariaRequired;\n\n if (hasRequiredValidator && ariaRequired !== 'true') {\n inputEl.ariaRequired = 'true';\n } else if (!hasRequiredValidator && ariaRequired === 'true') {\n inputEl.ariaRequired = null;\n }\n\n if (this.hasErrorsComputed) {\n this.#renderer.setAttribute(inputEl, 'aria-invalid', 'true');\n this.#renderer.setAttribute(inputEl, 'aria-errormessage', this.errorId);\n } else {\n this.#renderer.removeAttribute(inputEl, 'aria-invalid');\n this.#renderer.removeAttribute(inputEl, 'aria-errormessage');\n }\n\n this.#adapterService.updateDescribedBy(\n this.inputRef,\n this.hintTextId,\n this.hintText ?? this.hostHintText,\n );\n\n if (this.inputRef !== this.#previousInputRef) {\n this.#renderer.addClass(inputEl, 'sky-form-control');\n this.#renderer.setAttribute(inputEl, 'id', this.controlId);\n\n this.#updateMaxLengthValidator();\n\n this.#previousInputRef = this.inputRef;\n }\n }\n\n #updateMaxLengthValidator(): void {\n const control = this.controlDir?.control;\n\n if (this.#previousMaxLengthValidator) {\n control?.removeValidators(this.#previousMaxLengthValidator);\n this.#previousMaxLengthValidator = undefined;\n }\n\n if (control && this.characterLimit !== undefined) {\n this.#previousMaxLengthValidator = Validators.maxLength(\n this.characterLimit,\n );\n\n control.addValidators([this.#previousMaxLengthValidator]);\n }\n }\n}\n","<div\n *skyThemeIf=\"'default'\"\n class=\"sky-input-box\"\n [ngClass]=\"{\n 'sky-input-box-disabled': isDisabled\n }\"\n>\n <div class=\"sky-form-group\">\n <div class=\"sky-input-box-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"labelTemplate\" /><ng-container\n *ngTemplateOutlet=\"inlineHelpTemplate\"\n />\n <ng-container *ngTemplateOutlet=\"characterCountTemplate\" />\n </div>\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"buttonsLeftTemplate\" />\n <div\n class=\"sky-input-box-input-group-inner\"\n [ngClass]=\"{\n 'sky-field-status-active': formControlHasFocus,\n 'sky-field-status-invalid': hasErrorsComputed\n }\"\n (focusin)=\"formControlFocusIn()\"\n (focusout)=\"formControlFocusOut()\"\n >\n <ng-container *ngTemplateOutlet=\"iconsInsetLeftTemplate\" />\n <ng-container *ngTemplateOutlet=\"inputTemplate\" />\n <ng-container *ngTemplateOutlet=\"buttonsInsetTemplate\" />\n <ng-container *ngTemplateOutlet=\"iconsInsetTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"hintTextTemplate\" />\n <ng-container *ngTemplateOutlet=\"errorLabelTemplate\" />\n </div>\n</div>\n\n<div\n *skyThemeIf=\"'modern'\"\n class=\"sky-input-box\"\n [ngClass]=\"{\n 'sky-input-box-disabled': isDisabled\n }\"\n>\n <div class=\"sky-input-box-group\">\n <ng-container *ngTemplateOutlet=\"buttonsLeftTemplate\" />\n <div\n class=\"sky-input-box-group-form-control\"\n [ngClass]=\"{\n 'sky-input-box-group-form-control-focus': formControlHasFocus,\n 'sky-input-box-group-form-control-invalid': hasErrorsComputed\n }\"\n (focusin)=\"formControlFocusIn()\"\n (focusout)=\"formControlFocusOut()\"\n >\n <div class=\"sky-form-group\">\n <ng-container *ngTemplateOutlet=\"iconsInsetLeftTemplate\" />\n <div class=\"sky-input-box-form-group-inner\">\n <div class=\"sky-input-box-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"labelTemplate\" /><ng-container\n *ngTemplateOutlet=\"inlineHelpTemplate\"\n />\n <ng-container *ngTemplateOutlet=\"characterCountTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"inputTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"buttonsInsetTemplate\" />\n <ng-container *ngTemplateOutlet=\"iconsInsetTemplate\" />\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\" />\n </div>\n <ng-container *ngTemplateOutlet=\"hintTextTemplate\" />\n <ng-container *ngTemplateOutlet=\"errorLabelTemplate\" />\n</div>\n\n<ng-template #labelTemplate>\n <ng-content select=\".sky-control-label\" />\n @if (labelText) {\n <label\n class=\"sky-control-label\"\n [attr.aria-label]=\"\n characterLimit !== undefined\n ? labelText +\n ' ' +\n ('skyux_character_count_message'\n | skyLibResources: characterCountScreenReader : characterLimit)\n : null\n \"\n [for]=\"controlId\"\n [id]=\"labelId\"\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >{{ labelText }}</label\n >\n }\n</ng-template>\n\n<ng-template #inlineHelpTemplate>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <sky-help-inline\n class=\"sky-control-help\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverContent]=\"helpPopoverContent\"\n [popoverTitle]=\"helpPopoverTitle\"\n />\n }\n <ng-content select=\".sky-control-help\" />\n</ng-template>\n\n<ng-template #characterCountTemplate>\n @if (characterLimit !== undefined) {\n <sky-character-counter-indicator\n [characterCount]=\"controlDir?.value?.length || 0\"\n [characterCountLimit]=\"characterLimit\"\n />\n }\n <ng-content select=\"sky-character-counter-indicator\" />\n</ng-template>\n\n<ng-template #inputTemplate>\n <ng-content\n select=\"input,select,.sky-form-control:not(textarea),sky-autocomplete,sky-text-editor\"\n />\n @if (hostInputTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostInputTemplate\" />\n }\n <ng-content select=\"textarea\" />\n</ng-template>\n\n<ng-template #buttonsLeftTemplate>\n <ng-content select=\".sky-input-group-btn.sky-input-box-btn-left\" />\n @if (hostButtonsLeftTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostButtonsLeftTemplate\" />\n }\n</ng-template>\n\n<ng-template #buttonsTemplate>\n <ng-content\n select=\".sky-input-group-btn:not(.sky-input-box-btn-left):not(.sky-input-box-btn-inset)\"\n />\n @if (hostButtonsTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostButtonsTemplate\" />\n }\n</ng-template>\n\n<ng-template #buttonsInsetTemplate>\n <ng-content select=\".sky-input-group-btn.sky-input-box-btn-inset\" />\n @if (hostButtonsInsetTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostButtonsInsetTemplate\" />\n }\n</ng-template>\n\n<ng-template #iconsInsetTemplate>\n <div class=\"sky-input-box-icon-inset-wrapper\" (click)=\"onInsetIconClick()\">\n <ng-content select=\".sky-input-group-icon.sky-input-box-icon-inset\" />\n @if (hostIconsInsetTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostIconsInsetTemplate\" />\n }\n </div>\n</ng-template>\n\n<ng-template #iconsInsetLeftTemplate>\n <div\n class=\"sky-input-box-icon-inset-left-wrapper\"\n (click)=\"onInsetIconClick()\"\n >\n <ng-content select=\".sky-input-group-icon.sky-input-box-icon-inset-left\" />\n @if (hostIconsInsetLeftTemplate) {\n <ng-container [ngTemplateOutlet]=\"hostIconsInsetLeftTemplate\" />\n }\n </div>\n</ng-template>\n\n<ng-template #errorLabelTemplate>\n <sky-form-errors\n [id]=\"errorId\"\n [errors]=\"controlDir?.errors\"\n [labelText]=\"labelText\"\n [touched]=\"controlDir?.touched\"\n [dirty]=\"controlDir?.dirty\"\n >\n <ng-content\n select=\"sky-form-error,span.sky-input-box-descendent-form-error\"\n />\n </sky-form-errors>\n <ng-content select=\".sky-error-label,.sky-error-indicator\" />\n</ng-template>\n\n<ng-template #hintTextTemplate>\n @if (hintText || hostHintText) {\n <div\n class=\"sky-input-box-hint-text\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'default',\n 'sky-font-hint-text-s': 'modern'\n }\"\n [ngClass]=\"{\n 'sky-input-box-hint-text-hidden': hintTextHidden,\n 'sky-screen-reader-only': hintTextScreenReaderOnly\n }\"\n [id]=\"hintTextId\"\n >\n {{ hintText | skyInputBoxHintText: hostHintText }}\n </div>\n }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyCharacterCounterModule } from '../character-counter/character-counter.module';\nimport { SkyFormErrorModule } from '../form-error/form-error.module';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyInputBoxControlDirective } from './input-box-control.directive';\nimport { SkyInputBoxHintTextPipe } from './input-box-hint-text.pipe';\nimport { SkyInputBoxComponent } from './input-box.component';\n\n@NgModule({\n declarations: [SkyInputBoxComponent],\n imports: [\n CommonModule,\n SkyCharacterCounterModule,\n SkyFormErrorsModule,\n SkyFormErrorModule,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyInputBoxControlDirective,\n SkyInputBoxHintTextPipe,\n SkyThemeModule,\n ],\n exports: [\n SkyInputBoxHintTextPipe,\n SkyInputBoxComponent,\n SkyInputBoxControlDirective,\n SkyFormErrorModule,\n ],\n})\nexport class SkyInputBoxModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NgControl,\n Validators,\n} from '@angular/forms';\nimport {\n SkyFileReaderService,\n SkyIdModule,\n SkyIdService,\n SkyLiveAnnouncerService,\n} from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { take } from 'rxjs/operators';\n\nimport { SkyFormErrorComponent } from '../../form-error/form-error.component';\nimport { SKY_FORM_ERRORS_ENABLED } from '../../form-error/form-errors-enabled-token';\nimport { SkyFormErrorsComponent } from '../../form-error/form-errors.component';\nimport { SkyInputBoxModule } from '../../input-box/input-box.module';\nimport { SkyFormsResourcesModule } from '../../shared/sky-forms-resources.module';\nimport { SkyFileAttachmentService } from '../file-attachment/file-attachment.service';\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileSizePipe } from '../shared/file-size.pipe';\nimport { SkyFileValidateFn } from '../shared/file-validate-function';\n\nimport { SkyFileDropChange } from './file-drop-change';\nimport { SkyFileLink } from './file-link';\n\nconst MAX_FILE_SIZE_DEFAULT = 500000;\nconst MIN_FILE_SIZE_DEFAULT = 0;\n\n/**\n * Provides an element to attach multiple files where users can browse or drag and drop local files\n * or provide hyperlinks to external files. You can leave the contents of the component\n * blank to display the drop zone's default UI, or you can specify custom content to\n * display instead. When the module initializes, it disables the ability to drag and\n * drop files for the entire window to prevent the browser from opening files that are\n * accidentally dropped outside the target zone. If you implement your own file drop functionality\n * outside of the file drop component, you can place the `sky-file-drop-target` CSS class\n * on the element that receives drop events to exempt it from the drop exclusion rule.\n */\n@Component({\n selector: 'sky-file-drop',\n templateUrl: './file-drop.component.html',\n styleUrls: ['./file-drop.component.scss'],\n providers: [\n SkyFileAttachmentService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyFileSizePipe,\n SkyFormErrorComponent,\n SkyFormErrorsComponent,\n SkyFormsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyInputBoxModule,\n SkyThemeModule,\n ],\n})\nexport class SkyFileDropComponent implements OnDestroy, ControlValueAccessor {\n /**\n * Fires when users add or remove files.\n */\n @Output()\n public filesChanged = new EventEmitter<SkyFileDropChange>();\n\n /**\n * Fires when the link input box triggers a blur event.\n */\n @Output()\n public linkInputBlur = new EventEmitter<void>();\n\n /**\n * Fires when users add or remove links.\n */\n @Output()\n public linkChanged = new EventEmitter<SkyFileLink>();\n\n /**\n * The ARIA label for the file upload button. This provides a text equivalent for\n * screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @default \"Drag a file here or click to browse\"\n */\n @Input()\n public fileUploadAriaLabel: string | undefined;\n\n /**\n * The ARIA label for the link upload input. This sets the button's `aria-label` attribute to provide a text equivalent for\n * screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @default \"Link to a file\"\n */\n @Input()\n public linkUploadAriaLabel: string | undefined;\n\n /**\n * The hint text for the link upload input.\n */\n @Input()\n public linkUploadHintText: string | undefined;\n\n /**\n * The minimum size in bytes for valid files.\n * @default 0\n */\n @Input()\n public set minFileSize(value: number | undefined) {\n this.#_minFileSize = value ?? MIN_FILE_SIZE_DEFAULT;\n }\n\n public get minFileSize(): number {\n return this.#_minFileSize;\n }\n\n /**\n * The maximum size in bytes for valid files.\n * @default 500000\n */\n @Input()\n public set maxFileSize(value: number | undefined) {\n this.#_maxFileSize = value ?? MAX_FILE_SIZE_DEFAULT;\n }\n\n public get maxFileSize(): number {\n return this.#_maxFileSize;\n }\n\n /**\n * Whether users can drag and drop multiple files at the same time.\n */\n @Input()\n public multiple: boolean | undefined = true;\n\n /**\n * The custom validation function. This validation runs alongside the internal\n * file validation. This function takes a `SkyFileItem` object as a parameter.\n * The string returned is used as the error message in multi-file attachment.\n */\n @Input()\n public validateFn: SkyFileValidateFn | undefined;\n\n /**\n * The comma-delimited string literal of MIME types that users can attach.\n * By default, all file types are allowed.\n * @required\n */\n @Input()\n public acceptedTypes: string | undefined;\n\n /**\n * A custom error message to display when a file doesn't match the accepted types.\n * This replaces a default error message that lists all accepted types.\n */\n @Input()\n public acceptedTypesErrorMessage: string | undefined;\n\n /**\n * Whether to disable the option to browse for files to attach.\n */\n @Input()\n public noClick: boolean | undefined = false;\n\n /**\n * Whether to display the option to attach files from URLs rather than from local devices.\n */\n @Input()\n public allowLinks: boolean | undefined = false;\n\n /**\n * The text to display as the file attachment's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether to hide `labelText` from view.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * Whether uploading a file or link is required.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input elements so that screen readers announce an invalid state until the input element\n * is complete.\n * For more information about the `aria-required` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-required).\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the file attachment label. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * Whether the file attachment is stacked on another form component. When specified, the appropriate\n * vertical spacing is automatically added to the file attachment.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the file attachment label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n @ViewChild('fileInput')\n public inputEl: ElementRef | undefined;\n\n public rejectedOver = false;\n public acceptedOver = false;\n public linkUrl: string | undefined;\n\n #enterEventTarget: any;\n\n #_maxFileSize = MAX_FILE_SIZE_DEFAULT;\n\n #_minFileSize = MIN_FILE_SIZE_DEFAULT;\n\n #notifyTouched: (() => void) | undefined;\n #notifyChange:\n | ((_: (SkyFileItem | SkyFileLink)[] | undefined | null) => void)\n | undefined;\n #_uploadedFiles: (SkyFileItem | SkyFileLink)[] = [];\n\n readonly #fileAttachmentService = inject(SkyFileAttachmentService);\n readonly #fileReaderSvc = inject(SkyFileReaderService);\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n readonly #idSvc = inject(SkyIdService);\n\n protected errorId = this.#idSvc.generateId();\n\n protected ngControl = inject(NgControl, { optional: true });\n\n protected rejectedFiles: SkyFileItem[] = [];\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnDestroy(): void {\n this.filesChanged.complete();\n this.linkChanged.complete();\n this.linkInputBlur.complete();\n }\n\n public writeValue(value: unknown): void {\n if (Array.isArray(value)) {\n const linkUploads: SkyFileLink[] = [];\n const fileUploads: SkyFileItem[] = [];\n\n value.forEach((file) => {\n if ('url' in file && file.url !== undefined) {\n if (!('file' in file)) {\n linkUploads.push(file);\n } else if ('file' in file && file.file !== undefined) {\n fileUploads.push(file);\n }\n }\n });\n\n if (!(linkUploads.length > 0) && !(fileUploads.length > 0)) {\n this.#notifyChange?.(null);\n } else {\n this.#_uploadedFiles = [];\n\n if (linkUploads.length > 0) {\n linkUploads.forEach((file) => {\n this.uploadLink(file);\n });\n }\n if (fileUploads.length > 0) {\n // this prevents FormControl from setting an invalid value before the async\n // processes in #handleFile is complete\n this.#notifyChange?.(null);\n this.#handleFiles(fileUploads);\n }\n }\n } else {\n this.#notifyChange?.(null);\n }\n }\n\n public registerOnChange(fn: any): void {\n this.#notifyChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#notifyTouched = fn;\n }\n\n public dropClicked(): void {\n if (!this.noClick && this.inputEl) {\n this.#notifyTouched?.();\n this.inputEl.nativeElement.click();\n }\n }\n\n public fileChangeEvent(fileChangeEvent: Event): void {\n /** Set a timeout here to allow the browser to regain context from the system dialog. Without this, error messages do not read out correctly to screen readers. */\n setTimeout(() => {\n this.#handleFiles(\n (fileChangeEvent.target as HTMLInputElement | undefined)?.files,\n );\n }, 500);\n }\n\n public fileDragEnter(dragEnterEvent: DragEvent): void {\n // Save this target to know when the drag event leaves\n this.#enterEventTarget = dragEnterEvent.target;\n dragEnterEvent.stopPropagation();\n dragEnterEvent.preventDefault();\n }\n\n public fileDragOver(dragOverEvent: DragEvent): void {\n const transfer = dragOverEvent.dataTransfer;\n\n dragOverEvent.stopPropagation();\n dragOverEvent.preventDefault();\n\n if (transfer) {\n if (transfer.items) {\n const files = Array.from(transfer.items);\n\n for (const file of files) {\n if (\n file.type &&\n this.#fileAttachmentService.fileTypeRejected(\n file.type,\n this.acceptedTypes,\n )\n ) {\n this.rejectedOver = true;\n this.acceptedOver = false;\n return;\n }\n }\n\n if (files.length > 0 && !this.acceptedOver) {\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n } /* istanbul ignore next: untestable */ else if (transfer.files) {\n // If the browser does not support DataTransfer.items,\n // defer file-type checking to drop handler.\n // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility\n this.rejectedOver = false;\n this.acceptedOver = true;\n }\n }\n }\n\n public fileDrop(dropEvent: DragEvent): void {\n dropEvent.stopPropagation();\n dropEvent.preventDefault();\n\n this.#notifyTouched?.();\n\n this.#enterEventTarget = undefined;\n this.rejectedOver = false;\n this.acceptedOver = false;\n\n if (dropEvent.dataTransfer && dropEvent.dataTransfer.files) {\n const hasDirectory = this.#fileAttachmentService.hasDirectory(\n dropEvent.dataTransfer.files,\n );\n const invalidNumberOfFiles =\n !this.multiple && dropEvent.dataTransfer.files.length > 1;\n\n if (hasDirectory || invalidNumberOfFiles) {\n return;\n }\n\n this.#handleFiles(dropEvent.dataTransfer.files);\n }\n }\n\n public fileDragLeave(dragLeaveEvent: any): void {\n if (this.#enterEventTarget === dragLeaveEvent.target) {\n this.rejectedOver = false;\n this.acceptedOver = false;\n }\n }\n\n public addLinkEnter(event: KeyboardEvent): void {\n if (event.which === 13) {\n this.addLink(event);\n }\n }\n\n public addLink(event: Event): void {\n event.preventDefault();\n this.uploadLink({ url: this.linkUrl } as SkyFileLink);\n this.linkUrl = undefined;\n this.#notifyTouched?.();\n }\n\n protected uploadLink(file: SkyFileLink): void {\n this.linkChanged.emit(file);\n this.#_uploadedFiles?.push(file);\n this.#notifyChange?.(this.#_uploadedFiles);\n this.#announceState(\n 'skyux_file_attachment_file_upload_link_added',\n file.url,\n );\n }\n\n public onLinkBlur(): void {\n this.#notifyTouched?.();\n this.linkInputBlur.emit();\n }\n\n protected get isRequired(): boolean {\n return (\n this.required ||\n (this.ngControl?.control?.hasValidator(Validators.required) ?? false)\n );\n }\n\n #announceState(resourceString: string, ...args: any[]): void {\n this.#resourcesSvc\n .getString(resourceString, ...args)\n .pipe(take(1))\n .subscribe((internationalizedString) => {\n this.#liveAnnouncerSvc.announce(internationalizedString);\n });\n }\n\n #emitFileChangeEvent(\n totalFiles: number,\n rejectedFileArray: SkyFileItem[],\n validFileArray: SkyFileItem[],\n ): void {\n if (totalFiles === rejectedFileArray.length + validFileArray.length) {\n this.filesChanged.emit({\n files: validFileArray,\n rejectedFiles: rejectedFileArray,\n } as SkyFileDropChange);\n\n if (this.inputEl) {\n this.inputEl.nativeElement.value = '';\n }\n }\n }\n\n #filesRejected(\n file: SkyFileItem,\n validFileArray: SkyFileItem[],\n rejectedFileArray: SkyFileItem[],\n totalFiles: number,\n ): void {\n rejectedFileArray.push(file);\n this.#notifyChange?.(\n this.#_uploadedFiles.length > 0 ? this.#_uploadedFiles : null,\n );\n this.#emitFileChangeEvent(totalFiles, rejectedFileArray, validFileArray);\n }\n\n async #loadFile(\n fileDrop: SkyFileDropComponent,\n file: SkyFileItem,\n validFileArray: SkyFileItem[],\n rejectedFileArray: SkyFileItem[],\n totalFiles: number,\n ): Promise<void> {\n try {\n file.url = await this.#fileReaderSvc.readAsDataURL(file.file);\n\n validFileArray.push(file);\n fileDrop.#emitFileChangeEvent(\n totalFiles,\n rejectedFileArray,\n validFileArray,\n );\n this.#announceState(\n 'skyux_file_attachment_file_upload_file_added',\n file.file.name,\n );\n this.#_uploadedFiles?.push(file);\n this.#notifyChange?.(this.#_uploadedFiles);\n } catch {\n fileDrop.#filesRejected(\n file,\n validFileArray,\n rejectedFileArray,\n totalFiles,\n );\n }\n }\n\n #handleFiles(fileList?: FileList | null | SkyFileItem[]): void {\n if (fileList) {\n const validFileArray: SkyFileItem[] = [];\n const rejectedFileArray: SkyFileItem[] = [];\n const totalFiles = fileList.length;\n\n let files: SkyFileItem[] = [];\n\n if ('item' in fileList) {\n for (let index = 0; index < fileList.length; index++) {\n files.push({\n file: fileList.item(index),\n } as SkyFileItem);\n }\n } else {\n files = fileList;\n }\n\n const processedFiles = this.#fileAttachmentService.checkFiles(\n files,\n this.minFileSize,\n this.maxFileSize,\n this.acceptedTypes,\n this.validateFn,\n );\n\n for (const file of processedFiles) {\n if (file.errorType) {\n this.#filesRejected(\n file,\n validFileArray,\n rejectedFileArray,\n totalFiles,\n );\n } else {\n void this.#loadFile(\n this,\n file,\n validFileArray,\n rejectedFileArray,\n totalFiles,\n );\n }\n }\n\n this.rejectedFiles = rejectedFileArray;\n }\n }\n}\n","<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\n class=\"sky-file-upload-icon\"\n iconName=\"arrow-upload\"\n iconSize=\"xl\"\n />\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\n class=\"sky-file-upload-icon sky-file-upload-icon-target\"\n iconName=\"target\"\n iconSize=\"xl\"\n />\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\n class=\"sky-file-upload-icon sky-file-upload-icon-close\"\n iconName=\"prohibited\"\n iconSize=\"xl\"\n />\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.url) {\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","import {\n Component,\n DoCheck,\n EventEmitter,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n Output,\n inject,\n} from '@angular/core';\nimport { SkyLiveAnnouncerService } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyIconModule } from '@skyux/icon';\n\nimport { take } from 'rxjs/operators';\n\nimport { SkyFormsResourcesModule } from '../../shared/sky-forms-resources.module';\nimport { SkyFileItem } from '../shared/file-item';\nimport { SkyFileItemService } from '../shared/file-item.service';\nimport { SkyFileSizePipe } from '../shared/file-size.pipe';\n\nimport { SkyFileLink } from './file-link';\n\n@Component({\n imports: [SkyFileSizePipe, SkyFormsResourcesModule, SkyIconModule],\n selector: 'sky-file-item',\n styleUrl: './file-item.component.scss',\n templateUrl: './file-item.component.html',\n})\nexport class SkyFileItemComponent implements DoCheck {\n /**\n * The summary information to display about file attachments. For local files,\n * the default summary includes the file name, file size, file preview, and a delete button.\n * For external files, the default summary includes the URL and a delete button.\n * You can include additional inputs to display user-entered metadata.\n * @required\n */\n @Input()\n public set fileItem(value: SkyFileItem | SkyFileLink | undefined) {\n this.#_fileItem = value;\n if (value && 'file' in value) {\n this.isFile = this.#fileItemService.isFile(value);\n this.isImage = this.#fileItemService.isImage(value);\n this.fileName = value.file.name;\n this.fileSize = value.file.size;\n } else {\n this.isFile = this.isImage = false;\n this.fileName = '';\n this.fileSize = undefined;\n }\n this.url = value?.url ?? '';\n }\n\n public get fileItem(): SkyFileItem | SkyFileLink | undefined {\n return this.#_fileItem;\n }\n\n /**\n * Fires when users select the delete button for an item. The deleted item is passed to the\n * function.\n */\n @Output()\n public deleteFile = new EventEmitter<SkyFileLink | SkyFileItem>();\n\n public fileName = '';\n\n public fileSize: number | undefined;\n\n public url = '';\n\n public icon: string | undefined;\n\n public isFile = false;\n public isImage = false;\n\n #_fileItem: SkyFileItem | SkyFileLink | undefined;\n\n #differ: KeyValueDiffer<any, any>;\n #fileItemService: SkyFileItemService;\n\n readonly #liveAnnouncerSvc = inject(SkyLiveAnnouncerService);\n\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n\n constructor(differs: KeyValueDiffers, fileItemService: SkyFileItemService) {\n this.#differ = differs.find({}).create();\n this.#fileItemService = fileItemService;\n }\n\n public ngDoCheck(): void {\n if (this.fileItem) {\n const changes = this.#differ.diff(this.fileItem);\n\n if (changes) {\n let cls: string | undefined;\n const extensionUpper = this.#fileItemService.getFileExtensionUpper(\n this.fileItem as SkyFileItem,\n );\n let fileTypeUpper: string;\n\n switch (extensionUpper) {\n case '.PDF':\n cls = 'pdf';\n break;\n case '.GZ':\n case '.RAR':\n case '.TGZ':\n case '.ZIP':\n cls = 'archive';\n break;\n case '.PPT':\n case '.PPTX':\n cls = 'ppt';\n break;\n case '.DOC':\n case '.DOCX':\n cls = 'doc';\n break;\n case '.XLS':\n case '.XLSX':\n cls = 'xls';\n break;\n case '.TXT':\n cls = 'text';\n break;\n case '.HTM':\n case '.HTML':\n cls = 'chevron-double';\n break;\n default:\n break;\n }\n\n if (!cls) {\n fileTypeUpper = this.#fileItemService.getFileTypeUpper(\n this.fileItem as SkyFileItem,\n );\n\n switch (fileTypeUpper.substr(0, fileTypeUpper.indexOf('/'))) {\n case 'AUDIO':\n cls = 'audio';\n break;\n case 'IMAGE':\n // Normally images are displayed as thumbnails, but if an image type is not recognized\n // as being widely supported by modern browsers (e.g. TIFF files) then an icon should\n // be displayed instead.\n cls = 'image';\n break;\n case 'TEXT':\n cls = 'text';\n break;\n case 'VIDEO':\n cls = 'video';\n break;\n default:\n break;\n }\n }\n this.icon = 'document' + (cls ? '-' + cls : '');\n }\n } else {\n this.icon = undefined;\n }\n }\n\n public itemDelete(): void {\n this.deleteFile.emit(this.fileItem);\n if (!this.isFile) {\n this.#resourcesSvc\n .getString('skyux_file_attachment_file_upload_link_removed', this.url)\n .pipe(take(1))\n .subscribe((resourceString) => {\n this.#liveAnnouncerSvc.announce(resourceString);\n });\n } else {\n this.#resourcesSvc\n .getString(\n 'skyux_file_attachment_file_upload_file_removed',\n this.fileName,\n )\n .pipe(take(1))\n .subscribe((resourceString) => {\n this.#liveAnnouncerSvc.announce(resourceString);\n });\n }\n }\n}\n","@if (fileItem) {\n <div class=\"sky-file-item\">\n <div class=\"sky-file-item-title\">\n <div class=\"sky-file-item-name-container\">\n <div class=\"sky-file-item-name\">\n @if (isFile) {\n {{ fileName }}\n } @else {\n {{ url }}\n }\n </div>\n @if (isFile) {\n <div class=\"sky-file-item-size\">({{ fileSize | skyFileSize }})</div>\n }\n </div>\n <div class=\"sky-file-item-controls\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-file-item-btn-delete\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_delete'\n | skyLibResources: (isFile ? fileName : url)\n \"\n (click)=\"itemDelete()\"\n >\n <sky-icon iconName=\"delete\" />\n </button>\n </div>\n </div>\n <div class=\"sky-file-item-content\">\n <div class=\"sky-file-item-preview\">\n @if (isImage) {\n <div class=\"sky-file-item-preview-img-container\">\n <img\n class=\"sky-file-item-preview-img\"\n [src]=\"url\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n />\n </div>\n } @else if (icon) {\n <div class=\"sky-file-item-preview-other\">\n <sky-icon iconSize=\"xxxl\" [iconName]=\"icon\" />\n </div>\n }\n </div>\n <div class=\"sky-file-item-content-custom\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFormErrorModule } from '../../form-error/form-error.module';\n\nimport { SkyFileDropComponent } from './file-drop.component';\nimport { SkyFileItemComponent } from './file-item.component';\n\n@NgModule({\n exports: [SkyFileDropComponent, SkyFileItemComponent, SkyFormErrorModule],\n imports: [SkyFileDropComponent, SkyFileItemComponent],\n})\nexport class SkyFileDropModule {}\n","import { NgModule } from '@angular/core';\n\nimport { SkyFileAttachmentModule } from './file-attachment/file-attachment.module';\nimport { SkyFileDropModule } from './file-drop/file-drop.module';\n\n/**\n * @deprecated Import either `SkyFileAttachmentModule` or `SkyFileDropModule`.\n */\n@NgModule({\n exports: [SkyFileAttachmentModule, SkyFileDropModule],\n imports: [SkyFileAttachmentModule, SkyFileDropModule],\n})\nexport class SkyFileAttachmentsModule {}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Tracks the element IDs for all radios within a radio group.\n * @internal\n */\n@Injectable()\nexport class SkyRadioGroupIdService {\n public get radioIds(): Observable<string[]> {\n return this.#radioIdsObs;\n }\n\n #radioIds: Map<string, string>;\n #radioIds$: BehaviorSubject<string[]>;\n #radioIdsObs: Observable<string[]>;\n\n constructor() {\n this.#radioIds = new Map();\n this.#radioIds$ = new BehaviorSubject<string[]>([]);\n this.#radioIdsObs = this.#radioIds$.asObservable();\n }\n\n /**\n * Associates a radio input's ID with its parent radio group.\n * @param {string} id A unique ID for the radio component.\n * @param {string} inputElementId The ID applied to the radio input element.\n */\n public register(id: string, inputElementId: string): void {\n if (!this.#radioIds.has(id) || this.#radioIds.get(id) !== inputElementId) {\n this.#radioIds.set(id, inputElementId);\n this.#emitRadioIds();\n }\n }\n\n /**\n * Disassociates a radio input's ID with its parent radio group.\n * @param {string} id The ID used to register the radio component.\n */\n public unregister(id: string): void {\n if (this.#radioIds.has(id)) {\n this.#radioIds.delete(id);\n this.#emitRadioIds();\n }\n }\n\n #emitRadioIds(): void {\n this.#radioIds$.next(Array.from(this.#radioIds.values()));\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Provider,\n TemplateRef,\n booleanAttribute,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyRadioGroupIdService } from './radio-group-id.service';\nimport { SkyRadioChange } from './types/radio-change';\nimport { SkyRadioType } from './types/radio-type';\n\n/**\n * Provider Expression that allows sky-radio to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n */\nconst SKY_RADIO_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyRadioComponent),\n multi: true,\n};\n\n/**\n * Renders a SKY UX-themed replacement for an HTML `input` element\n * with `type=\"radio\"`. When users select a radio button, its value is driven through an\n * `ngModel` attribute that you specify on the `sky-radio` element or the parent `sky-radio-group` element.\n */\n@Component({\n selector: 'sky-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [SKY_RADIO_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [SkyThemeComponentClassDirective],\n standalone: false,\n})\nexport class SkyRadioComponent implements OnDestroy, ControlValueAccessor {\n /**\n * Fires when users focus off a radio button.\n */\n public blur = new Subject<void>();\n\n /**\n * Whether the radio button is selected.\n * @default false\n */\n @Input()\n public set checked(value: boolean | undefined) {\n const newCheckedState = !!value;\n\n if (this.#_checked !== newCheckedState) {\n this.#_checked = newCheckedState;\n this.checkedChange.next(newCheckedState);\n\n if (newCheckedState) {\n this.selectedValue = this.value;\n }\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public get checked(): boolean {\n return this.#_checked;\n }\n\n /**\n * Whether to disable the input on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (value !== this.disabled) {\n this.#_disabled = value;\n this.disabledChange.next(value);\n this.#changeDetector.markForCheck();\n }\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The ID for the radio button.\n * If a value is not provided, an autogenerated ID is used.\n */\n @Input()\n public set id(value: string | undefined) {\n if (value) {\n this.inputId = `sky-radio-${value}-input`;\n } else {\n this.inputId = `sky-radio-${this.#defaultId}-input`;\n }\n this.#radioGroupIdSvc?.register(this.#defaultId, this.inputId);\n }\n\n /**\n * The ARIA label for the radio button. This sets the radio button's `aria-label`\n * attribute to provide a text equivalent for screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)\n * when the radio button does not include a visible label. You must set this property for icon\n * radio buttons. If the radio button includes a visible label, use `labelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set label(value: string | undefined) {\n this.#_label = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioComponent.label', {\n deprecationMajorVersion: 10,\n replacementRecommendation: 'Use the `labelText` input instead.',\n });\n }\n }\n\n public get label(): string | undefined {\n return this.#_label;\n }\n\n /**\n * The HTML element ID of the element that labels\n * the radio button. This sets the radio button's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the radio button does not include a visible label, use `label` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n * @deprecated Use `labelText` instead.\n */\n @Input()\n public set labelledBy(value: string | undefined) {\n this.#_labelledBy = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioComponent.labelledBy', {\n deprecationMajorVersion: 10,\n replacementRecommendation: 'Use the `labelText` input instead.',\n });\n }\n }\n\n public get labelledBy(): string | undefined {\n return this.#_labelledBy;\n }\n\n /**\n * This property is deprecated in favor of the `name` property on the `sky-radio-group element`.\n * We recommend using the `sky-radio-group` element with all radio buttons, but if you opt not to,\n * then this property specifies a name for a group of radio buttons.\n * @deprecated\n */\n @Input()\n public set name(value: string | undefined) {\n this.#_name = value;\n this.#changeDetector.markForCheck();\n }\n\n public get name(): string | undefined {\n return this.#_name;\n }\n\n /**\n * This property is deprecated in favor of\n * the `tabIndex` property on the `sky-radio-group` element. It specifies an index for the radio\n * button. If the index is not defined, it is set to the position of the radio button on load.\n * @deprecated\n */\n @Input()\n public set tabindex(value: number | undefined) {\n console.warn(\n 'The sky-radio `tabindex` property is deprecated. Please use the `tabindex` property on the sky-radio-group component.',\n );\n if (value) {\n this.#_tabindex = value;\n } else {\n this.#_tabindex = 0;\n }\n this.#changeDetector.markForCheck();\n }\n public get tabindex(): number {\n return this.#_tabindex;\n }\n\n // For setting the tabindex from the radio group\n public set groupTabIndex(value: number | undefined) {\n if (value) {\n this.#_tabindex = value;\n } else {\n this.#_tabindex = 0;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n /**\n * The value bound to the radio button's `value` property. The value usually\n * corresponds to the radio button's label, which you specify with the `sky-radio-label`\n * component.\n * @required\n */\n @Input()\n public set value(value: any) {\n /* istanbul ignore else */\n if (this.#_value !== value) {\n if (this.selectedValue && this.selectedValue === this.#_value) {\n this.selectedValue = value;\n this.#onChangeCallback(this.selectedValue);\n this.#onTouchedCallback();\n }\n\n this.#_value = value;\n }\n\n this.#changeDetector.markForCheck();\n }\n\n public get value(): any {\n return this.#_value;\n }\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to radio button. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The SVG icon to display in place of the radio button. To group radio buttons like in\n * the demo above, place the `sky-switch-icon-group` class on the direct parent element of the\n * radio buttons.\n */\n @Input()\n public iconName: string | undefined;\n\n /**\n * The background color type after users select an icon radio button.\n * The valid options correspond\n * [the label component's](https://developer.blackbaud.com/skyux/components/label)\n * label types. `danger` creates a red background, `info` creates a blue background,\n * `success` creates a green background, and `warning` creates an orange background.\n * @default \"info\"\n * @deprecated radioType is no longer supported\n */\n @Input()\n public get radioType(): SkyRadioType {\n return this.#_radioType;\n }\n public set radioType(value: SkyRadioType | undefined) {\n if (value) {\n this.#logger.deprecated('SkyRadioComponent.radioType', {\n deprecationMajorVersion: 7,\n });\n }\n\n this.#_radioType = value ?? 'info';\n }\n\n /**\n * The text to display as the radio button's label. Use this instead of the `sky-radio-label` when the label is text-only.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Indicates whether to hide the `labelText`.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the radio button label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Fires when users select a radio button.\n */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n public change = new EventEmitter<SkyRadioChange>();\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n public checkedChange = new EventEmitter<boolean>();\n\n /**\n * Fires when the selected value changes.\n */\n @Output()\n public disabledChange = new EventEmitter<boolean>();\n\n public set selectedValue(value: any) {\n if (value !== this.#_selectedValue) {\n this.#_selectedValue = value;\n }\n }\n public get selectedValue(): any {\n return this.#_selectedValue;\n }\n\n public radioGroupDisabled = false;\n\n protected inputId = '';\n\n #_checked = false;\n #_disabled = false;\n #_name: string | undefined;\n #_radioType: SkyRadioType = 'info';\n #_selectedValue: unknown;\n #_tabindex = 0;\n #_value: any;\n #_label: string | undefined;\n #_labelledBy: string | undefined;\n\n #changeDetector = inject(ChangeDetectorRef);\n #defaultId = inject(SkyIdService).generateId();\n #radioGroupIdSvc = inject(SkyRadioGroupIdService, { optional: true });\n #logger = inject(SkyLogService);\n\n constructor() {\n this.id = this.#defaultId;\n }\n\n public ngOnDestroy(): void {\n this.#radioGroupIdSvc?.unregister(this.#defaultId);\n this.#removeUniqueSelectionListener();\n this.change.complete();\n this.checkedChange.complete();\n this.disabledChange.complete();\n }\n\n public writeValue(value: unknown): void {\n if (value === undefined) {\n return;\n }\n\n this.selectedValue = value;\n this.checked = this.value === this.selectedValue;\n\n this.#changeDetector.markForCheck();\n }\n\n /**\n * @internal\n * Whether to disable the control. Implemented as a part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public setGroupDisabledState(isDisabled: boolean): void {\n this.radioGroupDisabled = isDisabled;\n this.#changeDetector.markForCheck();\n }\n\n public registerOnChange(fn: any): void {\n this.#onChangeCallback = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.#onTouchedCallback = fn;\n }\n\n public onInputChange(event: Event): void {\n event.stopPropagation();\n\n if (!this.disabled) {\n this.checked = true;\n this.change.next({\n value: this.value,\n });\n\n this.onInputFocusChange();\n this.#onChangeCallback(this.value);\n }\n }\n\n public onInputFocusChange(): void {\n this.#onTouchedCallback();\n this.blur.next();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #removeUniqueSelectionListener = (): void => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onChangeCallback = (value: any): void => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouchedCallback = (): void => {};\n}\n","<span class=\"sky-radio-outer-wrapper\">\n <label\n class=\"sky-radio-wrapper sky-switch\"\n [ngClass]=\"{ 'sky-switch-disabled': disabled || radioGroupDisabled }\"\n >\n <input\n class=\"sky-radio-input sky-switch-input\"\n type=\"radio\"\n [attr.aria-label]=\"labelText || label\"\n [attr.aria-labelledby]=\"labelText ? undefined : labelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [checked]=\"checked\"\n [disabled]=\"disabled || radioGroupDisabled\"\n [id]=\"inputId\"\n [name]=\"name\"\n [tabIndex]=\"tabindex\"\n [value]=\"value\"\n (blur)=\"onInputFocusChange()\"\n (change)=\"onInputChange($event)\"\n />\n <span\n class=\"sky-switch-control\"\n [ngClass]=\"{\n 'sky-switch-control-icon': iconName,\n 'sky-rounded-circle': !iconName,\n 'sky-switch-control-info': iconName && radioType === 'info',\n 'sky-switch-control-success': iconName && radioType === 'success',\n 'sky-switch-control-warning': iconName && radioType === 'warning',\n 'sky-switch-control-danger': iconName && radioType === 'danger'\n }\"\n >\n @if (iconName) {\n <sky-icon [iconName]=\"iconName\" />\n }\n </span>\n @if (labelText) {\n <span\n class=\"sky-switch-label sky-radio-label-text\"\n [class.sky-screen-reader-only]=\"labelHidden\"\n >{{ labelText }}</span\n >\n } @else {\n <ng-content select=\"sky-radio-label\" />\n }\n </label>\n @if ((helpPopoverContent || helpKey) && labelText) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n class=\"sky-radio-help-inline\"\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n</span>\n<div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-radio-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","import {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n HostBinding,\n Input,\n OnDestroy,\n Optional,\n QueryList,\n Self,\n TemplateRef,\n booleanAttribute,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\nimport { SkyThemeComponentClassDirective } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SKY_FORM_ERRORS_ENABLED } from '../form-error/form-errors-enabled-token';\n\nimport { SkyRadioGroupIdService } from './radio-group-id.service';\nimport { SkyRadioComponent } from './radio.component';\nimport { SkyRadioChange } from './types/radio-change';\nimport { SkyRadioGroupHeadingLevel } from './types/radio-group-heading-level';\nimport { SkyRadioGroupHeadingStyle } from './types/radio-group-heading-style';\n\nlet nextUniqueId = 0;\n\nfunction numberAttribute4(value: unknown): number {\n return numberAttribute(value, 4);\n}\n\n/**\n * Organizes radio buttons into a group. It is required for radio\n * buttons on Angular reactive forms, and we recommend using it with all radio buttons.\n * On Angular forms, the component manages the selected values and keeps the forms up-to-date.\n * When users select a radio button, its value is driven through an `ngModel` attribute that you specify on the `sky-radio-group` element.\n */\n@Component({\n selector: 'sky-radio-group',\n templateUrl: './radio-group.component.html',\n styleUrls: ['./radio-group.component.scss'],\n providers: [\n SkyRadioGroupIdService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n hostDirectives: [SkyThemeComponentClassDirective],\n standalone: false,\n})\nexport class SkyRadioGroupComponent implements AfterContentInit, OnDestroy {\n /**\n * The HTML element ID of the element that labels\n * the radio button group. This sets the radio button group's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the radio button group does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n * @deprecated Use `headingText` instead.\n */\n @Input()\n public set ariaLabelledBy(value: string | undefined) {\n this.#_ariaLabelledBy = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioGroupComponent.ariaLabelledBy', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get ariaLabelledBy(): string | undefined {\n return this.#_ariaLabelledBy;\n }\n\n /**\n * The ARIA label for the radio button group. This sets the\n * radio button group's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the radio button group includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use `headingText` instead.\n */\n @Input()\n public set ariaLabel(value: string | undefined) {\n this.#_ariaLabel = value;\n\n if (value) {\n this.#logger.deprecated('SkyRadioGroupComponent.ariaLabel', {\n deprecationMajorVersion: 9,\n });\n }\n }\n\n public get ariaLabel(): string | undefined {\n return this.#_ariaLabel;\n }\n\n /**\n * Whether to disable the input on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (this.#_disabled !== value) {\n this.#_disabled = value;\n this.#updateRadioButtonDisabled();\n }\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n /**\n * The semantic heading level in the document structure. By default, the heading text is not wrapped in a heading element.\n */\n @Input({ transform: numberAttribute })\n public set headingLevel(value: SkyRadioGroupHeadingLevel | undefined) {\n this.#_headingLevel = value && !isNaN(value) ? value : undefined;\n this.#updateStackedClasses();\n }\n\n public get headingLevel(): SkyRadioGroupHeadingLevel | undefined {\n return this.#_headingLevel;\n }\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 4\n */\n @Input({ transform: numberAttribute4 })\n public set headingStyle(value: SkyRadioGroupHeadingStyle) {\n this.headingClass = `sky-font-heading-${value}`;\n }\n\n /**\n * The name for the collection of radio buttons that the component groups together.\n * This property overwrites the deprecated `name` property on individual `sky-radio` elements,\n * and it is required unless the `name` property is set on individual `sky-radio` elements.\n * @required\n */\n @Input()\n public set name(value: string | undefined) {\n if (value) {\n this.#_name = value;\n } else {\n this.#_name = this.#defaultName;\n }\n this.#updateRadioButtonNames();\n }\n public get name(): string {\n return this.#_name;\n }\n\n /**\n * Whether the input is required for form validation.\n * When you set this property to `true`, the component adds `aria-required` and `required`\n * attributes to the input element so that forms display an invalid state until the input element\n * is complete.\n * For more information about the `aria-required` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-required).\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * Whether the radio button group is stacked on another form component. When specified,\n * the appropriate vertical spacing is automatically added to the radio button group.\n */\n @Input({ transform: booleanAttribute })\n public set stacked(value: boolean) {\n this.#_stacked = value;\n this.#updateStackedClasses();\n }\n\n public get stacked(): boolean {\n return this.#_stacked;\n }\n\n /**\n * The value of the radio button to select by default when the group loads.\n * The value corresponds to the `value` property of an individual `sky-radio` element within the\n * group.\n */\n // TODO: Look into more strongly typing in a breaking change\n @Input()\n public set value(value: any) {\n const isNewValue = value !== this.#controlValue;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this.#controlValue = value;\n this.#onChange(value);\n this.#updateCheckedRadioFromValue();\n }\n }\n\n /**\n * The index for all the radio buttons in the group. If the index is not defined,\n * the indices for individual radio buttons are set to their positions on load.\n * This property supports accessibility by placing focus on the currently selected radio\n * button. If no radio button is selected, it places focus on the first or last button\n * depending on how users navigate to the radio button group.\n */\n @Input()\n public set tabIndex(value: number | undefined) {\n if (this.#_tabIndex !== value) {\n this.#_tabIndex = value;\n this.#updateRadioButtonTabIndexes();\n }\n }\n public get tabIndex(): number | undefined {\n return this.#_tabIndex;\n }\n\n /**\n * The text to display as the radio group's heading.\n */\n @Input()\n public headingText: string | undefined;\n\n /**\n * Indicates whether to hide the `headingText`.\n */\n @Input({ transform: booleanAttribute })\n public headingHidden = false;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * The content of the help popover. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to radio group. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `headingText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the radio group heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `headingText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Our radio components are usually implemented using an unordered list. This is an\n * accessibility violation because the unordered list has an implicit role which\n * interrupts the 'radiogroup' and 'radio' relationship. To correct this, we can set the\n * radio group's 'aria-owns' attribute to a space-separated list of radio IDs.\n * For more information about the `aria-owns` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-owns), and for more information about the `radio` role, see [its definition](https://www.w3.org/TR/wai-aria/#radio).\n */\n public ariaOwns: string | undefined;\n\n @ContentChildren(SkyRadioComponent, { descendants: true })\n public radios: QueryList<SkyRadioComponent> | undefined;\n\n @HostBinding('class.sky-form-field-stacked')\n public stackedLg = false;\n\n @HostBinding('class.sky-field-group-stacked')\n public stackedXL = false;\n\n protected get isRequired(): boolean {\n return (\n this.required ||\n (this.ngControl?.control?.hasValidator(Validators.required) ?? false)\n );\n }\n\n protected headingClass = 'sky-font-heading-4';\n\n #controlValue: any;\n\n #defaultName = `sky-radio-group-${nextUniqueId++}`;\n\n #ngUnsubscribe = new Subject<void>();\n\n #_disabled = false;\n\n #_name = '';\n\n #_tabIndex: number | undefined;\n\n #_ariaLabel: string | undefined;\n\n #_ariaLabelledBy: string | undefined;\n\n #_headingLevel: SkyRadioGroupHeadingLevel | undefined;\n\n #_stacked = false;\n\n #changeDetector: ChangeDetectorRef;\n #radioGroupIdSvc: SkyRadioGroupIdService;\n\n readonly #logger = inject(SkyLogService);\n readonly #idService = inject(SkyIdService);\n\n protected errorId = this.#idService.generateId();\n protected ngControl: NgControl | undefined;\n\n constructor(\n changeDetector: ChangeDetectorRef,\n radioGroupIdSvc: SkyRadioGroupIdService,\n @Self() @Optional() ngControl: NgControl,\n ) {\n if (ngControl) {\n ngControl.valueAccessor = this;\n }\n this.#changeDetector = changeDetector;\n this.#radioGroupIdSvc = radioGroupIdSvc;\n this.ngControl = ngControl;\n this.name = this.#defaultName;\n\n this.#radioGroupIdSvc.radioIds\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((ids) => {\n this.ariaOwns = ids.join(' ') || undefined;\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n // Let child radio components render before updating.\n setTimeout(() => {\n this.#resetRadioButtons();\n });\n\n // Watch for radio selections.\n this.watchForSelections();\n\n /* istanbul ignore else */\n if (this.radios) {\n this.radios.changes.pipe(takeUntil(this.#ngUnsubscribe)).subscribe(() => {\n // Wait for child radio components to finish any rendering updates.\n setTimeout(() => {\n this.#resetRadioButtons();\n });\n\n // Subscribe to the new radio buttons\n this.watchForSelections();\n });\n }\n }\n\n public watchForSelections(): void {\n /* istanbul ignore else */\n if (this.radios) {\n this.radios.forEach((radio) => {\n radio.change\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((change: SkyRadioChange) => {\n this.#onTouched();\n this.value = change.value;\n });\n radio.blur.pipe(takeUntil(this.#ngUnsubscribe)).subscribe(() => {\n this.#onTouched();\n this.#changeDetector.markForCheck();\n });\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public writeValue(value: unknown): void {\n const isNewValue = value !== this.#controlValue;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this.#controlValue = value;\n this.#updateCheckedRadioFromValue();\n }\n }\n\n /**\n * @internal\n * Whether to disable the control. Implemented as a part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.#onTouched = fn;\n }\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onChange: (value: any) => void = () => {};\n\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouched: () => any = () => {};\n\n #updateRadioButtonDisabled(): void {\n if (this.radios) {\n this.radios.forEach((radio) =>\n radio.setGroupDisabledState(this.disabled),\n );\n }\n }\n\n #updateRadioButtonNames(): void {\n if (this.radios) {\n this.radios.forEach((radio) => {\n radio.name = this.name;\n });\n }\n }\n\n #updateRadioButtonTabIndexes(): void {\n if (this.radios) {\n this.radios.forEach((radio) => {\n radio.groupTabIndex = this.tabIndex;\n });\n }\n }\n\n #updateCheckedRadioFromValue(): void {\n if (!this.radios) {\n return;\n }\n\n this.radios.forEach((radio) => {\n radio.checked = this.#controlValue === radio.value;\n });\n }\n\n #resetRadioButtons(): void {\n this.#updateCheckedRadioFromValue();\n this.#updateRadioButtonNames();\n this.#updateRadioButtonTabIndexes();\n this.#updateRadioButtonDisabled();\n }\n\n #updateStackedClasses(): void {\n this.stackedLg = !this.headingLevel && this.stacked;\n this.stackedXL = !!this.headingLevel && this.stacked;\n }\n}\n","<fieldset\n class=\"sky-radio-group\"\n role=\"radiogroup\"\n [attr.aria-label]=\"headingText ? undefined : ariaLabel\"\n [attr.aria-labelledby]=\"headingText ? undefined : ariaLabelledBy\"\n [attr.aria-describedby]=\"hintText ? hintTextEl.id : undefined\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.aria-required]=\"isRequired ? true : null\"\n [attr.required]=\"isRequired ? '' : null\"\n [attr.aria-invalid]=\"!!ngControl?.errors\"\n [attr.aria-errormessage]=\"\n headingText && ngControl?.errors ? errorId : undefined\n \"\n>\n @if (headingText) {\n <legend\n class=\"sky-radio-group-legend\"\n [ngClass]=\"{\n 'sky-screen-reader-only': headingHidden\n }\"\n >\n <span\n [ngClass]=\"{\n 'sky-control-label-required': required\n }\"\n >\n @switch (headingLevel) {\n @case (3) {\n <h3 [class]=\"headingClass\">{{ headingText }}</h3>\n }\n @case (4) {\n <h4 [class]=\"headingClass\">{{ headingText }}</h4>\n }\n @case (5) {\n <h5 [class]=\"headingClass\">{{ headingText }}</h5>\n }\n @default {\n <span [class]=\"'sky-radio-group-heading-text ' + headingClass\">{{\n headingText\n }}</span>\n }\n }\n </span>\n @if (required) {\n <span class=\"sky-screen-reader-only\">{{\n 'skyux_form_group_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]=\"headingText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n </span>\n }\n </legend>\n }\n <div #hintTextEl=\"skyId\" skyId>\n @if (hintText) {\n <div\n class=\"sky-radio-group-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 <div class=\"sky-radio-group-content\">\n <ng-content />\n </div>\n</fieldset>\n<sky-form-errors\n [id]=\"errorId\"\n [errors]=\"ngControl?.errors\"\n [labelText]=\"headingText\"\n [touched]=\"ngControl?.touched\"\n [dirty]=\"ngControl?.dirty\"\n>\n <ng-content select=\"sky-form-error\" />\n</sky-form-errors>\n","import { Component, HostListener, inject } from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\n/**\n * Specifies a label for the radio button. To display a help button beside the label, include a help button element,\n * such as `sky-help-inline`, in the `sky-radio-label` element and a `sky-control-help` CSS class on that help button\n * element.\n * @deprecated Use `labelText` input on `sky-radio-component` instead.\n */\n@Component({\n selector: 'sky-radio-label',\n templateUrl: './radio-label.component.html',\n standalone: false,\n})\nexport class SkyRadioLabelComponent {\n // When clicking on a checkbox label, Angular registers two click events.\n // This handler ignores all events except for those that deal\n // with the checkbox input explicitly.\n @HostListener('click', ['$event'])\n public onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n constructor() {\n inject(SkyLogService).deprecated('SkyToggleSwitchLabelComponent', {\n deprecationMajorVersion: 10,\n replacementRecommendation:\n 'To add a label to radio button, use the `labelText` input on the radio button component instead.',\n });\n }\n}\n","<span class=\"sky-switch-label\"\n ><span skyTrim><ng-content /></span\n ><span class=\"sky-control-help-container\"\n ><ng-content select=\".sky-control-help\" /></span\n></span>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, SkyTrimModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyFormErrorModule } from '../form-error/form-error.module';\nimport { SkyFormErrorsModule } from '../form-error/form-errors.module';\nimport { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';\n\nimport { SkyRadioGroupComponent } from './radio-group.component';\nimport { SkyRadioLabelComponent } from './radio-label.component';\nimport { SkyRadioComponent } from './radio.component';\n\n@NgModule({\n declarations: [\n SkyRadioComponent,\n SkyRadioGroupComponent,\n SkyRadioLabelComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n SkyFormErrorModule,\n SkyFormErrorsModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyIdModule,\n SkyFormsResourcesModule,\n SkyTrimModule,\n SkyThemeModule,\n ],\n exports: [\n SkyFormErrorModule,\n SkyRadioComponent,\n SkyRadioGroupComponent,\n SkyRadioLabelComponent,\n ],\n})\nexport class SkyRadioModule {}\n","import { Directive, Input, booleanAttribute, inject } from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\n\n/**\n * A host directive used to capture the \"required\" state of the host's form control.\n * @internal\n */\n@Directive({})\nexport class SkyRequiredStateDirective {\n @Input({ transform: booleanAttribute })\n public required = false;\n\n /**\n * Whether the `required` attribute is set to `true`, or the control includes\n * the `Validators.required` validator.\n */\n public isRequired(): boolean {\n return (\n this.required ||\n !!this.#ngControl?.control?.hasValidator(Validators.required)\n );\n }\n\n readonly #ngControl = inject(NgControl, { optional: true, self: true });\n}\n","import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyMediaBreakpoints } from '@skyux/core';\n\nconst RESPONSIVE_CLASS_XS = 'sky-selection-box-container-xs';\nconst RESPONSIVE_CLASS_SM = 'sky-selection-box-container-sm';\nconst RESPONSIVE_CLASS_MD = 'sky-selection-box-container-md';\nconst RESPONSIVE_CLASS_LG = 'sky-selection-box-container-lg';\n\nconst BREAKPOINT_XS_MAX_PIXELS = 767;\nconst BREAKPOINT_SM_MIN_PIXELS = 768;\nconst BREAKPOINT_SM_MAX_PIXELS = 991;\nconst BREAKPOINT_MD_MIN_PIXELS = 992;\nconst BREAKPOINT_MD_MAX_PIXELS = 1439;\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkySelectionBoxAdapterService {\n #coreAdapterService: SkyCoreAdapterService;\n #renderer: Renderer2;\n\n constructor(\n coreAdapterService: SkyCoreAdapterService,\n rendererFactory: RendererFactory2,\n ) {\n this.#coreAdapterService = coreAdapterService;\n this.#renderer = rendererFactory.createRenderer(undefined, null);\n }\n\n /**\n * Sets focus on the specified element.\n */\n public focus(el: ElementRef): void {\n el.nativeElement.focus();\n }\n\n /**\n * Returns a child element with the `.sky-switch` class.\n * Useful for getting SKY UX-themed radio buttons or checkboxes.\n */\n public getControl(el: ElementRef): HTMLElement {\n return el.nativeElement.querySelector('.sky-switch');\n }\n\n /**\n * Returns a breakpoint based on the width.\n * @param width Width of the element in pixels.\n */\n public getBreakpointForWidth(width: number | undefined): SkyMediaBreakpoints {\n if (!width) {\n return SkyMediaBreakpoints.lg;\n }\n\n if (width <= BREAKPOINT_XS_MAX_PIXELS) {\n return SkyMediaBreakpoints.xs;\n } else if (\n width >= BREAKPOINT_SM_MIN_PIXELS &&\n width <= BREAKPOINT_SM_MAX_PIXELS\n ) {\n return SkyMediaBreakpoints.sm;\n } else if (\n width >= BREAKPOINT_MD_MIN_PIXELS &&\n width <= BREAKPOINT_MD_MAX_PIXELS\n ) {\n return SkyMediaBreakpoints.md;\n } else {\n return SkyMediaBreakpoints.lg;\n }\n }\n\n /**\n * Returns the width of the `parentNode` of the provided `element`.\n */\n public getParentWidth(element: ElementRef): number | undefined {\n return (\n element.nativeElement as HTMLElement | undefined\n )?.parentElement?.getBoundingClientRect()?.width;\n }\n\n /**\n * Returns `true` if the `childEl` is a descendant of the `parentEl`.\n */\n public isDescendant(parentEl: ElementRef, childEl: HTMLElement): boolean {\n return parentEl.nativeElement.contains(childEl);\n }\n\n /**\n * Sets the `tabIndex` of all focusable children of the `element` to the provided `tabIndex`.\n */\n public setChildrenTabIndex(element: ElementRef, tabIndex: number): void {\n const el = element.nativeElement;\n const focusableEls = this.#coreAdapterService.getFocusableChildren(el, {\n ignoreVisibility: true,\n });\n let index = focusableEls.length;\n while (index--) {\n focusableEls[index].tabIndex = tabIndex;\n }\n }\n\n /**\n * Adds a responsive CSS class on the provided element based on its current width.\n */\n public setResponsiveClass(\n element: ElementRef,\n breakpoint: SkyMediaBreakpoints,\n ): void {\n const nativeEl: HTMLElement = element.nativeElement;\n\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_XS);\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_SM);\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_MD);\n this.#renderer.removeClass(nativeEl, RESPONSIVE_CLASS_LG);\n\n let newClass: string;\n\n switch (breakpoint) {\n case SkyMediaBreakpoints.xs: {\n newClass = RESPONSIVE_CLASS_XS;\n break;\n }\n case SkyMediaBreakpoints.sm: {\n newClass = RESPONSIVE_CLASS_SM;\n break;\n }\n case SkyMediaBreakpoints.md: {\n newClass = RESPONSIVE_CLASS_MD;\n break;\n }\n case SkyMediaBreakpoints.lg: {\n newClass = RESPONSIVE_CLASS_LG;\n break;\n }\n }\n\n this.#renderer.addClass(nativeEl, newClass);\n }\n\n /**\n * Sets the `tabIndex` of the `element` to the provided `tabIndex`.\n */\n public setTabIndex(element: ElementRef, tabIndex: number): void {\n const el = element.nativeElement;\n\n el.tabIndex = tabIndex;\n }\n}\n","import { Component } from '@angular/core';\n\n/**\n * Specifies the description to display in a selection box.\n */\n@Component({\n selector: 'sky-selection-box-description',\n templateUrl: './selection-box-description.component.html',\n standalone: false,\n})\nexport class SkySelectionBoxDescriptionComponent {}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyCheckboxComponent } from '../checkbox/checkbox.component';\nimport { SkyRadioComponent } from '../radio/radio.component';\n\nimport { SkySelectionBoxAdapterService } from './selection-box-adapter.service';\n\n/**\n * Creates a button to present users with a choice or question before proceeding with a one-time process.\n */\n@Component({\n selector: 'sky-selection-box',\n styleUrls: ['./selection-box.component.scss'],\n templateUrl: './selection-box.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkySelectionBoxComponent implements OnDestroy {\n /**\n * The radio button or checkbox to display in the selection box.\n * @required\n */\n @Input()\n public set control(\n value: SkyCheckboxComponent | SkyRadioComponent | undefined,\n ) {\n this.#_control = value;\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#ngUnsubscribe = new Subject<void>();\n if (value) {\n this.#updateCheckedOnControlChange();\n this.#updateDisabledState();\n }\n }\n\n public get control(): SkyCheckboxComponent | SkyRadioComponent | undefined {\n return this.#_control;\n }\n\n public set checked(value: boolean) {\n this.#_checked = value;\n this.#changeDetector.markForCheck();\n }\n\n public get checked(): boolean {\n return this.#_checked;\n }\n\n public set disabled(value: boolean) {\n if (this.selectionBoxEl) {\n this.#selectionBoxAdapterService.setTabIndex(\n this.selectionBoxEl,\n value ? -1 : 0,\n );\n }\n this.#_disabled = value;\n this.#changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\n\n @ViewChild('control', {\n read: ElementRef,\n static: false,\n })\n public controlEl: ElementRef | undefined;\n\n @ViewChild('selectionBox', {\n read: ElementRef,\n static: false,\n })\n public set selectionBoxEl(value: ElementRef | undefined) {\n this.#_selectionBoxEl = value;\n if (value) {\n this.#selectionBoxAdapterService.setTabIndex(\n value,\n this.disabled ? -1 : 0,\n );\n\n // Wait for child elements to render before overriding tabIndex values.\n // TODO: This logic is brittle since the checkbox/radio can set its own tab index\n // value at any time. We need a way to enforce the tab index for the entire lifespan of the component.\n setTimeout(() => {\n this.#selectionBoxAdapterService.setChildrenTabIndex(value, -1);\n });\n }\n }\n\n public get selectionBoxEl(): ElementRef | undefined {\n return this.#_selectionBoxEl;\n }\n\n #ngUnsubscribe = new Subject<void>();\n\n #_checked = false;\n\n #_control: SkyCheckboxComponent | SkyRadioComponent | undefined;\n\n #_disabled = false;\n\n #_selectionBoxEl: ElementRef | undefined;\n\n #changeDetector: ChangeDetectorRef;\n #selectionBoxAdapterService: SkySelectionBoxAdapterService;\n\n constructor(\n changeDetector: ChangeDetectorRef,\n selectionBoxAdapterService: SkySelectionBoxAdapterService,\n ) {\n this.#changeDetector = changeDetector;\n this.#selectionBoxAdapterService = selectionBoxAdapterService;\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public onKeydown(event: KeyboardEvent): void {\n /* istanbul ignore else */\n if (event.key === ' ') {\n this.#selectControl();\n event.preventDefault();\n }\n }\n\n #selectControl(): void {\n if (this.controlEl) {\n this.#selectionBoxAdapterService.getControl(this.controlEl).click();\n }\n\n if (this.selectionBoxEl) {\n this.#selectionBoxAdapterService.focus(this.selectionBoxEl);\n }\n }\n\n #updateCheckedOnControlChange(): void {\n /* istanbul ignore else */\n if (this.control) {\n this.control.checkedChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((value) => {\n this.checked = value;\n });\n }\n }\n\n #updateDisabledState(): void {\n /* istanbul ignore else */\n if (this.control) {\n this.control.disabledChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((value) => {\n this.disabled = value;\n });\n }\n }\n}\n","<label\n #selectionBox\n class=\"sky-selection-box sky-rounded-corners sky-btn sky-btn-default\"\n [attr.disabled]=\"disabled ? true : null\"\n [ngClass]=\"{\n 'sky-selection-box-selected': checked,\n 'sky-selection-box-disabled': disabled\n }\"\n (keydown)=\"onKeydown($event)\"\n>\n <div\n #icon\n class=\"sky-selection-box-icon\"\n [ngClass]=\"{\n 'sky-selection-box-icon-hidden': !icon.innerHTML.trim()\n }\"\n >\n <ng-content select=\"sky-icon\" />\n </div>\n\n <div class=\"sky-selection-box-content\">\n <div class=\"sky-selection-box-header sky-font-display-2\">\n <ng-content select=\"sky-selection-box-header\" />\n </div>\n <div class=\"sky-selection-box-description sky-font-deemphasized\">\n <ng-content select=\"sky-selection-box-description\" />\n </div>\n </div>\n\n <div #control class=\"sky-selection-box-control\">\n <ng-content select=\"sky-radio\" />\n <ng-content select=\"sky-checkbox\" />\n </div>\n</label>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyMutationObserverService } from '@skyux/core';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkySelectionBoxAdapterService } from './selection-box-adapter.service';\nimport { SkySelectionBoxComponent } from './selection-box.component';\nimport { SkySelectionBoxGridAlignItemsType } from './types/selection-box-grid-align-items-type';\n\nconst SKY_SELECTION_BOX_CLASS_NAME = '.sky-selection-box';\n\n/**\n * Creates a grid layout for an array of selection boxes.\n */\n@Component({\n selector: 'sky-selection-box-grid',\n templateUrl: './selection-box-grid.component.html',\n styleUrls: ['./selection-box-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkySelectionBoxGridComponent implements OnDestroy, OnInit {\n /**\n * @internal\n * How to display the selection boxes in the grid.\n * @default 'center'\n */\n @Input()\n public set alignItems(value: SkySelectionBoxGridAlignItemsType | undefined) {\n if (value) {\n this.#_alignItems = value;\n } else {\n this.#_alignItems = 'center';\n }\n }\n\n public get alignItems(): SkySelectionBoxGridAlignItemsType {\n return this.#_alignItems;\n }\n\n @ContentChildren(SkySelectionBoxComponent, {\n read: SkySelectionBoxComponent,\n })\n public selectionBoxes: QueryList<SkySelectionBoxComponent> | undefined;\n\n @ViewChild('container', {\n read: ElementRef,\n static: true,\n })\n public set containerElementRef(value: ElementRef | undefined) {\n this.#_containerElementRef = value;\n this.#destroyMutationObserver();\n if (value) {\n this.#updateBreakpointClass();\n this.#initMutationObserver();\n }\n }\n\n public get containerElementRef(): ElementRef | undefined {\n return this.#_containerElementRef;\n }\n\n #mutationObserver: MutationObserver | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #_alignItems: SkySelectionBoxGridAlignItemsType = 'center';\n\n #_containerElementRef: ElementRef | undefined;\n\n #coreAdapterService: SkyCoreAdapterService;\n #selectionBoxAdapter: SkySelectionBoxAdapterService;\n #hostElRef: ElementRef;\n #mutationObserverSvc: SkyMutationObserverService;\n #ngZone: NgZone;\n #themeSvc: SkyThemeService | undefined;\n\n constructor(\n coreAdapterService: SkyCoreAdapterService,\n selectionBoxAdapter: SkySelectionBoxAdapterService,\n hostElRef: ElementRef,\n mutationObserverSvc: SkyMutationObserverService,\n ngZone: NgZone,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#coreAdapterService = coreAdapterService;\n this.#selectionBoxAdapter = selectionBoxAdapter;\n this.#hostElRef = hostElRef;\n this.#mutationObserverSvc = mutationObserverSvc;\n this.#ngZone = ngZone;\n this.#themeSvc = themeSvc;\n }\n\n public ngOnInit(): void {\n /* istanbul ignore else */\n if (this.#themeSvc) {\n this.#themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateBreakpointClass();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n\n this.#destroyMutationObserver();\n }\n\n @HostListener('window:resize')\n public onWindowResize(): void {\n this.#updateBreakpointClass();\n }\n\n #initMutationObserver(): void {\n /* istanbul ignore else */\n if (!this.#mutationObserver && this.containerElementRef) {\n const el = this.containerElementRef.nativeElement;\n\n // MutationObserver is patched by Zone.js and therefore becomes part of the\n // Angular change detection cycle, but this can lead to infinite loops in some\n // scenarios. This will keep MutationObserver from triggering change detection.\n this.#ngZone.runOutsideAngular(() => {\n this.#mutationObserver = this.#mutationObserverSvc.create(() => {\n this.#updateChildrenHeights();\n });\n\n this.#mutationObserver.observe(el, {\n characterData: true,\n subtree: true,\n });\n });\n }\n }\n\n #destroyMutationObserver(): void {\n /* istanbul ignore else */\n if (this.#mutationObserver) {\n this.#mutationObserver.disconnect();\n this.#mutationObserver = undefined;\n }\n }\n\n #updateBreakpointClass(): void {\n const parentWidth = this.#selectionBoxAdapter.getParentWidth(\n this.#hostElRef,\n );\n\n if (this.containerElementRef) {\n this.#selectionBoxAdapter.setResponsiveClass(\n this.containerElementRef,\n this.#selectionBoxAdapter.getBreakpointForWidth(parentWidth),\n );\n }\n this.#updateChildrenHeights();\n }\n\n #updateChildrenHeights(): void {\n if (this.containerElementRef) {\n this.#coreAdapterService.resetHeight(\n this.containerElementRef,\n SKY_SELECTION_BOX_CLASS_NAME,\n );\n this.#coreAdapterService.syncMaxHeight(\n this.containerElementRef,\n SKY_SELECTION_BOX_CLASS_NAME,\n );\n }\n }\n}\n","<div\n #container\n class=\"sky-selection-box-grid\"\n [ngClass]=\"'sky-selection-box-grid-align-' + alignItems\"\n>\n <ng-content select=\"sky-selection-box\" />\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * Specifies the header to display in a selection box.\n */\n@Component({\n selector: 'sky-selection-box-header',\n templateUrl: './selection-box-header.component.html',\n standalone: false,\n})\nexport class SkySelectionBoxHeaderComponent {}\n","<ng-content />\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkySelectionBoxAdapterService } from './selection-box-adapter.service';\nimport { SkySelectionBoxDescriptionComponent } from './selection-box-description.component';\nimport { SkySelectionBoxGridComponent } from './selection-box-grid.component';\nimport { SkySelectionBoxHeaderComponent } from './selection-box-header.component';\nimport { SkySelectionBoxComponent } from './selection-box.component';\n\n@NgModule({\n declarations: [\n SkySelectionBoxGridComponent,\n SkySelectionBoxComponent,\n SkySelectionBoxDescriptionComponent,\n SkySelectionBoxHeaderComponent,\n ],\n imports: [CommonModule, SkyThemeModule],\n exports: [\n SkySelectionBoxGridComponent,\n SkySelectionBoxComponent,\n SkySelectionBoxDescriptionComponent,\n SkySelectionBoxHeaderComponent,\n ],\n providers: [SkySelectionBoxAdapterService],\n})\nexport class SkySelectionBoxModule {}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\n/**\n * Specifies the label to display beside the toggle switch. To display a help button beside the label, include a help\n * button element, such as `sky-help-inline`, in the `sky-toggle-switch` element and a `sky-control-help` CSS class on\n * that help button element.\n * @deprecated Use the `labelText` input on the toggle switch component instead.\n */\n@Component({\n selector: 'sky-toggle-switch-label',\n templateUrl: './toggle-switch-label.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyToggleSwitchLabelComponent {\n constructor() {\n inject(SkyLogService).deprecated('SkyToggleSwitchLabelComponent', {\n deprecationMajorVersion: 9,\n replacementRecommendation:\n 'To add a label to toggle switch, use the `labelText` input on the toggle switch component instead.',\n });\n }\n}\n","<span skyTrim><ng-content /></span>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n booleanAttribute,\n forwardRef,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyIdService, SkyLogService } from '@skyux/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyToggleSwitchLabelComponent } from './toggle-switch-label.component';\nimport { SkyToggleSwitchChange } from './types/toggle-switch-change';\n\nconst SKY_TOGGLE_SWITCH_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyToggleSwitchComponent),\n multi: true,\n};\nconst SKY_TOGGLE_SWITCH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyToggleSwitchComponent),\n multi: true,\n};\n\n@Component({\n selector: 'sky-toggle-switch',\n templateUrl: './toggle-switch.component.html',\n styleUrls: ['./toggle-switch.component.scss'],\n providers: [\n SKY_TOGGLE_SWITCH_CONTROL_VALUE_ACCESSOR,\n SKY_TOGGLE_SWITCH_VALIDATOR,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyToggleSwitchComponent\n implements AfterContentInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * The ARIA label for the toggle switch. This sets the `aria-label`\n * attribute to provide a text equivalent for screen readers [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * Use a context-sensitive label, such as \"Activate annual fundraiser\" for a toggle switch that activates and deactivates an annual fundraiser. Context is especially important if multiple toggle switches are in close proximity.\n * When the `sky-toggle-switch-label` component displays a visible label, this property is only necessary if that label requires extra context.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n * @deprecated Use the `labelText` input instead.\n */\n @Input()\n public set ariaLabel(value: string | undefined) {\n this.#_ariaLabel = value;\n\n if (value !== undefined) {\n this.#logSvc.deprecated('SkyToggleSwitchComponent.ariaLabel', {\n deprecationMajorVersion: 9,\n replacementRecommendation:\n 'To add an ARIA label to the toggle switch, use the `labelText` input instead',\n });\n }\n }\n\n public get ariaLabel(): string | undefined {\n return this.#_ariaLabel;\n }\n\n /**\n * Whether the toggle switch is selected.\n * @default false\n */\n @Input()\n public set checked(value: boolean | undefined) {\n const checked = !!value;\n if (checked !== this.#_checked) {\n this.#_checked = checked;\n this.#onChange(checked);\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.#isFirstChange && this.#control) {\n this.#control.markAsPristine();\n this.#isFirstChange = false;\n }\n }\n }\n\n public get checked(): boolean {\n return this.#_checked;\n }\n\n /**\n * Whether to disable the toggle switch on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n */\n @Input()\n public disabled: boolean | undefined = false;\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the toggle switch. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * The tab index for the toggle switch. If not defined, the index is set to the position\n * of the toggle switch on load.\n */\n @Input()\n public tabIndex: number | undefined = 0;\n\n /**\n * The text to display as the toggle switch's label.\n */\n @Input()\n public labelText: string | undefined;\n\n /**\n * Whether to hide `labelText` from view.\n */\n @Input({ transform: booleanAttribute })\n public labelHidden = false;\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the toggle switch label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n /**\n * Fires when the checked state of a toggle switch changes.\n */\n @Output()\n public toggleChange = new EventEmitter<SkyToggleSwitchChange>();\n\n public hasLabelComponent = false;\n public labelId: string;\n\n public enableIndicatorAnimation = false;\n\n @ContentChildren(SkyToggleSwitchLabelComponent)\n public labelComponents: QueryList<SkyToggleSwitchLabelComponent> | undefined;\n\n #control: AbstractControl | undefined;\n #isFirstChange = true;\n readonly #logSvc = inject(SkyLogService);\n #ngUnsubscribe = new Subject<void>();\n\n #_ariaLabel: string | undefined;\n #_checked = false;\n\n #changeDetector: ChangeDetectorRef;\n\n constructor(changeDetector: ChangeDetectorRef, idService: SkyIdService) {\n this.#changeDetector = changeDetector;\n this.labelId = idService.generateId();\n }\n\n public ngAfterContentInit(): void {\n /* istanbul ignore else */\n if (this.labelComponents) {\n this.hasLabelComponent = this.labelComponents.length > 0;\n\n this.labelComponents.changes\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((newLabelComponents) => {\n this.hasLabelComponent = newLabelComponents.length > 0;\n // Allow the template to reload any ARIA attributes that are relying on the\n // label component existing in the DOM.\n this.#changeDetector.markForCheck();\n });\n }\n\n // Wait for the view to render before applying animation effects.\n // (Some browsers, such as Firefox, apply the animation too early.)\n setTimeout(() => {\n this.enableIndicatorAnimation = true;\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public writeValue(value: boolean): void {\n this.checked = !!value;\n this.#changeDetector.markForCheck();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (!this.#control) {\n this.#control = control;\n }\n\n return null;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.#changeDetector.markForCheck();\n }\n\n public onButtonClick(event: any): void {\n event.stopPropagation();\n this.#toggleChecked();\n this.#emitChangeEvent();\n }\n\n public onButtonBlur(): void {\n this.#onTouched();\n }\n\n /* istanbul ignore next */\n #onTouched: () => any = () => {};\n /* istanbul ignore next */\n #onChange: (value: any) => void = () => {};\n\n #emitChangeEvent(): void {\n this.#onChange(this.#_checked);\n this.toggleChange.emit({\n checked: this.#_checked,\n });\n }\n\n #toggleChecked(): void {\n this.checked = !this.checked;\n }\n}\n","<span\n class=\"sky-toggle-switch\"\n [ngClass]=\"{\n 'sky-toggle-switch-with-label': hasLabelComponent || labelText\n }\"\n>\n <button\n #toggle=\"skyId\"\n class=\"sky-toggle-switch-button\"\n role=\"switch\"\n type=\"button\"\n skyId\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"labelText || ariaLabel || null\"\n [attr.aria-labelledby]=\"\n !ariaLabel && (hasLabelComponent || labelText) ? labelId : null\n \"\n [disabled]=\"disabled\"\n [ngClass]=\"{\n 'sky-toggle-switch-checked': checked,\n 'sky-toggle-switch-disabled': disabled\n }\"\n [tabIndex]=\"tabIndex\"\n (blur)=\"onButtonBlur()\"\n (click)=\"onButtonClick($event)\"\n >\n <div aria-hidden=\"true\" class=\"sky-toggle-switch-switch\">\n <i\n class=\"sky-toggle-switch-indicator\"\n [ngClass]=\"{\n 'sky-toggle-switch-transition': enableIndicatorAnimation\n }\"\n >&nbsp;</i\n >\n </div>\n </button>\n <span>\n @if (hasLabelComponent || labelText) {\n <label\n class=\"sky-toggle-switch-label\"\n [for]=\"toggle.id\"\n [attr.id]=\"labelId\"\n >\n @if (labelText) {\n @if (!labelHidden) {\n <span class=\"sky-toggle-switch-label-text\">{{ labelText }}</span>\n }\n } @else {\n <ng-content select=\"sky-toggle-switch-label\" />\n }\n </label>\n }\n <span class=\"sky-control-help-container\">\n @if (labelText && (helpPopoverContent || helpKey)) {\n <sky-help-inline\n [helpKey]=\"helpKey\"\n [labelText]=\"labelText\"\n [popoverTitle]=\"helpPopoverTitle\"\n [popoverContent]=\"helpPopoverContent\"\n />\n }\n <ng-content select=\".sky-control-help\" />\n </span>\n </span>\n</span>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule, SkyTrimModule } from '@skyux/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\n\nimport { SkyToggleSwitchLabelComponent } from './toggle-switch-label.component';\nimport { SkyToggleSwitchComponent } from './toggle-switch.component';\n\n@NgModule({\n declarations: [SkyToggleSwitchLabelComponent, SkyToggleSwitchComponent],\n imports: [\n CommonModule,\n FormsModule,\n SkyHelpInlineModule,\n SkyIdModule,\n SkyTrimModule,\n ],\n exports: [SkyToggleSwitchLabelComponent, SkyToggleSwitchComponent],\n})\nexport class SkyToggleSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.SkyCharacterCounterScreenReaderPipe","i3","i1","numberAttribute4","i2","i3.SkyFormErrorsComponent","i5","i6","i7.SkyCheckboxLabelTextLabelComponent","i4","MAX_FILE_SIZE_DEFAULT","MIN_FILE_SIZE_DEFAULT","i1.SkyFileAttachmentService","i2.SkyFileItemService","i7","i8","i9","takeUntil","i2.SkyCharacterCounterIndicatorComponent","i7.SkyInputBoxHintTextPipe","i6.SkyInputBoxComponent","i7.SkyInputBoxControlDirective","i1.SkyFileItemService","i1.SkyRadioGroupIdService","i5.SkyFormErrorsComponent","i1.SkySelectionBoxAdapterService","i2.SkySelectionBoxAdapterService"],"mappings":"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"}