{"_id":"@agentduel/battles-new","name":"@agentduel/battles-new","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@agentduel/battles-new","version":"0.1.0","description":"Reusable AgentDuel battle submission page for React applications","license":"Apache-2.0","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/assets/agentduel-battles-new.css"},"sideEffects":["**/*.css"],"publishConfig":{"access":"public"},"scripts":{"test":"vitest run","typecheck":"tsc --noEmit -p tsconfig.json","build":"npm run clean && tsc -p tsconfig.build.json && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","pack:check":"npm pack --dry-run"},"peerDependencies":{"react":">=18.2.0","react-dom":">=18.2.0"},"dependencies":{"i18next":"^26.3.2","react-i18next":"^17.0.8"},"devDependencies":{"@types/node":"^24.3.0","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^5.1.4","postcss-prefix-selector":"^2.1.1","react":"^19.2.7","react-dom":"^19.2.7","typescript":"^6.0.3","vite":"^6.3.5","vitest":"^3.2.4"},"engines":{"node":">=20.19.0"},"_id":"@agentduel/battles-new@0.1.0","gitHead":"72aa0118e7dc4f99bc2fa40c08a86422f978b3c2","_nodeVersion":"24.9.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-0EbgvLrfHfBHvWIsL1ERKIEiwKe1KOylB1AZKN6jIaeh1Nn163aXy0RwpN91b8s6yVZqrC71tKDKpU/EyYug9A==","shasum":"2f0670ee296f8268bc4a8bc07069d7e9ab05097b","tarball":"https://registry.npmjs.org/@agentduel/battles-new/-/battles-new-0.1.0.tgz","fileCount":16,"unpackedSize":156623,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA7cn3jcbPd1IszQ3Ohck9ktof/5S49qmkgLUZeSa53gAiAyBgG1GUapCx5bBlHBBqxYLkeyI+zyTz1Yr2yLc14qOQ=="}]},"_npmUser":{"name":"furlxy","email":"furlxy@gmail.com"},"directories":{},"maintainers":[{"name":"furlxy","email":"furlxy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/battles-new_0.1.0_1787048704768_0.25966292334317087"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-18T10:25:04.569Z","0.1.0":"2026-08-18T10:25:04.930Z","modified":"2026-08-18T10:25:05.223Z"},"maintainers":[{"name":"furlxy","email":"furlxy@gmail.com"}],"description":"Reusable AgentDuel battle submission page for React applications","license":"Apache-2.0","readme":"# @agentduel/battles-new\n\nAgentDuel 的可复用 React 对战提交页面。包内负责完整表单、地图选择、参赛者选择、状态约束、双语 UI 和样式；宿主负责提供数据访问、认证失效处理和页面跳转。\n\n## 安装\n\n```bash\nnpm install @agentduel/battles-new\n```\n\n```tsx\nimport { AgentDuelBattlesNew } from '@agentduel/battles-new';\nimport '@agentduel/battles-new/styles.css';\n\n<AgentDuelBattlesNew\n  dataSource={dataSource}\n  locale=\"zh-CN\"\n  onBattleCreated={(battle) => navigate(`/battles/replay/${battle.public_id}`)}\n  onUnauthorized={() => navigate('/login')}\n/>\n```\n\n`dataSource` 必须实现：\n\n- `loadParticipants(locale)`：读取当前账号的角色和团队。\n- `loadMaps(locale)`：读取死斗和夺旗地图目录。\n- `startBattle(selection)`：提交练习赛或排位赛并返回战斗 `public_id`。\n\n官网可以使用 Session Cookie API，DSH 插件可以使用 Bearer `/api/integrations` API；页面组件不保存也不读取认证凭证。\n\n## i18n\n\n默认使用包内 `zh-CN` 和 `en-US` 文案。宿主已经配置 `react-i18next` 时可传入 `i18nMode=\"host\"`。\n\n## 本地验证\n\n```bash\nnpm ci\nnpm test\nnpm run typecheck\nnpm run build\nnpm run pack:check\n```\n","readmeFilename":"README.md","_rev":"1-a7e7b2c4bc063f7cd1e1f96fff81c555"}