@jonelhatwell/arcade-games 1.0.2 → 1.2.16

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/index.cjs CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ MemoryGame: () => memorygame_default,
23
24
  SpaceDodger: () => spacedodger_default
24
25
  });
25
26
  module.exports = __toCommonJS(index_exports);
@@ -237,8 +238,190 @@ var SpaceDodger = () => {
237
238
  ] });
238
239
  };
239
240
  var spacedodger_default = SpaceDodger;
241
+
242
+ // src/components/games/memorygame/index.tsx
243
+ var import_react2 = require("react");
244
+ var import_jsx_runtime3 = require("react/jsx-runtime");
245
+ var config2 = {
246
+ canvasSize: { width: 450, height: 450 },
247
+ baseHideTime: 3e3,
248
+ numberRadius: 30
249
+ };
250
+ var MemoryGame = () => {
251
+ const canvasRef = (0, import_react2.useRef)(null);
252
+ const [level, setLevel] = (0, import_react2.useState)(1);
253
+ const [gameOver, setGameOver] = (0, import_react2.useState)(false);
254
+ const [message, setMessage] = (0, import_react2.useState)("");
255
+ const [showOverlay, setShowOverlay] = (0, import_react2.useState)({
256
+ visible: false,
257
+ text: ""
258
+ });
259
+ const gameStateRef = (0, import_react2.useRef)({
260
+ numbers: [],
261
+ sequence: [],
262
+ currentIndex: 0,
263
+ level: 1,
264
+ showNumbers: true,
265
+ phase: "memorize",
266
+ revealed: /* @__PURE__ */ new Set()
267
+ });
268
+ const getNumberCount = (lvl) => Math.min(4 + lvl, 9);
269
+ const getHideTime = (lvl) => Math.max(500, config2.baseHideTime - Math.floor((lvl - 1) / 1) * 500);
270
+ const generateNumbers = (lvl) => {
271
+ const count = getNumberCount(lvl);
272
+ const numbers = [];
273
+ const sequence = [];
274
+ const padding = config2.numberRadius * 2.5;
275
+ for (let i = 0; i < count; i++) {
276
+ let x, y, overlap;
277
+ let attempts = 0;
278
+ do {
279
+ overlap = false;
280
+ x = padding + Math.random() * (config2.canvasSize.width - padding * 2);
281
+ y = padding + Math.random() * (config2.canvasSize.height - padding * 2);
282
+ for (const num of numbers) {
283
+ const dx = x - num.x;
284
+ const dy = y - num.y;
285
+ if (Math.sqrt(dx * dx + dy * dy) < config2.numberRadius * 2.5) {
286
+ overlap = true;
287
+ break;
288
+ }
289
+ }
290
+ attempts++;
291
+ } while (overlap && attempts < 100);
292
+ numbers.push({ x, y, value: i + 1, radius: config2.numberRadius });
293
+ sequence.push(i + 1);
294
+ }
295
+ return { numbers, sequence };
296
+ };
297
+ const startLevel = (lvl) => {
298
+ const { numbers, sequence } = generateNumbers(lvl);
299
+ gameStateRef.current = {
300
+ numbers,
301
+ sequence,
302
+ currentIndex: 0,
303
+ level: lvl,
304
+ showNumbers: true,
305
+ phase: "memorize",
306
+ revealed: /* @__PURE__ */ new Set()
307
+ };
308
+ setMessage("Memorize the sequence!");
309
+ setTimeout(() => {
310
+ gameStateRef.current.showNumbers = false;
311
+ gameStateRef.current.phase = "recall";
312
+ setMessage("Click the numbers in order!");
313
+ }, getHideTime(lvl));
314
+ };
315
+ const resetGame = () => {
316
+ setLevel(1);
317
+ setGameOver(false);
318
+ setShowOverlay({ visible: false, text: "" });
319
+ startLevel(1);
320
+ };
321
+ const handleCanvasClick = (e) => {
322
+ if (gameOver || gameStateRef.current.phase !== "recall") return;
323
+ const canvas = canvasRef.current;
324
+ if (!canvas) return;
325
+ const rect = canvas.getBoundingClientRect();
326
+ const x = e.clientX - rect.left;
327
+ const y = e.clientY - rect.top;
328
+ const state = gameStateRef.current;
329
+ for (const num of state.numbers) {
330
+ const distance = Math.hypot(x - num.x, y - num.y);
331
+ if (distance <= num.radius) {
332
+ const expected = state.sequence[state.currentIndex];
333
+ if (num.value === expected) {
334
+ state.revealed.add(num.value);
335
+ state.currentIndex++;
336
+ if (state.currentIndex === state.sequence.length) {
337
+ const nextLevel = level + 1;
338
+ setLevel(nextLevel);
339
+ state.phase = "transition";
340
+ setShowOverlay({ visible: true, text: `Get Ready! Level ${nextLevel}` });
341
+ setTimeout(() => {
342
+ setShowOverlay({ visible: false, text: "" });
343
+ startLevel(nextLevel);
344
+ }, 1500);
345
+ }
346
+ } else {
347
+ setGameOver(true);
348
+ setMessage(`Wrong! Clicked ${num.value}, expected ${expected}`);
349
+ }
350
+ break;
351
+ }
352
+ }
353
+ };
354
+ (0, import_react2.useEffect)(() => startLevel(1), []);
355
+ (0, import_react2.useEffect)(() => {
356
+ const canvas = canvasRef.current;
357
+ if (!canvas) return;
358
+ const ctx = canvas.getContext("2d");
359
+ if (!ctx) return;
360
+ let animationId;
361
+ const draw = () => {
362
+ const state = gameStateRef.current;
363
+ ctx.fillStyle = "#000";
364
+ ctx.fillRect(0, 0, config2.canvasSize.width, config2.canvasSize.height);
365
+ state.numbers.forEach((num, idx) => {
366
+ const isNext = state.phase === "recall" && level === 1 && idx === state.currentIndex;
367
+ ctx.fillStyle = isNext ? "#22c55e" : "#3b82f6";
368
+ ctx.beginPath();
369
+ ctx.arc(num.x, num.y, num.radius, 0, Math.PI * 2);
370
+ ctx.fill();
371
+ if (state.showNumbers || state.phase === "transition" || state.revealed.has(num.value)) {
372
+ ctx.fillStyle = "#fff";
373
+ ctx.font = "bold 24px sans-serif";
374
+ ctx.textAlign = "center";
375
+ ctx.textBaseline = "middle";
376
+ ctx.fillText(num.value.toString(), num.x, num.y);
377
+ }
378
+ });
379
+ if (!gameOver) animationId = requestAnimationFrame(draw);
380
+ };
381
+ draw();
382
+ return () => cancelAnimationFrame(animationId);
383
+ }, [gameOver, level]);
384
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "relative flex flex-col items-center gap-4 p-4", children: [
385
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex gap-8 text-xl font-bold", children: [
386
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
387
+ "Level: ",
388
+ level
389
+ ] }),
390
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { children: [
391
+ "Numbers: ",
392
+ getNumberCount(level)
393
+ ] })
394
+ ] }),
395
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "text-lg font-semibold text-blue-400 h-6", children: message }),
396
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
397
+ "canvas",
398
+ {
399
+ ref: canvasRef,
400
+ width: config2.canvasSize.width,
401
+ height: config2.canvasSize.height,
402
+ className: "border-2 border-gray-300 cursor-pointer",
403
+ onClick: handleCanvasClick
404
+ }
405
+ ),
406
+ gameOver && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/60", children: [
407
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "text-xl font-bold text-red-500 mb-2", children: "Game Over" }),
408
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "text-lg text-white mb-4", children: [
409
+ "Reached Level ",
410
+ level
411
+ ] }),
412
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { onClick: resetGame, children: "Play Again" })
413
+ ] }),
414
+ showOverlay.visible && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/60", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "text-2xl font-bold text-yellow-400", children: showOverlay.text }) }),
415
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "text-sm text-center text-foreground max-w-md", children: [
416
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { children: "Memorize the numbers, then click them in sequence (1, 2, 3...)" }),
417
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mt-1 text-xs text-gray-400", children: "Green circle = next number to click (level 1 only)" })
418
+ ] })
419
+ ] });
420
+ };
421
+ var memorygame_default = MemoryGame;
240
422
  // Annotate the CommonJS export names for ESM import in node:
241
423
  0 && (module.exports = {
424
+ MemoryGame,
242
425
  SpaceDodger
243
426
  });
