{"version":3,"file":"ng-cw-v20-threads-background.mjs","sources":["../../../projects/components/threads-background/threads-background.component.ts","../../../projects/components/threads-background/threads-background.component.html","../../../projects/components/threads-background/threads-background.module.ts","../../../projects/components/threads-background/ng-cw-v20-threads-background.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  NgZone,\n  OnChanges,\n  PLATFORM_ID,\n  Renderer2,\n  SimpleChanges,\n  ViewChild,\n  inject,\n  input,\n} from '@angular/core';\nimport * as THREE from 'three';\n\nconst vertexShader = `\nvarying vec2 vUv;\nvoid main() {\n  vUv = uv;\n  gl_Position = vec4(position, 1.0);\n}\n`;\n\nconst fragmentShader = `\nprecision highp float;\n\nuniform float iTime;\nuniform vec3 iResolution;\nuniform vec3 uColor;\nuniform float uAmplitude;\nuniform float uDistance;\nuniform vec2 uMouse;\n\n#define PI 3.1415926538\n\nconst int u_line_count = 40;\nconst float u_line_width = 7.0;\nconst float u_line_blur = 10.0;\n\nfloat Perlin2D(vec2 P) {\n    vec2 Pi = floor(P);\n    vec4 Pf_Pfmin1 = P.xyxy - vec4(Pi, Pi + 1.0);\n    vec4 Pt = vec4(Pi.xy, Pi.xy + 1.0);\n    Pt = Pt - floor(Pt * (1.0 / 71.0)) * 71.0;\n    Pt += vec2(26.0, 161.0).xyxy;\n    Pt *= Pt;\n    Pt = Pt.xzxz * Pt.yyww;\n    vec4 hash_x = fract(Pt * (1.0 / 951.135664));\n    vec4 hash_y = fract(Pt * (1.0 / 642.949883));\n    vec4 grad_x = hash_x - 0.49999;\n    vec4 grad_y = hash_y - 0.49999;\n    vec4 grad_results = inversesqrt(grad_x * grad_x + grad_y * grad_y)\n        * (grad_x * Pf_Pfmin1.xzxz + grad_y * Pf_Pfmin1.yyww);\n    grad_results *= 1.4142135623730950;\n    vec2 blend = Pf_Pfmin1.xy * Pf_Pfmin1.xy * Pf_Pfmin1.xy\n               * (Pf_Pfmin1.xy * (Pf_Pfmin1.xy * 6.0 - 15.0) + 10.0);\n    vec4 blend2 = vec4(blend, vec2(1.0 - blend));\n    return dot(grad_results, blend2.zxzx * blend2.wwyy);\n}\n\nfloat pixel(float count, vec2 resolution) {\n    return (1.0 / max(resolution.x, resolution.y)) * count;\n}\n\nfloat lineFn(vec2 st, float width, float perc, float offset, vec2 mouse, float time, float amplitude, float distance) {\n    float split_offset = (perc * 0.4);\n    float split_point = 0.1 + split_offset;\n\n    float amplitude_normal = smoothstep(split_point, 0.7, st.x);\n    float amplitude_strength = 0.5;\n    float finalAmplitude = amplitude_normal * amplitude_strength\n                           * amplitude * (1.0 + (mouse.y - 0.5) * 0.2);\n\n    float time_scaled = time / 10.0 + (mouse.x - 0.5) * 1.0;\n    float blur = smoothstep(split_point, split_point + 0.05, st.x) * perc;\n\n    float xnoise = mix(\n        Perlin2D(vec2(time_scaled, st.x + perc) * 2.5),\n        Perlin2D(vec2(time_scaled, st.x + time_scaled) * 3.5) / 1.5,\n        st.x * 0.3\n    );\n\n    float y = 0.5 + (perc - 0.5) * distance + xnoise / 2.0 * finalAmplitude;\n\n    float line_start = smoothstep(\n        y + (width / 2.0) + (u_line_blur * pixel(1.0, iResolution.xy) * blur),\n        y,\n        st.y\n    );\n\n    float line_end = smoothstep(\n        y,\n        y - (width / 2.0) - (u_line_blur * pixel(1.0, iResolution.xy) * blur),\n        st.y\n    );\n\n    return clamp(\n        (line_start - line_end) * (1.0 - smoothstep(0.0, 1.0, pow(perc, 0.3))),\n        0.0,\n        1.0\n    );\n}\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord) {\n    vec2 uv = fragCoord / iResolution.xy;\n\n    float line_strength = 1.0;\n    for (int i = 0; i < u_line_count; i++) {\n        float p = float(i) / float(u_line_count);\n        line_strength *= (1.0 - lineFn(\n            uv,\n            u_line_width * pixel(1.0, iResolution.xy) * (1.0 - p),\n            p,\n            (PI * 1.0) * p,\n            uMouse,\n            iTime,\n            uAmplitude,\n            uDistance\n        ));\n    }\n\n    float colorVal = 1.0 - line_strength;\n    fragColor = vec4(uColor * colorVal, colorVal);\n}\n\nvoid main() {\n    mainImage(gl_FragColor, gl_FragCoord.xy);\n}\n`;\n\nfunction ncBooleanAttribute(value: unknown): boolean {\n  return value !== null && value !== undefined && value !== false && value !== 'false';\n}\n\n@Component({\n  selector: 'nc-threads-background',\n  templateUrl: './threads-background.component.html',\n  styleUrl: './threads-background.component.less',\n  host: {\n    '(mousemove)': 'onMouseMove($event)',\n    '(mouseleave)': 'onMouseLeave()',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThreadsBackgroundComponent implements AfterViewInit, OnChanges {\n  @ViewChild('container', { static: true }) containerRef!: ElementRef<HTMLDivElement>;\n\n  /** 颜色 [r, g, b] 数组（0-1） */\n  ncColor = input<readonly number[] | THREE.ColorRepresentation | null | undefined>([1, 1, 1]);\n  /** 振幅大小（0-5） */\n  ncAmplitude = input(1);\n  /** 线条距离（0-2） */\n  ncDistance = input(0);\n  /** 背景颜色 */\n  ncBgColor = input('black');\n\n  /** 是否启用鼠标交互 */\n  ncEnableMouseInteraction = input(false, { transform: ncBooleanAttribute });\n\n  private renderer!: THREE.WebGLRenderer;\n  private scene!: THREE.Scene;\n  private camera!: THREE.OrthographicCamera;\n  private material!: THREE.ShaderMaterial;\n  private geometry!: THREE.PlaneGeometry;\n  private mesh!: THREE.Mesh;\n\n  private resizeObserver: ResizeObserver | null = null;\n  private intersectionObserver: IntersectionObserver | null = null;\n  private animationFrameId: number | null = null;\n  private isVisible = true;\n  private isRunning = false;\n  private removeResizeListener: (() => void) | null = null;\n  private removeVisibilityListener: (() => void) | null = null;\n\n  private currentMouse = new THREE.Vector2(0.5, 0.5);\n  private targetMouse = new THREE.Vector2(0.5, 0.5);\n\n  private readonly document = inject(DOCUMENT);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly ngZone = inject(NgZone);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly renderer2 = inject(Renderer2);\n\n  constructor() {\n    this.destroyRef.onDestroy(() => this.cleanup());\n  }\n\n  ngAfterViewInit(): void {\n    if (!isPlatformBrowser(this.platformId) || !this.document.defaultView) return;\n\n    this.ngZone.runOutsideAngular(() => {\n      this.initWebGL();\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.material) {\n      if (changes['ncColor']) {\n        this.material.uniforms['uColor'].value.copy(this.getThreeColor(this.ncColor()));\n      }\n      if (changes['ncAmplitude']) {\n        this.material.uniforms['uAmplitude'].value = this.ncAmplitude();\n      }\n      if (changes['ncDistance']) {\n        this.material.uniforms['uDistance'].value = this.ncDistance();\n      }\n    }\n  }\n\n  private getThreeColor(color: readonly number[] | THREE.ColorRepresentation | null | undefined): THREE.Color {\n    if (color == null) {\n      return new THREE.Color(1, 1, 1);\n    }\n    if (Array.isArray(color)) {\n      return new THREE.Color(color[0] ?? 1, color[1] ?? 1, color[2] ?? 1);\n    }\n\n    return new THREE.Color(color as THREE.ColorRepresentation);\n  }\n\n  private initWebGL(): void {\n    const container = this.containerRef.nativeElement;\n\n    // 初始化渲染器\n    try {\n      this.renderer = new THREE.WebGLRenderer({ alpha: true, antialias: false });\n    } catch (e) {\n      return;\n    }\n    this.renderer.setClearColor(0x000000, 0);\n    // 采用与 Threads.jsx 中 blendFunc(SRC_ALPHA, ONE_MINUS_SRC_ALPHA) 一致的默认混合方式\n    container.appendChild(this.renderer.domElement);\n\n    this.scene = new THREE.Scene();\n    this.camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);\n\n    this.geometry = new THREE.PlaneGeometry(2, 2);\n\n    // 初始分辨率设定，后续由 resize 更新\n    const canvasWidth = container.clientWidth || 1;\n    const canvasHeight = container.clientHeight || 1;\n\n    this.material = new THREE.ShaderMaterial({\n      vertexShader,\n      fragmentShader,\n      transparent: true,\n      uniforms: {\n        iTime: { value: 0 },\n        iResolution: { value: new THREE.Vector3(canvasWidth, canvasHeight, canvasWidth / canvasHeight) },\n        uColor: { value: this.getThreeColor(this.ncColor()) },\n        uAmplitude: { value: this.ncAmplitude() },\n        uDistance: { value: this.ncDistance() },\n        uMouse: { value: new THREE.Vector2(0.5, 0.5) }\n      }\n    });\n\n    this.mesh = new THREE.Mesh(this.geometry, this.material);\n    this.scene.add(this.mesh);\n\n    this.setupResizeObserver(container);\n    this.setupIntersectionObserver(container);\n\n    this.resize();\n    this.start();\n  }\n\n  private setupResizeObserver(container: HTMLElement): void {\n    const win = this.document.defaultView;\n    if (win?.ResizeObserver) {\n      this.resizeObserver = new win.ResizeObserver(() => {\n        this.ngZone.runOutsideAngular(() => {\n          this.resize();\n        });\n      });\n      this.resizeObserver.observe(container);\n    } else if (win) {\n      this.removeResizeListener = this.renderer2.listen('window', 'resize', () => this.resize());\n    }\n  }\n\n  private setupIntersectionObserver(container: HTMLElement): void {\n    const win = this.document.defaultView;\n    if (win?.IntersectionObserver) {\n      this.intersectionObserver = new win.IntersectionObserver(entries => {\n        const entry = entries[0];\n        this.isVisible = entry.isIntersecting && entry.intersectionRatio > 0;\n        if (this.isVisible && !this.document.hidden) {\n          this.ngZone.runOutsideAngular(() => {\n            this.start();\n          });\n        } else {\n          this.pause();\n        }\n      }, { threshold: [0, 0.01, 0.1] });\n      this.intersectionObserver.observe(container);\n    }\n\n    this.removeVisibilityListener = this.renderer2.listen('document', 'visibilitychange', this.onVisibilityChange);\n  }\n\n  private onVisibilityChange = () => {\n    if (this.document.hidden) {\n      this.pause();\n    } else if (this.isVisible) {\n      this.ngZone.runOutsideAngular(() => {\n        this.start();\n      });\n    }\n  };\n\n  private resize(): void {\n    if (!this.containerRef || !this.renderer) return;\n    const container = this.containerRef.nativeElement;\n    const width = container.clientWidth || 1;\n    const height = container.clientHeight || 1;\n\n    this.renderer.setSize(width, height);\n    // 可选设置 pixelRatio，如不需要极高精度可保留 1 提高性能\n\n    this.material.uniforms['iResolution'].value.set(\n      width,\n      height,\n      (width / Math.max(height, 1))\n    );\n  }\n\n  private update = (t: number): void => {\n    if (!this.isRunning) return;\n\n    if (this.ncEnableMouseInteraction()) {\n      const smoothing = 0.05;\n      this.currentMouse.x += smoothing * (this.targetMouse.x - this.currentMouse.x);\n      this.currentMouse.y += smoothing * (this.targetMouse.y - this.currentMouse.y);\n      this.material.uniforms['uMouse'].value.copy(this.currentMouse);\n    } else {\n      this.material.uniforms['uMouse'].value.set(0.5, 0.5);\n    }\n\n    this.material.uniforms['iTime'].value = t * 0.001;\n\n    this.renderer.render(this.scene, this.camera);\n    this.animationFrameId = requestAnimationFrame(this.update);\n  };\n\n  private start(): void {\n    if (this.isRunning) return;\n    this.isRunning = true;\n    this.animationFrameId = requestAnimationFrame(this.update);\n  }\n\n  private pause(): void {\n    this.isRunning = false;\n    if (this.animationFrameId !== null) {\n      cancelAnimationFrame(this.animationFrameId);\n      this.animationFrameId = null;\n    }\n  }\n\n  private cleanup(): void {\n    this.pause();\n    this.resizeObserver?.disconnect();\n    this.intersectionObserver?.disconnect();\n    this.resizeObserver = null;\n    this.intersectionObserver = null;\n    this.removeResizeListener?.();\n    this.removeVisibilityListener?.();\n    this.removeResizeListener = null;\n    this.removeVisibilityListener = null;\n\n    if (this.renderer) {\n      const canvas = this.renderer.domElement;\n      if (canvas && canvas.parentNode) canvas.parentNode.removeChild(canvas);\n      this.renderer.dispose();\n      this.renderer.getContext()?.getExtension('WEBGL_lose_context')?.loseContext();\n    }\n    if (this.geometry) this.geometry.dispose();\n    if (this.material) this.material.dispose();\n    this.scene?.clear();\n  }\n\n  onMouseMove(event: MouseEvent): void {\n    if (!this.ncEnableMouseInteraction() || !this.containerRef) return;\n    const container = this.containerRef.nativeElement;\n    const rect = container.getBoundingClientRect();\n    if (rect.width === 0 || rect.height === 0) return;\n    const x = (event.clientX - rect.left) / rect.width;\n    const y = 1.0 - (event.clientY - rect.top) / rect.height;\n    this.targetMouse.set(x, y);\n  }\n\n  onMouseLeave(): void {\n    if (!this.ncEnableMouseInteraction()) return;\n    this.targetMouse.set(0.5, 0.5);\n  }\n}\n","<div #container class=\"nc-threads-canvas-container\" [style.background-color]=\"ncBgColor()\"></div>\n<div class=\"nc-content-wrapper\">\n  <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\r\nimport { ThreadsBackgroundComponent } from './threads-background.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n    imports: [\r\n        ThreadsBackgroundComponent,\r\n        CommonModule\r\n    ],\r\n    exports: [\r\n        ThreadsBackgroundComponent\r\n    ]\r\n})\r\nexport class NcThreadsBackgroundModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}