{"version":3,"file":"daffodil-design-select.mjs","sources":["../../../libs/design/select/src/option/option.directive.ts","../../../libs/design/select/src/select/select.component.ts","../../../libs/design/select/src/select/select.component.html","../../../libs/design/select/src/select.ts","../../../libs/design/select/src/daffodil-design-select.ts"],"sourcesContent":["import {\n  Directive,\n  Optional,\n  TemplateRef,\n} from '@angular/core';\n\n/**\n * The directive provides the template for a list of options inside the select dropdown.\n */\n@Directive({\n  selector: '[daffSelectOption]',\n})\nexport class DaffSelectOptionDirective {\n  constructor(@Optional() public templateRef?: TemplateRef<unknown>) {}\n}\n","import {\n  Overlay,\n  OverlayModule,\n  OverlayRef,\n} from '@angular/cdk/overlay';\nimport {\n  PortalModule,\n  TemplatePortal,\n} from '@angular/cdk/portal';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ChangeDetectionStrategy,\n  ViewEncapsulation,\n  Input,\n  ChangeDetectorRef,\n  OnInit,\n  ElementRef,\n  Inject,\n  Optional,\n  Self,\n  ContentChild,\n  ViewChild,\n  OnDestroy,\n  booleanAttribute,\n  DOCUMENT,\n} from '@angular/core';\nimport {\n  ControlValueAccessor,\n  NgControl,\n  Validators,\n} from '@angular/forms';\nimport {\n  Subject,\n  delay,\n  map,\n  merge,\n  of,\n  takeUntil,\n  tap,\n} from 'rxjs';\n\nimport { DaffOpenableDirective } from '@daffodil/design';\nimport {\n  DaffFormFieldComponent,\n  DaffFormFieldControl,\n} from '@daffodil/design/form-field';\n\nimport { DaffSelectOptionDirective } from '../option/option.directive';\n\nlet daffSelectOtionsId = 0;\n\n/**\n * DaffSelectComponent is a form control component that presents a list of selectable options,\n * similar to the native `<select>` element we call `<daff-native-select>`.\n *\n */\n@Component({\n  selector: 'daff-select',\n  templateUrl: './select.component.html',\n  styleUrls: ['./select.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [\n    {\n      directive: DaffOpenableDirective,\n    },\n  ],\n  host: {\n    class: 'daff-select',\n    '[attr.aria-labelledby]': 'ariaLabelledBy',\n  },\n  providers: [\n\n    { provide: DaffFormFieldControl, useExisting: DaffSelectComponent },\n  ],\n  imports: [\n    NgTemplateOutlet,\n    OverlayModule,\n    PortalModule,\n  ],\n})\nexport class DaffSelectComponent<T = unknown> extends DaffFormFieldControl<string> implements DaffFormFieldControl<string>, OnInit, OnDestroy, ControlValueAccessor {\n  /** @docs-private */\n  controlType = 'custom-select';\n\n  /**\n   * @docs-private\n   */\n  supportsAutoLabelling = false;\n\n  private _destroyed = new Subject<boolean>();\n  private _overlay: OverlayRef;\n  private _value = null;\n  private _highlighted = 0;\n\n  /**\n   * @docs-private\n   */\n  get focused() {\n    return this.document.activeElement === this.buttonElement?.nativeElement || this.document.activeElement === this.optionsElement?.nativeElement;\n  }\n\n  /**\n   * @docs-private\n   */\n  get raised() {\n    return this.focused && this.isOpen;\n  }\n\n  /** @docs-private */\n  focus() {\n    (<HTMLElement>this.buttonElement?.nativeElement)?.focus();\n    this.emitState();\n  }\n\n  /** @docs-private */\n  blur() {\n    this.onTouched();\n    this.emitState(true);\n  }\n\n  /**\n   * @docs-private\n   *\n   * Implemented as part of DaffFormFieldControl.\n   */\n  @Input({ transform: booleanAttribute }) disabled = false;\n\n  private _required = false;\n\n  /**\n   * @docs-private\n   *\n   * Implemented as part of DaffFormFieldControl.\n   */\n  @Input({ transform: booleanAttribute })\n  get required(): boolean {\n    return this.ngControl?.control?.hasValidator(Validators.required) ?? this._required;\n  }\n  set required(value: boolean) {\n    this._required = value;\n  }\n\n  @Input() options: T[] = [];\n\n  /**\n   * @docs-private\n   */\n  get isOpen() {\n    return this.openDirective.open();\n  }\n\n  /**\n   * @docs-private\n   *\n   * `aria-labelledby` for the select.\n   */\n  ariaLabelledBy = '';\n\n  /**\n   * The unique id of the select options. Defaults to an autogenerated value.\n   */\n  @Input() optionsId: string = 'daff-select-options' + '-' + ++daffSelectOtionsId;\n\n  constructor(\n    private cd: ChangeDetectorRef,\n    @Inject(DOCUMENT) private document: Document,\n    @Optional() @Self() public ngControl: NgControl,\n    private overlay: Overlay,\n    private openDirective: DaffOpenableDirective,\n    @Optional() private formField: DaffFormFieldComponent,\n  ) {\n    super(ngControl);\n\n    if(!this.formField) {\n      throw new Error('DaffSelectComponent needs to be used with the DaffFormFieldComponent.');\n    }\n\n    this.ariaLabelledBy = this.formField.id;\n\n    this.openDirective.stateless = false;\n\n    this.document.addEventListener('keydown', (event) => {\n      if (event.key === 'Tab' && this.isOpen) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        this.focusOptionsList();\n      }\n    });\n\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  /**\n   * @docs-private\n   */\n  @ViewChild('field') buttonElement: ElementRef<HTMLButtonElement>;\n  /**\n   * @docs-private\n   */\n  @ViewChild('optionsTemplate') optionsTemplatePortal: TemplatePortal<unknown>;\n  /**\n   * @docs-private\n   */\n  @ViewChild('optionsEl', { read: ElementRef<HTMLDivElement> }) optionsElement: ElementRef<HTMLDivElement>;\n\n  /**\n   * @docs-private\n   */\n  @ContentChild(DaffSelectOptionDirective) optionTemplate?: DaffSelectOptionDirective;\n\n  /**\n   * @docs-private\n   */\n  get value() {\n    return this._value;\n  }\n\n  /**\n   * @docs-private\n   */\n  get highlighted(): number {\n    return this._highlighted;\n  }\n\n  set highlighted(val: number) {\n    this._highlighted = val;\n    this.cd.markForCheck();\n  }\n\n  private focusOptionsList() {\n    this.optionsElement?.nativeElement.focus();\n  }\n\n  private focusButton() {\n    this.buttonElement?.nativeElement.focus();\n  }\n\n  /**\n   * @docs-private\n   */\n  ngOnDestroy(): void {\n    this._destroyed.next(true);\n    this._overlay?.dispose();\n  }\n\n  private onChange(value: T): void {};\n  private onTouched(): void {};\n\n  /**\n   * @docs-private\n   */\n  writeValue(value: T): void {\n    this._value = value;\n    this.cd.markForCheck();\n  }\n\n  /**\n   * @docs-private\n   */\n  registerOnChange(fn: (value: T) => void): void {\n    this.onChange = fn;\n  }\n\n  /**\n   * @docs-private\n   */\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * @docs-private\n   */\n  flushValue() {\n    this.ngControl?.control?.setValue(this._value);\n  }\n\n  /**\n   * @docs-private\n   */\n  ngOnInit() {\n    this.stateChanges = merge(\n      this._stateChanges.asObservable(),\n      this.ngControl ? this.ngControl.statusChanges : of(undefined),\n    ).pipe(\n      map(() => this.state),\n      tap((state) => this.disabled = state.disabled),\n    );\n  }\n\n  /**\n   * Opens the options list.\n   */\n  open(event?: KeyboardEvent | MouseEvent) {\n    event?.preventDefault();\n    event?.stopPropagation();\n\n    if (!this.openDirective.open()) {\n      this.openDirective.open.set(true);\n\n      if (this._value) {\n        this._highlighted = this.options.findIndex((v) => v === this._value);\n      }\n\n      const formFieldEl = this.formField.elementRef.nativeElement;\n      const formFieldWidth = formFieldEl.getBoundingClientRect().width;\n\n      this._overlay = this.overlay.create({\n        hasBackdrop: true,\n        backdropClass: 'cdk-overlay-transparent-backdrop',\n        scrollStrategy: this.overlay.scrollStrategies.block(),\n        disposeOnNavigation: true,\n        width: `${formFieldWidth}px`,\n        positionStrategy: this.overlay\n          .position()\n          .flexibleConnectedTo(formFieldEl)\n          .withPositions([\n            {\n              originX: 'start',\n              originY: 'bottom',\n              overlayX: 'start',\n              overlayY: 'top',\n              offsetY: 2,\n            },\n            {\n              originX: 'start',\n              originY: 'top',\n              overlayX: 'start',\n              overlayY: 'bottom',\n              offsetY: -2,\n            },\n          ]),\n      });\n\n      this._overlay.attachments().pipe(\n        takeUntil(this._destroyed),\n        delay(0),\n      ).subscribe(() => {\n        this.focusOptionsList();\n      });\n\n      this._overlay.attach(this.optionsTemplatePortal);\n\n      this._overlay.backdropClick().pipe(\n        takeUntil(this._destroyed),\n      ).subscribe(() => this.close());\n      this.cd.markForCheck();\n    }\n  }\n\n  /**\n   * Closes the options list.\n   */\n  close(event?: KeyboardEvent | MouseEvent) {\n    event?.preventDefault();\n    event?.stopPropagation();\n\n    if (this.openDirective.open()) {\n      this.openDirective.open.set(false);\n      this.cd.markForCheck();\n\n      // do we actually have to dispose and recreate the overlay every time we want to close the dropdown?\n      this._overlay?.dispose();\n      this._overlay = null;\n      this.focusButton();\n    }\n  }\n\n  /**\n   * Selects the value in a particular position in the options list.\n   */\n  private selectValueInPosition(position: number) {\n    if (position >= 0 && position < this.options.length) {\n      this.writeValue(this.options[position]);\n    }\n\n    this.close();\n  }\n\n  /**\n   * Selects an option.\n   */\n  selectOption(option: T) {\n    this._value = option;\n    this.onChange(this._value);\n\n    this.close();\n  }\n\n  /**\n   * Selects the option referenced by the highlighted index.\n   */\n  selectHighlighted(event?: KeyboardEvent | MouseEvent) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    this.selectValueInPosition(this._highlighted);\n\n    this.onChange(this._value);\n  }\n\n  /**\n   * Highlights the next option in the list.\n   */\n  highlightNext(event?: KeyboardEvent | MouseEvent) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    this._highlighted = this._highlighted < this.options.length - 1 ? this._highlighted + 1 : 0;\n    (<HTMLElement>event?.target).children[this._highlighted].scrollIntoView();\n  }\n\n  /**\n   * Highlights the previous option in the list.\n   */\n  highlightPrevious(event?: KeyboardEvent | MouseEvent) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    this._highlighted = this._highlighted > 0 ? this._highlighted - 1 : this.options.length - 1;\n    (<HTMLElement>event?.target).children[this._highlighted].scrollIntoView();\n  }\n}\n","<button #field class=\"daff-select__field\"\n  type=\"button\"\n  (click)=\"open($event)\"\n  (focus)=\"focus()\"\n  (blur)=\"blur()\"\n  [disabled]=\"disabled\"\n  role=\"combobox\"\n  aria-haspopup=\"listbox\"\n  [attr.aria-expanded]=\"isOpen\"\n  [attr.aria-controls]=\"optionsId\"\n  (keydown.arrowdown)=\"open($event)\"\n  (keydown.arrowup)=\"open($event)\"\n  (keydown.alt.arrowup)=\"open($event)\"\n  (keydown.alt.arrowdown)=\"open($event)\"\n  (keydown.space)=\"open($event)\"\n  (keydown.enter)=\"open($event)\">\n  @if (value) {\n    <ng-container\n      [ngTemplateOutlet]=\"optionTemplate?.templateRef\"\n      [ngTemplateOutletContext]=\"\n      {\n        option: value,\n        isSelected: true,\n        isHighlighted: true,\n      }\n      \"><div></div>\n    </ng-container>\n  }\n</button>\n<ng-template cdkPortal #optionsTemplate=\"cdkPortal\">\n  <div class=\"daff-select__options\" #optionsEl\n    [id]=\"optionsId\"\n    tabindex=\"0\"\n    role=\"listbox\"\n    (blur)=\"blur()\"\n    (keydown.enter)=\"selectHighlighted($event)\"\n    (keydown.space)=\"selectHighlighted($event)\"\n    (keydown.escape)=\"close($event)\"\n    (keydown.arrowdown)=\"highlightNext($event)\"\n    (keydown.arrowup)=\"highlightPrevious($event)\">\n    @for (option of options; track $index; let i = $index) {\n      <div class=\"daff-select__option\"\n      [class.selected]=\"value === option\"\n      [class.highlighted]=\"highlighted === i\"\n      (click)=\"selectOption(option)\">\n        <ng-container\n          [ngTemplateOutlet]=\"optionTemplate?.templateRef\"\n          [ngTemplateOutletContext]=\"{\n            isSelected: value === option,\n            isHighlighted: highlighted === i,\n            option\n          }\">\n        </ng-container>\n      </div>\n    }\n  </div>\n</ng-template>\n","import { DaffSelectOptionDirective } from './option/option.directive';\nimport { DaffSelectComponent } from './select/select.component';\n\nexport const DAFF_SELECT_COMPONENTS = <const> [\n  DaffSelectComponent,\n  DaffSelectOptionDirective,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}