244
427
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/games/spacedodger/index.tsx","../src/components/ui/button.tsx","../src/lib/utils.ts"],"sourcesContent":["import \"./index.css\";\r\nexport { default as SpaceDodger } from \"./components/games/spacedodger\";","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Button } from '@/components/ui/button';\r\n\r\ninterface Position {\r\n x: number;\r\n y: number;\r\n}\r\n\r\ninterface Enemy extends Position {\r\n radius: number;\r\n}\r\n\r\ninterface Player extends Position {\r\n width: number;\r\n height: number;\r\n}\r\n\r\ninterface SpaceDodgerState {\r\n player: Player;\r\n enemies: Enemy[];\r\n frame: number;\r\n keys: Record<string, boolean>;\r\n}\r\n\r\n\r\nconst config = {\r\n canvasSize : { \r\n width: 450, \r\n height: 450 \r\n },\r\n player: { x: 200, y: 350, width: 25, height: 50 }\r\n}\r\n\r\nconst SpaceDodger: React.FC = () => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const scoreRef = useRef(0);\r\n const lastBatchScoreRef = useRef(0);\r\n\r\n const [score, setScore] = useState(0);\r\n const [gameOver, setGameOver] = useState(false);\r\n\r\n const gameStateRef = useRef<SpaceDodgerState>({\r\n player: config.player,\r\n enemies: [],\r\n frame: 0,\r\n keys: {}\r\n });\r\n\r\n const resetGame = () => {\r\n gameStateRef.current = {\r\n player: config.player,\r\n enemies: [],\r\n frame: 0,\r\n keys: {}\r\n };\r\n scoreRef.current = 0;\r\n lastBatchScoreRef.current = 0;\r\n setScore(0);\r\n setGameOver(false);\r\n };\r\n\r\n\r\n \r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const state = gameStateRef.current;\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n state.keys[e.key] = true;\r\n };\r\n const handleKeyUp = (e: KeyboardEvent) => {\r\n state.keys[e.key] = false;\r\n };\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n window.addEventListener('keyup', handleKeyUp);\r\n\r\n const randomRadius = () => 10 + Math.random() * 15;\r\n\r\n const getEnemySpeed = () => {\r\n const base = 3;\r\n const increase = Math.floor(scoreRef.current / 20) * 0.5;\r\n return base + increase;\r\n };\r\n\r\n let animationId: number;\r\n\r\n const gameLoop = () => {\r\n if (gameOver) return;\r\n\r\n state.frame++;\r\n\r\n ctx.fillStyle = '#000';\r\n ctx.fillRect(0, 0, config.canvasSize.width, config.canvasSize.height);\r\n\r\n // Player movement\r\n if (state.keys['ArrowLeft'] && state.player.x > 0) state.player.x -= 5;\r\n if (state.keys['ArrowRight'] && state.player.x < config.canvasSize.width - state.player.width) state.player.x += 5;\r\n if (state.keys['ArrowUp'] && state.player.y > 0) state.player.y -= 5;\r\n if (state.keys['ArrowDown'] && state.player.y < config.canvasSize.height - state.player.height) state.player.y += 5;\r\n\r\n // Draw player\r\n ctx.fillStyle = '#0ea5e9';\r\n ctx.fillRect(\r\n state.player.x,\r\n state.player.y,\r\n state.player.width,\r\n state.player.height\r\n );\r\n\r\n // Normal enemy spawn\r\n if (state.frame % 40 === 0) {\r\n const radius = randomRadius();\r\n state.enemies.push({\r\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\r\n y: -radius,\r\n radius,\r\n });\r\n }\r\n\r\n // Extra batch every 20 score\r\n if (\r\n scoreRef.current > 0 &&\r\n scoreRef.current % 20 === 0 &&\r\n lastBatchScoreRef.current !== scoreRef.current\r\n ) {\r\n lastBatchScoreRef.current = scoreRef.current;\r\n const batchCount = 2 + Math.floor(Math.random() * 3);\r\n\r\n for (let i = 0; i < batchCount; i++) {\r\n const radius = randomRadius();\r\n state.enemies.push({\r\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\r\n y: -Math.random() * 100,\r\n radius\r\n });\r\n }\r\n }\r\n\r\n // Enemies update\r\n state.enemies = state.enemies.filter(enemy => {\r\n enemy.y += getEnemySpeed();\r\n\r\n // Draw enemy (circle)\r\n ctx.fillStyle = '#ef4444';\r\n ctx.beginPath();\r\n ctx.arc(enemy.x, enemy.y, enemy.radius, 0, Math.PI * 2);\r\n ctx.fill();\r\n\r\n // Circle vs rectangle collision\r\n const closestX = Math.max(\r\n state.player.x,\r\n Math.min(enemy.x, state.player.x + state.player.width)\r\n );\r\n const closestY = Math.max(\r\n state.player.y,\r\n Math.min(enemy.y, state.player.y + state.player.height)\r\n );\r\n\r\n const dx = enemy.x - closestX;\r\n const dy = enemy.y - closestY;\r\n\r\n if (dx * dx + dy * dy < enemy.radius * enemy.radius) {\r\n setGameOver(true);\r\n return false;\r\n }\r\n\r\n // Passed screen\r\n if (enemy.y - enemy.radius > config.canvasSize.height) {\r\n setScore(s => {\r\n scoreRef.current = s + 1;\r\n return s + 1;\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n animationId = requestAnimationFrame(gameLoop);\r\n };\r\n\r\n gameLoop();\r\n\r\n return () => {\r\n cancelAnimationFrame(animationId);\r\n window.removeEventListener('keydown', handleKeyDown);\r\n window.removeEventListener('keyup', handleKeyUp);\r\n };\r\n }, [gameOver]);\r\n\r\n return (\r\n <div className=\"relative flex flex-col items-center gap-4 p-4\">\r\n <div className=\"text-xl font-bold\">Score: {score}</div>\r\n <canvas\r\n ref={canvasRef}\r\n width={config.canvasSize.width}\r\n height={config.canvasSize.height}\r\n className=\"border-2 border-gray-300\"\r\n />\r\n\r\n {gameOver && (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\r\n <p className=\"text-xl font-bold text-red-500 mb-3\">Game Over</p>\r\n <Button onClick={resetGame}>Play Again</Button>\r\n </div>\r\n )}\r\n\r\n <div className=\"text-sm text-foreground\">Use arrow keys to move</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SpaceDodger;","import * as React from \"react\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n \"icon-sm\": \"size-8\",\r\n \"icon-lg\": \"size-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n data-variant={variant}\r\n data-size={size}\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}"],"mappings":"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","names":["import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/games/spacedodger/index.tsx","../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/games/memorygame/index.tsx"],"sourcesContent":["import \"./index.css\";\nexport { default as SpaceDodger } from \"./components/games/spacedodger\";\nexport { default as MemoryGame } from \"./components/games/memorygame\";","import React, { useEffect, useRef, useState } from 'react';\nimport { Button } from '@/components/ui/button';\n\ninterface Position {\n x: number;\n y: number;\n}\n\ninterface Enemy extends Position {\n radius: number;\n}\n\ninterface Player extends Position {\n width: number;\n height: number;\n}\n\ninterface SpaceDodgerState {\n player: Player;\n enemies: Enemy[];\n frame: number;\n keys: Record<string, boolean>;\n}\n\n\nconst config = {\n canvasSize : { \n width: 450, \n height: 450 \n },\n player: { x: 200, y: 350, width: 25, height: 50 }\n}\n\nconst SpaceDodger: React.FC = () => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const scoreRef = useRef(0);\n const lastBatchScoreRef = useRef(0);\n\n const [score, setScore] = useState(0);\n const [gameOver, setGameOver] = useState(false);\n\n const gameStateRef = useRef<SpaceDodgerState>({\n player: config.player,\n enemies: [],\n frame: 0,\n keys: {}\n });\n\n const resetGame = () => {\n gameStateRef.current = {\n player: config.player,\n enemies: [],\n frame: 0,\n keys: {}\n };\n scoreRef.current = 0;\n lastBatchScoreRef.current = 0;\n setScore(0);\n setGameOver(false);\n };\n\n\n \n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const state = gameStateRef.current;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n state.keys[e.key] = true;\n };\n const handleKeyUp = (e: KeyboardEvent) => {\n state.keys[e.key] = false;\n };\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n const randomRadius = () => 10 + Math.random() * 15;\n\n const getEnemySpeed = () => {\n const base = 3;\n const increase = Math.floor(scoreRef.current / 20) * 0.5;\n return base + increase;\n };\n\n let animationId: number;\n\n const gameLoop = () => {\n if (gameOver) return;\n\n state.frame++;\n\n ctx.fillStyle = '#000';\n ctx.fillRect(0, 0, config.canvasSize.width, config.canvasSize.height);\n\n // Player movement\n if (state.keys['ArrowLeft'] && state.player.x > 0) state.player.x -= 5;\n if (state.keys['ArrowRight'] && state.player.x < config.canvasSize.width - state.player.width) state.player.x += 5;\n if (state.keys['ArrowUp'] && state.player.y > 0) state.player.y -= 5;\n if (state.keys['ArrowDown'] && state.player.y < config.canvasSize.height - state.player.height) state.player.y += 5;\n\n // Draw player\n ctx.fillStyle = '#0ea5e9';\n ctx.fillRect(\n state.player.x,\n state.player.y,\n state.player.width,\n state.player.height\n );\n\n // Normal enemy spawn\n if (state.frame % 40 === 0) {\n const radius = randomRadius();\n state.enemies.push({\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\n y: -radius,\n radius,\n });\n }\n\n // Extra batch every 20 score\n if (\n scoreRef.current > 0 &&\n scoreRef.current % 20 === 0 &&\n lastBatchScoreRef.current !== scoreRef.current\n ) {\n lastBatchScoreRef.current = scoreRef.current;\n const batchCount = 2 + Math.floor(Math.random() * 3);\n\n for (let i = 0; i < batchCount; i++) {\n const radius = randomRadius();\n state.enemies.push({\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\n y: -Math.random() * 100,\n radius\n });\n }\n }\n\n // Enemies update\n state.enemies = state.enemies.filter(enemy => {\n enemy.y += getEnemySpeed();\n\n // Draw enemy (circle)\n ctx.fillStyle = '#ef4444';\n ctx.beginPath();\n ctx.arc(enemy.x, enemy.y, enemy.radius, 0, Math.PI * 2);\n ctx.fill();\n\n // Circle vs rectangle collision\n const closestX = Math.max(\n state.player.x,\n Math.min(enemy.x, state.player.x + state.player.width)\n );\n const closestY = Math.max(\n state.player.y,\n Math.min(enemy.y, state.player.y + state.player.height)\n );\n\n const dx = enemy.x - closestX;\n const dy = enemy.y - closestY;\n\n if (dx * dx + dy * dy < enemy.radius * enemy.radius) {\n setGameOver(true);\n return false;\n }\n\n // Passed screen\n if (enemy.y - enemy.radius > config.canvasSize.height) {\n setScore(s => {\n scoreRef.current = s + 1;\n return s + 1;\n });\n return false;\n }\n\n return true;\n });\n\n animationId = requestAnimationFrame(gameLoop);\n };\n\n gameLoop();\n\n return () => {\n cancelAnimationFrame(animationId);\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [gameOver]);\n\n return (\n <div className=\"relative flex flex-col items-center gap-4 p-4\">\n <div className=\"text-xl font-bold\">Score: {score}</div>\n <canvas\n ref={canvasRef}\n width={config.canvasSize.width}\n height={config.canvasSize.height}\n className=\"border-2 border-gray-300\"\n />\n\n {gameOver && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\n <p className=\"text-xl font-bold text-red-500 mb-3\">Game Over</p>\n <Button onClick={resetGame}>Play Again</Button>\n </div>\n )}\n\n <div className=\"text-sm text-foreground\">Use arrow keys to move</div>\n </div>\n );\n};\n\nexport default SpaceDodger;","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","import React, { useEffect, useRef, useState } from 'react';\nimport { Button } from '@/components/ui/button';\n\ninterface NumberItem {\n x: number;\n y: number;\n value: number;\n radius: number;\n}\n\ntype GamePhase = 'memorize' | 'recall' | 'transition';\n\ninterface GameState {\n numbers: NumberItem[];\n sequence: number[];\n currentIndex: number;\n level: number;\n showNumbers: boolean;\n phase: GamePhase;\n revealed: Set<number>;\n}\n\nconst config = {\n canvasSize: { width: 450, height: 450 },\n baseHideTime: 3000,\n numberRadius: 30,\n};\n\nconst MemoryGame: React.FC = () => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [level, setLevel] = useState(1);\n const [gameOver, setGameOver] = useState(false);\n const [message, setMessage] = useState('');\n const [showOverlay, setShowOverlay] = useState<{ visible: boolean; text: string }>({\n visible: false,\n text: '',\n });\n const gameStateRef = useRef<GameState>({\n numbers: [],\n sequence: [],\n currentIndex: 0,\n level: 1,\n showNumbers: true,\n phase: 'memorize',\n revealed: new Set(),\n });\n\n // Max numbers = 9\n const getNumberCount = (lvl: number) => Math.min(4 + lvl, 9);\n\n // Hide time decreases as level increases, min 500ms\n const getHideTime = (lvl: number) =>\n Math.max(500, config.baseHideTime - Math.floor((lvl - 1) / 1) * 500);\n\n const generateNumbers = (lvl: number) => {\n const count = getNumberCount(lvl);\n const numbers: NumberItem[] = [];\n const sequence: number[] = [];\n const padding = config.numberRadius * 2.5;\n\n for (let i = 0; i < count; i++) {\n let x: number, y: number, overlap: boolean;\n let attempts = 0;\n\n do {\n overlap = false;\n x = padding + Math.random() * (config.canvasSize.width - padding * 2);\n y = padding + Math.random() * (config.canvasSize.height - padding * 2);\n\n for (const num of numbers) {\n const dx = x - num.x;\n const dy = y - num.y;\n if (Math.sqrt(dx * dx + dy * dy) < config.numberRadius * 2.5) {\n overlap = true;\n break;\n }\n }\n attempts++;\n } while (overlap && attempts < 100);\n\n numbers.push({ x, y, value: i + 1, radius: config.numberRadius });\n sequence.push(i + 1);\n }\n\n return { numbers, sequence };\n };\n\n const startLevel = (lvl: number) => {\n const { numbers, sequence } = generateNumbers(lvl);\n gameStateRef.current = {\n numbers,\n sequence,\n currentIndex: 0,\n level: lvl,\n showNumbers: true,\n phase: 'memorize',\n revealed: new Set(),\n };\n setMessage('Memorize the sequence!');\n\n setTimeout(() => {\n gameStateRef.current.showNumbers = false;\n gameStateRef.current.phase = 'recall';\n setMessage('Click the numbers in order!');\n }, getHideTime(lvl));\n };\n\n const resetGame = () => {\n setLevel(1);\n setGameOver(false);\n setShowOverlay({ visible: false, text: '' });\n startLevel(1);\n };\n\n const handleCanvasClick = (e: React.MouseEvent<HTMLCanvasElement>) => {\n if (gameOver || gameStateRef.current.phase !== 'recall') return;\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const rect = canvas.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const state = gameStateRef.current;\n\n for (const num of state.numbers) {\n const distance = Math.hypot(x - num.x, y - num.y);\n if (distance <= num.radius) {\n const expected = state.sequence[state.currentIndex];\n if (num.value === expected) {\n state.revealed.add(num.value);\n state.currentIndex++;\n\n if (state.currentIndex === state.sequence.length) {\n const nextLevel = level + 1;\n setLevel(nextLevel);\n state.phase = 'transition';\n setShowOverlay({ visible: true, text: `Get Ready! Level ${nextLevel}` });\n\n setTimeout(() => {\n setShowOverlay({ visible: false, text: '' });\n startLevel(nextLevel);\n }, 1500);\n }\n } else {\n setGameOver(true);\n setMessage(`Wrong! Clicked ${num.value}, expected ${expected}`);\n }\n break;\n }\n }\n };\n\n useEffect(() => startLevel(1), []);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n let animationId: number;\n\n const draw = () => {\n const state = gameStateRef.current;\n ctx.fillStyle = '#000';\n ctx.fillRect(0, 0, config.canvasSize.width, config.canvasSize.height);\n\n state.numbers.forEach((num, idx) => {\n // Show green hint only in level 1\n const isNext = state.phase === 'recall' && level === 1 && idx === state.currentIndex;\n ctx.fillStyle = isNext ? '#22c55e' : '#3b82f6';\n ctx.beginPath();\n ctx.arc(num.x, num.y, num.radius, 0, Math.PI * 2);\n ctx.fill();\n\n // Reveal numbers if memorizing, transitioning, or already correctly guessed\n if (state.showNumbers || state.phase === 'transition' || state.revealed.has(num.value)) {\n ctx.fillStyle = '#fff';\n ctx.font = 'bold 24px sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(num.value.toString(), num.x, num.y);\n }\n });\n\n if (!gameOver) animationId = requestAnimationFrame(draw);\n };\n\n draw();\n return () => cancelAnimationFrame(animationId);\n }, [gameOver, level]);\n\n return (\n <div className=\"relative flex flex-col items-center gap-4 p-4\">\n <div className=\"flex gap-8 text-xl font-bold\">\n <div>Level: {level}</div>\n <div>Numbers: {getNumberCount(level)}</div>\n </div>\n <div className=\"text-lg font-semibold text-blue-400 h-6\">{message}</div>\n <canvas\n ref={canvasRef}\n width={config.canvasSize.width}\n height={config.canvasSize.height}\n className=\"border-2 border-gray-300 cursor-pointer\"\n onClick={handleCanvasClick}\n />\n {gameOver && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\n <p className=\"text-xl font-bold text-red-500 mb-2\">Game Over</p>\n <p className=\"text-lg text-white mb-4\">Reached Level {level}</p>\n <Button onClick={resetGame}>Play Again</Button>\n </div>\n )}\n\n {showOverlay.visible && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\n <p className=\"text-2xl font-bold text-yellow-400\">{showOverlay.text}</p>\n </div>\n )}\n\n <div className=\"text-sm text-center text-foreground max-w-md\">\n <div>Memorize the numbers, then click them in sequence (1, 2, 3...)</div>\n <div className=\"mt-1 text-xs text-gray-400\">Green circle = next number to click (level 1 only)</div>\n </div>\n </div>\n );\n};\n\nexport default MemoryGame;\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","config"]}
package/dist/index.css CHANGED
@@ -22,15 +22,24 @@
22
22
  "Courier New",
