{"version":3,"file":"obliczeniowo-elementary-image.mjs","sources":["../../../../projects/components/image/functions/load-image.ts","../../../../projects/components/image/components/preview/preview.component.ts","../../../../projects/components/image/components/preview/preview.component.html","../../../../projects/components/image/image.module.ts","../../../../projects/components/image/obliczeniowo-elementary-image.ts"],"sourcesContent":["export const loadImage = async (src: string) => {\n  return new Promise<HTMLImageElement>((res, rej) => {\n    const image = document.createElement('img');\n    image.onload = () => {\n      res(image);\n    };\n    image.src = src;\n  });\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport {\n  Component,\n  effect,\n  input,\n  model,\n} from '@angular/core';\nimport { loadImage } from '../../functions/load-image';\n\n@Component({\n    selector: 'obl-preview',\n    templateUrl: './preview.component.html',\n    styleUrl: './preview.component.scss',\n    standalone: false\n})\nexport class PreviewComponent {\n  src = input.required<string>();\n\n  width = input<number>(320);\n\n  height = input<number>(240);\n\n  columns = input<number>(5);\n  rows = input<number>(2);\n\n  current = model<number>(1);\n\n  starting = input<number>(1);\n\n  protected image?: HTMLImageElement;\n\n  protected timeout: any;\n\n  constructor() {\n    effect(() => {\n      this.image = undefined;\n      loadImage(this.src()).then((image) => (this.image = image));\n    });\n  }\n\n  imgCropWidth() {\n    const { image, columns, width } = this;\n    return image ? image.width / (columns() || 1) : width();\n  }\n\n  imgCropHeight() {\n    const { image, rows, height } = this;\n    return image ? image.height / (rows() || 1) : height();\n  }\n\n  scale() {\n    const cw = this.imgCropWidth();\n    const ch = this.imgCropHeight();\n\n    const xs = this.width() / cw;\n    const ys = this.height() / ch;\n\n    return Math.abs(xs) < Math.abs(ys) ? xs : ys;\n  }\n\n  y() {\n    if (this.image) {\n      return (\n        -this.imgCropHeight() *\n        this.scale() *\n        Math.floor(this.current() / this.columns())\n      );\n    }\n    return 0;\n  }\n\n  over(over: boolean) {\n    if (over && !this.timeout) {\n      const anim = () => {\n        this.current.set((this.current() + 1) % (this.columns() * this.rows()));\n        if (over) {\n          this.timeout = setTimeout(anim, 500);\n        } else {\n          this.timeout = undefined;\n        }\n      };\n      anim();\n    } else {\n      clearTimeout(this.timeout);\n      this.timeout = undefined;\n      this.current.set(this.starting());\n    }\n  }\n}\n","<div [ngStyle]=\"{ 'width.px': width(), 'height.px': height() }\">\n  @if (image) {\n    <div\n      class=\"crop\"\n      [ngStyle]=\"{\n        'height.px': imgCropHeight() * scale(),\n        'width.px': imgCropWidth() * scale()\n      }\"\n      (mouseover)=\"over(true)\"\n      (mouseleave)=\"over(false)\"\n    >\n      <img\n        draggable=\"false\"\n        [src]=\"src()\"\n        [ngStyle]=\"{\n          'width.px': scale() * image.width,\n          'top.px': y(),\n          'left.px': -imgCropWidth() * scale() * (current() % columns())\n        }\"\n      />\n    </div>\n  }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PreviewComponent } from './components/preview/preview.component';\n\n@NgModule({\n  declarations: [PreviewComponent],\n  imports: [CommonModule],\n  exports: [PreviewComponent],\n})\nexport class ImageModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}