{"version":3,"file":"ngodings-ngx-image-tagger.mjs","sources":["../../../packages/ngx-image-tagger/src/lib/ngx-image-tagger.component.ts","../../../packages/ngx-image-tagger/src/lib/ngx-image-tagger.component.html","../../../packages/ngx-image-tagger/src/lib/ngx-image-tagger.module.ts","../../../packages/ngx-image-tagger/src/public-api.ts","../../../packages/ngx-image-tagger/src/ngodings-ngx-image-tagger.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { fromEvent } from 'rxjs';\n\nimport { Tagged, TaggerModel } from './model/tag';\n\n@Component({\n  selector: 'ngx-image-tagger',\n  templateUrl: './ngx-image-tagger.component.html',\n  styleUrls: ['./ngx-image-tagger.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgxImageTaggerComponent implements OnInit {\n  heightElement = 0;\n  widthElement = 0;\n\n  @Input() isAllowCreate = false;\n  @Input() isShowThumbnail = true;\n  @Input() imageClassList = \"\";\n\n  @Input() placeholderName = 'Name';\n\n  @Input() placeholderPrice = 'Price';\n  @Input() isShowPrice = true;\n\n  @Input() placeholderLink = 'Link';\n  @Input() isShowLink = true;\n\n  @Input() borderColor = \"#007ac1\";\n  @Input() backgroundColor = \"#03a9f4\";\n  @Input() textColor = \"#ffffff\";\n\n  @Input() inputClassList = \"\";\n\n  @Input() placeholderCreateTitle = 'Tag your product!';\n  @Input() buttonCancelTitle = \"Cancel\";\n  @Input() buttonCreateTitle = \"Create\";\n\n  @Input() isShowShop = false;\n  @Input() titleShop = \"Go to shop\";\n\n  @Input() onShowTagMode: \"Hover\" | \"Click\" | \"IconClick\" = \"Hover\";\n\n  @Input() tagger: TaggerModel = {\n    idParent: 'image-parent',\n    id: 'image',\n    style: '',\n    urlShop: '',\n    isOffsideX: false,\n    isOffsideY: false,\n    x: 0,\n    y: 0,\n    url: '',\n    tags: []\n  }\n  @Output() taggerChange: EventEmitter<TaggerModel> = new EventEmitter<TaggerModel>();\n\n  isShowForm = false;\n  isShowView = true;\n  form!: Tagged;\n\n  constructor() {\n    fromEvent(document.body, 'mousedown').subscribe((event: any) => {\n      const elementId = (event.target as Element).id;\n      if (this.tagger && elementId === this.tagger.id) {\n        this.resetTag();\n\n        const x = event.layerX;\n        const y = event.layerY - 6;\n\n        this.heightElement = event?.srcElement?.offsetHeight;\n        const halfY = this.heightElement / 2;\n        if (halfY < y) {\n          this.tagger.isOffsideY = true;\n        } else {\n          this.tagger.isOffsideY = false;\n        }\n\n        this.widthElement = event?.srcElement?.offsetWidth;\n        const halfX = this.widthElement / 2;\n        if (halfX < x) {\n          this.tagger.isOffsideX = true;\n        } else {\n          this.tagger.isOffsideX = false;\n        }\n        this.tagger.x = (x * 100) / this.widthElement;\n        this.tagger.y = (y * 100) / this.heightElement;\n        this.isShowForm = true;\n      }\n    });\n  }\n\n  ngOnInit() {\n    this.form = {\n      id: '',\n      x: 0,\n      y: 0,\n      isOffsideX: false,\n      isOffsideY: false,\n      tagger: this.tagger,\n      open: false,\n    }\n\n    if (this.onShowTagMode === 'IconClick') {\n      this.isShowView = false;\n    }\n  }\n\n  changeStyleClick(id: string, tag: Tagged) {\n    if (this.onShowTagMode != 'Click') {\n      return;\n    }\n\n    tag.open = !tag.open;\n    this.onShowStyle(id, tag.open);\n  }\n\n  changeStyleHover(id: string, show: boolean) {\n    if (this.onShowTagMode == 'Click') {\n      return;\n    }\n    this.onShowStyle(id, show);\n  }\n\n  onShowStyle(id: string, show: boolean) {\n    const el = document.getElementById(id)\n    if (el) {\n      if (show) {\n        el.style.display = \"block\"\n        el.style.zIndex = \"100\"\n      } else {\n        el.style.display = \"none\"\n        el.style.zIndex = \"1\"\n      }\n    }\n  }\n\n  goToURL(url: string) {\n    window.open(url, \"_blank\");\n  }\n\n  goToTag(item: Tagged) {\n    window.open(item.url, \"_blank\");\n  }\n\n  resetTag() {\n    this.form.name = '';\n    this.form.price = 0;\n    this.form.url = '';\n    this.isShowForm = false;\n  }\n\n  submitTag(item: TaggerModel) {\n    if (item) {\n      let isOffsideX = false;\n      let isOffsideY = false;\n\n      if (item?.x! > 50) {\n        isOffsideX = true;\n      } else {\n        isOffsideX = false;\n      }\n\n      if (item?.y! > 0) {\n        isOffsideY = true;\n      } else {\n        isOffsideY = false;\n      }\n\n      item.tags.push({\n        id: \"\", name: this.form.name, url: this.form.url, x: item.x!, y: item.y!, isOffsideX, isOffsideY,\n        open: false,\n        price: this.form.price,\n        tagger: Object.assign(this.tagger),\n      });\n      this.resetTag();\n      this.taggerChange.next(this.tagger);\n    }\n  }\n\n  editTag(item: TaggerModel, tag: Tagged, subindex: number) {\n    this.form.name = tag?.name!;\n    this.form.url = tag?.url!;\n\n    this.tagger.x = tag.x;\n    this.tagger.y = tag.y;\n    this.tagger.isOffsideX = tag.isOffsideX\n    this.tagger.isOffsideY = tag.isOffsideY;\n\n    this.isShowForm = true;\n    this.taggerChange.next(this.tagger);\n  }\n\n  deleteTag(item: TaggerModel, tag: Tagged, subindex: number) {\n    this.tagger.tags.splice(subindex, 1);\n    this.taggerChange.next(this.tagger);\n  }\n}\n","<div class=\"tagger\" id=\"{{ tagger.idParent }}\">\n  <img alt=\"Image Tagger\" id=\"{{ tagger.id }}\" [src]=\"tagger.url\" [ngClass]=\"imageClassList\"> \n  <ng-container *ngIf=\"tagger?.tags && tagger.tags?.length! > 0 && onShowTagMode === 'IconClick'\">\n    <div class=\"shop-icon\" [class.active]=\"isShowView\" (click)=\"isShowView = !isShowView\" [class.without-shop]=\"!isShowShop\" [class.with-shop]=\"isShowShop\">\n      <i class=\"material-icons\">local_mall</i>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"isShowForm\">\n    <div class=\"add-tag flex\" *ngIf=\"isAllowCreate\" [ngStyle]=\"{\n        'top.%': tagger.y , \n        'left.%': tagger.x\n    }\" [class.items-start]=\"tagger.isOffsideY && !tagger.isOffsideX || tagger.isOffsideY && tagger.isOffsideX\">\n\n      <div class=\"pin mr-2\"></div>\n\n      <div class=\"content\">\n        <ng-container *ngIf=\"placeholderCreateTitle\">\n          <div class=\"mb-3 create-title\">\n            {{ placeholderCreateTitle }}\n          </div>\n        </ng-container>\n        <div>\n          <input class=\"input-style\" [(ngModel)]=\"form.name\" [placeholder]=\"placeholderName\" type=\"text\" [ngClass]=\"inputClassList\">\n        </div>\n        <ng-container *ngIf=\"isShowPrice\">\n          <div class=\"mt-2\">\n            <input class=\"input-style\" [(ngModel)]=\"form.price\" currencyMask [options]=\"{ prefix: '$ ', thousands: '.', decimal: ',' }\" [placeholder]=\"placeholderPrice\" [ngClass]=\"inputClassList\">\n          </div>\n        </ng-container>\n        <ng-container *ngIf=\"isShowLink\">\n          <div class=\"mt-2\">\n            <input class=\"input-style\" [(ngModel)]=\"form.url\" [placeholder]=\"placeholderLink\" type=\"email\" [ngClass]=\"inputClassList\">\n          </div>\n        </ng-container>\n        <div class=\"mt-2 flex items-center justify-space-between gap-2\">\n          <div class=\"w-half\">\n            <button class=\"button-style outline\" (click)=\"isShowForm = false\" [ngStyle]=\"{ 'border-color': backgroundColor, 'color': backgroundColor }\">\n              {{ buttonCancelTitle }}\n            </button>\n          </div>\n          <div class=\"w-half\">\n            <button class=\"button-style\" (click)=\"submitTag(tagger)\" [ngStyle]=\"{ 'border-color': backgroundColor, 'background': backgroundColor, 'color': textColor  }\" [disabled]=\"!form.name || !form.url && isShowLink\">\n              {{ buttonCreateTitle }}\n            </button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"tagger.tags && isShowView\">\n    <ng-container *ngFor=\"let tag of tagger.tags; let subindex = index\">\n      <div class=\"tagging flex items-start\" (mouseover)=\"changeStyleHover(tag.id+subindex,true)\" (click)=\"changeStyleClick(tag.id+subindex, tag)\"\n        (mouseout)=\"changeStyleHover(tag.id+subindex,false)\" [ngStyle]=\"{\n          'top.%': tag.y, \n          'left.%': tag.x\n            }\">\n        <div class=\"pin mr-2 pointer\">\n        </div>\n        <div [id]=\"tag.id+subindex\" class=\"content\" style=\"display: none;\">\n          <div class=\"flex items-center justify-between gap-2\">\n            <ng-container *ngIf=\"isShowThumbnail\">\n              <div class=\"thumnbnail\">\n                <img [src]=\"tagger.url\" [ngStyle]=\"{'object-position':''+tag.x+'% '+tag.y+'%'+'', 'object-fit': 'none'}\">\n              </div>\n            </ng-container>\n            <div class=\"text-left\">\n              <div class=\"name\">{{ tag.name }}</div>\n              <div *ngIf=\"isShowPrice\" class=\"mt-1 price\" >{{ tag.price | currency:'USD' }}</div>\n              <div *ngIf=\"isShowLink\" class=\"link mt-1 pointer\" (click)=\"goToTag(tag)\">Go to link</div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n  </ng-container>\n</div>\n\n<ng-container *ngIf=\"isShowShop\">\n  <div class=\"shop flex items-center justify-between\"  [ngStyle]=\"{ 'background': backgroundColor }\" (click)=\"goToURL(tagger.urlShop!)\">\n    <div class=\"w-half flex items-center justify-content-start\">\n      {{ titleShop }}\n    </div>\n    <div class=\"flex items-center justify-content-end w-half\">\n      <i class=\"material-icons\">navigate_next</i>\n    </div>\n  </div>\n</ng-container>","import { CommonModule, CurrencyPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgxCurrencyModule } from '@ngodings/ngx-currency';\nimport { NgxImageTaggerComponent } from './ngx-image-tagger.component';\n\n@NgModule({\n  declarations: [\n    NgxImageTaggerComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    NgxCurrencyModule,\n  ],\n  providers: [\n    CurrencyPipe,\n  ],\n  exports: [\n    NgxImageTaggerComponent\n  ]\n})\nexport class NgxImageTaggerModule { }\n","/*\n * Public API Surface of ngx-image-tagger\n */\n\nexport * from './lib/ngx-image-tagger.component';\nexport * from './lib/ngx-image-tagger.module';\nexport * from './lib/model/tag';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}