nfx-ui 0.6.2 → 0.7.1
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.
- package/dist/animations.cjs +2 -2
- package/dist/animations.d.ts +0 -101
- package/dist/animations.mjs +9 -11
- package/dist/apis.cjs +2 -2
- package/dist/apis.cjs.map +1 -1
- package/dist/apis.d.ts +0 -6
- package/dist/apis.mjs +8 -9
- package/dist/apis.mjs.map +1 -1
- package/dist/{chunk-BounceLoading-B54QEw0n.mjs → chunk-BounceLoading-C5XE8DKc.mjs} +62 -65
- package/dist/{chunk-BounceLoading-B54QEw0n.mjs.map → chunk-BounceLoading-C5XE8DKc.mjs.map} +1 -1
- package/dist/chunk-BounceLoading-CwvDT5HF.cjs +11 -0
- package/dist/{chunk-BounceLoading-C6n4BZVJ.cjs.map → chunk-BounceLoading-CwvDT5HF.cjs.map} +1 -1
- package/dist/chunk-animations-CEZ01ALd.mjs +740 -0
- package/dist/chunk-animations-CEZ01ALd.mjs.map +1 -0
- package/dist/chunk-animations-CO7zKbti.cjs +3 -0
- package/dist/chunk-animations-CO7zKbti.cjs.map +1 -0
- package/dist/chunk-i18n-BCDF-skF.cjs +3 -0
- package/dist/{chunk-i18n-daHSL0Nm.cjs.map → chunk-i18n-BCDF-skF.cjs.map} +1 -1
- package/dist/{chunk-i18n-BBPhh6MT.mjs → chunk-i18n-BsyWvA9c.mjs} +44 -69
- package/dist/{chunk-i18n-BBPhh6MT.mjs.map → chunk-i18n-BsyWvA9c.mjs.map} +1 -1
- package/dist/{chunk-types-SD4MzUGp.mjs → chunk-language-B8sfGadQ.mjs} +2 -2
- package/dist/chunk-language-B8sfGadQ.mjs.map +1 -0
- package/dist/{chunk-types-BE3JCLff.cjs → chunk-language-Bqmpuf2W.cjs} +1 -1
- package/dist/chunk-language-Bqmpuf2W.cjs.map +1 -0
- package/dist/{chunk-types-DNPBKfmx.mjs → chunk-layout-C2uqDEMJ.mjs} +2 -2
- package/dist/chunk-layout-C2uqDEMJ.mjs.map +1 -0
- package/dist/{chunk-types-C_opkZGr.cjs → chunk-layout-D728gccQ.cjs} +1 -1
- package/dist/chunk-layout-D728gccQ.cjs.map +1 -0
- package/dist/{chunk-lucide-BhgnmTNo.mjs → chunk-lucide-C54WenI6.mjs} +2 -2
- package/dist/{chunk-lucide-BhgnmTNo.mjs.map → chunk-lucide-C54WenI6.mjs.map} +1 -1
- package/dist/chunk-preference-BWEpbZgC.mjs +50 -0
- package/dist/{chunk-preference-By58ZcJ_.mjs.map → chunk-preference-BWEpbZgC.mjs.map} +1 -1
- package/dist/chunk-preference-Dbugm0iQ.cjs +3 -0
- package/dist/{chunk-preference-C144GkCD.cjs.map → chunk-preference-Dbugm0iQ.cjs.map} +1 -1
- package/dist/chunk-theme-9dcwRKw8.mjs +17 -0
- package/dist/chunk-theme-9dcwRKw8.mjs.map +1 -0
- package/dist/chunk-theme-BFvDRCYS.cjs +3 -0
- package/dist/chunk-theme-BFvDRCYS.cjs.map +1 -0
- package/dist/components.cjs +3 -3
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +0 -412
- package/dist/components.mjs +628 -642
- package/dist/components.mjs.map +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.d.ts +0 -129
- package/dist/constants.mjs +1 -1
- package/dist/events.cjs +1 -1
- package/dist/events.d.ts +0 -60
- package/dist/events.mjs +1 -1
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.d.ts +0 -315
- package/dist/hooks.mjs +1 -1
- package/dist/icons.cjs +2 -2
- package/dist/icons.d.ts +0 -217
- package/dist/icons.mjs +2 -2
- package/dist/languages.cjs +2 -2
- package/dist/languages.cjs.map +1 -1
- package/dist/languages.d.ts +0 -178
- package/dist/languages.mjs +4 -4
- package/dist/languages.mjs.map +1 -1
- package/dist/layouts.cjs +2 -2
- package/dist/layouts.cjs.map +1 -1
- package/dist/layouts.d.ts +0 -208
- package/dist/layouts.mjs +201 -210
- package/dist/layouts.mjs.map +1 -1
- package/dist/navigations.cjs +1 -1
- package/dist/navigations.d.ts +0 -71
- package/dist/navigations.mjs +1 -1
- package/dist/pixel-blast.cjs +192 -0
- package/dist/pixel-blast.cjs.map +1 -0
- package/dist/pixel-blast.d.ts +1 -0
- package/dist/pixel-blast.mjs +506 -0
- package/dist/pixel-blast.mjs.map +1 -0
- package/dist/preference.cjs +2 -2
- package/dist/preference.d.ts +0 -95
- package/dist/preference.mjs +8 -11
- package/dist/services.cjs +2 -2
- package/dist/services.cjs.map +1 -1
- package/dist/services.d.ts +0 -7
- package/dist/services.mjs +9 -10
- package/dist/services.mjs.map +1 -1
- package/dist/stores.cjs +2 -2
- package/dist/stores.cjs.map +1 -1
- package/dist/stores.d.ts +1 -101
- package/dist/stores.mjs +53 -53
- package/dist/stores.mjs.map +1 -1
- package/dist/themes.cjs +2 -2
- package/dist/themes.cjs.map +1 -1
- package/dist/themes.d.ts +0 -232
- package/dist/themes.mjs +888 -721
- package/dist/themes.mjs.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.d.ts +0 -180
- package/dist/types.mjs +1 -1
- package/dist/utils.cjs +2 -2
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +0 -485
- package/dist/utils.mjs +143 -156
- package/dist/utils.mjs.map +1 -1
- package/package.json +45 -29
- package/dist/chunk-BounceLoading-C6n4BZVJ.cjs +0 -11
- package/dist/chunk-animations-Brp-bsaE.mjs +0 -1243
- package/dist/chunk-animations-Brp-bsaE.mjs.map +0 -1
- package/dist/chunk-animations-e2F3zuP9.cjs +0 -190
- package/dist/chunk-animations-e2F3zuP9.cjs.map +0 -1
- package/dist/chunk-i18n-daHSL0Nm.cjs +0 -3
- package/dist/chunk-preference-By58ZcJ_.mjs +0 -51
- package/dist/chunk-preference-C144GkCD.cjs +0 -3
- package/dist/chunk-types-BE3JCLff.cjs.map +0 -1
- package/dist/chunk-types-BNUlgEkq.cjs +0 -3
- package/dist/chunk-types-BNUlgEkq.cjs.map +0 -1
- package/dist/chunk-types-BudGuDCK.mjs +0 -20
- package/dist/chunk-types-BudGuDCK.mjs.map +0 -1
- package/dist/chunk-types-C_opkZGr.cjs.map +0 -1
- package/dist/chunk-types-DNPBKfmx.mjs.map +0 -1
- package/dist/chunk-types-SD4MzUGp.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-animations-CEZ01ALd.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"],"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"],"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,MAA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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const at=require("./chunk-chunk-BFrxaqQT.cjs"),z=require("./chunk-useTheme-DgleVMMh.cjs");let o=require("react");o=at.__toESM(o);let F=require("react/jsx-runtime");var ut="style-module__waves___oR3u7",it="style-module__wavesCanvas___zkhTC",rt={waves:ut,wavesCanvas:it},P=class{x;y;z;constructor(e,r,c){this.x=e,this.y=r,this.z=c}dot2(e,r){return this.x*e+this.y*r}},lt=class{grad3;p;perm;gradP;constructor(e=0){this.grad3=[new P(1,1,0),new P(-1,1,0),new P(1,-1,0),new P(-1,-1,0),new P(1,0,1),new P(-1,0,1),new P(1,0,-1),new P(-1,0,-1),new P(0,1,1),new P(0,-1,1),new P(0,1,-1),new P(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(e)}seed(e){e>0&&e<1&&(e*=65536),e=Math.floor(e),e<256&&(e|=e<<8);for(let r=0;r<256;r++){let c=r&1?this.p[r]^e&255:this.p[r]^e>>8&255;this.perm[r]=this.perm[r+256]=c,this.gradP[r]=this.gradP[r+256]=this.grad3[c%12]}}fade(e){return e*e*e*(e*(e*6-15)+10)}lerp(e,r,c){return(1-c)*e+c*r}perlin2(e,r){let c=Math.floor(e),t=Math.floor(r);e-=c,r-=t,c&=255,t&=255;const d=this.gradP[c+this.perm[t]].dot2(e,r),v=this.gradP[c+this.perm[t+1]].dot2(e,r-1),g=this.gradP[c+1+this.perm[t]].dot2(e-1,r),b=this.gradP[c+1+this.perm[t+1]].dot2(e-1,r-1),y=this.fade(e);return this.lerp(this.lerp(d,g,y),this.lerp(v,b,y),this.fade(r))}},ht=({lineColor:e="black",backgroundColor:r="transparent",waveSpeedX:c=.0125,waveSpeedY:t=.005,waveAmpX:d=32,waveAmpY:v=16,xGap:g=10,yGap:b=32,friction:y=.925,tension:C=.005,maxCursorMove:M=100,style:f={},className:R=""})=>{const l=(0,o.useRef)(null),_=(0,o.useRef)(null),T=(0,o.useRef)(null),W=(0,o.useRef)({width:0,height:0,left:0,top:0}),G=(0,o.useRef)(new lt(Math.random())),j=(0,o.useRef)([]),B=(0,o.useRef)({x:-10,y:0,lx:0,ly:0,sx:0,sy:0,v:0,vs:0,a:0,set:!1}),x=(0,o.useRef)({lineColor:e,waveSpeedX:c,waveSpeedY:t,waveAmpX:d,waveAmpY:v,friction:y,tension:C,maxCursorMove:M,xGap:g,yGap:b}),$=(0,o.useRef)(null);return(0,o.useEffect)(()=>{x.current={lineColor:e,waveSpeedX:c,waveSpeedY:t,waveAmpX:d,waveAmpY:v,friction:y,tension:C,maxCursorMove:M,xGap:g,yGap:b}},[e,c,t,d,v,y,C,M,g,b]),(0,o.useEffect)(()=>{const L=_.current,k=l.current;if(!L||!k)return;T.current=L.getContext("2d");function A(){if(!k||!L)return;const i=k.getBoundingClientRect();W.current={width:i.width,height:i.height,left:i.left,top:i.top},L.width=i.width,L.height=i.height}function X(){const{width:i,height:s}=W.current;j.current=[];const u=i+200,p=s+30,{xGap:E,yGap:O}=x.current,D=Math.ceil(u/E),Y=Math.ceil(p/O),J=(i-E*D)/2,Q=(s-O*Y)/2;for(let N=0;N<=D;N++){const U=[];for(let m=0;m<=Y;m++)U.push({x:J+E*N,y:Q+O*m,wave:{x:0,y:0},cursor:{x:0,y:0,vx:0,vy:0}});j.current.push(U)}}function I(i){const s=j.current,u=B.current,p=G.current,{waveSpeedX:E,waveSpeedY:O,waveAmpX:D,waveAmpY:Y,friction:J,tension:Q,maxCursorMove:N}=x.current;s.forEach(U=>{U.forEach(m=>{const tt=p.perlin2((m.x+i*E)*.002,(m.y+i*O)*.0015)*12;m.wave.x=Math.cos(tt)*D,m.wave.y=Math.sin(tt)*Y;const st=m.x-u.sx,ot=m.y-u.sy,q=Math.hypot(st,ot),Z=Math.max(175,u.vs);if(q<Z){const ct=1-q/Z,et=Math.cos(q*.001)*ct;m.cursor.vx+=Math.cos(u.a)*et*Z*u.vs*65e-5,m.cursor.vy+=Math.sin(u.a)*et*Z*u.vs*65e-5}m.cursor.vx+=(0-m.cursor.x)*Q,m.cursor.vy+=(0-m.cursor.y)*Q,m.cursor.vx*=J,m.cursor.vy*=J,m.cursor.x+=m.cursor.vx*2,m.cursor.y+=m.cursor.vy*2,m.cursor.x=Math.min(N,Math.max(-N,m.cursor.x)),m.cursor.y=Math.min(N,Math.max(-N,m.cursor.y))})})}function V(i,s=!0){const u=i.x+i.wave.x+(s?i.cursor.x:0),p=i.y+i.wave.y+(s?i.cursor.y:0);return{x:Math.round(u*10)/10,y:Math.round(p*10)/10}}function K(){const{width:i,height:s}=W.current,u=T.current;u&&(u.clearRect(0,0,i,s),u.beginPath(),u.strokeStyle=x.current.lineColor,j.current.forEach(p=>{let E=V(p[0],!1);u.moveTo(E.x,E.y),p.forEach((O,D)=>{const Y=D===p.length-1;E=V(O,!Y);const J=V(p[D+1]||p[p.length-1],!Y);u.lineTo(E.x,E.y),Y&&u.moveTo(J.x,J.y)})}),u.stroke())}function H(i){if(!k)return;const s=B.current;s.sx+=(s.x-s.sx)*.1,s.sy+=(s.y-s.sy)*.1;const u=s.x-s.lx,p=s.y-s.ly,E=Math.hypot(u,p);s.v=E,s.vs+=(E-s.vs)*.1,s.vs=Math.min(100,s.vs),s.lx=s.x,s.ly=s.y,s.a=Math.atan2(p,u),k.style.setProperty("--x",`${s.sx}px`),k.style.setProperty("--y",`${s.sy}px`),I(i),K(),$.current=requestAnimationFrame(H)}function n(){A(),X()}function h(i){w(i.clientX,i.clientY)}function a(i){const s=i.touches[0];w(s.clientX,s.clientY)}function w(i,s){const u=B.current,p=W.current;u.x=i-p.left,u.y=s-p.top,u.set||(u.sx=u.x,u.sy=u.y,u.lx=u.x,u.ly=u.y,u.set=!0)}return A(),X(),$.current=requestAnimationFrame(H),window.addEventListener("resize",n),window.addEventListener("mousemove",h),window.addEventListener("touchmove",a,{passive:!1}),()=>{window.removeEventListener("resize",n),window.removeEventListener("mousemove",h),window.removeEventListener("touchmove",a),$.current!==null&&cancelAnimationFrame($.current)}},[]),(0,F.jsx)("div",{ref:l,className:`${rt.waves} ${R}`,style:{position:"absolute",top:0,left:0,margin:0,padding:0,width:"100%",height:"100%",overflow:"hidden",backgroundColor:r,...f},children:(0,F.jsx)("canvas",{ref:_,className:rt.wavesCanvas})})},dt=e=>{const{currentTheme:r}=z.useTheme();return(0,F.jsx)(ht,{lineColor:(0,o.useMemo)(()=>{const c=r.colors.variables.primary||"rgb(59, 130, 246)",t=(g,b,y,C=.4)=>`rgb(${Math.round(g+(255-g)*C)}, ${Math.round(b+(255-b)*C)}, ${Math.round(y+(255-y)*C)})`;if(c.startsWith("#")){const g=c.slice(1);return t(parseInt(g.slice(0,2),16),parseInt(g.slice(2,4),16),parseInt(g.slice(4,6),16))}const d=c.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(d)return t(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10));const v=c.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);return v?t(parseInt(v[1],10),parseInt(v[2],10),parseInt(v[3],10)):c},[r]),backgroundColor:"transparent",waveSpeedX:.05,waveSpeedY:.01,waveAmpX:40,waveAmpY:20,...e})},ft="style-module__squaresCanvas___22kMc",mt={squaresCanvas:ft},vt=({direction:e="right",speed:r=1,borderColor:c="#999",squareSize:t=40,hoverFillColor:d="#222",className:v="",style:g={}})=>{const b=(0,o.useRef)(null),y=(0,o.useRef)(null),C=(0,o.useRef)(0),M=(0,o.useRef)(0),f=(0,o.useRef)({x:0,y:0}),R=(0,o.useRef)(null);return(0,o.useEffect)(()=>{const l=b.current;if(!l)return;const _=l.getContext("2d"),T=()=>{l.width=l.offsetWidth,l.height=l.offsetHeight,C.current=Math.ceil(l.width/t)+1,M.current=Math.ceil(l.height/t)+1};window.addEventListener("resize",T),T();const W=()=>{if(!_)return;_.clearRect(0,0,l.width,l.height);const x=Math.floor(f.current.x/t)*t,$=Math.floor(f.current.y/t)*t;for(let k=x;k<l.width+t;k+=t)for(let A=$;A<l.height+t;A+=t){const X=k-f.current.x%t,I=A-f.current.y%t;R.current&&Math.floor((k-x)/t)===R.current.x&&Math.floor((A-$)/t)===R.current.y&&(_.fillStyle=d,_.fillRect(X,I,t,t)),_.strokeStyle=c,_.strokeRect(X,I,t,t)}const L=_.createRadialGradient(l.width/2,l.height/2,0,l.width/2,l.height/2,Math.sqrt(l.width**2+l.height**2)/2);L.addColorStop(0,"rgba(0, 0, 0, 0)"),L.addColorStop(1,"#060010"),_.fillStyle=L,_.fillRect(0,0,l.width,l.height)},G=()=>{const x=Math.max(r,.1);switch(e){case"right":f.current.x=(f.current.x-x+t)%t;break;case"left":f.current.x=(f.current.x+x+t)%t;break;case"up":f.current.y=(f.current.y+x+t)%t;break;case"down":f.current.y=(f.current.y-x+t)%t;break;case"diagonal":f.current.x=(f.current.x-x+t)%t,f.current.y=(f.current.y-x+t)%t;break;default:break}W(),y.current=requestAnimationFrame(G)},j=x=>{const $=l.getBoundingClientRect(),L=x.clientX-$.left,k=x.clientY-$.top,A=Math.floor(f.current.x/t)*t,X=Math.floor(f.current.y/t)*t,I=Math.floor((L+f.current.x-A)/t),V=Math.floor((k+f.current.y-X)/t);(!R.current||R.current.x!==I||R.current.y!==V)&&(R.current={x:I,y:V})},B=()=>{R.current=null};return l.addEventListener("mousemove",j),l.addEventListener("mouseleave",B),y.current=requestAnimationFrame(G),()=>{window.removeEventListener("resize",T),y.current&&cancelAnimationFrame(y.current),l.removeEventListener("mousemove",j),l.removeEventListener("mouseleave",B)}},[e,r,c,d,t]),(0,F.jsx)("canvas",{ref:b,className:`${mt.squaresCanvas} ${v}`,style:g})},gt=e=>{const{currentTheme:r}=z.useTheme();return(0,F.jsx)(vt,{borderColor:(0,o.useMemo)(()=>{const c=r.colors.variables.border5||r.colors.variables.fg||"#271E37";if(c.startsWith("#"))return c;const t=c.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")}`:c},[r]),hoverFillColor:(0,o.useMemo)(()=>{const c=r.colors.variables.bg3||r.colors.variables.border3||"#222222",t=(v,g,b,y=.3)=>`rgb(${Math.round(v*(1-y))}, ${Math.round(g*(1-y))}, ${Math.round(b*(1-y))})`;if(c.startsWith("#")){const v=c.slice(1);return t(parseInt(v.slice(0,2),16),parseInt(v.slice(2,4),16),parseInt(v.slice(4,6),16))}const d=c.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return d?t(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10)):c},[r]),speed:.5,squareSize:40,direction:"diagonal",...e})},yt="style-module__container___HkxIe",xt="style-module__canvas___MR9JX",wt="style-module__outerVignette___i75nw",Mt="style-module__centerVignette___n9uVG",S={container:yt,canvas:xt,outerVignette:wt,centerVignette:Mt},pt=(0,o.memo)(({glitchColors:e=["#2b4539","#61dca3","#61b3dc"],glitchSpeed:r=500,centerVignette:c=!1,outerVignette:t=!0,smooth:d=!0,characters:v="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$&*()-_+=/[]{};:<>.,0123456789",className:g="",style:b={}})=>{const y=(0,o.useRef)(null),C=(0,o.useRef)(null),M=(0,o.useRef)([]),f=(0,o.useRef)({columns:0,rows:0}),R=(0,o.useRef)(null),l=(0,o.useRef)(Date.now()),_=(0,o.useMemo)(()=>Array.from(v),[v]),T=(0,o.useRef)(new Map),W=16,G=10,j=20,B=(0,o.useCallback)(()=>_[Math.floor(Math.random()*_.length)],[_]),x=(0,o.useCallback)(()=>e[Math.floor(Math.random()*e.length)],[e]),$=(0,o.useCallback)(n=>{if(T.current.has(n))return T.current.get(n);const h=n.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(i,s,u,p)=>s+s+u+u+p+p),a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(h),w=a?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null;return T.current.set(n,w),w},[]),L=(n,h,a)=>{const w={r:Math.round(n.r+(h.r-n.r)*a),g:Math.round(n.g+(h.g-n.g)*a),b:Math.round(n.b+(h.b-n.b)*a)};return`rgb(${w.r}, ${w.g}, ${w.b})`},k=(n,h)=>({columns:Math.ceil(n/G),rows:Math.ceil(h/j)}),A=(n,h)=>{f.current={columns:n,rows:h};const a=n*h;M.current=Array.from({length:a},()=>({char:B(),color:x(),targetColor:x(),colorProgress:1}))},X=()=>{const n=y.current;if(!n)return;const h=n.parentElement;if(!h)return;const a=window.devicePixelRatio||1,w=h.getBoundingClientRect();n.width=w.width*a,n.height=w.height*a,n.style.width=`${w.width}px`,n.style.height=`${w.height}px`,R.current&&R.current.setTransform(a,0,0,a,0,0);const{columns:i,rows:s}=k(w.width,w.height);A(i,s),I()},I=(0,o.useCallback)(()=>{if(!R.current||M.current.length===0)return;const n=R.current,h=y.current;h&&(n.clearRect(0,0,h.width,h.height),n.font=`${W}px monospace`,n.textBaseline="top",n.textAlign="left",M.current.forEach((a,w)=>{const i=w%f.current.columns*G,s=Math.floor(w/f.current.columns)*j;n.fillStyle=a.color,n.fillText(a.char,i,s)}))},[]),V=(0,o.useCallback)(()=>{if(!M.current||M.current.length===0)return;const n=Math.max(1,Math.floor(M.current.length*.02));for(let h=0;h<n;h++){const a=Math.floor(Math.random()*M.current.length);M.current[a]&&(M.current[a].char=B(),M.current[a].targetColor=x(),d?M.current[a].colorProgress=0:(M.current[a].color=M.current[a].targetColor,M.current[a].colorProgress=1))}},[B,x,d]),K=(0,o.useCallback)(()=>{let n=!1,h=0;M.current.forEach(a=>{if(a.colorProgress<1){h++,a.colorProgress+=.03,a.colorProgress>1&&(a.colorProgress=1);const w=$(a.color),i=$(a.targetColor);w&&i&&(a.color=L(w,i,a.colorProgress),n=!0)}}),n&&h>0&&I()},[$,I]),H=(0,o.useCallback)(()=>{const n=Date.now();n-l.current>=r?(V(),I(),l.current=n):d&&K(),C.current=requestAnimationFrame(H)},[r,d,V,K]);return(0,o.useEffect)(()=>{const n=y.current;if(!n)return;R.current=n.getContext("2d"),X(),H();let h;const a=()=>{clearTimeout(h),h=setTimeout(()=>{C.current&&cancelAnimationFrame(C.current),X(),H()},100)};return window.addEventListener("resize",a),()=>{C.current&&cancelAnimationFrame(C.current),window.removeEventListener("resize",a),clearTimeout(h),T.current.clear()}},[r,d,e,H]),(0,F.jsxs)("div",{className:`${S.container} ${g}`,style:b,children:[(0,F.jsx)("canvas",{ref:y,className:S.canvas}),t&&(0,F.jsx)("div",{className:S.outerVignette}),c&&(0,F.jsx)("div",{className:S.centerVignette})]})}),nt=(0,o.memo)(e=>{const{currentTheme:r}=z.useTheme();return(0,F.jsx)(pt,{glitchColors:(0,o.useMemo)(()=>{const c=r.colors.variables.primary||"#FA1E16",t=r.colors.variables.info||"#0095ff",d=r.colors.variables.success||"#00d68f",v=g=>{if(g.startsWith("#"))return g;const b=g.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);return b?`#${parseInt(b[1],10).toString(16).padStart(2,"0")}${parseInt(b[2],10).toString(16).padStart(2,"0")}${parseInt(b[3],10).toString(16).padStart(2,"0")}`:g};return[v(c),v(t),v(d)]},[r]),glitchSpeed:300,centerVignette:!0,outerVignette:!1,smooth:!0,...e})});nt.displayName="LetterGlitchBackground";Object.defineProperty(exports,"LetterGlitchBackground",{enumerable:!0,get:function(){return nt}});Object.defineProperty(exports,"SquareBackground",{enumerable:!0,get:function(){return gt}});Object.defineProperty(exports,"WaveBackground",{enumerable:!0,get:function(){return dt}});
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=chunk-animations-CO7zKbti.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-animations-CO7zKbti.cjs","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"],"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"],"mappings":"6QCOM,EAAN,KAAW,CACT,EACA,EACA,EACA,YAAY,EAAW,EAAW,EAAW,CAC3C,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAI,EAEX,KAAK,EAAW,EAAmB,CACjC,OAAO,KAAK,EAAI,EAAI,KAAK,EAAI,IAI3B,GAAN,KAAY,CACV,MACA,EACA,KACA,MAEA,YAAY,EAAO,EAAG,CACpB,KAAK,MAAQ,CACX,IAAI,EAAK,EAAG,EAAG,CAAA,EACf,IAAI,EAAK,GAAI,EAAG,CAAA,EAChB,IAAI,EAAK,EAAG,GAAI,CAAA,EAChB,IAAI,EAAK,GAAI,GAAI,CAAA,EACjB,IAAI,EAAK,EAAG,EAAG,CAAA,EACf,IAAI,EAAK,GAAI,EAAG,CAAA,EAChB,IAAI,EAAK,EAAG,EAAG,EAAA,EACf,IAAI,EAAK,GAAI,EAAG,EAAA,EAChB,IAAI,EAAK,EAAG,EAAG,CAAA,EACf,IAAI,EAAK,EAAG,GAAI,CAAA,EAChB,IAAI,EAAK,EAAG,EAAG,EAAA,EACf,IAAI,EAAK,EAAG,GAAI,EAAA,GAElB,KAAK,EAAI,CACP,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,IAAK,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,IAAK,EAAG,IAAK,IAAK,IAAK,IACrJ,GAAI,EAAG,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,IACnJ,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,IAAK,GACrJ,GAAI,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,IACrJ,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,GAAI,IAAK,IAAK,GAAI,IAClJ,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,IAAK,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IACtJ,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,EAAG,IACrJ,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,KAE9F,KAAK,KAAO,IAAI,MAAM,GAAA,EACtB,KAAK,MAAQ,IAAI,MAAM,GAAA,EACvB,KAAK,KAAK,CAAA,EAEZ,KAAK,EAAc,CACb,EAAO,GAAK,EAAO,IAAG,GAAQ,OAClC,EAAO,KAAK,MAAM,CAAA,EACd,EAAO,MAAK,GAAQ,GAAQ,GAChC,QAAS,EAAI,EAAG,EAAI,IAAK,IAAK,CAC5B,IAAI,EAAI,EAAI,EAAI,KAAK,EAAE,CAAA,EAAM,EAAO,IAAO,KAAK,EAAE,CAAA,EAAO,GAAQ,EAAK,IACtE,KAAK,KAAK,CAAA,EAAK,KAAK,KAAK,EAAI,GAAA,EAAO,EACpC,KAAK,MAAM,CAAA,EAAK,KAAK,MAAM,EAAI,GAAA,EAAO,KAAK,MAAM,EAAI,EAAA,GAGzD,KAAK,EAAmB,CACtB,OAAO,EAAI,EAAI,GAAK,GAAK,EAAI,EAAI,IAAM,IAEzC,KAAK,EAAW,EAAW,EAAmB,CAC5C,OAAQ,EAAI,GAAK,EAAI,EAAI,EAE3B,QAAQ,EAAW,EAAmB,CACpC,IAAI,EAAI,KAAK,MAAM,CAAA,EACjB,EAAI,KAAK,MAAM,CAAA,EACjB,GAAK,EACL,GAAK,EACL,GAAK,IACL,GAAK,IACL,MAAM,EAAM,KAAK,MAAM,EAAI,KAAK,KAAK,CAAA,CAAA,EAAI,KAAK,EAAG,CAAA,EAC3C,EAAM,KAAK,MAAM,EAAI,KAAK,KAAK,EAAI,CAAA,CAAA,EAAI,KAAK,EAAG,EAAI,CAAA,EACnD,EAAM,KAAK,MAAM,EAAI,EAAI,KAAK,KAAK,CAAA,CAAA,EAAI,KAAK,EAAI,EAAG,CAAA,EACnD,EAAM,KAAK,MAAM,EAAI,EAAI,KAAK,KAAK,EAAI,CAAA,CAAA,EAAI,KAAK,EAAI,EAAG,EAAI,CAAA,EAC3D,EAAI,KAAK,KAAK,CAAA,EACpB,OAAO,KAAK,KAAK,KAAK,KAAK,EAAK,EAAK,CAAA,EAAI,KAAK,KAAK,EAAK,EAAK,CAAA,EAAI,KAAK,KAAK,CAAA,CAAE,IAqD3E,GAAA,CAA+B,CACnC,UAAA,EAAY,QACZ,gBAAA,EAAkB,cAClB,WAAA,EAAa,MACb,WAAA,EAAa,KACb,SAAA,EAAW,GACX,SAAA,EAAW,GACX,KAAA,EAAO,GACP,KAAA,EAAO,GACP,SAAA,EAAW,KACX,QAAA,EAAU,KACV,cAAA,EAAgB,IAChB,MAAA,EAAQ,CAAA,EACR,UAAA,EAAY,EAAA,IACR,CACJ,MAAM,KAAA,EAAA,QAAsC,IAAA,EACtC,KAAA,EAAA,QAAsC,IAAA,EACtC,KAAA,EAAA,QAAiD,IAAA,EACjD,KAAA,EAAA,QAKH,CACD,MAAO,EACP,OAAQ,EACR,KAAM,EACN,IAAK,EACN,EACK,KAAA,EAAA,QAAkB,IAAI,GAAM,KAAK,OAAA,CAAQ,CAAC,EAC1C,KAAA,EAAA,QAA6B,CAAA,CAAE,EAC/B,KAAA,EAAA,QAAyB,CAC7B,EAAG,IACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,EAAG,EACH,GAAI,EACJ,EAAG,EACH,IAAK,GACN,EACK,KAAA,EAAA,QAA2B,CAC/B,UAAA,EACA,WAAA,EACA,WAAA,EACA,SAAA,EACA,SAAA,EACA,SAAA,EACA,QAAA,EACA,cAAA,EACA,KAAA,EACA,KAAA,EACD,EACK,KAAA,EAAA,QAAmC,IAAA,EAEzC,SAAA,EAAA,WAAA,IAAgB,CACd,EAAU,QAAU,CAClB,UAAA,EACA,WAAA,EACA,WAAA,EACA,SAAA,EACA,SAAA,EACA,SAAA,EACA,QAAA,EACA,cAAA,EACA,KAAA,EACA,KAAA,IAED,CAAC,EAAW,EAAY,EAAY,EAAU,EAAU,EAAU,EAAS,EAAe,EAAM,EAAK,KAExG,EAAA,WAAA,IAAgB,CACd,MAAM,EAAS,EAAU,QACnB,EAAY,EAAa,QAC/B,GAAI,CAAC,GAAU,CAAC,EAAW,OAC3B,EAAO,QAAU,EAAO,WAAW,IAAA,EAEnC,SAAS,GAAU,CACjB,GAAI,CAAC,GAAa,CAAC,EAAQ,OAC3B,MAAM,EAAO,EAAU,sBAAA,EACvB,EAAY,QAAU,CACpB,MAAO,EAAK,MACZ,OAAQ,EAAK,OACb,KAAM,EAAK,KACX,IAAK,EAAK,KAEZ,EAAO,MAAQ,EAAK,MACpB,EAAO,OAAS,EAAK,OAGvB,SAAS,GAAW,CAClB,KAAM,CAAE,MAAA,EAAO,OAAA,CAAA,EAAW,EAAY,QACtC,EAAS,QAAU,CAAA,EACnB,MAAM,EAAS,EAAQ,IACrB,EAAU,EAAS,GACf,CAAE,KAAA,EAAM,KAAA,CAAA,EAAS,EAAU,QAC3B,EAAa,KAAK,KAAK,EAAS,CAAA,EAChC,EAAc,KAAK,KAAK,EAAU,CAAA,EAClC,GAAU,EAAQ,EAAO,GAAc,EACvC,GAAU,EAAS,EAAO,GAAe,EAC/C,QAAS,EAAI,EAAG,GAAK,EAAY,IAAK,CACpC,MAAM,EAAe,CAAA,EACrB,QAAS,EAAI,EAAG,GAAK,EAAa,IAChC,EAAI,KAAK,CACP,EAAG,EAAS,EAAO,EACnB,EAAG,EAAS,EAAO,EACnB,KAAM,CAAE,EAAG,EAAG,EAAG,GACjB,OAAQ,CAAE,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAClC,EAEH,EAAS,QAAQ,KAAK,CAAA,GAI1B,SAAS,EAAW,EAAc,CAChC,MAAM,EAAQ,EAAS,QACjB,EAAQ,EAAS,QACjB,EAAQ,EAAS,QACjB,CAAE,WAAA,EAAY,WAAA,EAAY,SAAA,EAAU,SAAA,EAAU,SAAA,EAAU,QAAA,EAAS,cAAA,CAAA,EAAkB,EAAU,QACnG,EAAM,QAAS,GAAQ,CACrB,EAAI,QAAS,GAAM,CACjB,MAAM,GAAO,EAAM,SAAS,EAAE,EAAI,EAAO,GAAc,MAAQ,EAAE,EAAI,EAAO,GAAc,KAAA,EAAU,GACpG,EAAE,KAAK,EAAI,KAAK,IAAI,EAAA,EAAQ,EAC5B,EAAE,KAAK,EAAI,KAAK,IAAI,EAAA,EAAQ,EAE5B,MAAM,GAAK,EAAE,EAAI,EAAM,GACrB,GAAK,EAAE,EAAI,EAAM,GACb,EAAO,KAAK,MAAM,GAAI,EAAA,EACtB,EAAI,KAAK,IAAI,IAAK,EAAM,EAAA,EAC9B,GAAI,EAAO,EAAG,CACZ,MAAM,GAAI,EAAI,EAAO,EACf,GAAI,KAAK,IAAI,EAAO,IAAA,EAAS,GACnC,EAAE,OAAO,IAAM,KAAK,IAAI,EAAM,CAAA,EAAK,GAAI,EAAI,EAAM,GAAK,MACtD,EAAE,OAAO,IAAM,KAAK,IAAI,EAAM,CAAA,EAAK,GAAI,EAAI,EAAM,GAAK,MAGxD,EAAE,OAAO,KAAO,EAAI,EAAE,OAAO,GAAK,EAClC,EAAE,OAAO,KAAO,EAAI,EAAE,OAAO,GAAK,EAClC,EAAE,OAAO,IAAM,EACf,EAAE,OAAO,IAAM,EACf,EAAE,OAAO,GAAK,EAAE,OAAO,GAAK,EAC5B,EAAE,OAAO,GAAK,EAAE,OAAO,GAAK,EAC5B,EAAE,OAAO,EAAI,KAAK,IAAI,EAAe,KAAK,IAAI,CAAC,EAAe,EAAE,OAAO,CAAA,CAAE,EACzE,EAAE,OAAO,EAAI,KAAK,IAAI,EAAe,KAAK,IAAI,CAAC,EAAe,EAAE,OAAO,CAAA,CAAE,MAK/E,SAAS,EAAM,EAAc,EAAa,GAAgC,CACxE,MAAM,EAAI,EAAM,EAAI,EAAM,KAAK,GAAK,EAAa,EAAM,OAAO,EAAI,GAC5D,EAAI,EAAM,EAAI,EAAM,KAAK,GAAK,EAAa,EAAM,OAAO,EAAI,GAClE,MAAO,CAAE,EAAG,KAAK,MAAM,EAAI,EAAA,EAAM,GAAI,EAAG,KAAK,MAAM,EAAI,EAAA,EAAM,IAG/D,SAAS,GAAY,CACnB,KAAM,CAAE,MAAA,EAAO,OAAA,CAAA,EAAW,EAAY,QAChC,EAAM,EAAO,QACd,IACL,EAAI,UAAU,EAAG,EAAG,EAAO,CAAA,EAC3B,EAAI,UAAA,EACJ,EAAI,YAAc,EAAU,QAAQ,UACpC,EAAS,QAAQ,QAAS,GAAW,CACnC,IAAI,EAAK,EAAM,EAAO,CAAA,EAAI,EAAA,EAC1B,EAAI,OAAO,EAAG,EAAG,EAAG,CAAA,EACpB,EAAO,QAAA,CAAS,EAAG,IAAQ,CACzB,MAAM,EAAS,IAAQ,EAAO,OAAS,EACvC,EAAK,EAAM,EAAG,CAAC,CAAA,EACf,MAAM,EAAK,EAAM,EAAO,EAAM,CAAA,GAAM,EAAO,EAAO,OAAS,CAAA,EAAI,CAAC,CAAA,EAChE,EAAI,OAAO,EAAG,EAAG,EAAG,CAAA,EAChB,GAAQ,EAAI,OAAO,EAAG,EAAG,EAAG,CAAA,MAGpC,EAAI,OAAA,GAGN,SAAS,EAAK,EAAW,CACvB,GAAI,CAAC,EAAW,OAChB,MAAM,EAAQ,EAAS,QACvB,EAAM,KAAO,EAAM,EAAI,EAAM,IAAM,GACnC,EAAM,KAAO,EAAM,EAAI,EAAM,IAAM,GACnC,MAAM,EAAK,EAAM,EAAI,EAAM,GACzB,EAAK,EAAM,EAAI,EAAM,GACjB,EAAI,KAAK,MAAM,EAAI,CAAA,EACzB,EAAM,EAAI,EACV,EAAM,KAAO,EAAI,EAAM,IAAM,GAC7B,EAAM,GAAK,KAAK,IAAI,IAAK,EAAM,EAAA,EAC/B,EAAM,GAAK,EAAM,EACjB,EAAM,GAAK,EAAM,EACjB,EAAM,EAAI,KAAK,MAAM,EAAI,CAAA,EACzB,EAAU,MAAM,YAAY,MAAO,GAAG,EAAM,EAAA,IAAG,EAC/C,EAAU,MAAM,YAAY,MAAO,GAAG,EAAM,EAAA,IAAG,EAE/C,EAAW,CAAA,EACX,EAAA,EACA,EAAW,QAAU,sBAAsB,CAAA,EAG7C,SAAS,GAAW,CAClB,EAAA,EACA,EAAA,EAEF,SAAS,EAAY,EAAe,CAClC,EAAY,EAAE,QAAS,EAAE,OAAA,EAE3B,SAAS,EAAY,EAAe,CAClC,MAAM,EAAQ,EAAE,QAAQ,CAAA,EACxB,EAAY,EAAM,QAAS,EAAM,OAAA,EAEnC,SAAS,EAAY,EAAW,EAAW,CACzC,MAAM,EAAQ,EAAS,QACjB,EAAI,EAAY,QACtB,EAAM,EAAI,EAAI,EAAE,KAChB,EAAM,EAAI,EAAI,EAAE,IACX,EAAM,MACT,EAAM,GAAK,EAAM,EACjB,EAAM,GAAK,EAAM,EACjB,EAAM,GAAK,EAAM,EACjB,EAAM,GAAK,EAAM,EACjB,EAAM,IAAM,IAIhB,OAAA,EAAA,EACA,EAAA,EACA,EAAW,QAAU,sBAAsB,CAAA,EAC3C,OAAO,iBAAiB,SAAU,CAAA,EAClC,OAAO,iBAAiB,YAAa,CAAA,EACrC,OAAO,iBAAiB,YAAa,EAAa,CAAE,QAAS,EAAA,CAAO,EAEpE,IAAa,CACX,OAAO,oBAAoB,SAAU,CAAA,EACrC,OAAO,oBAAoB,YAAa,CAAA,EACxC,OAAO,oBAAoB,YAAa,CAAA,EACpC,EAAW,UAAY,MACzB,qBAAqB,EAAW,OAAA,IAGnC,CAAA,CAAE,KAGH,EAAA,KAAC,MAAD,CACE,IAAK,EACL,UAAW,GAAG,GAAO,KAAA,IAAS,CAAA,GAC9B,MAAO,CACL,SAAU,WACV,IAAK,EACL,KAAM,EACN,OAAQ,EACR,QAAS,EACT,MAAO,OACP,OAAQ,OACR,SAAU,SACV,gBAAA,EACA,GAAG,eAGL,EAAA,KAAC,SAAD,CAAQ,IAAK,EAAW,UAAW,GAAO,YAAe,EACrD,GAIJ,GAA+E,GAAU,CAC7F,KAAM,CAAE,aAAA,CAAA,EAAiB,EAAA,SAAA,EA2CzB,SAAO,EAAA,KAAC,GAAD,CAAkB,aAAA,EAAA,SAAA,IAxCO,CAE9B,MAAM,EAAU,EAAa,OAAO,UAAU,SAAW,oBAGnD,EAAA,CAAgB,EAAW,EAAW,EAAW,EAAiB,KAK/D,OAHM,KAAK,MAAM,GAAK,IAAM,GAAK,CAAA,CAAO,KAClC,KAAK,MAAM,GAAK,IAAM,GAAK,CAAA,CAAO,KAClC,KAAK,MAAM,GAAK,IAAM,GAAK,CAAA,CAAO,IAKjD,GAAI,EAAQ,WAAW,GAAA,EAAM,CAC3B,MAAM,EAAM,EAAQ,MAAM,CAAA,EAI1B,OAAO,EAHG,SAAS,EAAI,MAAM,EAAG,CAAA,EAAI,EAAA,EAC1B,SAAS,EAAI,MAAM,EAAG,CAAA,EAAI,EAAA,EAC1B,SAAS,EAAI,MAAM,EAAG,CAAA,EAAI,EAAA,CAAG,EAIzC,MAAM,EAAQ,EAAQ,MAAM,gCAAA,EAC5B,GAAI,EAIF,OAAO,EAHG,SAAS,EAAM,CAAA,EAAI,EAAA,EACnB,SAAS,EAAM,CAAA,EAAI,EAAA,EACnB,SAAS,EAAM,CAAA,EAAI,EAAA,CAAG,EAIlC,MAAM,EAAY,EAAQ,MAAM,gCAAA,EAChC,OAAI,EAIK,EAHG,SAAS,EAAU,CAAA,EAAI,EAAA,EACvB,SAAS,EAAU,CAAA,EAAI,EAAA,EACvB,SAAS,EAAU,CAAA,EAAI,EAAA,CAAG,EAG/B,GACN,CAAC,CAAA,CAAa,EAEmB,gBAAgB,cAAc,WAAY,IAAM,WAAY,IAAM,SAAU,GAAI,SAAU,GAAI,GAAI,EAAS,kEEpa3I,GAAA,CAAmC,CACvC,UAAA,EAAY,QACZ,MAAA,EAAQ,EACR,YAAA,EAAc,OACd,WAAA,EAAa,GACb,eAAA,EAAiB,OACjB,UAAA,EAAY,GACZ,MAAA,EAAQ,CAAA,CAAE,IACN,CACJ,MAAM,KAAA,EAAA,QAAsC,IAAA,EACtC,KAAA,EAAA,QAAmC,IAAA,EACnC,KAAA,EAAA,QAA6B,CAAA,EAC7B,KAAA,EAAA,QAA6B,CAAA,EAC7B,KAAA,EAAA,QAAgC,CAAE,EAAG,EAAG,EAAG,EAAG,EAC9C,KAAA,EAAA,QAA6C,IAAA,EAEnD,SAAA,EAAA,WAAA,IAAgB,CACd,MAAM,EAAS,EAAU,QACzB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAM,EAAO,WAAW,IAAA,EAExB,EAAA,IAAqB,CACzB,EAAO,MAAQ,EAAO,YACtB,EAAO,OAAS,EAAO,aACvB,EAAY,QAAU,KAAK,KAAK,EAAO,MAAQ,CAAA,EAAc,EAC7D,EAAY,QAAU,KAAK,KAAK,EAAO,OAAS,CAAA,EAAc,GAGhE,OAAO,iBAAiB,SAAU,CAAA,EAClC,EAAA,EAEA,MAAM,EAAA,IAAiB,CACrB,GAAI,CAAC,EAAK,OACV,EAAI,UAAU,EAAG,EAAG,EAAO,MAAO,EAAO,MAAA,EAEzC,MAAM,EAAS,KAAK,MAAM,EAAW,QAAQ,EAAI,CAAA,EAAc,EACzD,EAAS,KAAK,MAAM,EAAW,QAAQ,EAAI,CAAA,EAAc,EAE/D,QAAS,EAAI,EAAQ,EAAI,EAAO,MAAQ,EAAY,GAAK,EACvD,QAAS,EAAI,EAAQ,EAAI,EAAO,OAAS,EAAY,GAAK,EAAY,CACpE,MAAM,EAAU,EAAK,EAAW,QAAQ,EAAI,EACtC,EAAU,EAAK,EAAW,QAAQ,EAAI,EAG1C,EAAiB,SACjB,KAAK,OAAO,EAAI,GAAU,CAAA,IAAgB,EAAiB,QAAQ,GACnE,KAAK,OAAO,EAAI,GAAU,CAAA,IAAgB,EAAiB,QAAQ,IAEnE,EAAI,UAAY,EAChB,EAAI,SAAS,EAAS,EAAS,EAAY,CAAA,GAG7C,EAAI,YAAc,EAClB,EAAI,WAAW,EAAS,EAAS,EAAY,CAAA,EAIjD,MAAM,EAAW,EAAI,qBACnB,EAAO,MAAQ,EACf,EAAO,OAAS,EAChB,EACA,EAAO,MAAQ,EACf,EAAO,OAAS,EAChB,KAAK,KAAK,EAAO,OAAS,EAAI,EAAO,QAAU,CAAA,EAAK,CAAA,EAEtD,EAAS,aAAa,EAAG,kBAAA,EACzB,EAAS,aAAa,EAAG,SAAA,EAEzB,EAAI,UAAY,EAChB,EAAI,SAAS,EAAG,EAAG,EAAO,MAAO,EAAO,MAAA,GAGpC,EAAA,IAAwB,CAC5B,MAAM,EAAiB,KAAK,IAAI,EAAO,EAAA,EACvC,OAAQ,EAAR,CACE,IAAK,QACH,EAAW,QAAQ,GAAK,EAAW,QAAQ,EAAI,EAAiB,GAAc,EAC9E,MACF,IAAK,OACH,EAAW,QAAQ,GAAK,EAAW,QAAQ,EAAI,EAAiB,GAAc,EAC9E,MACF,IAAK,KACH,EAAW,QAAQ,GAAK,EAAW,QAAQ,EAAI,EAAiB,GAAc,EAC9E,MACF,IAAK,OACH,EAAW,QAAQ,GAAK,EAAW,QAAQ,EAAI,EAAiB,GAAc,EAC9E,MACF,IAAK,WACH,EAAW,QAAQ,GAAK,EAAW,QAAQ,EAAI,EAAiB,GAAc,EAC9E,EAAW,QAAQ,GAAK,EAAW,QAAQ,EAAI,EAAiB,GAAc,EAC9E,MACF,QACE,MAGJ,EAAA,EACA,EAAW,QAAU,sBAAsB,CAAA,GAGvC,EAAmB,GAAsB,CAC7C,MAAM,EAAO,EAAO,sBAAA,EACd,EAAS,EAAM,QAAU,EAAK,KAC9B,EAAS,EAAM,QAAU,EAAK,IAE9B,EAAS,KAAK,MAAM,EAAW,QAAQ,EAAI,CAAA,EAAc,EACzD,EAAS,KAAK,MAAM,EAAW,QAAQ,EAAI,CAAA,EAAc,EAEzD,EAAiB,KAAK,OAAO,EAAS,EAAW,QAAQ,EAAI,GAAU,CAAA,EACvE,EAAiB,KAAK,OAAO,EAAS,EAAW,QAAQ,EAAI,GAAU,CAAA,GAEzE,CAAC,EAAiB,SAAW,EAAiB,QAAQ,IAAM,GAAkB,EAAiB,QAAQ,IAAM,KAC/G,EAAiB,QAAU,CAAE,EAAG,EAAgB,EAAG,KAIjD,EAAA,IAAyB,CAC7B,EAAiB,QAAU,MAG7B,OAAA,EAAO,iBAAiB,YAAa,CAAA,EACrC,EAAO,iBAAiB,aAAc,CAAA,EACtC,EAAW,QAAU,sBAAsB,CAAA,EAE3C,IAAa,CACX,OAAO,oBAAoB,SAAU,CAAA,EACjC,EAAW,SAAS,qBAAqB,EAAW,OAAA,EACxD,EAAO,oBAAoB,YAAa,CAAA,EACxC,EAAO,oBAAoB,aAAc,CAAA,IAE1C,CAAC,EAAW,EAAO,EAAa,EAAgB,EAAW,KAEvD,EAAA,KAAC,SAAD,CAAQ,IAAK,EAAW,UAAW,GAAG,GAAO,aAAA,IAAiB,CAAA,GAAoB,MAAA,EAAS,GAG9F,GAAoF,GAAU,CAClG,KAAM,CAAE,aAAA,CAAA,EAAiB,EAAA,SAAA,EA8CzB,SAAO,EAAA,KAAC,GAAD,CAAsB,eAAA,EAAA,SAAA,IA3CK,CAChC,MAAM,EAAmB,EAAa,OAAO,UAAU,SAAW,EAAa,OAAO,UAAU,IAAM,UACtG,GAAI,EAAiB,WAAW,GAAA,EAC9B,OAAO,EAET,MAAM,EAAQ,EAAiB,MAAM,gCAAA,EACrC,OAAI,EAIK,IAHG,SAAS,EAAM,CAAA,EAAI,EAAA,EAAI,SAAS,EAAA,EAAI,SAAS,EAAG,GAAA,CAAI,GACpD,SAAS,EAAM,CAAA,EAAI,EAAA,EAAI,SAAS,EAAA,EAAI,SAAS,EAAG,GAAA,CAAI,GACpD,SAAS,EAAM,CAAA,EAAI,EAAA,EAAI,SAAS,EAAA,EAAI,SAAS,EAAG,GAAA,CAAI,GAGzD,GACN,CAAC,CAAA,CAAa,EA8ByC,kBAAA,EAAA,SAAA,IA3BrB,CACnC,MAAM,EAAY,EAAa,OAAO,UAAU,KAAO,EAAa,OAAO,UAAU,SAAW,UAE1F,EAAA,CAAe,EAAW,EAAW,EAAW,EAAiB,KAI9D,OAHM,KAAK,MAAM,GAAK,EAAI,EAAA,CAAQ,KAC5B,KAAK,MAAM,GAAK,EAAI,EAAA,CAAQ,KAC5B,KAAK,MAAM,GAAK,EAAI,EAAA,CAAQ,IAI3C,GAAI,EAAU,WAAW,GAAA,EAAM,CAC7B,MAAM,EAAM,EAAU,MAAM,CAAA,EAI5B,OAAO,EAHG,SAAS,EAAI,MAAM,EAAG,CAAA,EAAI,EAAA,EAC1B,SAAS,EAAI,MAAM,EAAG,CAAA,EAAI,EAAA,EAC1B,SAAS,EAAI,MAAM,EAAG,CAAA,EAAI,EAAA,CAAG,EAGzC,MAAM,EAAQ,EAAU,MAAM,gCAAA,EAC9B,OAAI,EAIK,EAHG,SAAS,EAAM,CAAA,EAAI,EAAA,EACnB,SAAS,EAAM,CAAA,EAAI,EAAA,EACnB,SAAS,EAAM,CAAA,EAAI,EAAA,CAAG,EAG3B,GACN,CAAC,CAAA,CAAa,EAEyD,MAAO,GAAK,WAAY,GAAI,UAAU,WAAW,GAAI,EAAS,2NE3LpI,MAAA,EAAA,MAAA,CACH,CACC,aAAA,EAAe,CAAC,UAAW,UAAW,WACtC,YAAA,EAAc,IACd,eAAA,EAAiB,GACjB,cAAA,EAAgB,GAChB,OAAA,EAAS,GACT,WAAA,EAAa,wFACb,UAAA,EAAY,GACZ,MAAA,EAAQ,CAAA,CAAE,IACa,CACvB,MAAM,KAAA,EAAA,QAA6C,IAAA,EAC7C,KAAA,EAAA,QAAqC,IAAA,EACrC,KAAA,EAAA,QAOJ,CAAA,CAAE,EACE,KAAA,EAAA,QAAc,CAAE,QAAS,EAAG,KAAM,EAAG,EACrC,KAAA,EAAA,QAAkD,IAAA,EAClD,KAAA,EAAA,QAAwB,KAAK,IAAA,CAAK,EAElC,KAAA,EAAA,SAAA,IAAkC,MAAM,KAAK,CAAA,EAAa,CAAC,CAAA,CAAW,EAGtE,KAAA,EAAA,QAA2E,IAAI,GAAK,EAEpF,EAAW,GACX,EAAY,GACZ,EAAa,GAEb,KAAA,EAAA,aAAA,IACG,EAAkB,KAAK,MAAM,KAAK,OAAA,EAAW,EAAkB,MAAA,CAAO,EAC5E,CAAC,CAAA,CAAkB,EAEhB,KAAA,EAAA,aAAA,IACG,EAAa,KAAK,MAAM,KAAK,OAAA,EAAW,EAAa,MAAA,CAAO,EAClE,CAAC,CAAA,CAAa,EAEX,KAAA,EAAA,aAAwB,GAAgB,CAE5C,GAAI,EAAS,QAAQ,IAAI,CAAA,EACvB,OAAO,EAAS,QAAQ,IAAI,CAAA,EAI9B,MAAM,EAAgB,EAAI,QADH,mCAAA,CAC4B,EAAI,EAAG,EAAG,IACpD,EAAI,EAAI,EAAI,EAAI,EAAI,GAGvB,EAAS,4CAA4C,KAAK,CAAA,EAC1D,EAAM,EACR,CACE,EAAG,SAAS,EAAO,CAAA,EAAI,EAAA,EACvB,EAAG,SAAS,EAAO,CAAA,EAAI,EAAA,EACvB,EAAG,SAAS,EAAO,CAAA,EAAI,EAAA,GAEzB,KAGJ,OAAA,EAAS,QAAQ,IAAI,EAAK,CAAA,EACnB,GACN,CAAA,CAAE,EAEC,EAAA,CAAoB,EAA4C,EAA0C,IAAmB,CACjI,MAAM,EAAS,CACb,EAAG,KAAK,MAAM,EAAM,GAAK,EAAI,EAAI,EAAM,GAAK,CAAA,EAC5C,EAAG,KAAK,MAAM,EAAM,GAAK,EAAI,EAAI,EAAM,GAAK,CAAA,EAC5C,EAAG,KAAK,MAAM,EAAM,GAAK,EAAI,EAAI,EAAM,GAAK,CAAA,GAE9C,MAAO,OAAO,EAAO,CAAA,KAAM,EAAO,CAAA,KAAM,EAAO,CAAA,KAG3C,EAAA,CAAiB,EAAe,KAG7B,CAAE,QAFO,KAAK,KAAK,EAAQ,CAAA,EAEhB,KADL,KAAK,KAAK,EAAS,CAAA,IAI5B,EAAA,CAAqB,EAAiB,IAAiB,CAC3D,EAAK,QAAU,CAAE,QAAA,EAAS,KAAA,GAC1B,MAAM,EAAe,EAAU,EAC/B,EAAQ,QAAU,MAAM,KAAK,CAAE,OAAQ,CAAA,EAAc,KAAS,CAC5D,KAAM,EAAA,EACN,MAAO,EAAA,EACP,YAAa,EAAA,EACb,cAAe,GAChB,GAGG,EAAA,IAAqB,CACzB,MAAM,EAAS,EAAU,QACzB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAS,EAAO,cACtB,GAAI,CAAC,EAAQ,OAEb,MAAM,EAAM,OAAO,kBAAoB,EACjC,EAAO,EAAO,sBAAA,EAEpB,EAAO,MAAQ,EAAK,MAAQ,EAC5B,EAAO,OAAS,EAAK,OAAS,EAE9B,EAAO,MAAM,MAAQ,GAAG,EAAK,KAAA,KAC7B,EAAO,MAAM,OAAS,GAAG,EAAK,MAAA,KAE1B,EAAQ,SACV,EAAQ,QAAQ,aAAa,EAAK,EAAG,EAAG,EAAK,EAAG,CAAA,EAGlD,KAAM,CAAE,QAAA,EAAS,KAAA,CAAA,EAAS,EAAc,EAAK,MAAO,EAAK,MAAA,EACzD,EAAkB,EAAS,CAAA,EAC3B,EAAA,GAGI,KAAA,EAAA,aAAA,IAAgC,CACpC,GAAI,CAAC,EAAQ,SAAW,EAAQ,QAAQ,SAAW,EAAG,OACtD,MAAM,EAAM,EAAQ,QACd,EAAS,EAAU,QACpB,IAEL,EAAI,UAAU,EAAG,EAAG,EAAO,MAAO,EAAO,MAAA,EACzC,EAAI,KAAO,GAAG,CAAA,eACd,EAAI,aAAe,MACnB,EAAI,UAAY,OAGhB,EAAQ,QAAQ,QAAA,CAAS,EAAQ,IAAU,CACzC,MAAM,EAAK,EAAQ,EAAK,QAAQ,QAAW,EACrC,EAAI,KAAK,MAAM,EAAQ,EAAK,QAAQ,OAAA,EAAW,EACrD,EAAI,UAAY,EAAO,MACvB,EAAI,SAAS,EAAO,KAAM,EAAG,CAAA,MAE9B,CAAA,CAAE,EAEC,KAAA,EAAA,aAAA,IAAkC,CACtC,GAAI,CAAC,EAAQ,SAAW,EAAQ,QAAQ,SAAW,EAAG,OAGtD,MAAM,EAAc,KAAK,IAAI,EAAG,KAAK,MAAM,EAAQ,QAAQ,OAAS,GAAA,CAAK,EAEzE,QAAS,EAAI,EAAG,EAAI,EAAa,IAAK,CACpC,MAAM,EAAQ,KAAK,MAAM,KAAK,OAAA,EAAW,EAAQ,QAAQ,MAAA,EACpD,EAAQ,QAAQ,CAAA,IAErB,EAAQ,QAAQ,CAAA,EAAO,KAAO,EAAA,EAC9B,EAAQ,QAAQ,CAAA,EAAO,YAAc,EAAA,EAEhC,EAIH,EAAQ,QAAQ,CAAA,EAAO,cAAgB,GAHvC,EAAQ,QAAQ,CAAA,EAAO,MAAQ,EAAQ,QAAQ,CAAA,EAAO,YACtD,EAAQ,QAAQ,CAAA,EAAO,cAAgB,MAK1C,CAAC,EAAe,EAAgB,EAAO,EAEpC,KAAA,EAAA,aAAA,IAA4C,CAChD,IAAI,EAAc,GACd,EAAc,EAGlB,EAAQ,QAAQ,QAAS,GAAW,CAClC,GAAI,EAAO,cAAgB,EAAG,CAC5B,IACA,EAAO,eAAiB,IACpB,EAAO,cAAgB,IAAG,EAAO,cAAgB,GAErD,MAAM,EAAW,EAAS,EAAO,KAAA,EAC3B,EAAS,EAAS,EAAO,WAAA,EAC3B,GAAY,IACd,EAAO,MAAQ,EAAiB,EAAU,EAAQ,EAAO,aAAA,EACzD,EAAc,OAMhB,GAAe,EAAc,GAC/B,EAAA,GAED,CAAC,EAAU,CAAA,CAAY,EAEpB,KAAA,EAAA,aAAA,IAA4B,CAChC,MAAM,EAAM,KAAK,IAAA,EACW,EAAM,EAAe,SAGtB,GACzB,EAAA,EACA,EAAA,EACA,EAAe,QAAU,GAChB,GAET,EAAA,EAGF,EAAa,QAAU,sBAAsB,CAAA,GAC5C,CAAC,EAAa,EAAQ,EAAe,EAAwB,EAEhE,SAAA,EAAA,WAAA,IAAgB,CACd,MAAM,EAAS,EAAU,QACzB,GAAI,CAAC,EAAQ,OAEb,EAAQ,QAAU,EAAO,WAAW,IAAA,EACpC,EAAA,EACA,EAAA,EAEA,IAAI,EAEJ,MAAM,EAAA,IAAqB,CACzB,aAAa,CAAA,EACb,EAAgB,WAAA,IAAiB,CAC3B,EAAa,SACf,qBAAqB,EAAa,OAAA,EAEpC,EAAA,EACA,EAAA,GACC,GAAA,GAGL,cAAO,iBAAiB,SAAU,CAAA,EAElC,IAAa,CACP,EAAa,SACf,qBAAqB,EAAa,OAAA,EAEpC,OAAO,oBAAoB,SAAU,CAAA,EACrC,aAAa,CAAA,EAEb,EAAS,QAAQ,MAAA,IAElB,CAAC,EAAa,EAAQ,EAAc,EAAQ,KAG7C,EAAA,MAAC,MAAD,CAAK,UAAW,GAAG,EAAO,SAAA,IAAa,CAAA,GAAoB,MAAA,WAA3D,IACE,EAAA,KAAC,SAAD,CAAQ,IAAK,EAAW,UAAW,EAAO,OAAU,EACnD,MAAiB,EAAA,KAAC,MAAD,CAAK,UAAW,EAAO,aAAA,CAAqB,EAC7D,MAAkB,EAAA,KAAC,MAAD,CAAK,UAAW,EAAO,cAAA,CAAsB,OAMlE,MAAA,EAAA,MAAkF,GAAU,CAChG,KAAM,CAAE,aAAA,CAAA,EAAiB,EAAA,SAAA,EAyBzB,SACE,EAAA,KAAC,GAAD,CACgB,gBAAA,EAAA,SAAA,IAxBiB,CACjC,MAAM,EAAU,EAAa,OAAO,UAAU,SAAW,UACnD,EAAO,EAAa,OAAO,UAAU,MAAQ,UAC7C,EAAU,EAAa,OAAO,UAAU,SAAW,UAEnD,EAAS,GAA0B,CACvC,GAAI,EAAM,WAAW,GAAA,EACnB,OAAO,EAET,MAAM,EAAQ,EAAM,MAAM,gCAAA,EAC1B,OAAI,EAIK,IAHG,SAAS,EAAM,CAAA,EAAI,EAAA,EAAI,SAAS,EAAA,EAAI,SAAS,EAAG,GAAA,CAAI,GACpD,SAAS,EAAM,CAAA,EAAI,EAAA,EAAI,SAAS,EAAA,EAAI,SAAS,EAAG,GAAA,CAAI,GACpD,SAAS,EAAM,CAAA,EAAI,EAAA,EAAI,SAAS,EAAA,EAAI,SAAS,EAAG,GAAA,CAAI,GAGzD,GAGT,MAAO,CAAC,EAAM,CAAA,EAAU,EAAM,CAAA,EAAO,EAAM,CAAA,IAC1C,CAAC,CAAA,CAAa,EAKb,YAAa,IACb,eAAgB,GAChB,cAAe,GACf,OAAQ,GACR,GAAI,EACJ,IAIN,GAAuB,YAAc"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const h=require("./chunk-chunk-BFrxaqQT.cjs"),n=require("./chunk-language-Bqmpuf2W.cjs");let r=require("i18next");r=h.__toESM(r);let f=require("i18next-browser-languagedetector");f=h.__toESM(f);let p=require("react-i18next");var v={show:"Show Sidebar",hide:"Hide Sidebar"},A={layoutSwitcher:v},y={en:"English",zh:"Chinese",fr:"French"},b={languageSwitcher:y},C={default:"Default",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},P={theme:"Theme",language:"Language",layout:"Layout",preferences:"Preferences"},N={baseSwitcher:C,preference:P},$={default:"Default",light:"Light",dark:"Dark",cosmic:"Cosmic",corporate:"Corporate",forest:"Forest",coffee:"Coffee",wine:"Wine",wheat:"Wheat"},L={themeSwitcher:$},M={show:"Afficher la barre latérale",hide:"Masquer la barre latérale"},x={layoutSwitcher:M},O={en:"Anglais",zh:"Chinois",fr:"Français"},R={languageSwitcher:O},F={default:"Par défaut",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},q={theme:"Thème",language:"Langue",layout:"Disposition",preferences:"Préférences"},k={baseSwitcher:F,preference:q},D={default:"Par défaut",light:"Clair",dark:"Sombre",cosmic:"Cosmique",corporate:"Entreprise",forest:"Forêt",coffee:"Coffee",wine:"Vin",wheat:"Blé"},j={themeSwitcher:D},U={show:"显示侧边栏",hide:"隐藏侧边栏"},B={layoutSwitcher:U},W={en:"英语",zh:"中文",fr:"法语"},X={languageSwitcher:W},z={default:"默认",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},T={theme:"主题",language:"语言",layout:"布局",preferences:"偏好设置"},H={baseSwitcher:z,preference:T},I={default:"默认",light:"浅色",dark:"深色",cosmic:"宇宙",corporate:"企业",forest:"森林",coffee:"咖啡",wine:"酒红",wheat:"麦田"},V={themeSwitcher:I},S=["theme","language","layout","preference"],w={theme:"theme",language:"language",layout:"layout",preference:"preference"},Z={en:{theme:L,language:b,layout:A,preference:N},zh:{theme:V,language:X,layout:B,preference:H},fr:{theme:j,language:R,layout:x,preference:k}};function E(){return{RESOURCES:Z,NAME_SPACES_MAP:w,NAME_SPACES:[...S]}}function J(u){const c=E(),i=u.bundles,l=u.fallbackLng??n.LanguageEnum.ZH,m=[n.LanguageEnum.EN,n.LanguageEnum.ZH,n.LanguageEnum.FR].reduce((a,e)=>({...a,[e]:{...c.RESOURCES[e]??{},...i.RESOURCES[e]??{}}}),{}),d=[...i.NAME_SPACES,...c.NAME_SPACES.filter(a=>!i.NAME_SPACES.includes(a))];r.default.use(f.default).use(p.initReactI18next).init({compatibilityJSON:"v4",resources:m,lng:l,fallbackLng:l,ns:d,defaultNS:d[0],interpolation:{escapeValue:!1},keySeparator:".",detection:{order:["navigator","htmlTag","path","subdomain"]}});const s=u.onLoadExtraBundles;if(s){const a=async e=>{const t=await s(e);if(t==null)return;const _=Array.isArray(t)?t:[t];for(const{namespace:g,bundle:o}of _)g&&o&&typeof o=="object"&&r.default.addResourceBundle(e,g,o,!0,!0)};a(r.default.language||l),r.default.on("languageChanged",e=>{a(e)})}}var G=r.default;Object.defineProperty(exports,"NFX_NAMESPACES",{enumerable:!0,get:function(){return S}});Object.defineProperty(exports,"NFX_NAMESPACES_MAP",{enumerable:!0,get:function(){return w}});Object.defineProperty(exports,"getDefaultNfxBundles",{enumerable:!0,get:function(){return E}});Object.defineProperty(exports,"i18n_default",{enumerable:!0,get:function(){return G}});Object.defineProperty(exports,"initI18n",{enumerable:!0,get:function(){return J}});
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=chunk-i18n-BCDF-skF.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-i18n-
|
|
1
|
+
{"version":3,"file":"chunk-i18n-BCDF-skF.cjs","names":[],"sources":["../src/languages/resources/en/layout.json","../src/languages/resources/en/language.json","../src/languages/resources/en/preference.json","../src/languages/resources/en/theme.json","../src/languages/resources/fr/layout.json","../src/languages/resources/fr/language.json","../src/languages/resources/fr/preference.json","../src/languages/resources/fr/theme.json","../src/languages/resources/zh/layout.json","../src/languages/resources/zh/language.json","../src/languages/resources/zh/preference.json","../src/languages/resources/zh/theme.json","../src/languages/resources/index.ts","../src/languages/languages/i18n.ts"],"sourcesContent":["{\n \"layoutSwitcher\": {\n \"show\": \"Show Sidebar\",\n \"hide\": \"Hide Sidebar\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"English\",\n \"zh\": \"Chinese\",\n \"fr\": \"French\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Default\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Theme\",\n \"language\": \"Language\",\n \"layout\": \"Layout\",\n \"preferences\": \"Preferences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Default\",\n \"light\": \"Light\",\n \"dark\": \"Dark\",\n \"cosmic\": \"Cosmic\",\n \"corporate\": \"Corporate\",\n \"forest\": \"Forest\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Wine\",\n \"wheat\": \"Wheat\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"Afficher la barre latérale\",\n \"hide\": \"Masquer la barre latérale\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"Anglais\",\n \"zh\": \"Chinois\",\n \"fr\": \"Français\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Par défaut\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Thème\",\n \"language\": \"Langue\",\n \"layout\": \"Disposition\",\n \"preferences\": \"Préférences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Par défaut\",\n \"light\": \"Clair\",\n \"dark\": \"Sombre\",\n \"cosmic\": \"Cosmique\",\n \"corporate\": \"Entreprise\",\n \"forest\": \"Forêt\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Vin\",\n \"wheat\": \"Blé\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"显示侧边栏\",\n \"hide\": \"隐藏侧边栏\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"英语\",\n \"zh\": \"中文\",\n \"fr\": \"法语\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"默认\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"主题\",\n \"language\": \"语言\",\n \"layout\": \"布局\",\n \"preferences\": \"偏好设置\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"默认\",\n \"light\": \"浅色\",\n \"dark\": \"深色\",\n \"cosmic\": \"宇宙\",\n \"corporate\": \"企业\",\n \"forest\": \"森林\",\n \"coffee\": \"咖啡\",\n \"wine\": \"酒红\",\n \"wheat\": \"麦田\"\n }\n}\n","/**\n * NFX-UI 内置多语言资源:theme / language / layout / preference 四个命名空间,en / zh / fr 三种语言。\n * Built-in i18n resources: namespaces theme, language, layout, preference; languages en, zh, fr.\n *\n * 使用方可在 createI18nResources 时合并此资源,使 ThemeSwitcher / LanguageSwitcher / LayoutSwitcher 使用默认翻译。\n * Consumers can merge these resources in createI18nResources so switchers use default labels.\n */\nimport type { CreateI18nResourcesResult, NameSpacesMap, Resources } from \"../types\";\n\nimport enLayout from \"./en/layout.json\";\nimport enLanguage from \"./en/language.json\";\nimport enPreference from \"./en/preference.json\";\nimport enTheme from \"./en/theme.json\";\nimport frLayout from \"./fr/layout.json\";\nimport frLanguage from \"./fr/language.json\";\nimport frPreference from \"./fr/preference.json\";\nimport frTheme from \"./fr/theme.json\";\nimport zhLayout from \"./zh/layout.json\";\nimport zhLanguage from \"./zh/language.json\";\nimport zhPreference from \"./zh/preference.json\";\nimport zhTheme from \"./zh/theme.json\";\n\nexport const NFX_NAMESPACES = [\"theme\", \"language\", \"layout\", \"preference\"] as const;\nexport const NFX_NAMESPACES_MAP: NameSpacesMap = {\n theme: \"theme\",\n language: \"language\",\n layout: \"layout\",\n preference: \"preference\",\n};\n\nconst DEFAULT_NFX_RESOURCES: Resources = {\n en: {\n theme: enTheme as Record<string, unknown>,\n language: enLanguage as Record<string, unknown>,\n layout: enLayout as Record<string, unknown>,\n preference: enPreference as Record<string, unknown>,\n },\n zh: {\n theme: zhTheme as Record<string, unknown>,\n language: zhLanguage as Record<string, unknown>,\n layout: zhLayout as Record<string, unknown>,\n preference: zhPreference as Record<string, unknown>,\n },\n fr: {\n theme: frTheme as Record<string, unknown>,\n language: frLanguage as Record<string, unknown>,\n layout: frLayout as Record<string, unknown>,\n preference: frPreference as Record<string, unknown>,\n },\n};\n\n/**\n * 返回 NFX-UI 默认文案包,可与使用方自建 resources 合并后传入 createI18nResources。\n * Returns default NFX bundles; merge with your resources and pass to createI18nResources.\n */\nexport function getDefaultNfxBundles(): CreateI18nResourcesResult {\n return {\n RESOURCES: DEFAULT_NFX_RESOURCES,\n NAME_SPACES_MAP: NFX_NAMESPACES_MAP,\n NAME_SPACES: [...NFX_NAMESPACES],\n };\n}\n","/**\n * i18n 初始化与实例:initI18n 由 LanguageProvider 调用,changeLanguage 供外部切换语言。\n * 默认会合并 NFX-UI 自带的 theme / language / layout / preference 四个命名空间,使用方只需传入自己的 bundles。\n * i18n init and instance: initI18n called by LanguageProvider. Merges built-in theme/language/layout/preference by default.\n */\nimport type { InitI18nOptions } from \"../types\";\n\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { getDefaultNfxBundles } from \"../resources\";\nimport { LanguageEnum } from \"../types\";\n\n/**\n * 初始化 i18n。会先合并 NFX-UI 自带的四类 JSON(theme/language/layout/preference),再与用户传入的 bundles 合并(用户可覆盖)。\n * Init i18n. Merges built-in NFX bundles (theme, language, layout, preference) with user bundles (user overrides).\n */\nexport function initI18n(options: InitI18nOptions): void {\n const nfx = getDefaultNfxBundles();\n const user = options.bundles;\n const fallbackLng = options.fallbackLng ?? LanguageEnum.ZH;\n\n const RESOURCES = ([LanguageEnum.EN, LanguageEnum.ZH, LanguageEnum.FR] as const).reduce(\n (acc, lang) => ({\n ...acc,\n [lang]: {\n ...(nfx.RESOURCES[lang] ?? {}),\n ...(user.RESOURCES[lang] ?? {}),\n },\n }),\n {} as typeof user.RESOURCES,\n );\n const NAME_SPACES = [...user.NAME_SPACES, ...nfx.NAME_SPACES.filter((n) => !user.NAME_SPACES.includes(n))];\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n compatibilityJSON: \"v4\",\n resources: RESOURCES,\n lng: fallbackLng,\n fallbackLng,\n ns: NAME_SPACES,\n defaultNS: NAME_SPACES[0],\n interpolation: { escapeValue: false },\n keySeparator: \".\",\n detection: { order: [\"navigator\", \"htmlTag\", \"path\", \"subdomain\"] },\n });\n\n const onLoad = options.onLoadExtraBundles;\n if (onLoad) {\n const apply = async (lng: LanguageEnum) => {\n const result = await onLoad(lng);\n if (result == null) return;\n const items = Array.isArray(result) ? result : [result];\n for (const { namespace, bundle } of items) {\n if (namespace && bundle && typeof bundle === \"object\") {\n i18n.addResourceBundle(lng, namespace, bundle, true, true);\n }\n }\n };\n void apply((i18n.language as LanguageEnum) || fallbackLng);\n i18n.on(\"languageChanged\", (lng) => void apply(lng as LanguageEnum));\n }\n}\n\nexport default i18n;\n"],"mappings":"6mDYsBa,EAAiB,CAAC,QAAS,WAAY,SAAU,cACjD,EAAoC,CAC/C,MAAO,QACP,SAAU,WACV,OAAQ,SACR,WAAY,cAGR,EAAmC,CACvC,GAAI,CACF,MAAO,EACP,SAAU,EACV,OAAQ,EACR,WAAY,GAEd,GAAI,CACF,MAAO,EACP,SAAU,EACV,OAAQ,EACR,WAAY,GAEd,GAAI,CACF,MAAO,EACP,SAAU,EACV,OAAQ,EACR,WAAY,IAQhB,SAAgB,GAAkD,CAChE,MAAO,CACL,UAAW,EACX,gBAAiB,EACjB,YAAa,CAAC,GAAG,CAAA,GCzCrB,SAAgB,EAAS,EAAgC,CACvD,MAAM,EAAM,EAAA,EACN,EAAO,EAAQ,QACf,EAAc,EAAQ,aAAe,EAAA,aAAa,GAElD,EAAa,CAAC,EAAA,aAAa,GAAI,EAAA,aAAa,GAAI,EAAA,aAAa,IAAc,OAAA,CAC9E,EAAK,KAAU,CACd,GAAG,GACF,CAAA,EAAO,CACN,GAAI,EAAI,UAAU,CAAA,GAAS,CAAA,EAC3B,GAAI,EAAK,UAAU,CAAA,GAAS,CAAA,KAGhC,CAAA,CAAE,EAEE,EAAc,CAAC,GAAG,EAAK,YAAa,GAAG,EAAI,YAAY,OAAQ,GAAM,CAAC,EAAK,YAAY,SAAS,CAAA,CAAE,CAAC,EAEzG,EAAA,QACG,IAAI,EAAA,OAAA,EACJ,IAAI,EAAA,gBAAA,EACJ,KAAK,CACJ,kBAAmB,KACnB,UAAW,EACX,IAAK,EACL,YAAA,EACA,GAAI,EACJ,UAAW,EAAY,CAAA,EACvB,cAAe,CAAE,YAAa,EAAA,EAC9B,aAAc,IACd,UAAW,CAAE,MAAO,CAAC,YAAa,UAAW,OAAQ,YAAY,EAClE,EAEH,MAAM,EAAS,EAAQ,mBACvB,GAAI,EAAQ,CACV,MAAM,EAAQ,MAAO,GAAsB,CACzC,MAAM,EAAS,MAAM,EAAO,CAAA,EAC5B,GAAI,GAAU,KAAM,OACpB,MAAM,EAAQ,MAAM,QAAQ,CAAA,EAAU,EAAS,CAAC,CAAA,EAChD,SAAW,CAAE,UAAA,EAAW,OAAA,CAAA,IAAY,EAC9B,GAAa,GAAU,OAAO,GAAW,UAC3C,EAAA,QAAK,kBAAkB,EAAK,EAAW,EAAQ,GAAM,EAAA,GAItD,EAAO,EAAA,QAAK,UAA6B,CAAA,EAC9C,EAAA,QAAK,GAAG,kBAAoB,GAAA,CAAa,EAAM,CAAA,EAAoB,GAIvE,IAAA,EAAe,EAAA"}
|
|
@@ -1,35 +1,29 @@
|
|
|
1
|
-
import { i as n } from "./chunk-
|
|
2
|
-
import
|
|
1
|
+
import { i as n } from "./chunk-language-B8sfGadQ.mjs";
|
|
2
|
+
import r from "i18next";
|
|
3
3
|
import g from "i18next-browser-languagedetector";
|
|
4
4
|
import { initReactI18next as w } from "react-i18next";
|
|
5
|
-
|
|
5
|
+
var m = {
|
|
6
6
|
show: "Show Sidebar",
|
|
7
7
|
hide: "Hide Sidebar"
|
|
8
|
-
}
|
|
9
|
-
var p = { layoutSwitcher: m };
|
|
10
|
-
const E = {
|
|
8
|
+
}, p = { layoutSwitcher: m }, v = {
|
|
11
9
|
en: "English",
|
|
12
10
|
zh: "Chinese",
|
|
13
11
|
fr: "French"
|
|
14
|
-
}
|
|
15
|
-
var A = { languageSwitcher: E };
|
|
16
|
-
const y = {
|
|
12
|
+
}, E = { languageSwitcher: v }, A = {
|
|
17
13
|
default: "Default",
|
|
18
14
|
ios: "iOS",
|
|
19
15
|
android: "Android",
|
|
20
16
|
windows: "Windows",
|
|
21
17
|
linux: "Linux"
|
|
22
|
-
},
|
|
18
|
+
}, y = {
|
|
23
19
|
theme: "Theme",
|
|
24
20
|
language: "Language",
|
|
25
21
|
layout: "Layout",
|
|
26
22
|
preferences: "Preferences"
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
-
const $ = {
|
|
23
|
+
}, _ = {
|
|
24
|
+
baseSwitcher: A,
|
|
25
|
+
preference: y
|
|
26
|
+
}, C = {
|
|
33
27
|
default: "Default",
|
|
34
28
|
light: "Light",
|
|
35
29
|
dark: "Dark",
|
|
@@ -39,20 +33,14 @@ const $ = {
|
|
|
39
33
|
coffee: "Coffee",
|
|
40
34
|
wine: "Wine",
|
|
41
35
|
wheat: "Wheat"
|
|
42
|
-
}
|
|
43
|
-
var b = { themeSwitcher: $ };
|
|
44
|
-
const v = {
|
|
36
|
+
}, $ = { themeSwitcher: C }, b = {
|
|
45
37
|
show: "Afficher la barre latérale",
|
|
46
38
|
hide: "Masquer la barre latérale"
|
|
47
|
-
}
|
|
48
|
-
var N = { layoutSwitcher: v };
|
|
49
|
-
const L = {
|
|
39
|
+
}, N = { layoutSwitcher: b }, L = {
|
|
50
40
|
en: "Anglais",
|
|
51
41
|
zh: "Chinois",
|
|
52
42
|
fr: "Français"
|
|
53
|
-
}
|
|
54
|
-
var P = { languageSwitcher: L };
|
|
55
|
-
const R = {
|
|
43
|
+
}, P = { languageSwitcher: L }, R = {
|
|
56
44
|
default: "Par défaut",
|
|
57
45
|
ios: "iOS",
|
|
58
46
|
android: "Android",
|
|
@@ -63,12 +51,10 @@ const R = {
|
|
|
63
51
|
language: "Langue",
|
|
64
52
|
layout: "Disposition",
|
|
65
53
|
preferences: "Préférences"
|
|
66
|
-
}
|
|
67
|
-
var M = {
|
|
54
|
+
}, M = {
|
|
68
55
|
baseSwitcher: R,
|
|
69
56
|
preference: x
|
|
70
|
-
}
|
|
71
|
-
const F = {
|
|
57
|
+
}, F = {
|
|
72
58
|
default: "Par défaut",
|
|
73
59
|
light: "Clair",
|
|
74
60
|
dark: "Sombre",
|
|
@@ -78,20 +64,14 @@ const F = {
|
|
|
78
64
|
coffee: "Coffee",
|
|
79
65
|
wine: "Vin",
|
|
80
66
|
wheat: "Blé"
|
|
81
|
-
}
|
|
82
|
-
var O = { themeSwitcher: F };
|
|
83
|
-
const k = {
|
|
67
|
+
}, O = { themeSwitcher: F }, k = {
|
|
84
68
|
show: "显示侧边栏",
|
|
85
69
|
hide: "隐藏侧边栏"
|
|
86
|
-
}
|
|
87
|
-
var D = { layoutSwitcher: k };
|
|
88
|
-
const U = {
|
|
70
|
+
}, D = { layoutSwitcher: k }, U = {
|
|
89
71
|
en: "英语",
|
|
90
72
|
zh: "中文",
|
|
91
73
|
fr: "法语"
|
|
92
|
-
}
|
|
93
|
-
var W = { languageSwitcher: U };
|
|
94
|
-
const z = {
|
|
74
|
+
}, W = { languageSwitcher: U }, z = {
|
|
95
75
|
default: "默认",
|
|
96
76
|
ios: "iOS",
|
|
97
77
|
android: "Android",
|
|
@@ -102,12 +82,10 @@ const z = {
|
|
|
102
82
|
language: "语言",
|
|
103
83
|
layout: "布局",
|
|
104
84
|
preferences: "偏好设置"
|
|
105
|
-
}
|
|
106
|
-
var T = {
|
|
85
|
+
}, T = {
|
|
107
86
|
baseSwitcher: z,
|
|
108
87
|
preference: B
|
|
109
|
-
}
|
|
110
|
-
const H = {
|
|
88
|
+
}, H = {
|
|
111
89
|
default: "默认",
|
|
112
90
|
light: "浅色",
|
|
113
91
|
dark: "深色",
|
|
@@ -117,9 +95,7 @@ const H = {
|
|
|
117
95
|
coffee: "咖啡",
|
|
118
96
|
wine: "酒红",
|
|
119
97
|
wheat: "麦田"
|
|
120
|
-
}
|
|
121
|
-
var X = { themeSwitcher: H };
|
|
122
|
-
const q = [
|
|
98
|
+
}, X = { themeSwitcher: H }, q = [
|
|
123
99
|
"theme",
|
|
124
100
|
"language",
|
|
125
101
|
"layout",
|
|
@@ -129,13 +105,12 @@ const q = [
|
|
|
129
105
|
language: "language",
|
|
130
106
|
layout: "layout",
|
|
131
107
|
preference: "preference"
|
|
132
|
-
}
|
|
133
|
-
var V = {
|
|
108
|
+
}, V = {
|
|
134
109
|
en: {
|
|
135
|
-
theme:
|
|
136
|
-
language:
|
|
110
|
+
theme: $,
|
|
111
|
+
language: E,
|
|
137
112
|
layout: p,
|
|
138
|
-
preference:
|
|
113
|
+
preference: _
|
|
139
114
|
},
|
|
140
115
|
zh: {
|
|
141
116
|
theme: X,
|
|
@@ -157,25 +132,25 @@ function Z() {
|
|
|
157
132
|
NAME_SPACES: [...q]
|
|
158
133
|
};
|
|
159
134
|
}
|
|
160
|
-
function Q(
|
|
161
|
-
const
|
|
135
|
+
function Q(i) {
|
|
136
|
+
const f = Z(), o = i.bundles, u = i.fallbackLng ?? n.ZH, d = [
|
|
162
137
|
n.EN,
|
|
163
138
|
n.ZH,
|
|
164
139
|
n.FR
|
|
165
140
|
].reduce((a, e) => ({
|
|
166
141
|
...a,
|
|
167
142
|
[e]: {
|
|
168
|
-
...
|
|
169
|
-
...
|
|
143
|
+
...f.RESOURCES[e] ?? {},
|
|
144
|
+
...o.RESOURCES[e] ?? {}
|
|
170
145
|
}
|
|
171
|
-
}), {}),
|
|
172
|
-
|
|
146
|
+
}), {}), c = [...o.NAME_SPACES, ...f.NAME_SPACES.filter((a) => !o.NAME_SPACES.includes(a))];
|
|
147
|
+
r.use(g).use(w).init({
|
|
173
148
|
compatibilityJSON: "v4",
|
|
174
149
|
resources: d,
|
|
175
|
-
lng:
|
|
176
|
-
fallbackLng:
|
|
177
|
-
ns:
|
|
178
|
-
defaultNS:
|
|
150
|
+
lng: u,
|
|
151
|
+
fallbackLng: u,
|
|
152
|
+
ns: c,
|
|
153
|
+
defaultNS: c[0],
|
|
179
154
|
interpolation: { escapeValue: !1 },
|
|
180
155
|
keySeparator: ".",
|
|
181
156
|
detection: { order: [
|
|
@@ -185,20 +160,20 @@ function Q(o) {
|
|
|
185
160
|
"subdomain"
|
|
186
161
|
] }
|
|
187
162
|
});
|
|
188
|
-
const
|
|
189
|
-
if (
|
|
163
|
+
const s = i.onLoadExtraBundles;
|
|
164
|
+
if (s) {
|
|
190
165
|
const a = async (e) => {
|
|
191
|
-
const
|
|
192
|
-
if (
|
|
193
|
-
const S = Array.isArray(
|
|
194
|
-
for (const { namespace: h, bundle:
|
|
166
|
+
const t = await s(e);
|
|
167
|
+
if (t == null) return;
|
|
168
|
+
const S = Array.isArray(t) ? t : [t];
|
|
169
|
+
for (const { namespace: h, bundle: l } of S) h && l && typeof l == "object" && r.addResourceBundle(e, h, l, !0, !0);
|
|
195
170
|
};
|
|
196
|
-
a(
|
|
171
|
+
a(r.language || u), r.on("languageChanged", (e) => {
|
|
197
172
|
a(e);
|
|
198
173
|
});
|
|
199
174
|
}
|
|
200
175
|
}
|
|
201
|
-
var Y =
|
|
176
|
+
var Y = r;
|
|
202
177
|
export {
|
|
203
178
|
Z as a,
|
|
204
179
|
I as i,
|
|
@@ -207,4 +182,4 @@ export {
|
|
|
207
182
|
Y as t
|
|
208
183
|
};
|
|
209
184
|
|
|
210
|
-
//# sourceMappingURL=chunk-i18n-
|
|
185
|
+
//# sourceMappingURL=chunk-i18n-BsyWvA9c.mjs.map
|