{"_id":"@atom.io/template-react-realtime-text-editor","_rev":"9-a1225d5e8c3ee25ec305a1ec321b1709","name":"@atom.io/template-react-realtime-text-editor","dist-tags":{"latest":"0.0.9"},"versions":{"0.0.1":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.1","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.1","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"homepage":"https://github.com/jeremybanka/atom.io#readme","bugs":{"url":"https://github.com/jeremybanka/atom.io/issues"},"dist":{"shasum":"a7f861c0c19851bb86aff4d9f62e15892a587afe","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.1.tgz","fileCount":30,"integrity":"sha512-EHKsUCj1eVbPP5dk4mmD9LAM8KzDN4VE4E4unSQBJzx6srtC3+OruLl3hiVt21QWVtiN4JEjv/uWLABspvnhEg==","signatures":[{"sig":"MEQCIAXQW927S8SOD5NeMVo95360Y2VQi7oqQePoPsXzqjbBAiBdiWpp38RQgDH/+NaEO6x8blHe+FK6cQJor7J9yQt6Dw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76032},"type":"module","engines":{"node":">=24.12.0"},"gitHead":"1f9e5b3653656fbdd7251b69fc2303f8dc5af638","scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","lint":"npm run lint:eslint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"jeremybanka","email":"hello@jeremybanka.com"},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"_npmVersion":"11.19.0","description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"4.4.3","react":"19.2.8","atom.io":"workspace:*","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","eslint":"10.8.1","vitest":"4.1.10","lasertag":"0.7.0","happy-dom":"20.11.2","typescript":"7.0.2","@types/node":"26.2.0","@types/react":"19.2.18","concurrently":"10.0.4","@types/react-dom":"19.2.4","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","@typescript-eslint/parser":"8.67.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.1_1786740066290_0.7058507109816485","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.2","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.2","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dist":{"shasum":"f53364ce51c19b844f5c82d992f33d25d8a09d7d","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.2.tgz","fileCount":30,"integrity":"sha512-LW/Ou+Z9F8AGoJyeRjRbBNdlnk7eREt1IKAehtXLL7Mn8XknVEs/tEFdyuOSqoA7EeibTApLOgR3vXEDOLcWgA==","signatures":[{"sig":"MEQCIGHZ2jaQxhemYFOF8kmsAc6eJUY6RWRkVoRY/94RaW9eAiBkqTzRiKq3KDNWlBgNkIG83poqlIg6brsQxi4JswxMmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76356},"type":"module","engines":{"node":">=24.12.0"},"scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","lint":"npm run lint:eslint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"4.4.3","react":"19.2.8","atom.io":"0.51.3","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","eslint":"10.8.1","vitest":"4.1.10","lasertag":"0.7.0","happy-dom":"20.11.2","typescript":"7.0.2","@types/node":"26.2.0","@types/react":"19.2.18","concurrently":"10.0.4","@types/react-dom":"19.2.4","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","@typescript-eslint/parser":"8.67.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.2_1786743331805_0.11045644846828395","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.3","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.3","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dist":{"shasum":"1d059d1c992c771c25981190b241d029500f9ccb","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.3.tgz","fileCount":30,"integrity":"sha512-1jXed7CITWvRcnk8c1yiVWZXBoVqhmhsM2N4S2h6+3P5aiW2OR2TkOQT+I++SHPMGPQhY4tRaGQoZ90diJ7z7g==","signatures":[{"sig":"MEUCIA6KZl7AoHNwIt0M74EMDm0QcQozl6mGEoipsneJ3Jc9AiEAqZ1bvbSsih32UStcHbe0RrYDuqEkrWe2acF7yGRBHK8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76438},"type":"module","engines":{"node":">=24.12.0"},"scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","lint":"npm run lint:eslint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"4.4.3","react":"19.2.8","atom.io":"0.52.0","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","eslint":"10.8.1","vitest":"4.1.10","lasertag":"0.7.0","happy-dom":"20.11.2","typescript":"7.0.2","@types/node":"26.2.0","@types/react":"19.2.18","concurrently":"10.0.5","@types/react-dom":"19.2.4","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","@typescript-eslint/parser":"8.67.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.3_1786937074280_0.7062123378098164","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.4","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.4","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dist":{"shasum":"ce4e0b5362caf641a446a3088d860c59e67851e7","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.4.tgz","fileCount":30,"integrity":"sha512-mXky72+Xb8Gn8DOjwbBTBjfJ/3i6zAcI3Gc6+Jxov7YhVh+e3dCjWUaLV2Sg/hCYtEUpDUSUiatlYFkBGpYZ1A==","signatures":[{"sig":"MEQCIA5L+UTJw91zAsbz5N9UfMI2zUADIotVoj9hpwI54BjeAiBvph+VlvPJZNnA0AM0tnOcvhzXZU2iveR/TIXUkf+o8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76520},"type":"module","engines":{"node":">=24.12.0"},"scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","lint":"npm run lint:eslint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"4.4.3","react":"19.2.8","atom.io":"0.52.1","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","eslint":"10.8.1","vitest":"4.1.10","lasertag":"0.7.0","happy-dom":"20.11.2","typescript":"7.0.2","@types/node":"26.2.0","@types/react":"19.2.18","concurrently":"10.0.5","@types/react-dom":"19.2.4","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","@typescript-eslint/parser":"8.67.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.4_1787102099110_0.2763743032892112","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.5","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.5","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dist":{"shasum":"f87d65ef0ed0a6936c8c7beafc2d00f64c0bc3a0","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.5.tgz","fileCount":32,"integrity":"sha512-uXMRQsrB7qeisAdcgiY/2J8bkleYFIlmX49feq85BFaDTO59AJJYXAHozHiIv9k+aI1KxNfgCoOdqXicNwqckQ==","signatures":[{"sig":"MEUCICACy4bO2mIQZLkJ7O+POL8GhpAaL/UFwioHlrhuCpwZAiEAoVqy/mjY1wFc+DZG12IKOufg7tR8STRrpdfy44VWIH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78536},"type":"module","engines":{"node":">=24.12.0"},"scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","fmt":"dprint fmt .","lint":"npm run lint:eslint && npm run lint:oxlint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","fmt:check":"dprint check .","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint --max-warnings 0 .","lint:oxlint":"oxlint --deny-warnings .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"4.5.4","react":"19.2.8","atom.io":"0.52.2","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.2","dprint":"0.56.1","eslint":"10.9.1","oxlint":"1.80.0","vitest":"4.1.11","lasertag":"0.7.0","happy-dom":"20.12.0","typescript":"7.0.2","@dprint/oxc":"0.37.0","@types/node":"26.4.0","@dprint/json":"0.23.0","@types/react":"19.2.18","concurrently":"10.0.5","oxlint-tsgolint":"7.0.2001","@dprint/markdown":"0.23.2","@types/react-dom":"19.2.5","dprint-plugin-malva":"0.16.0","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.1.1","@testing-library/react":"16.3.3","@typescript-eslint/parser":"8.68.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.5_1788146585021_0.41003322229710926","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.6","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.6","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dist":{"shasum":"6275dc6e90c0ffa56381d98167e467813d5f160f","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.6.tgz","fileCount":32,"integrity":"sha512-MXK5+AGD4wSyZjHUTEnOuX4Q4Sj8uQlv4p+JWY+Wv0KWp5XQxR48lovtdh8/1dmSiUyKC3ISk9gQaVBCePhfbw==","signatures":[{"sig":"MEQCICvAKPBHucXEEwRuFt3pEZl9bBK/h7Cb7LKP0YEQB8eZAiA1Gij2BvLAjCbyG/8qP368XmEVe2fVsjiGCnaDROCMCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78650},"type":"module","engines":{"node":">=24.12.0"},"scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","fmt":"dprint fmt .","lint":"npm run lint:eslint && npm run lint:oxlint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","fmt:check":"dprint check .","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint --max-warnings 0 .","lint:oxlint":"oxlint --deny-warnings .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"4.5.4","react":"19.2.8","atom.io":"0.52.3","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.2","dprint":"0.57.1","eslint":"10.9.1","oxlint":"1.81.0","vitest":"5.0.0","lasertag":"0.8.0","happy-dom":"20.13.2","typescript":"7.0.2","@dprint/oxc":"0.38.0","@types/node":"26.4.1","@dprint/json":"0.23.0","@types/react":"19.2.18","concurrently":"10.0.5","oxlint-tsgolint":"7.0.2001","@dprint/markdown":"0.23.3","@types/react-dom":"19.2.7","dprint-plugin-malva":"0.16.0","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.1.1","@testing-library/react":"16.3.3","@typescript-eslint/parser":"8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.6_1788555272110_0.8501381738773457","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.7","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.7","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dist":{"shasum":"3c0f27a1b51080d73cf605935933eef0a46a825d","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.7.tgz","fileCount":32,"integrity":"sha512-+AqInConzH+SMm9whm9Btzi6qvipUaNLcD7bqaoJvAgzeWb2NPzv8BiCMDXvrTy1laphdqjle1Qj1wuFH+ZhrA==","signatures":[{"sig":"MEYCIQCDqpkV+SmG+UlgyQddm3d5PPZM9wNGMWIM6vUYUwkT1QIhANvcTsaO4nGMZ0Fk9d/l6CwKJJINXKRvpDOTXG4QyByh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78738},"type":"module","engines":{"node":">=24.12.0"},"scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","fmt":"dprint fmt .","lint":"npm run lint:eslint && npm run lint:oxlint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","fmt:check":"dprint check .","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint --max-warnings 0 .","lint:oxlint":"oxlint --deny-warnings .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"4.5.4","react":"19.2.8","atom.io":"0.53.0","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.2","dprint":"0.57.1","eslint":"10.9.1","oxlint":"1.81.0","vitest":"5.0.0","lasertag":"0.8.0","happy-dom":"20.14.0","typescript":"7.0.2","@dprint/oxc":"0.38.0","@types/node":"26.4.1","@dprint/json":"0.23.0","@types/react":"19.2.18","concurrently":"10.0.5","oxlint-tsgolint":"7.0.2001","@dprint/markdown":"0.23.3","@types/react-dom":"19.2.7","dprint-plugin-malva":"0.16.0","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.1.1","@testing-library/react":"16.3.3","@typescript-eslint/parser":"8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.7_1788602636691_0.9660335716385171","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@atom.io/template-react-realtime-text-editor","version":"0.0.8","license":"Apache-2.0","_id":"@atom.io/template-react-realtime-text-editor@0.0.8","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dist":{"shasum":"b58824a8d8137869998ce9fd147441abaee32a44","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.8.tgz","fileCount":29,"integrity":"sha512-PilDBLYYeCySb1z+I5/70AUJpNra1osQz7oRx+3nHydLct596hlDji+KHV4FgncaGM8pY5nerYvTByrSmU2wsw==","signatures":[{"sig":"MEQCIGAqAlM5CrEy1s/hzSAvYiTr7a56cf0bWCdXoSv7eNF7AiBPF5f/mOuoLTJwX2WexM3MtHv6G2bPTR2ZTxEwgHzDuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66176},"type":"module","engines":{"node":">=24.12.0"},"scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","fmt":"dprint fmt .","lint":"npm run lint:eslint && npm run lint:oxlint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","fmt:check":"dprint check .","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint --max-warnings 0 .","lint:oxlint":"oxlint --deny-warnings .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"dependencies":{"zod":"4.5.4","react":"19.2.8","atom.io":"0.53.1","react-dom":"19.2.8","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.2","dprint":"0.57.4","eslint":"10.10.0","oxlint":"1.82.0","vitest":"5.0.0","lasertag":"0.8.0","happy-dom":"20.14.0","typescript":"7.0.2","@dprint/oxc":"0.39.0","@types/node":"26.5.0","@dprint/json":"0.23.0","@types/react":"19.2.18","concurrently":"10.0.5","oxlint-tsgolint":"7.0.2001","@dprint/markdown":"0.23.3","@types/react-dom":"19.2.7","dprint-plugin-malva":"0.16.0","@testing-library/dom":"10.4.1","@vitejs/plugin-react":"6.1.1","@testing-library/react":"16.3.3","@typescript-eslint/parser":"8.70.0"},"_npmOperationalInternal":{"tmp":"tmp/template-react-realtime-text-editor_0.0.8_1788981074277_0.8314585945688278","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"_id":"@atom.io/template-react-realtime-text-editor@0.0.9","dist":{"shasum":"969713a3504f0d1bd6e4a661745433e153126248","tarball":"https://registry.npmjs.org/@atom.io/template-react-realtime-text-editor/-/template-react-realtime-text-editor-0.0.9.tgz","fileCount":29,"integrity":"sha512-XmIXwGM3DTWSUXqYDtMOSuKKgtYNoEni7PWDLL3NlhQV873Q9n6ksVrwO43Vhny4/Ocm/VzRqpVTnn0IMmDC7w==","signatures":[{"sig":"MEUCICioG87wQvqaerMsKrlEP2WYZ7w5om+mFQ+WZPW7NZjeAiEAwQBtgIZpdcn7JXY+xieUZRIpiaZed0K3O9XvSAyaO3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHUDxvWz+e7BZ4R5lZArTHoi4E6x3ZQglTNO7JrbuefAAiBHw9Bpr0gGAeET/8y1cIHpfgO83mKCuUYLON+xCgNkgw=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atom.io%2ftemplate-react-realtime-text-editor@0.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66335},"name":"@atom.io/template-react-realtime-text-editor","type":"module","engines":{"node":">=24.12.0"},"license":"Apache-2.0","scripts":{"dev":"concurrently vite \"node --watch node/server.ts\"","fmt":"dprint fmt .","lint":"npm run lint:eslint && npm run lint:oxlint && npm run lint:lasertag && npm run lint:types","test":"vitest run","build":"tsc -b && vite build","preview":"concurrently \"vite preview\" \"node node/server.ts\"","fmt:check":"dprint check .","test:once":"vitest run","lint:types":"tsc -b","lint:eslint":"eslint --max-warnings 0 .","lint:oxlint":"oxlint --deny-warnings .","lint:lasertag":"lasertag check \"src/**/*.module.css\""},"version":"0.0.9","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:422d8b5f-5ab8-4a8a-8d5a-920476537c49"}},"repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","directories":{},"maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"dependencies":{"zod":"4.6.5","react":"19.3.0","atom.io":"0.53.1","react-dom":"19.3.0","socket.io":"4.8.3","socket.io-client":"4.8.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"8.3.0","dprint":"0.57.4","eslint":"10.10.0","oxlint":"1.83.0","vitest":"5.0.1","lasertag":"0.8.2","happy-dom":"20.14.5","typescript":"7.0.2","@dprint/oxc":"0.40.0","@types/node":"26.6.1","@dprint/json":"0.24.0","@types/react":"19.3.0","concurrently":"10.0.5","oxlint-tsgolint":"7.0.2001","@dprint/markdown":"0.24.0","@types/react-dom":"19.3.0","dprint-plugin-malva":"0.16.0","@testing-library/dom":"10.4.2","@vitejs/plugin-react":"6.1.1","@testing-library/react":"16.3.3","@typescript-eslint/parser":"8.70.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/template-react-realtime-text-editor_0.0.9_1789617720802_0.15188147020719156"}}},"time":{"created":"2026-08-14T20:41:06.044Z","modified":"2026-09-17T04:02:01.289Z","0.0.1":"2026-08-14T20:41:06.458Z","0.0.2":"2026-08-14T21:35:31.950Z","0.0.3":"2026-08-17T03:24:34.423Z","0.0.4":"2026-08-19T01:14:59.259Z","0.0.5":"2026-08-31T03:23:05.151Z","0.0.6":"2026-09-04T20:54:32.323Z","0.0.7":"2026-09-05T10:03:56.814Z","0.0.8":"2026-09-09T19:11:14.394Z","0.0.9":"2026-09-17T04:02:00.886Z"},"license":"Apache-2.0","repository":{"url":"git+https://github.com/jeremybanka/atom.io.git","type":"git","directory":"templates/react-realtime-text-editor"},"description":"A realtime text editor built with atom.io, React, and Lasertag.","maintainers":[{"name":"jeremybanka","email":"hello@jeremybanka.com"}],"readme":"# React Realtime Text Editor\n\nMosaic is a React + atom.io multiplayer Markdown editor with a small Node and\nSocket.IO collaboration server. It ships simulated identities so the complete\nshared-editing experience can be explored locally without provisioning auth.\n\n## Run It\n\nRun `npm run dev`, then open the displayed Vite URL. Open a second tab and use\nthe avatar menu to switch identities. The Vite app runs on port 5173 and the\ncollaboration service runs on port 3000. The browser always connects to its\ncurrent origin; Vite proxies `/socket.io` and `/health` to the collaboration\nservice in both development and preview modes.\n\n## What It Shows\n\n- optimistic shared text that converges after simultaneous and offline edits;\n- live identity, connection, caret, and line-level presence;\n- selection anchors that survive edits around them;\n- per-identity undo and redo that preserve other authors' work;\n- durable-stream snapshots, idempotent operation replay, and server validation;\n- a safe, dependency-free Markdown preview rendered as React nodes; and\n- structural component styling checked by Lasertag.\n\nRun `npm test` for the multi-client collaboration scenarios. Run `npm run lint`\nto enforce ESLint, type-aware Oxlint, React hook call-order correctness, TypeScript, and\nthe Lasertag render-story/CSS relationship with zero warnings. Run\n`npm run fmt:check` in CI and `npm run fmt` to apply the pinned dprint\nconfiguration locally.\n\n## Start Reading\n\n- `src/collaboration/mosaic.ts` is the browser collaboration contract: one\n  mutable atom, graph-derived selectors, selective history, and model-relative\n  presence.\n- `node/mosaic-atom.ts` registers the mutable atom with Zod runtime schemas,\n  presence validation, and checkpoint cadence without entering the browser\n  bundle.\n- atom.io's Mosaic client owns optimistic edits, reconnect rebasing, causal\n  retries, and structured recovery.\n- atom.io's Mosaic server authenticates authorship, durably orders revisions,\n  checkpoints streams, and publishes ephemeral presence.\n- `src/MarkdownWorkspace.tsx` is the React editing experience.\n- `INNOVATIONS.md` records the reconciliation decisions that became Mosaic and\n  the remaining production boundaries.\n\nThe template selects Mosaic's in-memory storage adapter for a zero-setup demo.\nProduction deployments should provide a linearizable storage adapter, document\nACLs, rate limits, and metrics as described in `INNOVATIONS.md`. Keep the\nsame-origin contract in your deployment by forwarding `/socket.io` to the\ncollaboration service at the edge.\n","readmeFilename":""}