{"version":3,"file":"static/chunks/372-ad4910867fe1c1eb.js","mappings":"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","sources":["webpack://_N_E/./components/moves/animations/animation-legend.tsx","webpack://_N_E/./components/moves/animations/apng-move-gif.tsx","webpack://_N_E/./components/moves/animations/move-gif.tsx","webpack://_N_E/./components/page-title.tsx","webpack://_N_E/./config/meta.ts","webpack://_N_E/./events/event-emitter.ts","webpack://_N_E/./models/move-type.ts"],"sourcesContent":["import { Accordion, AccordionItem } from '@nextui-org/accordion';\r\nimport { Chip } from '@nextui-org/chip';\r\nimport { FaCircleQuestion } from 'react-icons/fa6';\r\n\r\nexport default function AnimationLegend() {\r\n return (\r\n \r\n }\r\n key=\"1\"\r\n aria-label=\"Hitbox GIF legend\"\r\n title=\"Hitbox GIF Legend\"\r\n subtitle=\"Open this to learn more about what the hitbox colors mean\"\r\n >\r\n
\r\n
\r\n

Hitbox IDs

\r\n
\r\n \r\n id0\r\n \r\n \r\n id1\r\n \r\n \r\n id2\r\n \r\n \r\n id3\r\n \r\n
\r\n
\r\n
\r\n

Bone colors

\r\n
\r\n \r\n Normal\r\n \r\n \r\n Ungrabbable\r\n \r\n \r\n Intangible\r\n \r\n \r\n Invincible\r\n \r\n
\r\n
\r\n
\r\n

Character colors

\r\n
\r\n \r\n Auto Cancel Frame\r\n \r\n \r\n IASA\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Missing hitbox ids
\r\n
\r\n Sometimes it can appear that the move has multiple coloured hitboxes but is missing them in the table. The\r\n code for the colouring and the data itself missmatch sometimes. When this is the case,{' '}\r\n all hitboxes can be considered to have that data.\r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import eventEmitter from '@/events/event-emitter';\nimport { Button } from '@nextui-org/button';\nimport { Kbd } from '@nextui-org/kbd';\nimport parseAPNG from 'apng-js';\nimport Player from 'apng-js/types/library/player';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport AnimationLegend from './animation-legend';\n\nexport interface ApngMoveParams {\n url: string;\n}\n\nexport default function ApngMove(params: Readonly) {\n const canvasDivRef = useRef(null);\n const [loaded, setLoaded] = useState(false);\n const [player, setPlayer] = useState(null);\n const [url, setUrl] = useState(params.url);\n const [frameCounter, setFrameCounter] = useState(1);\n const [playing, setPlaying] = useState(false);\n const [totalFrames, setTotalFrames] = useState(0);\n\n const escFunction = useCallback(\n (event: KeyboardEvent) => {\n if (!player) {\n return;\n }\n if (event.key === ' ') {\n if (!playing) {\n player.pause();\n } else {\n player.play();\n }\n event.preventDefault();\n }\n if (event.key === 'ArrowRight') {\n nextFrame();\n }\n if (event.key === 'ArrowLeft') {\n previousFrame();\n }\n },\n [player],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', escFunction, false);\n\n return () => {\n document.removeEventListener('keydown', escFunction, false);\n };\n }, [escFunction]);\n\n useEffect(() => {\n const loadAPNG = async () => {\n if (url && url !== params.url) {\n setUrl(params.url);\n player?.removeAllListeners();\n setPlayer(null);\n canvasDivRef.current?.removeChild(canvasDivRef.current.firstChild as Node);\n setLoaded(false);\n } else if (!url) {\n setUrl(params.url);\n }\n\n if (loaded) {\n return;\n }\n setLoaded(true);\n const response = await fetch(url);\n const buffer = await response.arrayBuffer();\n const apng = await parseAPNG(buffer);\n\n if (apng instanceof Error) {\n console.error('Error parsing APNG:', apng);\n return;\n }\n setTotalFrames(apng.frames.length);\n if (!canvasDivRef || !canvasDivRef.current) {\n console.error('Canvas not found');\n return;\n }\n if (canvasDivRef.current.children.length > 0) {\n return;\n }\n const canvas = document.createElement('canvas');\n canvas.width = apng.width;\n canvas.height = apng.height;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n canvasDivRef.current.appendChild(canvas);\n const ctx = canvas.getContext('2d');\n\n const localPlayer = await apng.getPlayer(ctx!);\n localPlayer.playbackRate = 0.2;\n localPlayer.addListener('frame', (frameNumber: number) => {\n setFrameCounter(frameNumber + 1);\n });\n localPlayer.addListener('play', () => {\n setPlaying(true);\n });\n localPlayer.addListener('pause', () => {\n setPlaying(false);\n });\n localPlayer.play();\n setPlayer(localPlayer);\n };\n\n loadAPNG();\n }, [loaded]);\n\n useEffect(() => {\n const handleSeek = (frame: number): void => {\n if (!player) {\n return;\n }\n\n const targetFrame = frame;\n if (playing) {\n player.pause();\n }\n\n let framesPassed = 0;\n while (targetFrame - 1 != player.currentFrameNumber) {\n player.renderNextFrame();\n framesPassed++;\n\n // Safety measure to make sure we don't loop infinitely\n if (framesPassed > 200) {\n return;\n }\n }\n };\n\n eventEmitter.on('seek', handleSeek);\n\n // Clean up the event listener on component unmount\n return () => {\n eventEmitter.off('seek', handleSeek);\n };\n }, [player]);\n\n const previousFrame = () => {\n if (!player) {\n return;\n }\n\n if (playing) {\n player.pause();\n }\n\n const targetFrame = (player.currentFrameNumber + totalFrames - 1) % totalFrames;\n while (targetFrame != player.currentFrameNumber) {\n player.renderNextFrame();\n }\n };\n\n const nextFrame = () => {\n if (!player) {\n return;\n }\n\n if (playing) {\n player.pause();\n }\n player.renderNextFrame();\n };\n\n const pause = () => {\n if (!player) {\n return;\n }\n player.pause();\n };\n\n const play = () => {\n if (!player) {\n return;\n }\n player.play();\n };\n\n return (\n <>\n {!loaded || !player ? (\n
\n
\n
\n ) : (\n <>\n )}\n
\n\n
\n {playing ? (\n \n ) : (\n \n )}\n \n\n \n \n
\n \n \n );\n}\n","import { Move } from '@/models/move';\nimport { Button } from '@nextui-org/button';\nimport { Image } from '@nextui-org/image';\nimport { Kbd } from '@nextui-org/kbd';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport AnimationLegend from './animation-legend';\n\ninterface MoveGifParams {\n move: Move;\n characterName: string;\n}\n\nexport const MoveGif = (params: MoveGifParams) => {\n const imageRef = useRef(null);\n\n // Using any here due to the dynamic import.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [gifPlayer, setGifPlayer] = useState();\n const initialized = useRef(false);\n const [frameCounter, setFrameCounter] = useState(1);\n const [running, setRunning] = useState(true);\n\n const escFunction = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === ' ') {\n if (gifPlayer.isPlaying()) {\n pause();\n } else {\n play();\n }\n event.preventDefault();\n }\n if (event.key === 'ArrowRight') {\n nextFrame();\n }\n if (event.key === 'ArrowLeft') {\n previousFrame();\n }\n },\n [gifPlayer],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', escFunction, false);\n\n return () => {\n document.removeEventListener('keydown', escFunction, false);\n };\n }, [escFunction]);\n\n const initializeGifPlayer = useCallback(async () => {\n if (initialized.current) {\n return;\n }\n\n initialized.current = true;\n\n if (imageRef.current?.complete) {\n const SuperGif = (await import('@wizpanda/super-gif')).SuperGif;\n const superGif = new SuperGif(imageRef.current, {});\n superGif.load(() => {\n console.log('Initialized');\n });\n setGifPlayer(superGif);\n }\n }, []);\n\n setInterval(() => {\n setFrameCounter((gifPlayer?.getCurrentFrame() ?? 0) + 1);\n }, 100);\n\n useEffect(() => {\n if (!initialized.current && imageRef.current?.complete && !gifPlayer) {\n initializeGifPlayer();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const pause = () => {\n if (gifPlayer?.isPlaying()) {\n setRunning(false);\n gifPlayer.pause();\n }\n };\n const play = () => {\n if (gifPlayer && !gifPlayer.isPlaying()) {\n setRunning(true);\n gifPlayer.play();\n }\n };\n const nextFrame = () => {\n if (gifPlayer) {\n if (gifPlayer.isPlaying()) {\n gifPlayer.pause();\n }\n gifPlayer.stepFrame(1);\n }\n };\n\n const previousFrame = () => {\n if (gifPlayer) {\n if (gifPlayer.isPlaying()) {\n gifPlayer.pause();\n }\n\n if (gifPlayer.getCurrentFrame() === 0) {\n gifPlayer.moveTo(gifPlayer.getLength() - 1);\n } else {\n gifPlayer.stepFrame(-1);\n }\n }\n };\n\n return (\n <>\n
\n \n
\n\n
\n {running ? (\n \n ) : (\n \n )}\n \n\n \n \n
\n \n \n );\n};\n","interface PageTitleProps {\n title: string;\n}\n\nexport const PageTitle = ({ title }: PageTitleProps) => {\n return

{title}

;\n};\n","import { CharacterBase } from '@/models/character';\r\nimport { Move } from '@/models/move';\r\n\r\nexport const metaConfig = {\r\n tags: [\r\n 'Super Smash Bros. Melee',\r\n 'Melee frame data',\r\n 'hitbox data',\r\n 'move stats',\r\n 'Smash Bros',\r\n 'SSBM',\r\n 'FightCore',\r\n 'frame data',\r\n 'crouch cancel percentages',\r\n 'hitlag',\r\n 'hitstun',\r\n 'shieldstun',\r\n ],\r\n baseDescription: (middleSection: string) =>\r\n `Modern mobile-friendly frame data for ${middleSection} in Super Smash Bros Melee`,\r\n};\r\n\r\nexport function characterMetaDescription(character: CharacterBase): string {\r\n return metaConfig.baseDescription(`${character.name}`);\r\n}\r\n\r\nexport function moveMetaDescription(character: CharacterBase, move: Move): string {\r\n const moveSummary = createMoveSummary(move);\r\n const pageName = `${character.name} ${move.name}`;\r\n const siteDescription = metaConfig.baseDescription(pageName);\r\n\r\n return `${moveSummary} | ${siteDescription}`;\r\n}\r\n\r\nexport function crouchCancelMetaDescription(character: CharacterBase): string {\r\n return metaConfig.baseDescription(`${character.name} crouch cancel information`);\r\n}\r\n\r\nfunction createMoveSummary(move: Move): string {\r\n if (!move.start && !move.end) {\r\n return `Total Frames: ${move.totalFrames} ${move.notes}`;\r\n }\r\n\r\n let summary = '';\r\n if (move.start) {\r\n summary += `Start: ${move.start} `;\r\n }\r\n if (move.end) {\r\n summary += `End: ${move.end} `;\r\n }\r\n if (move.iasa && move.iasa > 0) {\r\n summary += `IASA: ${move.iasa} `;\r\n }\r\n if (move.totalFrames && move.totalFrames > 0) {\r\n summary += `Total Frames: ${move.totalFrames} `;\r\n }\r\n if (move.notes) {\r\n summary += move.notes;\r\n }\r\n\r\n return summary;\r\n}\r\n","import mitt from 'mitt';\r\n\r\ntype Events = {\r\n seek: number;\r\n};\r\n\r\nconst emitter = mitt();\r\n\r\nexport default emitter;\r\n","export enum MoveType {\r\n unknown = 0,\r\n tilt = 1,\r\n grounded = 2,\r\n air = 3,\r\n special = 4,\r\n dodge = 5,\r\n throw = 6,\r\n tech = 7,\r\n edgeAttack = 8,\r\n item = 9,\r\n kirbySpecial = 10,\r\n}\r\n"],"names":["AnimationLegend","Accordion","AccordionItem","startContent","FaCircleQuestion","aria-label","title","subtitle","div","className","h2","Chip","variant","radius","classNames","dot","base","strong","ApngMove","params","canvasDivRef","useRef","loaded","setLoaded","useState","player","setPlayer","url","setUrl","frameCounter","setFrameCounter","playing","setPlaying","totalFrames","setTotalFrames","escFunction","useCallback","event","key","play","pause","preventDefault","nextFrame","previousFrame","useEffect","document","addEventListener","removeEventListener","loadAPNG","removeAllListeners","current","removeChild","firstChild","response","fetch","buffer","arrayBuffer","apng","parseAPNG","Error","console","error","frames","length","children","canvas","createElement","width","height","style","appendChild","ctx","getContext","localPlayer","getPlayer","playbackRate","addListener","frameNumber","handleSeek","framesPassed","targetFrame","currentFrameNumber","renderNextFrame","eventEmitter","on","off","ref","Button","onPress","Kbd","keys","disableAnimation","disableRipple","MoveGif","imageRef","gifPlayer","setGifPlayer","initialized","running","setRunning","isPlaying","initializeGifPlayer","complete","superGif","SuperGif","load","log","setInterval","getCurrentFrame","stepFrame","moveTo","getLength","Image","src","move","gifUrl","onLoad","alt","name","character","PageTitle","h1","metaConfig","tags","baseDescription","middleSection","characterMetaDescription","moveMetaDescription","moveSummary","createMoveSummary","start","end","notes","summary","iasa","pageName","siteDescription","crouchCancelMetaDescription","mitt","emitter","MoveType"],"sourceRoot":"","ignoreList":[]}