{"_id":"@cm3tahkuh/react-tournament-brackets","_rev":"7-170002b58254de9bc99cf1dfd2f2d432","name":"@cm3tahkuh/react-tournament-brackets","dist-tags":{"latest":"1.1.6"},"versions":{"1.1.0":{"name":"@cm3tahkuh/react-tournament-brackets","version":"1.1.0","author":{"name":"Omar ElGaml"},"license":"ISC","_id":"@cm3tahkuh/react-tournament-brackets@1.1.0","maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"homepage":"https://github.com/g-loot/react-tournament-brackets#readme","bugs":{"url":"https://github.com/g-loot/react-tournament-brackets/issues"},"dist":{"shasum":"72902aad110982ebc5c3c8fb75f0ea3b1a8336a4","tarball":"https://registry.npmjs.org/@cm3tahkuh/react-tournament-brackets/-/react-tournament-brackets-1.1.0.tgz","fileCount":48,"integrity":"sha512-JRGDpC4PVwYNNGw06rDiE2DR4QGioiKlCED8zfQoSftSJcGdgbzwuNZalzPKzLh+ZYo+UUfp5guWBeZZ/PyM0w==","signatures":[{"sig":"MEYCIQDWN0iW08ouMBWqn7svYKhfbp3cTJFDQlpi7bvkFVbFVAIhAPrbQvj+ZLU5lxx4/T4kQPRuBtykfTBtatQGXIjnYMWW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179566},"main":"dist/bundle.js","types":"dist/index.d.ts","gitHead":"3398ed6a661fcc2fc1a84983e14866b732962c75","scripts":{"dev":"start-storybook -p 4442","lint":"eslint \"src/**/*.js\" \"src/**/*.jsx\"","test":"jest --verbose false","build":"webpack --config scripts/webpack.config.js","start":"start-storybook -p $PORT -h 0.0.0.0","format":"eslint --fix \"src/**/*.js\" \"src/**/*.jsx\"","build-storybook":"build-storybook -o devapp-build"},"_npmUser":{"name":"cm3tahkuh","email":"markplay13498@gmail.com"},"repository":{"url":"git+https://github.com/g-loot/react-tournament-brackets.git","type":"git"},"_npmVersion":"11.3.0","description":"A react component to visualize bracket leaderboards","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","react":"^18.1.0","eslint":"^8.34.0","webpack":"^4.43.0","prettier":"^2.2.1","deepmerge":"^4.2.2","react-dom":"^18.1.0","ts-loader":"^8.2.0","css-loader":"^3.6.0","typescript":"^4.3.4","url-loader":"^4.1.0","@babel/core":"^7.12.3","@types/jest":"^29.0.2","file-loader":"^6.0.0","webpack-cli":"^4.1.0","babel-eslint":"^10.1.0","babel-loader":"^8.1.0","style-loader":"^1.2.1","minireset.css":"^0.0.3","@storybook/react":"^6.5.9","styled-components":"^4.1.3","eslint-plugin-jest":"^27.2.1","react-svg-pan-zoom":"^3.10.0","copy-webpack-plugin":"^5.1.1","eslint-plugin-react":"^7.32.2","eslint-config-airbnb":"^19.0.4","eslint-plugin-import":"^2.27.5","@storybook/addon-links":"^6.5.9","@testing-library/react":"^13.3.0","eslint-config-prettier":"^8.6.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^4.2.1","eslint-plugin-storybook":"^0.6.11","@babel/preset-typescript":"^7.14.5","@storybook/addon-actions":"^6.5.9","@types/styled-components":"^5.1.10","eslint-plugin-typescript":"^0.14.0","@typescript-eslint/parser":"^5.59.9","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^6.5.9","@storybook/addon-storysource":"^6.5.9","babel-plugin-module-resolver":"^4.1.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-testing-library":"^5.10.2","react-docgen-typescript-loader":"^3.7.2","@babel/plugin-transform-runtime":"^7.12.1"},"peerDependencies":{"react":"^18.1.0","react-dom":"^18.1.0","styled-components":"^4.1.3","react-svg-pan-zoom":"^3.10.0"},"_npmOperationalInternal":{"tmp":"tmp/react-tournament-brackets_1.1.0_1762537785759_0.6260799454262282","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@cm3tahkuh/react-tournament-brackets","version":"1.1.1","author":{"name":"Omar ElGaml"},"license":"ISC","_id":"@cm3tahkuh/react-tournament-brackets@1.1.1","maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"homepage":"https://github.com/cm3tahkuh/react-tournament-brackets#readme","bugs":{"url":"https://github.com/cm3tahkuh/react-tournament-brackets/issues"},"dist":{"shasum":"275530f34214958c8b7a63c91b0afeccf3745bf5","tarball":"https://registry.npmjs.org/@cm3tahkuh/react-tournament-brackets/-/react-tournament-brackets-1.1.1.tgz","fileCount":48,"integrity":"sha512-wOeX6jth1iny1ty2FvuNiBLeUiDBhevGHa8/P4f6tFUCtW0UQM4sn3MVn61fmLgBgnRtu67kOyu0w3ID7fjP6A==","signatures":[{"sig":"MEUCIAk13jIeeqhOohKUtgPs0+vRHvtBF92qdpZAbqwXFlTPAiEAmyFik4+oTxuNTWNCefVlxC7qK5TCfaUl1pz1dWti56I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179647},"main":"dist/bundle.js","types":"dist/index.d.ts","gitHead":"9f8bec6f813be50b363c7291398c2d41720bb991","scripts":{"dev":"start-storybook -p 4442","lint":"eslint \"src/**/*.js\" \"src/**/*.jsx\"","test":"jest --verbose false","build":"webpack --config scripts/webpack.config.js","start":"start-storybook -p $PORT -h 0.0.0.0","format":"eslint --fix \"src/**/*.js\" \"src/**/*.jsx\"","build-storybook":"build-storybook -o devapp-build"},"_npmUser":{"name":"cm3tahkuh","email":"markplay13498@gmail.com"},"repository":{"url":"git+https://github.com/cm3tahkuh/react-tournament-brackets.git","type":"git"},"_npmVersion":"11.3.0","description":"A react component to visualize bracket leaderboards","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","react":"^18.1.0","eslint":"^8.34.0","webpack":"^4.43.0","prettier":"^2.2.1","deepmerge":"^4.2.2","react-dom":"^18.1.0","ts-loader":"^8.2.0","css-loader":"^3.6.0","typescript":"^4.3.4","url-loader":"^4.1.0","@babel/core":"^7.12.3","@types/jest":"^29.0.2","file-loader":"^6.0.0","webpack-cli":"^4.1.0","babel-eslint":"^10.1.0","babel-loader":"^8.1.0","style-loader":"^1.2.1","minireset.css":"^0.0.3","@storybook/react":"^6.5.9","styled-components":"^4.1.3","eslint-plugin-jest":"^27.2.1","react-svg-pan-zoom":"^3.10.0","copy-webpack-plugin":"^5.1.1","eslint-plugin-react":"^7.32.2","eslint-config-airbnb":"^19.0.4","eslint-plugin-import":"^2.27.5","@storybook/addon-links":"^6.5.9","@testing-library/react":"^13.3.0","eslint-config-prettier":"^8.6.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^4.2.1","eslint-plugin-storybook":"^0.6.11","@babel/preset-typescript":"^7.14.5","@storybook/addon-actions":"^6.5.9","@types/styled-components":"^5.1.10","eslint-plugin-typescript":"^0.14.0","@typescript-eslint/parser":"^5.59.9","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^6.5.9","@storybook/addon-storysource":"^6.5.9","babel-plugin-module-resolver":"^4.1.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-testing-library":"^5.10.2","react-docgen-typescript-loader":"^3.7.2","@babel/plugin-transform-runtime":"^7.12.1"},"peerDependencies":{"react":"^18.1.0","react-dom":"^18.1.0","styled-components":"^4.1.3","react-svg-pan-zoom":"^3.10.0"},"_npmOperationalInternal":{"tmp":"tmp/react-tournament-brackets_1.1.1_1762538310653_0.7816167253142561","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@cm3tahkuh/react-tournament-brackets","version":"1.1.2","author":{"name":"Omar ElGaml"},"license":"ISC","_id":"@cm3tahkuh/react-tournament-brackets@1.1.2","maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"homepage":"https://github.com/cm3tahkuh/react-tournament-brackets#readme","bugs":{"url":"https://github.com/cm3tahkuh/react-tournament-brackets/issues"},"dist":{"shasum":"bbbb0f01ec315391bfc568fa258d850db1bdadcd","tarball":"https://registry.npmjs.org/@cm3tahkuh/react-tournament-brackets/-/react-tournament-brackets-1.1.2.tgz","fileCount":48,"integrity":"sha512-RHW33y8MCDinQo71Q2jW2DPX3M7+ex2tFQ1HebVhs/DXVsDwWY0DM7PLPmE7QFYyMxWwRsT4xz7J3E9qvJoZJA==","signatures":[{"sig":"MEUCIGhiS2/jxVRhJOh2NzQi5Wk0dDzdHhWL9PfgHdS2FzDnAiEAphWyE0gFPSIjneSZk35Q1qxnYO3vW3C9du7weq2/bag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179632},"main":"dist/bundle.js","types":"dist/index.d.ts","gitHead":"02fc2ae83a43cb15613b5a05cf0ac749a0a91d8a","scripts":{"dev":"start-storybook -p 4442","lint":"eslint \"src/**/*.js\" \"src/**/*.jsx\"","test":"jest --verbose false","build":"webpack --config scripts/webpack.config.js","start":"start-storybook -p $PORT -h 0.0.0.0","format":"eslint --fix \"src/**/*.js\" \"src/**/*.jsx\"","build-storybook":"build-storybook -o devapp-build"},"_npmUser":{"name":"cm3tahkuh","email":"markplay13498@gmail.com"},"repository":{"url":"git+https://github.com/cm3tahkuh/react-tournament-brackets.git","type":"git"},"_npmVersion":"11.3.0","description":"A react component to visualize bracket leaderboards","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","react":"^18.1.0","eslint":"^8.34.0","webpack":"^4.43.0","prettier":"^2.2.1","deepmerge":"^4.2.2","react-dom":"^18.1.0","ts-loader":"^8.2.0","css-loader":"^3.6.0","typescript":"^4.3.4","url-loader":"^4.1.0","@babel/core":"^7.12.3","@types/jest":"^29.0.2","file-loader":"^6.0.0","webpack-cli":"^4.1.0","babel-eslint":"^10.1.0","babel-loader":"^8.1.0","style-loader":"^1.2.1","minireset.css":"^0.0.3","@storybook/react":"^6.5.9","styled-components":"^4.1.3","eslint-plugin-jest":"^27.2.1","react-svg-pan-zoom":"^3.10.0","copy-webpack-plugin":"^5.1.1","eslint-plugin-react":"^7.32.2","eslint-config-airbnb":"^19.0.4","eslint-plugin-import":"^2.27.5","@storybook/addon-links":"^6.5.9","@testing-library/react":"^13.3.0","eslint-config-prettier":"^8.6.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^4.2.1","eslint-plugin-storybook":"^0.6.11","@babel/preset-typescript":"^7.14.5","@storybook/addon-actions":"^6.5.9","@types/styled-components":"^5.1.10","eslint-plugin-typescript":"^0.14.0","@typescript-eslint/parser":"^5.59.9","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^6.5.9","@storybook/addon-storysource":"^6.5.9","babel-plugin-module-resolver":"^4.1.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-testing-library":"^5.10.2","react-docgen-typescript-loader":"^3.7.2","@babel/plugin-transform-runtime":"^7.12.1"},"peerDependencies":{"react":"^18.1.0","react-dom":"^18.1.0","styled-components":"^4.1.3","react-svg-pan-zoom":"^3.10.0"},"_npmOperationalInternal":{"tmp":"tmp/react-tournament-brackets_1.1.2_1762540590537_0.27712041459652936","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@cm3tahkuh/react-tournament-brackets","version":"1.1.3","author":{"name":"Omar ElGaml"},"license":"ISC","_id":"@cm3tahkuh/react-tournament-brackets@1.1.3","maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"homepage":"https://github.com/cm3tahkuh/react-tournament-brackets#readme","bugs":{"url":"https://github.com/cm3tahkuh/react-tournament-brackets/issues"},"dist":{"shasum":"957475e2900ce9c3a551985b80cd3c006d995ca8","tarball":"https://registry.npmjs.org/@cm3tahkuh/react-tournament-brackets/-/react-tournament-brackets-1.1.3.tgz","fileCount":48,"integrity":"sha512-kzR15z+uSk17ePf/3gqduUhhyy00KndagxAd+4EyYvzgMt5koYZoAxTM68JiD+rbg7ZzG+Gej9aco0oGWWWR8g==","signatures":[{"sig":"MEUCIHy3UkKCU/rIE0RuUlwz/Y0nOR/QEcuhR7ShCeKS1wGGAiEApB75LZj/yI2hp6UiM8zNVOK6uM6cTXhDOjtddzJKwkk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179654},"main":"dist/bundle.js","types":"dist/index.d.ts","gitHead":"f25dbfabe09ceff8983d3e7c5e031e25e0d6757c","scripts":{"dev":"start-storybook -p 4442","lint":"eslint \"src/**/*.js\" \"src/**/*.jsx\"","test":"jest --verbose false","build":"webpack --config scripts/webpack.config.js","start":"start-storybook -p $PORT -h 0.0.0.0","format":"eslint --fix \"src/**/*.js\" \"src/**/*.jsx\"","build-storybook":"build-storybook -o devapp-build"},"_npmUser":{"name":"cm3tahkuh","email":"markplay13498@gmail.com"},"repository":{"url":"git+https://github.com/cm3tahkuh/react-tournament-brackets.git","type":"git"},"_npmVersion":"11.3.0","description":"A react component to visualize bracket leaderboards","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","react":"^18.1.0","eslint":"^8.34.0","webpack":"^4.43.0","prettier":"^2.2.1","deepmerge":"^4.2.2","react-dom":"^18.1.0","ts-loader":"^8.2.0","css-loader":"^3.6.0","typescript":"^4.3.4","url-loader":"^4.1.0","@babel/core":"^7.12.3","@types/jest":"^29.0.2","file-loader":"^6.0.0","webpack-cli":"^4.1.0","babel-eslint":"^10.1.0","babel-loader":"^8.1.0","style-loader":"^1.2.1","minireset.css":"^0.0.3","@storybook/react":"^6.5.9","styled-components":"^4.1.3","eslint-plugin-jest":"^27.2.1","react-svg-pan-zoom":"^3.10.0","copy-webpack-plugin":"^5.1.1","eslint-plugin-react":"^7.32.2","eslint-config-airbnb":"^19.0.4","eslint-plugin-import":"^2.27.5","@storybook/addon-links":"^6.5.9","@testing-library/react":"^13.3.0","eslint-config-prettier":"^8.6.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^4.2.1","eslint-plugin-storybook":"^0.6.11","@babel/preset-typescript":"^7.14.5","@storybook/addon-actions":"^6.5.9","@types/styled-components":"^5.1.10","eslint-plugin-typescript":"^0.14.0","@typescript-eslint/parser":"^5.59.9","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^6.5.9","@storybook/addon-storysource":"^6.5.9","babel-plugin-module-resolver":"^4.1.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-testing-library":"^5.10.2","react-docgen-typescript-loader":"^3.7.2","@babel/plugin-transform-runtime":"^7.12.1"},"peerDependencies":{"react":"^18.1.0 || ^19.0.0","react-dom":"^18.1.0 || ^19.0.0","styled-components":"^4.1.3","react-svg-pan-zoom":"^3.10.0"},"_npmOperationalInternal":{"tmp":"tmp/react-tournament-brackets_1.1.3_1765376047865_0.5960023311020146","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@cm3tahkuh/react-tournament-brackets","version":"1.1.4","author":{"name":"Omar ElGaml"},"license":"ISC","_id":"@cm3tahkuh/react-tournament-brackets@1.1.4","maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"homepage":"https://github.com/cm3tahkuh/react-tournament-brackets#readme","bugs":{"url":"https://github.com/cm3tahkuh/react-tournament-brackets/issues"},"dist":{"shasum":"139fac81b515d520a0b4783b11d2ff6d396b9141","tarball":"https://registry.npmjs.org/@cm3tahkuh/react-tournament-brackets/-/react-tournament-brackets-1.1.4.tgz","fileCount":58,"integrity":"sha512-GFJKIu9w1PWHAtM/3o97YXyUDhv9HfAjNfMscp09Uz9IZVnkxqY6K5dpRsU5Xe9WIzxUqLNBg31B6wusYPtEYg==","signatures":[{"sig":"MEQCIGuSFOHItzVV3Fnp7DLqljOXwnbLPLxT3hbwahQd9gy/AiBmS78rLHeTtAj/WlToXWgsAvyw03BGfH2WBPs4MOZ4MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164777},"main":"dist/bundle.js","types":"dist/index.d.ts","gitHead":"fbd4ccda9631013fb43ce323a3f83d0142837764","scripts":{"dev":"start-storybook -p 4442","lint":"eslint \"src/**/*.js\" \"src/**/*.jsx\"","test":"jest --verbose false","build":"webpack --config scripts/webpack.config.js","start":"start-storybook -p $PORT -h 0.0.0.0","format":"eslint --fix \"src/**/*.js\" \"src/**/*.jsx\"","build-storybook":"build-storybook -o devapp-build"},"_npmUser":{"name":"cm3tahkuh","email":"markplay13498@gmail.com"},"repository":{"url":"git+https://github.com/cm3tahkuh/react-tournament-brackets.git","type":"git"},"_npmVersion":"11.3.0","description":"A react component to visualize bracket leaderboards","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jest":"^29.7.0","react":"^19.0.0","eslint":"^8.57.0","webpack":"^5.96.0","prettier":"^3.3.0","deepmerge":"^4.3.1","react-dom":"^19.0.0","ts-loader":"^9.5.1","css-loader":"^7.1.0","typescript":"^5.6.0","@babel/core":"^7.25.0","@types/jest":"^29.5.0","webpack-cli":"^5.1.4","@types/react":"^19.0.0","babel-loader":"^9.2.0","style-loader":"^4.0.0","minireset.css":"^0.0.7","@storybook/react":"^8.3.0","@types/react-dom":"^19.0.0","@babel/preset-env":"^7.25.0","styled-components":"^6.1.0","eslint-plugin-jest":"^28.10.0","react-svg-pan-zoom":"^3.10.0","@babel/preset-react":"^7.25.0","copy-webpack-plugin":"^12.0.2","eslint-plugin-react":"^7.37.0","@babel/eslint-parser":"^7.25.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-import":"^2.31.0","@storybook/addon-links":"^8.3.0","@testing-library/react":"^16.0.0","eslint-config-prettier":"^9.1.0","eslint-plugin-jsx-a11y":"^6.10.0","eslint-plugin-prettier":"^5.2.0","eslint-plugin-storybook":"^0.11.0","@babel/preset-typescript":"^7.25.0","@storybook/addon-actions":"^8.3.0","@types/styled-components":"^5.1.34","@typescript-eslint/parser":"^8.0.0","eslint-plugin-react-hooks":"^5.1.0","@storybook/addon-essentials":"^8.3.0","@storybook/addon-storysource":"^8.3.0","babel-plugin-module-resolver":"^5.0.2","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-testing-library":"^7.1.0","@babel/plugin-transform-runtime":"^7.25.0"},"peerDependencies":{"react":">=18.1.0","react-dom":">=18.1.0","styled-components":">=5.0.0","react-svg-pan-zoom":"^3.10.0"},"_npmOperationalInternal":{"tmp":"tmp/react-tournament-brackets_1.1.4_1765377308097_0.23809364212847184","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@cm3tahkuh/react-tournament-brackets","version":"1.1.5","author":{"name":"Omar ElGaml"},"license":"ISC","_id":"@cm3tahkuh/react-tournament-brackets@1.1.5","maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"homepage":"https://github.com/cm3tahkuh/react-tournament-brackets#readme","bugs":{"url":"https://github.com/cm3tahkuh/react-tournament-brackets/issues"},"dist":{"shasum":"bc161de85758327fd0d20e45353712fa3859230a","tarball":"https://registry.npmjs.org/@cm3tahkuh/react-tournament-brackets/-/react-tournament-brackets-1.1.5.tgz","fileCount":60,"integrity":"sha512-+J0J+zmqHSxU+MDD7n/+wKrgqf87w0262Gl5277G50er/L6xi/blW90xRO+GD4Z8A2WmBS9aaq1IWLcTOSwBIg==","signatures":[{"sig":"MEUCIHf1JG56SI/wWmD38RcYiX0wfjnO41zKU6x2hU6zXoIfAiEArWFk07iA41ybc+y/yaItpbXN+JkpJrSY76mXdh76MnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177042},"main":"dist/bundle.js","types":"dist/index.d.ts","gitHead":"39be8b694c98ae7d111840ddadc9214a2785c19b","scripts":{"dev":"start-storybook -p 4442","lint":"eslint \"src/**/*.js\" \"src/**/*.jsx\"","test":"jest --verbose false","build":"webpack --config scripts/webpack.config.js","start":"start-storybook -p $PORT -h 0.0.0.0","deploy":"cp -r dist/. ../test-tournament-bracket/node_modules/@cm3tahkuh/react-tournament-brackets/dist/ && rm -rf ../test-tournament-bracket/node_modules/.vite && echo 'Deployed to test project'","format":"eslint --fix \"src/**/*.js\" \"src/**/*.jsx\"","build:deploy":"npm run build && npm run deploy","build-storybook":"build-storybook -o devapp-build"},"_npmUser":{"name":"cm3tahkuh","email":"markplay13498@gmail.com"},"repository":{"url":"git+https://github.com/cm3tahkuh/react-tournament-brackets.git","type":"git"},"_npmVersion":"10.9.4","description":"A react component to visualize bracket leaderboards","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.17.1","jest":"^29.7.0","react":"^19.0.0","eslint":"^8.57.0","webpack":"^5.96.0","prettier":"^3.3.0","deepmerge":"^4.3.1","react-dom":"^19.0.0","ts-loader":"^9.5.1","css-loader":"^7.1.0","typescript":"^5.6.0","@babel/core":"^7.25.0","@types/jest":"^29.5.0","webpack-cli":"^5.1.4","@types/react":"^19.0.0","babel-loader":"^9.2.0","style-loader":"^4.0.0","minireset.css":"^0.0.7","@storybook/react":"^8.6.18","@types/react-dom":"^19.0.0","@babel/preset-env":"^7.25.0","styled-components":"^6.1.0","eslint-plugin-jest":"^28.10.0","react-svg-pan-zoom":"^3.10.0","@babel/preset-react":"^7.25.0","copy-webpack-plugin":"^12.0.2","eslint-plugin-react":"^7.37.0","@babel/eslint-parser":"^7.25.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-import":"^2.31.0","@storybook/addon-links":"^8.3.0","@testing-library/react":"^16.0.0","eslint-config-prettier":"^9.1.0","eslint-plugin-jsx-a11y":"^6.10.0","eslint-plugin-prettier":"^5.2.0","eslint-plugin-storybook":"^0.11.0","@babel/preset-typescript":"^7.25.0","@storybook/addon-actions":"^8.3.0","@types/styled-components":"^5.1.34","@typescript-eslint/parser":"^8.0.0","eslint-plugin-react-hooks":"^5.1.0","@storybook/addon-essentials":"^8.6.14","@storybook/addon-storysource":"^8.3.0","babel-plugin-module-resolver":"^5.0.2","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-testing-library":"^7.1.0","@babel/plugin-transform-runtime":"^7.25.0"},"peerDependencies":{"react":">=18.1.0","react-dom":">=18.1.0","styled-components":">=5.0.0","react-svg-pan-zoom":"^3.10.0"},"_npmOperationalInternal":{"tmp":"tmp/react-tournament-brackets_1.1.5_1774869683608_0.7147727985139172","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@cm3tahkuh/react-tournament-brackets","version":"1.1.6","description":"A react component to visualize bracket leaderboards","main":"dist/bundle.js","types":"dist/index.d.ts","scripts":{"build":"webpack --config scripts/webpack.config.js","deploy":"cp -r dist/. ../test-tournament-bracket/node_modules/@cm3tahkuh/react-tournament-brackets/dist/ && rm -rf ../test-tournament-bracket/node_modules/.vite && echo 'Deployed to test project'","build:deploy":"npm run build && npm run deploy","dev":"start-storybook -p 4442","start":"start-storybook -p $PORT -h 0.0.0.0","build-storybook":"build-storybook -o devapp-build","test":"jest --verbose false","lint":"eslint \"src/**/*.js\" \"src/**/*.jsx\"","format":"eslint --fix \"src/**/*.js\" \"src/**/*.jsx\""},"author":{"name":"Omar ElGaml"},"license":"ISC","peerDependencies":{"react":">=18.1.0","react-dom":">=18.1.0","react-svg-pan-zoom":"^3.10.0","styled-components":">=5.0.0"},"devDependencies":{"@babel/core":"^7.25.0","@babel/eslint-parser":"^7.25.0","@babel/plugin-transform-runtime":"^7.25.0","@babel/preset-env":"^7.25.0","@babel/preset-react":"^7.25.0","@babel/preset-typescript":"^7.25.0","@storybook/addon-actions":"^8.3.0","@storybook/addon-essentials":"^8.6.14","@storybook/addon-links":"^8.3.0","@storybook/addon-storysource":"^8.3.0","@storybook/react":"^8.6.18","@testing-library/react":"^16.0.0","@types/jest":"^29.5.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@types/styled-components":"^5.1.34","@typescript-eslint/parser":"^8.0.0","ajv":"^8.17.1","babel-loader":"^9.2.0","babel-plugin-module-resolver":"^5.0.2","copy-webpack-plugin":"^12.0.2","css-loader":"^7.1.0","deepmerge":"^4.3.1","eslint":"^8.57.0","eslint-config-airbnb":"^19.0.4","eslint-config-prettier":"^9.1.0","eslint-import-resolver-alias":"^1.1.2","eslint-plugin-import":"^2.31.0","eslint-plugin-jest":"^28.10.0","eslint-plugin-jsx-a11y":"^6.10.0","eslint-plugin-prettier":"^5.2.0","eslint-plugin-react":"^7.37.0","eslint-plugin-react-hooks":"^5.1.0","eslint-plugin-storybook":"^0.11.0","eslint-plugin-testing-library":"^7.1.0","jest":"^29.7.0","minireset.css":"^0.0.7","prettier":"^3.3.0","react":"^19.0.0","react-dom":"^19.0.0","react-svg-pan-zoom":"^3.10.0","style-loader":"^4.0.0","styled-components":"^6.1.0","ts-loader":"^9.5.1","typescript":"^5.6.0","webpack":"^5.96.0","webpack-cli":"^5.1.4"},"repository":{"type":"git","url":"git+https://github.com/cm3tahkuh/react-tournament-brackets.git"},"bugs":{"url":"https://github.com/cm3tahkuh/react-tournament-brackets/issues"},"homepage":"https://github.com/cm3tahkuh/react-tournament-brackets#readme","_id":"@cm3tahkuh/react-tournament-brackets@1.1.6","gitHead":"fc3341cfa87c8fe7a3772c007a7ad5e5646099e7","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-vQ89dsI5CRN9PQx6forQITIWMfeb76Rf3JB24DrK7zgdkx+fV68T29upgeBfARbyNCCjmdmxnVxF6s7LYcYTJg==","shasum":"b180da7f2eab9815aec5748c4763a47449530109","tarball":"https://registry.npmjs.org/@cm3tahkuh/react-tournament-brackets/-/react-tournament-brackets-1.1.6.tgz","fileCount":60,"unpackedSize":177055,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEahRNvlQ/WAQliJhmeva6jpQjf7EBuqSBfRP8lN7R0lAiEAhuekvlczx9fChuDmG5eju1wWfFibmGo8HOuXkgyN4v0="}]},"_npmUser":{"name":"cm3tahkuh","email":"markplay13498@gmail.com"},"directories":{},"maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-tournament-brackets_1.1.6_1774974076963_0.6172585836032665"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-07T17:49:45.648Z","modified":"2026-03-31T16:21:17.261Z","1.1.0":"2025-11-07T17:49:45.950Z","1.1.1":"2025-11-07T17:58:30.831Z","1.1.2":"2025-11-07T18:36:30.761Z","1.1.3":"2025-12-10T14:14:08.015Z","1.1.4":"2025-12-10T14:35:08.308Z","1.1.5":"2026-03-30T11:21:23.758Z","1.1.6":"2026-03-31T16:21:17.146Z"},"bugs":{"url":"https://github.com/cm3tahkuh/react-tournament-brackets/issues"},"author":{"name":"Omar ElGaml"},"license":"ISC","homepage":"https://github.com/cm3tahkuh/react-tournament-brackets#readme","repository":{"type":"git","url":"git+https://github.com/cm3tahkuh/react-tournament-brackets.git"},"description":"A react component to visualize bracket leaderboards","maintainers":[{"name":"cm3tahkuh","email":"markplay13498@gmail.com"}],"readme":"<!-- PROJECT SHIELDS -->\n<!--\n*** I'm using markdown \"reference style\" links for readability.\n*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).\n*** See the bottom of this document for the declaration of the reference variables\n*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.\n*** https://www.markdownguide.org/basic-syntax/#reference-style-links\n-->\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n\n\n<!-- PROJECT LOGO -->\n<br />\n<p align=\"center\">\n  <!-- <a href=\"https://github.com/cm3tahkuh/react-tournament-brackets\">\n    <img src=\"images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\">\n  </a> -->\n\n  <h3 align=\"center\">React Tournament Brackets</h3>\n\n  <p align=\"center\">\n    A straightforward implementation of single eliminations and double eliminations brackets in react\n    <br />\n    <a href=\"https://sleepy-kare-d8538d.netlify.app/?path=/story/components-bracket--bracket\"><strong>Explore the storybook »</strong></a>\n    <br />\n    <br />\n    <a href=\"https://sleepy-kare-d8538d.netlify.app/?path=/story/components-bracket--bracket\">View Live Demo</a>\n    ·\n    <a href=\"https://github.com/cm3tahkuh/react-tournament-brackets/issues\">Report Bug</a>\n    ·\n    <a href=\"https://github.com/cm3tahkuh/react-tournament-brackets/issues\">Request Feature</a>\n  </p>\n</p>\n\n\n\n<!-- TABLE OF CONTENTS -->\n<details open=\"open\">\n  <summary>Table of Contents</summary>\n  <ol>\n    <li>\n      <a href=\"#about-the-project\">About The Project</a>\n      <ul>\n        <li><a href=\"#built-with\">Built With</a></li>\n      </ul>\n    </li>\n    <li>\n      <a href=\"#getting-started\">Getting Started</a>\n      <ul>\n        <li><a href=\"#installation\">Installation</a></li>\n        <li><a href=\"#basic-usage\">Basic Usage</a></li>\n        <li><a href=\"#data-structures\">Data structures</a></li>\n        <li><a href=\"#theming-and-styling\">Theming and styling</a></li>\n      </ul>\n    </li>\n    <li><a href=\"#contributing\">Contributing</a></li>\n    <li><a href=\"#acknowledgements\">Acknowledgements</a></li>\n  </ol>\n</details>\n\n\n\n<!-- ABOUT THE PROJECT -->\n## About The Project\n- Screenshot Of single elimination bracket out of the box\n[![Single elimination screenshot][single-bracket-screenshot]][single-demo-url]\n- Screenshot Of double elimination bracket out of the box\n[![Double elimination screenshot][double-bracket-screenshot]][double-demo-url]\n- Screenshot Of single elimination bracket with third place match\n[![Third place match screenshot][third-place-screenshot]][single-demo-url]\n- Screenshot Of single elimination bracket with winners column (1st, 2nd, 3rd place)\n[![Winners column screenshot][winners-column-screenshot]][single-demo-url]\n- Screenshot Theme example\n[![Screenshot theme][screenshot-theme-screenshot]][single-demo-url]\n\nI was scouring the world wide web for a good component library for visualizing single elimination brackets or double elimination brackets but most of them had complicated data structures or didn't allow for easy styling, and so I had to build my own, and decided to share it with the world.\n### Built With\n\nYou only need to have react installed in your project to use this project.\n* [React](https://reactjs.org/)\n* [Styled Components](https://styled-components.com/)\n\n\n**Note:** default browser css is reset using the [minireset.css package](https://github.com/jgthms/minireset.css/) in the storybook demos. To fully control what the match component looks like you can build and supply your own view component for it \n## Getting Started\n### Installation\n  This project is hosted on the public npm registry, here's the [link to the npm page](https://www.npmjs.com/package/@cm3tahkuh/react-tournament-brackets)\n  ```sh\n  npm install @cm3tahkuh/react-tournament-brackets\n  ```\n\n<!-- USAGE EXAMPLES -->\n## Basic Usage\n\n### Basics of the library\n`import { SingleEliminationBracket, DoubleEliminationBracket, Match, MATCH_STATES, SVGViewer } from '@cm3tahkuh/react-tournament-brackets';`\n| Component     | Description   |\n| ------------- |:-------------|\n| SingleEliminationBracket | Component for displaying single elimination bracket |\n| DoubleEliminationBracket | Component for displaying double elimination bracket |\n| Match                    | Default component for rendering matches that can be overridden |\n| MATCH_STATES             | Constant containing enum for Match states and Participants statuses |\n| SVGViewer                | Optional component for displaying the bracket in a fixed size window with panning and zooming functionality |\n\n### Using the components\nThis component generates an SVG of all your bracket matches, you can use the supplied optional component `<SVGViewer />` like in the following example to wrap the SVG in a fixed size window with panning and zooming functionality, Note that you're also free to come up with your own solution for allowing the user to navigate giant brackets with ease.\n```js\nimport { SingleEliminationBracket, DoubleEliminationBracket, Match, SVGViewer } from '@cm3tahkuh/react-tournament-brackets';\nexport const DoubleElimination = () => (\n  <DoubleEliminationBracket\n    matches={matches}\n    matchComponent={Match}\n    svgWrapper={({ children, ...props }) => (\n      <SVGViewer width={500} height={500} {...props}>\n        {children}\n      </SVGViewer>\n    )}\n  />\n);\nexport const SingleElimination = () => (\n  <SingleEliminationBracket\n    matches={matches}\n    matchComponent={Match}\n    svgWrapper={({ children, ...props }) => (\n      <SVGViewer width={500} height={500} {...props}>\n        {children}\n      </SVGViewer>\n    )}\n  />\n);\n```\n\n- Single elimination brackets now support displaying a third place match and a winners column showing final placements (1st, 2nd, 3rd place)\n\n[![Third place match][third-place-screenshot]][single-demo-url]\n[![Winners column][winners-column-screenshot]][single-demo-url]\n\n```js\nimport { SingleEliminationBracket, Match, SVGViewer } from '@g-loot/react-tournament-brackets';\n\nexport const SingleEliminationWithThirdPlace = () => (\n  <SingleEliminationBracket\n    matches={matches}\n    matchComponent={Match}\n    showThirdPlace={true}      // Display third place match below the final\n    showWinnersColumn={true}   // Display winners column (1st, 2nd, 3rd place) to the right\n    svgWrapper={({ children, ...props }) => (\n      <SVGViewer width={500} height={500} {...props}>\n        {children}\n      </SVGViewer>\n    )}\n  />\n);\n```\n\n- If you want the `SVGViewer` to fit it's container you will need some sort of hook to achieve that, like [useWindowSize()](https://usehooks.com/useWindowSize/), [useComponentSize](https://github.com/rehooks/component-size) or your own custom solution\n```js\nimport { DoubleEliminationBracket, Match, SVGViewer } from '@cm3tahkuh/react-tournament-brackets';\n\nexport const DoubleElimination = () => {\n  const [width, height] = useWindowSize();\n  const finalWidth = Math.max(width - 50, 500);\n  const finalHeight = Math.max(height - 100, 500);\n  return (\n    <DoubleEliminationBracket\n      matches={matches}\n      matchComponent={Match}\n      svgWrapper={({ children, ...props }) => (\n        <SVGViewer width={finalWidth} height={finalHeight} {...props}>\n          {children}\n        </SVGViewer>\n      )}\n    />\n  );\n};\n```\n_For more examples, please refer to the [Storybook][demo-url]_\n\n### Data structures\n- Single Eliminations `matches` prop structure\n```json\n[\n  ...,\n  {\n    \"id\": 260005,\n    \"name\": \"Final - Match\",\n    \"nextMatchId\": null, // Id for the nextMatch in the bracket, if it's final match it must be null OR undefined\n    \"tournamentRoundText\": \"4\", // Text for Round Header\n    \"startTime\": \"2021-05-30\",\n    \"state\": \"DONE\", // 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY' | 'DONE' | 'SCORE_DONE' Only needed to decide walkovers and if teamNames are TBD (to be decided)\n    \"participants\": [\n      {\n        \"id\": \"c016cb2a-fdd9-4c40-a81f-0cc6bdf4b9cc\", // Unique identifier of any kind\n        \"resultText\": \"WON\", // Any string works\n        \"isWinner\": false,\n        \"status\": null, // 'PLAYED' | 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY' | null\n        \"name\": \"giacomo123\"\n      },\n      {\n        \"id\": \"9ea9ce1a-4794-4553-856c-9a3620c0531b\",\n        \"resultText\": null,\n        \"isWinner\": true,\n        \"status\": null, // 'PLAYED' | 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY'\n        \"name\": \"Ant\"\n      }\n    ]\n  }\n  ...\n]\n\n```\n- Single Eliminations with Third Place Match and Winners Column\nTo enable the third place match and winners column, you need to:\n  1. Add a match with `isThirdPlace: true` or set `tournamentRoundText` to match \"third\" or \"3rd place\"\n  2. Set `showThirdPlace={true}` and `showWinnersColumn={true}` props on `SingleEliminationBracket`\n```json\n[\n  ...,\n  {\n    \"id\": 3,\n    \"name\": \"Grand Final\",\n    \"nextMatchId\": null,\n    \"tournamentRoundText\": \"Final\",\n    \"state\": \"DONE\",\n    \"participants\": [\n      {\n        \"id\": \"team-a\",\n        \"name\": \"Team A\",\n        \"isWinner\": true,\n        \"resultText\": \"3\"\n      },\n      {\n        \"id\": \"team-b\",\n        \"name\": \"Team B\",\n        \"isWinner\": false,\n        \"resultText\": \"2\"\n      }\n    ]\n  },\n  {\n    \"id\": 4,\n    \"name\": \"Third Place\",\n    \"nextMatchId\": null,\n    \"tournamentRoundText\": \"3rd Place\",\n    \"state\": \"DONE\",\n    \"isThirdPlace\": true,\n    \"participants\": [\n      {\n        \"id\": \"team-c\",\n        \"name\": \"Team C\",\n        \"isWinner\": true,\n        \"resultText\": \"2\"\n      },\n      {\n        \"id\": \"team-d\",\n        \"name\": \"Team D\",\n        \"isWinner\": false,\n        \"resultText\": \"1\"\n      }\n    ]\n  }\n]\n```\n\n- Double Eliminations `matches` prop structure\n```json\n{\n  \"upper\": [\n    ...,\n    {\n      \"id\": 260006, // Unique identifier of any kind\n      \"name\": \"Semi Final - Match\",\n      \"nextMatchId\": null,  // Id for the next match in upper bracket, if it's final match it must be null OR undefined\n      \"nextLooserMatchId\": null,  // Id for the next match in lower bracket, if it's final match or a lower bracket match it must be null OR undefined\n      \"startTime\": \"2021-05-30\",\n      \"state\": \"DONE\", // 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY' | 'DONE' | 'SCORE_DONE' Only needed to decide walkovers and if teamNames are TBD (to be decided)\n      \"participants\": [\n        {\n          \"id\": \"c016cb2a-fdd9-4c40-a81f-0cc6bdf4b9cc\", // Unique identifier of any kind\n          \"resultText\": \"WON\", // Any string works\n          \"isWinner\": false,\n          \"status\": null, // 'PLAYED' | 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY' | null\n          \"name\": \"giacomo123\"\n        },\n        {\n          \"id\": \"9ea9ce1a-4794-4553-856c-9a3620c0531b\",\n          \"resultText\": \"LOST\", // Any string works\n          \"isWinner\": true,\n          \"status\": null, // 'PLAYED' | 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY'\n          \"name\": \"Ant\"\n        }\n      ]\n    }\n    ...\n  ],\n  \"lower\": [\n    ...,\n    {\n      \"id\": 260005,\n      \"name\": \"Semi Final - Match\",\n      \"nextMatchId\": 260006,\n      \"nextLooserMatchId\": null,\n      \"tournamentRoundText\": \"4\",\n      \"startTime\": \"2021-05-30\",\n      \"state\": \"DONE\", // 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY' | 'DONE' | 'SCORE_DONE' Only needed to decide walkovers and if teamNames are TBD (to be decided)\n      \"participants\": [\n        {\n          \"id\": \"c016cb2a-fdd9-4c40-a81f-0cc6bdf4b9cc\", // Unique identifier of any kind\n          \"resultText\": \"WON\", // Any string works\n          \"isWinner\": false,\n          \"status\": null, // 'PLAYED' | 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY' | null\n          \"name\": \"giacomo123\"\n        },\n        {\n          \"id\": \"9ea9ce1a-4794-4553-856c-9a3620c0531b\",\n          \"resultText\": null,\n          \"isWinner\": true,\n          \"status\": null, // 'PLAYED' | 'NO_SHOW' | 'WALK_OVER' | 'NO_PARTY'\n          \"name\": \"Ant\"\n        }\n      ]\n    }\n    ...\n  ]\n}\n```\n- Double Eliminations `matches` prop structure with double finals, Keep the same structure and add a nextMatchId + nextLooserMatchId pointing to a new match in the same bracket (the finals can be in upper or in lower bracket) _For more examples of valid double finals data, check out the [mock data folder](https://github.com/cm3tahkuh/react-tournament-brackets/tree/master/src/mock-data) specifically  [data-double-last-game-lower.ts](https://github.com/cm3tahkuh/react-tournament-brackets/tree/master/src/mock-data/data-double-last-game-lower.ts) and [data-double-last-game-upper-double-playoffs.ts](https://github.com/cm3tahkuh/react-tournament-brackets/tree/master/src/mock-data/data-double-last-game-upper-double-playoffs.ts) _\n```json\n{\n  [upper|lower]: [\n    ...,\n    {\n      \"id\": \"WB R5 M1\",\n      \"name\": \"WB R5 M1\",\n      \"nextMatchId\": \"WB R6 M1\",\n      \"nextLooserMatchId\": \"WB R6 M1\",\n      \"startTime\": null,\n      \"tournamentRound\": \"R5\",\n      \"state\": \"SCORE_DONE\",\n      \"participants\": [\n        {\n          \"id\": \"ddfee063-adde-4192-95d2-203eb2ebb8f7\",\n          \"resultText\": \"\",\n          \"isWinner\": false,\n          \"status\": \"PLAYED\",\n          \"name\": \"#1\"\n        }\n      ]\n    },\n    {\n      \"id\": \"WB R6 M1\",\n      \"name\": \"WB R6 M1\",\n      \"nextMatchId\": null,\n      \"nextLooserMatchId\": null,\n      \"startTime\": null,\n      \"tournamentRound\": \"R6\",\n      \"state\": \"SCORE_DONE\",\n      \"participants\": []\n    }\n    ...,\n  ]\n}\n\n\n```\n- Match / Participant States are defined in the exported constant `MATCH_STATES`\n```js\nimport { MATCH_STATES } from '@cm3tahkuh/react-tournament-brackets';\nconsole.log(MATCH_STATES);\n// {\n//   PLAYED: 'PLAYED',\n//   NO_SHOW: 'NO_SHOW',\n//   WALK_OVER: 'WALK_OVER',\n//   NO_PARTY: 'NO_PARTY',\n//   DONE: 'DONE',\n//   SCORE_DONE: 'SCORE_DONE',\n// };\n\n```\n\n_For more examples of accepted data, check out the [mock data folder](https://github.com/cm3tahkuh/react-tournament-brackets/tree/master/src/mock-data)_\n\n\n## Theming and Styling\nThis component's default theme is the dark theme in the screenshot, you can use the function `createTheme` which is exported from the library to create a theme and then pass it to either single or double bracket on the `theme` prop\n\n### Available Themes\nThe library includes several pre-built themes:\n- **Default Theme**: Dark theme with blue accents (default)\n- **White Theme**: Clean white theme with neutral colors\n- **Gloot Theme**: Purple-themed dark theme\n- **Screenshot Theme**: Light blue theme with screenshot-like appearance, perfect for documentation and presentations\n\n[![Screenshot Theme][screenshot-theme-screenshot]][single-demo-url]\n\n#### Using Pre-built Themes\nIf you want to use a pre-built theme like ScreenshotTheme, you can import it from the library (if exported) or create it using `createTheme`:\n```js\nimport { SingleEliminationBracket, Match, SVGViewer, createTheme } from '@cm3tahkuh/react-tournament-brackets';\n\nconst ScreenshotTheme = createTheme({\n  textColor: { main: '#0F172A', highlighted: '#0B3A75', dark: '#1E293B' },\n  matchBackground: { wonColor: '#E6F0FF', lostColor: '#F0F6FF' },\n  score: {\n    background: { wonColor: '#D4E6FF', lostColor: '#D4E6FF' },\n    text: { highlightedWonColor: '#0B3A75', highlightedLostColor: '#0B3A75' },\n  },\n  border: { color: '#B7C5F3', highlightedColor: '#334155' },\n  roundHeader: { backgroundColor: '#CFE3FF', fontColor: '#0F172A' },\n  roundHeaders: { background: '#CFE3FF' },\n  connectorColor: '#334155',\n  connectorColorHighlight: '#1F2937',\n  svgBackground: '#E6F0FF',\n});\n\nexport const ScreenshotThemeBracket = () => (\n  <SingleEliminationBracket\n    matches={matches}\n    matchComponent={Match}\n    theme={ScreenshotTheme}\n    options={{\n      style: {\n        roundHeader: {\n          backgroundColor: ScreenshotTheme.roundHeader.backgroundColor,\n          fontColor: ScreenshotTheme.roundHeader.fontColor,\n        },\n        connectorColor: ScreenshotTheme.connectorColor,\n        connectorColorHighlight: ScreenshotTheme.connectorColorHighlight,\n      },\n    }}\n    svgWrapper={({ children, ...props }) => (\n      <SVGViewer\n        background={ScreenshotTheme.svgBackground}\n        SVGBackground={ScreenshotTheme.svgBackground}\n        width={500}\n        height={500}\n        {...props}\n      >\n        {children}\n      </SVGViewer>\n    )}\n  />\n);\n```\n\nA few notes: \n- Some colors like the roundHeaders, and connectors aren't tied to the theme yet, you'll need to style those through the `options` prop manually for now, In the very near future they will be tied to the theme as well!\n#### Full Example of custom theming:\n```js\nimport { SingleEliminationBracket, Match, SVGViewer, createTheme } from '@cm3tahkuh/react-tournament-brackets';\n\nconst WhiteTheme = createTheme({\n  textColor: { main: '#000000', highlighted: '#07090D', dark: '#3E414D' },\n  matchBackground: { wonColor: '#daebf9', lostColor: '#96c6da' },\n  score: {\n    background: { wonColor: '#87b2c4', lostColor: '#87b2c4' },\n    text: { highlightedWonColor: '#7BF59D', highlightedLostColor: '#FB7E94' },\n  },\n  border: {\n    color: '#CED1F2',\n    highlightedColor: '#da96c6',\n  },\n  roundHeader: { backgroundColor: '#da96c6', fontColor: '#000' },\n  connectorColor: '#CED1F2',\n  connectorColorHighlight: '#da96c6',\n  svgBackground: '#FAFAFA',\n});\n\nexport const WhiteThemeBracket = () => {\n  const [width, height] = useWindowSize();\n  const finalWidth = Math.max(width - 50, 500);\n  const finalHeight = Math.max(height - 100, 500);\n\n  return (\n    <SingleEliminationBracket\n      matches={simpleSmallBracket}\n      matchComponent={Match}\n      theme={WhiteTheme}\n      options={{\n        style: {\n          roundHeader: {\n            backgroundColor: WhiteTheme.roundHeader.backgroundColor,\n            fontColor: WhiteTheme.roundHeader.fontColor,\n          },\n          connectorColor: WhiteTheme.connectorColor,\n          connectorColorHighlight: WhiteTheme.connectorColorHighlight,\n        },\n      }}\n      svgWrapper={({ children, ...props }) => (\n        <SvgViewer\n          background={WhiteTheme.svgBackground}\n          SVGBackground={WhiteTheme.svgBackground}\n          width={finalWidth}\n          height={finalHeight}\n          {...props}\n        >\n          {children}\n        </SvgViewer>\n      )}\n    />\n  );\n};\n```\n### If themes aren't enough for you you can always supply your own Match view component and use the props passed to it to override the match view rendering, Again you'll need to style the round headers and connector lines using `options` prop\n\n#### Basic example of custom match component\n```js\nimport { SingleEliminationBracket, SVGViewer } from '@cm3tahkuh/react-tournament-brackets';\n\nexport const CustomMatchBracket = () => {\n  const [width, height] = useWindowSize();\n  const finalWidth = Math.max(width - 50, 500);\n  const finalHeight = Math.max(height - 100, 500);\n  return (\n    <SingleEliminationBracket\n      matches={simpleSmallBracket}\n      options={{\n        style: {\n          roundHeader: { backgroundColor: '#AAA' },\n          connectorColor: '#FF8C00',\n          connectorColorHighlight: '#000',\n        },\n      }}\n      svgWrapper={({ children, ...props }) => (\n        <SvgViewer\n          background=\"#FFF\"\n          SVGBackground=\"#FFF\"\n          width={finalWidth}\n          height={finalHeight}\n          {...props}\n        >\n          {children}\n        </SvgViewer>\n      )}\n      matchComponent={({\n        match,\n        onMatchClick,\n        onPartyClick,\n        onMouseEnter,\n        onMouseLeave,\n        topParty,\n        bottomParty,\n        topWon,\n        bottomWon,\n        topHovered,\n        bottomHovered,\n        topText,\n        bottomText,\n        connectorColor,\n        computedStyles,\n        teamNameFallback,\n        resultFallback,\n      }) => (\n        <div\n          style={{\n            display: 'flex',\n            flexDirection: 'column',\n            justifyContent: 'space-around',\n            color: '#000',\n            width: '100%',\n            height: '100%',\n          }}\n        >\n          <div\n            onMouseEnter={() => onMouseEnter(topParty.id)}\n            style={{ display: 'flex' }}\n          >\n            <div>{topParty.name || teamNameFallback}</div>\n            <div>{topParty.resultText ?? resultFallback(topParty)}</div>\n          </div>\n          <div\n            style={{ height: '1px', width: '100%', background: '#FF8C00' }}\n          />\n          <div\n            onMouseEnter={() => onMouseEnter(bottomParty.id)}\n            style={{ display: 'flex' }}\n          >\n            <div>{bottomParty.name || teamNameFallback}</div>\n            <div>{bottomParty.resultText ?? resultFallback(topParty)}</div>\n          </div>\n        </div>\n      )}\n    />\n  );\n};\n```\n\n\n_For more examples, checkout the [live storybook][demo-url]_\n\n\n\n<!-- LICENSE -->\n## License\n\nDistributed under the GNU LGPL v2.1 License. See `LICENSE` for more information.\n\n\n\n<!-- CONTRIBUTING -->\n## Contributing\n\nContributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n\n<!-- ACKNOWLEDGEMENTS -->\n## Acknowledgements\n* Inspiration for allowing user to theme the bracket utlizing styled-components wthout exposing the library from [React Data Table Component](https://github.com/jbetancur/react-data-table-component/)\n* Library used for the optional component SVGViewer for zooming and panning the bracket [React SVG Pan Zoom](https://github.com/chrvadala/react-svg-pan-zoom)\n\n\n\n\n\n<!-- MARKDOWN LINKS & IMAGES -->\n<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->\n[contributors-shield]: https://img.shields.io/github/contributors/cm3tahkuh/react-tournament-brackets.svg?style=for-the-badge\n[contributors-url]: https://github.com/cm3tahkuh/react-tournament-brackets/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/cm3tahkuh/react-tournament-brackets.svg?style=for-the-badge\n[forks-url]: https://github.com/cm3tahkuh/react-tournament-brackets/network/members\n[stars-shield]: https://img.shields.io/github/stars/cm3tahkuh/react-tournament-brackets.svg?style=for-the-badge\n[stars-url]: https://github.com/cm3tahkuh/react-tournament-brackets/stargazers\n[issues-shield]: https://img.shields.io/github/issues/cm3tahkuh/react-tournament-brackets.svg?style=for-the-badge\n[issues-url]: https://github.com/cm3tahkuh/react-tournament-brackets/issues\n[single-bracket-screenshot]: images/screenshot_single.png\n[double-bracket-screenshot]: images/screenshot_double.png\n[third-place-screenshot]: images/screenshot_third_place.png\n[winners-column-screenshot]: images/screenshot_winners_column.png\n[screenshot-theme-screenshot]: images/screenshot_theme.png\n\n[single-demo-url]: https://sleepy-kare-d8538d.netlify.app/?path=/story/components-bracket--bracket\n[double-demo-url]: https://sleepy-kare-d8538d.netlify.app/?path=/story/components-doubleelim--double-elimination\n","readmeFilename":"readme.md"}