23
23
  monospace;
24
24
  --color-red-500: oklch(63.7% 0.237 25.331);
25
+ --color-yellow-400: oklch(85.2% 0.199 91.936);
26
+ --color-blue-400: oklch(70.7% 0.165 254.624);
25
27
  --color-gray-300: oklch(87.2% 0.01 258.338);
26
- --color-gray-600: oklch(44.6% 0.03 256.802);
28
+ --color-gray-400: oklch(70.7% 0.022 261.325);
27
29
  --color-black: #000;
28
30
  --color-white: #fff;
29
31
  --spacing: 0.25rem;
32
+ --container-md: 28rem;
33
+ --text-xs: 0.75rem;
34
+ --text-xs--line-height: calc(1 / 0.75);
30
35
  --text-sm: 0.875rem;
31
36
  --text-sm--line-height: calc(1.25 / 0.875);
37
+ --text-lg: 1.125rem;
38
+ --text-lg--line-height: calc(1.75 / 1.125);
32
39
  --text-xl: 1.25rem;
33
40
  --text-xl--line-height: calc(1.75 / 1.25);
41
+ --text-2xl: 1.5rem;
42
+ --text-2xl--line-height: calc(2 / 1.5);
34
43
  --font-weight-medium: 500;
35
44
  --font-weight-semibold: 600;
