15 Commits

Author SHA1 Message Date
487f5f854e Updated version to 0.3.1 2023-11-16 02:42:04 +01:00
9f189a9a44 Patched shuffle function to copy array
The inline implementation of shuffle caused React not to detect
changes, because the reference didn't change. Copying the array
with slice(), thus changing the reference, fixed the issue.
2023-11-16 02:21:52 +01:00
69661a3b12 Changed version number to 0.3.0 2023-11-05 14:12:33 +01:00
175c6c6086 Made Bingo controls responsive 2023-11-05 14:11:10 +01:00
ddb7f41fd0 Switched active Bingo items to accent color 2023-11-05 13:45:55 +01:00
75d6ceacb0 Made Bingo resize with screen size 2023-11-05 13:26:41 +01:00
96e9a5c169 Introduced patch 0.2.1 2023-11-04 20:32:35 +01:00
00355452fc Increased size of slider text 2023-11-04 20:30:38 +01:00
61250e9c08 Added version number in navbar 2023-11-04 20:28:37 +01:00
e550d8eeb1 Upgraded to 0.2.0 2023-11-04 20:06:15 +01:00
7ccfe74c16 Added 2 more themes 2023-11-04 19:31:43 +01:00
992ec6128d Switched controls to secondary color 2023-11-04 19:25:31 +01:00
53209356b3 Increased z-index of theme dropdown 2023-11-04 19:16:56 +01:00
5093fbcb93 Changed layout to vertical 2023-11-04 19:16:25 +01:00
f51c5201e6 Implemented Bingo items as buttons 2023-11-04 19:15:20 +01:00
8 changed files with 16 additions and 13 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "buzzword-bingo", "name": "buzzword-bingo",
"version": "0.1.0", "version": "0.3.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "buzzword-bingo", "name": "buzzword-bingo",
"version": "0.1.0", "version": "0.3.1",
"dependencies": { "dependencies": {
"next": "14.0.1", "next": "14.0.1",
"react": "^18", "react": "^18",

View File

@@ -1,6 +1,6 @@
{ {
"name": "buzzword-bingo", "name": "buzzword-bingo",
"version": "0.1.0", "version": "0.3.1",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",

View File

@@ -13,7 +13,7 @@ export default function Bingo({size, items}: Props){
rows[i] = activeItems.slice(i * size, (i + 1) * size); rows[i] = activeItems.slice(i * size, (i + 1) * size);
} }
return( return(
<table className='w-1/2 table bg-primary text-primary-content m-auto'> <table className='w-1/2 table table-xs sm:table-sm md:table-md bg-primary text-primary-content m-auto'>
<tbody> <tbody>
{rows.map((item, index) => <BingoRow key={index} items={item}/>)} {rows.map((item, index) => <BingoRow key={index} items={item}/>)}
</tbody> </tbody>

View File

@@ -4,6 +4,7 @@ import React from 'react'
import Bingo from './bingo' import Bingo from './bingo'
function FisherYatesShuffle(array:string[]):string[]{ function FisherYatesShuffle(array:string[]):string[]{
array = array.slice();
for(let i = array.length - 1; i > 0; i--){ for(let i = array.length - 1; i > 0; i--){
const j = Math.floor(Math.random() * (i + 1)); const j = Math.floor(Math.random() * (i + 1));
const temp = array[i]; const temp = array[i];
@@ -20,16 +21,16 @@ export default function BingoController(){
const sizeError = (items.length < size); const sizeError = (items.length < size);
return( return(
<> <>
<div className="w-3/4 flex flex-row m-auto"> <div className="w-3/4 flex flex-col m-auto gap-4">
<Bingo size={size} items={items}/> <Bingo size={size} items={items}/>
<form className="w-1/3"> <form className="w-1/3 m-auto">
<input type="range" min={3} max={5} value={size} className="range range-primary" step={1} onChange={({target:{value:s}}) => setSize(+s)}/> <input type="range" min={3} max={5} value={size} className="range range-xs sm:range-sm md:range-md range-secondary" step={1} onChange={({target:{value:s}}) => setSize(+s)}/>
<div className="w-full flex justify-between text-xs px-2"> <div className="w-full flex justify-between text-sm px-2 mb-2">
<span>3x3</span> <span>3x3</span>
<span>4x4</span> <span>4x4</span>
<span>5x5</span> <span>5x5</span>
</div> </div>
<a className="btn btn-primary" onClick={() => setItems(FisherYatesShuffle(buzzwords))}>Regenerate</a> <a className="btn btn-xs sm:btn-sm md:btn-md btn-secondary" onClick={() => setItems(FisherYatesShuffle(buzzwords))}>Regenerate</a>
</form> </form>
</div> </div>
{sizeError && <div className="alert alert-warning"><svg xmlns="http://www.w3.org/2000/svg" className="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><span>Warning: Mismatch between item count and size</span></div>} {sizeError && <div className="alert alert-warning"><svg xmlns="http://www.w3.org/2000/svg" className="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><span>Warning: Mismatch between item count and size</span></div>}

View File

@@ -9,6 +9,6 @@ export default function BingoItem({text}: Props){
const [clicked, setClicked] = React.useState(false); const [clicked, setClicked] = React.useState(false);
return( return(
<td className={clsx("cursor-pointer", {"bg-primary-focus":clicked})} onClick={() => setClicked(!clicked)}>{text}</td> <td><a className={clsx("btn btn-xs sm:btn-sm md:btn-md w-full", {"btn-ghost":(!clicked)}, {"btn-accent":clicked})} onClick={() => setClicked(!clicked)}>{text}</a></td>
); );
} }

View File

@@ -8,12 +8,14 @@ export default function ThemeSwitcher(){
React.useEffect(() => {document.body.setAttribute("data-theme", theme)}); React.useEffect(() => {document.body.setAttribute("data-theme", theme)});
return( return(
<ul className="p-2 right-0 text-base-content"> <ul className="p-2 right-0 text-base-content z-10">
<li><a onClick={() => setTheme("light")}>Light</a></li> <li><a onClick={() => setTheme("light")}>Light</a></li>
<li><a onClick={() => setTheme("dark")}>Dark</a></li> <li><a onClick={() => setTheme("dark")}>Dark</a></li>
<li><a onClick={() => setTheme("synthwave")}>Synthwave</a></li> <li><a onClick={() => setTheme("synthwave")}>Synthwave</a></li>
<li><a onClick={() => setTheme("cyberpunk")}>Cyberpunk</a></li> <li><a onClick={() => setTheme("cyberpunk")}>Cyberpunk</a></li>
<li><a onClick={() => setTheme("valentine")}>Valentine</a></li> <li><a onClick={() => setTheme("valentine")}>Valentine</a></li>
<li><a onClick={() => setTheme("pastel")}>Pastel</a></li>
<li><a onClick={() => setTheme("aqua")}>Aqua</a></li>
</ul> </ul>
); );
} }

View File

@@ -6,7 +6,7 @@ export default function Home(){
<> <>
<div className="navbar bg-neutral text-neutral-content"> <div className="navbar bg-neutral text-neutral-content">
<div className="flex-1"> <div className="flex-1">
<b className="normal-case text-xl">Buzzword Bingo</b> <span><b className="normal-case text-xl">Buzzword Bingo</b><span className="text-xs ml-1">v{process.env.npm_package_version}</span></span>
</div> </div>
<div className="flex-none"> <div className="flex-none">
<ul className="menu menu-horizontal px-1"> <ul className="menu menu-horizontal px-1">

View File

@@ -7,7 +7,7 @@ const config: Config = {
}, },
plugins: [require("daisyui")], plugins: [require("daisyui")],
daisyui: { daisyui: {
themes: ["light", "dark", "synthwave", "cyberpunk", "valentine"] themes: ["light", "dark", "synthwave", "cyberpunk", "valentine", "pastel", "aqua"]
} }
}; };