{"version":3,"file":"ng-stack-contenteditable.mjs","sources":["../../../projects/contenteditable/src/lib/editable.directive.ts","../../../projects/contenteditable/src/lib/ngs-contenteditable.module.ts","../../../projects/contenteditable/src/public-api.ts","../../../projects/contenteditable/src/ng-stack-contenteditable.ts"],"sourcesContent":["import {\n  Directive,\n  ElementRef,\n  Renderer2,\n  HostListener,\n  HostBinding,\n  forwardRef,\n  Input,\n  Inject,\n  Attribute,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n  selector:\n    '[editable][formControlName],[editable][formControl],[editable][ngModel]',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => EditableDirective),\n      multi: true,\n    },\n  ],\n})\nexport class EditableDirective implements ControlValueAccessor {\n  @Input() propValueAccessor = 'textContent';\n  @HostBinding('attr.contenteditable') @Input() editable: boolean | string =\n    true;\n\n  private onChange: (value: string) => void;\n  private onTouched: () => void;\n  private removeDisabledState: () => void;\n\n  constructor(\n    private elementRef: ElementRef,\n    private renderer: Renderer2,\n    @Attribute('unformattedPaste') private unformattedPaste: string,\n    @Inject(DOCUMENT) private document: Document\n  ) {}\n\n  @HostListener('input')\n  callOnChange() {\n    if (typeof this.onChange == 'function') {\n      this.onChange(this.elementRef.nativeElement[this.propValueAccessor]);\n    }\n  }\n\n  @HostListener('blur')\n  callOnTouched() {\n    if (typeof this.onTouched == 'function') {\n      this.onTouched();\n    }\n  }\n\n  /**\n   * Writes a new value to the element.\n   * This method will be called by the forms API to write\n   * to the view when programmatic (model -> view) changes are requested.\n   *\n   * See: [ControlValueAccessor](https://angular.io/api/forms/ControlValueAccessor#members)\n   */\n  writeValue(value: any): void {\n    const normalizedValue = value == null ? '' : value;\n    this.renderer.setProperty(\n      this.elementRef.nativeElement,\n      this.propValueAccessor,\n      normalizedValue\n    );\n  }\n\n  /**\n   * Registers a callback function that should be called when\n   * the control's value changes in the UI.\n   *\n   * This is called by the forms API on initialization so it can update\n   * the form model when values propagate from the view (view -> model).\n   */\n  registerOnChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n\n  /**\n   * Registers a callback function that should be called when the control receives a blur event.\n   * This is called by the forms API on initialization so it can update the form model on blur.\n   */\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * This function is called by the forms API when the control status changes to or from \"DISABLED\".\n   * Depending on the value, it should enable or disable the appropriate DOM element.\n   */\n  setDisabledState(isDisabled: boolean): void {\n    if (isDisabled) {\n      this.renderer.setAttribute(\n        this.elementRef.nativeElement,\n        'disabled',\n        'true'\n      );\n      this.removeDisabledState = this.renderer.listen(\n        this.elementRef.nativeElement,\n        'keydown',\n        this.listenerDisabledState\n      );\n    } else {\n      if (this.removeDisabledState) {\n        this.renderer.removeAttribute(\n          this.elementRef.nativeElement,\n          'disabled'\n        );\n        this.removeDisabledState();\n      }\n    }\n  }\n\n  @HostListener('paste', ['$event'])\n  preventFormatedPaste(event: ClipboardEvent) {\n    if (\n      this.unformattedPaste === null ||\n      this.unformattedPaste == 'false' ||\n      !this.document.execCommand\n    ) {\n      return;\n    }\n    event.preventDefault();\n    const { clipboardData } = event;\n    const text =\n      clipboardData?.getData('text/plain') || clipboardData?.getData('text');\n    this.document.execCommand('insertText', false, text);\n  }\n\n  private listenerDisabledState(e: KeyboardEvent) {\n    e.preventDefault();\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { EditableDirective } from './editable.directive';\n\n@NgModule({\n  declarations: [EditableDirective],\n  exports: [EditableDirective],\n})\nexport class NgsContenteditableModule {}\n","/*\n * Public API Surface of contenteditable\n */\n\nexport * from './lib/editable.directive';\nexport * from './lib/ngs-contenteditable.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}