hangman-react-game 1.0.6 → 1.0.7

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/README.md CHANGED
@@ -1,2 +1,2 @@
1
- # Hangman
2
- Simple hangman game that should be portable to a website
1
+ # Hangman
2
+ Simple hangman game that should be portable to a website
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as react from 'react';
2
2
 
3
- declare const Game: () => react_jsx_runtime.JSX.Element;
3
+ declare const Game: () => react.JSX.Element;
4
4
 
5
5
  declare const useGame: () => {
6
6
  newWord: () => void;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useGame.tsx","../src/components/Hangman.tsx","../src/components/Game.tsx"],"sourcesContent":["import {useEffect, useState} from \"react\";\r\n\r\nconst MAX_FAILED_ATTEMPTS = 10;\r\nconst wordDictionary = [\r\n \"apple\",\r\n \"banana\",\r\n \"cherry\",\r\n \"date\",\r\n \"elderberry\",\r\n \"fig\",\r\n \"grape\",\r\n \"honeydew\",\r\n \"kiwi\",\r\n \"lemon\",\r\n \"mango\",\r\n \"nectarine\",\r\n \"orange\",\r\n \"papaya\",\r\n \"quince\",\r\n \"raspberry\",\r\n \"strawberry\",\r\n \"tangerine\",\r\n \"ugli\",\r\n \"vanilla\",\r\n \"watermelon\",\r\n \"xigua\",\r\n \"yellow\",\r\n \"zucchini\",\r\n \"abstract\",\r\n \"breeze\",\r\n \"cactus\",\r\n \"dolphin\",\r\n \"eagle\",\r\n \"forest\",\r\n \"giraffe\",\r\n \"horizon\",\r\n \"island\",\r\n \"jungle\",\r\n \"kaleidoscope\",\r\n \"lighthouse\",\r\n \"mountain\",\r\n \"nebula\",\r\n \"ocean\",\r\n \"prairie\",\r\n \"quasar\",\r\n \"rainbow\",\r\n \"sunrise\",\r\n \"tornado\",\r\n \"universe\",\r\n \"volcano\",\r\n \"whale\",\r\n \"xerox\",\r\n \"yacht\",\r\n \"zephyr\",\r\n \"albatross\",\r\n \"butterfly\",\r\n \"chameleon\",\r\n \"dinosaur\",\r\n \"elephant\",\r\n \"flamingo\",\r\n \"gazelle\",\r\n \"hippopotamus\",\r\n \"iguana\",\r\n \"jellyfish\",\r\n \"kangaroo\",\r\n \"lion\",\r\n \"monkey\",\r\n \"narwhal\",\r\n \"octopus\",\r\n \"penguin\",\r\n \"quail\",\r\n \"rhinoceros\",\r\n \"squirrel\",\r\n \"turtle\",\r\n \"umbrella\",\r\n \"vulture\",\r\n \"walrus\",\r\n \"xylophone\",\r\n \"yak\",\r\n \"zebra\",\r\n \"astronomy\",\r\n \"biology\",\r\n \"chemistry\",\r\n \"democracy\",\r\n \"ecosystem\",\r\n \"fossil\",\r\n \"genetics\",\r\n \"hypothesis\",\r\n \"innovation\",\r\n \"jurisdiction\",\r\n \"kinetic\",\r\n \"laboratory\",\r\n \"meteorology\",\r\n \"neuroscience\",\r\n \"observation\",\r\n \"physics\",\r\n \"quantum\",\r\n \"robotics\",\r\n \"synthesis\",\r\n \"theorem\",\r\n \"unicorn\",\r\n \"velocity\",\r\n \"wavelength\",\r\n \"xenon\",\r\n \"youth\",\r\n \"zenith\",\r\n \"bamboozlement\",\r\n \"flabbergasted\",\r\n \"hypothetical\",\r\n \"juxtaposition\",\r\n \"labyrinthine\",\r\n \"nebulousness\",\r\n \"quintessential\",\r\n \"sesquipedalian\",\r\n \"transcendental\",\r\n \"unpredictable\",\r\n \"verisimilitude\",\r\n \"whippersnapper\",\r\n \"xenotransplant\",\r\n \"yesteryear\",\r\n \"zigzaggedness\"\r\n];\r\n\r\nconst useGame = () => {\r\n // Should fetch random word from a dictionary (maybe vary by language)\r\n const [word, setWord] = useState(\"\");\r\n const [guessedLetters, setGuessedLetters] = useState<string[]>([]);\r\n const [failedAttempts, setFailedAttempts] = useState<number>(0);\r\n const [hasEnded, setHasEnded] = useState(false);\r\n const [hasWon, setHasWon] = useState(false);\r\n\r\n const censorWord = (w: string) => w.split(\"\").map(x => (guessedLetters.includes(x) || x === \" \" ? x : \"_\") + \" \").join(\"\");\r\n const newWord = () => setWord( wordDictionary[Math.floor( Math.random() * wordDictionary.length )]);\r\n \r\n const guessLetter = async (letter : string) => {\r\n if(!hasEnded && letter.length === 1){\r\n if(!word.includes(letter)) \r\n setFailedAttempts(failedAttempts+1);\r\n setGuessedLetters([...guessedLetters, letter]);\r\n }\r\n }\r\n \r\n useEffect(()=> newWord(), [])\r\n useEffect(()=> {\r\n setGuessedLetters([]);\r\n setFailedAttempts(0);\r\n setHasEnded(false);\r\n setHasWon(false);\r\n }, [word]);\r\n \r\n useEffect(()=> {\r\n if(failedAttempts >= MAX_FAILED_ATTEMPTS)\r\n setHasEnded(true);\r\n }, [failedAttempts]);\r\n \r\n useEffect(()=> {\r\n if(word && !censorWord(word).includes(\"_\")) {\r\n setHasWon(true);\r\n setHasEnded(true);\r\n }\r\n }, [guessedLetters]);\r\n\r\n return {\r\n newWord,\r\n hasEnded,\r\n hasWon,\r\n failedAttempts,\r\n guessLetter,\r\n guessedLetters,\r\n word : hasEnded ? word : censorWord(word)\r\n };\r\n}\r\nexport default useGame;","import { ReactElement, useEffect } from \"react\";\r\n\r\ntype HangmanProps = {\r\n failedAttempts: number\r\n}\r\n\r\nconst Hangman = ({failedAttempts} : HangmanProps) => {\r\n useEffect(() => {}, [failedAttempts]);\r\n const hangmanParts : ReactElement[] = [\r\n // ROD\r\n <line x1=\"20\" y1=\"230\" x2=\"100\" y2=\"230\" stroke=\"black\" />,\r\n <line x1=\"60\" y1=\"20\" x2=\"60\" y2=\"230\" stroke=\"black\" />,\r\n <line x1=\"60\" y1=\"20\" x2=\"140\" y2=\"20\" stroke=\"black\" />,\r\n <line x1=\"140\" y1=\"20\" x2=\"140\" y2=\"50\" stroke=\"black\" />,\r\n // HEAD\r\n <circle cx=\"140\" cy=\"70\" r=\"20\" stroke=\"black\" />,\r\n // BODY\r\n <line x1=\"140\" y1=\"90\" x2=\"140\" y2=\"150\" stroke=\"black\" />,\r\n // ARMS\r\n <line x1=\"140\" y1=\"120\" x2=\"120\" y2=\"100\" stroke=\"black\" />,\r\n <line x1=\"140\" y1=\"120\" x2=\"160\" y2=\"100\" stroke=\"black\" />,\r\n // LEGS\r\n <line x1=\"140\" y1=\"150\" x2=\"120\" y2=\"180\" stroke=\"black\" />,\r\n <line x1=\"140\" y1=\"150\" x2=\"160\" y2=\"180\" stroke=\"black\" />\r\n ];\r\n return (\r\n <svg height=\"250\" width=\"200\">\r\n {hangmanParts.slice(0, failedAttempts)}\r\n </svg>\r\n )\r\n}\r\nexport default Hangman;","import useGame from \"../hooks/useGame\";\r\nimport Hangman from \"./Hangman\";\r\n\r\nconst Game = () => {\r\n const {\r\n newWord,\r\n hasEnded,\r\n hasWon,\r\n failedAttempts,\r\n guessLetter,\r\n guessedLetters,\r\n word \r\n } = useGame();\r\n return (\r\n <div>\r\n <h1>Hangman game</h1>\r\n <div className=\"word\">\r\n <p>{word}</p>\r\n </div>\r\n <div className=\"hangman-illustrtion\">\r\n <Hangman failedAttempts={failedAttempts} />\r\n </div>\r\n <div className=\"guessButtons\">\r\n {\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map(x => (\r\n <button key={x} onClick={() => guessLetter(x)} disabled={hasEnded || guessedLetters.includes(x)}>{x}</button>\r\n ))}\r\n </div>\r\n {hasEnded && (\r\n <div className=\"game-over\">\r\n {hasWon && (<h1>Yay, you won</h1>)}\r\n {!hasWon && (<h1>Too bad, you lose</h1>)}\r\n </div>\r\n )}\r\n <button onClick={newWord}>New word</button>\r\n </div>\r\n )\r\n};\r\nexport default Game;"],"mappings":";AAAA,SAAQ,WAAW,gBAAe;AAElC,IAAM,sBAAsB;AAC5B,IAAM,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,UAAU,MAAM;AAElB,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE;AACnC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAmB,CAAC,CAAC;AACjE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAiB,CAAC;AAC9D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAE1C,QAAM,aAAa,CAAC,MAAc,EAAE,MAAM,EAAE,EAAE,IAAI,QAAM,eAAe,SAAS,CAAC,KAAK,MAAM,MAAM,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE;AACzH,QAAM,UAAU,MAAM,QAAS,eAAe,KAAK,MAAO,KAAK,OAAO,IAAI,eAAe,MAAO,CAAC,CAAC;AAElG,QAAM,cAAc,OAAO,WAAoB;AAC3C,QAAG,CAAC,YAAY,OAAO,WAAW,GAAE;AAChC,UAAG,CAAC,KAAK,SAAS,MAAM;AACpB,0BAAkB,iBAAe,CAAC;AACtC,wBAAkB,CAAC,GAAG,gBAAgB,MAAM,CAAC;AAAA,IACjD;AAAA,EACJ;AAEA,YAAU,MAAK,QAAQ,GAAG,CAAC,CAAC;AAC5B,YAAU,MAAK;AACX,sBAAkB,CAAC,CAAC;AACpB,sBAAkB,CAAC;AACnB,gBAAY,KAAK;AACjB,cAAU,KAAK;AAAA,EACnB,GAAG,CAAC,IAAI,CAAC;AAET,YAAU,MAAK;AACX,QAAG,kBAAkB;AACjB,kBAAY,IAAI;AAAA,EACxB,GAAG,CAAC,cAAc,CAAC;AAEnB,YAAU,MAAK;AACX,QAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,SAAS,GAAG,GAAG;AACxC,gBAAU,IAAI;AACd,kBAAY,IAAI;AAAA,IACpB;AAAA,EACJ,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAO,WAAW,OAAO,WAAW,IAAI;AAAA,EAC5C;AACJ;AACA,IAAO,kBAAQ;;;AC5Kf,SAAuB,aAAAA,kBAAiB;AAUpC;AAJJ,IAAM,UAAU,CAAC,EAAC,eAAc,MAAqB;AACnD,EAAAA,WAAU,MAAM;AAAA,EAAC,GAAG,CAAC,cAAc,CAAC;AACpC,QAAM,eAAgC;AAAA;AAAA,IAEpC,oBAAC,UAAK,IAAG,MAAK,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,QAAO,SAAQ;AAAA,IACxD,oBAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,OAAM,QAAO,SAAQ;AAAA,IACtD,oBAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,OAAM,IAAG,MAAK,QAAO,SAAQ;AAAA,IACtD,oBAAC,UAAK,IAAG,OAAM,IAAG,MAAK,IAAG,OAAM,IAAG,MAAK,QAAO,SAAQ;AAAA;AAAA,IAEvD,oBAAC,YAAO,IAAG,OAAM,IAAG,MAAK,GAAE,MAAK,QAAO,SAAQ;AAAA;AAAA,IAE/C,oBAAC,UAAK,IAAG,OAAM,IAAG,MAAK,IAAG,OAAM,IAAG,OAAM,QAAO,SAAQ;AAAA;AAAA,IAExD,oBAAC,UAAK,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,QAAO,SAAQ;AAAA,IACzD,oBAAC,UAAK,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,QAAO,SAAQ;AAAA;AAAA,IAEzD,oBAAC,UAAK,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,QAAO,SAAQ;AAAA,IACzD,oBAAC,UAAK,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,IAAG,OAAM,QAAO,SAAQ;AAAA,EAC3D;AACA,SACI,oBAAC,SAAI,QAAO,OAAM,OAAM,OACrB,uBAAa,MAAM,GAAG,cAAc,GACzC;AAEJ;AACA,IAAO,kBAAQ;;;AChBH,gBAAAC,MAaI,YAbJ;AAZZ,IAAM,OAAO,MAAM;AACf,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI,gBAAQ;AACZ,SACI,qBAAC,SACG;AAAA,oBAAAA,KAAC,QAAG,0BAAY;AAAA,IAChB,gBAAAA,KAAC,SAAI,WAAU,QACX,0BAAAA,KAAC,OAAG,gBAAK,GACb;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAU,uBACX,0BAAAA,KAAC,mBAAQ,gBAAgC,GAC7C;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAU,gBACV,uCAA6B,MAAM,EAAE,EAAE,IAAI,OACxC,gBAAAA,KAAC,YAAe,SAAS,MAAM,YAAY,CAAC,GAAG,UAAU,YAAY,eAAe,SAAS,CAAC,GAAI,eAArF,CAAuF,CACvG,GACL;AAAA,IACC,YACG,qBAAC,SAAI,WAAU,aACV;AAAA,gBAAW,gBAAAA,KAAC,QAAG,0BAAY;AAAA,MAC3B,CAAC,UAAW,gBAAAA,KAAC,QAAG,+BAAiB;AAAA,OACtC;AAAA,IAEJ,gBAAAA,KAAC,YAAO,SAAS,SAAS,sBAAQ;AAAA,KACtC;AAER;AACA,IAAO,eAAQ;","names":["useEffect","jsx"]}
