{"version":3,"file":"ng-zorro-antd-experimental-image.mjs","sources":["../../components/experimental/image/utils.ts","../../components/experimental/image/image-loader.ts","../../components/experimental/image/image.component.ts","../../components/experimental/image/image.module.ts","../../components/experimental/image/typings.ts","../../components/experimental/image/public-api.ts","../../components/experimental/image/ng-zorro-antd-experimental-image.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport function isFixedSize(size: number | string): boolean {\n  return typeof size === 'number' || /^(\\d)+(px)?$/.test(size);\n}\n\nexport function normalizeSrc(src: string): string {\n  return src[0] === '/' ? src.slice(1) : src;\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { isNil } from 'ng-zorro-antd/core/util';\n\nimport { NzImageSrcLoader } from './typings';\nimport { normalizeSrc } from './utils';\n\nexport const defaultImageSrcLoader: NzImageSrcLoader = ({ src }) => {\n  return src;\n};\n\n/**\n * AliObjectsLoader return format\n * {domain}/{src}?x-oss-process=image/resize,w_{width}\n */\nexport function createAliObjectsLoader(domain: string): NzImageSrcLoader {\n  return ({ src, width }) => {\n    const params = isNil(width) ? '' : `?x-oss-process=image/resize,w_${width}`;\n    return `${domain}/${normalizeSrc(src)}${params}`;\n  };\n}\n\n/**\n * ImgixLoader return format\n * {domain}/{src}?format=auto&fit=max&w={width}\n */\nexport function createImgixLoader(domain: string): NzImageSrcLoader {\n  return ({ src, width }) => {\n    const params = isNil(width) ? '' : `&fit=max&w=${width}`;\n    return `${domain}/${normalizeSrc(src)}?format=auto${params}`;\n  };\n}\n\n/**\n * CloudinaryLoader return format\n * {domain}/c_limit,q_auto,w_{width}/{src}\n */\nexport function createCloudinaryLoader(domain: string): NzImageSrcLoader {\n  return ({ src, width }) => {\n    const params = isNil(width) ? '' : `,w_${width}`;\n    return `${domain}/c_limit,q_auto${params}/${normalizeSrc(src)}`;\n  };\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { NzConfigKey, NzConfigService, WithConfig } from 'ng-zorro-antd/core/config';\nimport { warn } from 'ng-zorro-antd/core/logger';\nimport { ImagePreloadService, PreloadDisposeHandle } from 'ng-zorro-antd/core/services';\nimport { BooleanInput } from 'ng-zorro-antd/core/types';\nimport { InputBoolean } from 'ng-zorro-antd/core/util';\n\nimport { defaultImageSrcLoader } from './image-loader';\nimport { NzImageSrcLoader } from './typings';\nimport { isFixedSize } from './utils';\n\nexport const NZ_CONFIG_MODULE_NAME: NzConfigKey = 'imageExperimental';\nconst sizeBreakpoints = [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840];\n\n@Component({\n  selector: 'nz-image',\n  exportAs: 'nzImage',\n  template: `\n    <img\n      #imageRef\n      nz-image\n      [nzSrc]=\"src\"\n      [nzSrcset]=\"srcset\"\n      [nzDisablePreview]=\"nzDisablePreview\"\n      [nzFallback]=\"nzFallback\"\n      [nzPlaceholder]=\"nzPlaceholder\"\n      [attr.width]=\"width\"\n      [attr.height]=\"height\"\n      [attr.srcset]=\"srcset\"\n      [attr.alt]=\"nzAlt || null\"\n    />\n  `,\n  preserveWhitespaces: false,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class NzImageViewComponent implements OnInit, OnChanges, OnDestroy {\n  readonly _nzModuleName: NzConfigKey = NZ_CONFIG_MODULE_NAME;\n  static ngAcceptInputType_nzAutoSrcset: BooleanInput;\n  static ngAcceptInputType_nzPriority: BooleanInput;\n  static ngAcceptInputType_nzDisablePreview: BooleanInput;\n\n  @Input() nzSrc: string = '';\n  @Input() nzAlt: string = '';\n  @Input() nzWidth: string | number = 'auto';\n  @Input() nzHeight: string | number = 'auto';\n  @Input() @WithConfig() nzSrcLoader: NzImageSrcLoader = defaultImageSrcLoader;\n  @Input() @InputBoolean() @WithConfig() nzAutoSrcset: boolean = false;\n  @Input() @InputBoolean() nzPriority: boolean = false;\n  @Input() @WithConfig() nzFallback: string | null = null;\n  @Input() @WithConfig() nzPlaceholder: string | null = null;\n  @Input() @InputBoolean() @WithConfig() nzDisablePreview: boolean = false;\n  @ViewChild('imageRef') imageRef!: ElementRef<HTMLImageElement>;\n\n  src = '';\n\n  width: string | number = 'auto';\n  height: string | number = 'auto';\n  srcset = '';\n  internalImage!: HTMLImageElement;\n\n  private destroy$ = new Subject<void>();\n  private reloadDisposeHandler: PreloadDisposeHandle = () => void 0;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    public nzConfigService: NzConfigService,\n    private imagePreloadService: ImagePreloadService\n  ) {\n    this.nzConfigService\n      .getConfigChangeEventForComponent(NZ_CONFIG_MODULE_NAME)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        this.composeImageAttrs();\n        this.cdr.markForCheck();\n      });\n  }\n\n  ngOnInit(): void {\n    if (this.nzPriority) {\n      this.preload();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { nzLoader, nzSrc, nzOptimize } = changes;\n\n    if (nzSrc || nzLoader || nzOptimize) {\n      this.composeImageAttrs();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.reloadDisposeHandler();\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private preload(): void {\n    this.reloadDisposeHandler = this.imagePreloadService.addPreload({\n      src: this.src,\n      srcset: this.srcset\n    });\n  }\n\n  private optimizable(): boolean {\n    if (this.nzAutoSrcset) {\n      if (!isFixedSize(this.nzWidth) || !isFixedSize(this.nzHeight)) {\n        warn(\n          `When using \"nzAutoSrcset\" you should use a fixed size width and height, for more information please refer to CLS (https://web.dev/cls/) performance metrics`\n        );\n        return false;\n      }\n      if (this.nzSrc.endsWith('.svg')) {\n        warn(`SVG does not need to be optimized`);\n        return false;\n      }\n      if (this.nzSrc.startsWith('data:')) {\n        warn(`Data URLs cannot be optimized`);\n        return false;\n      }\n      return true;\n    }\n    return false;\n  }\n\n  private composeImageAttrs(): void {\n    const loader = this.getLoader();\n    if (!this.optimizable()) {\n      this.src = loader({ src: this.nzSrc });\n      this.width = this.nzWidth;\n      this.height = this.nzHeight;\n      return;\n    }\n    this.width = typeof this.nzWidth === 'number' ? this.nzWidth : parseInt(this.nzWidth, 10);\n    this.height = typeof this.nzHeight === 'number' ? this.nzHeight : parseInt(this.nzHeight, 10);\n    const widths = this.convertWidths(this.width, sizeBreakpoints);\n    this.src = loader({ src: this.nzSrc, width: widths[0] });\n    this.srcset = widths\n      .map(\n        (w, i) =>\n          `${loader({\n            src: this.nzSrc,\n            width: w\n          })} ${i + 1}x`\n      )\n      .join(', ');\n  }\n\n  private getLoader(): NzImageSrcLoader {\n    return this.nzSrcLoader || defaultImageSrcLoader;\n  }\n\n  private convertWidths(width: number, optimizeSizes: number[]): number[] {\n    const allSizes = [...optimizeSizes].sort((a, b) => a - b);\n    return [\n      ...new Set(\n        // 2x scale is sufficient\n        // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n        [width, width * 2].map(w => allSizes.find(p => p >= w) || w)\n      )\n    ];\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzImageModule as ImageModule } from 'ng-zorro-antd/image';\nimport { NzPipesModule } from 'ng-zorro-antd/pipes';\n\nimport { NzImageViewComponent } from './image.component';\n\n@NgModule({\n  imports: [\n    BidiModule,\n    OverlayModule,\n    PortalModule,\n    DragDropModule,\n    CommonModule,\n    NzIconModule,\n    NzPipesModule,\n    PlatformModule,\n    ImageModule\n  ],\n  exports: [NzImageViewComponent],\n  declarations: [NzImageViewComponent]\n})\nexport class NzImageModule {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport type NzImageSrcLoader = (params: { src: string; width?: number }) => string;\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './image.component';\nexport * from './image-loader';\nexport * from './image.module';\nexport * from './typings';\nexport * from './utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ImageModule"],"mappings":"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"}