nfx-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +235 -0
  2. package/dist/animations.cjs +3 -0
  3. package/dist/animations.d.ts +102 -0
  4. package/dist/animations.mjs +14 -0
  5. package/dist/apis.cjs +5 -0
  6. package/dist/apis.cjs.map +1 -0
  7. package/dist/apis.d.ts +7 -0
  8. package/dist/apis.mjs +18 -0
  9. package/dist/apis.mjs.map +1 -0
  10. package/dist/chunk-BounceLoading-B54QEw0n.mjs +244 -0
  11. package/dist/chunk-BounceLoading-B54QEw0n.mjs.map +1 -0
  12. package/dist/chunk-BounceLoading-C6n4BZVJ.cjs +11 -0
  13. package/dist/chunk-BounceLoading-C6n4BZVJ.cjs.map +1 -0
  14. package/dist/chunk-animations-Brp-bsaE.mjs +1243 -0
  15. package/dist/chunk-animations-Brp-bsaE.mjs.map +1 -0
  16. package/dist/chunk-animations-e2F3zuP9.cjs +190 -0
  17. package/dist/chunk-animations-e2F3zuP9.cjs.map +1 -0
  18. package/dist/chunk-chunk-BFrxaqQT.cjs +1 -0
  19. package/dist/chunk-i18n-Bp6pPM9n.mjs +207 -0
  20. package/dist/chunk-i18n-Bp6pPM9n.mjs.map +1 -0
  21. package/dist/chunk-i18n-_7W7guSV.cjs +3 -0
  22. package/dist/chunk-i18n-_7W7guSV.cjs.map +1 -0
  23. package/dist/chunk-lstorage-BVCD00Ow.mjs +27 -0
  24. package/dist/chunk-lstorage-BVCD00Ow.mjs.map +1 -0
  25. package/dist/chunk-lstorage-BnxLXHgH.cjs +3 -0
  26. package/dist/chunk-lstorage-BnxLXHgH.cjs.map +1 -0
  27. package/dist/chunk-lucide-BhgnmTNo.mjs +158 -0
  28. package/dist/chunk-lucide-BhgnmTNo.mjs.map +1 -0
  29. package/dist/chunk-lucide-CP2lvOPY.cjs +3 -0
  30. package/dist/chunk-lucide-CP2lvOPY.cjs.map +1 -0
  31. package/dist/chunk-preference-CYl68oeU.cjs +3 -0
  32. package/dist/chunk-preference-CYl68oeU.cjs.map +1 -0
  33. package/dist/chunk-preference-DImtu5jI.mjs +51 -0
  34. package/dist/chunk-preference-DImtu5jI.mjs.map +1 -0
  35. package/dist/chunk-types-BE3JCLff.cjs +3 -0
  36. package/dist/chunk-types-BE3JCLff.cjs.map +1 -0
  37. package/dist/chunk-types-BkFxelHl.mjs +20 -0
  38. package/dist/chunk-types-BkFxelHl.mjs.map +1 -0
  39. package/dist/chunk-types-C_opkZGr.cjs +3 -0
  40. package/dist/chunk-types-C_opkZGr.cjs.map +1 -0
  41. package/dist/chunk-types-CkbZrFqZ.cjs +3 -0
  42. package/dist/chunk-types-CkbZrFqZ.cjs.map +1 -0
  43. package/dist/chunk-types-DNPBKfmx.mjs +11 -0
  44. package/dist/chunk-types-DNPBKfmx.mjs.map +1 -0
  45. package/dist/chunk-types-SD4MzUGp.mjs +11 -0
  46. package/dist/chunk-types-SD4MzUGp.mjs.map +1 -0
  47. package/dist/chunk-useLayout-BAJHOIL3.cjs +3 -0
  48. package/dist/chunk-useLayout-BAJHOIL3.cjs.map +1 -0
  49. package/dist/chunk-useLayout-DPxlynT-.mjs +12 -0
  50. package/dist/chunk-useLayout-DPxlynT-.mjs.map +1 -0
  51. package/dist/chunk-useTheme-DgleVMMh.cjs +3 -0
  52. package/dist/chunk-useTheme-DgleVMMh.cjs.map +1 -0
  53. package/dist/chunk-useTheme-oHcq3d0o.mjs +13 -0
  54. package/dist/chunk-useTheme-oHcq3d0o.mjs.map +1 -0
  55. package/dist/components.cjs +8 -0
  56. package/dist/components.cjs.map +1 -0
  57. package/dist/components.d.ts +411 -0
  58. package/dist/components.mjs +1688 -0
  59. package/dist/components.mjs.map +1 -0
  60. package/dist/constants.cjs +5 -0
  61. package/dist/constants.cjs.map +1 -0
  62. package/dist/constants.d.ts +130 -0
  63. package/dist/constants.mjs +85 -0
  64. package/dist/constants.mjs.map +1 -0
  65. package/dist/events.cjs +5 -0
  66. package/dist/events.cjs.map +1 -0
  67. package/dist/events.d.ts +66 -0
  68. package/dist/events.mjs +31 -0
  69. package/dist/events.mjs.map +1 -0
  70. package/dist/hooks.cjs +5 -0
  71. package/dist/hooks.cjs.map +1 -0
  72. package/dist/hooks.d.ts +316 -0
  73. package/dist/hooks.mjs +107 -0
  74. package/dist/hooks.mjs.map +1 -0
  75. package/dist/icons.cjs +3 -0
  76. package/dist/icons.d.ts +218 -0
  77. package/dist/icons.mjs +76 -0
  78. package/dist/languages.cjs +5 -0
  79. package/dist/languages.cjs.map +1 -0
  80. package/dist/languages.d.ts +174 -0
  81. package/dist/languages.mjs +112 -0
  82. package/dist/languages.mjs.map +1 -0
  83. package/dist/layouts.cjs +5 -0
  84. package/dist/layouts.cjs.map +1 -0
  85. package/dist/layouts.d.ts +209 -0
  86. package/dist/layouts.mjs +460 -0
  87. package/dist/layouts.mjs.map +1 -0
  88. package/dist/navigations.cjs +5 -0
  89. package/dist/navigations.cjs.map +1 -0
  90. package/dist/navigations.d.ts +72 -0
  91. package/dist/navigations.mjs +30 -0
  92. package/dist/navigations.mjs.map +1 -0
  93. package/dist/preference.cjs +3 -0
  94. package/dist/preference.d.ts +94 -0
  95. package/dist/preference.mjs +14 -0
  96. package/dist/services.cjs +5 -0
  97. package/dist/services.cjs.map +1 -0
  98. package/dist/services.d.ts +8 -0
  99. package/dist/services.mjs +26 -0
  100. package/dist/services.mjs.map +1 -0
  101. package/dist/stores.cjs +5 -0
  102. package/dist/stores.cjs.map +1 -0
  103. package/dist/stores.d.ts +101 -0
  104. package/dist/stores.mjs +167 -0
  105. package/dist/stores.mjs.map +1 -0
  106. package/dist/themes.cjs +5 -0
  107. package/dist/themes.cjs.map +1 -0
  108. package/dist/themes.d.ts +229 -0
  109. package/dist/themes.mjs +894 -0
  110. package/dist/themes.mjs.map +1 -0
  111. package/dist/types.cjs +2 -0
  112. package/dist/types.d.ts +147 -0
  113. package/dist/types.mjs +2 -0
  114. package/dist/utils.cjs +5 -0
  115. package/dist/utils.cjs.map +1 -0
  116. package/dist/utils.d.ts +374 -0
  117. package/dist/utils.mjs +293 -0
  118. package/dist/utils.mjs.map +1 -0
  119. package/package.json +196 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-animations-Brp-bsaE.mjs","names":[],"sources":["../src/designs/animations/Waves/style.module.css","../src/designs/animations/Waves/index.tsx","../src/designs/animations/Squares/style.module.css","../src/designs/animations/Squares/index.tsx","../src/designs/animations/LetterGlitch/style.module.css","../src/designs/animations/LetterGlitch/index.tsx","../src/designs/animations/PixelBlast/style.module.css","../src/designs/animations/PixelBlast/index.tsx"],"sourcesContent":[".waves {\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.waves::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 0.5rem;\n height: 0.5rem;\n background: #160000;\n border-radius: 50%;\n transform: translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);\n will-change: transform;\n}\n\n.wavesCanvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport type { CSSProperties } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\nclass Grad {\n x: number;\n y: number;\n z: number;\n constructor(x: number, y: number, z: number) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n dot2(x: number, y: number): number {\n return this.x * x + this.y * y;\n }\n}\n\nclass Noise {\n grad3: Grad[];\n p: number[];\n perm: number[];\n gradP: Grad[];\n\n constructor(seed = 0) {\n this.grad3 = [\n new Grad(1, 1, 0),\n new Grad(-1, 1, 0),\n new Grad(1, -1, 0),\n new Grad(-1, -1, 0),\n new Grad(1, 0, 1),\n new Grad(-1, 0, 1),\n new Grad(1, 0, -1),\n new Grad(-1, 0, -1),\n new Grad(0, 1, 1),\n new Grad(0, -1, 1),\n new Grad(0, 1, -1),\n new Grad(0, -1, -1),\n ];\n this.p = [\n 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234,\n 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139,\n 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80,\n 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202,\n 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221,\n 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210,\n 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150,\n 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180,\n ];\n this.perm = new Array(512);\n this.gradP = new Array(512);\n this.seed(seed);\n }\n seed(seed: number) {\n if (seed > 0 && seed < 1) seed *= 65536;\n seed = Math.floor(seed);\n if (seed < 256) seed |= seed << 8;\n for (let i = 0; i < 256; i++) {\n let v = i & 1 ? this.p[i] ^ (seed & 255) : this.p[i] ^ ((seed >> 8) & 255);\n this.perm[i] = this.perm[i + 256] = v;\n this.gradP[i] = this.gradP[i + 256] = this.grad3[v % 12];\n }\n }\n fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n lerp(a: number, b: number, t: number): number {\n return (1 - t) * a + t * b;\n }\n perlin2(x: number, y: number): number {\n let X = Math.floor(x),\n Y = Math.floor(y);\n x -= X;\n y -= Y;\n X &= 255;\n Y &= 255;\n const n00 = this.gradP[X + this.perm[Y]].dot2(x, y);\n const n01 = this.gradP[X + this.perm[Y + 1]].dot2(x, y - 1);\n const n10 = this.gradP[X + 1 + this.perm[Y]].dot2(x - 1, y);\n const n11 = this.gradP[X + 1 + this.perm[Y + 1]].dot2(x - 1, y - 1);\n const u = this.fade(x);\n return this.lerp(this.lerp(n00, n10, u), this.lerp(n01, n11, u), this.fade(y));\n }\n}\n\ninterface Point {\n x: number;\n y: number;\n wave: { x: number; y: number };\n cursor: { x: number; y: number; vx: number; vy: number };\n}\n\ninterface Mouse {\n x: number;\n y: number;\n lx: number;\n ly: number;\n sx: number;\n sy: number;\n v: number;\n vs: number;\n a: number;\n set: boolean;\n}\n\ninterface Config {\n lineColor: string;\n waveSpeedX: number;\n waveSpeedY: number;\n waveAmpX: number;\n waveAmpY: number;\n friction: number;\n tension: number;\n maxCursorMove: number;\n xGap: number;\n yGap: number;\n}\n\ninterface WavesProps {\n lineColor?: string;\n backgroundColor?: string;\n waveSpeedX?: number;\n waveSpeedY?: number;\n waveAmpX?: number;\n waveAmpY?: number;\n xGap?: number;\n yGap?: number;\n friction?: number;\n tension?: number;\n maxCursorMove?: number;\n style?: CSSProperties;\n className?: string;\n}\n\nconst Waves: React.FC<WavesProps> = ({\n lineColor = \"black\",\n backgroundColor = \"transparent\",\n waveSpeedX = 0.0125,\n waveSpeedY = 0.005,\n waveAmpX = 32,\n waveAmpY = 16,\n xGap = 10,\n yGap = 32,\n friction = 0.925,\n tension = 0.005,\n maxCursorMove = 100,\n style = {},\n className = \"\",\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const ctxRef = useRef<CanvasRenderingContext2D | null>(null);\n const boundingRef = useRef<{\n width: number;\n height: number;\n left: number;\n top: number;\n }>({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n });\n const noiseRef = useRef(new Noise(Math.random()));\n const linesRef = useRef<Point[][]>([]);\n const mouseRef = useRef<Mouse>({\n x: -10,\n y: 0,\n lx: 0,\n ly: 0,\n sx: 0,\n sy: 0,\n v: 0,\n vs: 0,\n a: 0,\n set: false,\n });\n const configRef = useRef<Config>({\n lineColor,\n waveSpeedX,\n waveSpeedY,\n waveAmpX,\n waveAmpY,\n friction,\n tension,\n maxCursorMove,\n xGap,\n yGap,\n });\n const frameIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n configRef.current = {\n lineColor,\n waveSpeedX,\n waveSpeedY,\n waveAmpX,\n waveAmpY,\n friction,\n tension,\n maxCursorMove,\n xGap,\n yGap,\n };\n }, [lineColor, waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, friction, tension, maxCursorMove, xGap, yGap]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n const container = containerRef.current;\n if (!canvas || !container) return;\n ctxRef.current = canvas.getContext(\"2d\");\n\n function setSize() {\n if (!container || !canvas) return;\n const rect = container.getBoundingClientRect();\n boundingRef.current = {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n top: rect.top,\n };\n canvas.width = rect.width;\n canvas.height = rect.height;\n }\n\n function setLines() {\n const { width, height } = boundingRef.current;\n linesRef.current = [];\n const oWidth = width + 200,\n oHeight = height + 30;\n const { xGap, yGap } = configRef.current;\n const totalLines = Math.ceil(oWidth / xGap);\n const totalPoints = Math.ceil(oHeight / yGap);\n const xStart = (width - xGap * totalLines) / 2;\n const yStart = (height - yGap * totalPoints) / 2;\n for (let i = 0; i <= totalLines; i++) {\n const pts: Point[] = [];\n for (let j = 0; j <= totalPoints; j++) {\n pts.push({\n x: xStart + xGap * i,\n y: yStart + yGap * j,\n wave: { x: 0, y: 0 },\n cursor: { x: 0, y: 0, vx: 0, vy: 0 },\n });\n }\n linesRef.current.push(pts);\n }\n }\n\n function movePoints(time: number) {\n const lines = linesRef.current;\n const mouse = mouseRef.current;\n const noise = noiseRef.current;\n const { waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, friction, tension, maxCursorMove } = configRef.current;\n lines.forEach((pts) => {\n pts.forEach((p) => {\n const move = noise.perlin2((p.x + time * waveSpeedX) * 0.002, (p.y + time * waveSpeedY) * 0.0015) * 12;\n p.wave.x = Math.cos(move) * waveAmpX;\n p.wave.y = Math.sin(move) * waveAmpY;\n\n const dx = p.x - mouse.sx,\n dy = p.y - mouse.sy;\n const dist = Math.hypot(dx, dy);\n const l = Math.max(175, mouse.vs);\n if (dist < l) {\n const s = 1 - dist / l;\n const f = Math.cos(dist * 0.001) * s;\n p.cursor.vx += Math.cos(mouse.a) * f * l * mouse.vs * 0.00065;\n p.cursor.vy += Math.sin(mouse.a) * f * l * mouse.vs * 0.00065;\n }\n\n p.cursor.vx += (0 - p.cursor.x) * tension;\n p.cursor.vy += (0 - p.cursor.y) * tension;\n p.cursor.vx *= friction;\n p.cursor.vy *= friction;\n p.cursor.x += p.cursor.vx * 2;\n p.cursor.y += p.cursor.vy * 2;\n p.cursor.x = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.x));\n p.cursor.y = Math.min(maxCursorMove, Math.max(-maxCursorMove, p.cursor.y));\n });\n });\n }\n\n function moved(point: Point, withCursor = true): { x: number; y: number } {\n const x = point.x + point.wave.x + (withCursor ? point.cursor.x : 0);\n const y = point.y + point.wave.y + (withCursor ? point.cursor.y : 0);\n return { x: Math.round(x * 10) / 10, y: Math.round(y * 10) / 10 };\n }\n\n function drawLines() {\n const { width, height } = boundingRef.current;\n const ctx = ctxRef.current;\n if (!ctx) return;\n ctx.clearRect(0, 0, width, height);\n ctx.beginPath();\n ctx.strokeStyle = configRef.current.lineColor;\n linesRef.current.forEach((points) => {\n let p1 = moved(points[0], false);\n ctx.moveTo(p1.x, p1.y);\n points.forEach((p, idx) => {\n const isLast = idx === points.length - 1;\n p1 = moved(p, !isLast);\n const p2 = moved(points[idx + 1] || points[points.length - 1], !isLast);\n ctx.lineTo(p1.x, p1.y);\n if (isLast) ctx.moveTo(p2.x, p2.y);\n });\n });\n ctx.stroke();\n }\n\n function tick(t: number) {\n if (!container) return;\n const mouse = mouseRef.current;\n mouse.sx += (mouse.x - mouse.sx) * 0.1;\n mouse.sy += (mouse.y - mouse.sy) * 0.1;\n const dx = mouse.x - mouse.lx,\n dy = mouse.y - mouse.ly;\n const d = Math.hypot(dx, dy);\n mouse.v = d;\n mouse.vs += (d - mouse.vs) * 0.1;\n mouse.vs = Math.min(100, mouse.vs);\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.a = Math.atan2(dy, dx);\n container.style.setProperty(\"--x\", `${mouse.sx}px`);\n container.style.setProperty(\"--y\", `${mouse.sy}px`);\n\n movePoints(t);\n drawLines();\n frameIdRef.current = requestAnimationFrame(tick);\n }\n\n function onResize() {\n setSize();\n setLines();\n }\n function onMouseMove(e: MouseEvent) {\n updateMouse(e.clientX, e.clientY);\n }\n function onTouchMove(e: TouchEvent) {\n const touch = e.touches[0];\n updateMouse(touch.clientX, touch.clientY);\n }\n function updateMouse(x: number, y: number) {\n const mouse = mouseRef.current;\n const b = boundingRef.current;\n mouse.x = x - b.left;\n mouse.y = y - b.top;\n if (!mouse.set) {\n mouse.sx = mouse.x;\n mouse.sy = mouse.y;\n mouse.lx = mouse.x;\n mouse.ly = mouse.y;\n mouse.set = true;\n }\n }\n\n setSize();\n setLines();\n frameIdRef.current = requestAnimationFrame(tick);\n window.addEventListener(\"resize\", onResize);\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"touchmove\", onTouchMove);\n if (frameIdRef.current !== null) {\n cancelAnimationFrame(frameIdRef.current);\n }\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={`${styles.waves} ${className}`}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n backgroundColor,\n ...style,\n }}\n >\n <canvas ref={canvasRef} className={styles.wavesCanvas} />\n </div>\n );\n};\n\nconst WaveBackground: React.FC<Omit<WavesProps, \"lineColor\" | \"backgroundColor\">> = (props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取线条颜色,降低颜色深度(变浅)\n const lineColor = useMemo(() => {\n // 尝试从主题变量中获取主色,如果没有则使用默认值\n const primary = currentTheme.colors.variables.primary || \"rgb(59, 130, 246)\";\n\n // 将颜色变浅的函数:向白色混合\n const lightenColor = (r: number, g: number, b: number, factor: number = 0.4) => {\n // factor: 0 = 原色, 1 = 白色\n const newR = Math.round(r + (255 - r) * factor);\n const newG = Math.round(g + (255 - g) * factor);\n const newB = Math.round(b + (255 - b) * factor);\n return `rgb(${newR}, ${newG}, ${newB})`;\n };\n\n // 如果已经是 hex 格式,转换为 rgb 并变浅\n if (primary.startsWith(\"#\")) {\n const hex = primary.slice(1);\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return lightenColor(r, g, b);\n }\n // 将 rgb() 格式变浅\n const match = primary.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n return lightenColor(r, g, b);\n }\n // 如果已经是 rgba 格式,提取 RGB 并变浅\n const rgbaMatch = primary.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (rgbaMatch) {\n const r = parseInt(rgbaMatch[1], 10);\n const g = parseInt(rgbaMatch[2], 10);\n const b = parseInt(rgbaMatch[3], 10);\n return lightenColor(r, g, b);\n }\n return primary;\n }, [currentTheme]);\n\n return <Waves lineColor={lineColor} backgroundColor=\"transparent\" waveSpeedX={0.05} waveSpeedY={0.01} waveAmpX={40} waveAmpY={20} {...props} />;\n};\n\nexport default WaveBackground;\n",".squaresCanvas {\n width: 100%;\n height: 100%;\n border: none;\n display: block;\n}\n","import React, { useEffect, useMemo, useRef } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\ntype CanvasStrokeStyle = string | CanvasGradient | CanvasPattern;\n\ninterface GridOffset {\n x: number;\n y: number;\n}\n\ninterface SquaresProps {\n direction?: \"diagonal\" | \"up\" | \"right\" | \"down\" | \"left\";\n speed?: number;\n borderColor?: CanvasStrokeStyle;\n squareSize?: number;\n hoverFillColor?: CanvasStrokeStyle;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst Squares: React.FC<SquaresProps> = ({\n direction = \"right\",\n speed = 1,\n borderColor = \"#999\",\n squareSize = 40,\n hoverFillColor = \"#222\",\n className = \"\",\n style = {},\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const requestRef = useRef<number | null>(null);\n const numSquaresX = useRef<number>(0);\n const numSquaresY = useRef<number>(0);\n const gridOffset = useRef<GridOffset>({ x: 0, y: 0 });\n const hoveredSquareRef = useRef<GridOffset | null>(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n\n const resizeCanvas = () => {\n canvas.width = canvas.offsetWidth;\n canvas.height = canvas.offsetHeight;\n numSquaresX.current = Math.ceil(canvas.width / squareSize) + 1;\n numSquaresY.current = Math.ceil(canvas.height / squareSize) + 1;\n };\n\n window.addEventListener(\"resize\", resizeCanvas);\n resizeCanvas();\n\n const drawGrid = () => {\n if (!ctx) return;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize;\n const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize;\n\n for (let x = startX; x < canvas.width + squareSize; x += squareSize) {\n for (let y = startY; y < canvas.height + squareSize; y += squareSize) {\n const squareX = x - (gridOffset.current.x % squareSize);\n const squareY = y - (gridOffset.current.y % squareSize);\n\n if (\n hoveredSquareRef.current &&\n Math.floor((x - startX) / squareSize) === hoveredSquareRef.current.x &&\n Math.floor((y - startY) / squareSize) === hoveredSquareRef.current.y\n ) {\n ctx.fillStyle = hoverFillColor;\n ctx.fillRect(squareX, squareY, squareSize, squareSize);\n }\n\n ctx.strokeStyle = borderColor;\n ctx.strokeRect(squareX, squareY, squareSize, squareSize);\n }\n }\n\n const gradient = ctx.createRadialGradient(\n canvas.width / 2,\n canvas.height / 2,\n 0,\n canvas.width / 2,\n canvas.height / 2,\n Math.sqrt(canvas.width ** 2 + canvas.height ** 2) / 2,\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 0)\");\n gradient.addColorStop(1, \"#060010\");\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n };\n\n const updateAnimation = () => {\n const effectiveSpeed = Math.max(speed, 0.1);\n switch (direction) {\n case \"right\":\n gridOffset.current.x = (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize;\n break;\n case \"left\":\n gridOffset.current.x = (gridOffset.current.x + effectiveSpeed + squareSize) % squareSize;\n break;\n case \"up\":\n gridOffset.current.y = (gridOffset.current.y + effectiveSpeed + squareSize) % squareSize;\n break;\n case \"down\":\n gridOffset.current.y = (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize;\n break;\n case \"diagonal\":\n gridOffset.current.x = (gridOffset.current.x - effectiveSpeed + squareSize) % squareSize;\n gridOffset.current.y = (gridOffset.current.y - effectiveSpeed + squareSize) % squareSize;\n break;\n default:\n break;\n }\n\n drawGrid();\n requestRef.current = requestAnimationFrame(updateAnimation);\n };\n\n const handleMouseMove = (event: MouseEvent) => {\n const rect = canvas.getBoundingClientRect();\n const mouseX = event.clientX - rect.left;\n const mouseY = event.clientY - rect.top;\n\n const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize;\n const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize;\n\n const hoveredSquareX = Math.floor((mouseX + gridOffset.current.x - startX) / squareSize);\n const hoveredSquareY = Math.floor((mouseY + gridOffset.current.y - startY) / squareSize);\n\n if (!hoveredSquareRef.current || hoveredSquareRef.current.x !== hoveredSquareX || hoveredSquareRef.current.y !== hoveredSquareY) {\n hoveredSquareRef.current = { x: hoveredSquareX, y: hoveredSquareY };\n }\n };\n\n const handleMouseLeave = () => {\n hoveredSquareRef.current = null;\n };\n\n canvas.addEventListener(\"mousemove\", handleMouseMove);\n canvas.addEventListener(\"mouseleave\", handleMouseLeave);\n requestRef.current = requestAnimationFrame(updateAnimation);\n\n return () => {\n window.removeEventListener(\"resize\", resizeCanvas);\n if (requestRef.current) cancelAnimationFrame(requestRef.current);\n canvas.removeEventListener(\"mousemove\", handleMouseMove);\n canvas.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, [direction, speed, borderColor, hoverFillColor, squareSize]);\n\n return <canvas ref={canvasRef} className={`${styles.squaresCanvas} ${className}`} style={style} />;\n};\n\nconst SquareBackground: React.FC<Omit<SquaresProps, \"borderColor\" | \"hoverFillColor\">> = (props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取边框颜色\n const borderColor = useMemo(() => {\n const borderColorValue = currentTheme.colors.variables.border5 || currentTheme.colors.variables.fg || \"#271E37\";\n if (borderColorValue.startsWith(\"#\")) {\n return borderColorValue;\n }\n const match = borderColorValue.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10).toString(16).padStart(2, \"0\");\n const g = parseInt(match[2], 10).toString(16).padStart(2, \"0\");\n const b = parseInt(match[3], 10).toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`;\n }\n return borderColorValue;\n }, [currentTheme]);\n\n // 从主题中获取悬停填充颜色\n const hoverFillColor = useMemo(() => {\n const baseColor = currentTheme.colors.variables.bg3 || currentTheme.colors.variables.border3 || \"#222222\";\n\n const darkenColor = (r: number, g: number, b: number, factor: number = 0.3) => {\n const newR = Math.round(r * (1 - factor));\n const newG = Math.round(g * (1 - factor));\n const newB = Math.round(b * (1 - factor));\n return `rgb(${newR}, ${newG}, ${newB})`;\n };\n\n if (baseColor.startsWith(\"#\")) {\n const hex = baseColor.slice(1);\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return darkenColor(r, g, b);\n }\n const match = baseColor.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n return darkenColor(r, g, b);\n }\n return baseColor;\n }, [currentTheme]);\n\n return <Squares borderColor={borderColor} hoverFillColor={hoverFillColor} speed={0.5} squareSize={40} direction=\"diagonal\" {...props} />;\n};\n\nexport default SquareBackground;\n",".container {\n position: relative;\n width: 100%;\n height: 100%;\n background-color: #000000;\n overflow: hidden;\n}\n\n.canvas {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.outerVignette {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n background: radial-gradient(circle, rgba(0, 0, 0, 0) 60%, rgba(0, 0, 0, 1) 100%);\n}\n\n.centerVignette {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n background: radial-gradient(circle, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0) 60%);\n}\n","import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\ninterface LetterGlitchProps {\n glitchColors?: string[];\n glitchSpeed?: number;\n centerVignette?: boolean;\n outerVignette?: boolean;\n smooth?: boolean;\n characters?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst LetterGlitch = memo(\n ({\n glitchColors = [\"#2b4539\", \"#61dca3\", \"#61b3dc\"],\n glitchSpeed = 500, // 增加默认速度,减少更新频率\n centerVignette = false,\n outerVignette = true,\n smooth = true,\n characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$&*()-_+=/[]{};:<>.,0123456789\",\n className = \"\",\n style = {},\n }: LetterGlitchProps) => {\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n const animationRef = useRef<number | null>(null);\n const letters = useRef<\n {\n char: string;\n color: string;\n targetColor: string;\n colorProgress: number;\n }[]\n >([]);\n const grid = useRef({ columns: 0, rows: 0 });\n const context = useRef<CanvasRenderingContext2D | null>(null);\n const lastGlitchTime = useRef(Date.now());\n\n const lettersAndSymbols = useMemo(() => Array.from(characters), [characters]);\n\n // 缓存 hexToRgb 结果\n const rgbCache = useRef<Map<string, { r: number; g: number; b: number } | null>>(new Map());\n\n const fontSize = 16;\n const charWidth = 10;\n const charHeight = 20;\n\n const getRandomChar = useCallback(() => {\n return lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)];\n }, [lettersAndSymbols]);\n\n const getRandomColor = useCallback(() => {\n return glitchColors[Math.floor(Math.random() * glitchColors.length)];\n }, [glitchColors]);\n\n const hexToRgb = useCallback((hex: string) => {\n // 检查缓存\n if (rgbCache.current.has(hex)) {\n return rgbCache.current.get(hex)!;\n }\n\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const normalizedHex = hex.replace(shorthandRegex, (_m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalizedHex);\n const rgb = result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n\n // 缓存结果\n rgbCache.current.set(hex, rgb);\n return rgb;\n }, []);\n\n const interpolateColor = (start: { r: number; g: number; b: number }, end: { r: number; g: number; b: number }, factor: number) => {\n const result = {\n r: Math.round(start.r + (end.r - start.r) * factor),\n g: Math.round(start.g + (end.g - start.g) * factor),\n b: Math.round(start.b + (end.b - start.b) * factor),\n };\n return `rgb(${result.r}, ${result.g}, ${result.b})`;\n };\n\n const calculateGrid = (width: number, height: number) => {\n const columns = Math.ceil(width / charWidth);\n const rows = Math.ceil(height / charHeight);\n return { columns, rows };\n };\n\n const initializeLetters = (columns: number, rows: number) => {\n grid.current = { columns, rows };\n const totalLetters = columns * rows;\n letters.current = Array.from({ length: totalLetters }, () => ({\n char: getRandomChar(),\n color: getRandomColor(),\n targetColor: getRandomColor(),\n colorProgress: 1,\n }));\n };\n\n const resizeCanvas = () => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const parent = canvas.parentElement;\n if (!parent) return;\n\n const dpr = window.devicePixelRatio || 1;\n const rect = parent.getBoundingClientRect();\n\n canvas.width = rect.width * dpr;\n canvas.height = rect.height * dpr;\n\n canvas.style.width = `${rect.width}px`;\n canvas.style.height = `${rect.height}px`;\n\n if (context.current) {\n context.current.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n\n const { columns, rows } = calculateGrid(rect.width, rect.height);\n initializeLetters(columns, rows);\n drawLetters();\n };\n\n const drawLetters = useCallback(() => {\n if (!context.current || letters.current.length === 0) return;\n const ctx = context.current;\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.font = `${fontSize}px monospace`;\n ctx.textBaseline = \"top\";\n ctx.textAlign = \"left\";\n\n // 批量绘制,减少状态切换\n letters.current.forEach((letter, index) => {\n const x = (index % grid.current.columns) * charWidth;\n const y = Math.floor(index / grid.current.columns) * charHeight;\n ctx.fillStyle = letter.color;\n ctx.fillText(letter.char, x, y);\n });\n }, []);\n\n const updateLetters = useCallback(() => {\n if (!letters.current || letters.current.length === 0) return;\n\n // 减少更新比例,从 5% 降到 2%,降低性能消耗\n const updateCount = Math.max(1, Math.floor(letters.current.length * 0.02));\n\n for (let i = 0; i < updateCount; i++) {\n const index = Math.floor(Math.random() * letters.current.length);\n if (!letters.current[index]) continue;\n\n letters.current[index].char = getRandomChar();\n letters.current[index].targetColor = getRandomColor();\n\n if (!smooth) {\n letters.current[index].color = letters.current[index].targetColor;\n letters.current[index].colorProgress = 1;\n } else {\n letters.current[index].colorProgress = 0;\n }\n }\n }, [getRandomChar, getRandomColor, smooth]);\n\n const handleSmoothTransitions = useCallback(() => {\n let needsRedraw = false;\n let activeCount = 0;\n\n // 只处理正在过渡的字母,减少不必要的计算\n letters.current.forEach((letter) => {\n if (letter.colorProgress < 1) {\n activeCount++;\n letter.colorProgress += 0.03; // 稍微降低过渡速度,减少重绘频率\n if (letter.colorProgress > 1) letter.colorProgress = 1;\n\n const startRgb = hexToRgb(letter.color);\n const endRgb = hexToRgb(letter.targetColor);\n if (startRgb && endRgb) {\n letter.color = interpolateColor(startRgb, endRgb, letter.colorProgress);\n needsRedraw = true;\n }\n }\n });\n\n // 只有在有活动过渡时才重绘\n if (needsRedraw && activeCount > 0) {\n drawLetters();\n }\n }, [hexToRgb, drawLetters]);\n\n const animate = useCallback(() => {\n const now = Date.now();\n const timeSinceLastGlitch = now - lastGlitchTime.current;\n\n // 只在需要更新时才执行\n if (timeSinceLastGlitch >= glitchSpeed) {\n updateLetters();\n drawLetters();\n lastGlitchTime.current = now;\n } else if (smooth) {\n // 只在平滑模式下才检查过渡\n handleSmoothTransitions();\n }\n\n animationRef.current = requestAnimationFrame(animate);\n }, [glitchSpeed, smooth, updateLetters, handleSmoothTransitions]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n context.current = canvas.getContext(\"2d\");\n resizeCanvas();\n animate();\n\n let resizeTimeout: ReturnType<typeof setTimeout>;\n\n const handleResize = () => {\n clearTimeout(resizeTimeout);\n resizeTimeout = setTimeout(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n resizeCanvas();\n animate();\n }, 100);\n };\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n window.removeEventListener(\"resize\", handleResize);\n clearTimeout(resizeTimeout);\n // 清理缓存\n rgbCache.current.clear();\n };\n }, [glitchSpeed, smooth, glitchColors, animate]);\n\n return (\n <div className={`${styles.container} ${className}`} style={style}>\n <canvas ref={canvasRef} className={styles.canvas} />\n {outerVignette && <div className={styles.outerVignette}></div>}\n {centerVignette && <div className={styles.centerVignette}></div>}\n </div>\n );\n },\n);\n\nconst LetterGlitchBackground: React.FC<Omit<LetterGlitchProps, \"glitchColors\">> = memo((props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取故障颜色数组\n const glitchColors = useMemo(() => {\n const primary = currentTheme.colors.variables.primary || \"#FA1E16\";\n const info = currentTheme.colors.variables.info || \"#0095ff\";\n const success = currentTheme.colors.variables.success || \"#00d68f\";\n\n const toHex = (color: string): string => {\n if (color.startsWith(\"#\")) {\n return color;\n }\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10).toString(16).padStart(2, \"0\");\n const g = parseInt(match[2], 10).toString(16).padStart(2, \"0\");\n const b = parseInt(match[3], 10).toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`;\n }\n return color;\n };\n\n return [toHex(primary), toHex(info), toHex(success)];\n }, [currentTheme]);\n\n return (\n <LetterGlitch\n glitchColors={glitchColors}\n glitchSpeed={300} // 增加默认速度,减少更新频率\n centerVignette={true}\n outerVignette={false}\n smooth={true}\n {...props}\n />\n );\n});\n\nLetterGlitchBackground.displayName = \"LetterGlitchBackground\";\n\nexport default LetterGlitchBackground;\n",".container {\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n}\n","// Component inspired by github.com/zavalit/bayer-dithering-webgl-demo\n\nimport React, { memo, useEffect, useMemo, useRef } from \"react\";\nimport { Effect, EffectComposer, EffectPass, RenderPass } from \"postprocessing\";\nimport {\n Clock,\n Color,\n GLSL3,\n LinearFilter,\n Mesh,\n OrthographicCamera,\n PlaneGeometry,\n Scene,\n ShaderMaterial,\n Texture,\n Uniform,\n Vector2,\n WebGLRenderer,\n} from \"three\";\n\nimport { useTheme } from \"@/themes/hooks/useTheme\";\n\nimport styles from \"./style.module.css\";\n\ntype PixelBlastVariant = \"square\" | \"circle\" | \"triangle\" | \"diamond\";\n\ninterface TouchPoint {\n x: number;\n y: number;\n vx: number;\n vy: number;\n force: number;\n age: number;\n}\n\ninterface TouchTexture {\n canvas: HTMLCanvasElement;\n texture: Texture;\n addTouch: (norm: { x: number; y: number }) => void;\n update: () => void;\n radiusScale: number;\n size: number;\n}\n\ninterface ReinitConfig {\n antialias: boolean;\n liquid: boolean;\n noiseAmount: number;\n}\n\ntype PixelBlastProps = {\n variant?: PixelBlastVariant;\n pixelSize?: number;\n color?: string;\n className?: string;\n style?: React.CSSProperties;\n antialias?: boolean;\n patternScale?: number;\n patternDensity?: number;\n liquid?: boolean;\n liquidStrength?: number;\n liquidRadius?: number;\n pixelSizeJitter?: number;\n enableRipples?: boolean;\n rippleIntensityScale?: number;\n rippleThickness?: number;\n rippleSpeed?: number;\n liquidWobbleSpeed?: number;\n autoPauseOffscreen?: boolean;\n speed?: number;\n transparent?: boolean;\n edgeFade?: number;\n noiseAmount?: number;\n};\n\nconst createTouchTexture = (): TouchTexture => {\n const size = 64;\n const canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"2D context not available\");\n ctx.fillStyle = \"black\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n const texture = new Texture(canvas);\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n const trail: TouchPoint[] = [];\n let last: { x: number; y: number } | null = null;\n const maxAge = 64;\n let radius = 0.1 * size;\n const speed = 1 / maxAge;\n const clear = () => {\n ctx.fillStyle = \"black\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n };\n const drawPoint = (p: TouchPoint) => {\n const pos = { x: p.x * size, y: (1 - p.y) * size };\n let intensity = 1;\n const easeOutSine = (t: number) => Math.sin((t * Math.PI) / 2);\n const easeOutQuad = (t: number) => -t * (t - 2);\n if (p.age < maxAge * 0.3) intensity = easeOutSine(p.age / (maxAge * 0.3));\n else intensity = easeOutQuad(1 - (p.age - maxAge * 0.3) / (maxAge * 0.7)) || 0;\n intensity *= p.force;\n const color = `${((p.vx + 1) / 2) * 255}, ${((p.vy + 1) / 2) * 255}, ${intensity * 255}`;\n const offset = size * 5;\n ctx.shadowOffsetX = offset;\n ctx.shadowOffsetY = offset;\n ctx.shadowBlur = radius;\n ctx.shadowColor = `rgba(${color},${0.22 * intensity})`;\n ctx.beginPath();\n ctx.fillStyle = \"rgba(255,0,0,1)\";\n ctx.arc(pos.x - offset, pos.y - offset, radius, 0, Math.PI * 2);\n ctx.fill();\n };\n const addTouch = (norm: { x: number; y: number }) => {\n let force = 0;\n let vx = 0;\n let vy = 0;\n if (last) {\n const dx = norm.x - last.x;\n const dy = norm.y - last.y;\n if (dx === 0 && dy === 0) return;\n const dd = dx * dx + dy * dy;\n const d = Math.sqrt(dd);\n vx = dx / (d || 1);\n vy = dy / (d || 1);\n force = Math.min(dd * 10000, 1);\n }\n last = { x: norm.x, y: norm.y };\n trail.push({ x: norm.x, y: norm.y, age: 0, force, vx, vy });\n };\n const update = () => {\n clear();\n for (let i = trail.length - 1; i >= 0; i--) {\n const point = trail[i];\n const f = point.force * speed * (1 - point.age / maxAge);\n point.x += point.vx * f;\n point.y += point.vy * f;\n point.age++;\n if (point.age > maxAge) trail.splice(i, 1);\n }\n for (let i = 0; i < trail.length; i++) drawPoint(trail[i]);\n texture.needsUpdate = true;\n };\n return {\n canvas,\n texture,\n addTouch,\n update,\n set radiusScale(v: number) {\n radius = 0.1 * size * v;\n },\n get radiusScale() {\n return radius / (0.1 * size);\n },\n size,\n };\n};\n\nconst createLiquidEffect = (texture: Texture, opts?: { strength?: number; freq?: number }) => {\n const fragment = `\n uniform sampler2D uTexture;\n uniform float uStrength;\n uniform float uTime;\n uniform float uFreq;\n\n void mainUv(inout vec2 uv) {\n vec4 tex = texture2D(uTexture, uv);\n float vx = tex.r * 2.0 - 1.0;\n float vy = tex.g * 2.0 - 1.0;\n float intensity = tex.b;\n\n float wave = 0.5 + 0.5 * sin(uTime * uFreq + intensity * 6.2831853);\n\n float amt = uStrength * intensity * wave;\n\n uv += vec2(vx, vy) * amt;\n }\n `;\n return new Effect(\"LiquidEffect\", fragment, {\n uniforms: new Map<string, Uniform>([\n [\"uTexture\", new Uniform(texture)],\n [\"uStrength\", new Uniform(opts?.strength ?? 0.025)],\n [\"uTime\", new Uniform(0)],\n [\"uFreq\", new Uniform(opts?.freq ?? 4.5)],\n ]),\n });\n};\n\nconst SHAPE_MAP: Record<PixelBlastVariant, number> = {\n square: 0,\n circle: 1,\n triangle: 2,\n diamond: 3,\n};\n\nconst VERTEX_SRC = `\nvoid main() {\n gl_Position = vec4(position, 1.0);\n}\n`;\n\nconst FRAGMENT_SRC = `\nprecision highp float;\n\nuniform vec3 uColor;\nuniform vec2 uResolution;\nuniform float uTime;\nuniform float uPixelSize;\nuniform float uScale;\nuniform float uDensity;\nuniform float uPixelJitter;\nuniform int uEnableRipples;\nuniform float uRippleSpeed;\nuniform float uRippleThickness;\nuniform float uRippleIntensity;\nuniform float uEdgeFade;\n\nuniform int uShapeType;\nconst int SHAPE_SQUARE = 0;\nconst int SHAPE_CIRCLE = 1;\nconst int SHAPE_TRIANGLE = 2;\nconst int SHAPE_DIAMOND = 3;\n\nconst int MAX_CLICKS = 10;\n\nuniform vec2 uClickPos [MAX_CLICKS];\nuniform float uClickTimes[MAX_CLICKS];\n\nout vec4 fragColor;\n\nfloat Bayer2(vec2 a) {\n a = floor(a);\n return fract(a.x / 2. + a.y * a.y * .75);\n}\n#define Bayer4(a) (Bayer2(.5*(a))*0.25 + Bayer2(a))\n#define Bayer8(a) (Bayer4(.5*(a))*0.25 + Bayer2(a))\n\n#define FBM_OCTAVES 5\n#define FBM_LACUNARITY 1.25\n#define FBM_GAIN 1.0\n\nfloat hash11(float n){ return fract(sin(n)*43758.5453); }\n\nfloat vnoise(vec3 p){\n vec3 ip = floor(p);\n vec3 fp = fract(p);\n float n000 = hash11(dot(ip + vec3(0.0,0.0,0.0), vec3(1.0,57.0,113.0)));\n float n100 = hash11(dot(ip + vec3(1.0,0.0,0.0), vec3(1.0,57.0,113.0)));\n float n010 = hash11(dot(ip + vec3(0.0,1.0,0.0), vec3(1.0,57.0,113.0)));\n float n110 = hash11(dot(ip + vec3(1.0,1.0,0.0), vec3(1.0,57.0,113.0)));\n float n001 = hash11(dot(ip + vec3(0.0,0.0,1.0), vec3(1.0,57.0,113.0)));\n float n101 = hash11(dot(ip + vec3(1.0,0.0,1.0), vec3(1.0,57.0,113.0)));\n float n011 = hash11(dot(ip + vec3(0.0,1.0,1.0), vec3(1.0,57.0,113.0)));\n float n111 = hash11(dot(ip + vec3(1.0,1.0,1.0), vec3(1.0,57.0,113.0)));\n vec3 w = fp*fp*fp*(fp*(fp*6.0-15.0)+10.0);\n float x00 = mix(n000, n100, w.x);\n float x10 = mix(n010, n110, w.x);\n float x01 = mix(n001, n101, w.x);\n float x11 = mix(n011, n111, w.x);\n float y0 = mix(x00, x10, w.y);\n float y1 = mix(x01, x11, w.y);\n return mix(y0, y1, w.z) * 2.0 - 1.0;\n}\n\nfloat fbm2(vec2 uv, float t){\n vec3 p = vec3(uv * uScale, t);\n float amp = 1.0;\n float freq = 1.0;\n float sum = 1.0;\n for (int i = 0; i < FBM_OCTAVES; ++i){\n sum += amp * vnoise(p * freq);\n freq *= FBM_LACUNARITY;\n amp *= FBM_GAIN;\n }\n return sum * 0.5 + 0.5;\n}\n\nfloat maskCircle(vec2 p, float cov){\n float r = sqrt(cov) * .25;\n float d = length(p - 0.5) - r;\n float aa = 0.5 * fwidth(d);\n return cov * (1.0 - smoothstep(-aa, aa, d * 2.0));\n}\n\nfloat maskTriangle(vec2 p, vec2 id, float cov){\n bool flip = mod(id.x + id.y, 2.0) > 0.5;\n if (flip) p.x = 1.0 - p.x;\n float r = sqrt(cov);\n float d = p.y - r*(1.0 - p.x);\n float aa = fwidth(d);\n return cov * clamp(0.5 - d/aa, 0.0, 1.0);\n}\n\nfloat maskDiamond(vec2 p, float cov){\n float r = sqrt(cov) * 0.564;\n return step(abs(p.x - 0.49) + abs(p.y - 0.49), r);\n}\n\nvoid main(){\n float pixelSize = uPixelSize;\n vec2 fragCoord = gl_FragCoord.xy - uResolution * .5;\n float aspectRatio = uResolution.x / uResolution.y;\n\n vec2 pixelId = floor(fragCoord / pixelSize);\n vec2 pixelUV = fract(fragCoord / pixelSize);\n\n float cellPixelSize = 8.0 * pixelSize;\n vec2 cellId = floor(fragCoord / cellPixelSize);\n vec2 cellCoord = cellId * cellPixelSize;\n vec2 uv = cellCoord / uResolution * vec2(aspectRatio, 1.0);\n\n float base = fbm2(uv, uTime * 0.05);\n base = base * 0.5 - 0.65;\n\n float feed = base + (uDensity - 0.5) * 0.3;\n\n float speed = uRippleSpeed;\n float thickness = uRippleThickness;\n const float dampT = 1.0;\n const float dampR = 10.0;\n\n if (uEnableRipples == 1) {\n for (int i = 0; i < MAX_CLICKS; ++i){\n vec2 pos = uClickPos[i];\n if (pos.x < 0.0) continue;\n float cellPixelSize = 8.0 * pixelSize;\n vec2 cuv = (((pos - uResolution * .5 - cellPixelSize * .5) / (uResolution))) * vec2(aspectRatio, 1.0);\n float t = max(uTime - uClickTimes[i], 0.0);\n float r = distance(uv, cuv);\n float waveR = speed * t;\n float ring = exp(-pow((r - waveR) / thickness, 2.0));\n float atten = exp(-dampT * t) * exp(-dampR * r);\n feed = max(feed, ring * atten * uRippleIntensity);\n }\n }\n\n float bayer = Bayer8(fragCoord / uPixelSize) - 0.5;\n float bw = step(0.5, feed + bayer);\n\n float h = fract(sin(dot(floor(fragCoord / uPixelSize), vec2(127.1, 311.7))) * 43758.5453);\n float jitterScale = 1.0 + (h - 0.5) * uPixelJitter;\n float coverage = bw * jitterScale;\n float M;\n if (uShapeType == SHAPE_CIRCLE) M = maskCircle (pixelUV, coverage);\n else if (uShapeType == SHAPE_TRIANGLE) M = maskTriangle(pixelUV, pixelId, coverage);\n else if (uShapeType == SHAPE_DIAMOND) M = maskDiamond(pixelUV, coverage);\n else M = coverage;\n\n if (uEdgeFade > 0.0) {\n vec2 norm = gl_FragCoord.xy / uResolution;\n float edge = min(min(norm.x, norm.y), min(1.0 - norm.x, 1.0 - norm.y));\n float fade = smoothstep(0.0, uEdgeFade, edge);\n M *= fade;\n }\n\n vec3 color = uColor;\n\n // sRGB gamma correction - convert linear to sRGB for accurate color output\n vec3 srgbColor = mix(\n color * 12.92,\n 1.055 * pow(color, vec3(1.0 / 2.4)) - 0.055,\n step(0.0031308, color)\n );\n\n fragColor = vec4(srgbColor, M);\n}\n`;\n\nconst MAX_CLICKS = 10;\n\nconst PixelBlast: React.FC<PixelBlastProps> = memo(\n ({\n variant = \"square\",\n pixelSize = 3,\n color = \"#B19EEF\",\n className,\n style,\n antialias = true,\n patternScale = 2,\n patternDensity = 1,\n liquid = false,\n liquidStrength = 0.1,\n liquidRadius = 1,\n pixelSizeJitter = 0,\n enableRipples = true,\n rippleIntensityScale = 1,\n rippleThickness = 0.1,\n rippleSpeed = 0.3,\n liquidWobbleSpeed = 4.5,\n autoPauseOffscreen = true,\n speed = 0.5,\n transparent = true,\n edgeFade = 0.5,\n noiseAmount = 0,\n }) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const visibilityRef = useRef({ visible: true });\n const speedRef = useRef(speed);\n\n const threeRef = useRef<{\n renderer: WebGLRenderer;\n scene: Scene;\n camera: OrthographicCamera;\n material: ShaderMaterial;\n clock: Clock;\n clickIx: number;\n uniforms: {\n uResolution: { value: Vector2 };\n uTime: { value: number };\n uColor: { value: Color };\n uClickPos: { value: Vector2[] };\n uClickTimes: { value: Float32Array };\n uShapeType: { value: number };\n uPixelSize: { value: number };\n uScale: { value: number };\n uDensity: { value: number };\n uPixelJitter: { value: number };\n uEnableRipples: { value: number };\n uRippleSpeed: { value: number };\n uRippleThickness: { value: number };\n uRippleIntensity: { value: number };\n uEdgeFade: { value: number };\n };\n resizeObserver?: ResizeObserver;\n raf?: number;\n quad?: Mesh<PlaneGeometry, ShaderMaterial>;\n timeOffset?: number;\n composer?: EffectComposer;\n touch?: ReturnType<typeof createTouchTexture>;\n liquidEffect?: Effect;\n } | null>(null);\n const prevConfigRef = useRef<ReinitConfig | null>(null);\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n speedRef.current = speed;\n const needsReinitKeys: (keyof ReinitConfig)[] = [\"antialias\", \"liquid\", \"noiseAmount\"];\n const cfg: ReinitConfig = { antialias, liquid, noiseAmount };\n let mustReinit = false;\n if (!threeRef.current) mustReinit = true;\n else if (prevConfigRef.current) {\n for (const k of needsReinitKeys)\n if (prevConfigRef.current[k] !== cfg[k]) {\n mustReinit = true;\n break;\n }\n }\n if (mustReinit) {\n if (threeRef.current) {\n const t = threeRef.current;\n t.resizeObserver?.disconnect();\n cancelAnimationFrame(t.raf!);\n t.quad?.geometry.dispose();\n t.material.dispose();\n t.composer?.dispose();\n t.renderer.dispose();\n if (t.renderer.domElement.parentElement === container) container.removeChild(t.renderer.domElement);\n threeRef.current = null;\n }\n const canvas = document.createElement(\"canvas\");\n const renderer = new WebGLRenderer({\n canvas,\n antialias,\n alpha: true,\n powerPreference: \"high-performance\",\n });\n renderer.domElement.style.width = \"100%\";\n renderer.domElement.style.height = \"100%\";\n // 降低像素比以提高性能\n renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 1.5));\n container.appendChild(renderer.domElement);\n if (transparent) renderer.setClearAlpha(0);\n else renderer.setClearColor(0x000000, 1);\n const uniforms = {\n uResolution: { value: new Vector2(0, 0) },\n uTime: { value: 0 },\n uColor: { value: new Color(color) },\n uClickPos: {\n value: Array.from({ length: MAX_CLICKS }, () => new Vector2(-1, -1)),\n },\n uClickTimes: { value: new Float32Array(MAX_CLICKS) },\n uShapeType: { value: SHAPE_MAP[variant] ?? 0 },\n uPixelSize: { value: pixelSize * renderer.getPixelRatio() },\n uScale: { value: patternScale },\n uDensity: { value: patternDensity },\n uPixelJitter: { value: pixelSizeJitter },\n uEnableRipples: { value: enableRipples ? 1 : 0 },\n uRippleSpeed: { value: rippleSpeed },\n uRippleThickness: { value: rippleThickness },\n uRippleIntensity: { value: rippleIntensityScale },\n uEdgeFade: { value: edgeFade },\n };\n const scene = new Scene();\n const camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1);\n const material = new ShaderMaterial({\n vertexShader: VERTEX_SRC,\n fragmentShader: FRAGMENT_SRC,\n uniforms,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n glslVersion: GLSL3,\n });\n\n const quadGeom = new PlaneGeometry(2, 2);\n const quad = new Mesh(quadGeom, material);\n scene.add(quad);\n const clock = new Clock();\n const setSize = () => {\n const w = container.clientWidth || 1;\n const h = container.clientHeight || 1;\n renderer.setSize(w, h, false);\n uniforms.uResolution.value.set(renderer.domElement.width, renderer.domElement.height);\n if (threeRef.current?.composer) threeRef.current.composer.setSize(renderer.domElement.width, renderer.domElement.height);\n uniforms.uPixelSize.value = pixelSize * renderer.getPixelRatio();\n };\n setSize();\n const ro = new ResizeObserver(setSize);\n ro.observe(container);\n const randomFloat = (): number => {\n if (typeof window !== \"undefined\" && window.crypto?.getRandomValues) {\n const u32 = new Uint32Array(1);\n window.crypto.getRandomValues(u32);\n return u32[0] / 0xffffffff;\n }\n return Math.random();\n };\n const timeOffset = randomFloat() * 1000;\n let composer: EffectComposer | undefined;\n let touch: ReturnType<typeof createTouchTexture> | undefined;\n let liquidEffect: Effect | undefined;\n if (liquid) {\n touch = createTouchTexture();\n touch.radiusScale = liquidRadius;\n composer = new EffectComposer(renderer);\n const renderPass = new RenderPass(scene, camera);\n liquidEffect = createLiquidEffect(touch.texture, {\n strength: liquidStrength,\n freq: liquidWobbleSpeed,\n });\n const effectPass = new EffectPass(camera, liquidEffect);\n effectPass.renderToScreen = true;\n composer.addPass(renderPass);\n composer.addPass(effectPass);\n }\n if (noiseAmount > 0) {\n if (!composer) {\n composer = new EffectComposer(renderer);\n composer.addPass(new RenderPass(scene, camera));\n }\n const noiseEffect = new Effect(\n \"NoiseEffect\",\n `uniform float uTime; uniform float uAmount; float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7))) * 43758.5453);} void mainUv(inout vec2 uv){} void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){ float n=hash(floor(uv*vec2(1920.0,1080.0))+floor(uTime*60.0)); float g=(n-0.5)*uAmount; outputColor=inputColor+vec4(vec3(g),0.0);} `,\n {\n uniforms: new Map<string, Uniform>([\n [\"uTime\", new Uniform(0)],\n [\"uAmount\", new Uniform(noiseAmount)],\n ]),\n },\n );\n const noisePass = new EffectPass(camera, noiseEffect);\n noisePass.renderToScreen = true;\n if (composer && composer.passes.length > 0) {\n composer.passes.forEach((p: { renderToScreen?: boolean }) => {\n const pass = p as { renderToScreen?: boolean };\n pass.renderToScreen = false;\n });\n }\n composer.addPass(noisePass);\n }\n if (composer) composer.setSize(renderer.domElement.width, renderer.domElement.height);\n const mapToPixels = (e: PointerEvent) => {\n const rect = renderer.domElement.getBoundingClientRect();\n const scaleX = renderer.domElement.width / rect.width;\n const scaleY = renderer.domElement.height / rect.height;\n const fx = (e.clientX - rect.left) * scaleX;\n const fy = (rect.height - (e.clientY - rect.top)) * scaleY;\n return {\n fx,\n fy,\n w: renderer.domElement.width,\n h: renderer.domElement.height,\n };\n };\n const onPointerDown = (e: PointerEvent) => {\n const { fx, fy } = mapToPixels(e);\n const ix = threeRef.current?.clickIx ?? 0;\n uniforms.uClickPos.value[ix].set(fx, fy);\n uniforms.uClickTimes.value[ix] = uniforms.uTime.value;\n if (threeRef.current) threeRef.current.clickIx = (ix + 1) % MAX_CLICKS;\n };\n const onPointerMove = (e: PointerEvent) => {\n if (!touch) return;\n const { fx, fy, w, h } = mapToPixels(e);\n touch.addTouch({ x: fx / w, y: fy / h });\n };\n renderer.domElement.addEventListener(\"pointerdown\", onPointerDown, {\n passive: true,\n });\n renderer.domElement.addEventListener(\"pointermove\", onPointerMove, {\n passive: true,\n });\n let raf = 0;\n let lastFrameTime = 0;\n const targetFPS = 30; // 限制到 30 FPS 以提高性能\n const frameInterval = 1000 / targetFPS;\n\n const animate = (currentTime: number) => {\n if (autoPauseOffscreen && !visibilityRef.current.visible) {\n raf = requestAnimationFrame(animate);\n return;\n }\n\n // 帧率限制\n const elapsed = currentTime - lastFrameTime;\n if (elapsed < frameInterval) {\n raf = requestAnimationFrame(animate);\n return;\n }\n lastFrameTime = currentTime - (elapsed % frameInterval);\n\n uniforms.uTime.value = timeOffset + clock.getElapsedTime() * speedRef.current;\n if (liquidEffect) {\n const liqEffect = liquidEffect as Effect & { uniforms: Map<string, Uniform> };\n const timeUniform = liqEffect.uniforms.get(\"uTime\");\n if (timeUniform) timeUniform.value = uniforms.uTime.value;\n }\n if (composer) {\n if (touch) touch.update();\n composer.passes.forEach((p: any) => {\n const pass = p as { effects?: Array<Effect & { uniforms?: Map<string, Uniform> }> };\n if (pass.effects) {\n pass.effects.forEach((eff: Effect & { uniforms?: Map<string, Uniform> }) => {\n const timeUniform = eff.uniforms?.get(\"uTime\");\n if (timeUniform) timeUniform.value = uniforms.uTime.value;\n });\n }\n });\n composer.render();\n } else renderer.render(scene, camera);\n raf = requestAnimationFrame(animate);\n };\n raf = requestAnimationFrame((time) => {\n lastFrameTime = time;\n animate(time);\n });\n threeRef.current = {\n renderer,\n scene,\n camera,\n material,\n clock,\n clickIx: 0,\n uniforms,\n resizeObserver: ro,\n raf,\n quad,\n timeOffset,\n composer,\n touch,\n liquidEffect,\n };\n } else {\n const t = threeRef.current!;\n t.uniforms.uShapeType.value = SHAPE_MAP[variant] ?? 0;\n t.uniforms.uPixelSize.value = pixelSize * t.renderer.getPixelRatio();\n t.uniforms.uColor.value.set(color);\n t.uniforms.uScale.value = patternScale;\n t.uniforms.uDensity.value = patternDensity;\n t.uniforms.uPixelJitter.value = pixelSizeJitter;\n t.uniforms.uEnableRipples.value = enableRipples ? 1 : 0;\n t.uniforms.uRippleIntensity.value = rippleIntensityScale;\n t.uniforms.uRippleThickness.value = rippleThickness;\n t.uniforms.uRippleSpeed.value = rippleSpeed;\n t.uniforms.uEdgeFade.value = edgeFade;\n if (transparent) t.renderer.setClearAlpha(0);\n else t.renderer.setClearColor(0x000000, 1);\n if (t.liquidEffect) {\n const liqEffect = t.liquidEffect as Effect & { uniforms: Map<string, Uniform> };\n const uStrength = liqEffect.uniforms.get(\"uStrength\");\n if (uStrength) uStrength.value = liquidStrength;\n const uFreq = liqEffect.uniforms.get(\"uFreq\");\n if (uFreq) uFreq.value = liquidWobbleSpeed;\n }\n if (t.touch) t.touch.radiusScale = liquidRadius;\n }\n prevConfigRef.current = cfg;\n return () => {\n if (threeRef.current && mustReinit) return;\n if (!threeRef.current) return;\n const t = threeRef.current;\n t.resizeObserver?.disconnect();\n cancelAnimationFrame(t.raf!);\n t.quad?.geometry.dispose();\n t.material.dispose();\n t.composer?.dispose();\n t.renderer.dispose();\n if (t.renderer.domElement.parentElement === container) container.removeChild(t.renderer.domElement);\n threeRef.current = null;\n };\n }, [\n antialias,\n liquid,\n noiseAmount,\n pixelSize,\n patternScale,\n patternDensity,\n enableRipples,\n rippleIntensityScale,\n rippleThickness,\n rippleSpeed,\n pixelSizeJitter,\n edgeFade,\n transparent,\n liquidStrength,\n liquidRadius,\n liquidWobbleSpeed,\n autoPauseOffscreen,\n variant,\n color,\n speed,\n ]);\n\n return <div ref={containerRef} className={`${styles.container} ${className ?? \"\"}`} style={style} aria-label=\"PixelBlast interactive background\" />;\n },\n);\n\nPixelBlast.displayName = \"PixelBlast\";\n\nconst PixelBlastBackground: React.FC<Omit<PixelBlastProps, \"color\">> = memo((props) => {\n const { currentTheme } = useTheme();\n\n // 从主题中获取颜色\n const color = useMemo(() => {\n const primary = currentTheme.colors.variables.primary || \"#B19EEF\";\n\n const toHex = (color: string): string => {\n if (color.startsWith(\"#\")) {\n return color;\n }\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n const r = parseInt(match[1], 10).toString(16).padStart(2, \"0\");\n const g = parseInt(match[2], 10).toString(16).padStart(2, \"0\");\n const b = parseInt(match[3], 10).toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`;\n }\n return color;\n };\n\n return toHex(primary);\n }, [currentTheme]);\n\n return (\n <PixelBlast\n color={color}\n variant=\"square\"\n pixelSize={6}\n patternScale={2}\n patternDensity={1}\n pixelSizeJitter={0}\n enableRipples\n rippleSpeed={0.3}\n rippleThickness={0.12}\n rippleIntensityScale={1.2}\n liquid={false}\n liquidStrength={0.12}\n liquidRadius={1.2}\n liquidWobbleSpeed={5}\n speed={0.3}\n edgeFade={0.25}\n transparent\n antialias={false}\n {...props}\n />\n );\n});\n\nPixelBlastBackground.displayName = \"PixelBlastBackground\";\n\nexport default PixelBlastBackground;\n"],"mappings":";;;;;;;;;GCOM,IAAN,MAAW;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,GAAW,GAAW,GAAW;AAC3C,SAAK,IAAI,GACT,KAAK,IAAI,GACT,KAAK,IAAI;AAAA;EAEX,KAAK,GAAW,GAAmB;AACjC,WAAO,KAAK,IAAI,IAAI,KAAK,IAAI;AAAA;GAI3B,KAAN,MAAY;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,IAAO,GAAG;AACpB,SAAK,QAAQ;AAAA,MACX,IAAI,EAAK,GAAG,GAAG,CAAA;AAAA,MACf,IAAI,EAAK,IAAI,GAAG,CAAA;AAAA,MAChB,IAAI,EAAK,GAAG,IAAI,CAAA;AAAA,MAChB,IAAI,EAAK,IAAI,IAAI,CAAA;AAAA,MACjB,IAAI,EAAK,GAAG,GAAG,CAAA;AAAA,MACf,IAAI,EAAK,IAAI,GAAG,CAAA;AAAA,MAChB,IAAI,EAAK,GAAG,GAAG,EAAA;AAAA,MACf,IAAI,EAAK,IAAI,GAAG,EAAA;AAAA,MAChB,IAAI,EAAK,GAAG,GAAG,CAAA;AAAA,MACf,IAAI,EAAK,GAAG,IAAI,CAAA;AAAA,MAChB,IAAI,EAAK,GAAG,GAAG,EAAA;AAAA,MACf,IAAI,EAAK,GAAG,IAAI,EAAA;AAAA,OAElB,KAAK,IAAI;AAAA,MACP;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAG;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAG;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACrJ;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MACnJ;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAG;AAAA,MAAK;AAAA,MACrJ;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAG;AAAA,MACrJ;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAG;AAAA,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"}
@@ -0,0 +1,190 @@
1
+ const ge=require("./chunk-chunk-BFrxaqQT.cjs"),ie=require("./chunk-useTheme-DgleVMMh.cjs");let c=require("react");c=ge.__toESM(c);let D=require("react/jsx-runtime"),ee=require("postprocessing"),L=require("three");const xe="style-module__waves___oR3u7",ye="style-module__wavesCanvas___zkhTC";var de={waves:xe,wavesCanvas:ye},z=class{x;y;z;constructor(s,r,o){this.x=s,this.y=r,this.z=o}dot2(s,r){return this.x*s+this.y*r}},we=class{grad3;p;perm;gradP;constructor(s=0){this.grad3=[new z(1,1,0),new z(-1,1,0),new z(1,-1,0),new z(-1,-1,0),new z(1,0,1),new z(-1,0,1),new z(1,0,-1),new z(-1,0,-1),new z(0,1,1),new z(0,-1,1),new z(0,1,-1),new z(0,-1,-1)],this.p=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],this.perm=new Array(512),this.gradP=new Array(512),this.seed(s)}seed(s){s>0&&s<1&&(s*=65536),s=Math.floor(s),s<256&&(s|=s<<8);for(let r=0;r<256;r++){let o=r&1?this.p[r]^s&255:this.p[r]^s>>8&255;this.perm[r]=this.perm[r+256]=o,this.gradP[r]=this.gradP[r+256]=this.grad3[o%12]}}fade(s){return s*s*s*(s*(s*6-15)+10)}lerp(s,r,o){return(1-o)*s+o*r}perlin2(s,r){let o=Math.floor(s),t=Math.floor(r);s-=o,r-=t,o&=255,t&=255;const d=this.gradP[o+this.perm[t]].dot2(s,r),m=this.gradP[o+this.perm[t+1]].dot2(s,r-1),h=this.gradP[o+1+this.perm[t]].dot2(s-1,r),w=this.gradP[o+1+this.perm[t+1]].dot2(s-1,r-1),R=this.fade(s);return this.lerp(this.lerp(d,h,R),this.lerp(m,w,R),this.fade(r))}},Re=({lineColor:s="black",backgroundColor:r="transparent",waveSpeedX:o=.0125,waveSpeedY:t=.005,waveAmpX:d=32,waveAmpY:m=16,xGap:h=10,yGap:w=32,friction:R=.925,tension:k=.005,maxCursorMove:C=100,style:x={},className:A=""})=>{const n=(0,c.useRef)(null),v=(0,c.useRef)(null),E=(0,c.useRef)(null),B=(0,c.useRef)({width:0,height:0,left:0,top:0}),N=(0,c.useRef)(new we(Math.random())),I=(0,c.useRef)([]),_=(0,c.useRef)({x:-10,y:0,lx:0,ly:0,sx:0,sy:0,v:0,vs:0,a:0,set:!1}),p=(0,c.useRef)({lineColor:s,waveSpeedX:o,waveSpeedY:t,waveAmpX:d,waveAmpY:m,friction:R,tension:k,maxCursorMove:C,xGap:h,yGap:w}),F=(0,c.useRef)(null);return(0,c.useEffect)(()=>{p.current={lineColor:s,waveSpeedX:o,waveSpeedY:t,waveAmpX:d,waveAmpY:m,friction:R,tension:k,maxCursorMove:C,xGap:h,yGap:w}},[s,o,t,d,m,R,k,C,h,w]),(0,c.useEffect)(()=>{const q=v.current,V=n.current;if(!q||!V)return;E.current=q.getContext("2d");function U(){if(!V||!q)return;const l=V.getBoundingClientRect();B.current={width:l.width,height:l.height,left:l.left,top:l.top},q.width=l.width,q.height=l.height}function b(){const{width:l,height:u}=B.current;I.current=[];const f=l+200,P=u+30,{xGap:j,yGap:K}=p.current,Z=Math.ceil(f/j),Y=Math.ceil(P/K),T=(l-j*Z)/2,H=(u-K*Y)/2;for(let G=0;G<=Z;G++){const te=[];for(let M=0;M<=Y;M++)te.push({x:T+j*G,y:H+K*M,wave:{x:0,y:0},cursor:{x:0,y:0,vx:0,vy:0}});I.current.push(te)}}function X(l){const u=I.current,f=_.current,P=N.current,{waveSpeedX:j,waveSpeedY:K,waveAmpX:Z,waveAmpY:Y,friction:T,tension:H,maxCursorMove:G}=p.current;u.forEach(te=>{te.forEach(M=>{const ae=P.perlin2((M.x+l*j)*.002,(M.y+l*K)*.0015)*12;M.wave.x=Math.cos(ae)*Z,M.wave.y=Math.sin(ae)*Y;const re=M.x-f.sx,se=M.y-f.sy,oe=Math.hypot(re,se),Q=Math.max(175,f.vs);if(oe<Q){const g=1-oe/Q,S=Math.cos(oe*.001)*g;M.cursor.vx+=Math.cos(f.a)*S*Q*f.vs*65e-5,M.cursor.vy+=Math.sin(f.a)*S*Q*f.vs*65e-5}M.cursor.vx+=(0-M.cursor.x)*H,M.cursor.vy+=(0-M.cursor.y)*H,M.cursor.vx*=T,M.cursor.vy*=T,M.cursor.x+=M.cursor.vx*2,M.cursor.y+=M.cursor.vy*2,M.cursor.x=Math.min(G,Math.max(-G,M.cursor.x)),M.cursor.y=Math.min(G,Math.max(-G,M.cursor.y))})})}function $(l,u=!0){const f=l.x+l.wave.x+(u?l.cursor.x:0),P=l.y+l.wave.y+(u?l.cursor.y:0);return{x:Math.round(f*10)/10,y:Math.round(P*10)/10}}function ne(){const{width:l,height:u}=B.current,f=E.current;f&&(f.clearRect(0,0,l,u),f.beginPath(),f.strokeStyle=p.current.lineColor,I.current.forEach(P=>{let j=$(P[0],!1);f.moveTo(j.x,j.y),P.forEach((K,Z)=>{const Y=Z===P.length-1;j=$(K,!Y);const T=$(P[Z+1]||P[P.length-1],!Y);f.lineTo(j.x,j.y),Y&&f.moveTo(T.x,T.y)})}),f.stroke())}function W(l){if(!V)return;const u=_.current;u.sx+=(u.x-u.sx)*.1,u.sy+=(u.y-u.sy)*.1;const f=u.x-u.lx,P=u.y-u.ly,j=Math.hypot(f,P);u.v=j,u.vs+=(j-u.vs)*.1,u.vs=Math.min(100,u.vs),u.lx=u.x,u.ly=u.y,u.a=Math.atan2(P,f),V.style.setProperty("--x",`${u.sx}px`),V.style.setProperty("--y",`${u.sy}px`),X(l),ne(),F.current=requestAnimationFrame(W)}function i(){U(),b()}function e(l){y(l.clientX,l.clientY)}function a(l){const u=l.touches[0];y(u.clientX,u.clientY)}function y(l,u){const f=_.current,P=B.current;f.x=l-P.left,f.y=u-P.top,f.set||(f.sx=f.x,f.sy=f.y,f.lx=f.x,f.ly=f.y,f.set=!0)}return U(),b(),F.current=requestAnimationFrame(W),window.addEventListener("resize",i),window.addEventListener("mousemove",e),window.addEventListener("touchmove",a,{passive:!1}),()=>{window.removeEventListener("resize",i),window.removeEventListener("mousemove",e),window.removeEventListener("touchmove",a),F.current!==null&&cancelAnimationFrame(F.current)}},[]),(0,D.jsx)("div",{ref:n,className:`${de.waves} ${A}`,style:{position:"absolute",top:0,left:0,margin:0,padding:0,width:"100%",height:"100%",overflow:"hidden",backgroundColor:r,...x},children:(0,D.jsx)("canvas",{ref:v,className:de.wavesCanvas})})},Me=s=>{const{currentTheme:r}=ie.useTheme();return(0,D.jsx)(Re,{lineColor:(0,c.useMemo)(()=>{const o=r.colors.variables.primary||"rgb(59, 130, 246)",t=(h,w,R,k=.4)=>`rgb(${Math.round(h+(255-h)*k)}, ${Math.round(w+(255-w)*k)}, ${Math.round(R+(255-R)*k)})`;if(o.startsWith("#")){const h=o.slice(1);return t(parseInt(h.slice(0,2),16),parseInt(h.slice(2,4),16),parseInt(h.slice(4,6),16))}const d=o.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(d)return t(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10));const m=o.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);return m?t(parseInt(m[1],10),parseInt(m[2],10),parseInt(m[3],10)):o},[r]),backgroundColor:"transparent",waveSpeedX:.05,waveSpeedY:.01,waveAmpX:40,waveAmpY:20,...s})};const Ce="style-module__squaresCanvas___22kMc";var Ee={squaresCanvas:Ce},be=({direction:s="right",speed:r=1,borderColor:o="#999",squareSize:t=40,hoverFillColor:d="#222",className:m="",style:h={}})=>{const w=(0,c.useRef)(null),R=(0,c.useRef)(null),k=(0,c.useRef)(0),C=(0,c.useRef)(0),x=(0,c.useRef)({x:0,y:0}),A=(0,c.useRef)(null);return(0,c.useEffect)(()=>{const n=w.current;if(!n)return;const v=n.getContext("2d"),E=()=>{n.width=n.offsetWidth,n.height=n.offsetHeight,k.current=Math.ceil(n.width/t)+1,C.current=Math.ceil(n.height/t)+1};window.addEventListener("resize",E),E();const B=()=>{if(!v)return;v.clearRect(0,0,n.width,n.height);const p=Math.floor(x.current.x/t)*t,F=Math.floor(x.current.y/t)*t;for(let V=p;V<n.width+t;V+=t)for(let U=F;U<n.height+t;U+=t){const b=V-x.current.x%t,X=U-x.current.y%t;A.current&&Math.floor((V-p)/t)===A.current.x&&Math.floor((U-F)/t)===A.current.y&&(v.fillStyle=d,v.fillRect(b,X,t,t)),v.strokeStyle=o,v.strokeRect(b,X,t,t)}const q=v.createRadialGradient(n.width/2,n.height/2,0,n.width/2,n.height/2,Math.sqrt(n.width**2+n.height**2)/2);q.addColorStop(0,"rgba(0, 0, 0, 0)"),q.addColorStop(1,"#060010"),v.fillStyle=q,v.fillRect(0,0,n.width,n.height)},N=()=>{const p=Math.max(r,.1);switch(s){case"right":x.current.x=(x.current.x-p+t)%t;break;case"left":x.current.x=(x.current.x+p+t)%t;break;case"up":x.current.y=(x.current.y+p+t)%t;break;case"down":x.current.y=(x.current.y-p+t)%t;break;case"diagonal":x.current.x=(x.current.x-p+t)%t,x.current.y=(x.current.y-p+t)%t;break;default:break}B(),R.current=requestAnimationFrame(N)},I=p=>{const F=n.getBoundingClientRect(),q=p.clientX-F.left,V=p.clientY-F.top,U=Math.floor(x.current.x/t)*t,b=Math.floor(x.current.y/t)*t,X=Math.floor((q+x.current.x-U)/t),$=Math.floor((V+x.current.y-b)/t);(!A.current||A.current.x!==X||A.current.y!==$)&&(A.current={x:X,y:$})},_=()=>{A.current=null};return n.addEventListener("mousemove",I),n.addEventListener("mouseleave",_),R.current=requestAnimationFrame(N),()=>{window.removeEventListener("resize",E),R.current&&cancelAnimationFrame(R.current),n.removeEventListener("mousemove",I),n.removeEventListener("mouseleave",_)}},[s,r,o,d,t]),(0,D.jsx)("canvas",{ref:w,className:`${Ee.squaresCanvas} ${m}`,style:h})},Pe=s=>{const{currentTheme:r}=ie.useTheme();return(0,D.jsx)(be,{borderColor:(0,c.useMemo)(()=>{const o=r.colors.variables.border5||r.colors.variables.fg||"#271E37";if(o.startsWith("#"))return o;const t=o.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return t?`#${parseInt(t[1],10).toString(16).padStart(2,"0")}${parseInt(t[2],10).toString(16).padStart(2,"0")}${parseInt(t[3],10).toString(16).padStart(2,"0")}`:o},[r]),hoverFillColor:(0,c.useMemo)(()=>{const o=r.colors.variables.bg3||r.colors.variables.border3||"#222222",t=(m,h,w,R=.3)=>`rgb(${Math.round(m*(1-R))}, ${Math.round(h*(1-R))}, ${Math.round(w*(1-R))})`;if(o.startsWith("#")){const m=o.slice(1);return t(parseInt(m.slice(0,2),16),parseInt(m.slice(2,4),16),parseInt(m.slice(4,6),16))}const d=o.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return d?t(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10)):o},[r]),speed:.5,squareSize:40,direction:"diagonal",...s})};const Te="style-module__container___HkxIe",_e="style-module__canvas___MR9JX",Se="style-module__outerVignette___i75nw",ke="style-module__centerVignette___n9uVG";var ce={container:Te,canvas:_e,outerVignette:Se,centerVignette:ke},Ae=(0,c.memo)(({glitchColors:s=["#2b4539","#61dca3","#61b3dc"],glitchSpeed:r=500,centerVignette:o=!1,outerVignette:t=!0,smooth:d=!0,characters:m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$&*()-_+=/[]{};:<>.,0123456789",className:h="",style:w={}})=>{const R=(0,c.useRef)(null),k=(0,c.useRef)(null),C=(0,c.useRef)([]),x=(0,c.useRef)({columns:0,rows:0}),A=(0,c.useRef)(null),n=(0,c.useRef)(Date.now()),v=(0,c.useMemo)(()=>Array.from(m),[m]),E=(0,c.useRef)(new Map),B=16,N=10,I=20,_=(0,c.useCallback)(()=>v[Math.floor(Math.random()*v.length)],[v]),p=(0,c.useCallback)(()=>s[Math.floor(Math.random()*s.length)],[s]),F=(0,c.useCallback)(i=>{if(E.current.has(i))return E.current.get(i);const e=i.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(l,u,f,P)=>u+u+f+f+P+P),a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e),y=a?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null;return E.current.set(i,y),y},[]),q=(i,e,a)=>{const y={r:Math.round(i.r+(e.r-i.r)*a),g:Math.round(i.g+(e.g-i.g)*a),b:Math.round(i.b+(e.b-i.b)*a)};return`rgb(${y.r}, ${y.g}, ${y.b})`},V=(i,e)=>({columns:Math.ceil(i/N),rows:Math.ceil(e/I)}),U=(i,e)=>{x.current={columns:i,rows:e};const a=i*e;C.current=Array.from({length:a},()=>({char:_(),color:p(),targetColor:p(),colorProgress:1}))},b=()=>{const i=R.current;if(!i)return;const e=i.parentElement;if(!e)return;const a=window.devicePixelRatio||1,y=e.getBoundingClientRect();i.width=y.width*a,i.height=y.height*a,i.style.width=`${y.width}px`,i.style.height=`${y.height}px`,A.current&&A.current.setTransform(a,0,0,a,0,0);const{columns:l,rows:u}=V(y.width,y.height);U(l,u),X()},X=(0,c.useCallback)(()=>{if(!A.current||C.current.length===0)return;const i=A.current,e=R.current;e&&(i.clearRect(0,0,e.width,e.height),i.font=`${B}px monospace`,i.textBaseline="top",i.textAlign="left",C.current.forEach((a,y)=>{const l=y%x.current.columns*N,u=Math.floor(y/x.current.columns)*I;i.fillStyle=a.color,i.fillText(a.char,l,u)}))},[]),$=(0,c.useCallback)(()=>{if(!C.current||C.current.length===0)return;const i=Math.max(1,Math.floor(C.current.length*.02));for(let e=0;e<i;e++){const a=Math.floor(Math.random()*C.current.length);C.current[a]&&(C.current[a].char=_(),C.current[a].targetColor=p(),d?C.current[a].colorProgress=0:(C.current[a].color=C.current[a].targetColor,C.current[a].colorProgress=1))}},[_,p,d]),ne=(0,c.useCallback)(()=>{let i=!1,e=0;C.current.forEach(a=>{if(a.colorProgress<1){e++,a.colorProgress+=.03,a.colorProgress>1&&(a.colorProgress=1);const y=F(a.color),l=F(a.targetColor);y&&l&&(a.color=q(y,l,a.colorProgress),i=!0)}}),i&&e>0&&X()},[F,X]),W=(0,c.useCallback)(()=>{const i=Date.now();i-n.current>=r?($(),X(),n.current=i):d&&ne(),k.current=requestAnimationFrame(W)},[r,d,$,ne]);return(0,c.useEffect)(()=>{const i=R.current;if(!i)return;A.current=i.getContext("2d"),b(),W();let e;const a=()=>{clearTimeout(e),e=setTimeout(()=>{k.current&&cancelAnimationFrame(k.current),b(),W()},100)};return window.addEventListener("resize",a),()=>{k.current&&cancelAnimationFrame(k.current),window.removeEventListener("resize",a),clearTimeout(e),E.current.clear()}},[r,d,s,W]),(0,D.jsxs)("div",{className:`${ce.container} ${h}`,style:w,children:[(0,D.jsx)("canvas",{ref:R,className:ce.canvas}),t&&(0,D.jsx)("div",{className:ce.outerVignette}),o&&(0,D.jsx)("div",{className:ce.centerVignette})]})}),he=(0,c.memo)(s=>{const{currentTheme:r}=ie.useTheme();return(0,D.jsx)(Ae,{glitchColors:(0,c.useMemo)(()=>{const o=r.colors.variables.primary||"#FA1E16",t=r.colors.variables.info||"#0095ff",d=r.colors.variables.success||"#00d68f",m=h=>{if(h.startsWith("#"))return h;const w=h.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return w?`#${parseInt(w[1],10).toString(16).padStart(2,"0")}${parseInt(w[2],10).toString(16).padStart(2,"0")}${parseInt(w[3],10).toString(16).padStart(2,"0")}`:h};return[m(o),m(t),m(d)]},[r]),glitchSpeed:300,centerVignette:!0,outerVignette:!1,smooth:!0,...s})});he.displayName="LetterGlitchBackground";const Ie="style-module__container___Hh3-c";var Le={container:Ie},Fe=()=>{const r=document.createElement("canvas");r.width=64,r.height=64;const o=r.getContext("2d");if(!o)throw new Error("2D context not available");o.fillStyle="black",o.fillRect(0,0,r.width,r.height);const t=new L.Texture(r);t.minFilter=L.LinearFilter,t.magFilter=L.LinearFilter,t.generateMipmaps=!1;const d=[];let m=null;const h=64;let w=.1*64;const R=1/h,k=()=>{o.fillStyle="black",o.fillRect(0,0,r.width,r.height)},C=n=>{const v={x:n.x*64,y:(1-n.y)*64};let E=1;const B=p=>Math.sin(p*Math.PI/2),N=p=>-p*(p-2);n.age<h*.3?E=B(n.age/(h*.3)):E=N(1-(n.age-h*.3)/(h*.7))||0,E*=n.force;const I=`${(n.vx+1)/2*255}, ${(n.vy+1)/2*255}, ${E*255}`,_=320;o.shadowOffsetX=_,o.shadowOffsetY=_,o.shadowBlur=w,o.shadowColor=`rgba(${I},${.22*E})`,o.beginPath(),o.fillStyle="rgba(255,0,0,1)",o.arc(v.x-_,v.y-_,w,0,Math.PI*2),o.fill()};return{canvas:r,texture:t,addTouch:n=>{let v=0,E=0,B=0;if(m){const N=n.x-m.x,I=n.y-m.y;if(N===0&&I===0)return;const _=N*N+I*I,p=Math.sqrt(_);E=N/(p||1),B=I/(p||1),v=Math.min(_*1e4,1)}m={x:n.x,y:n.y},d.push({x:n.x,y:n.y,age:0,force:v,vx:E,vy:B})},update:()=>{k();for(let n=d.length-1;n>=0;n--){const v=d[n],E=v.force*R*(1-v.age/h);v.x+=v.vx*E,v.y+=v.vy*E,v.age++,v.age>h&&d.splice(n,1)}for(let n=0;n<d.length;n++)C(d[n]);t.needsUpdate=!0},set radiusScale(n){w=.1*64*n},get radiusScale(){return w/(.1*64)},size:64}},$e=(s,r)=>new ee.Effect("LiquidEffect",`
2
+ uniform sampler2D uTexture;
3
+ uniform float uStrength;
4
+ uniform float uTime;
5
+ uniform float uFreq;
6
+
7
+ void mainUv(inout vec2 uv) {
8
+ vec4 tex = texture2D(uTexture, uv);
9
+ float vx = tex.r * 2.0 - 1.0;
10
+ float vy = tex.g * 2.0 - 1.0;
11
+ float intensity = tex.b;
12
+
13
+ float wave = 0.5 + 0.5 * sin(uTime * uFreq + intensity * 6.2831853);
14
+
15
+ float amt = uStrength * intensity * wave;
16
+
17
+ uv += vec2(vx, vy) * amt;
18
+ }
19
+ `,{uniforms:new Map([["uTexture",new L.Uniform(s)],["uStrength",new L.Uniform(r?.strength??.025)],["uTime",new L.Uniform(0)],["uFreq",new L.Uniform(r?.freq??4.5)]])}),me={square:0,circle:1,triangle:2,diamond:3},Be=`
20
+ void main() {
21
+ gl_Position = vec4(position, 1.0);
22
+ }
23
+ `,Ne=`
24
+ precision highp float;
25
+
26
+ uniform vec3 uColor;
27
+ uniform vec2 uResolution;
28
+ uniform float uTime;
29
+ uniform float uPixelSize;
30
+ uniform float uScale;
31
+ uniform float uDensity;
32
+ uniform float uPixelJitter;
33
+ uniform int uEnableRipples;
34
+ uniform float uRippleSpeed;
35
+ uniform float uRippleThickness;
36
+ uniform float uRippleIntensity;
37
+ uniform float uEdgeFade;
38
+
39
+ uniform int uShapeType;
40
+ const int SHAPE_SQUARE = 0;
41
+ const int SHAPE_CIRCLE = 1;
42
+ const int SHAPE_TRIANGLE = 2;
43
+ const int SHAPE_DIAMOND = 3;
44
+
45
+ const int MAX_CLICKS = 10;
46
+
47
+ uniform vec2 uClickPos [MAX_CLICKS];
48
+ uniform float uClickTimes[MAX_CLICKS];
49
+
50
+ out vec4 fragColor;
51
+
52
+ float Bayer2(vec2 a) {
53
+ a = floor(a);
54
+ return fract(a.x / 2. + a.y * a.y * .75);
55
+ }
56
+ #define Bayer4(a) (Bayer2(.5*(a))*0.25 + Bayer2(a))
57
+ #define Bayer8(a) (Bayer4(.5*(a))*0.25 + Bayer2(a))
58
+
59
+ #define FBM_OCTAVES 5
60
+ #define FBM_LACUNARITY 1.25
61
+ #define FBM_GAIN 1.0
62
+
63
+ float hash11(float n){ return fract(sin(n)*43758.5453); }
64
+
65
+ float vnoise(vec3 p){
66
+ vec3 ip = floor(p);
67
+ vec3 fp = fract(p);
68
+ float n000 = hash11(dot(ip + vec3(0.0,0.0,0.0), vec3(1.0,57.0,113.0)));
69
+ float n100 = hash11(dot(ip + vec3(1.0,0.0,0.0), vec3(1.0,57.0,113.0)));
70
+ float n010 = hash11(dot(ip + vec3(0.0,1.0,0.0), vec3(1.0,57.0,113.0)));
71
+ float n110 = hash11(dot(ip + vec3(1.0,1.0,0.0), vec3(1.0,57.0,113.0)));
72
+ float n001 = hash11(dot(ip + vec3(0.0,0.0,1.0), vec3(1.0,57.0,113.0)));
73
+ float n101 = hash11(dot(ip + vec3(1.0,0.0,1.0), vec3(1.0,57.0,113.0)));
74
+ float n011 = hash11(dot(ip + vec3(0.0,1.0,1.0), vec3(1.0,57.0,113.0)));
75
+ float n111 = hash11(dot(ip + vec3(1.0,1.0,1.0), vec3(1.0,57.0,113.0)));
76
+ vec3 w = fp*fp*fp*(fp*(fp*6.0-15.0)+10.0);
77
+ float x00 = mix(n000, n100, w.x);
78
+ float x10 = mix(n010, n110, w.x);
79
+ float x01 = mix(n001, n101, w.x);
80
+ float x11 = mix(n011, n111, w.x);
81
+ float y0 = mix(x00, x10, w.y);
82
+ float y1 = mix(x01, x11, w.y);
83
+ return mix(y0, y1, w.z) * 2.0 - 1.0;
84
+ }
85
+
86
+ float fbm2(vec2 uv, float t){
87
+ vec3 p = vec3(uv * uScale, t);
88
+ float amp = 1.0;
89
+ float freq = 1.0;
90
+ float sum = 1.0;
91
+ for (int i = 0; i < FBM_OCTAVES; ++i){
92
+ sum += amp * vnoise(p * freq);
93
+ freq *= FBM_LACUNARITY;
94
+ amp *= FBM_GAIN;
95
+ }
96
+ return sum * 0.5 + 0.5;
97
+ }
98
+
99
+ float maskCircle(vec2 p, float cov){
100
+ float r = sqrt(cov) * .25;
101
+ float d = length(p - 0.5) - r;
102
+ float aa = 0.5 * fwidth(d);
103
+ return cov * (1.0 - smoothstep(-aa, aa, d * 2.0));
104
+ }
105
+
106
+ float maskTriangle(vec2 p, vec2 id, float cov){
107
+ bool flip = mod(id.x + id.y, 2.0) > 0.5;
108
+ if (flip) p.x = 1.0 - p.x;
109
+ float r = sqrt(cov);
110
+ float d = p.y - r*(1.0 - p.x);
111
+ float aa = fwidth(d);
112
+ return cov * clamp(0.5 - d/aa, 0.0, 1.0);
113
+ }
114
+
115
+ float maskDiamond(vec2 p, float cov){
116
+ float r = sqrt(cov) * 0.564;
117
+ return step(abs(p.x - 0.49) + abs(p.y - 0.49), r);
118
+ }
119
+
120
+ void main(){
121
+ float pixelSize = uPixelSize;
122
+ vec2 fragCoord = gl_FragCoord.xy - uResolution * .5;
123
+ float aspectRatio = uResolution.x / uResolution.y;
124
+
125
+ vec2 pixelId = floor(fragCoord / pixelSize);
126
+ vec2 pixelUV = fract(fragCoord / pixelSize);
127
+
128
+ float cellPixelSize = 8.0 * pixelSize;
129
+ vec2 cellId = floor(fragCoord / cellPixelSize);
130
+ vec2 cellCoord = cellId * cellPixelSize;
131
+ vec2 uv = cellCoord / uResolution * vec2(aspectRatio, 1.0);
132
+
133
+ float base = fbm2(uv, uTime * 0.05);
134
+ base = base * 0.5 - 0.65;
135
+
136
+ float feed = base + (uDensity - 0.5) * 0.3;
137
+
138
+ float speed = uRippleSpeed;
139
+ float thickness = uRippleThickness;
140
+ const float dampT = 1.0;
141
+ const float dampR = 10.0;
142
+
143
+ if (uEnableRipples == 1) {
144
+ for (int i = 0; i < MAX_CLICKS; ++i){
145
+ vec2 pos = uClickPos[i];
146
+ if (pos.x < 0.0) continue;
147
+ float cellPixelSize = 8.0 * pixelSize;
148
+ vec2 cuv = (((pos - uResolution * .5 - cellPixelSize * .5) / (uResolution))) * vec2(aspectRatio, 1.0);
149
+ float t = max(uTime - uClickTimes[i], 0.0);
150
+ float r = distance(uv, cuv);
151
+ float waveR = speed * t;
152
+ float ring = exp(-pow((r - waveR) / thickness, 2.0));
153
+ float atten = exp(-dampT * t) * exp(-dampR * r);
154
+ feed = max(feed, ring * atten * uRippleIntensity);
155
+ }
156
+ }
157
+
158
+ float bayer = Bayer8(fragCoord / uPixelSize) - 0.5;
159
+ float bw = step(0.5, feed + bayer);
160
+
161
+ float h = fract(sin(dot(floor(fragCoord / uPixelSize), vec2(127.1, 311.7))) * 43758.5453);
162
+ float jitterScale = 1.0 + (h - 0.5) * uPixelJitter;
163
+ float coverage = bw * jitterScale;
164
+ float M;
165
+ if (uShapeType == SHAPE_CIRCLE) M = maskCircle (pixelUV, coverage);
166
+ else if (uShapeType == SHAPE_TRIANGLE) M = maskTriangle(pixelUV, pixelId, coverage);
167
+ else if (uShapeType == SHAPE_DIAMOND) M = maskDiamond(pixelUV, coverage);
168
+ else M = coverage;
169
+
170
+ if (uEdgeFade > 0.0) {
171
+ vec2 norm = gl_FragCoord.xy / uResolution;
172
+ float edge = min(min(norm.x, norm.y), min(1.0 - norm.x, 1.0 - norm.y));
173
+ float fade = smoothstep(0.0, uEdgeFade, edge);
174
+ M *= fade;
175
+ }
176
+
177
+ vec3 color = uColor;
178
+
179
+ // sRGB gamma correction - convert linear to sRGB for accurate color output
180
+ vec3 srgbColor = mix(
181
+ color * 12.92,
182
+ 1.055 * pow(color, vec3(1.0 / 2.4)) - 0.055,
183
+ step(0.0031308, color)
184
+ );
185
+
186
+ fragColor = vec4(srgbColor, M);
187
+ }
188
+ `,ue=10,ve=(0,c.memo)(({variant:s="square",pixelSize:r=3,color:o="#B19EEF",className:t,style:d,antialias:m=!0,patternScale:h=2,patternDensity:w=1,liquid:R=!1,liquidStrength:k=.1,liquidRadius:C=1,pixelSizeJitter:x=0,enableRipples:A=!0,rippleIntensityScale:n=1,rippleThickness:v=.1,rippleSpeed:E=.3,liquidWobbleSpeed:B=4.5,autoPauseOffscreen:N=!0,speed:I=.5,transparent:_=!0,edgeFade:p=.5,noiseAmount:F=0})=>{const q=(0,c.useRef)(null),V=(0,c.useRef)({visible:!0}),U=(0,c.useRef)(I),b=(0,c.useRef)(null),X=(0,c.useRef)(null);return(0,c.useEffect)(()=>{const $=q.current;if(!$)return;U.current=I;const ne=["antialias","liquid","noiseAmount"],W={antialias:m,liquid:R,noiseAmount:F};let i=!1;if(!b.current)i=!0;else if(X.current){for(const e of ne)if(X.current[e]!==W[e]){i=!0;break}}if(i){if(b.current){const g=b.current;g.resizeObserver?.disconnect(),cancelAnimationFrame(g.raf),g.quad?.geometry.dispose(),g.material.dispose(),g.composer?.dispose(),g.renderer.dispose(),g.renderer.domElement.parentElement===$&&$.removeChild(g.renderer.domElement),b.current=null}const e=new L.WebGLRenderer({canvas:document.createElement("canvas"),antialias:m,alpha:!0,powerPreference:"high-performance"});e.domElement.style.width="100%",e.domElement.style.height="100%",e.setPixelRatio(Math.min(window.devicePixelRatio||1,1.5)),$.appendChild(e.domElement),_?e.setClearAlpha(0):e.setClearColor(0,1);const a={uResolution:{value:new L.Vector2(0,0)},uTime:{value:0},uColor:{value:new L.Color(o)},uClickPos:{value:Array.from({length:ue},()=>new L.Vector2(-1,-1))},uClickTimes:{value:new Float32Array(ue)},uShapeType:{value:me[s]??0},uPixelSize:{value:r*e.getPixelRatio()},uScale:{value:h},uDensity:{value:w},uPixelJitter:{value:x},uEnableRipples:{value:A?1:0},uRippleSpeed:{value:E},uRippleThickness:{value:v},uRippleIntensity:{value:n},uEdgeFade:{value:p}},y=new L.Scene,l=new L.OrthographicCamera(-1,1,1,-1,0,1),u=new L.ShaderMaterial({vertexShader:Be,fragmentShader:Ne,uniforms:a,transparent:!0,depthTest:!1,depthWrite:!1,glslVersion:L.GLSL3}),f=new L.Mesh(new L.PlaneGeometry(2,2),u);y.add(f);const P=new L.Clock,j=()=>{const g=$.clientWidth||1,S=$.clientHeight||1;e.setSize(g,S,!1),a.uResolution.value.set(e.domElement.width,e.domElement.height),b.current?.composer&&b.current.composer.setSize(e.domElement.width,e.domElement.height),a.uPixelSize.value=r*e.getPixelRatio()};j();const K=new ResizeObserver(j);K.observe($);const Y=(()=>{if(typeof window<"u"&&window.crypto?.getRandomValues){const g=new Uint32Array(1);return window.crypto.getRandomValues(g),g[0]/4294967295}return Math.random()})()*1e3;let T,H,G;if(R){H=Fe(),H.radiusScale=C,T=new ee.EffectComposer(e);const g=new ee.RenderPass(y,l);G=$e(H.texture,{strength:k,freq:B});const S=new ee.EffectPass(l,G);S.renderToScreen=!0,T.addPass(g),T.addPass(S)}if(F>0){T||(T=new ee.EffectComposer(e),T.addPass(new ee.RenderPass(y,l)));const g=new ee.EffectPass(l,new ee.Effect("NoiseEffect","uniform float uTime; uniform float uAmount; float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7))) * 43758.5453);} void mainUv(inout vec2 uv){} void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){ float n=hash(floor(uv*vec2(1920.0,1080.0))+floor(uTime*60.0)); float g=(n-0.5)*uAmount; outputColor=inputColor+vec4(vec3(g),0.0);} ",{uniforms:new Map([["uTime",new L.Uniform(0)],["uAmount",new L.Uniform(F)]])}));g.renderToScreen=!0,T&&T.passes.length>0&&T.passes.forEach(S=>{const O=S;O.renderToScreen=!1}),T.addPass(g)}T&&T.setSize(e.domElement.width,e.domElement.height);const te=g=>{const S=e.domElement.getBoundingClientRect(),O=e.domElement.width/S.width,J=e.domElement.height/S.height;return{fx:(g.clientX-S.left)*O,fy:(S.height-(g.clientY-S.top))*J,w:e.domElement.width,h:e.domElement.height}},M=g=>{const{fx:S,fy:O}=te(g),J=b.current?.clickIx??0;a.uClickPos.value[J].set(S,O),a.uClickTimes.value[J]=a.uTime.value,b.current&&(b.current.clickIx=(J+1)%ue)},ae=g=>{if(!H)return;const{fx:S,fy:O,w:J,h:le}=te(g);H.addTouch({x:S/J,y:O/le})};e.domElement.addEventListener("pointerdown",M,{passive:!0}),e.domElement.addEventListener("pointermove",ae,{passive:!0});let re=0,se=0;const oe=1e3/30,Q=g=>{if(N&&!V.current.visible){re=requestAnimationFrame(Q);return}const S=g-se;if(S<oe){re=requestAnimationFrame(Q);return}if(se=g-S%oe,a.uTime.value=Y+P.getElapsedTime()*U.current,G){const O=G.uniforms.get("uTime");O&&(O.value=a.uTime.value)}T?(H&&H.update(),T.passes.forEach(O=>{const J=O;J.effects&&J.effects.forEach(le=>{const fe=le.uniforms?.get("uTime");fe&&(fe.value=a.uTime.value)})}),T.render()):e.render(y,l),re=requestAnimationFrame(Q)};re=requestAnimationFrame(g=>{se=g,Q(g)}),b.current={renderer:e,scene:y,camera:l,material:u,clock:P,clickIx:0,uniforms:a,resizeObserver:K,raf:re,quad:f,timeOffset:Y,composer:T,touch:H,liquidEffect:G}}else{const e=b.current;if(e.uniforms.uShapeType.value=me[s]??0,e.uniforms.uPixelSize.value=r*e.renderer.getPixelRatio(),e.uniforms.uColor.value.set(o),e.uniforms.uScale.value=h,e.uniforms.uDensity.value=w,e.uniforms.uPixelJitter.value=x,e.uniforms.uEnableRipples.value=A?1:0,e.uniforms.uRippleIntensity.value=n,e.uniforms.uRippleThickness.value=v,e.uniforms.uRippleSpeed.value=E,e.uniforms.uEdgeFade.value=p,_?e.renderer.setClearAlpha(0):e.renderer.setClearColor(0,1),e.liquidEffect){const a=e.liquidEffect,y=a.uniforms.get("uStrength");y&&(y.value=k);const l=a.uniforms.get("uFreq");l&&(l.value=B)}e.touch&&(e.touch.radiusScale=C)}return X.current=W,()=>{if(b.current&&i||!b.current)return;const e=b.current;e.resizeObserver?.disconnect(),cancelAnimationFrame(e.raf),e.quad?.geometry.dispose(),e.material.dispose(),e.composer?.dispose(),e.renderer.dispose(),e.renderer.domElement.parentElement===$&&$.removeChild(e.renderer.domElement),b.current=null}},[m,R,F,r,h,w,A,n,v,E,x,p,_,k,C,B,N,s,o,I]),(0,D.jsx)("div",{ref:q,className:`${Le.container} ${t??""}`,style:d,"aria-label":"PixelBlast interactive background"})});ve.displayName="PixelBlast";var pe=(0,c.memo)(s=>{const{currentTheme:r}=ie.useTheme();return(0,D.jsx)(ve,{color:(0,c.useMemo)(()=>{const o=r.colors.variables.primary||"#B19EEF";return(d=>{if(d.startsWith("#"))return d;const m=d.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return m?`#${parseInt(m[1],10).toString(16).padStart(2,"0")}${parseInt(m[2],10).toString(16).padStart(2,"0")}${parseInt(m[3],10).toString(16).padStart(2,"0")}`:d})(o)},[r]),variant:"square",pixelSize:6,patternScale:2,patternDensity:1,pixelSizeJitter:0,enableRipples:!0,rippleSpeed:.3,rippleThickness:.12,rippleIntensityScale:1.2,liquid:!1,liquidStrength:.12,liquidRadius:1.2,liquidWobbleSpeed:5,speed:.3,edgeFade:.25,transparent:!0,antialias:!1,...s})});pe.displayName="PixelBlastBackground";Object.defineProperty(exports,"LetterGlitchBackground",{enumerable:!0,get:function(){return he}});Object.defineProperty(exports,"PixelBlastBackground",{enumerable:!0,get:function(){return pe}});Object.defineProperty(exports,"SquareBackground",{enumerable:!0,get:function(){return Pe}});Object.defineProperty(exports,"WaveBackground",{enumerable:!0,get:function(){return Me}});
189
+
190
+ //# sourceMappingURL=chunk-animations-e2F3zuP9.cjs.map