{"version":3,"file":"angular-file.mjs","sources":["../../src/file-upload/fileTools.ts","../../src/file-upload/ngfBackground.directive.ts","../../src/file-upload/doc-event-help.functions.ts","../../src/file-upload/ngf.directive.ts","../../src/file-upload/ngfDrop.directive.ts","../../src/file-upload/ngfSelect.directive.ts","../../src/file-upload/ngfUploadStatus.directive.ts","../../src/file-upload/ngfFormData.directive.ts","../../src/file-upload/ngfSrc.directive.ts","../../src/file-upload/ngf.module.ts","../../src/angular-file.ts"],"sourcesContent":["export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean {   \n  if( !accept ){\n    return true\n  }\n\n  const defs = accept.split(',')\n  let regx:RegExp\n  let acceptRegString:string\n\n  for(let x=defs.length-1; x >= 0; --x){\n    //Escapes dots in mimetype \n    acceptRegString = defs[x]\n    //trim\n    acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n    //Escapes stars in mimetype \n    acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n    //let acceptReg = '^((' + acceptRegString\n    //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n    \n    //try by mime\n    regx = new RegExp(acceptRegString, 'gi')\n    if( type.search(regx)>=0 ){\n      return true\n    }\n\n    //try by ext\n    if( acceptRegString.substring(0, 1)=='.' ){      \n      acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n      regx = new RegExp(acceptRegString+'$', 'i')\n      if( (name||type).search(regx)>=0 ){\n        return true\n      }\n    }\n  }\n  return false\n}\n\nexport interface InvalidFileItem{\n  file:File\n  type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n  var binary = '';\n  var bytes = new Uint8Array(buffer);\n  var len = bytes.byteLength;\n  for (var i = 0; i < len; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n  dataurl:string,\n  name:string,\n  origSize?:any\n):Blob{\n  var arr = dataurl.split(',');\n  var mimeMatch = arr[0].match(/:(.*?);/)\n  var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n  var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n  while (n--) {\n    u8arr[n] = bstr.charCodeAt(n);\n  }\n  \n  var blob: any = new window.Blob([u8arr], {type: mime});\n  blob[\"name\"] = name;\n  blob[\"$ngfOrigSize\"] = origSize;\n  return blob;\n}\n\nexport interface orientationMeta{\n  orientation: number\n  fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n  ctx:CanvasRenderingContext2D,\n  orientation:number,\n  width:number,\n  height:number\n) {\n  switch (orientation) {\n    case 2:\n      return ctx.transform(-1, 0, 0, 1, width, 0);\n    case 3:\n      return ctx.transform(-1, 0, 0, -1, width, height);\n    case 4:\n      return ctx.transform(1, 0, 0, -1, 0, height);\n    case 5:\n      return ctx.transform(0, 1, 1, 0, 0, 0);\n    case 6:\n      return ctx.transform(0, 1, -1, 0, height, 0);\n    case 7:\n      return ctx.transform(0, -1, -1, 0, height, width);\n    case 8:\n      return ctx.transform(0, -1, 1, 0, 0, width);\n  }\n}\n\nexport function fixFileOrientationByMeta(\n  file:File, result:orientationMeta\n):Promise<File>{\n  return dataUrl(file, true)\n  .then(url=>{\n    var canvas = document.createElement('canvas');\n    var img = document.createElement('img');\n\n    return <Promise<File>>new Promise(function(res,rej){\n      img.onload = function () {\n        try {\n          canvas.width = result.orientation > 4 ? img.height : img.width\n          canvas.height = result.orientation > 4 ? img.width : img.height\n          var ctx = <CanvasRenderingContext2D>canvas.getContext('2d')\n          applyTransform(ctx, result.orientation, img.width, img.height)\n          ctx.drawImage(img, 0, 0);\n          var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n          const base = arrayBufferToBase64(result.fixedArrayBuffer)\n          dataUrl = restoreExif(base, dataUrl)\n          var blob = dataUrltoBlob(dataUrl, file.name)\n          const newFile = blobToFile(blob, file.name);\n          res(newFile);\n        } catch (e) {\n          rej(e)\n        }\n      };\n      img.onerror = rej;\n      img.src = url;    \n    })\n  })\n}\n\nexport function applyExifRotation(\n  file:File\n):Promise<File>{\n  if (file.type.indexOf('image/jpeg') !== 0) {\n    return Promise.resolve(file);\n  }\n\n  return readOrientation(file)\n  .then((result:orientationMeta)=>{\n    if (result.orientation < 2 || result.orientation > 8) {\n      return file\n    }\n    \n    return fixFileOrientationByMeta(file,result)\n  })\n}\n\nexport function readOrientation(\n  file:File\n):Promise<orientationMeta>{\n  return new Promise((res,rej)=>{\n    var reader = new FileReader();\n    var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n    reader.readAsArrayBuffer(slicedFile);\n    reader.onerror = rej\n    reader.onload = function (e:any) {\n      var result:orientationMeta = {orientation: 1};\n      var view = new DataView( <ArrayBuffer>this.result );\n      if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n      var length = view.byteLength,\n        offset = 2;\n      while (offset < length) {\n        var marker = view.getUint16(offset, false);\n        offset += 2;\n        if (marker === 0xFFE1) {\n          if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n          var little = view.getUint16(offset += 6, false) === 0x4949;\n          offset += view.getUint32(offset + 4, little);\n          var tags = view.getUint16(offset, little);\n          offset += 2;\n          for (var i = 0; i < tags; i++)\n            if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n              var orientation = view.getUint16(offset + (i * 12) + 8, little);\n              if (orientation >= 2 && orientation <= 8) {\n                view.setUint16(offset + (i * 12) + 8, 1, little);\n                result.fixedArrayBuffer = e.target.result;\n              }\n              result.orientation = orientation;\n              return res(result);\n            }\n        } else if ((marker & 0xFF00) !== 0xFF00) break;\n        else offset += view.getUint16(offset, false);\n      }\n      return res(result);\n    };\n  })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n  file:any,\n  disallowObjectUrl?:any\n):Promise<string>{\n  if (!file) return Promise.resolve(file)\n  \n  if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n    return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n  }\n\n  var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n  if (p) return p;\n\n  const win = getWindow()\n  let deferred:Promise<string>\n  if (win.FileReader && file &&\n    (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n    (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n    //prefer URL.createObjectURL for handling refrences to files of all sizes\n    //since it doesn´t build a large string in memory\n    var URL = win.URL || win.webkitURL;\n    if (FileReader) {\n      deferred = new Promise((res,rej)=>{\n        var fileReader = new FileReader();\n        fileReader.onload = function (event:any) {\n          file.$ngfDataUrl = event.target.result;\n          delete file.$ngfDataUrl;\n          res( event.target.result )\n        };\n        fileReader.onerror = function (e) {\n          file.$ngfDataUrl = '';\n          rej(e)\n        };\n        fileReader.readAsDataURL(file);\n      })\n    } else {\n      var url:any;\n      try {\n        url = URL.createObjectURL(file);\n      } catch (e) {\n        return Promise.reject(e);\n      }\n      \n      deferred = Promise.resolve( url )\n      file.$ngfBlobUrl = url;\n    }\n  } else {\n    file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n    return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n  }\n\n  if (disallowObjectUrl) {\n    p = file.$$ngfDataUrlPromise = deferred;\n  } else {\n    p = file.$$ngfBlobUrlPromise = deferred;\n  }\n\n  p = p.then((x:any)=>{\n    delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n    return x\n  })\n\n  return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n  var ExifRestorer:any = {\n    KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n  }\n\n  ExifRestorer.encode64 = function (input:any) {\n    var output = '',\n      chr1, chr2, chr3:any = '',\n      enc1, enc2, enc3, enc4:any = '',\n      i = 0;\n\n    do {\n      chr1 = input[i++];\n      chr2 = input[i++];\n      chr3 = input[i++];\n\n      enc1 = chr1 >> 2;\n      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n      enc4 = chr3 & 63;\n\n      if (isNaN(chr2)) {\n        enc3 = enc4 = 64;\n      } else if (isNaN(chr3)) {\n        enc4 = 64;\n      }\n\n      output = output +\n        this.KEY_STR.charAt(enc1) +\n        this.KEY_STR.charAt(enc2) +\n        this.KEY_STR.charAt(enc3) +\n        this.KEY_STR.charAt(enc4);\n      chr1 = chr2 = chr3 = '';\n      enc1 = enc2 = enc3 = enc4 = '';\n    } while (i < input.length);\n\n    return output;\n  };\n\n  ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n    if (origFileBase64.match('data:image/jpeg;base64,')) {\n      origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n    }\n\n    var rawImage:number[] = this.decode64(origFileBase64);\n    var segments = this.slice2Segments(rawImage);\n\n    var image = this.exifManipulation(resizedFileBase64, segments);\n\n    return 'data:image/jpeg;base64,' + this.encode64(image);\n  };\n\n\n  ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n    var exifArray = this.getExifArray(segments),\n      newImageArray = this.insertExif(resizedFileBase64, exifArray);\n    return new Uint8Array(newImageArray);\n  };\n\n  ExifRestorer.getExifArray = function (segments:number[][]) {\n    var seg;\n    for (var x = 0; x < segments.length; x++) {\n      seg = segments[x];\n      if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n      {\n        return seg;\n      }\n    }\n    return [];\n  };\n\n\n  ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n    var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n      buf = this.decode64(imageData),\n      separatePoint = buf.indexOf(255, 3),\n      mae = buf.slice(0, separatePoint),\n      ato = buf.slice(separatePoint),\n      array = mae;\n\n    array = array.concat(exifArray);\n    array = array.concat(ato);\n    return array;\n  };\n\n\n  ExifRestorer.slice2Segments = function(\n    rawImageArray:number[]\n  ) {\n    var head:number = 0,\n      segments:number[][] = [];\n\n    while (1) {\n      if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n        break;\n      }\n      if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n        head += 2;\n      }\n      else {\n        var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n        var endPoint = head + length + 2\n        var seg:number[] = rawImageArray.slice(head, endPoint)\n        segments.push(seg);\n        head = endPoint;\n      }\n      if (head > rawImageArray.length) {\n        break;\n      }\n    }\n\n    return segments;\n  };\n\n\n  ExifRestorer.decode64 = function (\n    input:any\n  ):number[]{\n    var chr1, chr2, chr3:any = '',\n      enc1, enc2, enc3, enc4:any = '',\n      i = 0,\n      buf:number[] = [];\n\n    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n    var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n    if (base64test.exec(input)) {\n      console.log('There were invalid base64 characters in the input text.');\n    }\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n    do {\n      enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n      enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n      enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n      enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n      chr1 = (enc1 << 2) | (enc2 >> 4);\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n      chr3 = ((enc3 & 3) << 6) | enc4;\n\n      buf.push(chr1);\n\n      if (enc3 !== 64) {\n        buf.push(chr2);\n      }\n      if (enc4 !== 64) {\n        buf.push(chr3);\n      }\n\n      chr1 = chr2 = chr3 = '';\n      enc1 = enc2 = enc3 = enc4 = '';\n\n    } while (i < input.length);\n\n    return buf;\n  };\n\n  return ExifRestorer.restore(orig, resized);  //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n  var b: any = theBlob;\n  //A Blob() is almost a File() - it's just missing the two properties below which we will add\n  b.lastModifiedDate = new Date();\n  b.name = fileName;\n\n  //Cast to a File() type\n  return <File>theBlob;\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n  @Input('ngfBackground') file:any\n\n  constructor(public ElementRef:ElementRef){}\n\n  ngOnChanges( _changes:any ){\n    dataUrl(this.file)\n    .then(src=>{\n      const urlString = 'url(\\'' + (src || '') + '\\')'\n      this.ElementRef.nativeElement.style.backgroundImage = urlString\n    })\n  }\n}\n","export const isFileInput = function(elm:any){\n  const ty = elm.getAttribute('type')\n  return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n  var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n  if (touches) {\n    if (evt.type === 'touchstart') {\n      initialTouchStartX = touches[0].clientX;\n      initialTouchStartY = touches[0].clientY;\n      return true; // don't block event default\n    } else {\n      // prevent scroll from triggering event\n      if (evt.type === 'touchend') {\n        var currentX = touches[0].clientX;\n        var currentY = touches[0].clientY;\n        if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n          (Math.abs(currentY - initialTouchStartY) > 20)) {\n          evt.stopPropagation();\n          if (evt.cancelable) {\n            evt.preventDefault();\n          }\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n  return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n  var fileElem = createFileInput()\n  var label = document.createElement('label');\n  label.innerHTML = 'upload'\n  label.style.visibility = 'hidden'\n  label.style.position = 'absolute'\n  label.style.overflow = 'hidden'\n  label.style.width = '0px'\n  label.style.height = '0px'\n  label.style.border = 'none'\n  label.style.margin = '0px'\n  label.style.padding = '0px'\n  label.setAttribute('tabindex','-1')\n  \n  //bindAttrToFileInput(fileElem, label);\n  //generatedElems.push({el: elem, ref: label});\n\n  label.appendChild( fileElem )\n  //document.body.appendChild( label );\n\n  return label;\n}\n\nexport const createFileInput = function() {\n  var fileElem = document.createElement('input');\n  fileElem.type=\"file\"\n  return fileElem;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, SimpleChanges } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n  acceptType, InvalidFileItem,\n  applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n  type:string\n  kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n  selector: \"[ngf]\",\n  exportAs:\"ngf\"\n})\nexport class ngf {\n  fileElm: any\n  filters: {name: string, fn: (file:File)=>boolean}[] = []\n  lastFileCount: number = 0\n\n  @Input() multiple !:string\n  @Input() accept   !:string\n  @Input() maxSize  !:number\n  @Input() ngfFixOrientation: boolean = true\n\n  @Input() fileDropDisabled: boolean = false\n  @Input() selectable: boolean | string = false\n  @Output('init') directiveInit:EventEmitter<ngf> = new EventEmitter()\n\n  @Input() lastInvalids:InvalidFileItem[] = []\n  @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n  @Input() lastBaseUrl!: string//base64 last file uploaded url\n  @Output() lastBaseUrlChange:EventEmitter<string> = new EventEmitter()\n\n  @Input() file?: File//last file uploaded\n  @Output() fileChange: EventEmitter<File> = new EventEmitter()\n\n  @Input() files:File[] = []\n  @Output() filesChange:EventEmitter<File[]> = new EventEmitter<File[]>();\n\n  @Output() fileSelectStart:EventEmitter<Event> = new EventEmitter()\n\n  @Input() capturePaste: boolean // window paste file watching (empty string turns on)\n\n  pasteCapturer!: (e: Event) => void // goes with capturePaste\n\n  constructor(public element:ElementRef){\n    this.initFilters()\n  }\n\n  initFilters(){\n    // the order is important\n    this.filters.push({name: 'accept', fn: this._acceptFilter})\n    this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n    //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n    //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n    //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n  }\n\n  ngOnDestroy(){\n    delete this.fileElm//faster memory release of dom element\n    this.destroyPasteListener();\n  }\n\n  ngOnInit(){\n    const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n    if( selectable ){\n      this.enableSelecting()\n    }\n\n    if( this.multiple ){\n      this.paramFileElm().setAttribute('multiple', this.multiple)\n    }\n\n    this.evalCapturePaste();\n\n    // create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n    setTimeout(()=>{\n      this.directiveInit.emit(this)\n    }, 0)\n  }\n\n  ngOnChanges( changes: SimpleChanges ){\n    if( changes.accept ){\n      this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n    }\n\n    if (changes.capturePaste) {\n      this.evalCapturePaste();\n    }\n\n    // Did we go from having a file to not having a file? Clear file element then\n    if (changes.file && changes.file.previousValue && !changes.file.currentValue) {\n      this.clearFileElmValue()\n    }\n\n    // Did we go from having files to not having files? Clear file element then\n    if (changes.files) {\n      const filesWentToZero = changes.files.previousValue?.length && !changes.files.currentValue?.length\n\n      if (filesWentToZero) {\n        this.clearFileElmValue()\n      }\n    }\n  }\n\n  evalCapturePaste() {\n    const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n    if (isActive) {\n      if (this.pasteCapturer) {\n        return; // already listening\n      }\n\n      this.pasteCapturer = (e: Event) => {\n        const clip = (e as any).clipboardData;\n        if (clip && clip.files && clip.files.length) {\n          this.handleFiles(clip.files);\n          e.preventDefault();\n        }\n      }\n\n      window.addEventListener('paste', this.pasteCapturer);\n\n      return;\n    }\n\n    this.destroyPasteListener();\n  }\n\n  destroyPasteListener() {\n    if (this.pasteCapturer) {\n      window.removeEventListener('paste', this.pasteCapturer);\n      delete this.pasteCapturer;\n    }\n  }\n\n  paramFileElm(){\n    if( this.fileElm )return this.fileElm // already defined\n\n    // elm already is a file input\n    const isFile = isFileInput( this.element.nativeElement )\n    if(isFile){\n      return this.fileElm = this.element.nativeElement\n    }\n\n    // the host elm is NOT a file input\n    return this.fileElm = this.createFileElm({\n      change: this.changeFn.bind(this)\n    })\n  }\n\n  /** Only used when host element we are attached to is NOT a fileElement */\n  createFileElm({change}: {change:() => any}) {\n    // use specific technique to hide file element within\n    const label = createInvisibleFileInputWrap()\n    const fileElm = label.getElementsByTagName('input')[0]\n\n    fileElm.addEventListener('change', change);\n    this.element.nativeElement.appendChild( label ) // put on html stage\n\n    return fileElm\n  }\n\n  enableSelecting(){\n    let elm = this.element.nativeElement\n\n    if( isFileInput(elm) ){\n      const bindedHandler = event => this.beforeSelect(event)\n      elm.addEventListener('click', bindedHandler)\n      elm.addEventListener('touchstart', bindedHandler)\n      return\n    }\n\n    const bindedHandler = ev => this.clickHandler(ev)\n    elm.addEventListener('click', bindedHandler)\n    elm.addEventListener('touchstart', bindedHandler)\n    elm.addEventListener('touchend', bindedHandler)\n  }\n\n  getValidFiles( files:File[] ):File[]{\n    const rtn:File[] = []\n    for(let x=files.length-1; x >= 0; --x){\n      if( this.isFileValid(files[x]) ){\n        rtn.push( files[x] )\n      }\n    }\n    return rtn\n  }\n\n  getInvalidFiles(files:File[]):InvalidFileItem[]{\n    const rtn:InvalidFileItem[] = []\n    for(let x=files.length-1; x >= 0; --x){\n      let failReason = this.getFileFilterFailName(files[x])\n      if( failReason ){\n        rtn.push({\n          file : files[x],\n          type : failReason\n        })\n      }\n    }\n    return rtn\n  }\n\n  // Primary handler of files coming in\n  handleFiles(files:File[]){\n    const valids = this.getValidFiles(files)\n\n    if(files.length!=valids.length){\n      this.lastInvalids = this.getInvalidFiles(files)\n    }else{\n      delete this.lastInvalids\n    }\n\n    this.lastInvalidsChange.emit(this.lastInvalids)\n\n    if( valids.length ){\n      if( this.ngfFixOrientation ){\n        this.applyExifRotations(valids)\n        .then( fixedFiles=>this.que(fixedFiles) )\n      }else{\n        this.que(valids)\n      }\n    }\n\n    if (this.isEmptyAfterSelection()) {\n      this.element.nativeElement.value = ''\n    }\n  }\n\n  que( files:File[] ){\n    this.files = this.files || []\n    Array.prototype.push.apply(this.files, files)\n\n    //below break memory ref and doesnt act like a que\n    //this.files = files//causes memory change which triggers bindings like <ngfFormData [files]=\"files\"></ngfFormData>\n\n    this.filesChange.emit( this.files )\n\n    if(files.length){\n      this.fileChange.emit( this.file=files[0] )\n\n      if(this.lastBaseUrlChange.observers.length){\n        dataUrl( files[0] )\n        .then( url=>this.lastBaseUrlChange.emit(url) )\n      }\n    }\n\n    //will be checked for input value clearing\n    this.lastFileCount = this.files.length\n  }\n\n  /** called when input has files */\n  changeFn(event:any) {\n    var fileList = event.__files_ || (event.target && event.target.files)\n\n    if (!fileList) return;\n\n    this.stopEvent(event);\n    this.handleFiles(fileList)\n  }\n\n  clickHandler(evt: Event){\n    const elm = this.element.nativeElement\n    if (elm.getAttribute('disabled') || this.fileDropDisabled){\n      return false;\n    }\n\n    var r = detectSwipe(evt);\n    // prevent the click if it is a swipe\n    if ( r!==false ) return r;\n\n    const fileElm = this.paramFileElm()\n    fileElm.click()\n    //fileElm.dispatchEvent( new Event('click') );\n    this.beforeSelect(evt)\n\n    return false;\n  }\n\n  beforeSelect(event: Event){\n    this.fileSelectStart.emit(event)\n\n    if( this.files && this.lastFileCount===this.files.length )return\n\n    // if no files in array, be sure browser does not prevent reselect of same file (see github issue 27)\n    this.clearFileElmValue()\n  }\n\n  clearFileElmValue() {\n    if (!this.fileElm) return\n\n    this.fileElm.value = null\n  }\n\n  isEmptyAfterSelection():boolean {\n    return !!this.element.nativeElement.attributes.multiple;\n  }\n\n  stopEvent(event:any):any {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  transferHasFiles(transfer:any):any {\n    if (!transfer.types) {\n      return false;\n    }\n\n    if (transfer.types.indexOf) {\n      return transfer.types.indexOf('Files') !== -1;\n    } else if (transfer.types.contains) {\n      return transfer.types.contains('Files');\n    } else {\n      return false;\n    }\n  }\n\n  eventToFiles(event:Event){\n    const transfer = eventToTransfer(event);\n    if( transfer ){\n      if(transfer.files && transfer.files.length){\n        return transfer.files\n      }\n      if(transfer.items && transfer.items.length){\n        return transfer.items\n      }\n    }\n    return []\n  }\n\n  applyExifRotations(\n    files:File[]\n  ):Promise<File[]>{\n    const mapper = (\n      file:File,index:number\n    ):Promise<any>=>{\n      return applyExifRotation(file)\n      .then( fixedFile=>files.splice(index, 1, fixedFile) )\n    }\n\n    const proms:Promise<any>[] = []\n    for(let x=files.length-1; x >= 0; --x){\n      proms[x] = mapper( files[x], x )\n    }\n    return Promise.all( proms ).then( ()=>files )\n  }\n\n  @HostListener('change', ['$event'])\n  onChange(event:Event):void {\n    let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n    if(!files.length)return\n\n    this.stopEvent(event);\n    this.handleFiles(files)\n  }\n\n  getFileFilterFailName(\n    file:File\n  ):string | undefined{\n    for(let i = 0; i < this.filters.length; i++){\n      if( !this.filters[i].fn.call(this, file) ){\n        return this.filters[i].name\n      }\n    }\n    return undefined\n  }\n\n  isFileValid(file:File):boolean{\n    const noFilters = !this.accept && (!this.filters || !this.filters.length)\n    if( noFilters ){\n      return true//we have no filters so all files are valid\n    }\n\n    return this.getFileFilterFailName(file) ? false : true\n  }\n\n  isFilesValid(files:File[]){\n    for(let x=files.length-1; x >= 0; --x){\n      if( !this.isFileValid(files[x]) ){\n        return false\n      }\n    }\n    return true\n  }\n\n  protected _acceptFilter(item:File):boolean {\n    return acceptType(this.accept, item.type, item.name)\n  }\n\n  protected _fileSizeFilter(item:File):boolean {\n    return !(this.maxSize && item.size > this.maxSize);\n  }\n}\n\n\n/** browsers try hard to conceal data about file drags, this tends to undo that */\nexport function filesToWriteableObject( files:File[] ):dragMeta[]{\n  const jsonFiles:dragMeta[] = []\n  for(let x=0; x < files.length; ++x){\n    jsonFiles.push({\n      type:files[x].type,\n      kind:files[x][\"kind\"]\n    })\n  }\n  return jsonFiles\n}\n\nexport function eventToTransfer(event: any): TransferObject {\n  if(event.dataTransfer)return event.dataTransfer\n  return  event.originalEvent ? event.originalEvent.dataTransfer : null\n}\n\n\ninterface TransferObject {\n  items?: any[]\n  files?: any[]\n  dropEffect?: 'copy' // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/dropEffect\n}\n","import {\n  Directive, EventEmitter,\n  HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta, eventToTransfer, filesToWriteableObject } from \"./ngf.directive\"\n\n@Directive({\n  selector: \"[ngfDrop]\",\n  exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n  @Output() fileOver:EventEmitter<any> = new EventEmitter();\n\n  @Input() validDrag:boolean = false\n  @Output() validDragChange:EventEmitter<boolean> = new EventEmitter()\n\n  @Input() invalidDrag = false\n  @Output() invalidDragChange:EventEmitter<boolean> = new EventEmitter()\n\n  @Input() dragFiles !: dragMeta[]\n  @Output() dragFilesChange:EventEmitter<dragMeta[]> = new EventEmitter()\n\n  @HostListener('drop', ['$event'])\n  onDrop(event:Event):void {\n    if(this.fileDropDisabled){\n      this.stopEvent(event);\n      return\n    }\n\n    this.closeDrags()\n    let files = this.eventToFiles(event)\n\n    if(!files.length)return\n\n    this.stopEvent(event);\n    this.handleFiles(files)\n  }\n\n  handleFiles(files:File[]){\n    this.fileOver.emit(false)//turn-off dragover\n    super.handleFiles(files)\n  }\n\n  @HostListener('dragover', ['$event'])\n  onDragOver(event:Event):void {\n    if(this.fileDropDisabled){\n      this.stopEvent(event);\n      return\n    }\n\n    const transfer = eventToTransfer(event)\n\n    let files = this.eventToFiles(event)\n\n    let jsonFiles = filesToWriteableObject(files)\n    this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n    if( files.length ){\n      this.validDrag = this.isFilesValid(files)\n    }else{\n      //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n      this.validDrag = true\n    }\n\n    this.validDragChange.emit(this.validDrag)\n\n    this.invalidDrag = !this.validDrag\n    this.invalidDragChange.emit(this.invalidDrag)\n\n    transfer.dropEffect = 'copy' // change cursor and visual display\n    this.stopEvent(event)\n    this.fileOver.emit(true)\n  }\n\n  closeDrags(){\n    delete this.validDrag\n    this.validDragChange.emit(this.validDrag)\n    this.invalidDrag = false\n    this.invalidDragChange.emit(this.invalidDrag)\n    delete this.dragFiles\n    this.dragFilesChange.emit( this.dragFiles )\n  }\n\n  @HostListener('dragleave', ['$event'])\n  onDragLeave(event:Event):any {\n    if(this.fileDropDisabled){\n      this.stopEvent(event);\n      return\n    }\n\n    this.closeDrags()\n\n    if ((this as any).element) {\n      if (event.currentTarget === (this as any).element[0]) {\n        return;\n      }\n    }\n\n    this.stopEvent(event);\n    this.fileOver.emit(false);\n  }\n}","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n  selector: \"[ngfSelect]\",\n  exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n  @Input() selectable:any = true\n}","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n  @Input() percent:number = 0\n  @Output() percentChange:EventEmitter<number> = new EventEmitter()\n  @Input() httpEvent !: Event\n\n  ngOnChanges( changes ){\n    if( changes.httpEvent && changes.httpEvent.currentValue ){\n      const event = changes.httpEvent.currentValue\n      if (event.loaded && event.total) {\n        setTimeout(()=>{\n          this.percent = Math.round(100 * event.loaded / event.total);\n          this.percentChange.emit( this.percent )\n        }, 0)\n      }\n    }\n  }\n}","import {\n  IterableDiffer,\n  IterableDiffers,\n  Directive, EventEmitter,\n  Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n  @Input() files !: File[]\n  @Input() postName:string = \"file\"\n  @Input() fileName !: string//force file name\n\n  @Input() FormData:FormData = new FormData()\n  @Output() FormDataChange:EventEmitter<FormData> = new EventEmitter()\n\n  differ:IterableDiffer<{}>\n\n  constructor(IterableDiffers: IterableDiffers){\n    this.differ = IterableDiffers.find([]).create()\n  }\n\n  ngDoCheck(){\n    var changes = this.differ.diff( this.files );\n\n    if (changes) {\n      setTimeout(()=>this.buildFormData(), 0)\n    }\n  }\n\n  buildFormData(){\n    const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n    if( isArray ){\n      this.FormData = new FormData()\n      const files = this.files || []\n      files.forEach(file=>\n        this.FormData.append(this.postName, file, this.fileName||file.name)\n      )\n      this.FormDataChange.emit( this.FormData )\n    }else{\n      delete this.FormData\n    }\n  }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n  @Input('ngfSrc') file: any\n\n  constructor(public ElementRef: ElementRef) { }\n\n  ngOnChanges(_changes: any) {\n    dataUrl(this.file)\n    .then(src=>\n      this.ElementRef.nativeElement.src = src\n    )\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n  ngfDrop,\n  ngfSelect,\n  ngfBackground,\n  ngfSrc,\n  ngfUploadStatus,\n  ngfFormData,\n  ngf\n]\n\n@NgModule({\n  imports: [\n    CommonModule\n    //,HttpModule\n  ],\n  declarations: declarations,\n  exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}