36
45
  --font-weight-bold: 700;
@@ -234,6 +243,9 @@
234
243
  container-type: inline-size;
235
244
  container-name: card-header;
236
245
  }
246
+ .visible {
247
+ visibility: visible;
248
+ }
237
249
  .absolute {
238
250
  position: absolute;
239
251
  }
@@ -252,12 +264,18 @@
252
264
  .row-start-1 {
253
265
  grid-row-start: 1;
254
266
  }
267
+ .mt-1 {
268
+ margin-top: calc(var(--spacing) * 1);
269
+ }
255
270
  .mb-2 {
256
271
  margin-bottom: calc(var(--spacing) * 2);
257
272
  }
258
273
  .mb-3 {
259
274
  margin-bottom: calc(var(--spacing) * 3);
260
275
  }
276
+ .mb-4 {
277
+ margin-bottom: calc(var(--spacing) * 4);
278
+ }
261
279
  .flex {
262
280
  display: flex;
263
281
  }
@@ -279,6 +297,9 @@
279
297
  width: calc(var(--spacing) * 10);
280
298
  height: calc(var(--spacing) * 10);
281
299
  }
300
+ .h-6 {
301
+ height: calc(var(--spacing) * 6);
302
+ }
282
303
  .h-8 {
283
304
  height: calc(var(--spacing) * 8);
284
305
  }
@@ -288,12 +309,15 @@
288
309
  .h-10 {
289
310
  height: calc(var(--spacing) * 10);
290
311
  }
