{"_id":"hazo_pdf","_rev":"32-6c43b30fee4360991f77145f9bc0376f","name":"hazo_pdf","dist-tags":{"latest":"2.4.0"},"versions":{"1.0.0":{"name":"hazo_pdf","version":"1.0.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.0.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"e73f22efbaee523ae105b53cc72be32e2d4f5806","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.0.0.tgz","fileCount":12,"integrity":"sha512-PhdUBmEz1DJsCpzgl+YcPPm5JG/RuJFqkgoCHk9axj6fM+KQxe5e3tn2fo70xyxWSVBt/wzYMsqRKdWBqeZr0Q==","signatures":[{"sig":"MEUCIEJfpV2Ww1HGrpN3u/GJnt3jxI3xPOUyE0VWRGIdIBuiAiEA5vJxjrOQSp7hsGx0490yvtJX4p51j0AsLZd9ohnNHhY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":498193},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"c503ee7f86d1e7953ef63022e02c46ae14e88188","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.1.0","dependencies":{"clsx":"^2.1.0","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.0.0_1763425009015_0.6513628037696917","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"hazo_pdf","version":"1.0.1","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.0.1","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"4ddc0bb6012a8680b411ed135ba5a9b5c49e5e6c","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.0.1.tgz","fileCount":12,"integrity":"sha512-1w4bRDRGvD0fO6VntU7DcnDboSPAOi2Kg86JTOQV0OXMFIUvZD30ez5VrrJxeUa/AU+ptjv5+xDrKAy7GIcSvw==","signatures":[{"sig":"MEUCID0qWao+yumm+qwQ0cbM6FHCpiSwFnwU61dUqifZUF4/AiEA0q4y3EOCdMn1ehCyL9QbAHwBaG7HGzgTNKMMAp/kT2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":516723},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"0989d56df649735738b88cfb7b27beafde8138fc","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.1.0","dependencies":{"clsx":"^2.1.0","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.0.1_1763425432122_0.05972616282654708","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"hazo_pdf","version":"1.1.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.1.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"b08d67c06d0bcbda72353551e3b5e69163a9611e","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.1.0.tgz","fileCount":12,"integrity":"sha512-x/Fe2O7kqF1WSjdszPAGZFK+wNlJ9/3yhF4GXKxT3Sq9VEwNSrjgSXEjnXrU4KaY4jynBNMN3vIzP4x389kRuQ==","signatures":[{"sig":"MEYCIQCbtv6mvDooXJZIFDL3cZ2KiyIXjUwzm/+mqrkOAD3ORQIhAK9W8tgssznuAJsWT0WyB2awzM8rqCsSd5nxrjT4Ar6N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":593160},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"ccda7678836ee8b283273ff665991afc4cd9236d","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.1.0","dependencies":{"clsx":"^2.1.0","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.1.0_1763449873009_0.536726114066088","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"hazo_pdf","version":"1.2.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.2.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"84d109952e2684cca6d3b23e7ff8bc7881f74637","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.2.0.tgz","fileCount":12,"integrity":"sha512-4xiRBb+8hBUpvX+Lg2yH2wOAHDef1ofxwkCyQnTE+XfQtHyZqiWB6t99W3JTXIw+MopvlDF/sqKvxVOodMu/KA==","signatures":[{"sig":"MEYCIQDPiqmZCI3QhsWaT7nlwA+QHAFY5d7GlwfJydDaroEbeAIhAMZY05fCJwfR8LtpRIEwHzqfWBP6k7mI75HUwagCRV2Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":632205},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles.css"},"gitHead":"3e184ff19a7d565078445c4d1d1052f2f72e27f1","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.1.0","dependencies":{"clsx":"^2.1.0","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.2.0_1763470631413_0.9505282268276951","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"hazo_pdf","version":"1.2.1","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.2.1","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"bf14d10722f6ebbdd0670786330a4402fea6a922","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.2.1.tgz","fileCount":14,"integrity":"sha512-A2loFUI+H1loszGFcAKVt+9YgfipCeU//2yaOgcDCNW+ygfnL6WlkoP2ca/qfBUCXwHEHyPRhM4PGpc60O7eLA==","signatures":[{"sig":"MEQCIEoXmB0jyonZ5SbpNG/bGO5kU3Bfc3JBWjHSijYmMUk/AiBGRZ5RH/VLUzB/KP6xJtkqhkyIl8C2IL/moTHQUmq+6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":787851},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"9e16b0cf1a703b39745c1b0d09f96f9cf7d7a34c","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.2.1_1767738763175_0.6177711485490391","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"hazo_pdf","version":"1.3.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.3.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"ba4192f644a9ab499347c3ead228788bc3375a7d","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.3.0.tgz","fileCount":14,"integrity":"sha512-zfT4hw4bE4yiO3DnICN2wAotACmlC4QZUPdEXDBJMt4ILsMvxJsgSQ0lbxr3iMtJtr2CwNazDUgfOHZPogvQVQ==","signatures":[{"sig":"MEUCIQCm920XJHCIdd8uoGi9keO04d6yVOKP1NXBNY4kOb8kngIgHpl2neUcIIwIV9flC/tCc2JMUwbU2YSXiSwgcbS+DFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":810127},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"0ed077d339019853e710bdc28729d4857b7a137f","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.3.0_1767959080100_0.1515428139050734","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"hazo_pdf","version":"1.3.1","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.3.1","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"349baf8f571fa4b1b346e2db3cc3053ef8ea6b3d","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.3.1.tgz","fileCount":14,"integrity":"sha512-tS5gYa+csZLjv9EZhICyE1I8R9GV+6n0/3YK4rxWHMP2XqtQk7Vea8XSdN9h9G7vYhlmU5qiPcZO1pHflOVAow==","signatures":[{"sig":"MEQCIAVyX3JcQYULSl4KLIWXxP79NDURjz9MFSyCp84MnO1vAiB4VLYntwgn3d4YR1HJ0KOVcNfVtuRaf+Gn79BzToF7JQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1282244},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"6eb1587e24a0ef6c4e661f8c4f546912d8d77805","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.3.1_1768550784121_0.12037639136573008","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"hazo_pdf","version":"1.3.2","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.3.2","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"c92431222c5e028257fc34f46cd0fcee26100bcb","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.3.2.tgz","fileCount":14,"integrity":"sha512-8Fa9e2AqPNOomk8EEXCJA8vbNGBX7Xqx1rbZjjQWpJmQ9D6+6VhJFlJ5YvgjfeKVlWe5nI/ndAmTzbg6eHP8pg==","signatures":[{"sig":"MEUCIQCCxZmtAcsVABJ8QDSUOxByV3EhVMox4gwaI7uSWxdmCQIgIMgh5GHf4+88e3p2wS2Rp+v7ee2iep0RGDBbKj4H8Q8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1282244},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"0cee9102bc321dd201c68a0f3985769bf18fa6ab","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.3.2_1768551170302_0.8121506855202594","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"hazo_pdf","version":"1.3.3","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.3.3","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"d38fe1aafea46c1165c7ce71c0e239c028c9ca98","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.3.3.tgz","fileCount":14,"integrity":"sha512-mFC+wV47A2+km+vk3YcKPyTR96eSyFPVVIpM6bkO1cmQRbNR8X4WQ4GaUTf5B26O+Me6NymRQGaiartGhLUqJA==","signatures":[{"sig":"MEYCIQDFC+xigEUof5ffrgxosoZ1LVtwgyRtegB+ZEbqVkoRMAIhAPuhgM/Cb7lXyxmf/+/mreWbygD4i0TeGLx/ZPlA8MwN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1294021},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"d9745cee747d54d986288e184b58b3a46f2e40e9","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.3.3_1768569893302_0.7079094714498597","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"hazo_pdf","version":"1.4.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.4.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"83083b5541145c9918075e6724f4321ae8b49b9e","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.4.0.tgz","fileCount":14,"integrity":"sha512-ZKX6SMS37s0X2ESLBhNmpM9u6n/jkIS7lDAgiee7VFqU0E7kzU7muXXnrIruj6cBH2LTB9hU3DmE6BWKFIqgmA==","signatures":[{"sig":"MEUCIE9Jek407qS5Kapu+qh5EgH3V/P6n6q5jq2OdKhNUqKLAiEAuf/Cs8bRUoz+PpInzO8rFqsfwqw8hqnNembiiMA2MN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1345779},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"f5eba6c9a4a972397a9d9089cfdf498bcb136742","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@storybook/blocks":"^7.6.17","eslint-plugin-react":"^7.33.2","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.4.0_1768601006462_0.6355552426355591","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"hazo_pdf","version":"1.5.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"153b07cb25764e0c73aa2a98317a45751df009dc","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.0.tgz","fileCount":14,"integrity":"sha512-tYS+7dSDaFRPcDR/ZZqX6bGzo7vnae5TqH35PJbTSzXtAKazTK1TJC3kftvesXujSTWChaqR94gE75jRKPde6w==","signatures":[{"sig":"MEUCIQCD9VTQ94XkBCJy+WKqlgCmz2y50oiLtTcyT2eyBc2Q7QIgAT6C5F/lk5eG+cXwjNo1TXq7FD/lo+JcmOs/TBkJlDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1533858},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"728b40a30a61aefdbf80a606686fc9cbb8791102","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"tsup && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.1.8","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.0_1769089466759_0.67949316408193","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"hazo_pdf","version":"1.5.1","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.1","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"eede817d17c715e48805c1f7a8fa4be0bb88c219","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.1.tgz","fileCount":14,"integrity":"sha512-koO/tlTL1GTZ7URDP90OJ51KlngRXqjmV70daFzcpqWe0+Bu47ySFup94oz8bPNe4KAHcNs7mt8BG/UM3r/zcg==","signatures":[{"sig":"MEUCICWetaBe+8AMxCbEj9Vz2NQM6cp+E1a/F1u7lvnaGy64AiEAow+MAwVgYUOROsGmEmFc/514MUq/u0mLETVQl+7tL4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1533858},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"206df89a13c49f357b663858040aa5dd45ead7f7","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"tsup && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.0","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.1_1769127239198_0.985168030398748","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"hazo_pdf","version":"1.5.2","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.2","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"6c60e02814ee9e4cf8066ade534a3f7f17062838","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.2.tgz","fileCount":14,"integrity":"sha512-OkOeibZLix2ORn1auLAhGbOWyby6pHXxcaesf7cRcclEJKdM0ubE3XXUIR3bBAWDh9yqGEEi2QiFb656jZmy6Q==","signatures":[{"sig":"MEQCIDprRsetVsqV7FrommzSBtpm74L7njUn95jrKlejLhHjAiB3as+q8H0/c/bNJjczMM1eiQ14Hlw3QOc/pQxIbRcrfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1533858},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"74b9ba1a72eda4a7e19497c473a3e2dad9b41587","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"tsup && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.0","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.2_1769320901746_0.5032658673131538","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"hazo_pdf","version":"1.5.3","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.3","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"d4ac5ef2250e9e83e4889bb51030a0ef2bc7d287","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.3.tgz","fileCount":24,"integrity":"sha512-QtbFE3s56UTo5YhtsPz+iF8QEGugoF7uFTBscgfKTJ9JbpSVf6OIcwI1CLmUy+tfekUj7Dqg/Q3tcsQCESm3WA==","signatures":[{"sig":"MEYCIQC5nMsjxK770gEVH6ivCBRXpvrbNo7HBd1rUsXapNdmiQIhAMrPHDDNvTvyExgi5ekEFrbsQHuJC1PxoqLy8UCV86l1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1637750},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"87cd5c3957ebac9eb216b51e9e094386716ce07e","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","dev:test-app":"tsup && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.3_1769593197911_0.5210807671387694","host":"s3://npm-registry-packages-npm-production"}},"1.5.5":{"name":"hazo_pdf","version":"1.5.5","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.5","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"2fd1309508d67d39652fc07995255fc4a8f4be6f","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.5.tgz","fileCount":24,"integrity":"sha512-NiuPNLmRzSKec3e7Vi5YqIFRMEzJ9PZx4oplITnseNOj1rnujt5CbLRUdGs6UrMnJhr6kJTLtwREPW+LqE2H7w==","signatures":[{"sig":"MEYCIQDkpHelA4lnW8v+WcqDIvEOuqtEyGz/EQ3sNtHwCClyCAIhAMGppqUoyMc4Uc3O8o/OpERybSoiETAt02KMNvBxeOQ7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1646369},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"c4baf6366d2de8d12050dcd2e15922603ba822c2","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.5_1769727513847_0.310005196978242","host":"s3://npm-registry-packages-npm-production"}},"1.5.6":{"name":"hazo_pdf","version":"1.5.6","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.6","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"a8abfad85a5b30ea5a7db048102469adf5d23de8","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.6.tgz","fileCount":24,"integrity":"sha512-+7ZZph+PfUMpJDTVDQQb6TWwq5ircN0IYW8tfmwS6oUOrIYjzJ8hVcIg2hA1eEcQXUeDpxuK/J5I6BFjG7OEDA==","signatures":[{"sig":"MEUCIQD2WZJ8L2IGSVBLbbeh22ah+Hoc7Q7Df17UVQVZnVjyLwIgOt5ffOfjQjmlZ4XiRPdgfBKAvFIvLt40Ynvk0B4aTBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1646369},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"3ceec3aa5e01bd8d0f3238c0277ef7605984cb71","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.6_1769729242285_0.04698648675678507","host":"s3://npm-registry-packages-npm-production"}},"1.5.7":{"name":"hazo_pdf","version":"1.5.7","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.7","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"3e930b8a714f8eb70e45353be4fb8e7c7f851f73","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.7.tgz","fileCount":30,"integrity":"sha512-Y//841Y7CHODbhjT8ZQmVuAvwIQ9h11ze87uCIfhR6Q/zAI+Av/8OJgfxrQt/ngMU2KY3Evmn6uQppp3PdzU2A==","signatures":[{"sig":"MEYCIQDgY/CmgAfQYCZOHdpJM82HQMum8gHar0REG9x8EMwVuQIhAPAVwZdqHjmHFvMiPVkjOJeAlmsiFyvt9y0Izft3RHuy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1681190},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"ecd5c2ffc0dc97e007baf7a2dc1bf1fc2fa086c7","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.7_1769748705013_0.6317011012026283","host":"s3://npm-registry-packages-npm-production"}},"1.5.8":{"name":"hazo_pdf","version":"1.5.8","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.5.8","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"5972a282644c3cea5bca4fb6708e9c1b8860e5f6","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.5.8.tgz","fileCount":30,"integrity":"sha512-esQeoI7o0HQIikroGqp0AEPtn1I1zh0f9P7jCPfrgVV2aXgsjwq93ynaYcuHkf9WS7Z02faGHR8DLU8Q2yoWnw==","signatures":[{"sig":"MEYCIQDMkBNsDErsr6AJGBRpmITfyCBNNxbmOsLvX/K1DsCxCAIhALHwYHsUFzhZQ8wDoff21ji9wwk1x/ApD1xBJUxlkYEh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1683474},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"c5a1aa1f3ef0040244421a58006ab3a1019788cc","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.344.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.5.8_1770025264806_0.48733883134002065","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"hazo_pdf","version":"1.6.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.6.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"76d8558d6d8df3ac39a32795bf4bea3689be5e25","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.6.0.tgz","fileCount":30,"integrity":"sha512-u/XV0explkMwIldYzEiFiygiTyMwj9E0WGCegWKLkIFYiyGbtTj9H2IfWxNBFBwcnbXSPtpZWbAipj68th3jFQ==","signatures":[{"sig":"MEUCIFlz3+dLTsYySYLavq+yyuuqT4/s0zVw36eTOOzLyA8GAiEA/mADuLyU9fCq2W0et1wcbsB8rdR/cLbkZzZXpDZC6sc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1808212},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"44a77561eb5542febd56dcb4ae7948d4affdc04d","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.6.0_1770338227779_0.9104858601078678","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"hazo_pdf","version":"1.6.1","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.6.1","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"897ce2f1ff949684ca694a1f6a652f9ba3785bf5","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.6.1.tgz","fileCount":30,"integrity":"sha512-0AUPS/OoUbf0NcwvG7u8FlkN6o+tuOZSMlEZhbvdQMEgK0Li1NcpOY9Nnc5U9is8wXdJ01EyAvj53/q6RoR10w==","signatures":[{"sig":"MEYCIQCIAV++WjxAlzBCtk7bG2JeyAxzXCGgMIREGV9lmY28mAIhAKpgE0WxwSlvAhN09Q3YuzOZqNPHxqY+XroMiPY7U1yv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1830028},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"f9de253c38834d007da8823c9a5adadfba760f5e","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.6.1_1772966416981_0.25509502217303126","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"hazo_pdf","version":"1.6.2","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.6.2","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"f64ebe4590a4269aea346a5f3972f9c994879f88","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.6.2.tgz","fileCount":30,"integrity":"sha512-phMOdIH2pm6QdsmjJQuxpnu40hbFFJdi+XTYXYBpzZyJ0lNvqQM0ATHVlVOiostahYSrA7nw1Uk0dyP1gpWlCA==","signatures":[{"sig":"MEUCIBuox3/mQTKicQGe2pIpJedxoNAKybkgmRrXPrBSqmpyAiEAmpfVToFAPeOKZlcr98S6nSESa21AX5jvfv/TUC8x1uI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1830550},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"f0e48c828f6da964a311a66c50bd61746f1cb411","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.6.2_1773398224472_0.7571886280003126","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"hazo_pdf","version":"1.6.4","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.6.4","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"6dbc56040e1b9910b90033a517cbb5b1a3ee6f0b","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.6.4.tgz","fileCount":30,"integrity":"sha512-nGaePm/3L0KwTPNvwsTzBs44JD9OHRV5dwlo44vJgXlD+/TujG2FCdYM70hmo1oI8jKzDyA/nxcW2kTlCuzGaA==","signatures":[{"sig":"MEQCIGhbRdokiAHBEGC4SdjsaGjsjiBnoWez04BjvCipFO1hAiBnLe4AQksSI9fzE7kqZirV5nISYy4rdQjUmLgRY5DScQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1834025},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"9a6cb07cdbe7222dfefa062eaffd35fb03465811","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.6.4_1773640031877_0.14272707266779805","host":"s3://npm-registry-packages-npm-production"}},"1.6.5":{"name":"hazo_pdf","version":"1.6.5","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.6.5","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"9bcbe131e8711c36d6053c0cf1fcc04cd1cd483f","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.6.5.tgz","fileCount":30,"integrity":"sha512-uPLVovmb1Al8j7A2YMAgun4pnB2S9XipLQOsqP4bh4IWAw0P7rYZKsJyxBHOfRfeHCJNgP9KVI0Is0NDmjMbgg==","signatures":[{"sig":"MEQCIG1We3WQiY76tUiMqVM3kM9MgP3E640H7BuN2Hxs124bAiAHb6VRNoPex9bhRO2CJ6BoVrmgJBjFkpKYXoTFJYot1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1835110},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"a3115a2ae449ff290b93e0194497da085e2ffe6d","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotater component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","shadcn":"^3.5.0","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","hazo_config":"^1.3.0","react-icons":"^5.5.0","hazo_connect":"^2.4.2","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18.0.0","hazo_logs":"^1.0.0","react-dom":"^18.0.0","hazo_files":"^1.2.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.6.5_1774263969915_0.9265175653939379","host":"s3://npm-registry-packages-npm-production"}},"1.6.6":{"name":"hazo_pdf","version":"1.6.6","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.6.6","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"1515b124d9f619fcbfa03839e7adc76645e497e3","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.6.6.tgz","fileCount":30,"integrity":"sha512-LR6Zf44RSAJcghgi0Bzqo9YImEPIsE1ty58oiFCIZePDPjT6mwoII4POkQR1ZCBRh3Sr2JaUew3Huq7u0SpRGg==","signatures":[{"sig":"MEUCIQCngDZRFU6zhztn9h0z0SkKRcIPBwi5fDaT839zogxI3QIgXXpCJycxy5fyerPIcGGoghM05wxj+Y7xt3QwdrwqbOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1812850},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"a215710173017d6b0229e239b9a1b1b6a3629a01","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","hazo_config":"^1.3.0","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_connect":"^2.4.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18||^19","hazo_logs":"^1.0.0","react-dom":"^18||^19","hazo_files":"^1.2.0","hazo_config":">=1.3.0","hazo_connect":">=2.4.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.6.6_1774621572451_0.9423171838135829","host":"s3://npm-registry-packages-npm-production"}},"1.6.7":{"name":"hazo_pdf","version":"1.6.7","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.6.7","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"dd945d166cf39498b11c73f04b5e6adeeefad9cd","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.6.7.tgz","fileCount":30,"integrity":"sha512-n0y1nTtE4kqgzvaY42p5NOFv0JPB61HExdrrRxqDZ+QZyfs5kXfLHRfJr0abb0AyenMur/1wHPSTlgJJijHKSQ==","signatures":[{"sig":"MEUCIAipHsLzy449efxAU7OHn0YPb4ubFc7g1/6teobsusXGAiEA8vZN9wVNVOpM8tAUgfQNu+ESbuas484Fx3zPyJQxN24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1832279},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"c578f25d9ea6350d44733919c5370f0851bf5bdc","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","storybook":"storybook dev -p 6006","test-app:dev":"npm run build && concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","hazo_config":"^1.3.0","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_connect":"^2.4.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18||^19","hazo_logs":"^1.0.0","react-dom":"^18||^19","hazo_files":"^1.2.0","hazo_config":">=1.3.0","hazo_connect":">=2.4.0","hazo_llm_api":"^1.2.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.6.7_1774856773474_0.25258516521587326","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"hazo_pdf","version":"1.7.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.7.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"a8010b96fdfad47a9dcc622d0d4a2b48044f4d2e","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.7.0.tgz","fileCount":32,"integrity":"sha512-/WqzaXvq3DEtV2DzcxeTCxR+bi5aab4SNfoU95mFxLU320aNBKwhpKe/Bo8GkrIJZP91gJMjxUsXRgOhOwO8gg==","signatures":[{"sig":"MEYCIQCStISlCnwoDrB7nty7lzrcdc2/sgjAe2tNdfhdLGO83QIhAI/u48kSQfYaT0f5WjWWDuBtQ547ua232lzWnzuiJC0x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2076047},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"744fcac7b7f4084823b1467bfc232036246e0ce7","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"rm -rf dist && tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","hazo_config":"^1.3.0","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_connect":"^2.4.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18||^19","hazo_logs":"^1.0.0","react-dom":"^18||^19","hazo_files":"^1.2.0","hazo_config":">=1.3.0","hazo_connect":">=2.4.0","hazo_llm_api":"^1.2.0","@napi-rs/canvas":">=0.1.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true},"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.7.0_1776650053601_0.4500686571184318","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"hazo_pdf","version":"1.7.1","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@1.7.1","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"42e8386be971af0b6ce9b6099510471f7d6dc444","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-1.7.1.tgz","fileCount":32,"integrity":"sha512-5gEsPxjCvogezllYkvyHt+hkDLpcwed0FXJQp38GYdt0X9NLN+Pzf09h2BcsSCCS31cQhaQAnM7YmwjDwUPrSg==","signatures":[{"sig":"MEQCIDiBQVMzvEUSWNkCTT5h6zsJNJ1X2Nleqineq/6byv0OAiAyj0+rPbUeVISo+VNOe3GIenA9Dhss1S5gla4xD5mi2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2080168},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"c309d9bc5436c1ee30e77d60090b968ce5d7f45d","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"rm -rf dist && tsup","storybook":"storybook dev -p 6006","test-app:dev":"concurrently -n tsup,next -c blue,green \"npm:dev\" \"next dev\"","prepublishOnly":"npm run build","test-app:build":"next build","test-app:start":"next start","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"clsx":"^2.1.0","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^2.2.1","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.3","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.56.0","postcss":"^8.4.35","hazo_logs":"^1.0.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^1.3.0","typescript":"^5.3.3","@types/node":"^20.11.19","hazo_config":"^1.3.0","tailwindcss":"^3.4.1","@types/react":"^18.2.56","autoprefixer":"^10.4.17","concurrently":"^8.2.2","hazo_connect":"^2.4.2","hazo_llm_api":"^1.2.3","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.2.19","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","tailwindcss-animate":"^1.0.7","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"react":"^18||^19","hazo_logs":"^1.0.0","react-dom":"^18||^19","hazo_files":"^1.2.0","hazo_config":">=1.3.0","hazo_connect":">=2.4.0","hazo_llm_api":"^1.2.0","@napi-rs/canvas":">=0.1.0"},"peerDependenciesMeta":{"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true},"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_1.7.1_1777009583204_0.00181783535916491","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"hazo_pdf","version":"2.0.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@2.0.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"5a4880a147a5f0972e7a923f52f118052e9a8bf3","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-2.0.0.tgz","fileCount":35,"integrity":"sha512-9zOyUsDoTmReY7ROFLZlMMQwSu8Yu1pn9V0QJr23Xmk/uPxl4PglvcPZPhowQ4V1ijYkxrQU1DNpyIA6vahuvg==","signatures":[{"sig":"MEQCIGDLLHgeWLBEv5W1r9pVH8iI5/xu/jRVed7jjo3U1IoSAiAjjY7JJIC4aolk9puBkMVFPcUz+5Fbs0+VtKOXNlet+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2137046},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"304447ab047ea16abd2fd820559edc02b9cba02a","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"rm -rf dist && tsup","storybook":"storybook dev -p 6006","dev:test-app":"npm run build && cd test-app && npm run dev","build:test-app":"npm run build && cd test-app && npm run build","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"11.6.2","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"^3.23.8","clsx":"^2.1.1","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"next":"^16.0.10","tsup":"^8.0.2","vite":"^5.1.4","react":"^18.3.1","eslint":"^8.57.0","hazo_ui":"^3.1.0","postcss":"^8.4.49","hazo_core":"^1.0.0","hazo_logs":"^2.0.1","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^3.0.0","typescript":"^5.7.2","@types/node":"^20.14.10","hazo_config":"^2.1.6","tailwindcss":"^4.2.4","@types/react":"^18.3.3","concurrently":"^8.2.2","hazo_connect":"^3.0.0","hazo_llm_api":"^2.0.0","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","@tailwindcss/postcss":"^4.2.4","@storybook/react-vite":"^7.6.17","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"next":"^14.0.0 || ^16.0.0","react":"^18.0.0 || ^19.0.0","hazo_ui":"^3.1.0","hazo_core":"^1.0.0","hazo_logs":"^2.0.0","react-dom":"^18.0.0 || ^19.0.0","hazo_files":"^3.0.0","hazo_config":"^2.1.5","tailwindcss":"^4.2.4","hazo_connect":"^3.0.0","hazo_llm_api":"^2.0.0","@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"next":{"optional":true},"hazo_ui":{"optional":true},"hazo_core":{"optional":false},"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true},"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_2.0.0_1780067089973_0.2745903746857208","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"hazo_pdf","version":"2.1.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@2.1.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"f6a64471ea2f67aab70103a06beea5ca83dd5652","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-2.1.0.tgz","fileCount":35,"integrity":"sha512-/shwtJ9MOCejOX07kOB5zFb19OGqH2WDivNUaH2ctWQXPvVpDDVHQr2Bj2dRSYwEgTzFWAm2btZH7VlrE3s4PA==","signatures":[{"sig":"MEUCIQCgdrdaaPUUXuJLQzMVLvF7lEhxoP5MubET5p05PAk48AIgItVZZ8ApZqNLRGWjt2iraoD7NIO5yGkfE5Ied+b/EO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2185328},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"154b93fbe32dfa195f2dcbb81d39788dfea0a19c","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"rm -rf dist && tsup","storybook":"storybook dev -p 6006","dev:test-app":"npm run build && cd test-app && npm run dev","build:test-app":"npm run build && cd test-app && npm run build","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"10.9.8","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.1.12","clsx":"^2.1.1","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","next":"^16.0.10","tsup":"^8.0.2","vite":"^5.1.4","mupdf":"^1.4.2","react":"^18.3.1","eslint":"^8.57.0","hazo_ui":"^4.8.0","postcss":"^8.4.49","ts-jest":"^29.4.5","hazo_core":"^1.2.1","hazo_logs":"^2.1.1","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^3.1.1","typescript":"^5.7.2","@types/jest":"^30.0.0","@types/node":"^20.14.10","hazo_config":"^2.4.1","tailwindcss":"^4.2.4","@types/react":"^18.3.3","concurrently":"^8.2.2","hazo_connect":"^3.9.0","hazo_llm_api":"^2.1.0","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","@tailwindcss/postcss":"^4.2.4","@storybook/react-vite":"^7.6.17","jest-environment-node":"^30.2.0","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"next":"^14.0.0 || ^16.0.0","mupdf":"^1.4.2","react":"^18.0.0 || ^19.0.0","hazo_ui":"^4.8.0","hazo_core":"^1.2.1","hazo_logs":"^2.1.1","react-dom":"^18.0.0 || ^19.0.0","hazo_files":"^3.1.1","hazo_config":"^2.4.1","tailwindcss":"^4.2.4","hazo_connect":"^3.9.0","hazo_llm_api":"^2.1.0","@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"next":{"optional":true},"mupdf":{"optional":true},"hazo_ui":{"optional":true},"hazo_core":{"optional":false},"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true},"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_2.1.0_1783263215966_0.6659517899021314","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"hazo_pdf","version":"2.2.0","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@2.2.0","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"2b18ca062087ba68c75a241b354bd070f503fdd8","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-2.2.0.tgz","fileCount":35,"integrity":"sha512-EfyvuAblh8pt+bM+eo7P/Tu909PP5rK5pPaXgtaLMjC1lQQJ0n3g8p9SB7yKbt4PjuxXnb0Xm1KIj0XnyyM6Vw==","signatures":[{"sig":"MEQCIEfXYntY2V/z4H565fqfB+4Xmq0rvwApRkMvok0zacN1AiAqsMahIMctAPlNQaoGvmCZTXZBPQd+JAaVmERy6Z+tlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2193949},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"c81195e15990f40e2b8bc36396cdf14dda0a3761","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"rm -rf dist && tsup","storybook":"storybook dev -p 6006","dev:test-app":"npm run build && cd test-app && npm run dev","build:test-app":"npm run build && cd test-app && npm run build","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"10.9.8","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.1.12","clsx":"^2.1.1","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","next":"^16.0.10","tsup":"^8.0.2","vite":"^5.1.4","mupdf":"^1.4.2","react":"^18.3.1","eslint":"^8.57.0","hazo_ui":"^6.3.1","postcss":"^8.4.49","ts-jest":"^29.4.5","hazo_core":"^1.3.0","hazo_logs":"^2.1.1","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^3.1.1","typescript":"^5.7.2","@types/jest":"^30.0.0","@types/node":"^20.14.10","hazo_config":"^2.4.1","tailwindcss":"^4.2.4","@types/react":"^18.3.3","concurrently":"^8.2.2","hazo_connect":"^3.9.2","hazo_llm_api":"^2.2.0","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","@tailwindcss/postcss":"^4.2.4","@storybook/react-vite":"^7.6.17","jest-environment-node":"^30.2.0","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"next":"^14.0.0 || ^16.0.0","mupdf":"^1.4.2","react":"^18.0.0 || ^19.0.0","hazo_ui":"^6.3.1","hazo_core":"^1.3.0","hazo_logs":"^2.1.1","react-dom":"^18.0.0 || ^19.0.0","hazo_files":"^3.1.1","hazo_theme":"^1.0.1","hazo_config":"^2.4.1","tailwindcss":"^4.2.4","hazo_connect":"^3.9.2","hazo_llm_api":"^2.2.0","@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"next":{"optional":true},"mupdf":{"optional":true},"hazo_ui":{"optional":true},"hazo_core":{"optional":false},"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_theme":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true},"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_2.2.0_1785306961290_0.6022159195131305","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"hazo_pdf","version":"2.2.1","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"author":{"name":"Pubs Abayasiri"},"license":"MIT","_id":"hazo_pdf@2.2.1","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"homepage":"https://github.com/pub12/hazo_pdf#readme","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"211b00942d950dae25e7f395f8d3eaf499f3058b","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-2.2.1.tgz","fileCount":35,"integrity":"sha512-HlPWs5CzyDucVl+D4d4eDbKoa56U8IXWhRWR4thD4bSRO/CxIg49kyUK6cz/s30weB/YW0hUUyNw/yFKWYb29Q==","signatures":[{"sig":"MEYCIQCEJmCNjjAyKC2SOp5HbBmrsSIQtHk9Na04+URwhs2+qwIhAPS5/KKff21UT5oqq1tk6L+9ODrxsLwZTQYMhO031uJ0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2193949},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./styles-full.css":"./dist/styles/full.css"},"gitHead":"9c1b443b0d5c5cf85790d1393cf967602171ac99","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"rm -rf dist && tsup","storybook":"storybook dev -p 6006","dev:test-app":"npm run build && cd test-app && npm run dev","build:test-app":"npm run build && cd test-app && npm run build","prepublishOnly":"npm run build","build-storybook":"storybook build"},"_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"10.9.8","description":"PDF viewer and annotator component for React","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.1.12","clsx":"^2.1.1","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","next":"^16.0.10","tsup":"^8.0.2","vite":"^5.1.4","mupdf":"^1.4.2","react":"^18.3.1","eslint":"^8.57.0","hazo_ui":"^6.8.0","postcss":"^8.4.49","ts-jest":"^29.4.5","hazo_core":"^2.0.0","hazo_logs":"^2.2.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^3.2.0","typescript":"^5.7.2","@types/jest":"^30.0.0","@types/node":"^20.14.10","hazo_config":"^2.4.2","tailwindcss":"^4.2.4","@types/react":"^18.3.3","concurrently":"^8.2.2","hazo_connect":"^4.0.0","hazo_llm_api":"^2.3.0","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","@tailwindcss/postcss":"^4.2.4","@storybook/react-vite":"^7.6.17","jest-environment-node":"^30.2.0","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"next":"^14.0.0 || ^16.0.0","mupdf":"^1.4.2","react":"^18.0.0 || ^19.0.0","hazo_ui":"^6.8.0","hazo_core":"^2.0.0","hazo_logs":"^2.2.0","react-dom":"^18.0.0 || ^19.0.0","hazo_files":"^3.2.0","hazo_theme":"^1.3.0","hazo_config":"^2.4.2","tailwindcss":"^4.2.4","hazo_connect":"^4.0.0","hazo_llm_api":"^2.3.0","@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"next":{"optional":true},"mupdf":{"optional":true},"hazo_ui":{"optional":true},"hazo_core":{"optional":false},"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_theme":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true},"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hazo_pdf_2.2.1_1785936613164_0.3540357260392406","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"_id":"hazo_pdf@2.4.0","bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"dist":{"shasum":"5bc172e0992bb41e8d4d8b9a097b36f8e26fb5f7","tarball":"https://registry.npmjs.org/hazo_pdf/-/hazo_pdf-2.4.0.tgz","fileCount":38,"integrity":"sha512-n+xuER0Mj+0TRQV4tOn6nOrZ8kTGF8pGjQ/XjwXoPUvBhCsKMks5bnIPbbPzNVtqib5o9m3eJi6b2uJoM6UwpA==","signatures":[{"sig":"MEYCIQCtEh+6eScFfDgLbmdsMk24zJZoKDab3GdDnRSB4muDUAIhAJe8zyFFNWEVxyl+bpmeU2xYV4aIozBcBxv24NCpmJx4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCdOTzCgdgiukN0P2ZrK7Hx7QuBUuk2joK28MVAD7EnugIgUJZPubF1HlvwpLjzJTx3gZ26k9zu8/ch/nuxuO4H0Mw="}],"unpackedSize":2258552},"main":"./dist/index.js","name":"hazo_pdf","type":"module","types":"./dist/index.d.ts","author":{"name":"Pubs Abayasiri"},"module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","default":"./dist/server/index.js"},"./styles.css":"./dist/styles/index.css","./render-pool":{"types":"./dist/render-pool/index.d.ts","import":"./dist/render-pool/index.js","default":"./dist/render-pool/index.js"},"./styles-full.css":"./dist/styles/full.css"},"gitHead":"ab38a4d33a2e8fb2670814312fa3655400b57ff0","license":"MIT","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"NODE_OPTIONS=--experimental-vm-modules jest","build":"rm -rf dist && tsup","storybook":"storybook dev -p 6006","dev:test-app":"npm run build && cd test-app && npm run dev","build:test-app":"npm run build && cd test-app && npm run build","prepublishOnly":"npm run build","build-storybook":"storybook build"},"version":"2.4.0","_npmUser":{"name":"pubs12","email":"pubudu79@gmail.com"},"homepage":"https://github.com/pub12/hazo_pdf#readme","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"_npmVersion":"10.9.8","description":"PDF viewer and annotator component for React","directories":{},"maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"_nodeVersion":"22.23.1","dependencies":{"zod":"^4.1.12","clsx":"^2.1.1","xlsx":"^0.18.5","pdf-lib":"^1.17.1","pdfjs-dist":"^4.10.38","react-icons":"^5.5.0","lucide-react":"^0.553.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","class-variance-authority":"^0.7.1","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-alert-dialog":"^1.1.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","next":"^16.0.10","tsup":"^8.0.2","vite":"^5.1.4","mupdf":"^1.4.2","react":"^18.3.1","eslint":"^8.57.0","hazo_ui":"^6.12.0","postcss":"^8.4.49","ts-jest":"^29.4.5","hazo_core":"^2.4.0","hazo_logs":"^2.3.0","react-dom":"^18.3.1","storybook":"^7.6.17","hazo_files":"^3.4.0","typescript":"^5.7.2","@types/jest":"^30.0.0","@types/node":"^20.14.10","hazo_config":"^2.6.0","tailwindcss":"^4.2.4","@types/react":"^18.3.3","concurrently":"^8.2.2","hazo_connect":"^4.3.0","hazo_llm_api":"^2.6.0","@dnd-kit/core":"^6.3.1","@types/sql.js":"^1.4.9","patch-package":"^8.0.1","@storybook/test":"^7.6.17","@storybook/react":"^7.6.17","@types/react-dom":"^18.3.0","@dnd-kit/sortable":"^8.0.0","@storybook/blocks":"^7.6.17","@dnd-kit/utilities":"^3.2.2","eslint-plugin-react":"^7.33.2","@tailwindcss/postcss":"^4.2.4","@storybook/react-vite":"^7.6.17","jest-environment-node":"^30.2.0","@storybook/addon-links":"^7.6.17","@typescript-eslint/parser":"^6.21.0","eslint-plugin-react-hooks":"^4.6.0","@storybook/addon-essentials":"^7.6.17","@storybook/addon-interactions":"^7.6.17","@typescript-eslint/eslint-plugin":"^6.21.0"},"peerDependencies":{"next":"^14.0.0 || ^16.0.0","mupdf":"^1.4.2","react":"^18.0.0 || ^19.0.0","hazo_ui":"^6.12.0","hazo_core":"^2.4.0","hazo_i18n":"^0.5.0","hazo_logs":"^2.3.0","react-dom":"^18.0.0 || ^19.0.0","hazo_files":"^3.4.0","hazo_theme":"^1.4.0","playwright":"^1.40.0","hazo_config":"^2.6.0","tailwindcss":"^4.2.4","hazo_connect":"^4.3.0","hazo_llm_api":"^2.6.0","@napi-rs/canvas":"^0.1.0"},"peerDependenciesMeta":{"next":{"optional":true},"mupdf":{"optional":true},"hazo_ui":{"optional":true},"hazo_core":{"optional":false},"hazo_i18n":{"optional":true},"hazo_logs":{"optional":true},"hazo_files":{"optional":true},"hazo_theme":{"optional":true},"playwright":{"optional":true},"hazo_config":{"optional":true},"hazo_connect":{"optional":true},"hazo_llm_api":{"optional":true},"@napi-rs/canvas":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hazo_pdf_2.4.0_1789998661248_0.0400777574760558"}}},"time":{"created":"2025-11-18T00:16:48.818Z","modified":"2026-09-21T13:51:01.703Z","1.0.0":"2025-11-18T00:16:49.248Z","1.0.1":"2025-11-18T00:23:52.398Z","1.1.0":"2025-11-18T07:11:13.210Z","1.2.0":"2025-11-18T12:57:11.615Z","1.2.1":"2026-01-06T22:32:43.380Z","1.3.0":"2026-01-09T11:44:40.307Z","1.3.1":"2026-01-16T08:06:24.301Z","1.3.2":"2026-01-16T08:12:50.487Z","1.3.3":"2026-01-16T13:24:53.465Z","1.4.0":"2026-01-16T22:03:26.711Z","1.5.0":"2026-01-22T13:44:26.941Z","1.5.1":"2026-01-23T00:13:59.394Z","1.5.2":"2026-01-25T06:01:41.920Z","1.5.3":"2026-01-28T09:39:58.075Z","1.5.5":"2026-01-29T22:58:34.090Z","1.5.6":"2026-01-29T23:27:22.464Z","1.5.7":"2026-01-30T04:51:45.201Z","1.5.8":"2026-02-02T09:41:05.013Z","1.6.0":"2026-02-06T00:37:08.076Z","1.6.1":"2026-03-08T10:40:17.205Z","1.6.2":"2026-03-13T10:37:04.681Z","1.6.4":"2026-03-16T05:47:12.098Z","1.6.5":"2026-03-23T11:06:10.080Z","1.6.6":"2026-03-27T14:26:12.749Z","1.6.7":"2026-03-30T07:46:13.662Z","1.7.0":"2026-04-20T01:54:13.794Z","1.7.1":"2026-04-24T05:46:23.363Z","2.0.0":"2026-05-29T15:04:50.153Z","2.1.0":"2026-07-05T14:53:36.190Z","2.2.0":"2026-07-29T06:36:01.483Z","2.2.1":"2026-08-05T13:30:13.337Z","2.4.0":"2026-09-21T13:51:01.353Z"},"bugs":{"url":"https://github.com/pub12/hazo_pdf/issues"},"author":{"name":"Pubs Abayasiri"},"license":"MIT","homepage":"https://github.com/pub12/hazo_pdf#readme","keywords":["pdf","pdf-viewer","react","typescript","annotation"],"repository":{"url":"git+https://github.com/pub12/hazo_pdf.git","type":"git"},"description":"PDF viewer and annotator component for React","maintainers":[{"name":"pubs12","email":"pubudu79@gmail.com"}],"readme":"# Hazo PDF\n\nA React component library for viewing and annotating PDF documents with support for Square annotations, FreeText annotations, custom stamps, timestamps, and comprehensive styling customization.\n\n## Features\n\n- 📄 **PDF Viewing** - Render PDF documents with customizable zoom levels\n- ✏️ **Annotations** - Square and FreeText annotation tools\n- ✨ **Auto-Highlighting** - Automatically highlight extracted field values in PDFs\n- 🔍 **Programmatic Highlights** - Ref-based API for creating and managing highlights programmatically\n- 🎨 **Customizable Styling** - Extensive configuration options via INI file\n- ⏰ **Timestamp Support** - Automatic timestamp appending to annotations\n- 🏷️ **Custom Stamps** - Add quick-insert stamps via right-click menu\n- 💾 **Annotation Persistence** - Save annotations directly into PDF files\n- 🎯 **Pan Tool** - Default pan/scroll mode for document navigation\n- ↪️ **Undo/Redo** - Full annotation history management\n- 📂 **Multi-File Support** - Manage and view multiple PDF files with file manager UI\n- 🔄 **PDF Rotation** - Rotate PDF pages 90 degrees clockwise or counter-clockwise\n- 📊 **Data Extraction** - Extract structured data from PDFs using LLM prompts (via hazo_llm_api)\n- 📁 **File Info Sidepanel** - Display extracted metadata and file system information\n- ☁️ **Remote Storage** - Load and save PDFs from Google Drive, Dropbox, or local storage (via hazo_files)\n- 🖼️ **Dialog Component** - Ready-to-use modal dialog wrapper (`PdfViewerDialog`)\n- 🔧 **Server Utilities** - Server-side extraction utilities via `hazo_pdf/server` entry point\n- 🔎 **Text Snippet Extraction** - Server-side: find text in a PDF, highlight it, and return a cropped image snippet\n\n## Installation\n\n```bash\nnpm install hazo_pdf\n```\n\n### Required Peer Dependencies\n\n**hazo_core** (required): Provides the error hierarchy, logger factory, and shared utilities used throughout hazo_pdf.\n\n```bash\nnpm install hazo_core\n```\n\n`hazo_core` is a required (non-optional) peer dependency. Every `hazo_*` package depends on it.\n\n### Optional Dependencies\n\n**hazo_logs** (optional): For structured logging and debugging\n\n```bash\nnpm install hazo_logs\n```\n\nThe `hazo_logs` package is an optional peer dependency. If not installed, hazo_pdf will use console-based logging as a fallback.\n\n**hazo_files** (optional): For remote file storage integration (Google Drive, Dropbox, local filesystem)\n\n```bash\nnpm install hazo_files\n```\n\nThe `hazo_files` package is an optional peer dependency. When installed, it enables loading and saving PDFs from remote storage providers. See [hazo_files Integration](#hazo_files-integration) for details.\n\n**hazo_llm_api** (optional): For server-side document extraction\n\n```bash\nnpm install hazo_llm_api\n```\n\nThe `hazo_llm_api` package is an optional peer dependency. When installed, it enables server-side document data extraction via the `hazo_pdf/server` entry point. See [Server-Side Extraction](#server-side-extraction) for details.\n\n**@napi-rs/canvas** (optional): For server-side text snippet extraction\n\n```bash\nnpm install @napi-rs/canvas\n```\n\nRequired only for the `extract_text_snippet()` server utility. Already installed as a transitive dependency of `pdfjs-dist` in most environments. See [Text Snippet Extraction](#text-snippet-extraction) for details.\n\n**playwright** (optional): For the pooled browser-based render engine\n\n```bash\nnpm install playwright\n```\n\nThe `playwright` package is an optional peer dependency. When installed, it enables `hazo_pdf/render-pool` — a reusable headless-Chromium page pool for turning a URL into PDF bytes or raster PNGs. See [Render Pool](#render-pool) for details.\n\n## CSS Import Options\n\nThe library provides two CSS files to choose from:\n\n### For apps with existing styles (Recommended)\n\nUse `styles.css` - this does NOT include Tailwind preflight/base resets, so it won't interfere with your existing styles:\n\n```tsx\nimport 'hazo_pdf/styles.css';\n```\n\n### For standalone apps\n\nUse `styles-full.css` - includes Tailwind preflight/base styles for apps without existing CSS resets:\n\n```tsx\nimport 'hazo_pdf/styles-full.css';\n```\n\n## Tailwind v4 Setup (Required for Tailwind v4 users)\n\nIf your consuming application uses Tailwind v4, you must add a `@source` directive to your CSS file to enable Tailwind to scan this package's classes:\n\n```css\n@import \"tailwindcss\";\n\n/* Required: Enable Tailwind to scan hazo_pdf package classes */\n@source \"../node_modules/hazo_pdf/dist\";\n```\n\nWithout this directive, Tailwind v4's JIT compiler will not generate CSS for the utility classes used in hazo_pdf components, resulting in missing styles (transparent hover states, missing colors, broken layouts).\n\n**Note**: Tailwind v3 users do not need this configuration.\n\n## Container Requirements\n\nThe PDF viewer requires its parent container to have explicit dimensions:\n\n```tsx\n// Good - explicit dimensions\n<div style={{ width: '100%', height: '600px' }}>\n  <PdfViewer url=\"/document.pdf\" />\n</div>\n\n// Bad - no explicit height\n<div>\n  <PdfViewer url=\"/document.pdf\" />\n</div>\n```\n\n**Requirements:**\n- Parent must have explicit `width` and `height` (CSS or inline style)\n- Recommended minimum size: 400x400px\n- Parent should NOT have `overflow: hidden` (the viewer handles its own scrolling)\n\n## Quick Start\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\nimport 'hazo_pdf/styles.css';\n\nfunction App() {\n  return (\n    <PdfViewer\n      url=\"/path/to/document.pdf\"\n    />\n  );\n}\n```\n\nThat's it! The PDF viewer will load and display your document with default styling and pan mode enabled.\n\n### PdfViewerDialog (Modal/Dialog)\n\nFor displaying PDFs in a modal dialog, use the `PdfViewerDialog` component:\n\n```tsx\nimport { useState } from 'react';\nimport { PdfViewerDialog } from 'hazo_pdf';\nimport 'hazo_pdf/styles.css';\n\nfunction App() {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <>\n      <button onClick={() => setIsOpen(true)}>Open PDF</button>\n      <PdfViewerDialog\n        open={isOpen}\n        on_open_change={setIsOpen}\n        url=\"/path/to/document.pdf\"\n        dialog_width=\"90vw\"\n        dialog_height=\"90vh\"\n      />\n    </>\n  );\n}\n```\n\nThe dialog component handles:\n- Backdrop click to close (configurable)\n- Escape key to close (configurable)\n- Body scroll prevention\n- Focus trapping\n\n### With Logging (Optional)\n\nFor debugging and monitoring, you can integrate hazo_logs:\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\nimport { createLogger } from 'hazo_logs';\nimport 'hazo_pdf/styles.css';\n\nconst logger = createLogger('my_app', 'config/hazo_logs_config.ini');\n\nfunction App() {\n  return (\n    <PdfViewer\n      url=\"/path/to/document.pdf\"\n      logger={logger}\n    />\n  );\n}\n```\n\n---\n\n## Examples\n\n### Simple Example - Basic PDF Viewer\n\nThe simplest usage - just display a PDF:\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\nimport 'hazo_pdf/styles.css';\n\nfunction SimpleViewer() {\n  return (\n    <div style={{ width: '100%', height: '800px' }}>\n      <PdfViewer \n        url=\"/api/documents/sample.pdf\"\n        className=\"h-full w-full\"\n      />\n    </div>\n  );\n}\n```\n\n**Features demonstrated:**\n- Basic PDF rendering\n- Default pan tool (drag to scroll)\n- Default styling\n\n---\n\n### Medium Complexity Example - With Annotations and Callbacks\n\nA more feature-rich implementation with annotation handling:\n\n```tsx\nimport { useState } from 'react';\nimport { PdfViewer } from 'hazo_pdf';\nimport type { PdfAnnotation, PDFDocumentProxy } from 'hazo_pdf';\nimport 'hazo_pdf/styles.css';\n\nfunction AnnotatedViewer() {\n  const [annotations, setAnnotations] = useState<PdfAnnotation[]>([]);\n  const [pdfDoc, setPdfDoc] = useState<PDFDocumentProxy | null>(null);\n\n  const handleLoad = (pdf: PDFDocumentProxy) => {\n    console.log('PDF loaded:', pdf.numPages, 'pages');\n    setPdfDoc(pdf);\n  };\n\n  const handleAnnotationCreate = (annotation: PdfAnnotation) => {\n    console.log('Annotation created:', annotation);\n    setAnnotations(prev => [...prev, annotation]);\n  };\n\n  const handleAnnotationUpdate = (annotation: PdfAnnotation) => {\n    console.log('Annotation updated:', annotation);\n    setAnnotations(prev => \n      prev.map(a => a.id === annotation.id ? annotation : a)\n    );\n  };\n\n  const handleAnnotationDelete = (annotationId: string) => {\n    console.log('Annotation deleted:', annotationId);\n    setAnnotations(prev => prev.filter(a => a.id !== annotationId));\n  };\n\n  const handleSave = (pdfBytes: Uint8Array, filename: string) => {\n    // Create a blob and download\n    const blob = new Blob([pdfBytes], { type: 'application/pdf' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = filename || 'annotated-document.pdf';\n    a.click();\n    URL.revokeObjectURL(url);\n  };\n\n  const handleError = (error: Error) => {\n    console.error('PDF error:', error);\n    alert(`Failed to load PDF: ${error.message}`);\n  };\n\n  return (\n    <div style={{ width: '100%', height: '100vh' }}>\n      <PdfViewer \n        url=\"/api/documents/report.pdf\"\n        className=\"h-full w-full\"\n        scale={1.2}\n        annotations={annotations}\n        on_load={handleLoad}\n        on_error={handleError}\n        on_annotation_create={handleAnnotationCreate}\n        on_annotation_update={handleAnnotationUpdate}\n        on_annotation_delete={handleAnnotationDelete}\n        on_save={handleSave}\n        background_color=\"#f5f5f5\"\n      />\n    </div>\n  );\n}\n```\n\n**Features demonstrated:**\n- Annotation state management\n- Callback handlers for all events\n- Custom zoom level (1.2x)\n- Custom background color\n- PDF download with annotations\n\n---\n\n### Complex Example - Full Configuration with Custom Stamps and Timestamps\n\nA production-ready implementation with configuration file, custom stamps, timestamps, and advanced features:\n\n```tsx\nimport { useState, useEffect } from 'react';\nimport { PdfViewer } from 'hazo_pdf';\nimport type { PdfAnnotation, PDFDocumentProxy } from 'hazo_pdf';\nimport 'hazo_pdf/styles.css';\n\nfunction ProductionViewer() {\n  const [annotations, setAnnotations] = useState<PdfAnnotation[]>([]);\n  const [initialScale, setInitialScale] = useState(1.0);\n\n  // Load saved annotations from localStorage\n  useEffect(() => {\n    const saved = localStorage.getItem('pdf-annotations');\n    if (saved) {\n      try {\n        setAnnotations(JSON.parse(saved));\n      } catch (e) {\n        console.error('Failed to load saved annotations:', e);\n      }\n    }\n\n    // Save window size to adjust scale\n    const updateScale = () => {\n      const width = window.innerWidth;\n      if (width < 768) {\n        setInitialScale(0.75); // Mobile\n      } else if (width < 1024) {\n        setInitialScale(1.0); // Tablet\n      } else {\n        setInitialScale(1.25); // Desktop\n      }\n    };\n    \n    updateScale();\n    window.addEventListener('resize', updateScale);\n    return () => window.removeEventListener('resize', updateScale);\n  }, []);\n\n  // Persist annotations to localStorage\n  useEffect(() => {\n    if (annotations.length > 0) {\n      localStorage.setItem('pdf-annotations', JSON.stringify(annotations));\n    }\n  }, [annotations]);\n\n  const handleAnnotationCreate = (annotation: PdfAnnotation) => {\n    setAnnotations(prev => {\n      const updated = [...prev, annotation];\n      // Save to server\n      fetch('/api/annotations', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(annotation),\n      }).catch(err => console.error('Failed to save annotation:', err));\n      return updated;\n    });\n  };\n\n  const handleAnnotationUpdate = (annotation: PdfAnnotation) => {\n    setAnnotations(prev => {\n      const updated = prev.map(a => a.id === annotation.id ? annotation : a);\n      // Update on server\n      fetch(`/api/annotations/${annotation.id}`, {\n        method: 'PUT',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(annotation),\n      }).catch(err => console.error('Failed to update annotation:', err));\n      return updated;\n    });\n  };\n\n  const handleAnnotationDelete = (annotationId: string) => {\n    setAnnotations(prev => {\n      const updated = prev.filter(a => a.id !== annotationId);\n      // Delete on server\n      fetch(`/api/annotations/${annotationId}`, {\n        method: 'DELETE',\n      }).catch(err => console.error('Failed to delete annotation:', err));\n      return updated;\n    });\n  };\n\n  const handleSave = async (pdfBytes: Uint8Array, filename: string) => {\n    try {\n      // Upload to server\n      const formData = new FormData();\n      formData.append('file', new Blob([pdfBytes], { type: 'application/pdf' }), filename);\n      \n      const response = await fetch('/api/documents/upload', {\n        method: 'POST',\n        body: formData,\n      });\n\n      if (response.ok) {\n        const result = await response.json();\n        alert(`PDF saved successfully: ${result.url}`);\n      } else {\n        throw new Error('Failed to upload PDF');\n      }\n    } catch (error) {\n      console.error('Save error:', error);\n      alert('Failed to save PDF');\n    }\n  };\n\n  // Custom stamps configuration\n  const customStamps = JSON.stringify([\n    {\n      name: \"Verified\",\n      text: \"✅\",\n      order: 1,\n      time_stamp_suffix_enabled: true,\n      fixed_text_suffix_enabled: true,\n      background_color: \"rgb(255, 255, 255)\",\n      border_size: 0,\n      font_color: \"#000000\",\n      font_weight: \"bold\",\n      font_size: 16\n    },\n    {\n      name: \"Rejected\",\n      text: \"❌\",\n      order: 2,\n      time_stamp_suffix_enabled: true,\n      fixed_text_suffix_enabled: false,\n      background_color: \"rgb(255, 200, 200)\",\n      border_size: 1,\n      font_color: \"#000000\",\n      font_size: 14\n    },\n    {\n      name: \"Needs Review\",\n      text: \"⚠️\",\n      order: 3,\n      time_stamp_suffix_enabled: false,\n      fixed_text_suffix_enabled: false,\n      background_color: \"rgb(255, 255, 200)\",\n      border_size: 2,\n      font_color: \"#000000\",\n      font_size: 12\n    }\n  ]);\n\n  return (\n    <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>\n      <div style={{ padding: '1rem', background: '#f0f0f0', borderBottom: '1px solid #ccc' }}>\n        <h1>Document Viewer</h1>\n        <p>Annotations: {annotations.length} | \n          <button onClick={() => setAnnotations([])}>Clear All</button>\n        </p>\n      </div>\n      \n      <div style={{ flex: 1, overflow: 'hidden' }}>\n        <PdfViewer \n          url=\"/api/documents/contract.pdf\"\n          config_file=\"config/hazo_pdf_config.ini\"\n          className=\"h-full w-full\"\n          scale={initialScale}\n          annotations={annotations}\n          on_annotation_create={handleAnnotationCreate}\n          on_annotation_update={handleAnnotationUpdate}\n          on_annotation_delete={handleAnnotationDelete}\n          on_save={handleSave}\n          append_timestamp_to_text_edits={true}\n          annotation_text_suffix_fixed_text=\"Reviewer\"\n          right_click_custom_stamps={customStamps}\n          background_color=\"#ffffff\"\n        />\n      </div>\n    </div>\n  );\n}\n```\n\n**Features demonstrated:**\n- Configuration file integration (`config/hazo_pdf_config.ini`)\n- Custom stamps with styling\n- Timestamp and fixed text suffixes\n- Responsive scaling based on screen size\n- LocalStorage persistence\n- Server synchronization\n- Complex state management\n- Custom UI wrapper\n\n---\n\n## Configuration File\n\nThe PDF viewer can be configured via an INI file (default: `config/hazo_pdf_config.ini`). This allows you to customize styling, colors, fonts, and behavior without modifying code.\n\n**Basic setup:**\n\n```ini\n[viewer]\nviewer_background_color = #f5f5f5\nappend_timestamp_to_text_edits = true\nannotation_text_suffix_fixed_text = user_x\n\n[freetext_annotation]\nfreetext_text_color = #0066cc\nfreetext_background_color = rgb(230, 243, 255)\nfreetext_background_opacity = 0.1\nfreetext_border_color = #003366\nfreetext_border_width = 1\n\n[toolbar]\ntoolbar_background_color = rgb(240, 248, 255)\ntoolbar_font_color = rgb(30, 58, 138)\ntoolbar_button_background_color = rgb(219, 234, 254)\ntoolbar_button_text_color = rgb(30, 64, 175)\ntoolbar_button_save_background_color = rgb(34, 197, 94)\n\n[context_menu]\nright_click_custom_stamps = [{\"name\":\"Verified\",\"text\":\"✅\",\"order\":1,\"time_stamp_suffix_enabled\":true,\"fixed_text_suffix_enabled\":true}]\n```\n\nSee `config/hazo_pdf_config.ini` in the project root for all available configuration options.\n\n---\n\n## Auto-Highlighting\n\nThe PDF viewer can automatically highlight extracted field values in your PDFs. Simply provide field names and values via the `highlight_fields_info` prop, and the viewer will search for and highlight them automatically.\n\n### Basic Usage\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\nimport 'hazo_pdf/styles.css';\n\nfunction AutoHighlightExample() {\n  const extracted_data = {\n    document_date: '30 June 2024',\n    total_amount: '$29,696.60',\n    vendor_name: 'ACME Corporation',\n  };\n\n  return (\n    <div style={{ width: '100%', height: '800px' }}>\n      <PdfViewer\n        url=\"/invoice.pdf\"\n        highlight_fields_info={[\n          { field_name: 'document_date', value: '30 June 2024', page_index: 0 },\n          { field_name: 'total_amount', value: '$29,696.60', page_index: 0 },\n          { field_name: 'vendor_name', value: 'ACME Corporation', page_index: 0 },\n        ]}\n        show_file_info_button={true}\n      />\n    </div>\n  );\n}\n```\n\n**That's it!** The viewer will:\n1. Search for each value in the PDF text layer\n2. Create visual highlight boxes at the found positions\n3. Display field names and values in the File Info sidepanel\n\n### How It Works\n\n- **Smart Text Search**: Exact match first, then partial match with normalization (removes commas/spaces)\n- **Automatic Cleanup**: Highlights are removed when the PDF changes or component unmounts\n- **Non-Blocking**: Text search runs asynchronously without freezing the UI\n- **Configurable**: Customize colors, opacity, padding, and search behavior\n\n### HighlightFieldInfo Type\n\n```typescript\ninterface HighlightFieldInfo {\n  field_name: string;    // Field identifier (auto-formatted to Title Case in sidepanel)\n  value: string;         // The text to search for and highlight\n  page_index?: number;   // Page to search on (0-based, default: 0)\n}\n```\n\n### Customization Options\n\n#### Custom Highlight Colors\n\n```tsx\n<PdfViewer\n  url=\"/document.pdf\"\n  highlight_fields_info={highlight_fields}\n  auto_highlight_options={{\n    border_color: '#0066CC',\n    background_color: '#E6F2FF',\n    background_opacity: 0.4,\n    border_width: 2,\n  }}\n/>\n```\n\n#### Custom Search Options\n\n```tsx\n<PdfViewer\n  url=\"/document.pdf\"\n  highlight_fields_info={highlight_fields}\n  auto_highlight_search_options={{\n    normalize: false,      // Disable text normalization (exact match only)\n    padding_x: 5,          // More horizontal padding\n    padding_y: 2,          // More vertical padding\n    y_offset: -5,          // Adjust vertical position\n  }}\n/>\n```\n\n#### Disable Auto-Highlighting (Sidepanel Only)\n\n```tsx\n<PdfViewer\n  url=\"/document.pdf\"\n  highlight_fields_info={highlight_fields}\n  auto_highlight_enabled={false}  // Only show in sidepanel, no visual highlights\n/>\n```\n\n### Configuration via INI File\n\nYou can set default auto-highlight styling in your config file:\n\n```ini\n[auto_highlight]\nauto_highlight_border_color = #FF6B00\nauto_highlight_background_color = #FFF3E0\nauto_highlight_background_opacity = 0.3\nauto_highlight_border_width = 1\nauto_highlight_normalize_text = true\nauto_highlight_padding_x = 2\nauto_highlight_padding_y = 1\nauto_highlight_y_offset = -3\n```\n\n### Props\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `highlight_fields_info` | `HighlightFieldInfo[]` | `undefined` | Fields to highlight and display in sidepanel |\n| `auto_highlight_enabled` | `boolean` | `true` | Enable/disable auto-highlighting feature |\n| `auto_highlight_options` | `HighlightOptions` | From config | Custom highlight styling |\n| `auto_highlight_search_options` | `Partial<TextSearchOptions>` | From config | Custom search behavior |\n\n### Advanced: Custom Text Search\n\nFor advanced use cases, you can use the text search utility directly:\n\n```tsx\nimport { find_text_in_pdf, type TextSearchOptions } from 'hazo_pdf';\n\nconst search_result = await find_text_in_pdf(pdf_document, 'Invoice #12345', {\n  page_index: 0,\n  normalize: true,\n  padding_x: 10,\n  padding_y: 5,\n});\n\nif (search_result) {\n  console.log('Found at:', search_result.x, search_result.y);\n  console.log('Match type:', search_result.match_type); // 'exact' | 'partial'\n}\n```\n\n---\n\n## Programmatic Highlight API\n\nThe PDF viewer also exposes a ref-based API for programmatically creating, removing, and managing highlights. This is useful when you need manual control over highlights or want to create highlights from coordinates.\n\n**Note**: For most use cases, the [Auto-Highlighting](#auto-highlighting) feature is recommended as it's simpler and requires less code.\n\n### Basic Usage\n\n```tsx\nimport { PdfViewer, PdfViewerRef } from 'hazo_pdf';\nimport { useRef } from 'react';\nimport 'hazo_pdf/styles.css';\n\nfunction HighlightExample() {\n  const viewer_ref = useRef<PdfViewerRef>(null);\n\n  const add_highlight = () => {\n    // Highlight region on page 0 at PDF coordinates [100, 500, 300, 550]\n    const id = viewer_ref.current?.highlight_region(0, [100, 500, 300, 550], {\n      border_color: '#FF0000',\n      background_color: '#FFFF00',\n      background_opacity: 0.4\n    });\n    console.log('Created highlight:', id);\n  };\n\n  const remove_specific_highlight = (id: string) => {\n    const removed = viewer_ref.current?.remove_highlight(id);\n    console.log('Highlight removed:', removed);\n  };\n\n  const clear_all = () => {\n    viewer_ref.current?.clear_all_highlights();\n  };\n\n  return (\n    <div style={{ width: '100%', height: '800px' }}>\n      <button onClick={add_highlight}>Add Highlight</button>\n      <button onClick={clear_all}>Clear All Highlights</button>\n\n      <PdfViewer\n        ref={viewer_ref}\n        url=\"/document.pdf\"\n      />\n    </div>\n  );\n}\n```\n\n### PdfViewerRef Interface\n\nThe ref exposes three methods for highlight management:\n\n#### `highlight_region(page_index, rect, options?)`\n\nCreates a new highlight annotation on the specified page.\n\n**Parameters:**\n- `page_index` (number): Zero-based page index where the highlight should appear\n- `rect` ([number, number, number, number]): Rectangle coordinates in PDF space [x1, y1, x2, y2]\n- `options` (HighlightOptions, optional): Styling options\n\n**Returns:** `string` - The unique ID of the created highlight annotation\n\n**HighlightOptions:**\n```typescript\n{\n  border_color?: string;       // Hex color (e.g., \"#FF0000\")\n  background_color?: string;   // Hex color (e.g., \"#FFFF00\")\n  background_opacity?: number; // 0-1 (e.g., 0.4)\n}\n```\n\n**Example:**\n```tsx\nconst id = viewer_ref.current?.highlight_region(\n  0,                      // Page 0\n  [100, 500, 300, 550],   // PDF coordinates\n  {\n    border_color: '#FF0000',\n    background_color: '#FFFF00',\n    background_opacity: 0.4\n  }\n);\n```\n\n#### `remove_highlight(id)`\n\nRemoves a specific highlight by its ID.\n\n**Parameters:**\n- `id` (string): The highlight ID returned from `highlight_region()`\n\n**Returns:** `boolean` - `true` if the highlight was found and removed, `false` otherwise\n\n**Example:**\n```tsx\nconst removed = viewer_ref.current?.remove_highlight('highlight-123');\nif (removed) {\n  console.log('Highlight removed successfully');\n}\n```\n\n#### `clear_all_highlights()`\n\nRemoves all highlights created via the `highlight_region()` API. Does not affect user-created annotations.\n\n**Example:**\n```tsx\nviewer_ref.current?.clear_all_highlights();\n```\n\n### Advanced Example: Search Results Highlighting\n\nA common use case is highlighting search results in a PDF:\n\n```tsx\nimport { useState, useRef } from 'react';\nimport { PdfViewer, PdfViewerRef } from 'hazo_pdf';\nimport 'hazo_pdf/styles.css';\n\ninterface SearchResult {\n  page: number;\n  rect: [number, number, number, number];\n  text: string;\n}\n\nfunction SearchableViewer() {\n  const viewer_ref = useRef<PdfViewerRef>(null);\n  const [highlight_ids, set_highlight_ids] = useState<string[]>([]);\n\n  // Simulated search results\n  const search_results: SearchResult[] = [\n    { page: 0, rect: [100, 500, 300, 550], text: 'Result 1' },\n    { page: 0, rect: [100, 400, 300, 450], text: 'Result 2' },\n    { page: 1, rect: [150, 600, 350, 650], text: 'Result 3' }\n  ];\n\n  const highlight_search_results = () => {\n    // Clear previous highlights\n    viewer_ref.current?.clear_all_highlights();\n\n    // Add new highlights\n    const ids = search_results.map(result =>\n      viewer_ref.current?.highlight_region(result.page, result.rect, {\n        border_color: '#3B82F6',\n        background_color: '#DBEAFE',\n        background_opacity: 0.3\n      })\n    ).filter(Boolean) as string[];\n\n    set_highlight_ids(ids);\n  };\n\n  const clear_search = () => {\n    viewer_ref.current?.clear_all_highlights();\n    set_highlight_ids([]);\n  };\n\n  return (\n    <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>\n      <div style={{ padding: '1rem', background: '#f0f0f0' }}>\n        <button onClick={highlight_search_results}>\n          Highlight Search Results ({search_results.length})\n        </button>\n        <button onClick={clear_search}>Clear Highlights</button>\n        <span>Highlighted: {highlight_ids.length} results</span>\n      </div>\n\n      <div style={{ flex: 1 }}>\n        <PdfViewer\n          ref={viewer_ref}\n          url=\"/document.pdf\"\n        />\n      </div>\n    </div>\n  );\n}\n```\n\n### Coordinate System Notes\n\n- Highlights use PDF coordinate space (points), not screen pixels\n- PDF coordinates start at the bottom-left corner (Y increases upward)\n- The `rect` parameter format is `[x1, y1, x2, y2]` where:\n  - `x1, y1`: Bottom-left corner\n  - `x2, y2`: Top-right corner\n- If you need to convert screen coordinates to PDF coordinates, you'll need to use the PDF page viewport (see the test app for examples)\n\n### Styling Defaults\n\nIf no `options` are provided to `highlight_region()`, the highlight uses default colors from the configuration file:\n- `border_color`: From `highlight_border_color` config setting\n- `background_color`: From `highlight_fill_color` config setting\n- `background_opacity`: From `highlight_fill_opacity` config setting\n\nYou can override any or all of these on a per-highlight basis.\n\n---\n\n## API Reference\n\n### PdfViewer Props\n\n#### Required Props\n\n| Prop | Type | Description |\n|------|------|-------------|\n| `url` | `string` | URL or path to the PDF file. Can be a relative path, absolute URL, or API endpoint. |\n\n#### Optional Props\n\n##### Basic Configuration\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `className` | `string` | `\"\"` | Additional CSS classes to apply to the viewer container. |\n| `scale` | `number` | `1.0` | Initial zoom level. Values > 1.0 zoom in, < 1.0 zoom out. |\n| `fit_to_width` | `boolean` | `false` | If `true`, automatically scales the PDF to fit the container width. Manual zoom buttons override auto-scaling. Container must have explicit dimensions. |\n| `background_color` | `string` | `\"#2d2d2d\"` | Background color for areas outside PDF pages (hex format: `#RRGGBB`). Overrides config file value. |\n| `config_file` | `string` | `undefined` | Path to configuration INI file (e.g., `\"config/hazo_pdf_config.ini\"`). If not provided, uses default configuration. |\n| `logger` | `Logger` | `undefined` | Logger instance from hazo_logs or custom logger matching the Logger interface. If not provided, falls back to console-based logging. Useful for debugging and monitoring PDF operations. |\n\n##### Event Callbacks\n\n| Prop | Type | Description |\n|------|------|-------------|\n| `on_load` | `(pdf: PDFDocumentProxy) => void` | Called when PDF is successfully loaded. Receives the PDF document proxy with metadata (page count, etc.). |\n| `on_error` | `(error: Error) => void` | Called when an error occurs (PDF load failure, rendering error, etc.). Receives the error object. |\n| `on_save` | `(pdf_bytes: Uint8Array, filename: string) => void` | Called when user clicks the Save button. Receives the PDF bytes with annotations embedded and a suggested filename. You can create a Blob and trigger download, or upload to a server. |\n| `on_download` | `(filename: string) => void` | Called after the Download button triggers a browser download. Receives the filename used. |\n\n##### Annotation Management\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `annotations` | `PdfAnnotation[]` | `[]` | Array of existing annotations to display. Used to restore saved annotations or sync from a server. |\n| `on_annotation_create` | `(annotation: PdfAnnotation) => void` | `undefined` | Called when a new annotation is created (Square or FreeText). Use this to persist annotations to your backend. |\n| `on_annotation_update` | `(annotation: PdfAnnotation) => void` | `undefined` | Called when an existing annotation is edited (text content changed). Use this to sync updates to your backend. |\n| `on_annotation_delete` | `(annotation_id: string) => void` | `undefined` | Called when an annotation is deleted. Receives the annotation ID. Use this to remove annotations from your backend. |\n\n##### Timestamp and Suffix Configuration\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `append_timestamp_to_text_edits` | `boolean` | `false` | If `true`, automatically appends a timestamp to all FreeText annotations when created or edited. Format: `[YYYY-MM-DD h:mmam/pm]`. Overrides config file value. |\n| `annotation_text_suffix_fixed_text` | `string` | `\"\"` | Fixed text string to append before the timestamp (if timestamps are enabled). This text will be enclosed in brackets. Overrides config file value. |\n\n##### Sidepanel Metadata\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `sidepanel_metadata_enabled` | `boolean` | `false` | If `true`, enables the metadata sidepanel on the right side of the viewer. The panel can be toggled from the toolbar or right edge button. |\n| `metadata_input` | `MetadataInput` | `undefined` | Metadata structure with header, data (accordions), and footer sections. Each section supports different format types (h1-h5, body) and editable fields. See [Sidepanel Metadata](#sidepanel-metadata) section for details. |\n| `on_metadata_change` | `(updatedRow: MetadataDataItem, allData: MetadataInput) => { updatedRow: MetadataDataItem; allData: MetadataInput }` | `undefined` | Callback when a metadata field is edited. Receives the updated row and complete metadata structure. Must return both parameters. Use this to persist metadata changes to your backend. |\n\n##### File Info Sidepanel\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `doc_data` | `Record<string, unknown>` | `undefined` | General document data to display in the File Info sidepanel. Shown in the \"Document Data\" section. Can contain any structured data from extraction (strings, numbers, arrays, objects). |\n| `highlight_fields_info` | `HighlightFieldInfo[]` | `undefined` | Array of highlighted/extracted fields to display with special styling. Shown in the \"Highlighted Fields\" section with field count. Each item has `field_name` (converted to Title Case) and `value` (displayed string). |\n| `file_metadata` | `FileMetadataInput` | `undefined` | Legacy format: Array of file metadata items with filename matching. Each item has `filename` (to match current file) and `file_data` (flexible JSON object with string fields or table arrays). See [File Info Sidepanel](#file-info-sidepanel) section for details. |\n| `extractions` | `ExtractionEntry[]` | `undefined` | Extraction entries from hazo_files `file_data.raw_data`. Each entry has `id?`, `extracted_at?` (ISO timestamp), `source?` (e.g., \"autofill\"), and `data` (key-value pairs). Shown in a collapsible \"Extractions\" section. |\n| `show_file_info_button` | `boolean` | `true` | Show file info sidepanel button in toolbar. Button only appears when at least one of: `doc_data`, `highlight_fields_info`, `file_metadata`, or `extractions` is provided. |\n\n##### Custom Stamps\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `right_click_custom_stamps` | `string` | `undefined` | JSON array string defining custom stamp menu items for the right-click context menu. Each stamp appears as a menu item that, when clicked, adds predefined text to the PDF. Overrides config file value. |\n\n**Custom Stamp JSON Format:**\n\n```typescript\n[\n  {\n    name: string;                          // Menu item label (required)\n    text: string;                          // Text to add to PDF (required)\n    order: number;                         // Menu position, lower = higher (required)\n    time_stamp_suffix_enabled?: boolean;   // Append timestamp? (default: false)\n    fixed_text_suffix_enabled?: boolean;   // Append fixed text? (default: false)\n    background_color?: string;             // Hex or rgb() format (default: config)\n    border_size?: number;                  // Pixels, 0 = no border (default: config)\n    font_color?: string;                   // Hex or rgb() format (default: config)\n    font_weight?: string;                  // CSS font-weight (default: config)\n    font_style?: string;                   // CSS font-style (default: config)\n    font_size?: number;                    // Pixels (default: config)\n    font_name?: string;                    // CSS font-family (default: config)\n  }\n]\n```\n\n**Example:**\n\n```tsx\nconst stamps = JSON.stringify([\n  {\n    name: \"Approved\",\n    text: \"✓\",\n    order: 1,\n    time_stamp_suffix_enabled: true,\n    background_color: \"rgb(200, 255, 200)\",\n    border_size: 1,\n    font_color: \"#000000\",\n    font_weight: \"bold\",\n    font_size: 16\n  }\n]);\n\n<PdfViewer\n  url=\"/document.pdf\"\n  right_click_custom_stamps={stamps}\n/>\n```\n\n##### Data Extraction\n\nProps to configure LLM-based data extraction from PDFs. Requires `hazo_llm_api` package.\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `show_extract_button` | `boolean` | `false` | Show Extract button in toolbar for LLM-based data extraction. |\n| `extract_prompt_area` | `string` | `undefined` | Prompt area for extraction (e.g., \"invoices\", \"contracts\"). Used to locate prompts in hazo_llm_api. |\n| `extract_prompt_key` | `string` | `undefined` | Prompt key for extraction (e.g., \"extract_invoice_data\"). Identifies specific prompt to use. |\n| `extract_api_endpoint` | `string` | `undefined` | API endpoint for server-side extraction (e.g., \"/api/extract\"). POST endpoint that receives PDF data and returns extracted JSON. |\n| `extract_storage_type` | `'local' \\| 'google_drive'` | `'local'` | Storage type for hazo_files integration when saving extracted data. |\n| `on_extract_complete` | `(data: Record<string, unknown>) => void` | `undefined` | Callback when extraction completes successfully. Receives extracted data object. Data is also automatically saved to hazo_files SQLite table. |\n| `on_extract_error` | `(error: Error) => void` | `undefined` | Callback when extraction fails. Receives error object with details. |\n\n##### Multi-File Support\n\nProps for managing multiple PDF files. Mutually exclusive with `url` prop.\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `files` | `FileItem[]` | `undefined` | Array of files for multi-file mode. When provided, displays file manager UI. Mutually exclusive with `url` prop. |\n| `on_file_select` | `(file: FileItem) => void` | `undefined` | Callback when a file is selected in multi-file mode. |\n| `on_file_delete` | `(file_id: string) => void` | `undefined` | Callback when a file is deleted in multi-file mode. Receives file ID. |\n| `on_upload` | `(file: File, converted_pdf?: Uint8Array) => Promise<UploadResult>` | `undefined` | Callback for file upload. Receives original file and optional converted PDF (for non-PDF files). Must return `{ success: boolean, file_id?: string, url?: string, error?: string }`. |\n| `on_files_change` | `(files: FileItem[]) => void` | `undefined` | Callback when files array changes (file added, deleted, or reordered). |\n| `direct_upload` | `boolean` | `false` | When `true`, clicking \"+ Add file\" opens the native file picker directly (1-click). The button also accepts drag & drop. When `false` (default), clicking shows a dropzone modal first (2-click). Can also be set via `file_upload.direct_upload` in INI config. |\n| `enable_popout` | `boolean` | `false` | Enable popout to new tab feature. Shows \"Open in new tab\" and \"Download\" buttons in toolbar. In single-file mode, opens the PDF URL directly; in multi-file mode, uses sessionStorage-based popout. |\n| `popout_route` | `string` | `'/pdf-viewer'` | Route path for popout viewer. Used to construct new tab URL. |\n| `on_popout` | `(context: PopoutContext) => void` | `undefined` | Custom popout handler. Overrides default sessionStorage behavior. Receives context with file info and annotations. |\n| `viewer_title` | `string` | `undefined` | Title for the viewer (shown in dialog mode or popout window). |\n\n##### hazo_files Integration\n\nProps for remote storage integration via `hazo_files` package.\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `file_manager` | `FileAccessProvider` | `undefined` | File access provider from hazo_files for loading/saving PDFs via remote storage (Google Drive, Dropbox, local filesystem). Must be initialized before passing to component. |\n| `save_path` | `string` | `undefined` | Remote path for saving PDF via hazo_files. Used with `file_manager` when saving annotated PDFs. |\n\n##### Toolbar Visibility\n\nProps to control toolbar button visibility. These override config file values.\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `toolbar_enabled` | `boolean` | `true` | Master toggle to show/hide the entire toolbar. |\n| `show_zoom_controls` | `boolean` | `true` | Show zoom in/out/reset buttons. |\n| `show_square_button` | `boolean` | `true` | Show square annotation button. |\n| `show_undo_button` | `boolean` | `true` | Show undo button. |\n| `show_redo_button` | `boolean` | `true` | Show redo button. |\n| `show_save_button` | `boolean` | `true` | Show save button. |\n| `show_metadata_button` | `boolean` | `true` | Show metadata panel button (only visible when `sidepanel_metadata_enabled` is true). |\n| `show_annotate_button` | `boolean` | `true` | Show annotate (FreeText) button. |\n| `show_file_info_button` | `boolean` | `true` | Show file info sidepanel button (only visible when `file_metadata` is provided). |\n| `show_download_button` | `boolean` | `false` | Show Download button. Downloads the PDF with annotations baked in. |\n| `show_extract_button` | `boolean` | `false` | Show Extract button for data extraction. Requires extraction props to be configured. |\n| `download_filename` | `string` | `undefined` | Custom filename for the downloaded PDF. Defaults to the original filename or `\"document.pdf\"`. |\n| `display_filename` | `string` | `undefined` | Override the displayed filename in the file info sidepanel. Useful when `url` is an API endpoint that produces a non-human-readable path. |\n| `on_close` | `() => void` | `undefined` | Callback when close button is clicked. When provided, shows a close button (X) in the toolbar. Useful for modal/dialog usage. |\n\n**Example - Minimal toolbar:**\n\n```tsx\n<PdfViewer\n  url=\"/document.pdf\"\n  toolbar_enabled={true}\n  show_zoom_controls={true}\n  show_square_button={false}\n  show_undo_button={false}\n  show_redo_button={false}\n  show_save_button={false}\n/>\n```\n\n**Example - Dialog with close button:**\n\n```tsx\n<PdfViewer\n  url=\"/document.pdf\"\n  on_close={() => setDialogOpen(false)}\n/>\n```\n\n### PdfViewerDialog Props\n\nExtends all `PdfViewerProps` (except `on_close`) plus dialog-specific options:\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `open` | `boolean` | Required | Whether the dialog is open |\n| `on_open_change` | `(open: boolean) => void` | Required | Callback when open state should change |\n| `dialog_width` | `string` | `\"90vw\"` | Dialog width (CSS value) |\n| `dialog_height` | `string` | `\"90vh\"` | Dialog height (CSS value) |\n| `close_on_backdrop_click` | `boolean` | `true` | Close dialog when clicking backdrop |\n| `close_on_escape` | `boolean` | `true` | Close dialog when pressing Escape key |\n| `loading_fallback` | `React.ReactNode` | `undefined` | Custom loading fallback content |\n| `dialog_class_name` | `string` | `undefined` | Additional classes for dialog container |\n| `backdrop_class_name` | `string` | `undefined` | Additional classes for backdrop overlay |\n\n**Example:**\n\n```tsx\nimport { useState } from 'react';\nimport { PdfViewerDialog } from 'hazo_pdf';\n\nfunction App() {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return (\n    <>\n      <button onClick={() => setIsOpen(true)}>Open PDF</button>\n      <PdfViewerDialog\n        open={isOpen}\n        on_open_change={setIsOpen}\n        url=\"/document.pdf\"\n        dialog_width=\"80vw\"\n        dialog_height=\"80vh\"\n        close_on_backdrop_click={true}\n        close_on_escape={true}\n        // All PdfViewer props also work\n        on_load={(pdf) => console.log('Loaded', pdf.numPages, 'pages')}\n        on_annotation_create={(ann) => console.log('Created', ann)}\n      />\n    </>\n  );\n}\n```\n\n---\n\n### PdfAnnotation Interface\n\nRepresents a PDF annotation in the standard PDF coordinate space.\n\n```typescript\ninterface PdfAnnotation {\n  id: string;                              // Unique identifier (auto-generated)\n  type: 'Square' | 'FreeText' | 'Highlight' | 'CustomBookmark';\n  page_index: number;                      // Zero-based page number\n  rect: [number, number, number, number];  // PDF coordinates [x1, y1, x2, y2]\n  author: string;                          // Author name (default: \"User\")\n  date: string;                            // ISO date string\n  contents: string;                        // Annotation text/content\n  color?: string;                          // Color in hex format (e.g., \"#FF0000\")\n  subject?: string;                        // Optional subject/title\n  flags?: string;                          // Optional PDF flags\n}\n```\n\n**Note:** Highlights created via the programmatic API (`PdfViewerRef.highlight_region()`) will have `type: 'Highlight'` and `flags: 'api_highlight'` to distinguish them from user-created annotations.\n\n### PdfViewerRef Interface\n\nInterface for the ref exposed by `PdfViewer`. Use with `useRef<PdfViewerRef>()` to access programmatic highlight methods.\n\n```typescript\ninterface PdfViewerRef {\n  highlight_region: (\n    page_index: number,\n    rect: [number, number, number, number],\n    options?: HighlightOptions\n  ) => string;\n\n  remove_highlight: (id: string) => boolean;\n\n  clear_all_highlights: () => void;\n}\n```\n\nSee [Programmatic Highlight API](#programmatic-highlight-api) for detailed usage.\n\n### HighlightOptions Interface\n\nOptions for customizing highlights created via the API.\n\n```typescript\ninterface HighlightOptions {\n  border_color?: string;       // Hex format (e.g., \"#FF0000\")\n  background_color?: string;   // Hex format (e.g., \"#FFFF00\")\n  background_opacity?: number; // 0-1 (e.g., 0.4)\n  border_width?: number;       // Border width in pixels (default: 2)\n}\n```\n\n### Logger Interface\n\nInterface for custom logging integration. Compatible with hazo_logs and custom logger implementations.\n\n```typescript\ninterface Logger {\n  info: (message: string, data?: Record<string, unknown>) => void;\n  debug: (message: string, data?: Record<string, unknown>) => void;\n  warn: (message: string, data?: Record<string, unknown>) => void;\n  error: (message: string, data?: Record<string, unknown>) => void;\n}\n```\n\n**Usage with hazo_logs:**\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\nimport { createLogger } from 'hazo_logs';\n\nconst logger = createLogger('my_app', 'config/hazo_logs_config.ini');\n\n<PdfViewer\n  url=\"/document.pdf\"\n  logger={logger}\n/>\n```\n\n**Usage with custom logger:**\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\n\nconst custom_logger = {\n  info: (message, data) => console.log('[INFO]', message, data),\n  debug: (message, data) => console.debug('[DEBUG]', message, data),\n  warn: (message, data) => console.warn('[WARN]', message, data),\n  error: (message, data) => console.error('[ERROR]', message, data),\n};\n\n<PdfViewer\n  url=\"/document.pdf\"\n  logger={custom_logger}\n/>\n```\n\n**Logger Utilities:**\n\n```typescript\nimport { set_logger, get_logger } from 'hazo_pdf';\n\n// Set logger globally for all hazo_pdf components\nset_logger(my_logger);\n\n// Get current logger instance\nconst current_logger = get_logger();\n```\n\n**Logging Output:**\n\nThe library logs operations such as:\n- PDF conversion events (image to PDF, text to PDF, Excel to PDF)\n- PDF loading and rendering\n- Annotation operations\n- Error conditions\n\nIf no logger is provided, hazo_pdf falls back to console-based logging with a `[hazo_pdf]` prefix.\n\n### PDFDocumentProxy\n\nType from `pdfjs-dist`. Contains PDF metadata and page proxies.\n\n**Common properties:**\n- `numPages: number` - Total number of pages\n- `getPage(pageNumber: number): Promise<PDFPageProxy>` - Get a specific page\n\n---\n\n## Toolbar Configuration\n\nThe toolbar can be fully customized via the `[toolbar]` section in the configuration file. You can configure:\n\n- **Colors**: Background, border, font, and button colors (background, hover, active, save)\n- **Fonts**: Font family and size for toolbar text\n- **Visibility**: Show/hide individual button groups (zoom, square, undo, redo, save)\n- **Labels**: Customize all button labels and text\n\n**All toolbar settings with defaults:**\n\n| Setting | Type | Default | Description |\n|---------|------|---------|-------------|\n| `toolbar_background_color` | Color | `#f9fafb` | Toolbar background color |\n| `toolbar_border_color` | Color | `#e5e7eb` | Toolbar border color |\n| `toolbar_font_family` | String | `system-ui, -apple-system, sans-serif` | Font family for toolbar |\n| `toolbar_font_size` | Number | `14` | Font size in pixels |\n| `toolbar_font_color` | Color | `#111827` | Text color for toolbar |\n| `toolbar_button_background_color` | Color | `#ffffff` | Regular button background |\n| `toolbar_button_background_color_hover` | Color | `#f3f4f6` | Button hover background |\n| `toolbar_button_text_color` | Color | `#374151` | Button text color |\n| `toolbar_button_active_background_color` | Color | `#3b82f6` | Active button background |\n| `toolbar_button_active_text_color` | Color | `#ffffff` | Active button text color |\n| `toolbar_button_save_background_color` | Color | `#10b981` | Save button background |\n| `toolbar_button_save_background_color_hover` | Color | `#059669` | Save button hover background |\n| `toolbar_button_save_text_color` | Color | `#ffffff` | Save button text color |\n| `toolbar_button_disabled_opacity` | Number | `0.5` | Opacity for disabled buttons (0.0-1.0) |\n| `toolbar_show_zoom_controls` | Boolean | `true` | Show zoom controls |\n| `toolbar_show_square_button` | Boolean | `true` | Show square annotation button |\n| `toolbar_show_undo_button` | Boolean | `true` | Show undo button |\n| `toolbar_show_redo_button` | Boolean | `true` | Show redo button |\n| `toolbar_show_save_button` | Boolean | `true` | Show save button |\n| `toolbar_show_metadata_button` | Boolean | `true` | Show metadata panel button (only shown when sidepanel is enabled) |\n| `toolbar_zoom_out_label` | String | `\"−\"` | Zoom out button label |\n| `toolbar_zoom_in_label` | String | `\"+\"` | Zoom in button label |\n| `toolbar_zoom_reset_label` | String | `\"Reset\"` | Reset zoom button label |\n| `toolbar_square_label` | String | `\"Square\"` | Square button label |\n| `toolbar_undo_label` | String | `\"Undo\"` | Undo button label |\n| `toolbar_redo_label` | String | `\"Redo\"` | Redo button label |\n| `toolbar_save_label` | String | `\"Save\"` | Save button label |\n| `toolbar_saving_label` | String | `\"Saving...\"` | Saving button label |\n| `toolbar_metadata_label` | String | `\"Metadata\"` | Metadata panel button label |\n\n**Example configuration:**\n\n```ini\n[toolbar]\n# Customize colors\ntoolbar_background_color = rgb(240, 248, 255)\ntoolbar_border_color = rgb(59, 130, 246)\ntoolbar_font_color = rgb(30, 58, 138)\ntoolbar_button_background_color = rgb(219, 234, 254)\ntoolbar_button_text_color = rgb(30, 64, 175)\ntoolbar_button_active_background_color = rgb(37, 99, 235)\ntoolbar_button_save_background_color = rgb(34, 197, 94)\n\n# Hide some controls\ntoolbar_show_redo_button = false\ntoolbar_show_square_button = false\ntoolbar_show_metadata_button = false\n\n# Customize labels\ntoolbar_save_label = Save PDF\ntoolbar_undo_label = ← Undo\n```\n\n## Toolbar Controls\n\nThe PDF viewer includes a toolbar at the top with the following controls:\n\n### Zoom Controls\n\n- **Zoom In (+ button)**: Increases zoom level by 0.25x increments (max 3.0x)\n- **Zoom Out (- button)**: Decreases zoom level by 0.25x increments (min 0.5x)\n- **Reset Zoom button**: Resets zoom to 1.0x (100%)\n- **Zoom level display**: Shows current zoom percentage (e.g., \"125%\")\n\n**Usage:**\n- Click the `+` or `-` buttons to adjust zoom\n- Click \"Reset\" to return to default zoom\n- Zoom affects the PDF page size but maintains aspect ratio\n\n### Fit-to-Width Mode\n\nEnable automatic width-based scaling with the `fit_to_width` prop:\n\n```tsx\n<PdfViewer\n  url=\"/document.pdf\"\n  fit_to_width={true}\n/>\n```\n\n**Behavior:**\n- When enabled, the PDF automatically scales to fit the container width on initial load and after window resize\n- User can manually zoom in/out with zoom buttons, which disables auto-scaling for that session\n- Changing the `fit_to_width` prop value re-enables auto-scaling behavior\n- Use case: Viewing documents where full-width display is preferred (e.g., forms, contracts)\n\n**Technical Notes:**\n- Does not conflict with the `scale` prop (scale is the initial value, fit_to_width can override it after render)\n- Manual zoom buttons override fit-to-width mode, allowing users to adjust as needed\n- Container must have explicit width and height (see [Container Requirements](#container-requirements))\n\n### Annotation Tools\n\n- **Square button**: Activates square/rectangle annotation tool\n  - Click and drag on the PDF to create a rectangle\n  - Right-click the rectangle to add a comment\n  - Button highlights when active\n\n### History Controls\n\n- **Undo button**: Reverses the last annotation action\n  - Keyboard shortcut: `Ctrl+Z` (Windows/Linux) or `Cmd+Z` (Mac)\n  - Disabled when there are no actions to undo\n  - Shows history icon\n\n- **Redo button**: Reapplies the last undone action\n  - Keyboard shortcut: `Ctrl+Y` (Windows/Linux) or `Cmd+Y` (Mac)\n  - Disabled when there are no actions to redo\n  - Shows redo icon\n\n### Save Control\n\n- **Save button**: Saves all annotations directly into the PDF file\n  - Disabled when there are no annotations\n  - Shows save icon and \"Saving...\" text during save operation\n  - Triggers `on_save` callback with PDF bytes and filename\n\n### Metadata Panel Toggle\n\n- **Metadata button**: Toggles the metadata sidepanel (only visible when `sidepanel_metadata_enabled={true}`)\n  - Shows panel icon\n  - Button highlights when panel is open\n  - Opens/closes the right-side metadata panel\n\n---\n\n## Sidepanel Metadata\n\nThe PDF viewer can display a retractable sidepanel on the right side showing JSON metadata with header, data (accordions), and footer sections.\n\n### Enabling the Sidepanel\n\nTo enable the metadata sidepanel, set `sidepanel_metadata_enabled={true}` and provide `metadata_input`:\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\nimport type { MetadataInput } from 'hazo_pdf';\n\nconst metadata: MetadataInput = {\n  header: [\n    { style: 'h1', label: 'Document Information' },\n    { style: 'body', label: 'Last updated: 2025-01-15' }\n  ],\n  data: [\n    {\n      label: 'Document Title',\n      style: 'h3',\n      value: 'Annual Report 2024',\n      editable: true\n    },\n    {\n      label: 'Author',\n      style: 'h4',\n      value: 'John Doe',\n      editable: true\n    },\n    {\n      label: 'Status',\n      style: 'body',\n      value: 'Draft',\n      editable: false\n    }\n  ],\n  footer: [\n    { style: 'body', label: 'Version 1.0' }\n  ]\n};\n\n<PdfViewer\n  url=\"/document.pdf\"\n  sidepanel_metadata_enabled={true}\n  metadata_input={metadata}\n  on_metadata_change={(updatedRow, allData) => {\n    console.log('Updated row:', updatedRow);\n    console.log('All data:', allData);\n    // Save to server, update state, etc.\n    return { updatedRow, allData };\n  }}\n/>\n```\n\n### Metadata Structure\n\nThe `MetadataInput` interface has three sections:\n\n#### Header Section\n- Array of `MetadataHeaderItem` objects\n- Each item has `style` (format type) and `label` (text)\n- Rendered at the top of the panel\n\n#### Data Section\n- Array of `MetadataDataItem` objects\n- Each item is rendered as a collapsible accordion (starts collapsed)\n- Properties:\n  - `label`: Title shown as accordion header (required)\n  - `style`: Format type for the label (h1-h5, body) (required)\n  - `value`: Value to display (required)\n  - `editable`: Whether field can be edited (boolean, required)\n\n#### Footer Section\n- Array of `MetadataFooterItem` objects (same structure as header)\n- Rendered at the bottom of the panel\n\n### Format Types\n\nThe `style` property accepts the following format types:\n- `h1`: Large heading (3xl, bold)\n- `h2`: Heading (2xl, bold)\n- `h3`: Subheading (xl, semibold)\n- `h4`: Smaller subheading (lg, semibold)\n- `h5`: Small heading (base, semibold)\n- `body`: Regular text (base)\n\n### Editable Fields\n\nWhen `editable: true`:\n- A pencil icon appears next to the value\n- Clicking the pencil enters edit mode\n- Edit mode shows:\n  - Text input field (single-line)\n  - Green circle-check button (save)\n  - Red circle-x button (cancel)\n- Pressing `Enter` saves, `Escape` cancels\n- On save, `on_metadata_change` callback is called with:\n  - `updatedRow`: The updated `MetadataDataItem`\n  - `allData`: The complete `MetadataInput` with all updates\n- Callback must return `{ updatedRow, allData }`\n\n### Panel Controls\n\n- **Toggle from toolbar**: Click the \"Metadata\" button in the toolbar\n- **Toggle from right edge**: Click the chevron button on the right edge (when closed)\n- **Resize**: Drag the left edge of the panel to resize (200px - 800px on desktop)\n- **Close**: Click the chevron button in the panel header or toggle button in toolbar\n\n### Responsive Behavior\n\n- **Desktop (> 1024px)**: Panel appears side-by-side with PDF viewer, max width 800px\n- **Tablet (768px - 1024px)**: Panel max width is 50% of screen, can overlay\n- **Mobile (< 768px)**: Panel uses overlay mode, max width 90vw, full height\n\n### Example: Complex Metadata (Test App Example)\n\nThe test app includes comprehensive test data demonstrating all metadata variations. This example shows all format types (h1-h5, body), editable and non-editable fields:\n\n```tsx\nimport type { MetadataInput, MetadataDataItem } from 'hazo_pdf';\n\nconst test_metadata: MetadataInput = {\n  header: [\n    { style: 'h1', label: 'Document Information' },\n    { style: 'h3', label: 'Test Document Metadata' },\n    { style: 'body', label: 'Last updated: 2025-01-15' }\n  ],\n  data: [\n    {\n      label: 'Document Title',\n      style: 'h2',\n      value: 'Annual Report 2024',\n      editable: true\n    },\n    {\n      label: 'Author Information',\n      style: 'h3',\n      value: 'John Doe\\nSenior Analyst\\nDepartment of Finance',\n      editable: true\n    },\n    {\n      label: 'Document Status',\n      style: 'h4',\n      value: 'Approved',\n      editable: false\n    },\n    {\n      label: 'Version',\n      style: 'h5',\n      value: '1.0.0',\n      editable: true\n    },\n    {\n      label: 'Category',\n      style: 'body',\n      value: 'Financial Report',\n      editable: false\n    },\n    {\n      label: 'Keywords',\n      style: 'body',\n      value: 'financial, annual, report, 2024',\n      editable: true\n    },\n    {\n      label: 'Document ID',\n      style: 'h5',\n      value: 'DOC-2024-001',\n      editable: false\n    },\n    {\n      label: 'Notes',\n      style: 'body',\n      value: 'This document contains comprehensive financial data for the fiscal year 2024. Please review all sections carefully before finalizing.',\n      editable: true\n    },\n    {\n      label: 'Confidentiality Level',\n      style: 'h4',\n      value: 'Internal Use Only',\n      editable: false\n    },\n    {\n      label: 'Approval Date',\n      style: 'body',\n      value: '2025-01-10',\n      editable: false\n    }\n  ],\n  footer: [\n    { style: 'body', label: 'This is a test metadata example' },\n    { style: 'h5', label: 'Version 1.0 - Test App' }\n  ]\n};\n\n<PdfViewer\n  url=\"/document.pdf\"\n  sidepanel_metadata_enabled={true}\n  metadata_input={test_metadata}\n  on_metadata_change={(updatedRow, allData) => {\n    console.log('Updated:', updatedRow);\n    console.log('All data:', allData);\n    // Update state, save to backend, etc.\n    return { updatedRow, allData };\n  }}\n/>\n```\n\n**This example demonstrates:**\n- **Header section**: Multiple format types (h1, h3, body)\n- **Data section**: All format types (h2, h3, h4, h5, body) with both editable and non-editable fields\n- **Footer section**: Multiple format types (body, h5)\n- **Multi-line values**: Author Information includes newlines\n- **Long text values**: Notes field contains a longer description\n- **Mixed editability**: Some fields editable, others read-only\n\n**Note:** This test data is used in the test app (`app/viewer/[filename]/page.tsx`) to demonstrate all sidepanel metadata features.\n\n---\n\n## Usage Tips\n\n### Styling\n\n- The viewer uses TailwindCSS classes. Ensure TailwindCSS is configured in your project or import the bundled styles.\n- Use the `className` prop to add custom wrapper styles.\n- Use the configuration file for comprehensive styling customization.\n\n### Annotation Coordinate System\n\n- Annotations use PDF coordinate space (points), not screen pixels.\n- PDF coordinates start at the bottom-left (Y increases upward).\n- The component handles coordinate conversion automatically.\n\n### Pan Tool\n\n- Pan is the default tool (`current_tool = null`).\n- Users can drag to scroll/pan the document.\n- The cursor changes to a hand icon when panning.\n\n### Square Annotations\n\n1. Click the \"Square\" button in the toolbar.\n2. Click and drag on the PDF to create a rectangle.\n3. Right-click the rectangle to add a comment.\n\n### FreeText Annotations\n\n1. Right-click anywhere on the PDF.\n2. Select \"Annotate\" from the context menu.\n3. Enter text in the dialog.\n4. Click the checkmark to save.\n5. Left-click an existing FreeText annotation to edit or delete it.\n\n### Custom Stamps\n\n1. Configure stamps via `right_click_custom_stamps` prop or config file.\n2. Right-click on the PDF.\n3. Select a stamp from the bottom of the menu.\n4. The stamp text is added at the click position with optional timestamp/fixed text.\n\n### Saving Annotations\n\n- Click the \"Save\" button in the toolbar.\n- The `on_save` callback receives PDF bytes with annotations embedded using `pdf-lib`.\n- You can download directly or upload to a server.\n\n**Example download:**\n\n```tsx\nconst handleSave = (pdfBytes: Uint8Array, filename: string) => {\n  const blob = new Blob([pdfBytes], { type: 'application/pdf' });\n  const url = URL.createObjectURL(blob);\n  const a = document.createElement('a');\n  a.href = url;\n  a.download = filename || 'document.pdf';\n  a.click();\n  URL.revokeObjectURL(url);\n};\n```\n\n### Timestamp Formatting\n\nWhen `append_timestamp_to_text_edits` is enabled, timestamps are formatted as:\n- Format: `YYYY-MM-DD h:mmam/pm`\n- Example: `2025-11-17 2:24pm`\n\nThe position and bracket style can be configured via the config file:\n- `suffix_text_position`: `\"adjacent\"`, `\"below_single_line\"`, or `\"below_multi_line\"` (default)\n- `suffix_enclosing_brackets`: Two-character string like `\"[]\"`, `\"()\"`, `\"{}\"` (default: `\"[]\"`)\n- `add_enclosing_brackets_to_suffixes`: `true` or `false` (default: `true`)\n\n### Responsive Design\n\nThe PDF viewer is fully responsive and adapts to different screen sizes:\n\n**Desktop (> 1024px):**\n- Full feature set available\n- Sidepanel appears side-by-side with PDF (when enabled)\n- All toolbar buttons visible\n- Optimal viewing experience\n\n**Tablet (768px - 1024px):**\n- Sidepanel max width is 50% of screen (when enabled)\n- Toolbar buttons may wrap to multiple rows\n- Touch-friendly button sizes\n- Horizontal scrolling available for zoomed PDFs\n\n**Mobile (< 768px):**\n- Sidepanel uses overlay mode (when enabled), max 90vw width\n- Toolbar buttons wrap and use touch-friendly sizes (min 44px height)\n- PDF viewer maintains full functionality\n- Pan tool works with touch gestures\n- All annotation tools remain accessible\n\n**Breakpoints:**\n- Mobile: `< 768px`\n- Tablet: `768px - 1024px`\n- Desktop: `> 1024px`\n\nThe viewer uses CSS media queries to adjust layout and component sizes automatically. All interactive elements are touch-friendly on mobile devices.\n\n---\n\n### Annotation Coordinate System\n\n- Annotations use PDF coordinate space (points), not screen pixels.\n- PDF coordinates start at the bottom-left (Y increases upward).\n- The component handles coordinate conversion automatically.\n\n### Pan Tool\n\n- Pan is the default tool (`current_tool = null`).\n- Users can drag to scroll/pan the document.\n- The cursor changes to a hand icon when panning.\n\n### Square Annotations\n\n1. Click the \"Square\" button in the toolbar.\n2. Click and drag on the PDF to create a rectangle.\n3. Right-click the rectangle to add a comment.\n\n### FreeText Annotations\n\n1. Right-click anywhere on the PDF.\n2. Select \"Annotate\" from the context menu.\n3. Enter text in the dialog.\n4. Click the checkmark to save.\n5. Left-click an existing FreeText annotation to edit or delete it.\n\n### Custom Stamps\n\n1. Configure stamps via `right_click_custom_stamps` prop or config file.\n2. Right-click on the PDF.\n3. Select a stamp from the bottom of the menu.\n4. The stamp text is added at the click position with optional timestamp/fixed text.\n\n### Saving Annotations\n\n- Click the \"Save\" button in the toolbar.\n- The `on_save` callback receives PDF bytes with annotations embedded using `pdf-lib`.\n- You can download directly or upload to a server.\n\n**Example download:**\n\n```tsx\nconst handleSave = (pdfBytes: Uint8Array, filename: string) => {\n  const blob = new Blob([pdfBytes], { type: 'application/pdf' });\n  const url = URL.createObjectURL(blob);\n  const a = document.createElement('a');\n  a.href = url;\n  a.download = filename || 'document.pdf';\n  a.click();\n  URL.revokeObjectURL(url);\n};\n```\n\n### Timestamp Formatting\n\nWhen `append_timestamp_to_text_edits` is enabled, timestamps are formatted as:\n- Format: `YYYY-MM-DD h:mmam/pm`\n- Example: `2025-11-17 2:24pm`\n\nThe position and bracket style can be configured via the config file:\n- `suffix_text_position`: `\"adjacent\"`, `\"below_single_line\"`, or `\"below_multi_line\"` (default)\n- `suffix_enclosing_brackets`: Two-character string like `\"[]\"`, `\"()\"`, `\"{}\"` (default: `\"[]\"`)\n- `add_enclosing_brackets_to_suffixes`: `true` or `false` (default: `true`)\n\n---\n\n## Multi-File Support\n\nThe PDF viewer can manage and display multiple PDF files with an integrated file manager interface.\n\n### Basic Multi-File Usage\n\n```tsx\nimport { PdfViewer } from 'hazo_pdf';\nimport type { FileItem, UploadResult } from 'hazo_pdf';\nimport { useState } from 'react';\nimport 'hazo_pdf/styles.css';\n\nfunction MultiFileViewer() {\n  const [files, setFiles] = useState<FileItem[]>([\n    {\n      id: '1',\n      name: 'document1.pdf',\n      url: '/pdfs/document1.pdf',\n      size: 245000,\n      type: 'application/pdf',\n      uploaded_at: new Date()\n    },\n    {\n      id: '2',\n      name: 'document2.pdf',\n      url: '/pdfs/document2.pdf',\n      size: 180000,\n      type: 'application/pdf',\n      uploaded_at: new Date()\n    }\n  ]);\n\n  const handle_upload = async (file: File, converted_pdf?: Uint8Array): Promise<UploadResult> => {\n    // Upload to your server\n    const formData = new FormData();\n    const pdf_to_upload = converted_pdf\n      ? new Blob([converted_pdf], { type: 'application/pdf' })\n      : file;\n\n    formData.append('file', pdf_to_upload, file.name.replace(/\\.[^.]+$/, '.pdf'));\n\n    const response = await fetch('/api/upload', {\n      method: 'POST',\n      body: formData\n    });\n\n    const result = await response.json();\n\n    if (!result.success) {\n      return { success: false, error: result.error };\n    }\n\n    return {\n      success: true,\n      file_id: result.file_id,\n      url: result.url\n    };\n  };\n\n  return (\n    <div style={{ width: '100%', height: '100vh' }}>\n      <PdfViewer\n        files={files}\n        on_files_change={setFiles}\n        on_upload={handle_upload}\n        enable_popout={true}\n        popout_route=\"/pdf-viewer\"\n      />\n    </div>\n  );\n}\n```\n\n**Features demonstrated:**\n- Multiple file management with file list UI\n- File upload with automatic conversion (images, Excel, text to PDF)\n- Popout to new tab functionality\n- File selection and deletion\n\n**FileItem Interface:**\n\n```typescript\ninterface FileItem {\n  id: string;              // Unique file identifier\n  name: string;            // Display name\n  url: string;             // URL or path to PDF\n  size: number;            // File size in bytes\n  type: string;            // MIME type\n  uploaded_at: Date;       // Upload timestamp\n}\n```\n\n**Notes:**\n- `files` prop and `url` prop are mutually exclusive\n- When `files` is provided, the file manager U","readmeFilename":"README.md"}