react-tetris2
Version:
Classic Tetris game as a reusable React 18+ component, fully typed with TypeScript and controllable via ref.
143 lines (142 loc) • 4.12 kB
JSON
{
"name": "react-tetris2",
"version": "0.1.3",
"type": "module",
"description": "Classic Tetris game as a reusable React 18+ component, fully typed with TypeScript and controllable via ref.",
"engines": {
"node": ">=20.0.0"
},
"repository": {
"type": "git",
"url": "https://github.com/Ingenarte/react-tetris2.git"
},
"homepage": "https://ingenarte.github.io/react-tetris2/",
"license": "MIT",
"author": {
"name": "Ingenarte",
"url": "https://github.com/Ingenarte"
},
"_originalWork": {
"author": "Matthew Brandly",
"repo": "https://github.com/brandly/react-tetris",
"version": "0.4.0"
},
"main": "./dist/index.cjs.js",
"module": "./dist/index.esm.js",
"types": "./dist/index.d.ts",
"lint-staged": {
"*.{ts,tsx,js,jsx}": [
"eslint --fix",
"prettier --write"
],
"*.{css,md,json}": [
"prettier --write"
]
},
"keywords": [
"react",
"tetris",
"game",
"react-component",
"typescript",
"hooks",
"tetris-game",
"playable",
"keyboard-controls",
"react-game",
"ui-component",
"block-game"
],
"sideEffects": false,
"bugs": {
"url": "https://github.com/Ingenarte/react-tetris2/issues"
},
"publishConfig": {
"access": "public"
},
"files": [
"dist"
],
"scripts": {
"build": "npm run clean && vite build",
"buildvite": "vite build",
"clean": "rimraf dist",
"test:unit": "vitest run",
"dev": "vite",
"lint": "eslint src --ext .ts,.tsx",
"typecheck": "tsc --noEmit",
"test": "vitest run --coverage",
"fulltest": "npm run typecheck && npm run lint && npm run test",
"storybook": "storybook dev -p 6006",
"build-storybook": "build-storybook -c .storybook",
"test:e2e": "VITE_E2E=1 playwright test",
"test:e2e:install": "playwright install --with-deps"
},
"devDependencies": {
"@axe-core/playwright": "^4.10.1",
"@chromatic-com/storybook": "^3.2.6",
"@commitlint/cli": "^19.8.1",
"@commitlint/config-conventional": "^19.8.1",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.27.0",
"@playwright/test": "^1.52.0",
"@storybook/addon-a11y": "^8.6.14",
"@storybook/addon-essentials": "^8.6.14",
"@storybook/addon-onboarding": "^8.6.14",
"@storybook/blocks": "^8.6.14",
"@storybook/experimental-addon-test": "^8.6.14",
"@storybook/react": "^8.6.14",
"@storybook/react-vite": "^8.6.14",
"@storybook/test": "^8.6.14",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/assert": "1.5.10",
"@types/events": "3.0.0",
"@types/jsdom": "^21.1.7",
"@types/node": "^22.15.18",
"@types/react": "18.3.8",
"@types/react-dom": "18.3.0",
"@types/styled-components": "^5.1.34",
"@types/testing-library__jest-dom": "^5.14.9",
"@typescript-eslint/eslint-plugin": "^8.32.1",
"@typescript-eslint/parser": "^8.32.1",
"@vitejs/plugin-react": "^4.4.1",
"@vitest/browser": "^3.1.3",
"@vitest/coverage-istanbul": "^3.1.3",
"@vitest/ui": "^3.1.3",
"axe-playwright": "^2.1.0",
"esbuild": "0.25.4",
"eslint": "^9.27.0",
"eslint-config-prettier": "^10.1.5",
"eslint-import-resolver-typescript": "^4.3.5",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "6.10.2",
"eslint-plugin-prettier": "^5.4.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-security": "^3.0.1",
"eslint-plugin-storybook": "^0.12.0",
"gh-pages": "^6.1.1",
"husky": "^9.1.7",
"jsdom": "^26.1.0",
"lint-staged": "^15.5.2",
"playwright": "^1.52.0",
"prettier": "^3.1.0",
"rimraf": "^5.0.0",
"storybook": "^8.6.14",
"typescript": "^5.8.3",
"uglify-js": "3.17.4",
"vite": "^6.3.5",
"vite-plugin-dts": "^4.5.4",
"vitest": "^3.1.3"
},
"peerDependencies": {
"react": "^18.0.0 || ^19.1.0",
"react-dom": "^18.0.0 || ^19.1.0"
},
"dependencies": {
"keymaster": "1.6.2",
"react-icons": "^5.5.0",
"styled-components": "^5.3.11"
}
}