291
- .w-full {
292
- width: 100%;
312
+ .max-w-md {
313
+ max-width: var(--container-md);
293
314
  }
294
315
  .shrink-0 {
295
316
  flex-shrink: 0;
296
317
  }
318
+ .cursor-pointer {
319
+ cursor: pointer;
320
+ }
297
321
  .auto-rows-min {
298
322
  grid-auto-rows: min-content;
299
323
  }
@@ -324,6 +348,9 @@
324
348
  .gap-6 {
325
349
  gap: calc(var(--spacing) * 6);
326
350
  }
351
+ .gap-8 {
352
+ gap: calc(var(--spacing) * 8);
353
+ }
327
354
  .self-start {
328
355
  align-self: flex-start;
329
356
  }
@@ -347,18 +374,9 @@
347
374
  .border-gray-300 {
348
375
  border-color: var(--color-gray-300);
349
376
  }
350
- .border-red-500 {
351
- border-color: var(--color-red-500);
352
- }
353
377
  .bg-background {
354
378
  background-color: var(--background);
355
379
  }
356
- .bg-black\/50 {
357
- background-color: color-mix(in srgb, #000 50%, transparent);
358
- @supports (color: color-mix(in lab, red, red)) {
359
- background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
360
- }
361
- }
362
380
  .bg-black\/60 {
363
381
  background-color: color-mix(in srgb, #000 60%, transparent);
364
382
  @supports (color: color-mix(in lab, red, red)) {
@@ -395,6 +413,17 @@
395
413
  .py-6 {
396
414
  padding-block: calc(var(--spacing) * 6);
397
415
  }
416
+ .text-center {
417
+ text-align: center;
418
+ }
419
+ .text-2xl {
420
+ font-size: var(--text-2xl);
421
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
422
+ }
423
+ .text-lg {
424
+ font-size: var(--text-lg);
425
+ line-height: var(--tw-leading, var(--text-lg--line-height));
426
+ }
398
427
  .text-sm {
399
428
  font-size: var(--text-sm);
400
429
  line-height: var(--tw-leading, var(--text-sm--line-height));
@@ -403,6 +432,10 @@
403
432
  font-size: var(--text-xl);
404
433
  line-height: var(--tw-leading, var(--text-xl--line-height));
405
434
  }
435
+ .text-xs {
436
+ font-size: var(--text-xs);
437
+ line-height: var(--tw-leading, var(--text-xs--line-height));
438
+ }
406
439
  .leading-none {
407
440
  --tw-leading: 1;
408
441
  line-height: 1;
@@ -422,14 +455,17 @@
422
455
  .whitespace-nowrap {
423
456
  white-space: nowrap;
424
457
  }
458
+ .text-blue-400 {
459
+ color: var(--color-blue-400);
460
+ }
425
461
  .text-card-foreground {
426
462
  color: var(--card-foreground);
427
463
  }
428
464
  .text-foreground {
429
465
  color: var(--foreground);
430
466
  }
431
- .text-gray-600 {
432
- color: var(--color-gray-600);
467
+ .text-gray-400 {
468
+ color: var(--color-gray-400);
433
469
  }
434
470
  .text-muted-foreground {
435
471
  color: var(--muted-foreground);
@@ -449,6 +485,9 @@
449
485
  .text-white {
450
486
  color: var(--color-white);
451
487
  }
488
+ .text-yellow-400 {
489
+ color: var(--color-yellow-400);
490
+ }
452
491
  .underline-offset-4 {
453
492
  text-underline-offset: 4px;
454
493
  }
@@ -474,6 +513,34 @@
474
513
  outline-style: var(--tw-outline-style);
475
514
  outline-width: 1px;
476
515
  }
516
+ .transition {
517
+ transition-property:
518
+ color,
519
+ background-color,
520
+ border-color,
521
+ outline-color,
522
+ text-decoration-color,
523
+ fill,
524
+ stroke,
525
+ --tw-gradient-from,
526
+ --tw-gradient-via,
527
+ --tw-gradient-to,
528
+ opacity,
529
+ box-shadow,
530
+ transform,
531
+ translate,
532
+ scale,
533
+ rotate,
534
+ filter,
535
+ -webkit-backdrop-filter,
536
+ backdrop-filter,
537
+ display,
538
+ content-visibility,
539
+ overlay,
540
+ pointer-events;
541
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
542
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
543
+ }
477
544
  .transition-all {
478
545
  transition-property: all;
479
546
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.css"],"sourcesContent":["/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container\\/card-header {\n container-type: inline-size;\n container-name: card-header;\n }\n .absolute {\n position: absolute;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .col-start-2 {\n grid-column-start: 2;\n }\n .row-span-2 {\n grid-row: span 2 / span 2;\n }\n .row-start-1 {\n grid-row-start: 1;\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .inline-flex {\n display: inline-flex;\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .w-full {\n width: 100%;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .auto-rows-min {\n grid-auto-rows: min-content;\n }\n .grid-rows-\\[auto_auto\\] {\n grid-template-rows: auto auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-center {\n justify-content: center;\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .self-start {\n align-self: flex-start;\n }\n .justify-self-end {\n justify-self: flex-end;\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-gray-300 {\n border-color: var(--color-gray-300);\n }\n .border-red-500 {\n border-color: var(--color-red-500);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-black\\/60 {\n background-color: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-card-foreground {\n color: var(--card-foreground);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\] {\n &:has(*[data-slot=\"card-action\"]) {\n grid-template-columns: 1fr auto;\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\.border-b\\]\\:pb-6 {\n &:is(.border-b) {\n padding-bottom: calc(var(--spacing) * 6);\n }\n }\n .\\[\\.border-t\\]\\:pt-6 {\n &:is(.border-t) {\n padding-top: calc(var(--spacing) * 6);\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --destructive-foreground: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --radius: 0.625rem;\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n.dark {\n --background: oklch(0.145 0 0);\n --foreground: oklch(0.985 0 0);\n --card: oklch(0.145 0 0);\n --card-foreground: oklch(0.985 0 0);\n --popover: oklch(0.145 0 0);\n --popover-foreground: oklch(0.985 0 0);\n --primary: oklch(0.985 0 0);\n --primary-foreground: oklch(0.205 0 0);\n --secondary: oklch(0.269 0 0);\n --secondary-foreground: oklch(0.985 0 0);\n --muted: oklch(0.269 0 0);\n --muted-foreground: oklch(0.708 0 0);\n --accent: oklch(0.269 0 0);\n --accent-foreground: oklch(0.985 0 0);\n --destructive: oklch(0.396 0.141 25.723);\n --destructive-foreground: oklch(0.637 0.237 25.331);\n --border: oklch(0.269 0 0);\n --input: oklch(0.269 0 0);\n --ring: oklch(0.439 0 0);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.205 0 0);\n --sidebar-foreground: oklch(0.985 0 0);\n --sidebar-primary: oklch(0.488 0.243 264.376);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.269 0 0);\n --sidebar-accent-foreground: oklch(0.985 0 0);\n --sidebar-border: oklch(0.269 0 0);\n --sidebar-ring: oklch(0.439 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n body {\n background-color: var(--background);\n color: var(--foreground);\n }\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.css"],"sourcesContent":["/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-md: 28rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .\\@container\\/card-header {\n container-type: inline-size;\n container-name: card-header;\n }\n .visible {\n visibility: visible;\n }\n .absolute {\n position: absolute;\n }\n .relative {\n position: relative;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .col-start-2 {\n grid-column-start: 2;\n }\n .row-span-2 {\n grid-row: span 2 / span 2;\n }\n .row-start-1 {\n grid-row-start: 1;\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .inline-flex {\n display: inline-flex;\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .auto-rows-min {\n grid-auto-rows: min-content;\n }\n .grid-rows-\\[auto_auto\\] {\n grid-template-rows: auto auto;\n }\n .flex-col {\n flex-direction: column;\n }\n .items-center {\n align-items: center;\n }\n .items-start {\n align-items: flex-start;\n }\n .justify-center {\n justify-content: center;\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .self-start {\n align-self: flex-start;\n }\n .justify-self-end {\n justify-self: flex-end;\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-gray-300 {\n border-color: var(--color-gray-300);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/60 {\n background-color: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n }\n .bg-card {\n background-color: var(--card);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .text-center {\n text-align: center;\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-blue-400 {\n color: var(--color-blue-400);\n }\n .text-card-foreground {\n color: var(--card-foreground);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-yellow-400 {\n color: var(--color-yellow-400);\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\] {\n &:has(*[data-slot=\"card-action\"]) {\n grid-template-columns: 1fr auto;\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\.border-b\\]\\:pb-6 {\n &:is(.border-b) {\n padding-bottom: calc(var(--spacing) * 6);\n }\n }\n .\\[\\.border-t\\]\\:pt-6 {\n &:is(.border-t) {\n padding-top: calc(var(--spacing) * 6);\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --destructive-foreground: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --radius: 0.625rem;\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n.dark {\n --background: oklch(0.145 0 0);\n --foreground: oklch(0.985 0 0);\n --card: oklch(0.145 0 0);\n --card-foreground: oklch(0.985 0 0);\n --popover: oklch(0.145 0 0);\n --popover-foreground: oklch(0.985 0 0);\n --primary: oklch(0.985 0 0);\n --primary-foreground: oklch(0.205 0 0);\n --secondary: oklch(0.269 0 0);\n --secondary-foreground: oklch(0.985 0 0);\n --muted: oklch(0.269 0 0);\n --muted-foreground: oklch(0.708 0 0);\n --accent: oklch(0.269 0 0);\n --accent-foreground: oklch(0.985 0 0);\n --destructive: oklch(0.396 0.141 25.723);\n --destructive-foreground: oklch(0.637 0.237 25.331);\n --border: oklch(0.269 0 0);\n --input: oklch(0.269 0 0);\n --ring: oklch(0.439 0 0);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.205 0 0);\n --sidebar-foreground: oklch(0.985 0 0);\n --sidebar-primary: oklch(0.488 0.243 264.376);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.269 0 0);\n --sidebar-accent-foreground: oklch(0.985 0 0);\n --sidebar-border: oklch(0.269 0 0);\n --sidebar-ring: oklch(0.439 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n body {\n background-color: var(--background);\n color: var(--foreground);\n }\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}"],"mappings":"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","names":[]}
package/dist/index.d.cts CHANGED
@@ -2,4 +2,6 @@ import React from 'react';
2
2
 
3
3
  declare const SpaceDodger: React.FC;
4
4
 
5
- export { SpaceDodger };
5
+ declare const MemoryGame: React.FC;
6
+
7
+ export { MemoryGame, SpaceDodger };
package/dist/index.d.ts CHANGED
@@ -2,4 +2,6 @@ import React from 'react';
2
2
 
3
3
  declare const SpaceDodger: React.FC;
4
4
 
5
- export { SpaceDodger };
5
+ declare const MemoryGame: React.FC;
6
+
7
+ export { MemoryGame, SpaceDodger };
package/dist/index.js CHANGED
@@ -211,7 +211,189 @@ var SpaceDodger = () => {
211
211
  ] });
212
212
  };
213
213
  var spacedodger_default = SpaceDodger;
214
+
215
+ // src/components/games/memorygame/index.tsx
216
+ import { useEffect as useEffect2, useRef as useRef2, useState as useState2 } from "react";
217
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
218
+ var config2 = {
219
+ canvasSize: { width: 450, height: 450 },
220
+ baseHideTime: 3e3,
221
+ numberRadius: 30
222
+ };
223
+ var MemoryGame = () => {
224
+ const canvasRef = useRef2(null);
225
+ const [level, setLevel] = useState2(1);
226
+ const [gameOver, setGameOver] = useState2(false);
227
+ const [message, setMessage] = useState2("");
228
+ const [showOverlay, setShowOverlay] = useState2({
229
+ visible: false,
230
+ text: ""
231
+ });
232
+ const gameStateRef = useRef2({
233
+ numbers: [],
234
+ sequence: [],
235
+ currentIndex: 0,
236
+ level: 1,
237
+ showNumbers: true,
238
+ phase: "memorize",
239
+ revealed: /* @__PURE__ */ new Set()
240
+ });
241
+ const getNumberCount = (lvl) => Math.min(4 + lvl, 9);
242
+ const getHideTime = (lvl) => Math.max(500, config2.baseHideTime - Math.floor((lvl - 1) / 1) * 500);
243
+ const generateNumbers = (lvl) => {
244
+ const count = getNumberCount(lvl);
245
+ const numbers = [];
246
+ const sequence = [];
247
+ const padding = config2.numberRadius * 2.5;
248
+ for (let i = 0; i < count; i++) {
249
+ let x, y, overlap;
250
+ let attempts = 0;
251
+ do {
252
+ overlap = false;
253
+ x = padding + Math.random() * (config2.canvasSize.width - padding * 2);
254
+ y = padding + Math.random() * (config2.canvasSize.height - padding * 2);
255
+ for (const num of numbers) {
256
+ const dx = x - num.x;
257
+ const dy = y - num.y;
258
+ if (Math.sqrt(dx * dx + dy * dy) < config2.numberRadius * 2.5) {
259
+ overlap = true;
260
+ break;
261
+ }
262
+ }
263
+ attempts++;
264
+ } while (overlap && attempts < 100);
265
+ numbers.push({ x, y, value: i + 1, radius: config2.numberRadius });
266
+ sequence.push(i + 1);
267
+ }
268
+ return { numbers, sequence };
269
+ };
270
+ const startLevel = (lvl) => {
271
+ const { numbers, sequence } = generateNumbers(lvl);
272
+ gameStateRef.current = {
273
+ numbers,
274
+ sequence,
275
+ currentIndex: 0,
276
+ level: lvl,
277
+ showNumbers: true,
278
+ phase: "memorize",
279
+ revealed: /* @__PURE__ */ new Set()
280
+ };
281
+ setMessage("Memorize the sequence!");
282
+ setTimeout(() => {
283
+ gameStateRef.current.showNumbers = false;
284
+ gameStateRef.current.phase = "recall";
285
+ setMessage("Click the numbers in order!");
286
+ }, getHideTime(lvl));
287
+ };
288
+ const resetGame = () => {
289
+ setLevel(1);
290
+ setGameOver(false);
291
+ setShowOverlay({ visible: false, text: "" });
292
+ startLevel(1);
293
+ };
294
+ const handleCanvasClick = (e) => {
295
+ if (gameOver || gameStateRef.current.phase !== "recall") return;
296
+ const canvas = canvasRef.current;
297
+ if (!canvas) return;
298
+ const rect = canvas.getBoundingClientRect();
299
+ const x = e.clientX - rect.left;
300
+ const y = e.clientY - rect.top;
301
+ const state = gameStateRef.current;
302
+ for (const num of state.numbers) {
303
+ const distance = Math.hypot(x - num.x, y - num.y);
304
+ if (distance <= num.radius) {
305
+ const expected = state.sequence[state.currentIndex];
306
+ if (num.value === expected) {
307
+ state.revealed.add(num.value);
308
+ state.currentIndex++;
309
+ if (state.currentIndex === state.sequence.length) {
310
+ const nextLevel = level + 1;
311
+ setLevel(nextLevel);
312
+ state.phase = "transition";
313
+ setShowOverlay({ visible: true, text: `Get Ready! Level ${nextLevel}` });
314
+ setTimeout(() => {
315
+ setShowOverlay({ visible: false, text: "" });
316
+ startLevel(nextLevel);
317
+ }, 1500);
318
+ }
319
+ } else {
320
+ setGameOver(true);
321
+ setMessage(`Wrong! Clicked ${num.value}, expected ${expected}`);
322
+ }
323
+ break;
324
+ }
325
+ }
326
+ };
327
+ useEffect2(() => startLevel(1), []);
328
+ useEffect2(() => {
329
+ const canvas = canvasRef.current;
330
+ if (!canvas) return;
331
+ const ctx = canvas.getContext("2d");
332
+ if (!ctx) return;
333
+ let animationId;
334
+ const draw = () => {
335
+ const state = gameStateRef.current;
336
+ ctx.fillStyle = "#000";
337
+ ctx.fillRect(0, 0, config2.canvasSize.width, config2.canvasSize.height);
338
+ state.numbers.forEach((num, idx) => {
339
+ const isNext = state.phase === "recall" && level === 1 && idx === state.currentIndex;
340
+ ctx.fillStyle = isNext ? "#22c55e" : "#3b82f6";
341
+ ctx.beginPath();
342
+ ctx.arc(num.x, num.y, num.radius, 0, Math.PI * 2);
343
+ ctx.fill();
344
+ if (state.showNumbers || state.phase === "transition" || state.revealed.has(num.value)) {
345
+ ctx.fillStyle = "#fff";
346
+ ctx.font = "bold 24px sans-serif";
347
+ ctx.textAlign = "center";
348
+ ctx.textBaseline = "middle";
349
+ ctx.fillText(num.value.toString(), num.x, num.y);
350
+ }
351
+ });
352
+ if (!gameOver) animationId = requestAnimationFrame(draw);
353
+ };
354
+ draw();
355
+ return () => cancelAnimationFrame(animationId);
356
+ }, [gameOver, level]);
357
+ return /* @__PURE__ */ jsxs2("div", { className: "relative flex flex-col items-center gap-4 p-4", children: [
358
+ /* @__PURE__ */ jsxs2("div", { className: "flex gap-8 text-xl font-bold", children: [
359
+ /* @__PURE__ */ jsxs2("div", { children: [
360
+ "Level: ",
361
+ level
362
+ ] }),
363
+ /* @__PURE__ */ jsxs2("div", { children: [
364
+ "Numbers: ",
365
+ getNumberCount(level)
366
+ ] })
367
+ ] }),
368
+ /* @__PURE__ */ jsx3("div", { className: "text-lg font-semibold text-blue-400 h-6", children: message }),
369
+ /* @__PURE__ */ jsx3(
370
+ "canvas",
371
+ {
372
+ ref: canvasRef,
373
+ width: config2.canvasSize.width,
374
+ height: config2.canvasSize.height,
375
+ className: "border-2 border-gray-300 cursor-pointer",
376
+ onClick: handleCanvasClick
377
+ }
378
+ ),
379
+ gameOver && /* @__PURE__ */ jsxs2("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/60", children: [
380
+ /* @__PURE__ */ jsx3("p", { className: "text-xl font-bold text-red-500 mb-2", children: "Game Over" }),
381
+ /* @__PURE__ */ jsxs2("p", { className: "text-lg text-white mb-4", children: [
382
+ "Reached Level ",
383
+ level
384
+ ] }),
385
+ /* @__PURE__ */ jsx3(Button, { onClick: resetGame, children: "Play Again" })
386
+ ] }),
387
+ showOverlay.visible && /* @__PURE__ */ jsx3("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/60", children: /* @__PURE__ */ jsx3("p", { className: "text-2xl font-bold text-yellow-400", children: showOverlay.text }) }),
388
+ /* @__PURE__ */ jsxs2("div", { className: "text-sm text-center text-foreground max-w-md", children: [
389
+ /* @__PURE__ */ jsx3("div", { children: "Memorize the numbers, then click them in sequence (1, 2, 3...)" }),
390
+ /* @__PURE__ */ jsx3("div", { className: "mt-1 text-xs text-gray-400", children: "Green circle = next number to click (level 1 only)" })
391
+ ] })
392
+ ] });
393
+ };
394
+ var memorygame_default = MemoryGame;
214
395
  export {
396
+ memorygame_default as MemoryGame,
215
397
  spacedodger_default as SpaceDodger
216
398
  };
217
399
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/games/spacedodger/index.tsx","../src/components/ui/button.tsx","../src/lib/utils.ts"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\r\nimport { Button } from '@/components/ui/button';\r\n\r\ninterface Position {\r\n x: number;\r\n y: number;\r\n}\r\n\r\ninterface Enemy extends Position {\r\n radius: number;\r\n}\r\n\r\ninterface Player extends Position {\r\n width: number;\r\n height: number;\r\n}\r\n\r\ninterface SpaceDodgerState {\r\n player: Player;\r\n enemies: Enemy[];\r\n frame: number;\r\n keys: Record<string, boolean>;\r\n}\r\n\r\n\r\nconst config = {\r\n canvasSize : { \r\n width: 450, \r\n height: 450 \r\n },\r\n player: { x: 200, y: 350, width: 25, height: 50 }\r\n}\r\n\r\nconst SpaceDodger: React.FC = () => {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const scoreRef = useRef(0);\r\n const lastBatchScoreRef = useRef(0);\r\n\r\n const [score, setScore] = useState(0);\r\n const [gameOver, setGameOver] = useState(false);\r\n\r\n const gameStateRef = useRef<SpaceDodgerState>({\r\n player: config.player,\r\n enemies: [],\r\n frame: 0,\r\n keys: {}\r\n });\r\n\r\n const resetGame = () => {\r\n gameStateRef.current = {\r\n player: config.player,\r\n enemies: [],\r\n frame: 0,\r\n keys: {}\r\n };\r\n scoreRef.current = 0;\r\n lastBatchScoreRef.current = 0;\r\n setScore(0);\r\n setGameOver(false);\r\n };\r\n\r\n\r\n \r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const state = gameStateRef.current;\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n state.keys[e.key] = true;\r\n };\r\n const handleKeyUp = (e: KeyboardEvent) => {\r\n state.keys[e.key] = false;\r\n };\r\n\r\n window.addEventListener('keydown', handleKeyDown);\r\n window.addEventListener('keyup', handleKeyUp);\r\n\r\n const randomRadius = () => 10 + Math.random() * 15;\r\n\r\n const getEnemySpeed = () => {\r\n const base = 3;\r\n const increase = Math.floor(scoreRef.current / 20) * 0.5;\r\n return base + increase;\r\n };\r\n\r\n let animationId: number;\r\n\r\n const gameLoop = () => {\r\n if (gameOver) return;\r\n\r\n state.frame++;\r\n\r\n ctx.fillStyle = '#000';\r\n ctx.fillRect(0, 0, config.canvasSize.width, config.canvasSize.height);\r\n\r\n // Player movement\r\n if (state.keys['ArrowLeft'] && state.player.x > 0) state.player.x -= 5;\r\n if (state.keys['ArrowRight'] && state.player.x < config.canvasSize.width - state.player.width) state.player.x += 5;\r\n if (state.keys['ArrowUp'] && state.player.y > 0) state.player.y -= 5;\r\n if (state.keys['ArrowDown'] && state.player.y < config.canvasSize.height - state.player.height) state.player.y += 5;\r\n\r\n // Draw player\r\n ctx.fillStyle = '#0ea5e9';\r\n ctx.fillRect(\r\n state.player.x,\r\n state.player.y,\r\n state.player.width,\r\n state.player.height\r\n );\r\n\r\n // Normal enemy spawn\r\n if (state.frame % 40 === 0) {\r\n const radius = randomRadius();\r\n state.enemies.push({\r\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\r\n y: -radius,\r\n radius,\r\n });\r\n }\r\n\r\n // Extra batch every 20 score\r\n if (\r\n scoreRef.current > 0 &&\r\n scoreRef.current % 20 === 0 &&\r\n lastBatchScoreRef.current !== scoreRef.current\r\n ) {\r\n lastBatchScoreRef.current = scoreRef.current;\r\n const batchCount = 2 + Math.floor(Math.random() * 3);\r\n\r\n for (let i = 0; i < batchCount; i++) {\r\n const radius = randomRadius();\r\n state.enemies.push({\r\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\r\n y: -Math.random() * 100,\r\n radius\r\n });\r\n }\r\n }\r\n\r\n // Enemies update\r\n state.enemies = state.enemies.filter(enemy => {\r\n enemy.y += getEnemySpeed();\r\n\r\n // Draw enemy (circle)\r\n ctx.fillStyle = '#ef4444';\r\n ctx.beginPath();\r\n ctx.arc(enemy.x, enemy.y, enemy.radius, 0, Math.PI * 2);\r\n ctx.fill();\r\n\r\n // Circle vs rectangle collision\r\n const closestX = Math.max(\r\n state.player.x,\r\n Math.min(enemy.x, state.player.x + state.player.width)\r\n );\r\n const closestY = Math.max(\r\n state.player.y,\r\n Math.min(enemy.y, state.player.y + state.player.height)\r\n );\r\n\r\n const dx = enemy.x - closestX;\r\n const dy = enemy.y - closestY;\r\n\r\n if (dx * dx + dy * dy < enemy.radius * enemy.radius) {\r\n setGameOver(true);\r\n return false;\r\n }\r\n\r\n // Passed screen\r\n if (enemy.y - enemy.radius > config.canvasSize.height) {\r\n setScore(s => {\r\n scoreRef.current = s + 1;\r\n return s + 1;\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n animationId = requestAnimationFrame(gameLoop);\r\n };\r\n\r\n gameLoop();\r\n\r\n return () => {\r\n cancelAnimationFrame(animationId);\r\n window.removeEventListener('keydown', handleKeyDown);\r\n window.removeEventListener('keyup', handleKeyUp);\r\n };\r\n }, [gameOver]);\r\n\r\n return (\r\n <div className=\"relative flex flex-col items-center gap-4 p-4\">\r\n <div className=\"text-xl font-bold\">Score: {score}</div>\r\n <canvas\r\n ref={canvasRef}\r\n width={config.canvasSize.width}\r\n height={config.canvasSize.height}\r\n className=\"border-2 border-gray-300\"\r\n />\r\n\r\n {gameOver && (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\r\n <p className=\"text-xl font-bold text-red-500 mb-3\">Game Over</p>\r\n <Button onClick={resetGame}>Play Again</Button>\r\n </div>\r\n )}\r\n\r\n <div className=\"text-sm text-foreground\">Use arrow keys to move</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SpaceDodger;","import * as React from \"react\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n \"icon-sm\": \"size-8\",\r\n \"icon-lg\": \"size-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n data-variant={variant}\r\n data-size={size}\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}"],"mappings":"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","names":["jsx"]}
1
+ {"version":3,"sources":["../src/components/games/spacedodger/index.tsx","../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/games/memorygame/index.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Button } from '@/components/ui/button';\n\ninterface Position {\n x: number;\n y: number;\n}\n\ninterface Enemy extends Position {\n radius: number;\n}\n\ninterface Player extends Position {\n width: number;\n height: number;\n}\n\ninterface SpaceDodgerState {\n player: Player;\n enemies: Enemy[];\n frame: number;\n keys: Record<string, boolean>;\n}\n\n\nconst config = {\n canvasSize : { \n width: 450, \n height: 450 \n },\n player: { x: 200, y: 350, width: 25, height: 50 }\n}\n\nconst SpaceDodger: React.FC = () => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const scoreRef = useRef(0);\n const lastBatchScoreRef = useRef(0);\n\n const [score, setScore] = useState(0);\n const [gameOver, setGameOver] = useState(false);\n\n const gameStateRef = useRef<SpaceDodgerState>({\n player: config.player,\n enemies: [],\n frame: 0,\n keys: {}\n });\n\n const resetGame = () => {\n gameStateRef.current = {\n player: config.player,\n enemies: [],\n frame: 0,\n keys: {}\n };\n scoreRef.current = 0;\n lastBatchScoreRef.current = 0;\n setScore(0);\n setGameOver(false);\n };\n\n\n \n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const state = gameStateRef.current;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n state.keys[e.key] = true;\n };\n const handleKeyUp = (e: KeyboardEvent) => {\n state.keys[e.key] = false;\n };\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n const randomRadius = () => 10 + Math.random() * 15;\n\n const getEnemySpeed = () => {\n const base = 3;\n const increase = Math.floor(scoreRef.current / 20) * 0.5;\n return base + increase;\n };\n\n let animationId: number;\n\n const gameLoop = () => {\n if (gameOver) return;\n\n state.frame++;\n\n ctx.fillStyle = '#000';\n ctx.fillRect(0, 0, config.canvasSize.width, config.canvasSize.height);\n\n // Player movement\n if (state.keys['ArrowLeft'] && state.player.x > 0) state.player.x -= 5;\n if (state.keys['ArrowRight'] && state.player.x < config.canvasSize.width - state.player.width) state.player.x += 5;\n if (state.keys['ArrowUp'] && state.player.y > 0) state.player.y -= 5;\n if (state.keys['ArrowDown'] && state.player.y < config.canvasSize.height - state.player.height) state.player.y += 5;\n\n // Draw player\n ctx.fillStyle = '#0ea5e9';\n ctx.fillRect(\n state.player.x,\n state.player.y,\n state.player.width,\n state.player.height\n );\n\n // Normal enemy spawn\n if (state.frame % 40 === 0) {\n const radius = randomRadius();\n state.enemies.push({\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\n y: -radius,\n radius,\n });\n }\n\n // Extra batch every 20 score\n if (\n scoreRef.current > 0 &&\n scoreRef.current % 20 === 0 &&\n lastBatchScoreRef.current !== scoreRef.current\n ) {\n lastBatchScoreRef.current = scoreRef.current;\n const batchCount = 2 + Math.floor(Math.random() * 3);\n\n for (let i = 0; i < batchCount; i++) {\n const radius = randomRadius();\n state.enemies.push({\n x: radius + Math.random() * (config.canvasSize.width - radius * 2),\n y: -Math.random() * 100,\n radius\n });\n }\n }\n\n // Enemies update\n state.enemies = state.enemies.filter(enemy => {\n enemy.y += getEnemySpeed();\n\n // Draw enemy (circle)\n ctx.fillStyle = '#ef4444';\n ctx.beginPath();\n ctx.arc(enemy.x, enemy.y, enemy.radius, 0, Math.PI * 2);\n ctx.fill();\n\n // Circle vs rectangle collision\n const closestX = Math.max(\n state.player.x,\n Math.min(enemy.x, state.player.x + state.player.width)\n );\n const closestY = Math.max(\n state.player.y,\n Math.min(enemy.y, state.player.y + state.player.height)\n );\n\n const dx = enemy.x - closestX;\n const dy = enemy.y - closestY;\n\n if (dx * dx + dy * dy < enemy.radius * enemy.radius) {\n setGameOver(true);\n return false;\n }\n\n // Passed screen\n if (enemy.y - enemy.radius > config.canvasSize.height) {\n setScore(s => {\n scoreRef.current = s + 1;\n return s + 1;\n });\n return false;\n }\n\n return true;\n });\n\n animationId = requestAnimationFrame(gameLoop);\n };\n\n gameLoop();\n\n return () => {\n cancelAnimationFrame(animationId);\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [gameOver]);\n\n return (\n <div className=\"relative flex flex-col items-center gap-4 p-4\">\n <div className=\"text-xl font-bold\">Score: {score}</div>\n <canvas\n ref={canvasRef}\n width={config.canvasSize.width}\n height={config.canvasSize.height}\n className=\"border-2 border-gray-300\"\n />\n\n {gameOver && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\n <p className=\"text-xl font-bold text-red-500 mb-3\">Game Over</p>\n <Button onClick={resetGame}>Play Again</Button>\n </div>\n )}\n\n <div className=\"text-sm text-foreground\">Use arrow keys to move</div>\n </div>\n );\n};\n\nexport default SpaceDodger;","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}","import React, { useEffect, useRef, useState } from 'react';\nimport { Button } from '@/components/ui/button';\n\ninterface NumberItem {\n x: number;\n y: number;\n value: number;\n radius: number;\n}\n\ntype GamePhase = 'memorize' | 'recall' | 'transition';\n\ninterface GameState {\n numbers: NumberItem[];\n sequence: number[];\n currentIndex: number;\n level: number;\n showNumbers: boolean;\n phase: GamePhase;\n revealed: Set<number>;\n}\n\nconst config = {\n canvasSize: { width: 450, height: 450 },\n baseHideTime: 3000,\n numberRadius: 30,\n};\n\nconst MemoryGame: React.FC = () => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [level, setLevel] = useState(1);\n const [gameOver, setGameOver] = useState(false);\n const [message, setMessage] = useState('');\n const [showOverlay, setShowOverlay] = useState<{ visible: boolean; text: string }>({\n visible: false,\n text: '',\n });\n const gameStateRef = useRef<GameState>({\n numbers: [],\n sequence: [],\n currentIndex: 0,\n level: 1,\n showNumbers: true,\n phase: 'memorize',\n revealed: new Set(),\n });\n\n // Max numbers = 9\n const getNumberCount = (lvl: number) => Math.min(4 + lvl, 9);\n\n // Hide time decreases as level increases, min 500ms\n const getHideTime = (lvl: number) =>\n Math.max(500, config.baseHideTime - Math.floor((lvl - 1) / 1) * 500);\n\n const generateNumbers = (lvl: number) => {\n const count = getNumberCount(lvl);\n const numbers: NumberItem[] = [];\n const sequence: number[] = [];\n const padding = config.numberRadius * 2.5;\n\n for (let i = 0; i < count; i++) {\n let x: number, y: number, overlap: boolean;\n let attempts = 0;\n\n do {\n overlap = false;\n x = padding + Math.random() * (config.canvasSize.width - padding * 2);\n y = padding + Math.random() * (config.canvasSize.height - padding * 2);\n\n for (const num of numbers) {\n const dx = x - num.x;\n const dy = y - num.y;\n if (Math.sqrt(dx * dx + dy * dy) < config.numberRadius * 2.5) {\n overlap = true;\n break;\n }\n }\n attempts++;\n } while (overlap && attempts < 100);\n\n numbers.push({ x, y, value: i + 1, radius: config.numberRadius });\n sequence.push(i + 1);\n }\n\n return { numbers, sequence };\n };\n\n const startLevel = (lvl: number) => {\n const { numbers, sequence } = generateNumbers(lvl);\n gameStateRef.current = {\n numbers,\n sequence,\n currentIndex: 0,\n level: lvl,\n showNumbers: true,\n phase: 'memorize',\n revealed: new Set(),\n };\n setMessage('Memorize the sequence!');\n\n setTimeout(() => {\n gameStateRef.current.showNumbers = false;\n gameStateRef.current.phase = 'recall';\n setMessage('Click the numbers in order!');\n }, getHideTime(lvl));\n };\n\n const resetGame = () => {\n setLevel(1);\n setGameOver(false);\n setShowOverlay({ visible: false, text: '' });\n startLevel(1);\n };\n\n const handleCanvasClick = (e: React.MouseEvent<HTMLCanvasElement>) => {\n if (gameOver || gameStateRef.current.phase !== 'recall') return;\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const rect = canvas.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const state = gameStateRef.current;\n\n for (const num of state.numbers) {\n const distance = Math.hypot(x - num.x, y - num.y);\n if (distance <= num.radius) {\n const expected = state.sequence[state.currentIndex];\n if (num.value === expected) {\n state.revealed.add(num.value);\n state.currentIndex++;\n\n if (state.currentIndex === state.sequence.length) {\n const nextLevel = level + 1;\n setLevel(nextLevel);\n state.phase = 'transition';\n setShowOverlay({ visible: true, text: `Get Ready! Level ${nextLevel}` });\n\n setTimeout(() => {\n setShowOverlay({ visible: false, text: '' });\n startLevel(nextLevel);\n }, 1500);\n }\n } else {\n setGameOver(true);\n setMessage(`Wrong! Clicked ${num.value}, expected ${expected}`);\n }\n break;\n }\n }\n };\n\n useEffect(() => startLevel(1), []);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n let animationId: number;\n\n const draw = () => {\n const state = gameStateRef.current;\n ctx.fillStyle = '#000';\n ctx.fillRect(0, 0, config.canvasSize.width, config.canvasSize.height);\n\n state.numbers.forEach((num, idx) => {\n // Show green hint only in level 1\n const isNext = state.phase === 'recall' && level === 1 && idx === state.currentIndex;\n ctx.fillStyle = isNext ? '#22c55e' : '#3b82f6';\n ctx.beginPath();\n ctx.arc(num.x, num.y, num.radius, 0, Math.PI * 2);\n ctx.fill();\n\n // Reveal numbers if memorizing, transitioning, or already correctly guessed\n if (state.showNumbers || state.phase === 'transition' || state.revealed.has(num.value)) {\n ctx.fillStyle = '#fff';\n ctx.font = 'bold 24px sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(num.value.toString(), num.x, num.y);\n }\n });\n\n if (!gameOver) animationId = requestAnimationFrame(draw);\n };\n\n draw();\n return () => cancelAnimationFrame(animationId);\n }, [gameOver, level]);\n\n return (\n <div className=\"relative flex flex-col items-center gap-4 p-4\">\n <div className=\"flex gap-8 text-xl font-bold\">\n <div>Level: {level}</div>\n <div>Numbers: {getNumberCount(level)}</div>\n </div>\n <div className=\"text-lg font-semibold text-blue-400 h-6\">{message}</div>\n <canvas\n ref={canvasRef}\n width={config.canvasSize.width}\n height={config.canvasSize.height}\n className=\"border-2 border-gray-300 cursor-pointer\"\n onClick={handleCanvasClick}\n />\n {gameOver && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\n <p className=\"text-xl font-bold text-red-500 mb-2\">Game Over</p>\n <p className=\"text-lg text-white mb-4\">Reached Level {level}</p>\n <Button onClick={resetGame}>Play Again</Button>\n </div>\n )}\n\n {showOverlay.visible && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/60\">\n <p className=\"text-2xl font-bold text-yellow-400\">{showOverlay.text}</p>\n </div>\n )}\n\n <div className=\"text-sm text-center text-foreground max-w-md\">\n <div>Memorize the numbers, then click them in sequence (1, 2, 3...)</div>\n <div className=\"mt-1 text-xs text-gray-400\">Green circle = next number to click (level 1 only)</div>\n </div>\n </div>\n );\n};\n\nexport default MemoryGame;\n"],"mappings":"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","names":["jsx","useEffect","useRef","useState","jsx","jsxs","config","useRef","useState","useEffect"]}
package/package.json CHANGED
@@ -1,57 +1,60 @@
1
- {
2
- "name": "@jonelhatwell/arcade-games",
3
- "version": "1.0.2",
4
- "type": "module",
5
- "main": "dist/index.cjs",
6
- "module": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "sideEffects": false,
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.js",
13
- "require": "./dist/index.cjs"
14
- },
15
- "./styles": "./dist/index.css"
16
- },
17
- "files": [
18
- "dist",
19
- "README.md"
20
- ],
21
- "scripts": {
22
- "build": "tsup",
23
- "dev": "tsup --watch"
24
- },
25
- "peerDependencies": {
26
- "react": "^18 || ^19",
27
- "react-dom": "^18 || ^19"
28
- },
29
- "dependencies": {
30
- "@radix-ui/react-slot": "^1.2.4",
31
- "class-variance-authority": "^0.7.1",
32
- "clsx": "^2.1.1",
33
- "lucide-react": "^0.562.0",
34
- "react": "^19.2.0",
35
- "react-dom": "^19.2.0",
36
- "tailwind-merge": "^3.4.0",
37
- "tw-animate-css": "^1.4.0"
38
- },
39
- "devDependencies": {
40
- "@eslint/js": "^9.39.1",
41
- "@tailwindcss/postcss": "^4.1.18",
42
- "@types/node": "^24.10.1",
43
- "@types/react": "^19.2.5",
44
- "@types/react-dom": "^19.2.3",
45
- "@vitejs/plugin-react": "^5.1.1",
46
- "eslint": "^9.39.1",
47
- "eslint-plugin-react-hooks": "^7.0.1",
48
- "eslint-plugin-react-refresh": "^0.4.24",
49
- "globals": "^16.5.0",
50
- "postcss": "^8.5.6",
51
- "tailwindcss": "^4.1.18",
52
- "tsup": "^8.5.1",
53
- "typescript": "~5.9.3",
54
- "typescript-eslint": "^8.46.4",
55
- "vite": "^7.2.4"
56
- }
57
- }
1
+ {
2
+ "name": "@jonelhatwell/arcade-games",
3
+ "version": "1.2.16",
4
+ "type": "module",
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "sideEffects": false,
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./styles": "./dist/index.css"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md"
20
+ ],
21
+ "peerDependencies": {
22
+ "react": "^18 || ^19",
23
+ "react-dom": "^18 || ^19"
24
+ },
25
+ "dependencies": {
26
+ "@radix-ui/react-slot": "^1.2.4",
27
+ "class-variance-authority": "^0.7.1",
28
+ "clsx": "^2.1.1",
29
+ "lucide-react": "^0.562.0",
30
+ "react": "^19.2.3",
31
+ "react-dom": "^19.2.3",
32
+ "tailwind-merge": "^3.4.0",
33
+ "tw-animate-css": "^1.4.0"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "devDependencies": {
39
+ "@eslint/js": "^9.39.2",
40
+ "@tailwindcss/postcss": "^4.1.18",
41
+ "@types/node": "^24.10.4",
42
+ "@types/react": "^19.2.7",
43
+ "@types/react-dom": "^19.2.3",
44
+ "@vitejs/plugin-react": "^5.1.2",
45
+ "eslint": "^9.39.2",
46
+ "eslint-plugin-react-hooks": "^7.0.1",
47
+ "eslint-plugin-react-refresh": "^0.4.26",
48
+ "globals": "^16.5.0",
49
+ "postcss": "^8.5.6",
50
+ "tailwindcss": "^4.1.18",
51
+ "tsup": "^8.5.1",
52
+ "typescript": "~5.9.3",
53
+ "typescript-eslint": "^8.50.1",
54
+ "vite": "^7.3.0"
55
+ },
56
+ "scripts": {
57
+ "build": "tsup",
58
+ "dev": "tsup --watch"
59
+ }
60
+ }