{"_id":"@pixygon/chatbot-react","name":"@pixygon/chatbot-react","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@pixygon/chatbot-react","version":"0.1.0","_id":"@pixygon/chatbot-react@0.1.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"3077bfb5cb2efd55e9f07a71c1efbb78c5566273","unpackedSize":68112,"fileCount":5,"integrity":"sha512-alZy8Z/jMDQ4VD7rxpsKhQ8K+Kz6wUztb+CDcFQab5GEraliGxdu0iuRsN44vJkT6qoFUelxdYuY857MTrPqYA==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.1.0.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"b2799cddd21a347a7be1fdc345a0c4a98780b706","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.12.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.1.0_1781189840367_0.4888236064436591","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@pixygon/chatbot-react","version":"0.1.1","_id":"@pixygon/chatbot-react@0.1.1","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"e7f3d31197857a5500ec906f1bcd58c84245ed26","unpackedSize":68713,"fileCount":5,"integrity":"sha512-h7WO2VIdpD5VoRMhztde+Od6p97TgVX6AWC/qxcipj0Mdwcq6E+ebN5DYJNnamgz1pcwuRSCbJQVH8yPyL4J2w==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.1.1.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"b2799cddd21a347a7be1fdc345a0c4a98780b706","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.12.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.1.1_1781190913331_0.3379030546438755","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@pixygon/chatbot-react","version":"0.1.2","_id":"@pixygon/chatbot-react@0.1.2","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"91023351c96734a035729117b9878aacdb0c2edf","unpackedSize":68603,"fileCount":5,"integrity":"sha512-8Eeecwl1TTcSlnGcko3glnGrrnuv0n0Qxpu3kSBbLQ+WVnsPOX35+BGSWrp3b4FNNpmVXuq1yDkR6Fyb8zZedw==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.1.2.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"b2799cddd21a347a7be1fdc345a0c4a98780b706","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.12.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.1.2_1781191055659_0.11188598792203974","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@pixygon/chatbot-react","version":"0.1.3","_id":"@pixygon/chatbot-react@0.1.3","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"09dfd1737d63463be948142b9cd728f07cb54e1d","unpackedSize":71117,"fileCount":5,"integrity":"sha512-fA2r+E34uRRDs/78FQupbOvpV0o1/d+nEDt4n4pRdbtioNLcMkRIgxJwCiSap2+1hEcoy+HdRuD3tFxjbgK7zA==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.1.3.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"b2799cddd21a347a7be1fdc345a0c4a98780b706","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.12.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.1.3_1781191364256_0.25131087722775614","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@pixygon/chatbot-react","version":"0.1.4","_id":"@pixygon/chatbot-react@0.1.4","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"84fa799d27106ca23aa593614493bd964ce266ee","unpackedSize":81282,"fileCount":5,"integrity":"sha512-/H21QYChX0NQZ5Z4lKlBxdc8ACRdt2sAiBgRHjXdnTpSl0Qctsvp0LNp9+ZGvUro1e39B3Qt6oSUtlA/6BMLRg==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.1.4.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"b2799cddd21a347a7be1fdc345a0c4a98780b706","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.12.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.1.4_1781192822987_0.5190431282162034","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@pixygon/chatbot-react","version":"0.1.5","_id":"@pixygon/chatbot-react@0.1.5","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"700a93fa07a5c3a54dd99680c8013c1c61011369","unpackedSize":83424,"fileCount":5,"integrity":"sha512-mQonUF40RGJg3opneewoYa5buLUscCyi3pidLaWHTZ8xnur/qz7/3DmE5eeA2W/OSQq85g3w8O5Tzm3ELdEOnQ==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.1.5.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"b2799cddd21a347a7be1fdc345a0c4a98780b706","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.16.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"26.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.1.5_1781360661734_0.3652030597599145","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@pixygon/chatbot-react","version":"0.2.0","_id":"@pixygon/chatbot-react@0.2.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"df2213b029719acb0540c5f7d58ee3047245c78b","unpackedSize":94012,"fileCount":5,"integrity":"sha512-RI0WYa0o9AeTfx03cV9kQWt/Ej4JMkE5bM1VR6javyPHtkj/h7iUfMHYz8YhUE2OV+As7AkAP5luMaWr2D1Oiw==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.2.0.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"d464e7f9801bea6a4501e3ce8940969ee349f0a4","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.16.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"26.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.2.0_1781690787668_0.24975100839214415","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@pixygon/chatbot-react","version":"0.3.0","_id":"@pixygon/chatbot-react@0.3.0","maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"dist":{"shasum":"5d70ef77c9d6fb33c5bfa67092d220aad472ff12","unpackedSize":77177,"fileCount":5,"integrity":"sha512-MHfBRaGgF3ueWpR6iB3XHsUTdxNM99nHcUV82qTjcJ3HmidDrabhdKlfRahq4b4NvdOmjj4J3TQ1K14jfgxWDw==","tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.3.0.tgz"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./chatbot.js":"./public/chatbot.js"},"gitHead":"d464e7f9801bea6a4501e3ce8940969ee349f0a4","scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"_npmVersion":"11.16.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","directories":{},"_nodeVersion":"26.2.0","dependencies":{"@pixygon/knowledge-react":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","react-redux":"^9.2.0","@types/react":"^19.0.1","@mui/material":"^6.2.0","@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@reduxjs/toolkit":"^2.4.0","@types/react-dom":"^19.0.2","@mui/icons-material":"^6.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0","@mui/material":"^6.0.0 || ^7.0.0","@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@reduxjs/toolkit":"^2.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chatbot-react_0.3.0_1781698330054_0.6852446928683598","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@pixygon/chatbot-react","version":"0.4.0","description":"React + MUI pages for the Pixygon chatbot: knowledge base admin, chat, analytics, embeddable widget.","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"},"./chatbot.js":"./public/chatbot.js"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup src/index.tsx --format esm --dts --clean --target es2022 --external react --external react-dom --external @mui/material --external @mui/icons-material --external @reduxjs/toolkit --external react-redux --tsconfig tsconfig.json","typecheck":"tsc --noEmit"},"peerDependencies":{"@emotion/react":"^11.0.0","@emotion/styled":"^11.0.0","@mui/icons-material":"^6.0.0 || ^7.0.0","@mui/material":"^6.0.0 || ^7.0.0","@reduxjs/toolkit":"^2.0.0","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-redux":"^9.0.0"},"devDependencies":{"@emotion/react":"^11.13.5","@emotion/styled":"^11.13.5","@mui/icons-material":"^6.2.0","@mui/material":"^6.2.0","@reduxjs/toolkit":"^2.4.0","@types/react":"^19.0.1","@types/react-dom":"^19.0.2","react":"^19.0.0","react-dom":"^19.0.0","react-redux":"^9.2.0","tsup":"^8.5.0","typescript":"^5.7.0"},"dependencies":{"@pixygon/knowledge-react":"^0.1.0","react-markdown":"^9.0.1","remark-gfm":"^4.0.0"},"gitHead":"ec4c544b8d5a0c64a19352a26feb3182e06488be","_id":"@pixygon/chatbot-react@0.4.0","_nodeVersion":"26.2.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-QAO9r0Gelart7jGqrXE0DHIbaQKeqJKOT7ZJCVOipauHXiphQTyxdaBXE5srnhnBpfOA6zN+25TozwmVg7v3tg==","shasum":"e18eba65cf676583263c2e13589bb0aaffb45e92","unpackedSize":79026,"fileCount":5,"tarball":"https://ppm.pixygon.io/@pixygon/chatbot-react/-/chatbot-react-0.4.0.tgz"},"_npmUser":{"name":"imakestupidgames","email":"anders@pixygon.io"},"directories":{},"maintainers":[{"name":"imakestupidgames","email":"anders@pixygon.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chatbot-react_0.4.0_1784633290278_0.5339819303482236"},"_hasShrinkwrap":false}},"time":{"0.1.0":"2026-06-11T14:57:20.504Z","modified":"2026-09-30T23:30:40.240Z","created":"2026-06-11T14:57:20.504Z","0.1.1":"2026-06-11T15:15:13.529Z","0.1.2":"2026-06-11T15:17:35.798Z","0.1.3":"2026-06-11T15:22:44.400Z","0.1.4":"2026-06-11T15:47:03.151Z","0.1.5":"2026-06-13T14:24:21.852Z","0.2.0":"2026-06-17T10:06:27.835Z","0.3.0":"2026-06-17T12:12:10.184Z","0.4.0":"2026-07-21T11:28:10.426Z"},"readme":"# @pixygon/chatbot-react\n\nReady-to-mount **React 18/19 + MUI 6/7 + RTK Query** pages for the Pixygon\nchatbot stack. Pair with [`@pixygon/chatbot-server`](https://www.npmjs.com/package/@pixygon/chatbot-server)\non the API side.\n\n```\n+----------------------+      +----------------------+\n|   Host React app     |----->| createChatbotComponents()\n|  (your baseApi here) |      +----------------------+\n+----------------------+               |\n                                       v\n       KnowledgePage · ChatPage · ChatAnalyticsPage · EmbedChatPage · ChatbotSettings\n                                       |\n                                       v\n                               HTTP -> chatbot-server\n```\n\nYou configure once at boot, then mount the components in your router or\nsettings tree. Hooks close over the active tenant id, branding, and your\nexisting RTK Query base.\n\n---\n\n## Install\n\n```bash\nnpm install @pixygon/chatbot-react\n```\n\nPeer dependencies the host already has:\n\n| Peer | Range |\n|---|---|\n| `react` / `react-dom` | ^18 or ^19 |\n| `@mui/material` / `@mui/icons-material` | ^6 or ^7 |\n| `@emotion/react` / `@emotion/styled` | ^11 |\n| `@reduxjs/toolkit` | ^2 |\n| `react-redux` | ^9 |\n\nThe host's `baseApi` should include these RTK Query tag types so cache\ninvalidation works:\n\n```ts\ntagTypes: [..., \"Knowledge\", \"ChatConversation\"]\n```\n\n---\n\n## Configure once\n\n```tsx\n// src/chatbot.tsx\nimport { createChatbotComponents } from \"@pixygon/chatbot-react\";\nimport { useParams } from \"react-router\";\nimport { baseApi } from \"@/apis/baseApi\";\nimport { useAppSelector } from \"@/store/store\";\nimport { useGetTenantQuery, useUpdateTenantMutation } from \"@/apis/tenantApi\";\n\nconst chatbot = createChatbotComponents({\n  apiSlice: baseApi,\n  pathPrefix: \"/tenants\",                                   // or \"/companies\"\n  useTenantId: () => useAppSelector((s) => s.global.activeTenantId),\n  apiBase: import.meta.env.VITE_API_URL,                    // public surface origin\n  brand: {\n    name: \"TotalHMS\",\n    tagline: \"Powered by TotalHMS\",\n    primaryColor: \"#8FB7C9\",\n  },\n});\n\nexport const KnowledgePage = chatbot.KnowledgePage;\nexport const ChatPage = chatbot.ChatPage;\nexport const ChatAnalyticsPage = chatbot.ChatAnalyticsPage;\n\n// Small wrapper so the route can hand the slug from useParams down to the page.\nexport function EmbedChatPageRoute() {\n  const { tenantSlug } = useParams();\n  return <chatbot.EmbedChatPage tenantSlug={tenantSlug} />;\n}\n\n// Settings card — host supplies tenant + save handler (Tenant model lives here).\nexport function ChatbotSettings({ tenantId }: { tenantId: string }) {\n  const { data: tenant } = useGetTenantQuery(tenantId);\n  const [updateTenant] = useUpdateTenantMutation();\n  return (\n    <chatbot.ChatbotSettings\n      tenant={tenant ?? null}\n      onSave={(patch) =>\n        updateTenant({ tenantId, patch }).unwrap().then(() => undefined)\n      }\n    />\n  );\n}\n```\n\n## Drop into routes\n\n```tsx\nimport { KnowledgePage, ChatPage, ChatAnalyticsPage, EmbedChatPageRoute } from \"@/chatbot\";\n\n<Route path=\"/embed/chat/:tenantSlug\" element={<EmbedChatPageRoute />} />\n\n<Route element={<DashboardLayout />}>\n  <Route path=\"/knowledge\"       element={<KnowledgePage />} />\n  <Route path=\"/chat\"            element={<ChatPage />} />\n  <Route path=\"/chat-analytics\"  element={<ChatAnalyticsPage />} />\n</Route>\n```\n\n## Drop into a settings page\n\n```tsx\n<ChatbotSettings tenantId={activeTenantId} />\n```\n\n---\n\n## What you get\n\n| Component | Purpose |\n|---|---|\n| `KnowledgePage` | List, paste/upload, delete knowledge documents per tenant |\n| `ChatPage` | Operator chat UI with session-keyed threads and citations |\n| `ChatAnalyticsPage` | KPI tiles · knowledge gaps · top questions · keywords · semantic clusters · cost timeseries · source usage · question drill-down |\n| `EmbedChatPage` | Iframe-friendly anonymous chat for the public surface |\n| `ChatbotSettings` | Per-tenant monthly cost cap + copy-pasteable embed snippet |\n| `ChatLauncher` | Floating bottom-right launcher (fixed FAB) that expands into a compact chat panel. Drop one into your `DashboardLayout` and it's always one click away. |\n\n### Floating launcher\n\n```tsx\nimport { ChatLauncher } from \"@/chatbot\";\n\nexport default function DashboardLayout() {\n  return (\n    <Box sx={{ display: \"flex\", minHeight: \"100vh\" }}>\n      {/* … your nav, app bar, outlet … */}\n      <ChatLauncher />\n    </Box>\n  );\n}\n```\n\nThe launcher closes over `useTenantId` + brand color from your\n`createChatbotComponents` config, so it has no props. It self-positions at\n`bottom: 24, right: 24` with `z-index: 1300` to float above MUI dialogs.\nFull-screen on mobile, fixed 380×580 on desktop.\n\n---\n\n## Embed widget\n\n`chatbot.js` is shipped as a static file inside the package. Drop it in your\napp's `public/` so it's served at `/chatbot.js`:\n\n```bash\ncp node_modules/@pixygon/chatbot-react/public/chatbot.js public/chatbot.js\n```\n\nThen anyone can embed your chatbot on any HTML page:\n\n```html\n<script src=\"https://app.example.com/chatbot.js\"\n        data-tenant-slug=\"acme\"\n        defer></script>\n```\n\nThe widget renders a floating launcher, opens an iframe pointed at\n`/embed/chat/<slug>` on your dashboard, and `postMessage`s a\n`pixygon-chatbot:close` event when the user closes it. The `ChatbotSettings`\ncard auto-generates the snippet with the right URL.\n\n---\n\n## Hooks-only API\n\nSkip the pages if you want to build your own UI:\n\n```ts\nimport { injectChatbotEndpoints } from \"@pixygon/chatbot-react\";\n\nconst {\n  useListDocumentsQuery,\n  useCreateDocumentMutation,\n  useDeleteDocumentMutation,\n  useSendMessageMutation,\n  useGetConversationQuery,\n  useRateMessageMutation,\n  useChatOverviewQuery,\n  useKnowledgeGapsQuery,\n  useSemanticClustersQuery,\n  // ...\n} = injectChatbotEndpoints(baseApi, { pathPrefix: \"/tenants\" });\n```\n\n---\n\n## Troubleshooting\n\n| Symptom | Cause | Fix |\n|---|---|---|\n| `apiSlice` type error | The host's `baseApi` doesn't match the loose `Api<any,…>` type | Use `^0.1.2` or later — the type was widened to accept any host base |\n| Chat send returns 500 with `PIXYGON_AI_UNCONFIGURED` | `PIXYGON_API_KEY` not set on the API host | Add it in the host's env / Coolify |\n| Hooks return `undefined` reducer errors | The host's RTK Query store isn't including the chatbot's injected endpoints | Make sure `apiSlice` you pass is the same instance you mount in `configureStore({ middleware })` |\n| Embed widget never opens | `chatbot.js` wasn't copied to your `public/` | `cp node_modules/@pixygon/chatbot-react/public/chatbot.js public/chatbot.js` |\n| MUI v7 type errors | This package's peer range covers v6 and v7 since `^0.1.1` | Use `^0.1.4` or later — both MUI generations are supported |\n\n## Versioning notes\n\n- `0.1.0` — initial scaffold (file-dep era, requires host workaround for RTK types)\n- `0.1.2` — RTK Query types loosened so concrete host APIs assign cleanly\n- `0.1.3` — README + MUI v7 peer accepted\n- `0.1.4` — added `ChatLauncher` floating widget\n\nNo breaking changes in the 0.1.x line — bumping is safe within minor.\n\n## Companion package\n\n`@pixygon/chatbot-server` (≥0.3.0) is the Express + Mongoose backend these\ncomponents talk to. **All** AI calls flow through PixygonServer's gateway —\nno direct-to-provider bypass — so per-API-key margin reporting on\n`admin.pixygon.io` stays accurate. See its README for the API wire-up.\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}