{"_id":"tauri-notice-window","_rev":"27-6272a1dd4d9a6863fc63efb2d412bf28","name":"tauri-notice-window","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"tauri-notice-window","version":"1.0.0","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.0","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"dist":{"shasum":"35322f03e8ad059bcd38243b7034cfcd5a9e78ea","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.0.tgz","fileCount":31,"integrity":"sha512-UKS8wieP/KiLQkeRYf31IlyAipKEh12HOnX/HaGEiYKJnyjcBQF2qMZ4X65NiJjygvacgvixn+BxCSzrMiqr6w==","signatures":[{"sig":"MEQCIF9ircBGjW6ubbTCDmSPv7KbdFiKQgV5mEyXDfF+t3D2AiAnKa1FcqXvTnAbGdTHGvhhba2/hnpMwpEKmcBYo9Tb8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":536894},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b07c7165e4e69a19ab905dcae9a5fdb3245a14a4","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"_npmVersion":"11.6.0","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","typescript":"^5.9.3","@types/node":"^24.9.1","@types/react":"^19.2.2","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.0_1761246682110_0.3867067838072096","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"tauri-notice-window","version":"1.0.1","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.1","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"b0c1ce50b5f8ba6af43880833bf333032a046dd1","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.1.tgz","fileCount":31,"integrity":"sha512-E2jlsMsb+Fxkzj8SchBjXMM+tc6VeXvPMj8W7GGcgNCexr+mM5b2YE7jBplmFZqC8lC6DXzLRLaUWdaXf2FmEw==","signatures":[{"sig":"MEYCIQCDKUKhd2yMw4J3v8CR5d/Mzam2EwWh4/vkvmjR/eIvgwIhAI03raCJ4bgKDSyhiOCB+Eqn2l/cZQgpDsenDFYHYvgW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":537149},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b07c7165e4e69a19ab905dcae9a5fdb3245a14a4","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.0","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","typescript":"^5.9.3","@types/node":"^24.9.1","@types/react":"^19.2.2","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.1_1761246808219_0.12179353674517057","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"tauri-notice-window","version":"1.0.2","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.2","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"873adc8b72b4ea649347e2346309b74ffba347a2","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.2.tgz","fileCount":31,"integrity":"sha512-QivZJ1r9UQhjIMSaDKP+F1DxhNyxVM0PmvvF2f2D8Ux/TvgbU4v4Ruf+aiTBp9TK4pppAVnOzXlaRBAfQFkzzw==","signatures":[{"sig":"MEQCIEMRr9a0pI2jmU/t/+uurGShEWhq8zJw2pNOdnVuihqdAiBJDVj/ZntrBYhr4/BpMMTkD8R1YEaYNk8XOKozWc51/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":540483},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"589dd3e002cfda3fe83ccb818a517265cdfbbd32","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.0","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","typescript":"^5.9.3","@types/node":"^24.9.1","@types/react":"^19.2.2","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.2_1761247976881_0.7820509126162698","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"tauri-notice-window","version":"1.0.3","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.3","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"b642fac864c508ba78917c563f6c80e2f5d30451","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.3.tgz","fileCount":31,"integrity":"sha512-EcAgchNpXkXVbF8uPsR5JKqyqA3DoJlDny2muDdY33BLKXpGyECv0+JArTZNai74b2i76Y46dRq9W4MkcmwuGQ==","signatures":[{"sig":"MEQCIFg507ZmtHBdLf1gSLnT4z1Rs9QdZxmQ7u4IBrKfJ7LmAiATqk69ETFtuphaSumHeE3RnkdCzB/hH4E8yp8XWKRhwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":542646},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2941c3f34f77914f4afdc6a6f784594f7057d25d","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.0","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","typescript":"^5.9.3","@types/node":"^24.9.1","@types/react":"^19.2.2","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.3_1761248426972_0.18796010809190222","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"tauri-notice-window","version":"1.0.4","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.4","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"732455c3179f2090f8647320d7a15272b88df7d5","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.4.tgz","fileCount":31,"integrity":"sha512-LvlKku+Ys9BZl7X26Zw0QBJOnqO8S5reyBEjEJTuhU3kKfb8uRf3h7FoME4HIm5QJdkyMMRYvJhPaqrtiR2dtA==","signatures":[{"sig":"MEYCIQDQPsVvMJ5Pqz/rND9zhMmNXJRp0x8NTEBSZCz0KMYqUgIhAOifToPM0IaA8jz4aO5F5Ex6jGoCYtsIhcfs57ycIUOA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548426},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2941c3f34f77914f4afdc6a6f784594f7057d25d","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.1.0","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","typescript":"^5.9.3","@types/node":"^24.9.2","@types/react":"^19.2.2","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.4_1761931876644_0.385654530246192","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"tauri-notice-window","version":"1.0.5","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.5","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"018d83e35d96ace871df7a81e17b4a71f5f84d43","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.5.tgz","fileCount":31,"integrity":"sha512-vqBr6caMBILfjLvZnfzfHXs+TCWLF1sYJIcMY7JRuDMUkidA2u6RyyE0QfpACjtDBFS3AP9DoqAjEm3gUe0Ufg==","signatures":[{"sig":"MEUCIQDIv4SchnQB952cmUKi1N9l8yMp+dQiKNtjKRT+bvTcQQIgSs8r0RX73vgx7Zu6sBtQCuZb6PuXdpzaYCwGusAt8DI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548427},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"cebcdf9307e5c0eaa0fd8b0305313f4d1d7f8705","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.1.0","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.12","typescript":"^5.9.3","@types/node":"^24.10.0","@types/react":"^19.2.2","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.2"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.5_1762192428927_0.9427155882726117","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"tauri-notice-window","version":"1.0.6","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.6","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"d0abebafc60a8037b9ac0b3f28f094d2b64edc09","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.6.tgz","fileCount":31,"integrity":"sha512-vkemzsctTjBcJFzlJEVOwJS//PZfNtaEdLjwGkWy2TcZNP/8udDCIDED9bRP8DP+BqUN032VdBBH/pUTOCUjcw==","signatures":[{"sig":"MEQCIDp2EAf2RSvknfBI2OyIXtDQJFn6YhRHndS6AfoRskNDAiAEMhAd4bhXQGKciiNWomAEBGnPwZPazu0pvLuPwsRNXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":550832},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"942bf53024878f464525df69ba13e5146c2032fb","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.6","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.6_1763661099314_0.8827421522568819","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"tauri-notice-window","version":"1.0.7","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.7","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"18d7351bcc8d03812ee38979a13bb9ba0f4de852","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.7.tgz","fileCount":31,"integrity":"sha512-pVjUwdCp2RE2yP9acl1ppIg+Nol3d8AfLKnrW4FH5le9diwgI++xRdeAa1GbeG6rJsPf4datkii8ZOy+FU8AVA==","signatures":[{"sig":"MEYCIQC9qjhDcd8NLY7iSkOHbB845y5UFsDwk6k3D8B4gwlNAQIhALxU2GzgH0ccoHRSujQq9pSA/aHKNzAAyH97Uvye3Xk4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":551314},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6c05128c292e4202998d0bf11bf2e0dbbcd363a2","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.6","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.7_1763661325448_0.11559340414222974","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"tauri-notice-window","version":"1.0.8","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.8","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"4d92d621c0699cd446b2bf51b6866e94452e3901","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.8.tgz","fileCount":31,"integrity":"sha512-FGFKhtpQO70YuQLA2E6kClaN2XP21i1KULRZfxVqCXgNfobFp28JHY2hnONHuEK1NFym+ZJ+TIcZBW9B43qQ1g==","signatures":[{"sig":"MEUCIF9GTCMe5R+O1+CLxFUinqgUvcE8IMHX/F4g9QeLgPkUAiEA20ipEFNcxZMsAss+y8EtlJJU22e05cPEuwbys9CEjrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565040},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"23c8f57ea7abb38fb404395748933aaf90125b08","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.6","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.8_1763662720030_0.35598772264454337","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"tauri-notice-window","version":"1.0.9","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.9","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"bc0c4c2007f49a0d529d9d476de4c3f8f2be377f","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.9.tgz","fileCount":31,"integrity":"sha512-xrYCZ226YklKrMz4CIgPV3wfz4Raby+xweoVfrGjfziaS9avbDZ6W9p3qkxjWF2ZSmiSgxyZ1iVi8j2gG/iuVw==","signatures":[{"sig":"MEUCIQC89UleiGxd/vC3DDWxzTccc+yWtfkfwxGYxvd4HdcjgQIgeM2+RbbpRQ8kisYg3Q7rqep/usVylW9QjtSJtpKzw80=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":580060},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"23c8f57ea7abb38fb404395748933aaf90125b08","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.6","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.9_1763668629163_0.5075986276794384","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"tauri-notice-window","version":"1.0.10","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.10","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"c5951e2b93c685f5f33b34b7653b0d04430fe72b","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.10.tgz","fileCount":31,"integrity":"sha512-Ks46sRAoGW41xTT0ho5ClR3RQfK6luVohG19QJEn6Bi48QriyIgE056XR6MR0nhgKOShbBq81RwJfZJZriIn1w==","signatures":[{"sig":"MEUCIAGcMRdsuq5+UcPP8V8OM1R+1onQEeQOSDUSMrX9dLIPAiEAtordnrKan3MVET9d25EvmyjrDqwivj1Zcr3W6p0pgEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":582250},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"3a99b5740cae83a56c667e8bc4c1c6b0a47e36ed","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.6","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.10_1763669205348_0.8082191883100243","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"tauri-notice-window","version":"1.0.11","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.11","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"351bb0d96e03ddda14906f023899ccec49309f52","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.11.tgz","fileCount":31,"integrity":"sha512-jmM+DLx3yXcnRghpLAYMjA/BuMJuESHz8HfUruD/cJP1fDE+t3XTZhZ0Z1z2mq1RxL5gFLw5R+mhw1WLoMSVZA==","signatures":[{"sig":"MEUCIQDcRsbZjjNv4zJ+zepFJJi6npKNmcqIGD3zLIwS1rR0lwIgP6DcxdRQgyUtry8W0WHOg5azdGn8moS+cGYj69dRlG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":590178},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7db3e4feec154b22a5c1130dd444badcad36ad04","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.6","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.11_1763669976506_0.25963060985168007","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"tauri-notice-window","version":"1.0.12","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.12","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"d63bf997b677081e5abd74845b579a6c6728822e","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.12.tgz","fileCount":31,"integrity":"sha512-VpLrEN1b3mpS31yHwhNuvBGOE50hsPbPUaecEaBwrIzzgxd0anbaeQphPIMyGWQ7DHusWJUIxbJGFpqhIzASHw==","signatures":[{"sig":"MEUCIDCIkS0lqFG94E9jpOV2YNTuNG4SB7RvBY9uVFU5t16oAiEA+7qX3kH+4JReNvWXFZmctPzerZtnGS7Uq2Ei+ErRw5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":591123},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"806712134260cc9fc80ec590e42beb82736ffe26","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.12_1764253217374_0.9220144956875325","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"tauri-notice-window","version":"1.0.13","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.13","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"35d157a6d7ac20b2956d5f91b777c78eb8244493","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.13.tgz","fileCount":31,"integrity":"sha512-FkxNoE6VqNsyC7yzAIcwbH8t7mif9oE8dP+ifWBolSCmFxt0wQYtRSAwYU7idz0mVgRmQ2cvC5gDF/yZRPU3Kw==","signatures":[{"sig":"MEYCIQCQep5ioDQIP2MhYgCfZkRak57YDvt/IBcFtXg3EUL2EAIhANtLFdtTnRobhJKOzAd6RJB/Bu2Y9+ijjoDO/d3EI1FD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":593491},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"912cac3da8d45176018f48344eed6dac08761de8","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.13_1764254429270_0.3795320242401865","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"tauri-notice-window","version":"1.0.14","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.14","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"8239c06b43c842b1661cfa5ec8a244d084f6f1b8","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.14.tgz","fileCount":31,"integrity":"sha512-PwB39xm1l3jVhevDtlKKVfNp3rpdpbvBgtOObYD2uGepGvEmJzOeC4ZOdl33aRV5H4KW5pE5INPIEpuhfi94Lw==","signatures":[{"sig":"MEMCIAtaHpKGUtqmgqwYCvtKRZ68lGdMhel1eehNbB1TflJCAh9JD/OS1onN7JwxgqpFBCdjEVY0RGZ5v0TStUxYNw9C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":594874},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"912cac3da8d45176018f48344eed6dac08761de8","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.14_1764256450912_0.12667498686116718","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"tauri-notice-window","version":"1.0.15","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.15","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"ffa44391d0dad603cc8c54e9258cada99158eafa","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.15.tgz","fileCount":31,"integrity":"sha512-GzCyoh185qz/VDHP7t7mBEo+93nazBiuCqH7aV8RiP6LnMgP76+QK3UbpICpFVPZqzoYiRAXWWFnJRiF0SP3vQ==","signatures":[{"sig":"MEUCIQCVX9b0vz7ve5vnkt6siUtd7Dv91Oo905W1kNG1il0tlQIgcvoa4wKNuyU5A1iFOHn6cCnv0m6aFxaaHhy4m0ariPA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":601705},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"fd0e38409323d1d1754d2bf23d15567e17eb2ff9","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.8","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.15_1764342081982_0.583259416557786","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"tauri-notice-window","version":"1.0.16","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.16","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"e66c906d451f006a2469be13867660f92f17e3e1","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.16.tgz","fileCount":31,"integrity":"sha512-MpkuoLSrESjcy/LbEfOiMNG4PMDLyzCTrbFqXWdH+Ckw4IXmLGCdz5m7sMvDmwRGPAPNYx9QBiOYAGM7hSeEOA==","signatures":[{"sig":"MEQCIDLOASB4Yoxwz7OO9kmZKj5ljo81SW0wkGIcPdTJruRbAiAL0MVRDqKqJLmRLGtEaya9ZAEwBB8U+I7u1NaGIgVbUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":601756},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f3d6de3d39b323a41cce682ac3b5556baf9409a4","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.6.2","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.2.1","dependencies":{"dexie":"^4.2.1","zustand":"^5.0.9","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.9.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","typescript":"^5.9.3","@types/node":"^25.0.2","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.16_1765822279947_0.16052050558988995","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"tauri-notice-window","version":"1.0.17","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.17","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"2f785fb92daa108f3f7a926a05ffac4f3d029575","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.17.tgz","fileCount":31,"integrity":"sha512-YTh+MH0fkntNRFifxWQPegIb7DbBZqB3ZCQod6Q/GgO5w3G45+sLFWI9MOxW6wpi2wlYG/fGKi8BzFs26tmAbA==","signatures":[{"sig":"MEQCIEJCwvU5ih+KgZ7thiDlO9U757966JJ//ANjT3JGWC6wAiBa6nOK/HDUDKRWEcYCHUg8jdf9jCTtK8eCxAPWIUxCQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":601759},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"26f051aabfb450da2c69c4c1759a98c113ce1cc0","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.8.0","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.5.0","dependencies":{"dexie":"^4.3.0","zustand":"^5.0.11","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","typescript":"^5.9.3","@types/node":"^25.2.0","@types/react":"^19.2.10","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.17_1770128206177_0.823624394208667","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"tauri-notice-window","version":"1.0.18","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.18","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"75ef4f26bee071e805965e52e88798b9302077bc","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.18.tgz","fileCount":31,"integrity":"sha512-knTY/MeJrvuc1eAdyIoG0SE+MMt3g11YGrHj0vHmJ2qG0kMj3b33VaHALRrJk1IapptIoWIHnKQAPFtQrBW0Yw==","signatures":[{"sig":"MEQCIF6K0wFfRZo5ImaemfwIJFCpNr3iI2S4aUpYGRqLOeoDAiBZfVmSjoBJYCAHlbMtaHZYarU8sGeYRhrQo1fJT3jr7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":619292},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"72d34a06a302fa8fa9f694f8fee383e7f27d08de","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.9.0","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.6.1","dependencies":{"dexie":"^4.3.0","zustand":"^5.0.11","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.18_1772478952420_0.26652007550703116","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"tauri-notice-window","version":"1.0.20","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.20","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"bbc3355213a6819f3130f6cc36a4d513e6075a0d","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.20.tgz","fileCount":31,"integrity":"sha512-Uf0l/YtIYMynwuyFJ0HOYfPW1SICIqkMgbNXC3i6miD5RwtRiLk4FxQ8RHNOOOgSip6h5DT08s3Jb+PkjHb6rQ==","signatures":[{"sig":"MEQCIGHNnqhUH6tRp7N9RaLLOo/ikZP1Drv5YO9VMKwFZ+v2AiBJ3mpuV2W8EwmWJ+RYAnt06B0sf9mWh4OUvw50bPnBtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":624476},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"633c35ac56c7e5f2527d5b904499c9b41682ba47","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.10.1","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.7.0","dependencies":{"dexie":"^4.3.0","zustand":"^5.0.11","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.20_1772546613582_0.026434381041826827","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"tauri-notice-window","version":"1.0.21","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.21","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"ec4d3458f984df07b88ab57c2919fa1edeb89fac","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.21.tgz","fileCount":31,"integrity":"sha512-l3V8qIEUTQ+GG3IerFDRY9m7nPYX/f6GyZyVmIcjgjRQrMyu4DePNdjrpu14dLIQOQgR2oR0zOy/QJUFWVWUGw==","signatures":[{"sig":"MEYCIQCwNx75TxsNhaFvnR7Z8y+QhPfVWJGQB9gPn2TaQkvmoQIhAN5FK1A1CylV+rNoD9/WBpuukAXQx5x0O4byMfwVUdU/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":627841},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7f7e0576c18f0a4754fbee3eeecfbab4a16ce8fe","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.10.1","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.7.0","dependencies":{"dexie":"^4.3.0","zustand":"^5.0.11","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.21_1772547671631_0.6591576825582339","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"tauri-notice-window","version":"1.0.22","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.22","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"b3b3d54a4fafbff4576d143ff15d95478f7189ae","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.22.tgz","fileCount":31,"integrity":"sha512-6fuimvZOCVH2CUvHOfPtoRzcaKgDt4fY3qbuD/963ghpDcShR7YBq1DpLKl3vUufWkq+0z6ScPUjl8AzONuHLQ==","signatures":[{"sig":"MEUCIDANqtTm82zStB3U+by1PBJZZ2Ob6e5OetzKxvZjc4R+AiEA5JNYsDrOWAdGjtDvpAMwOkOQPg3kkYs5BJlZ6CR2bwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":629002},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"1a3c64d287727f67fd13e787b465d07d364d4b74","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.10.1","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.7.0","dependencies":{"dexie":"^4.3.0","zustand":"^5.0.11","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.22_1772548409216_0.0690600864688109","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"tauri-notice-window","version":"1.0.23","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.23","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"3486f204a97d8f402ad6f0918068a37004fb2d87","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.23.tgz","fileCount":31,"integrity":"sha512-gdRhTyzE6FVVXF2phU3JSWHmhme4LtDJUTxJbZ5V0BWv2cAr4rrWzS/gQaQxA2aVkaNSotw9vny9HOFCkskRzg==","signatures":[{"sig":"MEUCIQDriwyhUlAdWZNZ8hvp1Xu8fZ26M4z/mg0i61KVvJBXLQIgI2ZIk3m8+xOPsoH5St/Hy752akRZ0DApT5KMMNUUAX8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":633469},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b36ad532f32a78f9d02f1fca9074eae1ac247c71","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.10.1","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.7.0","dependencies":{"dexie":"^4.3.0","zustand":"^5.0.11","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.23_1772549495994_0.7280480507939793","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"tauri-notice-window","version":"1.0.25","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.25","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"6da763e488047f4942addd5933c4dd2a8f79e46a","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.25.tgz","fileCount":31,"integrity":"sha512-jUZ1Jft2JutTkmvLvLxvVH49bPNBbHCk7oj3Vdegj5WpLXXXDcQNfXm7KKJudDBXEuIXo9Lw8dDGjo8xp9gYXA==","signatures":[{"sig":"MEQCIBSqACM8Sd58ItxnJU+kBiCanFqgn82RKTUl3Wo+HwqcAiBsr6gYU1FdRt/a3f31ILb/nDajDEqUxdMeROWSYAS2yg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":633917},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d39b82ce4e8db07e3b8c3454ccf17102eeb95c67","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.11.1","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.8.2","dependencies":{"dexie":"^4.4.1","zustand":"^5.0.12","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","typescript":"^5.9.3","@types/node":"^25.3.3","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.25_1774621123458_0.9592346644811272","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"tauri-notice-window","version":"1.0.26","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.26","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"0224ecb0b3e8780c07c8574f057c34ae49f6a8c1","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.26.tgz","fileCount":31,"integrity":"sha512-KFxYBz2EaD9O43PGt0wswr/JeAlb8QQtYE5nAg8K22jsNcoY5OwzeXVhBlmbeZ1FH0C9hqQtMQeBQPHLQ8Wk3w==","signatures":[{"sig":"MEUCIQC2VE8YAm3FOeTzRCHXnE8RACQ43G6kW/Rlfi98IVPkMAIgDuFSJViwzxQCT1YM1mWuV7T0sJFEI/jOcpOCA66bdz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":633917},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d39b82ce4e8db07e3b8c3454ccf17102eeb95c67","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.11.1","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.8.2","dependencies":{"dexie":"^4.4.2","zustand":"^5.0.12","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.3","typescript":"^6.0.2","@types/node":"^25.5.0","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.26_1774967691191_0.46405566082444927","host":"s3://npm-registry-packages-npm-production"}},"1.0.27":{"name":"tauri-notice-window","version":"1.0.27","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","_id":"tauri-notice-window@1.0.27","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"homepage":"https://github.com/dickwu/tauri-notice-window","bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"dist":{"shasum":"56d2b727bb50c4e6ec515e1f7f017ca17e7cad0f","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.0.27.tgz","fileCount":31,"integrity":"sha512-hzskMatfpabGWWqvSMIY5MPXBcDbwVys0OMnzldwBnDmoy5l5Znl3ah8njhPnfpBOgkf/3v8pkABYVhHQu97Rg==","signatures":[{"sig":"MEUCIQCMm0MCP9hmx+u5I3Bb9LvULe42wWaqTSK9OWs29CHHAQIgL4BHtHa5DUk8PPznpFJnqYSSQcsTwE4pj8R1u2NWpA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":633917},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d39b82ce4e8db07e3b8c3454ccf17102eeb95c67","scripts":{"dev":"vite build --watch","build":"vite build && tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"repository":{"url":"git+https://github.com/dickwu/tauri-notice-window.git","type":"git"},"_npmVersion":"11.12.1","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","directories":{},"_nodeVersion":"25.9.0","dependencies":{"dexie":"^4.4.2","zustand":"^5.0.12","zustand-sync":"^0.2.3","@tauri-apps/api":"^2.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.7","typescript":"^6.0.2","@types/node":"^25.5.2","@types/react":"^19.2.14","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^19.2.4","react-dom":"^19.2.4"},"_npmOperationalInternal":{"tmp":"tmp/tauri-notice-window_1.0.27_1775595606880_0.8726547379503478","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"tauri-notice-window","version":"1.1.0","description":"A reusable React library for cross-window notification management in Tauri v2+ applications","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs","types":"./dist/index.d.ts"}},"scripts":{"build":"vite build && tsc --emitDeclarationOnly --outDir dist","dev":"vite build --watch","prepublishOnly":"npm run build"},"keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"author":"","license":"MIT","homepage":"https://github.com/dickwu/tauri-notice-window","repository":{"type":"git","url":"git+https://github.com/dickwu/tauri-notice-window.git"},"bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"peerDependencies":{"react":"^19.2.5","react-dom":"^19.2.5"},"dependencies":{"@tauri-apps/api":"^2.10.1","dexie":"^4.4.2","zustand":"^5.0.12","zustand-sync":"^0.2.3"},"devDependencies":{"@types/node":"^25.6.0","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","typescript":"^6.0.3","vite":"^8.0.10","vite-plugin-dts":"^4.5.4"},"gitHead":"2012f90fbf6d9ddaec0ae48e2b215dd436276692","_id":"tauri-notice-window@1.1.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-t8BCGM0ygCo3qpkVCaqX7vTuHIJToJu1n2Eckdp59ABiVJ9r7oCTsMtNpmKgrEYJK8CctpFuUeTsFHZ0LHS3zA==","shasum":"b8fd8b8f64c333f36020b3a8263809e2a9f97f14","tarball":"https://registry.npmjs.org/tauri-notice-window/-/tauri-notice-window-1.1.0.tgz","fileCount":39,"unpackedSize":666224,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDBVjtAu0diJ8WXI9OIEBbAPkyOqExiAJmUbYPKCm/6XQIgI9Cw/JQOhwIVc8LNpLryp3frRFB8Ya+Q0ON0nzAQTBc="}]},"_npmUser":{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"},"directories":{},"maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tauri-notice-window_1.1.0_1777490525902_0.9547650433497337"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-23T19:11:21.981Z","modified":"2026-04-29T19:22:06.238Z","1.0.0":"2025-10-23T19:11:22.320Z","1.0.1":"2025-10-23T19:13:28.404Z","1.0.2":"2025-10-23T19:32:57.095Z","1.0.3":"2025-10-23T19:40:27.208Z","1.0.4":"2025-10-31T17:31:16.858Z","1.0.5":"2025-11-03T17:53:49.133Z","1.0.6":"2025-11-20T17:51:39.511Z","1.0.7":"2025-11-20T17:55:25.652Z","1.0.8":"2025-11-20T18:18:40.243Z","1.0.9":"2025-11-20T19:57:09.363Z","1.0.10":"2025-11-20T20:06:45.614Z","1.0.11":"2025-11-20T20:19:36.707Z","1.0.12":"2025-11-27T14:20:17.554Z","1.0.13":"2025-11-27T14:40:29.478Z","1.0.14":"2025-11-27T15:14:11.112Z","1.0.15":"2025-11-28T15:01:22.172Z","1.0.16":"2025-12-15T18:11:20.129Z","1.0.17":"2026-02-03T14:16:46.357Z","1.0.18":"2026-03-02T19:15:52.583Z","1.0.20":"2026-03-03T14:03:33.797Z","1.0.21":"2026-03-03T14:21:11.802Z","1.0.22":"2026-03-03T14:33:29.365Z","1.0.23":"2026-03-03T14:51:36.180Z","1.0.25":"2026-03-27T14:18:43.825Z","1.0.26":"2026-03-31T14:34:51.340Z","1.0.27":"2026-04-07T21:00:07.047Z","1.1.0":"2026-04-29T19:22:06.092Z"},"bugs":{"url":"https://github.com/dickwu/tauri-notice-window/issues"},"license":"MIT","homepage":"https://github.com/dickwu/tauri-notice-window","keywords":["tauri","react","notification","window","queue","zustand","cross-window"],"repository":{"type":"git","url":"git+https://github.com/dickwu/tauri-notice-window.git"},"description":"A reusable React library for cross-window notification management in Tauri v2+ applications","maintainers":[{"name":"lifefarmer","email":"lifefarmerwu@gmail.com"}],"readme":"# Tauri Notice Window\n\nA reusable React library for cross-window notification management in Tauri v2+ applications.\n\n## Features\n\n- **Cross-Window State Sync**: All Tauri windows (main + notice windows) see the same state via `zustand-sync`\n- **Zustand-First Architecture**: Zustand store is the single source of truth at runtime\n- **Persistent Queue**: IndexedDB (Dexie) used only for cold storage (app restarts)\n- **Clean Data Flow**: Store → Database (one-way dependency, no circular dependencies)\n- **One-at-a-Time Display**: Only one notice window shown at a time\n- **Customizable Routes**: Configurable router prefix for notice pages\n- **URL Validation & 404 Fallback**: Automatic validation with customizable error pages for invalid routes\n- **Auto-Close for Borderless Windows**: Stuck borderless windows auto-close after configurable timeout\n- **Type Safety**: Full TypeScript support\n- **Easy Integration**: Simple hooks API\n- **Tauri v2 Ready**: Uses latest Tauri v2 window APIs\n\n## Installation\n\n```bash\nnpm install tauri-notice-window\n# or\nyarn add tauri-notice-window\n# or\npnpm add tauri-notice-window\n```\n\n## Tauri Permissions Setup\n\n**IMPORTANT**: Before using this library, you must configure Tauri permissions for notice windows.\n\nCreate a capability file in your Tauri project at `src-tauri/capabilities/notice.json`:\n\n```json\n{\n  \"$schema\": \"../gen/schemas/desktop-schema.json\",\n  \"identifier\": \"notice\",\n  \"description\": \"Capability for notice windows\",\n  \"windows\": [\"notice-*\"],\n  \"permissions\": [\n    \"core:default\",\n    \"core:window:allow-close\",\n    \"core:window:allow-show\",\n    \"core:window:allow-unminimize\",\n    \"core:window:allow-set-always-on-top\",\n    \"core:window:allow-center\",\n    \"core:webview:allow-webview-close\"\n  ]\n}\n```\n\n> **Note**: The `\"windows\": [\"notice-*\"]` pattern matches all notice windows created by this library based on the message ID (e.g., `notice-123`, `notice-456`).\n\nIf your notice windows need to make HTTP requests or access other Tauri plugins, add those permissions as well:\n\n```json\n{\n  \"$schema\": \"../gen/schemas/desktop-schema.json\",\n  \"identifier\": \"notice\",\n  \"description\": \"Capability for notice windows with HTTP access\",\n  \"windows\": [\"notice-*\"],\n  \"permissions\": [\n    \"core:default\",\n    \"core:window:allow-close\",\n    \"core:window:allow-show\",\n    \"core:window:allow-unminimize\",\n    \"core:window:allow-set-always-on-top\",\n    \"core:window:allow-center\",\n    \"core:webview:allow-webview-close\",\n    \"http:allow-fetch\",\n    \"http:allow-fetch-send\",\n    \"http:allow-fetch-cancel\",\n    \"http:allow-fetch-read-body\",\n    {\n      \"identifier\": \"http:default\",\n      \"allow\": [\n        {\n          \"url\": \"https://your-api-domain.com\"\n        }\n      ]\n    }\n  ]\n}\n```\n\nFor store/database access in notice windows:\n\n```json\n{\n  \"permissions\": [\n    \"core:default\",\n    \"core:window:allow-close\",\n    \"core:window:allow-show\",\n    \"core:window:allow-unminimize\",\n    \"core:window:allow-set-always-on-top\",\n    \"core:window:allow-center\",\n    \"core:webview:allow-webview-close\",\n    \"store:allow-get\",\n    \"store:allow-save\",\n    \"store:allow-delete\",\n    \"store:allow-reload\",\n    \"store:allow-load\"\n  ]\n}\n```\n\n\n## Quick Start\n\n### 1. Initialize the System\n\nIn your main app component or layout:\n\n```typescript\nimport { useEffect } from 'react'\nimport { initializeNoticeSystem, setNoticeConfig } from 'tauri-notice-window'\n\nfunction App() {\n  useEffect(() => {\n    // Optional: Configure before initialization\n    setNoticeConfig({\n      routePrefix: '/notice',  // default\n      databaseName: 'tauri-notice-db',  // default\n      defaultWidth: 400, // default width of the notice window\n      defaultHeight: 300, // default height of the notice window\n      notFoundUrl: '/404', // custom 404 page when route is invalid (optional)\n      defaultDecorations: true, // show window title bar by default (optional)\n      loadTimeout: 4000, // auto-close timeout for borderless windows in ms (optional)\n    })\n\n    // Initialize the system\n    initializeNoticeSystem()\n  }, [])\n\n  return <YourApp />\n}\n```\n\n### 2. Show a Notice\n\n```typescript\nimport { useNoticeWindow } from 'tauri-notice-window'\n\nfunction SocketHandler() {\n  const { showNotice } = useNoticeWindow()\n\n  const handleMessage = async (data) => {\n    await showNotice({\n      id: data.id,\n      title: data.title,\n      type: 'announcement',  // lowercase, matches route\n      data: data.content,\n      min_width: 400,\n      min_height: 300,\n    })\n  }\n\n  return <div>...</div>\n}\n```\n\n### 3. Create Notice Pages\n\nCreate a route for each message type. For example, `/notice/announcement`:\n\n```typescript\nimport { NoticeLayout, useCloseNotice } from 'tauri-notice-window'\n\nexport default function AnnouncementNotice() {\n  const { closeNotice } = useCloseNotice()\n\n  return (\n    <NoticeLayout>\n      {(message) => (\n        <div className=\"notice-container\">\n          <h1>{message.title}</h1>\n          <div>{message.data.content}</div>\n          <button onClick={closeNotice}>OK</button>\n        </div>\n      )}\n    </NoticeLayout>\n  )\n}\n```\n\n### 4. Create a 404 Error Page (Optional)\n\nIf a notice window URL is invalid, the library will automatically show a 404 page. Create a custom 404 component:\n\n```typescript\n// app/404/page.tsx or notice/404/page.tsx\nimport { useCloseNotice } from 'tauri-notice-window'\n\nexport default function NotFound() {\n  const { closeNotice } = useCloseNotice()\n\n  return (\n    <div className=\"error-container\">\n      <h1>404 - Page Not Found</h1>\n      <p>The requested notice page could not be found.</p>\n      <button onClick={closeNotice}>Close</button>\n    </div>\n  )\n}\n```\n\nThen configure the 404 URL during initialization:\n\n```typescript\nsetNoticeConfig({\n  routePrefix: '/notice',\n  notFoundUrl: '/notice/404', // or '/404' depending on your routing setup\n})\n```\n\n**How it works:**\n- Before creating a WebviewWindow, the library validates the URL\n- Invalid URLs (empty, malformed, or wrong protocol) trigger the fallback\n- A warning is logged to the console for debugging\n- The 404 page is shown instead of a broken window\n\n#### 404 Configuration Examples\n\n**Example 1: Basic Setup with Default 404**\n\n```typescript\nimport { initializeNoticeSystem, setNoticeConfig } from 'tauri-notice-window'\n\n// Use default /404 fallback\nsetNoticeConfig({\n  routePrefix: '/notice',\n  // notFoundUrl defaults to '/404' if not specified\n})\n\ninitializeNoticeSystem()\n```\n\n**Example 2: Custom 404 Route**\n\n```typescript\n// With custom 404 page inside notice route\nsetNoticeConfig({\n  routePrefix: '/notice',\n  notFoundUrl: '/notice/error',\n})\n\n// Create the error page at /notice/error\n// app/notice/error/page.tsx\nimport { useCloseNotice } from 'tauri-notice-window'\n\nexport default function NoticeError() {\n  const { closeNotice } = useCloseNotice()\n  \n  return (\n    <div className=\"error-page\">\n      <h2>Oops! Something went wrong</h2>\n      <p>This notification type is not supported.</p>\n      <button onClick={closeNotice}>Dismiss</button>\n    </div>\n  )\n}\n```\n\n**Example 3: Using External URL as 404 Fallback**\n\n```typescript\n// You can use absolute URLs for the 404 page\nsetNoticeConfig({\n  routePrefix: '/notice',\n  notFoundUrl: 'https://yourapp.com/error',\n})\n\n// Or use Tauri's custom protocol\nsetNoticeConfig({\n  routePrefix: '/notice',\n  notFoundUrl: 'tauri://localhost/error',\n})\n```\n\n**Example 4: Styled 404 Component**\n\n```typescript\n// app/notice/404/page.tsx\nimport { useCloseNotice, useMessageQueue } from 'tauri-notice-window'\n\nexport default function NotFound() {\n  const { closeNotice } = useCloseNotice()\n  const { queueLength } = useMessageQueue()\n\n  return (\n    <div style={{\n      display: 'flex',\n      flexDirection: 'column',\n      alignItems: 'center',\n      justifyContent: 'center',\n      height: '100vh',\n      padding: '20px',\n      backgroundColor: '#f5f5f5',\n    }}>\n      <h1 style={{ fontSize: '48px', margin: '0' }}>404</h1>\n      <p style={{ fontSize: '18px', color: '#666' }}>\n        Invalid notification type\n      </p>\n      {queueLength > 0 && (\n        <p style={{ fontSize: '14px', color: '#999' }}>\n          {queueLength} more notification{queueLength > 1 ? 's' : ''} in queue\n        </p>\n      )}\n      <button \n        onClick={closeNotice}\n        style={{\n          marginTop: '20px',\n          padding: '10px 20px',\n          fontSize: '16px',\n          cursor: 'pointer',\n          border: 'none',\n          borderRadius: '4px',\n          backgroundColor: '#007bff',\n          color: 'white',\n        }}\n      >\n        Close\n      </button>\n    </div>\n  )\n}\n```\n\n**Example 5: URL Validation Scenarios**\n\nThe library validates URLs and automatically falls back to 404 in these cases:\n\n```typescript\n// These message types will trigger 404 fallback:\n\n// ❌ Empty or undefined type\nawait showNotice({\n  id: '1',\n  title: 'Test',\n  type: '',  // Empty string → Invalid\n  data: {},\n})\n\n// ❌ Invalid characters that break URL\nawait showNotice({\n  id: '2',\n  title: 'Test',\n  type: '../../../etc/passwd',  // Path traversal → Invalid\n  data: {},\n})\n\n// ❌ If routePrefix is misconfigured\nsetNoticeConfig({\n  routePrefix: '',  // Empty prefix creates invalid URL\n})\n\n// ✅ These URLs are VALID:\nawait showNotice({\n  id: '3',\n  title: 'Test',\n  type: 'announcement',  // Creates: /notice/announcement?id=3\n  data: {},\n})\n\n// Valid URL patterns:\n// - Starts with /\n// - Starts with http:// or https://\n// - Starts with tauri://\n```\n\n**Example 6: Debugging Invalid URLs**\n\nWhen a URL validation fails, a console warning is logged:\n\n```typescript\n// Console output when validation fails:\n// ⚠️ Invalid window URL: /notice/?id=123. Using fallback 404 page.\n\n// To debug, check:\nsetNoticeConfig({\n  routePrefix: '/notice',\n  notFoundUrl: '/notice/404',\n})\n\n// Make sure your message has valid type:\nawait showNotice({\n  id: '123',\n  title: 'My Notice',\n  type: 'announcement',  // Should match a route in your app\n  data: {},\n})\n```\n\n**Example 7: Next.js App Router Setup**\n\n```typescript\n// app/layout.tsx\nimport { initializeNoticeSystem, setNoticeConfig } from 'tauri-notice-window'\n\nexport default function RootLayout({ children }) {\n  useEffect(() => {\n    setNoticeConfig({\n      routePrefix: '/notice',\n      notFoundUrl: '/notice/not-found',  // Next.js App Router style\n      defaultWidth: 400,\n      defaultHeight: 300,\n    })\n    \n    initializeNoticeSystem()\n  }, [])\n\n  return <html>{children}</html>\n}\n\n// Create: app/notice/not-found/page.tsx\nimport { useCloseNotice } from 'tauri-notice-window'\n\nexport default function NoticeNotFound() {\n  const { closeNotice } = useCloseNotice()\n  \n  return (\n    <div className=\"p-6 text-center\">\n      <h1 className=\"text-2xl font-bold mb-4\">Page Not Found</h1>\n      <p className=\"mb-4\">The notification page you're looking for doesn't exist.</p>\n      <button \n        onClick={closeNotice}\n        className=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600\"\n      >\n        Close Notification\n      </button>\n    </div>\n  )\n}\n```\n\n**Example 8: React Router Setup**\n\n```typescript\n// App.tsx\nimport { BrowserRouter, Routes, Route } from 'react-router-dom'\nimport { initializeNoticeSystem, setNoticeConfig } from 'tauri-notice-window'\n\nfunction App() {\n  useEffect(() => {\n    setNoticeConfig({\n      routePrefix: '/notice',\n      notFoundUrl: '/notice/404',\n      defaultWidth: 400,\n      defaultHeight: 300,\n    })\n    \n    initializeNoticeSystem()\n  }, [])\n\n  return (\n    <BrowserRouter>\n      <Routes>\n        {/* Main app routes */}\n        <Route path=\"/\" element={<Home />} />\n        \n        {/* Notice routes */}\n        <Route path=\"/notice/announcement\" element={<AnnouncementNotice />} />\n        <Route path=\"/notice/alert\" element={<AlertNotice />} />\n        <Route path=\"/notice/404\" element={<NoticeNotFound />} />\n      </Routes>\n    </BrowserRouter>\n  )\n}\n\n// NoticeNotFound.tsx\nimport { useCloseNotice } from 'tauri-notice-window'\n\nexport function NoticeNotFound() {\n  const { closeNotice } = useCloseNotice()\n  \n  return (\n    <div className=\"error-container\">\n      <h1>404 - Notification Not Found</h1>\n      <p>This notification type is not recognized.</p>\n      <button onClick={closeNotice}>Close</button>\n    </div>\n  )\n}\n```\n\n**Example 9: Advanced Error Handling with Logging**\n\n```typescript\n// app/notice/error/page.tsx\nimport { useEffect } from 'react'\nimport { useCloseNotice, useMessageQueue } from 'tauri-notice-window'\n\nexport default function NoticeError() {\n  const { closeNotice } = useCloseNotice()\n  const { currentMessage } = useMessageQueue()\n\n  useEffect(() => {\n    // Log error for debugging\n    if (currentMessage) {\n      console.error('Invalid notice type:', {\n        id: currentMessage.id,\n        type: currentMessage.type,\n        timestamp: new Date().toISOString(),\n      })\n      \n      // Optional: Send to error tracking service\n      // trackError('Invalid Notice Type', { messageId: currentMessage.id })\n    }\n  }, [currentMessage])\n\n  return (\n    <div className=\"error-page\">\n      <div className=\"error-icon\">⚠️</div>\n      <h1>Unable to Display Notification</h1>\n      <p>The notification type \"{currentMessage?.type}\" is not supported.</p>\n      <details>\n        <summary>Technical Details</summary>\n        <pre>{JSON.stringify(currentMessage, null, 2)}</pre>\n      </details>\n      <button onClick={closeNotice}>Dismiss</button>\n    </div>\n  )\n}\n```\n\n**Example 10: Multi-Environment Configuration**\n\n```typescript\n// config/notice.config.ts\nexport const getNoticeConfig = () => {\n  const isDev = process.env.NODE_ENV === 'development'\n  \n  return {\n    routePrefix: '/notice',\n    notFoundUrl: isDev \n      ? '/notice/dev-404'  // Detailed error in dev\n      : '/notice/404',     // Simple error in production\n    defaultWidth: 400,\n    defaultHeight: 300,\n  }\n}\n\n// app/layout.tsx\nimport { initializeNoticeSystem, setNoticeConfig } from 'tauri-notice-window'\nimport { getNoticeConfig } from '@/config/notice.config'\n\nexport default function RootLayout({ children }) {\n  useEffect(() => {\n    setNoticeConfig(getNoticeConfig())\n    initializeNoticeSystem()\n  }, [])\n\n  return <html>{children}</html>\n}\n\n// app/notice/dev-404/page.tsx (Development-only)\nexport default function DevNotFound() {\n  const { closeNotice } = useCloseNotice()\n  const { currentMessage } = useMessageQueue()\n  \n  return (\n    <div className=\"dev-error\">\n      <h1>🔧 Development Error</h1>\n      <h2>Invalid Notice Route</h2>\n      <div className=\"error-details\">\n        <p><strong>Route Attempted:</strong> /notice/{currentMessage?.type}</p>\n        <p><strong>Message ID:</strong> {currentMessage?.id}</p>\n        <p><strong>Title:</strong> {currentMessage?.title}</p>\n      </div>\n      <div className=\"fix-suggestion\">\n        <h3>How to fix:</h3>\n        <ol>\n          <li>Create route at: app/notice/{currentMessage?.type}/page.tsx</li>\n          <li>Or update message.type to match existing route</li>\n        </ol>\n      </div>\n      <button onClick={closeNotice}>Close</button>\n    </div>\n  )\n}\n```\n\n## Stack Mode (One Window, Multiple Notices)\n\nUse stack mode when you want many incoming notices to be shown inside one shared window (instead of opening one window per message).\n\n### 1. Configure stack route and window label\n\n```typescript\nimport { initializeNoticeSystem, setNoticeConfig } from 'tauri-notice-window'\n\nsetNoticeConfig({\n  routePrefix: '/notices',\n  stackRoute: '/notices/stack',\n  stackWindowLabel: 'notice-stack',\n  stackWindowOptions: {\n    width: 380,\n    height: 520,\n    decorations: false,\n    resizable: true,\n    alwaysOnTop: true,\n  },\n})\n\nawait initializeNoticeSystem()\n```\n\n### 2. Push notices into the shared stack window\n\n```typescript\nimport { pushToNoticeStack } from 'tauri-notice-window'\n\nsocket.on('message', async (message) => {\n  await pushToNoticeStack({\n    id: String(message.uuid || message.id),\n    uuid: message.uuid ? String(message.uuid) : undefined,\n    type: message.type,\n    routeType: message.type, // Optional: defaults to type\n    title: message.title,\n    data: message.data,\n  })\n})\n```\n\n### 3. Build the stack page in your app (headless ownership)\n\nCreate your own UI at the configured route (for example `/notices/stack`) and use the hook:\n\n```typescript\nimport { useNoticeStack } from 'tauri-notice-window'\n\nexport default function NoticeStackPage() {\n  const { items, total, removeItem, clearAll, closeWindow } = useNoticeStack()\n\n  return (\n    <div>\n      <h2>Notifications ({total})</h2>\n      <button onClick={clearAll}>Clear All</button>\n      <button onClick={closeWindow}>Close</button>\n\n      {items.map((item) => (\n        <div key={item.id}>\n          <div>{item.title}</div>\n          <button onClick={() => removeItem(item.id)}>Dismiss</button>\n        </div>\n      ))}\n    </div>\n  )\n}\n```\n\n### 4. Tauri capability note\n\nIf your capability already allows `notice-*`, then the default `stackWindowLabel: 'notice-stack'` is already covered.\n\n## API Reference\n\n### Types\n\n#### MessageType\n\n```typescript\ninterface MessageType {\n  id: string              // Unique message ID\n  title: string           // Notice title\n  type: string            // Message type (lowercase, matches route)\n  data: any               // Custom data payload\n  min_width?: number      // Minimum window width\n  min_height?: number     // Minimum window height\n  windowPosition?: WindowPosition  // Window position (default: right-bottom)\n  decorations?: boolean   // Show window title bar (default: true)\n}\n```\n\n#### WindowPosition\n\n```typescript\ninterface WindowPosition {\n  x?: number              // X coordinate (pixels from left)\n  y?: number              // Y coordinate (pixels from top)\n  position?: 'right-bottom' | 'right-top' | 'left-bottom' | 'left-top' | 'center'\n  padding?: number        // Padding from screen edges (default: 20px)\n}\n```\n\n#### NoticeConfig\n\n```typescript\ninterface NoticeConfig {\n  routePrefix: string     // Route prefix (default: '/notice')\n  databaseName: string    // Database name (default: 'tauri-notice-db')\n  defaultWidth: number    // Default window width (default: 400)\n  defaultHeight: number   // Default window height (default: 300)\n  notFoundUrl?: string    // Custom 404 page URL for invalid routes (default: '/404')\n  defaultDecorations?: boolean  // Show window title bar by default (default: true)\n  loadTimeout?: number    // Auto-close timeout in ms for borderless windows (default: 4000)\n}\n```\n\n### Hooks\n\n#### useNoticeWindow()\n\nOpens a new notice window.\n\n```typescript\nconst { showNotice } = useNoticeWindow()\nawait showNotice(message)\n```\n\n#### useCloseNotice()\n\nCloses the current notice window (call from within notice page).\n\n```typescript\nconst { closeNotice } = useCloseNotice()\nawait closeNotice()\n```\n\n#### useHideNotice()\n\nHides a specific notice by ID (typically for server-triggered hide events).\n\n```typescript\nconst { hideNotice } = useHideNotice()\nawait hideNotice(messageId)\n```\n\n#### useHideAllNotices()\n\nClears all pending and active notices.\n\n```typescript\nconst { hideAllNotices } = useHideAllNotices()\nawait hideAllNotices()\n```\n\n#### useMessageQueue()\n\nAccess queue state for UI display.\n\n```typescript\nconst { queueLength, currentMessage, isProcessing, queue } = useMessageQueue()\n```\n\n### Components\n\n#### NoticeLayout\n\nWrapper component for notice pages that loads the message and provides it to children.\n\n```typescript\ninterface NoticeLayoutProps {\n  children: (message: MessageType) => ReactNode\n  onLoad?: (message: MessageType) => void\n  onClose?: (message: MessageType) => void\n}\n\n<NoticeLayout \n  onLoad={(msg) => console.log('Loaded:', msg)}\n  onClose={(msg) => console.log('Closing:', msg)}\n>\n  {(message) => <YourCustomUI message={message} />}\n</NoticeLayout>\n```\n\n### Functions\n\n#### initializeNoticeSystem()\n\nInitialize the complete system. Call once during app startup.\n\n```typescript\nawait initializeNoticeSystem()\n```\n\n#### setNoticeConfig()\n\nConfigure the notice window system.\n\n```typescript\nsetNoticeConfig({\n  routePrefix: '/notifications',\n  databaseName: 'my-app-notices',\n  defaultWidth: 500,\n  defaultHeight: 400,\n  notFoundUrl: '/error', // Custom 404 page\n  defaultDecorations: false, // Hide title bar globally\n  loadTimeout: 4000, // Auto-close stuck borderless windows after 4s\n})\n```\n\n**URL Validation:** Before creating a WebviewWindow, the library validates the window URL. If the URL is invalid (empty, malformed, or doesn't start with `/`, `http://`, `https://`, or `tauri://`), it automatically falls back to the `notFoundUrl` and logs a warning.\n\n#### deleteMessageById()\n\nDelete a message by ID. Removes the message from both the runtime queue (Zustand) and persistent storage (IndexedDB).\n\n```typescript\nimport { deleteMessageById } from 'tauri-notice-window'\n\nawait deleteMessageById('message-123')\n```\n\n**Behavior:**\n- Removes message from queue and database\n- If message is currently displayed, window closes automatically\n- Next message in queue shows immediately\n\n#### hideMessageById()\n\nHide a message by ID. Marks the message as hidden in the database and removes it from the queue.\n\n```typescript\nimport { hideMessageById } from 'tauri-notice-window'\n\n// Typically used for server-triggered hide events\nawait hideMessageById('message-123')\n```\n\n**Behavior:**\n- Marks message as hidden in database\n- Removes from queue\n- Closes window if currently displayed\n\n#### markMessageAsShown()\n\nMark a message as shown to prevent it from being displayed again.\n\n```typescript\nimport { markMessageAsShown } from 'tauri-notice-window'\n\n// Manually mark without displaying\nawait markMessageAsShown('message-123')\n```\n\n**Use Case:** When you need to acknowledge a message without showing its window (e.g., user already saw it elsewhere).\n\n### Store Methods (Recommended)\n\nAll operations should go through the Zustand store for consistency:\n\n#### store.deleteMessage()\n\nDelete a message completely (from both memory and database).\n\n```typescript\nimport { useMessageQueueStore } from 'tauri-notice-window'\n\nconst store = useMessageQueueStore.getState()\nawait store.deleteMessage('123')  // Removes from store AND database\n```\n\n#### store.hideMessage()\n\nHide a message (marks as hidden and removes from queue).\n\n```typescript\nconst store = useMessageQueueStore.getState()\nawait store.hideMessage('123')  // Marks hidden in DB, removes from queue\n```\n\n#### store.removeFromQueue()\n\nRemove a message from queue (memory only, persists position changes).\n\n```typescript\nconst store = useMessageQueueStore.getState()\nawait store.removeFromQueue('123')  // Updates queue positions in DB\n```\n\n#### store.markMessageAsShown()\n\nMark a message as shown in database.\n\n```typescript\nconst store = useMessageQueueStore.getState()\nawait store.markMessageAsShown('123')  // Prevents re-showing\n```\n\n### Database Utilities (Low-Level)\n\n⚠️ **Warning:** Direct database access bypasses the store. Only use these for advanced scenarios where you need to query historical data. For all mutations, use store methods above.\n\n#### initializeDatabase()\n\nInitialize the database (called automatically by `initializeNoticeSystem()`).\n\n```typescript\nimport { initializeDatabase } from 'tauri-notice-window'\n\nconst db = initializeDatabase()\n```\n\n#### getMessage()\n\nRetrieve a message by ID.\n\n```typescript\nimport { getMessage } from 'tauri-notice-window'\n\nconst message = await getMessage('123')\n```\n\n\n\n#### getPendingMessages()\n\nGet all pending messages.\n\n```typescript\nimport { getPendingMessages } from 'tauri-notice-window'\n\nconst pending = await getPendingMessages()\n```\n\n\n## Routing Setup\n\nThe library expects routes to match the pattern: `{routePrefix}/{message.type}`\n\n### Next.js App Router Example\n\n```\napp/\n  notice/\n    announcement/\n      page.tsx\n    alert/\n      page.tsx\n    chat/\n      page.tsx\n```\n\n### React Router Example\n\n```typescript\n<Routes>\n  <Route path=\"/notice/announcement\" element={<AnnouncementNotice />} />\n  <Route path=\"/notice/alert\" element={<AlertNotice />} />\n  <Route path=\"/notice/chat\" element={<ChatNotice />} />\n</Routes>\n```\n\n## Advanced Usage\n\n### Message Deletion and Queue Management\n\nAll message operations go through clean public APIs that internally use the Zustand store.\n\n```typescript\nimport { \n  useNoticeWindow, \n  deleteMessageById, \n  hideMessageById,\n  markMessageAsShown \n} from 'tauri-notice-window'\n\nfunction NoticeManager() {\n  const { showNotice } = useNoticeWindow()\n\n  // Example 1: Delete a message from the queue\n  const handleDeleteMessage = async () => {\n    await showNotice({ id: '1', title: 'First', type: 'announcement', data: {} })\n    await showNotice({ id: '2', title: 'Second', type: 'announcement', data: {} })\n    await showNotice({ id: '3', title: 'Third', type: 'announcement', data: {} })\n\n    // Delete message '2' from queue\n    await deleteMessageById('2')\n    // Result: Message removed from queue and database\n    // Console output: \"Message 2 was deleted, skipping to next\"\n  }\n\n  // Example 2: Delete the currently displayed message\n  const handleDeleteCurrent = async () => {\n    await showNotice({ id: '4', title: 'Current', type: 'announcement', data: {} })\n    // Window for message '4' is now open\n\n    // Delete current message\n    await deleteMessageById('4')\n    // Result: Window closes, next message shows automatically\n  }\n\n  // Example 3: Hide a message (server-triggered)\n  const handleHideMessage = async (messageId: string) => {\n    await hideMessageById(messageId)\n    // Marks as hidden in DB + removes from queue + closes window\n  }\n\n  // Example 4: Mark as shown without displaying\n  const handleMarkAsShown = async (messageId: string) => {\n    await markMessageAsShown(messageId)\n    // Prevents message from being shown in the future\n  }\n}\n```\n\n**How it works:**\n1. All operations update both the store (Zustand) and database (IndexedDB)\n2. `deleteMessageById()` removes from both queue and database\n3. If deleted message is currently shown, window closes automatically\n4. Queue position changes are persisted to database\n5. Before showing any message, system verifies it exists in database\n6. **Safety Layer:** `NoticeLayout` component auto-closes if message is missing\n\n**API Methods:**\n```typescript\n// Delete message completely\nawait deleteMessageById('123')\n// → Removes from queue AND database\n// → If currently showing, window closes\n\n// Hide message (server-triggered)\nawait hideMessageById('123')\n// → Marks as hidden in database\n// → Removes from queue\n// → Closes window if open\n\n// Mark as shown\nawait markMessageAsShown('123')\n// → Updates database\n// → Prevents future display\n```\n\n### Server-Triggered Hide\n\n```typescript\nimport { useHideNotice } from 'tauri-notice-window'\n\nfunction SocketHandler() {\n  const { hideNotice } = useHideNotice()\n\n  socket.on('hide_message', async (data) => {\n    await hideNotice(data.message_id)\n  })\n}\n```\n\n### Logout Cleanup\n\n```typescript\nimport { useHideAllNotices } from 'tauri-notice-window'\n\nfunction LogoutButton() {\n  const { hideAllNotices } = useHideAllNotices()\n\n  const handleLogout = async () => {\n    // Clear all notices\n    await hideAllNotices()\n    \n    // Clear auth and redirect\n    await clearAuth()\n    navigate('/login')\n  }\n}\n```\n\n### Custom Window Sizing, Positioning, and Decorations\n\n```typescript\n// Default: right-bottom with 20px padding, with title bar\nawait showNotice({\n  id: '123',\n  title: 'Default Position',\n  type: 'announcement',\n  data: { content: 'Appears at right-bottom' },\n})\n\n// Custom size\nawait showNotice({\n  id: '124',\n  title: 'Large Notice',\n  type: 'announcement',\n  data: { content: 'Important message' },\n  min_width: 800,\n  min_height: 600,\n})\n\n// Position preset: top-right\nawait showNotice({\n  id: '125',\n  title: 'Top Right',\n  type: 'alert',\n  data: { content: 'Alert message' },\n  windowPosition: { position: 'right-top' },\n})\n\n// Position preset with custom padding\nawait showNotice({\n  id: '126',\n  title: 'Left Bottom',\n  type: 'announcement',\n  data: { content: 'Custom padding' },\n  windowPosition: { \n    position: 'left-bottom',\n    padding: 50  // 50px from edges\n  },\n})\n\n// Custom coordinates\nawait showNotice({\n  id: '127',\n  title: 'Custom Position',\n  type: 'announcement',\n  data: { content: 'Exact position' },\n  windowPosition: {\n    x: 100,  // 100px from left\n    y: 100,  // 100px from top\n  },\n})\n\n// Centered window\nawait showNotice({\n  id: '128',\n  title: 'Centered',\n  type: 'announcement',\n  data: { content: 'In the middle' },\n  windowPosition: { position: 'center' },\n})\n\n// Borderless window (no title bar)\n// Note: On macOS, uses titleBarStyle: 'overlay' internally for compatibility\n// On Windows/Linux, uses decorations: false\nawait showNotice({\n  id: '129',\n  title: 'Borderless',\n  type: 'announcement',\n  data: { content: 'Custom chrome' },\n  decorations: false,  // Hide native title bar\n})\n\n// Borderless + custom position (toast style)\nawait showNotice({\n  id: '130',\n  title: 'Toast Style',\n  type: 'toast',\n  data: { content: 'Quick notification' },\n  min_width: 300,\n  min_height: 80,\n  decorations: false,\n  windowPosition: { position: 'right-top', padding: 10 },\n})\n```\n\n**Auto-Close for Borderless Windows:**\n\nWhen `decorations: false`, the window has no title bar, so users cannot manually close a stuck window. The library automatically closes borderless windows if they fail to load within `loadTimeout` (default: 4 seconds).\n\n```typescript\n// Customize or disable auto-close timeout\nsetNoticeConfig({\n  loadTimeout: 6000, // 6 seconds\n  // loadTimeout: 0,  // Disable auto-close\n})\n```\n\n### Queue Status Display\n\n```typescript\nimport { useMessageQueue } from 'tauri-notice-window'\n\nfunction QueueIndicator() {\n  const { queueLength, currentMessage } = useMessageQueue()\n\n  return (\n    <div>\n      {queueLength > 0 && (\n        <span>Pending notifications: {queueLength}</span>\n      )}\n      {currentMessage && (\n        <span>Currently showing: {currentMessage.title}</span>\n      )}\n    </div>\n  )\n}\n```\n\n## How It Works\n\n### Architecture: Zustand-First Design\n\nThis library follows a **clean, one-way data flow** architecture:\n\n```\n┌─────────────────────────────────────────────────────┐\n│  Runtime (While App is Running)                     │\n│                                                     │\n│  ┌──────────────────────────────────────┐           │\n│  │   Zustand Store (Source of Truth)    │           │\n│  │  - Queue state                       │           │\n│  │  - Current message                   │           │\n│  │  - Processing status                 │           │\n│  └──────────────┬───────────────────────┘           │\n│                 │                                   │\n│                 │ Persists to ↓                     │\n│                 │                                   │\n│  ┌──────────────▼───────────────────────┐           │\n│  │   IndexedDB (Dexie)                  │           │\n│  │  - Dumb storage layer                │           │\n│  │  - No business logic                 │           │\n│  │  - Only for cold starts              │           │\n│  └──────────────────────────────────────┘           │\n└─────────────────────────────────────────────────────┘\n\n┌─────────────────────────────────────────────────────┐\n│  Cold Start (App Restart)                           │\n│                                                     │\n│  IndexedDB ────loads───► Zustand Store              │\n│                          (Back to runtime mode)     │\n└─────────────────────────────────────────────────────┘\n```\n\n**Key Principles:**\n1. **Zustand is the boss** - All operations go through the store\n2. **Database is dumb** - Pure storage functions, no knowledge of store\n3. **One-way flow** - Store writes to DB, DB never touches store\n4. **No circular dependencies** - Clean module boundaries\n\n### Cross-Window Synchronization\n\nThe library uses `zustand-sync` to synchronize state across all Tauri windows via localStorage. When you enqueue a message in the main window, all notice windows see the update in real-time.\n\n```\nMain Window                Notice Window 1        Notice Window 2\n     |                            |                      |\n     ├── enqueue(msg) ─────────►  │                      │\n     │                            │                      │\n     ▼                            ▼                      ▼\nZustand Store ◄─────────► localStorage ◄─────────► Zustand Store\n     |                            |                      |\n     ▼                            ▼                      ▼\nState Updated              State Updated          State Updated\n     │                                                   │\n     └─────── Persists to IndexedDB ────────────────────┘\n                   (for cold starts only)\n```\n\n### Message Lifecycle\n\n1. **pending**: Message is in queue, waiting to be shown\n2. **showing**: Message window is currently displayed\n3. **shown**: User has acknowledged the message\n4. **hidden**: Server requested to hide the message\n\n### Persistence Strategy\n\n**At Runtime:**\n- All state lives in Zustand store (in-memory)\n- Store automatically persists changes to IndexedDB\n- Database is just a backup, not actively queried\n\n**On App Restart:**\n1. Database is initialized\n2. Pending messages are loaded into Zustand store\n3. First message is shown automatically\n4. Back to runtime mode (Zustand is now the truth)\n\n**Why This Design?**\n- **Performance**: No database queries during normal operation\n- **Simplicity**: Single source of truth eliminates sync bugs\n- **Clean Code**: No circular dependencies, predictable data flow\n- **Reliability**: Database only used for cold storage\n\n## Requirements\n\n- Tauri v2.0+\n- React 19+\n- Modern browsers with IndexedDB support\n- **Tauri window permissions configured** (see [Tauri Permissions Setup](#tauri-permissions-setup))\n\n## License\n\nMIT\n\n## Contributing\n\nContributions welcome! Please open an issue or PR on GitHub.\n\n## Support\n\nFor issues and questions, please open an issue on GitHub.\n\n","readmeFilename":"README.md"}