{"_id":"view-json-react","_rev":"11-357f77cd41b42e44908b6ff67646833b","name":"view-json-react","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.0":{"name":"view-json-react","version":"1.0.0","license":"MIT","_id":"view-json-react@1.0.0","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://github.com/nycruslan/react-json-view#readme","bugs":{"url":"https://github.com/nycruslan/react-json-view/issues"},"dist":{"shasum":"5a65377145e094792995043815725fb71863da6d","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-1.0.0.tgz","fileCount":18,"integrity":"sha512-h5xiBssLTTCeyN8rjtjLGKHHC1/J8LOaq2OEKwo3e2d5WVxCPgVKrTKrSLClo04bJmEvgpdsroZmRQYnJP+pMQ==","signatures":[{"sig":"MEUCIQDhaegK36kJiNz57Vdggtol0XLcSO0X3n3EpOQDhcFBjQIgR0aIkgJowLPuy8aM7KjXb37QNNGTptUo8srqpatYUsU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":228905},"main":"./dist/view-json-react.cjs.js","type":"module","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs.js"}},"gitHead":"39c63c33220d15651bdf810ff4a0a826e2d3b3a9","scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"vite build && npm run size","clean":"rimraf dist","prepare":"npm run build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"repository":{"url":"git+https://github.com/nycruslan/react-json-view.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs.js","limit":"10 KB"},{"path":"dist/view-json-react.esm.js","limit":"10 KB"}],"_npmVersion":"10.2.3","description":"Welcome to the JsonViewer component library! This React-based tool is designed to render JSON data in a beautifully structured, collapsible format. It offers a convenient and intuitive way to visualize JSON structures, with features that enhance both func","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.71.0","vite":"^5.1.3","eslint":"^8.56.0","rimraf":"^5.0.5","size-limit":"^11.0.2","typescript":"^5.3.3","@types/react":"^18.2.56","vite-plugin-dts":"^3.7.2","@size-limit/file":"^11.0.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.5","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_1.0.0_1708182224708_0.9157112154578209","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"view-json-react","version":"1.0.1","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"license":"MIT","_id":"view-json-react@1.0.1","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://github.com/nycruslan/react-json-view#readme","bugs":{"url":"https://github.com/nycruslan/react-json-view/issues"},"dist":{"shasum":"647d217b3304caeb55852652bd4fa5a46bfa65a9","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-1.0.1.tgz","fileCount":8,"integrity":"sha512-aLSK+WF7MMyFiofhDsiTcp2KgrZHV94qb1WQEpdNLY1fyr5f+mHu6ZJBxbNibG86/eDMrLZWisHrDA/7XaeS9Q==","signatures":[{"sig":"MEUCICX833+z1VfIDI9HnlOCeNKa9LRtYzzQzG0mHBUg3nTIAiEAn9nvRSZSSKh5vYPkBjVPuja4CEHphE/ppAzvu5nD0LU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":227086},"main":"./dist/view-json-react.cjs.js","type":"module","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs.js"}},"gitHead":"a5a1dad7c689bd4efb4a90f5dfde13210a9b106b","scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"vite build && npm run size","clean":"rimraf dist","prepare":"npm run build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"repository":{"url":"git+https://github.com/nycruslan/react-json-view.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs.js","limit":"10 KB"},{"path":"dist/view-json-react.esm.js","limit":"10 KB"}],"_npmVersion":"10.2.3","description":"Welcome to the JsonViewer component library! This React-based tool is designed to render JSON data in a beautifully structured, collapsible format. It offers a convenient and intuitive way to visualize JSON structures, with features that enhance both func","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.71.0","vite":"^5.1.3","eslint":"^8.56.0","rimraf":"^5.0.5","size-limit":"^11.0.2","typescript":"^5.3.3","@types/react":"^18.2.56","vite-plugin-dts":"^3.7.2","@size-limit/file":"^11.0.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.5","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_1.0.1_1708183666081_0.3782836878086189","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"view-json-react","version":"1.0.2","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"license":"MIT","_id":"view-json-react@1.0.2","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://github.com/nycruslan/react-json-view#readme","bugs":{"url":"https://github.com/nycruslan/react-json-view/issues"},"dist":{"shasum":"c750842c4c03451f3cce1e5549eee4f0c2de8941","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-1.0.2.tgz","fileCount":8,"integrity":"sha512-pnCBkpJemv0MY6JZeTE0hyj9Ky94kyu5yT6O1BCXMK+QqQ4WLi2un7qOd1ndIEmrX9LDk98sUnl5NTQQncNK7g==","signatures":[{"sig":"MEUCIGZrUColUvVXHKipFoisq9MtARJgQ+QZlPaYai4pnDl1AiEAqjLxfRiGjPos99TRy6z204RUYeO4cAsATEsOiqrnuLc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":229484},"main":"./dist/view-json-react.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs.js"}},"gitHead":"1431e6bd0b6f85885f1832d5dc3efbcfc563a40a","scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"npm run clean && vite build && npm run size","clean":"rimraf dist","prepare":"npm run build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"repository":{"url":"git+https://github.com/nycruslan/react-json-view.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs.js","limit":"10 KB"},{"path":"dist/view-json-react.esm.js","limit":"10 KB"}],"_npmVersion":"10.2.3","description":"Welcome to the JsonViewer component library! This React-based tool is designed to render JSON data in a beautifully structured, collapsible format. It offers a convenient and intuitive way to visualize JSON structures, with features that enhance both func","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.71.0","vite":"^5.1.3","eslint":"^8.56.0","rimraf":"^5.0.5","size-limit":"^11.0.2","typescript":"^5.3.3","@types/react":"^18.2.56","vite-plugin-dts":"^3.7.2","@size-limit/file":"^11.0.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.5","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_1.0.2_1708218265784_0.3387262512561582","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"view-json-react","version":"1.0.3","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"license":"MIT","_id":"view-json-react@1.0.3","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://github.com/nycruslan/react-json-view#readme","bugs":{"url":"https://github.com/nycruslan/react-json-view/issues"},"dist":{"shasum":"8ee2908ac1a1998cc426a272ae5277b5eb05e70c","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-1.0.3.tgz","fileCount":8,"integrity":"sha512-zQBWvJhL9fRt8dztiv55zIWgrPv6Il3eNbUr6gRNjnhDM4fU5o1Hr0U4lFATcT+FZv7Mc9XzylB/4CipmxxoJQ==","signatures":[{"sig":"MEUCIQCZzHyVk+KlTXukZY23nxcePNM+cemAvBBt4xUA9Qg3MgIgRUCc6CjC9AzggqfY6F2rGkw2mQhp+hGGku2khtMj6Xg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":229960},"main":"./dist/view-json-react.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs.js"}},"gitHead":"7a447344a99cfcb26d730f44714f51474781d2da","scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"npm run clean && vite build && npm run size","clean":"rimraf dist","prepare":"npm run build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"repository":{"url":"git+https://github.com/nycruslan/react-json-view.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs.js","limit":"10 KB"},{"path":"dist/view-json-react.esm.js","limit":"10 KB"}],"_npmVersion":"10.2.3","description":"Welcome to the JsonViewer component library! This React-based tool is designed to render JSON data in a beautifully structured, collapsible format. It offers a convenient and intuitive way to visualize JSON structures, with features that enhance both func","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.71.0","vite":"^5.1.3","eslint":"^8.56.0","rimraf":"^5.0.5","size-limit":"^11.0.2","typescript":"^5.3.3","@types/react":"^18.2.56","vite-plugin-dts":"^3.7.2","@size-limit/file":"^11.0.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.5","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_1.0.3_1708219254844_0.07562985062317096","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"view-json-react","version":"1.1.0","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"license":"MIT","_id":"view-json-react@1.1.0","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://github.com/nycruslan/react-json-view#readme","bugs":{"url":"https://github.com/nycruslan/react-json-view/issues"},"dist":{"shasum":"a7c902446fc282a173ad473640c0fac6eae49169","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-1.1.0.tgz","fileCount":8,"integrity":"sha512-BrGFwnwHhc+jvJfdYStqj/HSQa+8ENe/2nG2w19CKUiZ/DvGfz+qa8IMuuionWFQ0e/3vx4ZsafwISfLCic6eg==","signatures":[{"sig":"MEUCIFsAEnPITQMr0pU/jkrH46BQy6WHDKzRYW1TwnNdbhuwAiEA8H4DtKdO3lgv0HOEw9JEGQdv5QQ26y/W5MO7dfSZb4I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":213200},"main":"./dist/view-json-react.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs.js"}},"gitHead":"a497fabd5fc8a118dd34a3ffd673e61d1c6a1d0c","scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"npm run clean && vite build && npm run size","clean":"rimraf dist","prepare":"npm run build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"repository":{"url":"git+https://github.com/nycruslan/react-json-view.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs.js","limit":"10 KB"},{"path":"dist/view-json-react.esm.js","limit":"10 KB"}],"_npmVersion":"10.2.3","description":"Welcome to the JsonViewer component library! This React-based tool is designed to render JSON data in a beautifully structured, collapsible format. It offers a convenient and intuitive way to visualize JSON structures, with features that enhance both func","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.71.0","vite":"^5.1.3","eslint":"^8.56.0","rimraf":"^5.0.5","size-limit":"^11.0.2","typescript":"^5.3.3","@types/react":"^18.2.56","vite-plugin-dts":"^3.7.2","@size-limit/file":"^11.0.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.5","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_1.1.0_1708293582898_0.7096022462347185","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"view-json-react","version":"1.1.1","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"license":"MIT","_id":"view-json-react@1.1.1","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://github.com/nycruslan/react-json-view#readme","bugs":{"url":"https://github.com/nycruslan/react-json-view/issues"},"dist":{"shasum":"246a472b8ff94cbec8c1b6028061e70ad44a6759","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-1.1.1.tgz","fileCount":8,"integrity":"sha512-anozY2/cuIHU7RwJdDFZnBqm7/ulhsKtO/leHt8tQHSNtynl2etisamNNMMXGjH+L6xx+v9mlL8h1vzOzlHWhg==","signatures":[{"sig":"MEUCICp1pWlI/8FbkecD1dLLgTqLRcVN6hqzQ1PMAGNLmZOxAiEA3W/0EeAp0IzxweTY6gs6v6HqOtaSlXQZ/kiFvVvhDf8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":211942},"main":"./dist/view-json-react.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs.js"}},"gitHead":"a769247897cb74ae6ca3253f6d799fe0dc874010","scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"npm run clean && vite build && npm run size","clean":"rimraf dist","prepare":"npm run build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"repository":{"url":"git+https://github.com/nycruslan/react-json-view.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs.js","limit":"10 KB"},{"path":"dist/view-json-react.esm.js","limit":"10 KB"}],"_npmVersion":"10.2.3","description":"Welcome to the JsonViewer component library! This React-based tool is designed to render JSON data in a beautifully structured, collapsible format. It offers a convenient and intuitive way to visualize JSON structures, with features that enhance both func","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.71.0","vite":"^5.1.3","eslint":"^8.56.0","rimraf":"^5.0.5","size-limit":"^11.0.2","typescript":"^5.3.3","@types/node":"^20.11.19","@types/react":"^18.2.56","vite-plugin-dts":"^3.7.2","@size-limit/file":"^11.0.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.5","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_1.1.1_1708295733716_0.7635499391082805","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"view-json-react","version":"1.1.2","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"license":"MIT","_id":"view-json-react@1.1.2","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://github.com/nycruslan/react-json-view#readme","bugs":{"url":"https://github.com/nycruslan/react-json-view/issues"},"dist":{"shasum":"d3dfe4b654e954d98efb3fb7fd8e8c30ad896bee","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-1.1.2.tgz","fileCount":8,"integrity":"sha512-PbV7VdB73u4uFc8a+DFcb5IfK5cLLRDdRPJ2M6zQGA+e0mUYxSjyDXNl09lfIbbjY7NYcS4H0ijOQDJz+uP5WQ==","signatures":[{"sig":"MEYCIQCDIpxmZo28mO6HimzKiSPmr9+G/Rgl8ILlfBahmAmYzAIhAJdfJrDYg6myFs2PS1bp3LztN2PdKETioYFcIbQlxCWu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":215372},"main":"./dist/view-json-react.cjs.js","type":"module","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs.js"}},"gitHead":"d242666799b93f6d129ebf2bc9e3842f565c865c","scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"npm run clean && vite build && npm run size","clean":"rimraf dist","prepare":"npm run build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"repository":{"url":"git+https://github.com/nycruslan/react-json-view.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs.js","limit":"10 KB"},{"path":"dist/view-json-react.esm.js","limit":"10 KB"}],"_npmVersion":"10.8.2","description":"Welcome to the JsonViewer component library! This React-based tool is designed to render JSON data in a beautifully structured, collapsible format. It offers a convenient and intuitive way to visualize JSON structures, with features that enhance both func","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.79.3","vite":"^5.4.8","eslint":"^8.56.0","rimraf":"^6.0.1","size-limit":"^11.1.5","typescript":"^5.6.2","@types/node":"^22.7.4","@types/react":"^18.3.10","vite-plugin-dts":"^4.2.2","@size-limit/file":"^11.1.5","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-refresh":"^0.4.5","vite-plugin-css-injected-by-js":"^3.5.2","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_1.1.2_1727491224965_0.4211003729662184","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"view-json-react","version":"2.0.0","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"author":{"name":"Ruslan Shulga"},"license":"MIT","_id":"view-json-react@2.0.0","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://nycruslan.github.io/view-json-react/?path=/docs/components-jsonviewer--docs","bugs":{"url":"https://github.com/nycruslan/view-json-react/issues"},"dist":{"shasum":"a4d3dadc3b1b40e2bc8fefc9aa914df30e147c53","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-2.0.0.tgz","fileCount":6,"integrity":"sha512-WwQbTlksddxt/HbOfbW+OsEWbpsD6c/PyHI24/IOHIIbkfpepMPWLhgpV9wv01aRBFfnp9Z0cx3WlG2tSVfU4A==","signatures":[{"sig":"MEYCIQDwR08UJ1nN128BD2M9tYgXdlhV1bT/DBGu2nS2pVfMVAIhALmYvLDDg8CSPrS9LDLwPk9MJ9k7VhrV1FFgVL7h3jPw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40396},"main":"./dist/view-json-react.cjs","type":"module","_from":"file:view-json-react-2.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","default":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs"},"./package.json":"./package.json"},"scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"npm run clean && vite build && npm run size","clean":"rimraf dist","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"_resolved":"/tmp/cf383dccb88ee30d8fb6cbb440708e1f/view-json-react-2.0.0.tgz","_integrity":"sha512-WwQbTlksddxt/HbOfbW+OsEWbpsD6c/PyHI24/IOHIIbkfpepMPWLhgpV9wv01aRBFfnp9Z0cx3WlG2tSVfU4A==","repository":{"url":"git+https://github.com/nycruslan/view-json-react.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs","limit":"20 KB"},{"path":"dist/view-json-react.esm.js","limit":"20 KB"}],"_npmVersion":"10.8.2","description":"A lightweight, performant React component for visualizing JSON data with collapsible nodes, dark mode, and copy functionality","directories":{},"sideEffects":false,"_nodeVersion":"20.20.1","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.88.0","vite":"^8.0.3","react":"^19.2.4","eslint":"^10.1.0","rimraf":"^6.0.1","react-dom":"^19.2.4","storybook":"^10.3.3","size-limit":"^12.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@types/react":"^18.3.28","vite-plugin-dts":"^4.3.0","@size-limit/file":"^12.0.1","@storybook/react":"^10.3.3","@types/react-dom":"^18.3.7","@vitejs/plugin-react":"^6.0.1","@storybook/addon-docs":"^10.3.2","@storybook/react-vite":"^10.3.1","@typescript-eslint/parser":"^8.57.1","vite-plugin-css-injected-by-js":"^3.5.2","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_2.0.0_1774719402689_0.4460844218696294","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"view-json-react","version":"2.1.0","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"author":{"name":"Ruslan Shulga"},"license":"MIT","_id":"view-json-react@2.1.0","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://nycruslan.github.io/view-json-react/?path=/docs/components-jsonviewer--docs","bugs":{"url":"https://github.com/nycruslan/view-json-react/issues"},"dist":{"shasum":"29f2b6420d8e593e95c4ea6e0aff76552e39e735","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-2.1.0.tgz","fileCount":11,"integrity":"sha512-WTpqpkBxchYmjpN8hfcnY91JirceLJsKBKhsuSCks25JeQ3vzI13BNtLxJ3UprLgok+WTNehQ5j15nO35gs93Q==","signatures":[{"sig":"MEUCIHhbk+TZckzT7A9PDX8IXEGJpuGvXRwAL+//vxOP/UVmAiEA6SFjIbFtfxYfWEPNkZeo9KECq1SU0Zo4ZvLgQHA88cE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126448},"main":"./dist/view-json-react.cjs","type":"module","_from":"file:view-json-react-2.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","default":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs"},"./package.json":"./package.json"},"funding":{"url":"https://github.com/sponsors/nycruslan","type":"github"},"scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"pnpm run clean && vite build && pnpm run size","clean":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"_resolved":"/tmp/fdd0c6f7af184f5743f63380c137bbdb/view-json-react-2.1.0.tgz","_integrity":"sha512-WTpqpkBxchYmjpN8hfcnY91JirceLJsKBKhsuSCks25JeQ3vzI13BNtLxJ3UprLgok+WTNehQ5j15nO35gs93Q==","repository":{"url":"git+https://github.com/nycruslan/view-json-react.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs","limit":"20 KB"},{"path":"dist/view-json-react.esm.js","limit":"20 KB"}],"_npmVersion":"10.8.2","description":"A lightweight, performant React component for visualizing JSON data with collapsible nodes, dark mode, and copy functionality","directories":{},"sideEffects":["./dist/view-json-react.esm.js","./dist/view-json-react.cjs"],"_nodeVersion":"20.20.1","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.88.0","vite":"^8.0.3","react":"^19.2.4","eslint":"^10.1.0","react-dom":"^19.2.4","storybook":"^10.3.3","size-limit":"^12.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@types/react":"^19.0.0","vite-plugin-dts":"^4.3.0","@size-limit/file":"^12.0.1","@storybook/react":"^10.3.3","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^6.0.1","@storybook/addon-docs":"^10.3.2","@storybook/react-vite":"^10.3.1","@typescript-eslint/parser":"^8.57.1","eslint-plugin-react-hooks":"^7.0.0","eslint-plugin-react-refresh":"^0.4.20","vite-plugin-css-injected-by-js":"^3.5.2","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_2.1.0_1774999967724_0.010342184232865481","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"view-json-react","version":"2.1.1","keywords":["json","react","json viewer","json visualizer","react component","data visualization","collapsible json","expandable json","json tree view","json explorer","json parser","interactive json","development tool","web development","frontend","UI component","code visualization","json formatter","react library"],"author":{"name":"Ruslan Shulga"},"license":"MIT","_id":"view-json-react@2.1.1","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"homepage":"https://nycruslan.github.io/view-json-react/?path=/docs/components-jsonviewer--docs","bugs":{"url":"https://github.com/nycruslan/view-json-react/issues"},"dist":{"shasum":"e49b98470e11e89f03b7a4d49826c3dc7fc63127","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-2.1.1.tgz","fileCount":11,"integrity":"sha512-Jh2gEwfTCKp6VfhYhl+tNhDJYRarXwRhJZlPkAXXBXDXX1Ecc4LMjDs5+SC8Iix4DMn/4jVBtHBHQgA1l/9ZuQ==","signatures":[{"sig":"MEUCIBQNIlMwICx2VlN1V/4mA5MVTSvrB9GTp0wQA7kicaP1AiEAhT13GgzryVy4tuh+nGucHpZbHQlEeP+ecAnXhn5dZEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73015},"main":"./dist/view-json-react.cjs","type":"module","_from":"file:view-json-react-2.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/view-json-react.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/view-json-react.esm.js","default":"./dist/view-json-react.esm.js","require":"./dist/view-json-react.cjs"},"./package.json":"./package.json"},"funding":{"url":"https://github.com/sponsors/nycruslan","type":"github"},"scripts":{"lint":"eslint . --ext .ts,.tsx --fix","size":"size-limit","build":"pnpm run clean && vite build && pnpm run size","clean":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"nycruslan1992","email":"nycruslan@gmail.com"},"_resolved":"/tmp/e280f5c8f1cfad6311540b0f719be501/view-json-react-2.1.1.tgz","_integrity":"sha512-Jh2gEwfTCKp6VfhYhl+tNhDJYRarXwRhJZlPkAXXBXDXX1Ecc4LMjDs5+SC8Iix4DMn/4jVBtHBHQgA1l/9ZuQ==","repository":{"url":"git+https://github.com/nycruslan/view-json-react.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.cjs","limit":"20 KB"},{"path":"dist/view-json-react.esm.js","limit":"20 KB"}],"_npmVersion":"10.8.2","description":"A lightweight, performant React component for visualizing JSON data with collapsible nodes, dark mode, and copy functionality","directories":{},"sideEffects":["./dist/view-json-react.esm.js","./dist/view-json-react.cjs"],"_nodeVersion":"20.20.1","_hasShrinkwrap":false,"devDependencies":{"sass":"^1.88.0","vite":"^8.0.3","react":"^19.2.4","eslint":"^10.1.0","react-dom":"^19.2.4","storybook":"^10.3.3","size-limit":"^12.0.1","typescript":"^5.9.3","@types/node":"^25.5.0","@types/react":"^19.0.0","vite-plugin-dts":"^4.3.0","@size-limit/file":"^12.0.1","@storybook/react":"^10.3.3","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^6.0.1","@storybook/addon-docs":"^10.3.2","@storybook/react-vite":"^10.3.1","@typescript-eslint/parser":"^8.57.1","eslint-plugin-react-hooks":"^7.0.0","eslint-plugin-react-refresh":"^0.4.20","vite-plugin-css-injected-by-js":"^3.5.2","@typescript-eslint/eslint-plugin":"^8.57.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/view-json-react_2.1.1_1775007318192_0.5921857420910632","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"pi":{"skills":["./.agents/skills"]},"_id":"view-json-react@3.0.0","bugs":{"url":"https://github.com/nycruslan/view-json-react/issues"},"dist":{"shasum":"b2ff3814c547897cad67b8f4645607c70af40748","tarball":"https://registry.npmjs.org/view-json-react/-/view-json-react-3.0.0.tgz","integrity":"sha512-qCVUkIYOHPfZsyiyXV6qJ3OHAEk/q7Y7EELp1O9l3/EUkf7EQQUYnQOpjqE+NM0YCskUl6fVABhWuU3q2h+IiQ==","fileCount":45,"unpackedSize":183800,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/view-json-react@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCjk84K4dRoX1LeQFpcZ5Dv7D9qt9v2XS+zcHNtndCu9QIhAIPQc7pxNb5MmoZwoAPMV+eN6GVuUtIwUB1tvySMrzNH"}]},"main":"./dist/view-json-react.cjs","name":"view-json-react","type":"module","types":"./dist/index.d.ts","author":{"name":"Ruslan Shulga"},"module":"./dist/view-json-react.esm.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/view-json-react.esm.js"},"default":"./dist/view-json-react.esm.js","require":{"types":"./dist/index.d.cts","default":"./dist/view-json-react.cjs"}},"./virtual":{"import":{"types":"./dist/virtual.d.ts","default":"./dist/virtual.js"},"default":"./dist/virtual.js","require":{"types":"./dist/virtual.d.cts","default":"./dist/virtual.cjs"}},"./headless":{"import":{"types":"./dist/core/index.d.ts","default":"./dist/headless.js"},"default":"./dist/headless.js","require":{"types":"./dist/core/index.d.cts","default":"./dist/headless.cjs"}},"./styles.css":{"types":"./dist/styles.css.d.ts","default":"./dist/styles.css"},"./package.json":"./package.json"},"funding":{"url":"https://github.com/sponsors/nycruslan","type":"github"},"gitHead":"30cb83e3144195c2332d6411fb8d4b4e52455636","license":"MIT","scripts":{"lint":"eslint . && knip","size":"size-limit","test":"vitest","audit":"pnpm audit --audit-level low","build":"node scripts/build.mjs && pnpm run size","check":"pnpm run lint && pnpm run typecheck && pnpm run test:coverage && pnpm run build && pnpm run test:package","clean":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"","prepack":"pnpm run build","lint:fix":"eslint . --fix","test:run":"vitest run","benchmark":"pnpm run build && node --expose-gc scripts/benchmark.mjs","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","lint:unused":"knip","test:package":"node scripts/test-package.mjs","release:check":"pnpm run check && pnpm run build-storybook && pnpm audit --audit-level low && npm pack --dry-run --ignore-scripts","test:coverage":"vitest run --coverage","build-storybook":"storybook build && node -e \"require('node:fs').copyFileSync('llms.txt', 'storybook-static/llms.txt')\" && node scripts/test-storybook.mjs"},"version":"3.0.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3cf896db-fefb-4700-8239-036a30bf6bed"},"approver":{"name":"nycruslan1992","email":"nycruslan@gmail.com"}},"homepage":"https://nycruslan.github.io/view-json-react/?path=/docs/components-jsonviewer--docs","keywords":["json","react","typescript","json viewer","react json viewer","json tree","react json tree","object viewer","object inspector","javascript inspector","json explorer","json formatter","collapsible json","accessible","accessibility","wai-aria","virtualized","virtualization","zero dependency","developer tools","react component","ssr","csp"],"repository":{"url":"git+https://github.com/nycruslan/view-json-react.git","type":"git"},"size-limit":[{"path":"dist/view-json-react.esm.js","limit":"6.5 KB"},{"path":"dist/virtual.js","limit":"7 KB"},{"path":"dist/headless.js","limit":"3 KB"},{"path":"dist/styles.css","limit":"2 KB"}],"_npmVersion":"12.0.2","description":"Accessible, dependency-free React JSON tree viewer with search, safe inspection, and virtualized large-data support.","directories":{},"maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"sideEffects":["./dist/styles.css"],"_nodeVersion":"24.21.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"packageManager":"pnpm@12.5.1","devDependencies":{"knip":"6.37.0","vite":"^8.3.0","jsdom":"30.1.0","react":"^19.3.0","eslint":"^10.11.0","terser":"5.51.2","vitest":"5.0.1","publint":"0.3.24","axe-core":"4.13.0","react-dom":"^19.3.0","storybook":"^10.6.0","size-limit":"^14.0.0","typescript":"6.0.3","@types/node":"^26.6.2","@types/react":"^19.3.0","@size-limit/file":"^14.0.0","@storybook/react":"^10.6.0","@types/react-dom":"^19.3.0","@vitest/coverage-v8":"5.0.1","@vitejs/plugin-react":"^6.1.1","@arethetypeswrong/cli":"0.18.5","@storybook/addon-docs":"^10.6.0","@storybook/react-vite":"^10.6.0","@testing-library/react":"16.3.3","@testing-library/jest-dom":"7.0.1","@typescript-eslint/parser":"^8.70.0","eslint-plugin-react-hooks":"^7.1.1","eslint-plugin-react-refresh":"^0.5.7","@typescript-eslint/eslint-plugin":"^8.70.0"},"peerDependencies":{"react":">=18 <20","react-dom":">=18 <20"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/view-json-react_3.0.0_1790086483932_0.26475068247539135"},"_hasShrinkwrap":false}},"time":{"created":"2024-02-17T15:03:44.632Z","modified":"2026-09-22T14:14:44.364Z","1.0.0":"2024-02-17T15:03:44.865Z","1.0.1":"2024-02-17T15:27:46.256Z","1.0.2":"2024-02-18T01:04:25.966Z","1.0.3":"2024-02-18T01:20:55.037Z","1.1.0":"2024-02-18T21:59:43.184Z","1.1.1":"2024-02-18T22:35:33.907Z","1.1.2":"2024-09-28T02:40:25.168Z","2.0.0":"2026-03-28T17:36:42.844Z","2.1.0":"2026-03-31T23:32:47.934Z","2.1.1":"2026-04-01T01:35:18.384Z","3.0.0":"2026-09-22T14:14:44.021Z"},"bugs":{"url":"https://github.com/nycruslan/view-json-react/issues"},"author":{"name":"Ruslan Shulga"},"license":"MIT","homepage":"https://nycruslan.github.io/view-json-react/?path=/docs/components-jsonviewer--docs","keywords":["json","react","typescript","json viewer","react json viewer","json tree","react json tree","object viewer","object inspector","javascript inspector","json explorer","json formatter","collapsible json","accessible","accessibility","wai-aria","virtualized","virtualization","zero dependency","developer tools","react component","ssr","csp"],"repository":{"url":"git+https://github.com/nycruslan/view-json-react.git","type":"git"},"description":"Accessible, dependency-free React JSON tree viewer with search, safe inspection, and virtualized large-data support.","maintainers":[{"name":"nycruslan1992","email":"nycruslan@gmail.com"}],"readme":"# view-json-react\n\n[![npm version](https://img.shields.io/npm/v/view-json-react.svg)](https://www.npmjs.com/package/view-json-react)\n[![npm downloads](https://img.shields.io/npm/dw/view-json-react.svg)](https://www.npmjs.com/package/view-json-react)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/view-json-react)](https://bundlephobia.com/package/view-json-react)\n[![CI](https://github.com/nycruslan/view-json-react/actions/workflows/ci.yml/badge.svg)](https://github.com/nycruslan/view-json-react/actions/workflows/ci.yml)\n[![license](https://img.shields.io/npm/l/view-json-react.svg)](./LICENSE)\n\nA small, accessible, read-only React JSON tree viewer for inspecting JSON and JavaScript values.\n\n- Genuine WAI-ARIA tree navigation\n- Safe handling of cycles, accessors, sparse arrays, and non-JSON values\n- Accurate asynchronous clipboard results and optional redaction\n- Controlled or uncontrolled expansion\n- Bounded search and rendering\n- Optional dependency-free windowing for large values\n- Static, CSP-friendly CSS with light, dark, and system themes\n- ESM, CommonJS, SSR, and React Server Component boundaries\n- Zero runtime dependencies; React 18 and 19 supported\n\nUnlike editor-oriented JSON components, `view-json-react` deliberately omits mutation, schema, fetching, persistence, and runtime style injection. The standard entry stays compact, while large expanded datasets can opt into a separate virtualized entry.\n\n**[Explore the live examples and API documentation](https://nycruslan.github.io/view-json-react/?path=/docs/components-jsonviewer--docs)**\n\n[![An expanded view-json-react tree showing nested user, role, profile, and metrics data](https://raw.githubusercontent.com/nycruslan/view-json-react/main/docs/view-json-react.png)](https://nycruslan.github.io/view-json-react/?path=/story/components-jsonviewer--fully-expanded)\n\n## Install\n\n```bash\nnpm install view-json-react\n# pnpm add view-json-react\n# yarn add view-json-react\n```\n\nRequires React 18 or 19. Node.js 18 or newer is supported for SSR; repository development uses Node.js 24.\n\n## Quick start\n\nThe stylesheet is explicit in v3. Import it once in your application entry point.\n\n```tsx\nimport { JsonViewer } from 'view-json-react';\nimport 'view-json-react/styles.css';\n\nconst data = {\n  user: { name: 'Ada', roles: ['admin', 'reviewer'] },\n  active: true,\n};\n\nexport function Inspector() {\n  return <JsonViewer data={data} rootName=\"response\" theme=\"auto\" />;\n}\n```\n\n`data` is `unknown`: valid JSON works as expected, while values such as `undefined`, `bigint`, `Date`, `RegExp`, `Map`, `Set`, functions, symbols, `NaN`, infinity, `-0`, sparse arrays, repeated references, and cycles have explicit display behavior.\n\n## AI coding agents\n\nThe published package includes its complete README, migration guide, TypeScript declarations, [`llms.txt`](./llms.txt), and a portable [Agent Skill](./.agents/skills/view-json-react/SKILL.md). Agents can already inspect the installed package for version-matched guidance; the skill is optional and adds a concise integration workflow for Copilot, Claude Code, Codex, OpenCode, Pi, and other Agent Skills-compatible tools.\n\nInstall the skill from the dependency already pinned by your application rather than relying on unversioned model knowledge:\n\n```bash\nnpx skills add ./node_modules/view-json-react\n```\n\nPi users can instead load the bundled skill through the package manifest:\n\n```bash\npi install ./node_modules/view-json-react -l\n```\n\nThe documentation site serves [`/llms.txt`](https://nycruslan.github.io/view-json-react/llms.txt) for retrieval tools and documentation indexes, and the repository includes `context7.json` for focused, version-aware Context7 indexing. No MCP server is required: this library exposes static documentation and typed APIs, not a remote service or action interface.\n\n## Accessibility and keyboard controls\n\nThe viewer implements the [WAI-ARIA Tree View pattern](https://www.w3.org/WAI/ARIA/apg/patterns/treeview/) with `tree`, `treeitem`, managed focus, structural metadata, and polite status announcements.\n\n| Key | Action |\n|---|---|\n| `Arrow Down` / `Arrow Up` | Move to the next or previous visible node |\n| `Arrow Right` | Expand a branch, then move to its first child |\n| `Arrow Left` | Collapse a branch, then move to its parent |\n| `Home` / `End` | Move to the first or last visible node |\n| `Page Up` / `Page Down` | Move by approximately one viewport |\n| `Enter` / `Space` | Toggle the active branch |\n| `*` | Expand sibling branches |\n| Type characters | Move by node-name type-ahead |\n| `Ctrl/Cmd+C` | Copy the active value when value copying is enabled |\n| `Ctrl/Cmd+Shift+C` | Copy the active path when path copying is enabled |\n| `F3` / `Shift+F3` | Move between current search matches |\n\n## Expansion\n\nUncontrolled expansion is the default:\n\n```tsx\n<JsonViewer data={data} defaultExpandDepth={2} />\n\n// Or choose exact initially expanded branches.\n<JsonViewer data={data} defaultExpandedPaths={['', '/user']} />\n```\n\nPaths used for expansion are RFC 6901 JSON Pointers. For full control:\n\n```tsx\nconst [expanded, setExpanded] = useState<ReadonlySet<string>>(new Set(['']));\n\n<JsonViewer\n  data={data}\n  expandedPaths={expanded}\n  onExpandedPathsChange={setExpanded}\n/>\n```\n\nAn imperative ref is also available:\n\n```tsx\nconst viewerRef = useRef<JsonViewerHandle>(null);\n\nviewerRef.current?.focusPath('/user/name');\nviewerRef.current?.expand('/user');\nviewerRef.current?.collapseAll();\nviewerRef.current?.nextMatch();\n\n<JsonViewer ref={viewerRef} data={data} />\n```\n\n## Search and sorting\n\nSearch is controlled so applications can use their own input, command palette, or debouncing policy. Matching descendants are found even when their branches were collapsed; only matches and their ancestors are shown.\n\n```tsx\nconst [query, setQuery] = useState('');\n\n<input\n  aria-label=\"Search JSON\"\n  value={query}\n  onChange={event => setQuery(event.target.value)}\n/>\n<JsonViewer\n  data={data}\n  searchQuery={query}\n  maxSearchNodes={100_000}\n  maxSearchResults={1_000}\n  sortKeys\n/>\n```\n\n`sortKeys` accepts `true` for deterministic code-point ordering or a comparator such as `(a, b) => a.localeCompare(b)`.\n\n## Clipboard and redaction\n\nBy default, values can be copied and paths cannot. Clipboard writes are awaited; `onCopy` runs afterward with the real result.\n\n```tsx\n<JsonViewer\n  data={data}\n  copy={{ value: true, path: true, indent: 2 }}\n  redact={(path) => path.at(-1) === 'token'}\n  onCopy={({ success, kind, path, text, error }) => {\n    if (!success) console.error('Copy failed', error);\n    else console.log(`Copied ${kind}`, path, text);\n  }}\n/>\n```\n\n`redact` applies to copied values, not the visible tree. It can return `true` for `[Redacted]`, return a replacement string, or return a falsey value to retain the value. Supply `copy.stringify` for complete control of value serialization.\n\nThe Clipboard API normally requires HTTPS or localhost and user activation. Unsupported or denied writes are reported as failures rather than as false successes.\n\n## Large values\n\nThe standard viewer lazily creates descendants only for expanded branches. Safety limits prevent accidental unbounded traversal:\n\n```tsx\n<JsonViewer\n  data={data}\n  maxDepth={50}\n  maxVisibleNodes={10_000}\n  collapseStringsAfterLength={120}\n/>\n```\n\nFor large expanded collections, use the optional windowed entry point. It renders only the current viewport while retaining tree keyboard behavior.\n\n```tsx\nimport { VirtualJsonViewer } from 'view-json-react/virtual';\nimport 'view-json-react/styles.css';\n\n<VirtualJsonViewer\n  data={largeData}\n  height={480}\n  rowHeight={28}\n  overscan={8}\n/>\n```\n\nWindowing uses dynamic inline positioning styles. The standard viewer itself does not inject styles and works with a strict CSP when its static stylesheet is allowed.\n\n## Custom values and localization\n\n```tsx\n<JsonViewer\n  data={data}\n  renderValue={({ value, type, formatted, path }) =>\n    type === 'date' ? <time>{formatted}</time> : undefined\n  }\n  labels={{\n    tree: 'API response',\n    copied: 'Value copied',\n  }}\n/>\n```\n\nReturn `undefined` from `renderValue` to use the built-in rendering. Control and status labels can be replaced through `labels`; layout uses logical CSS properties and supports `dir=\"rtl\"`.\n\n## Themes\n\n```tsx\n<JsonViewer data={data} theme=\"light\" />\n<JsonViewer data={data} theme=\"dark\" />\n<JsonViewer data={data} theme=\"auto\" />\n```\n\nCustomize tokens through a class or the typed `style` prop:\n\n```tsx\n<JsonViewer\n  data={data}\n  style={{\n    '--vjr-background': '#101418',\n    '--vjr-text': '#f0f3f6',\n    '--vjr-key': '#80bfff',\n    '--vjr-string': '#8ddb8c',\n    '--vjr-indent': '20px',\n  }}\n/>\n```\n\nMain tokens include `--vjr-background`, `--vjr-text`, `--vjr-key`, `--vjr-index`, `--vjr-string`, `--vjr-number`, `--vjr-boolean`, `--vjr-null`, `--vjr-special`, `--vjr-border`, `--vjr-hover`, `--vjr-active`, `--vjr-focus`, `--vjr-match`, `--vjr-font-family`, `--vjr-font-size`, `--vjr-line-height`, and `--vjr-indent`.\n\nThe stylesheet includes reduced-motion, forced-colors, coarse-pointer, and automatic dark-mode rules.\n\n## Headless utilities\n\nThe data model is available without React:\n\n```ts\nimport {\n  buildVisibleTree,\n  classifyValue,\n  formatJsonPath,\n  formatValue,\n  searchTree,\n  stringifyValue,\n  toJsonPointer,\n} from 'view-json-react/headless';\n```\n\nUse these functions to build custom renderers or share the viewer's path, search, formatting, and safe-serialization semantics elsewhere. `stringifyValue` accepts `maxDepth`, `maxBreadth`, and `maxNodes` limits; their safe defaults are 100, 10,000, and 100,000.\n\n## Core props\n\n| Prop | Type | Default |\n|---|---|---|\n| `data` | `unknown` | required |\n| `rootName` | `string` | hidden; accessible name is `\"root\"` |\n| `theme` | `'light' \\| 'dark' \\| 'auto'` | `'light'` |\n| `defaultExpandDepth` | `number` | `1` |\n| `defaultExpandedPaths` | `Iterable<string>` | derived from depth |\n| `expandedPaths` | `ReadonlySet<string>` | uncontrolled |\n| `onExpandedPathsChange` | `(paths, change) => void` | — |\n| `onExpand` | `(change) => void` | — |\n| `showObjectSize` | `boolean` | `true` |\n| `copy` | `boolean \\| CopyOptions` | `true` |\n| `onCopy` | `(result: CopyResult) => void` | — |\n| `redact` | `(path, value) => boolean \\| string \\| null \\| undefined` | — |\n| `searchQuery` | `string` | `''` |\n| `onSearchMatchCount` | `(count) => void` | — |\n| `sortKeys` | `boolean \\| KeyComparator` | `false` |\n| `collapseStringsAfterLength` | `number` | `120` |\n| `maxDepth` | `number` | `100` |\n| `maxVisibleNodes` | `number` | `10_000` |\n| `maxSearchNodes` | `number` | `100_000` |\n| `maxSearchResults` | `number` | `1_000` |\n| `renderValue` | `(context) => ReactNode` | — |\n| `labels` | `Partial<JsonViewerLabels>` | English labels |\n\nStandard `div` attributes such as `className`, `style`, `dir`, `aria-label`, and event handlers are forwarded to the tree.\n\n## Security and resilience\n\n- Values are rendered as React text; the package does not use `dangerouslySetInnerHTML`.\n- Enumerable getters and setters are described without invocation.\n- Cycles are represented as references instead of recursing forever.\n- Traversal and search are bounded; serialization also limits depth, breadth, and total nodes.\n- Revoked or throwing proxies are represented as unavailable where possible. Proxy reflection traps can execute by JavaScript design, so do not treat arbitrary executable proxy objects as inert data.\n- Copy redaction happens before serialization.\n- The package has no runtime dependencies and publishes static CSS instead of injecting a `<style>` element.\n- A custom `renderValue` is application code and remains responsible for its own output safety.\n\n## SSR and frameworks\n\nBoth UI entries carry a `\"use client\"` boundary and can be server-rendered without accessing `window`, `document`, or `navigator` during render. Import the stylesheet through your framework's supported global-CSS entry point. The headless entry has no React dependency.\n\nIn a Next.js App Router project, import the stylesheet from the root layout and render the viewer from a Server Component with serializable data:\n\n```tsx\n// app/layout.tsx\nimport 'view-json-react/styles.css';\n\n// app/page.tsx\nimport { JsonViewer } from 'view-json-react';\n\nexport default function Page() {\n  return <JsonViewer data={{ status: 'ok' }} />;\n}\n```\n\nState, callbacks, functions, proxies, and other non-serializable values must originate inside a Client Component because they cannot cross the React Server Component boundary. Headless utilities can be imported directly in Server Components and route handlers.\n\n## Package entries and size budgets\n\n| Entry | Purpose | Current budget |\n|---|---|---|\n| `view-json-react` | Standard viewer | 6.5 KB Brotli |\n| `view-json-react/virtual` | Windowed viewer | 7 KB Brotli |\n| `view-json-react/headless` | Data utilities | 3 KB Brotli |\n| `view-json-react/styles.css` | Static styles | 2 KB Brotli |\n\nPacked ESM, CommonJS, TypeScript, SSR, CSS, and subpath exports are tested in CI. publint and Are the Types Wrong validate both ESM and CommonJS declaration graphs.\n\n## Project resources\n\n- [Migrate from v2](./MIGRATION.md)\n- [Changelog](./CHANGELOG.md)\n- [Security policy](./SECURITY.md)\n- [Contributing](./CONTRIBUTING.md)\n- [Release process](./RELEASING.md)\n- [Code of Conduct](./CODE_OF_CONDUCT.md)\n\nMIT © Ruslan Shulga.\n","readmeFilename":"README.md"}