{"_id":"@crosswordxyz/react-crossword","name":"@crosswordxyz/react-crossword","dist-tags":{"latest":"6.0.0"},"versions":{"6.0.0":{"name":"@crosswordxyz/react-crossword","homepage":"https://github.com/crosswordxyz/react-crossword","version":"6.0.0","description":"A flexible, responsive, and easy-to-use crossword component for React apps","contributors":[{"name":"Jared Reisinger"},{"name":"Mike Purvis"}],"keywords":["react","react-crossword","crossword","puzzle","library"],"repository":{"type":"git","url":"git+https://github.com/crosswordxyz/react-crossword.git"},"license":"MIT","engines":{"node":">=18.7.0"},"main":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./util":{"types":"./dist/public-util.d.ts","default":"./dist/public-util.js"},"./package.json":"./package.json"},"sideEffects":false,"scripts":{"test":"jest","test:coverage":"jest --coverage --collectCoverageFrom='src/**/*.{js,jsx,ts,tsx}'","test:dev":"jest --watch","lint":"eslint 'src/**/*.{ts,tsx}'","build":"tsc","dist":"npm run clean && npm run build","clean":"rimraf build coverage dist"},"publishConfig":{"access":"public"},"dependencies":{"immer":"^9.0.21","prop-types":"^15.8.1","styled-components":"^5.3.11"},"devDependencies":{"@babel/core":"^7.20.12","@babel/preset-env":"^7.20.2","@babel/preset-react":"^7.18.6","@babel/preset-typescript":"^7.18.6","@testing-library/dom":"^10.4.1","@testing-library/jest-dom":"^5.16.5","@testing-library/react":"^13.4.0","@testing-library/user-event":"^14.4.3","@types/prop-types":"^15.7.5","@types/react":"^18.0.26","@types/react-dom":"^18.0.9","@types/styled-components":"^5.1.26","@types/testing-library__jest-dom":"^5.14.9","@typescript-eslint/eslint-plugin":"^5.46.1","@typescript-eslint/parser":"^5.46.1","eslint":"^8.29.0","eslint-config-airbnb":"^19.0.4","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.6.1","eslint-plugin-react":"^7.31.11","eslint-plugin-react-hooks":"^4.6.2","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"^2.8.8","react":"^18.2.0","react-dom":"^18.2.0","react-test-renderer":"^18.2.0","rimraf":"^3.0.2","typescript":"^4.9.5"},"peerDependencies":{"react":"^18.2.0","react-dom":"^18.2.0"},"resolutions":{"@types/react":"18.0.26","@types/react-dom":"18.0.9"},"_id":"@crosswordxyz/react-crossword@6.0.0","gitHead":"9d290738469005196f36ca4f7f8fea16dede3e4a","types":"./dist/index.d.ts","bugs":{"url":"https://github.com/crosswordxyz/react-crossword/issues"},"_nodeVersion":"24.4.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-KUaVg30DruwiZHWq3xzVh00pOQMFJUvwmXfX6XAFFCYDneTxG+nzKkw3IstkvNosDhAZHIkqIv8PXb6PUsAiHQ==","shasum":"c1b60bbf0b380b109fac1307b6370102f53ac4a6","tarball":"https://registry.npmjs.org/@crosswordxyz/react-crossword/-/react-crossword-6.0.0.tgz","fileCount":51,"unpackedSize":242357,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICjOX00Yaz/P9BIvbViTS1a5gtjZtqD9KJZXMG4jk2XSAiA93WjRpDhIu+612NE/1EX/QIuyCLCjeT4SlKMcG8kloQ=="}]},"_npmUser":{"name":"mikedotexe","email":"mikedotexe@gmail.com"},"directories":{},"maintainers":[{"name":"mikedotexe","email":"mikedotexe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-crossword_6.0.0_1772407986329_0.7878728001062774"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-01T23:33:06.236Z","6.0.0":"2026-03-01T23:33:06.501Z","modified":"2026-03-01T23:33:06.729Z"},"maintainers":[{"name":"mikedotexe","email":"mikedotexe@gmail.com"}],"description":"A flexible, responsive, and easy-to-use crossword component for React apps","homepage":"https://github.com/crosswordxyz/react-crossword","keywords":["react","react-crossword","crossword","puzzle","library"],"repository":{"type":"git","url":"git+https://github.com/crosswordxyz/react-crossword.git"},"contributors":[{"name":"Jared Reisinger"},{"name":"Mike Purvis"}],"bugs":{"url":"https://github.com/crosswordxyz/react-crossword/issues"},"license":"MIT","readme":"# @crosswordxyz/react-crossword\n\nA flexible, responsive, and easy-to-use crossword component for React apps. Fork of [`@jaredreisinger/react-crossword`](https://github.com/JaredReisinger/react-crossword) (MIT license), maintained for use at [crossword.xyz](https://crossword.xyz).\n\n**Requires:** React 18, react-dom 18, Node >= 18.7.0\n\n## Install\n\n```sh\nnpm install @crosswordxyz/react-crossword\n```\n\n`styled-components` is a production dependency and will be installed automatically. A `ThemeProvider` is re-exported from this package so you don't need to depend on `styled-components` directly.\n\n## Usage\n\n```jsx\nimport Crossword from '@crosswordxyz/react-crossword';\n\nconst data = {\n  across: {\n    1: { clue: 'one plus one', answer: 'TWO', row: 0, col: 0 },\n  },\n  down: {\n    2: { clue: 'three minus two', answer: 'ONE', row: 0, col: 2 },\n  },\n};\n\nexport default function MyPage() {\n  return <Crossword data={data} />;\n}\n```\n\n### IPUZ support\n\nThe `useIpuz()` hook converts IPUZ-format puzzle data into the native `CluesInput` format:\n\n```jsx\nimport Crossword from '@crosswordxyz/react-crossword';\nimport { useIpuz } from '@crosswordxyz/react-crossword';\n\nconst data = useIpuz(ipuzPuzzle);\nif (data) {\n  return <Crossword data={data} />;\n}\n```\n\n### Utility sub-export\n\nGrid data helpers are available from a separate entry point:\n\n```js\nimport { createGridData, loadGuesses, saveGuesses, clearGuesses } from '@crosswordxyz/react-crossword/util';\n```\n\n### Styling, events, and imperative methods\n\nSee the upstream [README](https://github.com/JaredReisinger/react-crossword#readme) for full documentation on theming (`ThemeProvider`), CSS class names, player progress callbacks, and imperative ref methods (`focus()`, `reset()`, `fillAllAnswers()`, `isCrosswordCorrect()`, `setGuess()`).\n\n## Development\n\n```sh\nyarn install\nyarn build       # TypeScript compilation\nyarn lint        # ESLint\nyarn test        # Jest (134 tests)\nyarn test:dev    # Jest watch mode\n```\n\n## Publishing\n\n```sh\nnpm publish --otp=<code>\n```\n\n`publishConfig.access` in `package.json` is set to `\"public\"`, so no `--access` flag is needed.\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-01820389875eae65e55197ed4bdeda63"}