{"_id":"@amirnapster/chat","_rev":"7-979d985fffe23eca21254556815ce44d","name":"@amirnapster/chat","dist-tags":{"latest":"1.8.3"},"versions":{"1.7.0":{"name":"@amirnapster/chat","version":"1.7.0","_id":"@amirnapster/chat@1.7.0","maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"dist":{"shasum":"1ebc1f89d295817adac5741e54acc2553aa0d6b2","tarball":"https://registry.npmjs.org/@amirnapster/chat/-/chat-1.7.0.tgz","fileCount":5,"integrity":"sha512-8vQTDGFb2RFfJZaBluQ8CzTY+rSl0xym1nYeUFsRUHcQSFt3URO1K3T2Lsgr4PRVTxFILKNFkhq9KdMpdEhjzw==","signatures":[{"sig":"MEYCIQCb+PujdSWUG9tvRfQ4VDbNlpwaTjyqngh2FzS0gLwefwIhAO04kFv+sNvs8bUsJJkzX6p8tZnqjnWJYpcY4epYDa2S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123723},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"f06bd300425de76939d92464422942adfa1183e6","scripts":{"dev":"tsup --watch","lint":"eslint .","pack":"tsup","build":"tsup --watch","build:prod":"tsup"},"sponsor":{"url":"https:rasmio.ir"},"_npmUser":{"name":"amirnapster","email":"amirnapster@live.com"},"_npmVersion":"10.9.4","description":"rasmio chat messaging component","directories":{},"displayName":"@rasmio/chat","sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"zustand":"^4.5.5","remark-gfm":"^4.0.0","react-query":"^3.39.3","react-markdown":"^9.0.1","socket.io-client":"^4.8.0","@tanstack/react-virtual":"^3.10.8"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.2.4","vite":"^5.4.8","dotenv":"^16.4.5","eslint":"^9.11.1","globals":"^15.9.0","@eslint/js":"^9.11.1","typescript":"^5.5.3","@types/node":"^22.7.4","@types/react":"^18.3.10","@types/react-dom":"^18.3.0","typescript-eslint":"^8.7.0","@vitejs/plugin-react-swc":"^3.5.0","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.12"},"peerDependencies":{"axios":"^1.6.2","dayjs":"^1.11.10","react":"^18","md5-hex":"^5.0.0","jalaliday":"^2.3.0","react-dom":"^18","@mui/material":"^5.15.16","@emotion/react":"^11","@iconify/react":"^4","@emotion/styled":"^11","react-hot-toast":"^2.4.1","@mui/icons-material":"^5.15.16","@lottiefiles/react-lottie-player":"^3"},"_npmOperationalInternal":{"tmp":"tmp/chat_1.7.0_1780757827602_0.3891284371009267","host":"s3://npm-registry-packages-npm-production"}},"1.7.16":{"name":"@amirnapster/chat","version":"1.7.16","_id":"@amirnapster/chat@1.7.16","maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"dist":{"shasum":"ac574cc14f7fdfc95c5312a594be507890c01597","tarball":"https://registry.npmjs.org/@amirnapster/chat/-/chat-1.7.16.tgz","fileCount":5,"integrity":"sha512-ElTy0MvLQTISLHkgSdmzc/sbIpjN/3OiR0A/hcs9nb0eBI5YHLtdnLBFQLufzjDJXVtujYmhNKdDI/TcUA8wNw==","signatures":[{"sig":"MEYCIQDA1S8G0VAAQfFUaja1VcWSf5gf2UkbKiCo731XK+TicgIhANRqL3YPpOqS6YD2xKUV90D7vlOAN496wpHHR1BjQqxL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123667},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"15885303c186964542f2cb0a5ae87f2b24e84040","scripts":{"dev":"tsup --watch","lint":"eslint .","pack":"tsup","build":"tsup --watch","build:prod":"tsup"},"sponsor":{"url":"https:rasmio.ir"},"_npmUser":{"name":"amirnapster","email":"amirnapster@live.com"},"_npmVersion":"10.9.4","description":"rasmio chat messaging component","directories":{},"displayName":"@rasmio/chat","sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"zustand":"^4.5.5","remark-gfm":"^4.0.0","react-query":"^3.39.3","react-markdown":"^9.0.1","socket.io-client":"^4.8.0","@tanstack/react-virtual":"^3.14.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.2.4","vite":"^5.4.8","dotenv":"^16.4.5","eslint":"^9.11.1","globals":"^15.9.0","@eslint/js":"^9.11.1","typescript":"^5.5.3","@types/node":"^22.7.4","@types/react":"^19","@types/react-dom":"^19","typescript-eslint":"^8.7.0","@vitejs/plugin-react-swc":"^3.5.0","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.12"},"peerDependencies":{"axios":"^1.6.2","dayjs":"^1.11.10","react":"^19","md5-hex":"^5.0.0","jalaliday":"^2.3.0","react-dom":"^19","@mui/material":"^7","@emotion/react":"^11","@iconify/react":"^4","@emotion/styled":"^11","react-hot-toast":"^2.4.1","@mui/icons-material":"^7","@lottiefiles/react-lottie-player":"^3"},"_npmOperationalInternal":{"tmp":"tmp/chat_1.7.16_1780817428365_0.21540450033921377","host":"s3://npm-registry-packages-npm-production"}},"1.7.17":{"name":"@amirnapster/chat","version":"1.7.17","_id":"@amirnapster/chat@1.7.17","maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"dist":{"shasum":"a99413a38a5d6191eed1793d567f5d24d88920e3","tarball":"https://registry.npmjs.org/@amirnapster/chat/-/chat-1.7.17.tgz","fileCount":6,"integrity":"sha512-uSgTZMj0pYUJbvLCqKw6aQLw/LauOMsax7HfR/KTXH10hPQyTFocVswlfBBDr5bDo2Kmxn8ECyxok2TPeRfoXQ==","signatures":[{"sig":"MEUCIGYYpW7w2L5rtz8NfxO/Al+j/u8JZOn5Wr2vxXUmw+PMAiEAktxGKAYQbMygGTb8YpuHz3DSqT6dIzQ9egnUHnDUTi4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151749},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"8e301b943d6300bff39efebec61ffa72cd88cef2","scripts":{"dev":"tsup --watch","lint":"eslint .","pack":"tsup","build":"tsup --watch","build:prod":"tsup"},"sponsor":{"url":"https:rasmio.ir"},"_npmUser":{"name":"amirnapster","email":"amirnapster@live.com"},"_npmVersion":"10.9.4","description":"rasmio chat messaging component","directories":{},"displayName":"@rasmio/chat","sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"zustand":"^4.5.5","classnames":"^2.5.1","remark-gfm":"^4.0.0","react-query":"^3.39.3","react-markdown":"^9.0.1","socket.io-client":"^4.8.0","@tanstack/react-virtual":"^3.14.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.2.4","vite":"^5.4.8","dotenv":"^16.4.5","eslint":"^9.11.1","globals":"^15.9.0","@eslint/js":"^9.11.1","typescript":"^5.5.3","@types/node":"^22.7.4","@types/react":"^19","@types/react-dom":"^19","typescript-eslint":"^8.7.0","@vitejs/plugin-react-swc":"^3.5.0","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.12"},"peerDependencies":{"axios":"^1.6.2","dayjs":"^1.11.10","react":"^19","md5-hex":"^5.0.0","jalaliday":"^2.3.0","react-dom":"^19","@iconify/react":"^4","react-hot-toast":"^2.4.1","@lottiefiles/react-lottie-player":"^3"},"_npmOperationalInternal":{"tmp":"tmp/chat_1.7.17_1786657486455_0.3258072926190849","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@amirnapster/chat","version":"1.8.0","_id":"@amirnapster/chat@1.8.0","maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"dist":{"shasum":"126accf4940e66510d23685ece0777b7587fd9ec","tarball":"https://registry.npmjs.org/@amirnapster/chat/-/chat-1.8.0.tgz","fileCount":6,"integrity":"sha512-wcrJz4GCUswlIUcT6g6aZQbw57BFxjMg+BA4xSXqFIq8fjILxOHAmWtNXYGTchxwcGdbY4T+ljVcY1SDmGzjSw==","signatures":[{"sig":"MEQCIDTg/7jUhVNCREAC5ljac4PBcSSOuUVI7iV0mo1n8JoPAiBvKeUSb7qXFI/k9GwDy8iHCLOI6cXLWVRAtgbrHAOHlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151645},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"8e301b943d6300bff39efebec61ffa72cd88cef2","scripts":{"dev":"tsup --watch","lint":"eslint .","pack":"tsup","build":"tsup --watch","build:prod":"tsup"},"sponsor":{"url":"https:rasmio.ir"},"_npmUser":{"name":"amirnapster","email":"amirnapster@live.com"},"_npmVersion":"10.9.4","description":"rasmio chat messaging component","directories":{},"displayName":"@rasmio/chat","sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"zustand":"^4.5.5","classnames":"^2.5.1","remark-gfm":"^4.0.0","react-markdown":"^9.0.1","socket.io-client":"^4.8.0","@tanstack/react-query":"^5.101.4","@tanstack/react-virtual":"^3.14.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.2.4","vite":"^5.4.8","dotenv":"^16.4.5","eslint":"^9.11.1","globals":"^15.9.0","@eslint/js":"^9.11.1","typescript":"^5.5.3","@types/node":"^22.7.4","@types/react":"^19","@types/react-dom":"^19","typescript-eslint":"^8.7.0","@vitejs/plugin-react-swc":"^3.5.0","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.12"},"peerDependencies":{"axios":"^1.6.2","dayjs":"^1.11.10","react":"^19","jalaliday":"^2.3.0","react-dom":"^19","react-hot-toast":"^2.4.1","@lottiefiles/react-lottie-player":"^3"},"_npmOperationalInternal":{"tmp":"tmp/chat_1.8.0_1786658415837_0.5200427507728811","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@amirnapster/chat","version":"1.8.1","_id":"@amirnapster/chat@1.8.1","maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"dist":{"shasum":"1f575807b5458cb6e30a788109699410938b5739","tarball":"https://registry.npmjs.org/@amirnapster/chat/-/chat-1.8.1.tgz","fileCount":6,"integrity":"sha512-wmI1FQwhWvMH4okXB31w0L6Fuq6wLU/l9kxB6n4I0EhuxO/GlhiZqtm31DTNLbrFzTBPPcXybrgML29sDiydkg==","signatures":[{"sig":"MEUCIB9LXRidT1fuQ3I+F9uih9sPGgazSrv4XPhVBOLmXADBAiEAnXBSREDKRE+kNF7tKu9Syoywylze7ZOPfteLM/i0/d0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151645},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"65918fb4157bf8343e0964fe96efc5575c58bbfa","scripts":{"dev":"tsup --watch","lint":"eslint .","pack":"tsup","build":"tsup --watch","build:prod":"tsup"},"sponsor":{"url":"https:rasmio.ir"},"_npmUser":{"name":"amirnapster","email":"amirnapster@live.com"},"_npmVersion":"10.9.4","description":"rasmio chat messaging component","directories":{},"displayName":"@rasmio/chat","sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"zustand":"^4.5.5","classnames":"^2.5.1","remark-gfm":"^4.0.0","react-markdown":"^9.0.1","socket.io-client":"^4.8.0","@tanstack/react-query":"^5.101.4","@tanstack/react-virtual":"^3.14.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.2.4","vite":"^5.4.8","dotenv":"^16.4.5","eslint":"^9.11.1","globals":"^15.9.0","@eslint/js":"^9.11.1","typescript":"^5.5.3","@types/node":"^22.7.4","@types/react":"^19","@types/react-dom":"^19","typescript-eslint":"^8.7.0","@vitejs/plugin-react-swc":"^3.5.0","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.12"},"peerDependencies":{"axios":"^1.6.2","dayjs":"^1.11.10","react":"^19","jalaliday":"^2.3.0","react-dom":"^19","react-hot-toast":"^2.4.1","@lottiefiles/react-lottie-player":"^3"},"_npmOperationalInternal":{"tmp":"tmp/chat_1.8.1_1786897621857_0.1549259794697253","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"@amirnapster/chat","version":"1.8.2","_id":"@amirnapster/chat@1.8.2","maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"dist":{"shasum":"1a1698b5d625577a6d08190833ae58540279d0c8","tarball":"https://registry.npmjs.org/@amirnapster/chat/-/chat-1.8.2.tgz","fileCount":6,"integrity":"sha512-/gIAe5C3QWvNcVEHHyykR3AybcwbWxHsVcLBrhte2BTpBOWVT+EPHIui1SXnul5REluUc74GtGxjlWJXWex6oQ==","signatures":[{"sig":"MEUCIGITAGkmxebMypBpSi7ed1W0qzyhOae7vskWelcRfz5OAiEAgUT2KxBDIThzQYa4h01EJxfktKPwCeGPHxgKq0bwWSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151675},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"65918fb4157bf8343e0964fe96efc5575c58bbfa","scripts":{"dev":"tsup --watch","lint":"eslint .","pack":"tsup","build":"tsup --watch","build:prod":"tsup","prepublishOnly":"tsup"},"sponsor":{"url":"https:rasmio.ir"},"_npmUser":{"name":"amirnapster","email":"amirnapster@live.com"},"_npmVersion":"10.9.4","description":"rasmio chat messaging component","directories":{},"displayName":"@rasmio/chat","sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"zustand":"^4.5.5","classnames":"^2.5.1","remark-gfm":"^4.0.0","react-markdown":"^9.0.1","socket.io-client":"^4.8.0","@tanstack/react-query":"^5.101.4","@tanstack/react-virtual":"^3.14.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.2.4","vite":"^5.4.8","dotenv":"^16.4.5","eslint":"^9.11.1","globals":"^15.9.0","@eslint/js":"^9.11.1","typescript":"^5.5.3","@types/node":"^22.7.4","@types/react":"^19","@types/react-dom":"^19","typescript-eslint":"^8.7.0","@vitejs/plugin-react-swc":"^3.5.0","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.12"},"peerDependencies":{"axios":"^1.6.2","dayjs":"^1.11.10","react":"^19","jalaliday":"^2.3.0","react-dom":"^19","react-hot-toast":"^2.4.1","@lottiefiles/react-lottie-player":"^3"},"_npmOperationalInternal":{"tmp":"tmp/chat_1.8.2_1786897787945_0.8268596255256921","host":"s3://npm-registry-packages-npm-production"}},"1.8.3":{"name":"@amirnapster/chat","version":"1.8.3","types":"dist/index.d.ts","main":"dist/index.cjs","module":"dist/index.js","description":"rasmio chat messaging component","contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"sponsor":{"url":"https:rasmio.ir"},"displayName":"@rasmio/chat","scripts":{"build":"tsup --watch","build:prod":"tsup","lint":"eslint .","pack":"tsup","dev":"tsup --watch","prepublishOnly":"tsup"},"dependencies":{"@tanstack/react-query":"^5.101.4","@tanstack/react-virtual":"^3.14.2","classnames":"^2.5.1","react-markdown":"^9.0.1","remark-gfm":"^4.0.0","socket.io-client":"^4.8.0","zustand":"^4.5.5"},"devDependencies":{"@eslint/js":"^9.11.1","@types/node":"^22.7.4","@types/react":"^19","@types/react-dom":"^19","@vitejs/plugin-react-swc":"^3.5.0","dotenv":"^16.4.5","eslint":"^9.11.1","eslint-plugin-react-hooks":"^5.1.0-rc.0","eslint-plugin-react-refresh":"^0.4.12","globals":"^15.9.0","tsup":"8.2.4","typescript":"^5.5.3","typescript-eslint":"^8.7.0","vite":"^5.4.8"},"peerDependencies":{"@lottiefiles/react-lottie-player":"^3","axios":"^1.6.2","dayjs":"^1.11.10","jalaliday":"^2.3.0","react":"^19","react-dom":"^19","react-hot-toast":"^2.4.1"},"type":"module","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"sideEffects":false,"_id":"@amirnapster/chat@1.8.3","gitHead":"0550af50e1fa9a719becfbd39ae2f1f83c08983e","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-bCgIdYjfuzmtydIcRBiUJgfFxsESr5/F67gPOfXKwiKd41cq+15NEnj5IxwsJ1oDaFrBO4oMGloD7BrgfLPmcg==","shasum":"2fc2fdd23d21d215739d35fedd08ba0e76b942df","tarball":"https://registry.npmjs.org/@amirnapster/chat/-/chat-1.8.3.tgz","fileCount":6,"unpackedSize":151675,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCt0pd3gby7jNEoVeFnDo1HgDGc9wK0CFLlMvoT4pb4RAIhAOx4FjBY0D/K68ScO6RlDyvYmGGaAB4a9fB59NA5aTnD"}]},"_npmUser":{"name":"amirnapster","email":"amirnapster@live.com"},"directories":{},"maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chat_1.8.3_1786898511271_0.07096874394258545"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-06T14:57:07.451Z","modified":"2026-08-16T16:41:51.560Z","1.7.0":"2026-06-06T14:57:07.754Z","1.7.16":"2026-06-07T07:30:28.511Z","1.7.17":"2026-08-13T21:44:46.611Z","1.8.0":"2026-08-13T22:00:15.992Z","1.8.1":"2026-08-16T16:27:02.010Z","1.8.2":"2026-08-16T16:29:48.089Z","1.8.3":"2026-08-16T16:41:51.416Z"},"description":"rasmio chat messaging component","contributors":[{"name":"Kioumars Rahimi"},{"name":"Pouriya Babaali"}],"maintainers":[{"name":"amirnapster","email":"amirnapster@live.com"}],"readme":"# `@amirnapster/chat`\r\n\r\nThe Rasmio messenger component. Ships **no CSS and no MUI** — it styles itself\r\nwith Tailwind v4 utility classes that the *host application* compiles.\r\n\r\n## Host contract\r\n\r\nThe package emits classes such as `tw:flex tw:bg-gray-100 tw:rounded-2xl`. For\r\nthem to exist at runtime, the host's Tailwind entry must:\r\n\r\n1. **Use the `tw:` prefix.** Rasmio's `styles/tailwind.css` already does\r\n   (`@import 'tailwindcss/utilities.css' … prefix(tw)`).\r\n\r\n2. **Scan this package's build output.** Because Rasmio's entry uses\r\n   `source(none)`, only explicitly listed trees are scanned, and `node_modules`\r\n   is otherwise skipped:\r\n\r\n   ```css\r\n   @source '../node_modules/@amirnapster/chat/dist';\r\n   ```\r\n\r\n   Without that line the markup renders unstyled — the classes are in the JS,\r\n   but nothing generates the CSS for them. `pnpm check:tw-source` in the app is\r\n   the CI guard for the equivalent rule on app code.\r\n\r\n3. **Define these `@theme` tokens.** They are all already in Rasmio's\r\n   `styles/tailwind.css`, mirrored from `styles/_vars.scss`:\r\n\r\n   | Group    | Tokens used                                                                  |\r\n   | -------- | ---------------------------------------------------------------------------- |\r\n   | Greys    | `gray-40` `gray-50` `gray-60` `gray-100` `gray-130` `gray-200`               |\r\n   | Brand    | `primary` `primary-100` `primary-700` `error` `error-100` `error-700` `error-900` `success` |\r\n   | Surfaces | `paper` `on-surface` `on-surface-variant` `on-primary-container` `outline` `outline-variant` |\r\n   | Alpha    | `black-5` `black-10` `black-20` `black-50` `black-90` `white-10` `white-15` `white-20` `white-30` `white-70` |\r\n   | Type     | `font-rasmio`                                                                |\r\n\r\nEverything else the package uses is stock Tailwind (`animate-pulse`, spacing,\r\nradii), so no further host configuration is needed.\r\n\r\n## Why the host compiles the CSS\r\n\r\nThe alternative — shipping a prebuilt `dist/styles.css` — would mean carrying a\r\nsecond copy of the design tokens in this repo, which then drifts from\r\n`styles/_vars.scss`. Compiling in the host instead means the messenger picks up\r\npalette changes for free and adds nothing to the CSS payload beyond the\r\nutilities it actually uses.\r\n\r\n## Conventions\r\n\r\nThese follow the host app's `CLAUDE.md` §9 so the two codebases read alike.\r\n\r\n- **No inline class strings.** Every Tailwind class lives in a colocated\r\n  `constants.ts` as a `SCREAMING_SNAKE_CASE` const and is composed with\r\n  `classnames`.\r\n- **Logical vs physical properties.** Styles ported from MUI `sx` (which\r\n  `stylis-plugin-rtl` mirrored) became *logical* utilities — `ms-*`, `ps-*`,\r\n  `start-*`, `rounded-se-*`. Styles ported from an inline `style` prop (never\r\n  mirrored) stayed *physical* — `ml-*`, `pl-*`, `left-*`.\r\n- **MUI breakpoints, not the host's.** Responsive `sx` objects used MUI's scale\r\n  (sm 600 / md 900), so they convert to arbitrary variants\r\n  (`tw:min-[600px]:*`), never to the host's named screens.\r\n- **Nothing `tw:` on a property JS writes inline.** The host runs Tailwind with\r\n  a global `important` flag, so a utility would override the inline value.\r\n  Applies to the virtualiser's `transform`/`height`, measured popup\r\n  coordinates, the composer's autosize `height`, and the dynamic status-dot\r\n  colour.\r\n- **Font sizes are arbitrary values** (`tw:text-[0.875rem]`); the named scale\r\n  also sets `line-height`, which fights the host's inherited `1.6`.\r\n- **No preflight.** The host does not import Tailwind's base reset, so buttons\r\n  unset their own UA chrome and side-only borders zero the other three sides.\r\n\r\n## Layout\r\n\r\n| Path                    | Purpose                                                            |\r\n| ----------------------- | ------------------------------------------------------------------ |\r\n| `src/components/ui`     | MUI-free primitives (Menu, Dialog, Drawer, Tooltip, Badge, Button…) |\r\n| `src/components/ui/icons` | Standalone Material icon components — see the attribution there   |\r\n| `src/components/chat`   | The messenger: sidebar, conversation pane, message list            |\r\n| `src/hooks`             | `useMediaQuery`, overlay behaviours (escape key, scroll lock)       |\r\n","readmeFilename":"README.md"}