1
+ {"version":3,"sources":["../src/hooks/useGame.tsx","../src/components/Hangman.tsx","../src/components/Game.tsx"],"sourcesContent":["import {useEffect, useState} from \"react\";\n\nconst MAX_FAILED_ATTEMPTS = 10;\nconst wordDictionary = [\n \"apple\",\n \"banana\",\n \"cherry\",\n \"date\",\n \"elderberry\",\n \"fig\",\n \"grape\",\n \"honeydew\",\n \"kiwi\",\n \"lemon\",\n \"mango\",\n \"nectarine\",\n \"orange\",\n \"papaya\",\n \"quince\",\n \"raspberry\",\n \"strawberry\",\n \"tangerine\",\n \"ugli\",\n \"vanilla\",\n \"watermelon\",\n \"xigua\",\n \"yellow\",\n \"zucchini\",\n \"abstract\",\n \"breeze\",\n \"cactus\",\n \"dolphin\",\n \"eagle\",\n \"forest\",\n \"giraffe\",\n \"horizon\",\n \"island\",\n \"jungle\",\n \"kaleidoscope\",\n \"lighthouse\",\n \"mountain\",\n \"nebula\",\n \"ocean\",\n \"prairie\",\n \"quasar\",\n \"rainbow\",\n \"sunrise\",\n \"tornado\",\n \"universe\",\n \"volcano\",\n \"whale\",\n \"xerox\",\n \"yacht\",\n \"zephyr\",\n \"albatross\",\n \"butterfly\",\n \"chameleon\",\n \"dinosaur\",\n \"elephant\",\n \"flamingo\",\n \"gazelle\",\n \"hippopotamus\",\n \"iguana\",\n \"jellyfish\",\n \"kangaroo\",\n \"lion\",\n \"monkey\",\n \"narwhal\",\n \"octopus\",\n \"penguin\",\n \"quail\",\n \"rhinoceros\",\n \"squirrel\",\n \"turtle\",\n \"umbrella\",\n \"vulture\",\n \"walrus\",\n \"xylophone\",\n \"yak\",\n \"zebra\",\n \"astronomy\",\n \"biology\",\n \"chemistry\",\n \"democracy\",\n \"ecosystem\",\n \"fossil\",\n \"genetics\",\n \"hypothesis\",\n \"innovation\",\n \"jurisdiction\",\n \"kinetic\",\n \"laboratory\",\n \"meteorology\",\n \"neuroscience\",\n \"observation\",\n \"physics\",\n \"quantum\",\n \"robotics\",\n \"synthesis\",\n \"theorem\",\n \"unicorn\",\n \"velocity\",\n \"wavelength\",\n \"xenon\",\n \"youth\",\n \"zenith\",\n \"bamboozlement\",\n \"flabbergasted\",\n \"hypothetical\",\n \"juxtaposition\",\n \"labyrinthine\",\n \"nebulousness\",\n \"quintessential\",\n \"sesquipedalian\",\n \"transcendental\",\n \"unpredictable\",\n \"verisimilitude\",\n \"whippersnapper\",\n \"xenotransplant\",\n \"yesteryear\",\n \"zigzaggedness\"\n];\n\nconst useGame = () => {\n // Should fetch random word from a dictionary (maybe vary by language)\n const [word, setWord] = useState(\"\");\n const [guessedLetters, setGuessedLetters] = useState<string[]>([]);\n const [failedAttempts, setFailedAttempts] = useState<number>(0);\n const [hasEnded, setHasEnded] = useState(false);\n const [hasWon, setHasWon] = useState(false);\n\n const censorWord = (w: string) => w.split(\"\").map(x => (guessedLetters.includes(x) || x === \" \" ? x : \"_\") + \" \").join(\"\");\n const newWord = () => setWord( wordDictionary[Math.floor( Math.random() * wordDictionary.length )]);\n \n const guessLetter = async (letter : string) => {\n if(!hasEnded && letter.length === 1){\n if(!word.includes(letter)) \n setFailedAttempts(failedAttempts+1);\n setGuessedLetters([...guessedLetters, letter]);\n }\n }\n \n useEffect(()=> newWord(), [])\n useEffect(()=> {\n setGuessedLetters([]);\n setFailedAttempts(0);\n setHasEnded(false);\n setHasWon(false);\n }, [word]);\n \n useEffect(()=> {\n if(failedAttempts >= MAX_FAILED_ATTEMPTS)\n setHasEnded(true);\n }, [failedAttempts]);\n \n useEffect(()=> {\n if(word && !censorWord(word).includes(\"_\")) {\n setHasWon(true);\n setHasEnded(true);\n }\n }, [guessedLetters]);\n\n return {\n newWord,\n hasEnded,\n hasWon,\n failedAttempts,\n guessLetter,\n guessedLetters,\n word : hasEnded ? word : censorWord(word)\n };\n}\nexport default useGame;","import { ReactElement, useEffect } from \"react\";\n\ntype HangmanProps = {\n failedAttempts: number\n}\n\nconst Hangman = ({failedAttempts} : HangmanProps) => {\n useEffect(() => {}, [failedAttempts]);\n const hangmanParts : ReactElement[] = [\n // ROD\n <line x1=\"20\" y1=\"230\" x2=\"100\" y2=\"230\" stroke=\"black\" />,\n <line x1=\"60\" y1=\"20\" x2=\"60\" y2=\"230\" stroke=\"black\" />,\n <line x1=\"60\" y1=\"20\" x2=\"140\" y2=\"20\" stroke=\"black\" />,\n <line x1=\"140\" y1=\"20\" x2=\"140\" y2=\"50\" stroke=\"black\" />,\n // HEAD\n <circle cx=\"140\" cy=\"70\" r=\"20\" stroke=\"black\" />,\n // BODY\n <line x1=\"140\" y1=\"90\" x2=\"140\" y2=\"150\" stroke=\"black\" />,\n // ARMS\n <line x1=\"140\" y1=\"120\" x2=\"120\" y2=\"100\" stroke=\"black\" />,\n <line x1=\"140\" y1=\"120\" x2=\"160\" y2=\"100\" stroke=\"black\" />,\n // LEGS\n <line x1=\"140\" y1=\"150\" x2=\"120\" y2=\"180\" stroke=\"black\" />,\n <line x1=\"140\" y1=\"150\" x2=\"160\" y2=\"180\" stroke=\"black\" />\n ];\n return (\n <svg height=\"250\" width=\"200\">\n {hangmanParts.slice(0, failedAttempts)}\n </svg>\n )\n}\nexport default Hangman;","import useGame from \"../hooks/useGame\";\nimport Hangman from \"./Hangman\";\n\nconst Game = () => {\n const {\n newWord,\n hasEnded,\n hasWon,\n failedAttempts,\n guessLetter,\n guessedLetters,\n word \n } = useGame();\n return (\n <div>\n <h1>Hangman game</h1>\n <div className=\"word\">\n <p>{word}</p>\n </div>\n <div className=\"hangman-illustrtion\">\n <Hangman failedAttempts={failedAttempts} />\n </div>\n <div className=\"guessButtons\">\n {\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map(x => (\n <button key={x} onClick={() => guessLetter(x)} disabled={hasEnded || guessedLetters.includes(x)}>{x}</button>\n ))}\n </div>\n {hasEnded && (\n <div className=\"game-over\">\n {hasWon && (<h1>Yay, you won</h1>)}\n {!hasWon && (<h1>Too bad, you lose</h1>)}\n </div>\n )}\n <button onClick={newWord}>New word</button>\n </div>\n )\n};\nexport default Game;"],"mappings":";AAAA,SAAQ,WAAW,gBAAe;AAElC,IAAM,sBAAsB;AAC5B,IAAM,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;A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","names":["useEffect","jsx"]}
package/package.json CHANGED
@@ -1,32 +1,32 @@
1
- {
2
- "name": "hangman-react-game",
3
- "version": "1.0.6",
4
- "type": "module",
5
- "module": "dist/index.js",
6
- "types": "dist/types/index.d.ts",
7
- "exports": {
8
- ".": {
9
- "import": "./dist/index.js",
10
- "types": "./dist/types/index.d.ts"
11
- }
12
- },
13
- "files": [
14
- "dist"
15
- ],
16
- "scripts": {
17
- "build": "tsup"
18
- },
19
- "peerDependencies": {
20
- "react": "^19.0.0",
21
- "react-dom": "^19.0.0"
22
- },
23
- "devDependencies": {
24
- "@types/react": "^19.1.13",
25
- "@types/react-dom": "^19.1.9",
26
- "rollup": "^3.29.0",
27
- "tsup": "^8.5.0",
28
- "typescript": "^5.9.2"
29
- },
30
- "author": "Isak Hølleland",
31
- "license": "MIT"
32
- }
1
+ {
2
+ "name": "hangman-react-game",
3
+ "version": "1.0.7",
4
+ "type": "module",
5
+ "module": "dist/index.js",
6
+ "types": "dist/types/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/types/index.d.ts"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsup"
18
+ },
19
+ "peerDependencies": {
20
+ "react": "^19.0.0",
21
+ "react-dom": "^19.0.0"
22
+ },
23
+ "devDependencies": {
24
+ "@types/react": "^19.1.13",
25
+ "@types/react-dom": "^19.1.9",
26
+ "rollup": "^3.29.0",
27
+ "tsup": "^8.5.0",
28
+ "typescript": "^5.9.2"
29
+ },
30
+ "author": "Isak Hølleland",
31
+ "license": "MIT"
32
+ }