{"version":3,"file":"fabric-msft-fabric-angular-dropdown.mjs","sources":["../../../projects/fabric-wrappers/dropdown/dropdown.directive.ts","../../../projects/fabric-wrappers/dropdown/public-api.ts","../../../projects/fabric-wrappers/dropdown/fabric-msft-fabric-angular-dropdown.ts"],"sourcesContent":["import { DropdownDefinition } from \"@fabric-msft/fabric-web\";\nimport {\n  Directive,\n  ElementRef,\n  Input,\n  NgZone,\n  Renderer2,\n  forwardRef\n} from \"@angular/core\";\nimport type { AfterContentInit } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport type { ControlValueAccessor } from \"@angular/forms\";\nimport type { Dropdown } from \"@fabric-msft/fabric-web\";\n\n@Directive({\n  selector: \"fabric-dropdown\",\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => FabricDropdownControlDirective),\n      multi: true\n    }\n  ],\n  standalone: true\n})\nexport class FabricDropdownControlDirective\n  implements ControlValueAccessor, AfterContentInit\n{\n  protected el: Dropdown;\n  @Input() value: string;\n  @Input() disabled: boolean;\n  @Input() multiple: boolean;\n  private _initialValue: unknown;\n  private observer: MutationObserver;\n\n  constructor(\n    r: ElementRef,\n    protected z: NgZone,\n    private renderer: Renderer2\n  ) {\n    this.el = r.nativeElement;\n    if (!customElements.get(\"fabric-dropdown\")) {\n      DropdownDefinition.define(customElements);\n    }\n\n    // The mutation observer is needed because of a timing issue between Angular forms and the web component:\n    // 1. Angular forms tries to set the initial value via writeValue() before the dropdown control is ready\n    // 2. The web component throws an error when trying to set a value before this.el.control exists\n    // 3. This observer watches for when the control is ready (this.el.control exists)\n    // 4. Once it exists, we can safely set the initial value\n    this.observer = new MutationObserver((mutations, observer) => {\n      if (this.el.control) {\n        observer.disconnect();\n        if (this._initialValue !== undefined) {\n          this.writeValue(this._initialValue);\n        }\n      }\n    });\n\n    // Watch for changes in the DOM that would indicate the dropdown control has been initialized\n    this.observer.observe(this.el, {\n      childList: true,\n      subtree: true,\n      attributes: true\n    });\n  }\n\n  ngAfterContentInit() {\n    this.writeInitialValues();\n    this.listenForChanges();\n  }\n\n  private writeInitialValues() {\n    this.multiple = this.el.multiple ?? false;\n  }\n\n  private listenForChanges() {\n    this.renderer.listen(this.el, \"change\", (event: Event) => {\n      const target = event.target as Dropdown;\n      this.onChange(target.value);\n\n      if (!this.multiple && this.value != target.value) {\n        this.writeValue(target.value);\n      }\n    });\n\n    this.renderer.listen(this.el, \"focusout\", () => {\n      this.onTouched();\n    });\n  }\n\n  writeValue(newValue: unknown) {\n    if (!newValue) {\n      return;\n    }\n\n    // If the control is not ready, set the value and initial value\n    if (!this.el.control) {\n      this.value = newValue as string;\n      this._initialValue = newValue;\n      return;\n    }\n\n    if (this.multiple) {\n      this.el.enabledOptions.forEach((option) => {\n        option.selected = (newValue as string[]).includes(option.value);\n      });\n    } else {\n      this.el.value = newValue as string;\n    }\n\n    this.value = this.el.value as string;\n  }\n\n  onChange = (value: unknown) => {};\n  registerOnChange(onChange: (value: unknown) => void) {\n    this.onChange = onChange;\n  }\n\n  onTouched = () => {};\n  registerOnTouched(onTouched: () => void) {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n\n    if (isDisabled) {\n      this.renderer.setAttribute(this.el, \"disabled\", \"true\");\n    } else {\n      this.renderer.removeAttribute(this.el, \"disabled\");\n    }\n  }\n\n  ngOnDestroy() {\n    // Clean up the observer\n    this.observer.disconnect();\n  }\n}\n","/*\n * Secondary entry point for Dropdown\n * Allows importing like: import { FabricDropdownDirective } from '@fabric-msft/fabric-angular/dropdown'\n */\nexport { FabricDropdownControlDirective } from \"./dropdown.directive\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}