{"_id":"@signosoft/signpad-js","_rev":"32-a72262dbf685c4b300c0c346cee39521","name":"@signosoft/signpad-js","dist-tags":{"latest":"0.6.0"},"versions":{"0.0.1":{"name":"@signosoft/signpad-js","version":"0.0.1","_id":"@signosoft/signpad-js@0.0.1","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"408558d2484610fc8af52a5907eee12e3e7278d4","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.0.1.tgz","fileCount":6,"integrity":"sha512-eyq6Hr4AJzX/hq6mUaCqfEfuh/mzhwwutTVhbIj7pIlPyTlgFX5vdVbbCUOf/x5H5xSLSq4l1QItkPuR6P+U0w==","signatures":[{"sig":"MEQCIHRXHcf2reuZhhzvlIP37dS2dE47ILXS6Bv+Wqrf83HiAiAlfJ6ieqTLV6gJVpRkOgbjP3zzx6WCDsctzbgLRh6czw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2826878},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"}},"gitHead":"94d2d32f67b4c6f79d226ee3349001a2f1da4152","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"[![npm version](https://badge.fury.io/js/%40signosoft%2Fsignpad-js.svg)](https://www.npmjs.com/package/@signosoft) [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](LICENSE)","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3","vite-plugin-static-copy":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.0.1_1769165518579_0.43476318530014235","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@signosoft/signpad-js","version":"0.1.0","_id":"@signosoft/signpad-js@0.1.0","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"2823fc8ef6ed475824755c0388df84e108393be6","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.1.0.tgz","fileCount":6,"integrity":"sha512-wWriJtJDZFJKmrICVXhlsk94zPwuyqrRah9Rs5TwWgr8hzpBOintgSieSEzCLIOlIUHHMG+EB0NB6uwmC6X+Aw==","signatures":[{"sig":"MEUCIQCT2XybtMkDL+WA/D4fOfdoyUY24s82c7jFImIJqVPSTQIgcWdo+/fP0mBx84MCOyuHaw4oGiyLTBamHQn58ZETrBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2843829},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"}},"gitHead":"09b6bc86e6525453bf040ea8725814737ab676c1","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"---","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3","vite-plugin-static-copy":"^3.1.4"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.1.0_1769444589173_0.8821433746481873","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@signosoft/signpad-js","version":"0.2.0","_id":"@signosoft/signpad-js@0.2.0","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"bin":{"getSignpadTheme":"src/scripts/generate-theme.js"},"dist":{"shasum":"90f280fcfe6917e52c19fcdf1088590b5980b261","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.2.0.tgz","fileCount":13,"integrity":"sha512-yXkFMESRahSBVN4OpYZYUQ4fLx3Yb966un9pPgEyXlZw/4qFbxvAxxHUCgwhQxxQ7WQKVu1eRFB0s2/xd5LE5A==","signatures":[{"sig":"MEQCIFv0www+05EdQHzjGTdee2oD1vwnG3H+Yqmwa18kckdcAiBD2dT1Qq0pdNjAJ2gGijUAaigIMr5J3kMXLBbTPVAOiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3011205},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"c826cf671cf4a17cfe2c5d1e2827c6b857b9c44f","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1","chalk":"^5.6.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.2.0_1772112398034_0.6133510582943289","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@signosoft/signpad-js","version":"0.2.1","_id":"@signosoft/signpad-js@0.2.1","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"bin":{"getSignpadTheme":"src/scripts/generate-theme.js"},"dist":{"shasum":"b248afb761787b11baf9f1a5754025c0dafb1108","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.2.1.tgz","fileCount":10,"integrity":"sha512-eBbY1Fz7Dbhw79Ql9Qudlk1Mtd71bu9urzH4XIHLfXcc4cWj3xI7FXTfQ15HLQdkZLHuRk99IvhYKDhpYAnJTw==","signatures":[{"sig":"MEUCIGoFVgngbHxQz+yjuoG79OE96dMRzN3Bn+RiwvL53UsRAiEAulNTj7KUxeMjZshGr3kGGpJ4Qx8xVsrQWIO5Iaqoyf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3205223},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"c826cf671cf4a17cfe2c5d1e2827c6b857b9c44f","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1","chalk":"^5.6.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.2.1_1772116128906_0.4977569387291725","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@signosoft/signpad-js","version":"0.2.2","_id":"@signosoft/signpad-js@0.2.2","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"bin":{"getSignpadTheme":"src/scripts/generate-theme.js"},"dist":{"shasum":"23e60a42463c7a27f3e5eff3958954d8cdf4ce6e","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.2.2.tgz","fileCount":10,"integrity":"sha512-XzdSZuwWJfEr7At33bzIuEpzQD0g2V8BoqdObCfuttO4GyjogDE1n0UV6O9Mkdmb6TMjFBFT6zpWUJ/k7dylXQ==","signatures":[{"sig":"MEUCIFbKMSwp618gMnKaadIVGRS6AtpjHI/UTtsszCyKAEN8AiEAhDES8lTLkIXvvAcFQ0+HIEYEIL6AHY0o9mHoEirSgb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3202931},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"a662c5705c14202b85dbe241d41dd45083ef7549","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1","chalk":"^5.6.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.2.2_1772197678941_0.194828164108384","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@signosoft/signpad-js","version":"0.2.3","_id":"@signosoft/signpad-js@0.2.3","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"bin":{"getSignpadTheme":"src/scripts/generate-theme.js"},"dist":{"shasum":"9affedfa5960bedf13630001ee917b1355df7566","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.2.3.tgz","fileCount":10,"integrity":"sha512-x/H/9xiv6sbF5YxuAWu8gqsJSiH7GXx8Ld6GzBbYkxSEvl0+WNaNf8ghEok7a8dDczOuEeDttGbXBHyDMPpe/A==","signatures":[{"sig":"MEQCIGm/L1pTvL+47t6Ur3qTQ9/VeyqdUr+A26z9SOG1VHrbAiAzh/vaEoA5/85pfkvnFb5Ho7Xt8kb4a8PgxrjSGazTDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3184791},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false,"url":false,"path":false,"chalk":false,"node:process":false,"node:readline/promises":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"57a127c01e23e8acd418c0f5cad9e49e1f86204f","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","chalk":"^5.6.2","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.2.3_1772822292414_0.11865101099898334","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@signosoft/signpad-js","version":"0.3.0","_id":"@signosoft/signpad-js@0.3.0","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"ef14441b9350dc34d16b3264280031c68cd60f02","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.0.tgz","fileCount":9,"integrity":"sha512-rEIwaSNuL3rElIdEaULzvSJCqBnWSXwJKxFCDfJ/I9MV2k0zh5JxgIVfECbeurI6+zyUIjGWmu7Qd/iHs6AZkg==","signatures":[{"sig":"MEYCIQC+pQauO940dV/i7DR2ebhEy87g4JSnNocd6CewMXqFfQIhANzSzzfn+DmELCdbuC1HO6mtri5ZvucUc7Viwq/CInm6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3190235},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"52e2c8c757d4011cd55ad3bade97a10c3803968f","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.0_1773238075091_0.6411985064474628","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@signosoft/signpad-js","version":"0.3.1","_id":"@signosoft/signpad-js@0.3.1","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"83f80c7c6952800bf88dcf314d3a94116d739853","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.1.tgz","fileCount":9,"integrity":"sha512-NbgZQtvpH1OZJZKOncAx/UIcZ9R2hinMIO5OKSoAKZiswb9ZkkRS21neOuxclVFUGPPytk65xgCzHr5Bn/JFKw==","signatures":[{"sig":"MEQCIBCnBg/HsE9Z1X2HUZGTc28W20YS42ERonld796zPNWGAiBrqEhYLzWEcMPP/sYtsKxFW9P602xgzq1rtmjlZHXuRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3197201},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"340e60fbe3373f7338d9f5d9a61407e15a19ad64","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.1_1773666953233_0.07414877150527355","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@signosoft/signpad-js","version":"0.3.2","_id":"@signosoft/signpad-js@0.3.2","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"75168e8f626523c1c961632f11df7793c54c38cd","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.2.tgz","fileCount":9,"integrity":"sha512-IL6PTx3nR8c0ViT2m02N6BwzsptdIBpkbyfXgivUOaRi5WYmm0gXzq5McRMU9lH6iH9l/UsvTgMTRmaBrGTNnQ==","signatures":[{"sig":"MEQCIG0x8rND1RlRJcimbli0elORObEOv7K3fdCXB9taFqG/AiBh2L3homepR2Y7IhRBO9zDiheviO8Nxp/fODVKKlL8Lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3199766},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"444a9b7c1cf3a49b6549f428703e3c3630fdaed0","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.2_1773667774468_0.1559318544709929","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@signosoft/signpad-js","version":"0.3.3","_id":"@signosoft/signpad-js@0.3.3","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"b0136cf32546c700e1c77e8c9771e560c525d247","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.3.tgz","fileCount":9,"integrity":"sha512-dsfecWm6eOOY3pJAh5sMQFfHHqPCWkzkeK7w4kJdzIBZcCBd04UDr8sl9gYTxn7tf+wbgIWaONPyjSEdQbVfmQ==","signatures":[{"sig":"MEQCIEgHiSZagtS+Wvx3JevCuxcqHHflbtZN1MATmyUFlpuSAiBZztaK1kXLnFMWknxFcqMuQVK6qp26D5PUEhZompt6NA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3216696},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"81abe51859b6e33dfb5191b9dfac855b4cf77141","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.3_1773915335047_0.5909255253234635","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@signosoft/signpad-js","version":"0.3.4","_id":"@signosoft/signpad-js@0.3.4","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"c8e9f5b53862d92919a42764f014e6f667ca1a17","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.4.tgz","fileCount":9,"integrity":"sha512-9thLrrFoistFmYzVpV/a9XtkWQXX2lOxa3xXo/iuhnghIMIrYxdHeQScLrRJKzA69aiNnHiN6YORLAXnitv5Xg==","signatures":[{"sig":"MEUCIGU9f07OpOHhGgidnpdgsm36M1xTjhc6qKwG1tuaQ36tAiEAnWhINShzqgHILyjnWvsJJF5JAknPo/f7ZfYHaykSQUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3220958},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"82b1bbf10438d31b1915c092ec3b7d4ed489bbf0","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.4_1773934351485_0.990136818789068","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@signosoft/signpad-js","version":"0.3.5","_id":"@signosoft/signpad-js@0.3.5","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"97299807e52dd2d84b724c6b8933a8e1e1200e96","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.5.tgz","fileCount":9,"integrity":"sha512-DyEks8j228LX+aAGzxVeZ6ZcNf/ngKXfeZmPLo8UGuPFC9EXxUT7aZZqR/t9oLyblTcytlBimctUSVKix326HA==","signatures":[{"sig":"MEYCIQDMkVoQ8K0LnAigvGwfpqvRBqXt9eFvQlVLYk4GDU/lMAIhAJSOMlJK/QhYJfq5EaF1i5elLjldiHdRS3Bl9Tb3sEOb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3220770},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"e4ec52229ecb93625904ea514af0b89ad7a12026","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.5_1774012719390_0.7790567259038634","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@signosoft/signpad-js","version":"0.3.6","_id":"@signosoft/signpad-js@0.3.6","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"b59e37857f85a885479f313451538892b4a16314","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.6.tgz","fileCount":9,"integrity":"sha512-GqXxtoUwtbeeEdXALe8Qhe6RTWQdrmNAIBYliuJWGOwYapd4yPtkMIwiVERF5pATucIjdH9f2GfalksvUAu8WA==","signatures":[{"sig":"MEUCIGhQW8lRcBMLHI3cYKWQfEgxAn+rLwJbrnzqREAiOLyjAiEAsuaWfhbjXRQj7Tl5dY+rv8O34Iiq9Sg1rZwdwc3h2yU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3222007},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"3bb4cebda81c330351f917f56b31da28d33c33f6","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.6_1774266236707_0.36273715764320236","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@signosoft/signpad-js","version":"0.3.7","_id":"@signosoft/signpad-js@0.3.7","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"03f70f1ec2fdd92aad85d328059c477550064161","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.7.tgz","fileCount":9,"integrity":"sha512-MHkXvAt4Gjch++N92wR7GmB3eeSzZghMID+Kw7Tpvx+l2E/TXLnqI9uD3z3z5222RLabQbyghf7vW9CjNcWGoA==","signatures":[{"sig":"MEQCIFdyq/vOxJTqJMuAjeBH3NJA3dce6fQhnkpfuwNyp89/AiAqB6NFb2GXtp/t/vJsXxRveDdQ/UrjPLICR8kFkdNfWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3219082},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"292cb776efceeee0a9bd9d3d0305deae992b8178","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.7_1774275850413_0.368464496455402","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@signosoft/signpad-js","version":"0.3.8","_id":"@signosoft/signpad-js@0.3.8","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"872c9e1a09825a55e06a6397bd7b79d0b741be42","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.8.tgz","fileCount":9,"integrity":"sha512-xN9HgLaWR71UL0GyXaTVgd4sVFsazAhVe3KJhj0q5NwU6f7TLAFaaFI3idWRNXUjg8M06BIB06QohgUXr55IdA==","signatures":[{"sig":"MEUCIQDU/yC755ErOtvl8ETG37DHcWj2qDZ06r2+TuUcyfn2FQIgZRQquSCChCIwlEtOG/3Sv5DEhB0rY5eQUBytizRpSgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3219352},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"25d9b3865b7fd7de9007623ce8e07af92b8e9390","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.8_1774279183476_0.14608685807345534","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@signosoft/signpad-js","version":"0.3.9","_id":"@signosoft/signpad-js@0.3.9","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"74cd81e67066915a13af5e67c5b886e8001bdf28","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.3.9.tgz","fileCount":9,"integrity":"sha512-8MyEtV8nq2oKJhfnxJfeiT2SafkEwfQBYMdB3/4c/ljsW8erm0coL0ZTctjMjhyMLEdn20GMPEo4uwXFuMHmGw==","signatures":[{"sig":"MEUCIQDWX4P7vioYlrOYC2uSJ/iHprX6YF3R5c/r9GcAGZPEigIgdZImBj+Aegt8VQcSkdyNbREqQfz2hZ46mhyqDUZn86g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3219300},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"54b1cdff4639057b31eca83078e31fd680ca5c09","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.3.9_1774878909418_0.10330621355135672","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@signosoft/signpad-js","version":"0.4.0","_id":"@signosoft/signpad-js@0.4.0","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"f18df69d3d5ecd68a5a8c41fa1f3031800331c44","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.0.tgz","fileCount":9,"integrity":"sha512-BYXqTxkbtYqkj6IbY/H835CRTVOQXddxNxOEgChQXKHlQ2iEaS/LQvDTkqJv8FynQXOAppmNlm0pwDtYawVq2Q==","signatures":[{"sig":"MEYCIQC0ObaAYhjfO5i6Cv92VtKuFJg3h2ROfZLEj+dRC98KzQIhAKHCKJpM4HZi60EohQV7BdNeSQyptaCn6LT1wnASVT70","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3219556},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"6fed8eaa7bc31f4be2492c8f7f7e3993ae22b948","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.0_1774966835623_0.41734156639352427","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@signosoft/signpad-js","version":"0.4.1","_id":"@signosoft/signpad-js@0.4.1","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"a39a3eeecf82cd1be3c467c8e24ef84bcd340a67","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.1.tgz","fileCount":9,"integrity":"sha512-StS8jUC48ZGYGEdOAoFm7px186mVmDOwtaxEglc7mlPwYJ3tP5AlbCDbc0brp8EQpqPBIvPKIEdl9S+jDFZB/Q==","signatures":[{"sig":"MEUCIDzXM6Lf2iRIwjLjEPnSBh3mDyfejOZMIrEvoCq67NMrAiEA3xu5e85dDfhOCxA1pO2UhFYAsU4gunZ0EcTBvx8a+Q4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3136128},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"721b4e07f9ec256451d438276c4743e8f1b3277f","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.1_1776768892008_0.32257854552017995","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@signosoft/signpad-js","version":"0.4.2","_id":"@signosoft/signpad-js@0.4.2","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"aeb74dddc3c296ef2c8f04831105904bedc361b8","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.2.tgz","fileCount":9,"integrity":"sha512-0LSbKGPq4H4aQ4Bv9wutMvYjTAHgIa4OxnpBHLitqGBmnl9gbJcv9L6L+zbUPHQ/tiRDGdVx1kpAyr6fBU2tkg==","signatures":[{"sig":"MEQCIH3jV1JQGQmI+YijjFkrhgo6vOhDQ6u6lSxtRBQpL5KxAiAFzB32Kwn/KRohsiSdz2UH5LxQZ+vGcfsaH15RFvJxUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3136096},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"e2f4ab0eeb77614c43c09b270e9b3b92cedd92b8","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.2_1776870819891_0.06320109240036986","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@signosoft/signpad-js","version":"0.4.3","_id":"@signosoft/signpad-js@0.4.3","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"b6a1cd4e3e587129023a59957a02d740e7bcf783","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.3.tgz","fileCount":9,"integrity":"sha512-M0cIzxF1ha6Irio5SzQmDXBAy00zV8+hTLN23nkaJauyHvdarj4r0pEaSj29f6EJjYOJvEn/h32jdg6c7cO2fA==","signatures":[{"sig":"MEUCIQDeco/G7p1RL82Id5sqsB1Mu8eQVbjFXluyG0uGD3qq9AIge94a4FujTATYz+xAj6qi2F7r1j26JEOWulfX5PcxC5U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218416},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"492f91110e10957d0cfd19e866c94332e6fd4b29","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.3_1777043104819_0.6900329447543674","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@signosoft/signpad-js","version":"0.4.4","_id":"@signosoft/signpad-js@0.4.4","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"67923c8c2f0d9b67d03b20a81eba8d132ccab55a","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.4.tgz","fileCount":9,"integrity":"sha512-WSM+YwOM5tZLsFZ/TQDALIM614VAqrBDeTVSVRp1mCAU1/fis1mCwvuWVp3oQ69zd4fAPbCMD5GEy+RPO54qXQ==","signatures":[{"sig":"MEYCIQCI9RPnjcF1SnLQ3+Ln25H1MWd6m1l3ui/CoVuJ9YEhrQIhAI44H2kptL8ilkX+zEc63wMXBDguTDq+fLEuYM2A/2wW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218416},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"2f91430a70c410190c054df5034ce439aa13f6a3","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.4_1777043588378_0.30229125049318295","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@signosoft/signpad-js","version":"0.4.5","_id":"@signosoft/signpad-js@0.4.5","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"4972993e1130c80694276b95f0228aea7fd0a59e","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.5.tgz","fileCount":9,"integrity":"sha512-wmm+r1XWPNh/bsWEY95+MP3AUU9++W5B051noYTwEjLRhB4FWTFevjoxN9efWTU6xC9v1uYImDo6pmWZC8NyqA==","signatures":[{"sig":"MEUCIQCjzBAc3acEoj/V0pNiw1cs986MrhHhkgqpOxTAhDZzAAIgMg43e3gNqF5CJEusFiwwPMy4RfAAygtbUB04KhJSkec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218503},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"2f91430a70c410190c054df5034ce439aa13f6a3","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"10.9.2","description":"## 📍 Table of Contents","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.5_1777982212377_0.509255891775473","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"@signosoft/signpad-js","version":"0.4.6","_id":"@signosoft/signpad-js@0.4.6","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"f8e3535a5e8d31a45ed7d05976f29f446e3a5946","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.6.tgz","fileCount":9,"integrity":"sha512-uAQTEJivy8rquUJIdqgmPwI5npClu1DYXNQxuhchzGFAvyypMwJLiNe/6DMTjq6EMbFQhTOlqx21+yoIzr37+Q==","signatures":[{"sig":"MEUCIQD4cI6iM6nmdwd9jWxd310qIS/1xFGvH3ns5cc/v4g4OgIgLLwsnguBd2VwTWJcciK41c8vNooaKL68Ky3nkGFUgXA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3221012},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"daab1745b0144ef93081cbb59a1da05c04276ec1","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.13.0","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.6_1778161636218_0.40443102545931","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"@signosoft/signpad-js","version":"0.4.7","_id":"@signosoft/signpad-js@0.4.7","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"c9a4b22d3193131d79da546ca8b1f732a4ec9242","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.7.tgz","fileCount":9,"integrity":"sha512-kAi3XZqVzA/crFnlGH7aEdb+zQ7o263UM5k9NKOpkMPb+3Y68f868lRouO1NNFrTYaoZf0Bhr+vTgyheVxjJsA==","signatures":[{"sig":"MEUCIQDS3wZtLk7CdfNc/W8xylTuhvDqq6mwHrzzr7ipHqwnEQIgMm31quKt/lqYoHCJmx5zTvP/CWB00Nqq2m35qge/VJo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3038980},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"4d78e8549a87c4bad2baec6acc0b1c0fd162e0c5","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.13.0","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.7_1778167304610_0.7049430502677065","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"@signosoft/signpad-js","version":"0.4.8","_id":"@signosoft/signpad-js@0.4.8","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"b90c51a466aabd3272b88989662c3937abab4f69","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.8.tgz","fileCount":9,"integrity":"sha512-UC4Sq2veUlBgV5P1/+U+dHwR1L4T9a72PN9ZT0VnC26VG25PAOqFjeCC13HOo86P5cOIEreVnMf7oEf/UlT1mw==","signatures":[{"sig":"MEUCIH3YqNM7AEAqIL+6orY18qn2pWx6ItaZv34pFXiUVPEPAiEAok16mnfsQY7O00gh6apR/O7eWXoPrjgbF6OTJ3X00lY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3044955},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"438813cb299683f8629818eba571ab83bf0c91fd","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.13.0","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.8_1778596648481_0.9572150399702135","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"@signosoft/signpad-js","version":"0.4.9","_id":"@signosoft/signpad-js@0.4.9","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"81f1ad3cbca80506881461174fcd5aa73cd03bfb","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.9.tgz","fileCount":9,"integrity":"sha512-fq1cfj4l1c0lknKykJmz0LsZ5pco4/Zluy9WYDuStEHUmd8OU5RMeAhe1AY7KaGucl4Zl2RPLPYSU5KURR4X0g==","signatures":[{"sig":"MEYCIQDlF4DBxQyPNFpjHtUImPL02kdhViGDd/f3gZcM2heebQIhAOQ2qbWuHLgk3Yi6Ky5zwUGhVRHSRjNgQIPvQtNjiMGj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3036399},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"039bc8f97a07b102aa4ccb5c17cea587e03a13fc","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.14.1","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.9_1778850604662_0.05392952722314104","host":"s3://npm-registry-packages-npm-production"}},"0.4.10":{"name":"@signosoft/signpad-js","version":"0.4.10","_id":"@signosoft/signpad-js@0.4.10","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"73b611c300d85ca2c414d634c786dca6c5492674","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.4.10.tgz","fileCount":9,"integrity":"sha512-cdnjICO1g1znnbxHZEOIhPYEMM4wTKX4tI7Jshw7upAblpZ1rOrQhEP2/baQfTrS+whK5dHJqORUkhXRQfm+2w==","signatures":[{"sig":"MEUCIBXv1mrA8mnspXYcaFMmBBdsK+rr01GHXNhN9zVwmwmLAiEA0Ul4/h/LQbuj29OdsvzJjLb2FloVdHchbtieKeWE1uk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3044347},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"186a46b6b1d111df876eb40435e55df8a997b992","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.14.1","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.4.10_1779378093906_0.8180780954398958","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@signosoft/signpad-js","version":"0.5.0","_id":"@signosoft/signpad-js@0.5.0","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"6ec17ea02bb9229272f64830e2c017a1d857921a","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.5.0.tgz","fileCount":9,"integrity":"sha512-83l9CM5kJrQn4ouA6rqFp65qcyEFyxqRO4rhMVmrqvC2GMZe/7UbzojnuuVefYVzFTxx3W5uEHeW73Qp5uDFPA==","signatures":[{"sig":"MEYCIQDJOEmMxFToz0uStBjEzwqgODRvZUDOF+OO0DqwONimsAIhAO14rQSKkhojq+8qg5vv9L1EIvn2sYERCWW2qEEBxgth","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3141563},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"d09942a69ca3d6266468de853b29596e89b21a4a","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.14.1","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1","@signosoft/tablet-driver":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.5.0_1783953787913_0.1260978426704611","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@signosoft/signpad-js","version":"0.5.1","_id":"@signosoft/signpad-js@0.5.1","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"65aa32a4ef6d83847d1e99cbd6972a5d3f61ecf3","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.5.1.tgz","fileCount":9,"integrity":"sha512-Ue45As6lF3W6XjyA7eq5Q4ZgMTCQHss2Ty9fw92F3vIC7kLyntPktgQEJA9JOaXiNHdwManrKbe/jfd2E4PvPg==","signatures":[{"sig":"MEUCIAFC55+8mCvEc1rmdhGtN5E2yv7EbuVA/Gv7Lrb75MmXAiEA5nydFU0FPyfWDS8/ezPNAAQFRmjMWXKdgGnNHGEVO+c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3106995},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"db390d8599a83625723adeb09a99a3041a0b7773","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.14.1","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1","@signosoft/tablet-driver":"0.1.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.5.1_1784117032309_0.9972191083725261","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@signosoft/signpad-js","version":"0.5.2","_id":"@signosoft/signpad-js@0.5.2","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"45a71fd4c9bc6255a059cff69bfec5d90d822319","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.5.2.tgz","fileCount":9,"integrity":"sha512-cTWqnougrYDJS2UT/mHOn34/9Spv0azs4Fph5ilZ626nCyY9cy9onUPcAfJPE4uzugvZH8a8ZDjIg/LmAN9HyQ==","signatures":[{"sig":"MEUCIFPJFuHF7JmFfaJuSqO9rpkj0CakN9ha4hym3DpROBHIAiEA/ZdaA0mp8xn4yXN4/sIIaBsSClVSK6Gs9tHQjrznxXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3107582},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"b89590ba197648b48627834c7fdc0406021b2cfa","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.14.1","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1","@signosoft/tablet-driver":"0.1.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.5.2_1784126468995_0.925990136086825","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@signosoft/signpad-js","version":"0.5.3","_id":"@signosoft/signpad-js@0.5.3","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"dist":{"shasum":"cd40a4222fae78c2c3a9d1b95125af3ef0f924c0","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.5.3.tgz","fileCount":9,"integrity":"sha512-yaWs0DIoynalowk46sc59669GlLHt0V44ZB0m5tFoLNQSBqOFvCdZ71YyxJTFYmrO+C4EO8V0GzouNHJxsCbAQ==","signatures":[{"sig":"MEYCIQD2ASk5pzFWZeHFhL7MPXFcp8sZtqfNofljuVryMh4adgIhALFdU7lKMnb6NA3xlCWZf7c7diBedWJUp1byswn106S0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3109607},"main":"./dist/signosoft-signpad.umd.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/signosoft-signpad.js","browser":{"fs":false},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"gitHead":"3b765696fad18542b361c434f550736362573a37","private":false,"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"_npmVersion":"11.14.1","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","directories":{},"_nodeVersion":"22.17.0","dependencies":{"lit":"^3.3.1","@signosoft/tablet-driver":"0.1.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","typescript":"~5.9.3","@types/node":"^25.0.9","vite-plugin-dts":"^4.5.4","@rollup/plugin-replace":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/signpad-js_0.5.3_1785927660939_0.8407980170110199","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@signosoft/signpad-js","private":false,"version":"0.6.0","browser":{"fs":false},"type":"module","main":"./dist/signosoft-signpad.umd.cjs","module":"./dist/signosoft-signpad.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/signosoft-signpad.js","require":"./dist/signosoft-signpad.umd.cjs"},"./angular":{"types":"./dist/angular/public-api.d.ts","default":"./dist/angular/fesm2022/signpad-js-angular.mjs"}},"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview"},"dependencies":{"@signosoft/tablet-driver":"0.1.4","lit":"^3.3.1"},"devDependencies":{"@rollup/plugin-replace":"^6.0.3","@types/node":"^25.0.9","typescript":"~5.9.3","vite":"^7.2.4","vite-plugin-dts":"^4.5.4"},"gitHead":"081ad73ae87e3413d1d02cca3bb247803e95c1eb","_id":"@signosoft/signpad-js@0.6.0","description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","_nodeVersion":"22.17.0","_npmVersion":"11.14.1","dist":{"integrity":"sha512-705GmNxCutM24fggxewunNdyq6tTzcav6x4ZROxS9Kxh3ex2YhimaobNqNItPIpjkrXBcGOFn12YEUbPufyKgQ==","shasum":"81d7983576d263e6d7a6e0b32e1624d6b4e9fea8","tarball":"https://registry.npmjs.org/@signosoft/signpad-js/-/signpad-js-0.6.0.tgz","fileCount":9,"unpackedSize":3147402,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCwimJYuyBOHmzsS+3R+gBq/r/dLcUHGG25fv8B+qlRqwIhALRAj1uuH3KBIMgqgzShfGxms3U3JK/obfxtAwKSMEm5"}]},"_npmUser":{"name":"signosoft","email":"tom.signosoft@signosoft.com"},"directories":{},"maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/signpad-js_0.6.0_1787157496226_0.21479873601872046"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-23T10:51:58.505Z","modified":"2026-08-19T16:38:16.751Z","0.0.1":"2026-01-23T10:51:58.786Z","0.1.0":"2026-01-26T16:23:09.459Z","0.2.0":"2026-02-26T13:26:38.274Z","0.2.1":"2026-02-26T14:28:49.148Z","0.2.2":"2026-02-27T13:07:59.216Z","0.2.3":"2026-03-06T18:38:12.800Z","0.3.0":"2026-03-11T14:07:55.341Z","0.3.1":"2026-03-16T13:15:53.424Z","0.3.2":"2026-03-16T13:29:34.728Z","0.3.3":"2026-03-19T10:15:35.273Z","0.3.4":"2026-03-19T15:32:31.667Z","0.3.5":"2026-03-20T13:18:39.631Z","0.3.6":"2026-03-23T11:43:56.909Z","0.3.7":"2026-03-23T14:24:10.625Z","0.3.8":"2026-03-23T15:19:43.717Z","0.3.9":"2026-03-30T13:55:09.630Z","0.4.0":"2026-03-31T14:20:35.865Z","0.4.1":"2026-04-21T10:54:52.218Z","0.4.2":"2026-04-22T15:13:40.103Z","0.4.3":"2026-04-24T15:05:05.049Z","0.4.4":"2026-04-24T15:13:08.623Z","0.4.5":"2026-05-05T11:56:52.582Z","0.4.6":"2026-05-07T13:47:16.390Z","0.4.7":"2026-05-07T15:21:44.828Z","0.4.8":"2026-05-12T14:37:28.743Z","0.4.9":"2026-05-15T13:10:04.935Z","0.4.10":"2026-05-21T15:41:34.059Z","0.5.0":"2026-07-13T14:43:08.121Z","0.5.1":"2026-07-15T12:03:52.511Z","0.5.2":"2026-07-15T14:41:09.184Z","0.5.3":"2026-08-05T11:01:01.122Z","0.6.0":"2026-08-19T16:38:16.438Z"},"description":"| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 | | :---------------------------------------- | :-------------------------------------------------- | :-----------------","maintainers":[{"name":"signosoft","email":"tom.signosoft@signosoft.com"}],"readme":"# @signosoft/signpad-js\n\n## 📍 Table of Contents\n\n| Core Concepts & Overview                  | Getting Started & Usage                             | Advanced & Support                 |\n| :---------------------------------------- | :-------------------------------------------------- | :--------------------------------- |\n| 📜 [Description](#-description)           | 📦 [Installation](#-installation)                   | 💬 [Feedback](#-feedback--support) |\n| 🎬 [Demo](#-demo)                         | 🔐 [Licensing](#-lease-setup)                       | 🛠️ [Contributing](#-contributing)  |\n| ⚙️ [Tech stack](#-tech-stack--built-with) | 🚀 [Quick Start](#-quick-start)                     | 📄 [License](#-license)            |\n| 🖊️ [Devices](#️-device-compatibility)      | 📋 [Properties](#-properties)                       |                                    |\n|                                           | 🧩 [Methods](#-methods)                             |                                    |\n|                                           | 🔄 [States](#-component-states)                     |                                    |\n|                                           | 🎨 [Styling](#-styling--theming)                    |                                    |\n|                                           | 🌐 [Localization](#-localization--translation-keys) |\n|                                           |                                                     |\n\n## 📜 Description\n\n`signosoft-signpad` is a powerful and flexible web component built with LitElement, designed for seamless digital signature capture integration into modern web applications. It provides a **unified interface** for working with various signature devices like **Wacom or Ugee**, supporting both stylus and mouse-based signing.\n\nThis component **works effortlessly** with any modern stack:\n| **JavaScript** | **React** | **Angular** | **Vue** |\n|:-:|:-:|:-:|:-:|\n| <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg\" alt=\"JS\" width=\"35\" height=\"35\"> | <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg\" alt=\"React\" width=\"35\" height=\"35\"> | <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/angularjs/angularjs-original.svg\" alt=\"Angular\" width=\"35\" height=\"35\"> | <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vuejs/vuejs-original.svg\" alt=\"Vue\" width=\"35\" height=\"35\"> ||\n\nIt expertly handles the complexities of **WebHID device connections**, signature session lifecycles, and high-fidelity stroke rendering.\n<br/>\n\n## 🎬 Demo\n\n<img src=\"https://unpkg.com/@signosoft/signpad-js@latest/docsVideo.gif\" alt=\"Signosoft Demo\" width=\"500\" />\n\n## ⚙️ Tech Stack / Built With\n\n- [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=fff)](https://www.typescriptlang.org/)\n- [![Lit](https://img.shields.io/badge/Lit-4C64FF?logo=Lit&logoColor=white)](https://lit.dev/)\n- [![Vite](https://img.shields.io/badge/Vite-646CFF?logo=vite&logoColor=fff)](https://vitejs.dev/)\n  <br/>\n\n## 🔐 Lease Setup\n\nTo use the Signosoft Signpad component with physical signature hardware, a valid `lease` is **required**.\n\n#### 🛑 CRITICAL: Mandatory Initialization\n\nWithout a valid lease, the component can still render, but driver initialization and hardware communication features will be <b>disabled</b>.\n\n### 1. Lease flow\n\n1. Generate/get your license key in Signosoft portal.\n2. Request a lease from the Signosoft lease API.\n3. Put the returned lease into `config.lease`.\n\n> Security note: In production, call the lease API from your backend and return only the lease to frontend.\n\n### 2. Frontend implementation (plain JavaScript reference)\n\n```JS\nasync function fetchLease() {\n  try {\n    const response = await fetch(\n      \"https://test.signosoft.com/api/v1/public/driver-leases/create\",\n      {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n          token: \"YOUR-LICENSE-TOKEN\",\n          validityHours: 24,\n        }),\n      },\n    );\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      throw new Error(\n        `License server error: ${response.statusText} - ${errorText}`,\n      );\n    }\n\n    return await response.json();\n  } catch (error) {\n    console.error(\"Signosoft Signpad: License initialization failed\", error);\n    throw error;\n  }\n}\n\nasync function applyLeaseToConfig(currentConfig) {\n  const lease = await fetchLease();\n  return {\n    ...currentConfig,\n    lease,\n  };\n}\n```\n\n<br/>\n\n## 🖊️ Device Compatibility\n\nThe component communicates with signature tablets via the **WebHID API**. Devices are matched against a built-in configuration database; unrecognized devices fall back to a generic driver.\n\n| Manufacturer | Models                              | Notes                                                                                     |\n| :----------- | :---------------------------------- | :---------------------------------------------------------------------------------------- |\n| **Wacom**    | STU series (STU-520, STU-530, etc.) | Fully supported; STU-520/530 require a pre-clear screen wipe before each signing session. |\n| **Ugee**     | UG05 and compatible models          | Supported via device config; firmware variations may affect button behavior.              |\n| **XP-Pen**   | Canvas-style tablets                | Supported; uses canvas-area coordinate mapping.                                           |\n| **Others**   | —                                   | Fall back to `DefaultDriver`; basic pen capture works, hotspot buttons may not.           |\n\n> **Mouse fallback:** If no supported device is connected (or the user dismisses the HID picker), the component automatically activates mouse/touch input so signing can still proceed in the browser.\n\n## 📦 Installation\n\nInstall the library via npm:\n\n```bash\nnpm install @signosoft/signpad-js\n```\n\nOr using your preferred manager:\n\n```bash\nyarn add @signosoft/signpad-js\n```\n\n```bash\npnpm add @signosoft/signpad-js\n```\n\n### 🌍 Environment Requirements\n\nTo ensure proper communication via the **WebHID API**:\n\n- **HTTPS:** Required for all production environments (WebHID security policy).\n- **Supported Browsers:** Chrome 89+, Edge 89+, Opera (Chromium-based).\n- **TypeScript:** Built-in support; no extra `@types` needed.\n  <br/>\n\n## 🚀 Quick Start\n\nFirst, install the core package:\n\n```bash\nnpm install @signosoft/signpad-js\n```\n\n### 🧰 Framework Integration Guide\n\n<details>\n<summary>\n  <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/angularjs/angularjs-original.svg\" alt=\"Angular\" width=\"15\" height=\"15\">\n  <b>Angular</b> <font color=\"green\"><b>(Live)</b></font>\n</summary>\n<br>\n\n# <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/angular/angular-original.svg\" alt=\"Angular\" width=\"30\" height=\"30\"> Angular Integration Guide\n\nThis guide describes how to integrate the `@signosoft/signpad-js` web component into an Angular application.\n\n## 1. Installation\n\nInstall the core package using npm:\n\n```bash\nnpm install @signosoft/signpad-js\n```\n\n## 2. Create the Bridge Directive\n\nSince `signosoft-signpad` is a Web Component, Angular requires a Directive to properly sync configuration changes and provide typed access to the component instance.\n\nCreate `signosoft-signpad.directive.ts`:\n\n```typescript\nimport {\n  Directive,\n  ElementRef,\n  Input,\n  OnChanges,\n  SimpleChanges,\n} from \"@angular/core\";\nimport type { SignosoftSignpad, SignpadConfig } from \"@signosoft/signpad-js\";\n\n@Directive({\n  selector: \"signosoft-signpad\",\n  standalone: true,\n})\nexport class SignosoftSignpadDirective implements OnChanges {\n  @Input() config?: SignpadConfig;\n\n  constructor(private host: ElementRef<SignosoftSignpad>) {}\n\n  // Access the native Web Component instance\n  get signpadRef(): SignosoftSignpad {\n    return this.host.nativeElement;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    const el = this.host.nativeElement as any;\n    for (const key of Object.keys(changes)) {\n      el[key] = (this as any)[key];\n    }\n  }\n}\n```\n\n## 3. Implementation in Component\n\nImport the library, the directive, and add the **`CUSTOM_ELEMENTS_SCHEMA`**.\n\n```typescript\nimport {\n  Component,\n  ViewChild,\n  CUSTOM_ELEMENTS_SCHEMA,\n  AfterViewInit,\n  signal,\n} from \"@angular/core\";\nimport \"@signosoft/signpad-js\"; // Import the Web Component registration\nimport {\n  type SignosoftSignpad,\n  type SignpadConfig,\n} from \"@signosoft/signpad-js\";\nimport { SignosoftSignpadDirective } from \"./directives/signosoft-signpad.directive\";\n\n@Component({\n  selector: \"app-root\",\n  standalone: true,\n  imports: [SignosoftSignpadDirective],\n  templateUrl: \"./app.component.html\",\n  schemas: [CUSTOM_ELEMENTS_SCHEMA], // Mandatory for custom HTML tags\n})\nexport class AppComponent implements AfterViewInit {\n  @ViewChild(SignosoftSignpadDirective)\n  signpadDirective!: SignosoftSignpadDirective;\n\n  public config = signal<SignpadConfig>({\n    lease: undefined,\n  });\n\n  async ngAfterViewInit() {\n    await this.applyLeaseToConfig();\n  }\n\n  public async fetchLease(): Promise<any> {\n    try {\n      const response = await fetch(\n        \"https://test.signosoft.com/api/v1/public/driver-leases/create\",\n        {\n          method: \"POST\",\n          headers: { \"Content-Type\": \"application/json\" },\n          body: JSON.stringify({\n            token: \"YOUR-LICENSE-TOKEN\",\n            validityHours: 24,\n          }),\n        },\n      );\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new Error(\n          `License server error: ${response.statusText} - ${errorText}`,\n        );\n      }\n\n      return await response.json();\n    } catch (error) {\n      console.error(\"Signosoft Signpad: License initialization failed\", error);\n      throw error;\n    }\n  }\n\n  public async applyLeaseToConfig() {\n    const lease = await this.fetchLease();\n    this.config.update((currentConfig) => ({\n      ...currentConfig,\n      lease,\n    }));\n  }\n\n  // Helper to access methods easily (ok, clear, cancel, etc.)\n  public get signpad(): SignosoftSignpad | undefined {\n    return this.signpadDirective?.signpadRef;\n  }\n}\n```\n\n## 4. Component Template\n\nUse the custom tag in your HTML and bind the configuration object.\n\n```html\n<div>\n  <div>\n    <signosoft-signpad [config]=\"config()\"></signosoft-signpad>\n  </div>\n</div>\n```\n\n</details>\n\n<details>\n<summary>\n  <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg\" alt=\"React\" width=\"15\" height=\"15\">\n  <b>React</b> <font color=\"green\"><b>(Live)</b></font>\n</summary>\n<br>\n\n# <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg\" alt=\"React\" width=\"30\" height=\"30\"> React - Quick start\n\nThis guide describes how to integrate the `@signosoft/signpad-js` web component into a React application (Functional Components with Hooks).\n\n## 1. Installation\n\nInstall the core package using npm:\n\n```bash\nnpm install @signosoft/signpad-js\n```\n\n## 2. Implementation\n\nIn React, we use `useRef` for methods and `useEffect` to fetch a lease before updating config.\n\n```tsx\nimport { useEffect, useRef, useState } from \"react\";\nimport \"@signosoft/signpad-js\"; // Registers the web component\nimport type { SignpadConfig } from \"@signosoft/signpad-js\";\n\nasync function fetchLease() {\n  try {\n    const response = await fetch(\n      \"https://test.signosoft.com/api/v1/public/driver-leases/create\",\n      {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n          token: \"YOUR-LICENSE-TOKEN\",\n          validityHours: 24,\n        }),\n      },\n    );\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      throw new Error(\n        `License server error: ${response.statusText} - ${errorText}`,\n      );\n    }\n\n    return await response.json();\n  } catch (error) {\n    console.error(\"Signosoft Signpad: License initialization failed\", error);\n    throw error;\n  }\n}\n\nfunction App() {\n  // Use ref to access component methods (ok, clear, connect, etc. by signpadRef.current)\n  const signpadRef = useRef<any>(null);\n  const [config, setConfig] = useState<SignpadConfig>({ lease: undefined });\n\n  useEffect(() => {\n    fetchLease().then((lease) => setConfig((prev) => ({ ...prev, lease })));\n  }, []);\n\n  return (\n    <div>\n      <h1>Signosoft Signpad React Example</h1>\n      <signosoft-signpad ref={signpadRef} config={config} />\n    </div>\n  );\n}\n\nexport default App;\n```\n\n</details>\n\n<details>\n<summary>\n  <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vuejs/vuejs-original.svg\" alt=\"Vue\" width=\"15\" height=\"15\">\n  <b>Vue.js</b> <font color=\"green\"><b>(Live)</b></font>\n</summary>\n<br>\n\n# <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vuejs/vuejs-original.svg\" alt=\"Vue\" width=\"30\" height=\"30\"> Vue.js Integration Guide\n\nThis guide describes how to integrate the `@signosoft/signpad-js` web component into a Vue 3 application using the Composition API (`<script setup>`).\n\n## 1. Installation\n\nInstall the core package using npm:\n\n```bash\nnpm install @signosoft/signpad-js\n```\n\n## 2. Configure Vue to recognize Custom Elements\n\nBy default, Vue will try to resolve `signosoft-signpad` as a Vue component and will throw a warning. You need to tell Vue to ignore this tag.\n\n**If you are using Vite (`vite.config.ts`):**\n\n```typescript\nimport { defineConfig } from \"vite\";\nimport vue from \"@vitejs/plugin-vue\";\n\nexport default defineConfig({\n  plugins: [\n    vue({\n      template: {\n        compilerOptions: {\n          // Treat all tags starting with 'signosoft-' as custom elements\n          isCustomElement: (tag) => tag.startsWith(\"signosoft-\"),\n        },\n      },\n    }),\n  ],\n});\n```\n\n## 3. Implementation\n\nIn Vue 3, we use `ref` for both the element and config, then fetch the lease and assign it to config.\n\n```typescript\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport \"@signosoft/signpad-js\"; // Registers the Web Component\nimport type { SignpadConfig, SignosoftSignpad, IPenData } from \"@signosoft/signpad-js\";\n\n// Use ref to access component methods (ok, clear, connect, etc. by signpadRef.value)\nconst signpadRef = ref<SignosoftSignpad | null>(null);\n\nconst signpadConfig = ref<SignpadConfig>({ lease: undefined });\n\nconst fetchLease = async () => {\n  try {\n    const response = await fetch(\"https://test.signosoft.com/api/v1/public/driver-leases/create\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        token: \"YOUR-LICENSE-TOKEN\",\n        validityHours: 24,\n      }),\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      throw new Error(`License server error: ${response.statusText} - ${errorText}`);\n    }\n\n    return await response.json();\n  } catch (error) {\n    console.error(\"Signosoft Signpad: License initialization failed\", error);\n    throw error;\n  }\n};\n\nfetchLease()\n  .then((lease) => {\n    signpadConfig.value = {\n      ...signpadConfig.value,\n      lease,\n    };\n  });\n\n</script>\n\n<template>\n  <div>\n    <signosoft-signpad\n      ref=\"signpadRef\"\n      :config=\"signpadConfig\"\n    ></signosoft-signpad>\n  </div>\n</template>\n```\n\n</details>\n\n<details>\n<summary>\n  <img src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/javascript/javascript-original.svg\" alt=\"JS\" width=\"15\" height=\"15\">\n  <b>Vanilla JS</b> <font color=\"green\"><b>(Live)</b></font>\n</summary>\n<br>\n\n# 🍦 Vanilla JS Integration Guide\n\nThis guide describes how to integrate the `@signosoft/signpad-js` web component into a plain JavaScript project without any frameworks.\n\n## 1. Installation\n\nInstall the package via npm:\n\n```bash\nnpm install @signosoft/signpad-js\n```\n\nOr, if you are not using a bundler, you can include the script directly in your HTML (ensure the path points to the compiled bundle in `node_modules` or a CDN).\n\n## 2. JavaScript Implementation\n\nIn Vanilla JS, you interact with the component by selecting it from the DOM and assigning the configuration directly to its `config` property.\n\n```javascript\nimport \"@signosoft/signpad-js\";\n\n/**\n * INTELLISENSE SUPPORT (Optional)\n * Helps VS Code provide autocomplete for methods and properties.\n * @type {import('@signosoft/signpad-js').SignosoftSignpad}\n */\nconst pad = document.querySelector(\"signosoft-signpad\");\n\n// 1. Initial Configuration\npad.config = {\n  lease: undefined,\n};\n\nconst fetchLease = async () => {\n  try {\n    const response = await fetch(\n      \"https://test.signosoft.com/api/v1/public/driver-leases/create\",\n      {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n          token: \"YOUR-LICENSE-TOKEN\",\n          validityHours: 24,\n        }),\n      },\n    );\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      throw new Error(\n        `License server error: ${response.statusText} - ${errorText}`,\n      );\n    }\n\n    return await response.json();\n  } catch (error) {\n    console.error(\"Signosoft Signpad: License initialization failed\", error);\n    throw error;\n  }\n};\n\nfetchLease().then((lease) => {\n  pad.config = { ...pad.config, lease };\n});\n```\n\n## 3. HTML Structure\n\nAdd the custom element tag to your HTML and create the necessary control buttons.\n\n```html\n<!-- index.html -->\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Signosoft Signpad - Vanilla JS</title>\n  </head>\n  <body>\n    <h1>Signosoft Signpad</h1>\n    <!-- The Web Component -->\n    <signosoft-signpad id=\"my-signpad\"></signosoft-signpad>\n    <!-- Main logic script -->\n    <script type=\"module\" src=\"main.js\"></script>\n  </body>\n</html>\n```\n\n## 4. Key Concepts\n\n- **Direct Property Assignment:** Unlike some frameworks that use attributes, in Plain JS you should assign the configuration directly: `element.config = { ... }`.\n- **Module System:** Ensure your `<script>` tag has `type=\"module\"` to use the `import` statement.\n- **Methods:** All methods like `.connect()`, `.ok()`, and `.clear()` are available directly on the DOM element object.\n- **DOM Events:** The component dispatches standard DOM events (like `sign-ok`, `sign-clear`) which you can listen to using `addEventListener`.\n\n</details>\n\n## 📋 Properties\n\nThe component is primarily configured through a single `config` property. This object controls everything from licensing and hardware behavior to UI visibility and localization.\n\n| Property | Type            | Default | Description                                      |\n| :------- | :-------------- | :------ | :----------------------------------------------- |\n| `config` | `SignpadConfig` | `{}`    | The main configuration object for the component. |\n\n### 🔑 Core Options\n\n| Option      | Type     | Required                   | Description                                                                                                                                                                                   |\n| :---------- | :------- | :------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`lease`** | `object` | Required for hardware mode | Lease payload returned from the lease API call. The component still renders without it, but driver initialization and hardware communication are disabled (see [Lease Setup](#-lease-setup)). |\n\n### 👁️ uiVisibilityOptions\n\nToggles the visibility of specific User Interface elements.\n\n| Field                        | Type      | Default | Description                                                       |\n| :--------------------------- | :-------- | :------ | :---------------------------------------------------------------- |\n| `topBarVisible`              | `boolean` | `true`  | Shows/hides the entire top navigation bar.                        |\n| `topBarClearButtonVisible`   | `boolean` | `false` | Shows a \"Clear\" button in the top-left corner.                    |\n| `topBarConnectButtonVisible` | `boolean` | `true`  | Shows the connect/disconnect button area in the top-right corner. |\n| `bottomBarVisible`           | `boolean` | `true`  | Shows/hides the entire bottom action bar.                         |\n| `okButtonVisible`            | `boolean` | `true`  | Shows the **OK** button in the bottom bar.                        |\n| `clearButtonVisible`         | `boolean` | `true`  | Shows the **Clear** button in the bottom bar.                     |\n| `cancelButtonVisible`        | `boolean` | `true`  | Shows the **Cancel** button in the bottom bar.                    |\n| `canvasLineVisible`          | `boolean` | `true`  | Shows the horizontal signature guide line on the canvas.          |\n| `deviceStatusTextVisible`    | `boolean` | `true`  | Shows the name of the connected device (e.g., \"Wacom STU-540\").   |\n| `additionalTextVisible`      | `boolean` | `true`  | Shows helper status messages (e.g., \"Ready to sign\").             |\n\n### 🖋️ canvasAndDrawingOptions\n\nAdjusts the visual appearance of the digital ink.\n\n| Field      | Type     | Default   | Description                                 |\n| :--------- | :------- | :-------- | :------------------------------------------ |\n| `color`    | `string` | `#000000` | The HEX color of the signature stroke.      |\n| `minWidth` | `number` | `1`       | The line thickness at minimum pen pressure. |\n| `maxWidth` | `number` | `3`       | The line thickness at maximum pen pressure. |\n\n> Note: Since standard mice do not support physical pressure, the system emulates a normalized pressure of 0.5, ensuring consistent line rendering during fallback sessions.\n\n### 🌐 languageOptions\n\nHandles component localization. It can load external files or use inline definitions.\n\n| Field          | Type     | Description                                                                                                                                                 |\n| :------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `lang`         | `string` | The active language code. Built-in translations are bundled for `'en'` and `'cs'`; other languages (including `'pt'`) require `langPath` or `translations`. |\n| `langPath`     | `string` | URL path to fetch translation files. Expects files in `[path]/[lang].json` format.                                                                          |\n| `translations` | `object` | An inline object containing key-value pairs (e.g., `{ \"OK\": \"Confirm signature\" }`). Overrides files.                                                       |\n\n## 🌐 Localization & Translation Keys\n\nLocalization is driven from `languageOptions`, but you can also provide overrides at runtime:\n\n1. **Set the language code** in `config.languageOptions.lang`. English (`en`) is the fallback, and Czech (`cs`) is bundled alongside it. Other languages, including Portuguese (`pt`), must be supplied via `langPath` or `translations` — they are not bundled.\n2. **Load a hosted file** by pointing `languageOptions.langPath` to the directory that contains `[lang].json`. The loader will fetch `${langPath}/${lang}.json` (or the exact file if you include the `.json` suffix).\n3. **Override only specific phrases** by passing a `translations` object—either a flat key map or a per-language map (`{ en: {...}, cs: {...} }`). Inline values take precedence over both built-in and fetched files.\n4. **Dynamic placeholders** (for example, `{device}` in `TEXT_SIGNING_WITH_DEVICE`) are replaced using the `LocalizationManager.t` helper. Keep the braces intact if you expect runtime interpolation.\n\nThe complete list of keys that can be translated is maintained in `src/i18n/en.json`. You can copy the structure when creating new language files or inline overrides. The defaults are:\n\n| Key                          | Default (English)                                   |\n| :--------------------------- | :-------------------------------------------------- |\n| `OK`                         | OK                                                  |\n| `CLEAR`                      | Clear                                               |\n| `CANCEL`                     | Cancel                                              |\n| `CLEAR_SIGNATURE`            | Clear signature                                     |\n| `DISCONNECT`                 | Disconnect                                          |\n| `CONNECT_SIGNPAD`            | Connect Signpad                                     |\n| `MOUSE`                      | Mouse                                               |\n| `CONNECTED_UNKNOWN_DEVICE`   | Connected (Unknown Device)                          |\n| `AUTO_CONNECTING`            | Auto-connecting to device...                        |\n| `CONNECTING_TO_DEVICE`       | Connecting to your device...                        |\n| `REVERTING_TO_DEFAULT`       | Reverting to default input...                       |\n| `DISCONNECTING_DEVICE`       | Disconnecting device...                             |\n| `COMPONENT_INITIALIZED`      | Component initialized.                              |\n| `TEXT_START_SIGNING`         | Connect your device.                                |\n| `TEXT_SIGN_WITH_PHYSICAL`    | Please sign using the device pen.                   |\n| `TEXT_SIGN_WITH_MOUSE`       | Please sign using your mouse.                       |\n| `TEXT_SIGN_GENERIC`          | Sign in the area above using mouse or pen.          |\n| `TEXT_SIGNING_WITH_DEVICE`   | Signing with {device}                               |\n| `NO_DEVICE_FOUND`            | No device found.                                    |\n| `CONNECTION_ERROR`           | Connection error.                                   |\n| `ERROR_DISCONNECTION`        | Error during disconnection.                         |\n| `ERROR_INSTANTIATING_DRIVER` | Error instantiating driver.                         |\n| `INSUFFICIENT_TOKENS`        | Not enough tokens to sign. Reconnecting…            |\n| `INVALID_LICENSE_KEY`        | Invalid license key.                                |\n| `READY_TO_CONNECT`           | Ready to connect.                                   |\n| `SIGNPAD_DETECTED`           | Signpad detected. Click 'Connect Signpad' to begin. |\n| `READY_TO_SIGN_MOUSE`        | Ready to sign. Use your mouse.                      |\n| `READY_TO_SIGN_PHYSICAL`     | Ready to sign. Use the device pen.                  |\n\nIf you add any new keys, mirror them in every language file you provide to guarantee they fall back gracefully to English.\n\n### ⚙️ Logic & Events\n\nThe component provides two ways to interact with internal processes.\n\n#### 🛠️ Action Handlers (`actionHandlers`)\n\nThese allow you to **inject custom logic** directly into the internal button flows. Your code runs alongside the component's internal logic.\n\n| Handler        | Arguments                           | Description                                                             |\n| :------------- | :---------------------------------- | :---------------------------------------------------------------------- |\n| `handleOk`     | `data?: ISignatureConfirmationData` | Extends the internal OK button logic. Receives captured signature data. |\n| `handleClear`  | —                                   | Extends the internal Clear button logic.                                |\n| `handleCancel` | —                                   | Extends the internal Cancel button logic.                               |\n\n#### 🔔 Event Callbacks (`eventCallbacks`)\n\nStandard event listeners triggered _after_ specific actions. Useful for observing the component from your application state.\n\n| Callback       | Payload                                          | Description                                                                                        |\n| :------------- | :----------------------------------------------- | :------------------------------------------------------------------------------------------------- |\n| `onPen`        | `event: CustomEvent<IPenData>`                   | Dispatched when a device or mouse fallback are in contact with component or signature pad display. |\n| `onConnecting` | `event: CustomEvent<void>`                       | Dispatched when a device is in loading state.                                                      |\n| `onConnect`    | `event: CustomEvent<{ deviceInfo: any }>`        | Dispatched when a device or mouse fallback connects.                                               |\n| `onDisconnect` | `event: CustomEvent<void>`                       | Dispatched when the hardware connection is closed.                                                 |\n| `onOk`         | `event: CustomEvent<ISignatureConfirmationData>` | Dispatched when signature is confirmed.                                                            |\n| `onClear`      | `event: CustomEvent<void>`                       | Dispatched when the canvas has been cleared.                                                       |\n| `onCancel`     | `event: CustomEvent<void>`                       | Dispatched when the user aborts the session.                                                       |\n| `onError`      | `event: CustomEvent<ISignpadErrorDetail>`        | Dispatched on critical failures (lease, driver, connection, billing, etc.).                        |\n\n> `actionHandlers` and `eventCallbacks` are separate hooks and can both be configured.\n\n#### 🚨 `onError` payload (`ISignpadErrorDetail`)\n\n```typescript\n{\n  category: SignpadErrorCategory; // BILLING_DENIED | NETWORK | OTHER\n  message: string; // error.message, for convenience\n  error: Error; // the original error\n}\n```\n\n`category` also drives automatic recovery:\n\n- **`BILLING_DENIED`** — the lease has run out of signing credits/tokens. Signing automatically restarts a few seconds after the error is shown.\n- **`OTHER`** — any other recoverable failure (e.g. a driver hiccup, a cancelled device picker). Signing automatically restarts the same way as `BILLING_DENIED`.\n- **`NETWORK`** — a connectivity problem (lease fetch failed, device physically disconnected, origin validation failed). The error stays shown; signing does **not** auto-restart, since retrying on a timer can't fix a network or configuration problem — the user (or your app) must retry manually, e.g. via `connect()`.\n\n> **Migration note (breaking payload shape change):** `event.detail` used to be the raw `Error`. It is now `ISignpadErrorDetail`; use `event.detail.error` for the original `Error` instance. `event.detail.message` still works unchanged.\n\n---\n\n### 💡 Example Implementation\n\n```typescript\nthis.config = {\n  lease: leasePayloadFromApi,\n  canvasAndDrawingOptions: {\n    color: \"#1a1a1a\",\n  },\n  actionHandlers: {\n    handleOk: async (data) => {\n      console.log(\"Saving signature data...\", data);\n    },\n  },\n  eventCallbacks: {\n    onConnect: (e) =>\n      console.log(\"Pad connected:\", e.detail.deviceInfo.deviceName),\n    onError: (event) => console.error(\"Signpad Error:\", event.detail.message),\n  },\n};\n```\n\n## 🧩 Methods\n\nThe following methods are available on the component instance to control the signing process programmatically.\n\n| Method           | Returns                                            | Description                                                                      |\n| :--------------- | :------------------------------------------------- | :------------------------------------------------------------------------------- |\n| `connect()`      | `Promise<void>`                                    | Connects device to component                                                     |\n| `disconnect()`   | `Promise<void>`                                    | Disconnects device from component                                                |\n| `startSigning()` | `Promise<void>`                                    | Initializes a new signing session on the canvas and hardware.                    |\n| `stopSigning()`  | `Promise<any>`                                     | Low-level session stop that returns the signature payload.                       |\n| `ok()`           | `Promise<ISignatureConfirmationData \\| undefined>` | Finalizes the session, cleans the device screen, and returns the signature data. |\n| `clear()`        | `Promise<void>`                                    | Wipes the signature from the UI and hardware without ending the session.         |\n| `cancel()`       | `Promise<void>`                                    | Aborts the current session and resets the component state.                       |\n\n---\n\n#### 📜 `connect()`\n\nThis is the primary method to start using the Signpad. Because it uses the **WebHID API**, this must be triggered by a **user gesture** (like a button click) to satisfy browser security requirements.\n\nThe method first attempts to silently reconnect to a previously authorized device. If that fails, it opens the browser's device selection dialog and, if no physical device is selected, falls back to mouse/touch mode automatically.\n\n**Returns:**\n\n- A `Promise<void>` that resolves once the connection attempt (or fallback) is complete.\n\n#### 📜 `disconnect()`\n\nSafely terminates the communication channel with the signature tablet.\n\n**What happens during disconnect:**\n\n1. The hardware driver is stopped and released.\n2. The internal cache of device information is cleared.\n3. The component UI transitions back to the `DISCONNECTED` state.\n4. Any active mouse listeners are removed.\n5. A `SIGN_DISCONNECT` event is dispatched.\n\n#### 💡 Best Practices\n\n- **Initial Connection:** Always call `connect()` from a click handler so the user can select their device from the browser list.\n- **Cleanup:** It is good practice to call `disconnect()` when the component is being destroyed or the user navigates away from the signing page to free up the USB port.\n\n#### 📜 `startSigning(options?: IDrawingOptions)`\n\nPrepares the component for a new signature. It transitions the state to `CONNECTING`, resets any previous drawing data, and activates the pen input for either a physical device or mouse fallback.\n\n```typescript\n// Example: Start a session with custom ink\nawait signpad.startSigning({\n  color: \"#0000FF\",\n  maxWidth: 4,\n  minWidth: 2,\n});\n```\n\n#### 📜 `ok()`\n\nThis is the standard way to confirm a signature. It:\n\n1. Stops the signing process.\n2. Clears the physical device's screen (if connected).\n3. Dispatches the `SIGN_OK` event.\n4. Returns the final signature payload (coordinates, pressure, metadata).\n\n**Returned payload shape (`ISignatureConfirmationData`)**\n\n```js\n[\n  points, // index 0: Data about each point\n  imageBase64, // index 1: Image in base64\n  metadata, // index 2: Information about tablet and canvas\n];\n```\n\n```js\n// [0] Points structure — same IPenData shape documented under onPen below\n{\n  relativeX: number, // normalized 0..1\n  relativeY: number, // normalized 0..1\n  pressure: number,\n  inContact: boolean,\n  timestamp: number,          // Unix ms (Date.now()) at the time of capture\n}\n```\n\n```js\n// [1] imageBase64 — base64 PNG data URL, or null if no image could be captured\n\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...\";\n```\n\n```js\n// [2] Metadata structure\n// The exact shape depends on whether a physical tablet or the mouse/touch\n// fallback produced the signature — the two paths report different fields.\n\n// Mouse / touch fallback:\n{\n  canvas: {\n    width: number,\n    height: number,\n    cssWidth: number,\n    cssHeight: number,\n    dpr: number\n  },\n  tablet: undefined,\n  duration: number  // seconds elapsed between the first and last recorded pen sample\n}\n\n// Physical tablet (driver-reported):\n{\n  canvas: {\n    top?: number,\n    left?: number,\n    right?: number,\n    bottom?: number,\n    width: number,\n    height: number\n  },\n  tablet: {\n    name: string,\n    aspectRatio: number,\n    isCanvasStyleTablet: boolean,\n    screenWidth: number,\n    screenHeight: number,\n    drawingArea: { x: number, y: number, width: number, height: number },\n    serialNumber: Promise<string> | string,\n    vendorId: number | null,\n    productId: number | null\n  }\n  // no `duration` field is reported for the physical-tablet path\n}\n```\n\n`handleOk(data)` receives the same structure. `onOk` receives it in `event.detail`.\n\n#### 📜 `onPen` payload\n\n`onPen` is emitted continuously while writing and provides a single `IPenData` object in `event.detail`.\n\n```js\n{\n  relativeX: number, // normalized 0..1\n  relativeY: number, // normalized 0..1\n  pressure: number,\n  inContact: boolean,\n  timestamp: number,          // Unix ms (Date.now()) at the time of capture\n}\n```\n\n> The `IPenData` type also allows optional `absoluteX`, `absoluteY`, `ready`, and `sequence` fields for forward compatibility with the underlying driver, but the component does not currently populate them.\n\n#### 📜 `stopSigning()`\n\nA low-level method that forces the driver to stop capturing data and returns the signature payload as a 3-element tuple `[penDataBatch, imageBase64, metadata]`. Unlike `ok()`, it does not trigger the full \"Finalization\" flow (UI transitions or device screen clearing).\n\n- `penDataBatch` — array of `IPenData` points collected during the session\n- `imageBase64` — PNG data URL of the signature drawn on canvas, or `null` if unavailable\n- `metadata` — object with `canvas` (dimensions, DPR) and `tablet` (device info) fields\n\n#### 📜 `clear()`\n\nResets the drawing state on both the web canvas and the physical tablet's display. This allows the user to start their signature over without leaving the current session. It dispatches the `SIGN_CLEAR` event.\n\n#### 📜 `cancel()`\n\nStops the session immediately. It does not collect any signature data and resets the component to its ready state. This method dispatches the `SIGN_CANCEL` event.\n\n## 🔄 Component States\n\nThe component progresses through a finite set of states, exposed via the `SignpadState` enum (importable from `@signosoft/signpad-js`). Useful for observing the component lifecycle in your application.\n\n| State                          | Value                            | Description                                                                                                                                                         |\n| :----------------------------- | :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `INITIAL`                      | `\"initial\"`                      | Component just mounted, no initialization yet.                                                                                                                      |\n| `CONNECTING`                   | `\"connecting\"`                   | Connection attempt in progress.                                                                                                                                     |\n| `WAITING_FOR_DEVICE_SELECTION` | `\"waiting_for_device_selection\"` | Browser HID picker is open, waiting for user selection.                                                                                                             |\n| `CONNECTED_PHYSICAL`           | `\"connected_physical\"`           | Physical tablet connected and ready.                                                                                                                                |\n| `CONNECTED_MOUSE_FALLBACK`     | `\"connected_mouse_fallback\"`     | No tablet found; mouse/touch fallback is active.                                                                                                                    |\n| `SIGNING_ACTIVE`               | `\"signing_active\"`               | Defined for future use; the component does not currently transition to this state — drawing happens while still in `CONNECTED_PHYSICAL`/`CONNECTED_MOUSE_FALLBACK`. |\n| `PROCESSING_OK`                | `\"processing_ok\"`                | OK action is being processed (finalizing signature).                                                                                                                |\n| `PROCESSING_CLEAR`             | `\"processing_clear\"`             | Clear action is being processed.                                                                                                                                    |\n| `PROCESSING_CANCEL`            | `\"processing_cancel\"`            | Cancel action is being processed.                                                                                                                                   |\n| `DISCONNECTING`                | `\"disconnecting\"`                | Disconnect in progress.                                                                                                                                             |\n| `DISCONNECTED`                 | `\"disconnected\"`                 | Component is idle and disconnected.                                                                                                                                 |\n| `ERROR`                        | `\"error\"`                        | An error occurred (see `onError` callback). Signing automatically restarts a few seconds later unless the error's `category` is `NETWORK`.                         |\n\n### 🚨 `SignpadErrorCategory`\n\nAlso importable from `@signosoft/signpad-js`, carried on the `onError` payload (see [`onError` payload](#-onerror-payload-isignpaderrordetail) above):\n\n| Value            | Value string       | Auto-restarts signing? |\n| :--------------- | :------------------ | :---------------------- |\n| `BILLING_DENIED` | `\"billing_denied\"` | Yes                     |\n| `NETWORK`        | `\"network\"`         | No                       |\n| `OTHER`          | `\"other\"`           | Yes                     |\n\n---\n\n## 🎨 Styling & Theming\n\nThe component uses a hybrid theming model:\n\n- It ships with complete default styles (works out of the box).\n- You can override the visual design through CSS variables.\n\n## ✍️ Override via CSS\n\nYou can override variables in your stylesheet\n\n### 📎 Copy-Paste Starter\n\nPaste this directly into your app stylesheet and adjust values:\n\n```css\nsignosoft-signpad {\n  /* Color Variables */\n  --primary-color-0: #4e56ea;\n  --primary-color-10: #7178ee;\n  --background-color-0: #f1f2fd;\n  --background-color-10: #e3e4fc;\n  --text-color-0: #333e4a;\n  --white-color: #ffffff;\n  --grey-color: #b5b9be;\n\n  /* Constraints */\n  --min-height: 48px;\n  --spacing-constraints: 16px 24px;\n\n  /* CSS Variables */\n  --sign-font-family: Arial, Helvetica, sans-serif;\n  --sign-common-border-radius: 8px;\n\n  /* Top Bar */\n  --sign-top-bar-bg-base: var(--background-color-10);\n  --sign-top-bar-text-base: var(--primary-color-0);\n  --sign-top-bar-padding: var(--spacing-constraints);\n  --sign-top-bar-min-height: var(--min-height);\n  --sign-top-bar-border-top-left-radius: var(--sign-common-border-radius);\n  --sign-top-bar-border-top-right-radius: var(--sign-common-border-radius);\n  --sign-top-bar-border-bottom-left-radius: 0;\n  --sign-top-bar-border-bottom-right-radius: 0;\n\n  /* Canvas Area */\n  --sign-canvas-bg-base: var(--background-color-0);\n  --sign-canvas-wrapper-border-top-left-radius: 0;\n  --sign-canvas-wrapper-border-top-right-radius: 0;\n  --sign-canvas-wrapper-border-bottom-left-radius: 0;\n  --sign-canvas-wrapper-border-bottom-right-radius: 0;\n\n  /* Line */\n  --sign-line-height: 22px;\n  --sign-line-margin-bottom: 16px;\n  --sign-line-border-base: var(--primary-color-10);\n  --sign-line-additional-text-color: var(--text-color-0);\n  --sign-line-margin: 0px 24px var(--sign-line-margin-bottom) 24px;\n  --sign-canvas-line-text-font-size: 12px;\n  --sign-canvas-height-offset: var(--sign-line-height);\n\n  /* Bottom Bar */\n  --sign-bottom-bar-bg-base: var(--background-color-10);\n  --sign-bottom-bar-padding: var(--spacing-constraints);\n  --sign-bottom-bar-min-height: var(--min-height);\n  --sign-bottom-bar-gap: 12px;\n  --sign-bottom-bar-border-top-left-radius: 0;\n  --sign-bottom-bar-border-top-right-radius: 0;\n  --sign-bottom-bar-border-bottom-left-radius: var(--sign-common-border-radius);\n  --sign-bottom-bar-border-bottom-right-radius: var(\n    --sign-common-border-radius\n  );\n\n  /* Button general settings */\n  --sign-button-font-size: 16px;\n  --sign-button-padding: 14px 16px;\n  --sign-button-min-height: var(--min-height);\n  --sign-button-border-radius: 8px;\n  --sign-button-font-weight: 500;\n\n  /* Primary Buttons (OK, Clear, Cancel) */\n  --sign-button-primary-bg-base: var(--primary-color-0);\n  --sign-button-primary-bg-hover: var(--primary-color-10);\n  --sign-button-primary-bg-disabled: var(--grey-color);\n  --sign-button-primary-text-base: var(--white-color);\n  --sign-button-primary-text-hover: var(--white-color);\n  --sign-button-primary-text-disabled: var(--white-color);\n  --sign-button-primary-border-base: 1px solid var(--primary-color-0);\n  --sign-button-primary-border-hover: 1px solid var(--primary-color-10);\n  --sign-button-primary-border-disabled: 1px solid var(--grey-color);\n\n  /* Link Buttons (Connect signpad) */\n  --sign-button-link-bg-base: transparent;\n  --sign-button-link-bg-hover: var(--background-color-10);\n  --sign-button-link-bg-disabled: transparent;\n  --sign-button-link-text-base: var(--primary-color-0);\n  --sign-button-link-text-hover: var(--primary-color-10);\n  --sign-button-link-text-disabled: var(--grey-color);\n  --sign-button-link-border-base: 1px solid var(--primary-color-0);\n  --sign-button-link-border-hover: 1px solid var(--primary-color-10);\n  --sign-button-link-border-disabled: 1px solid var(--grey-color);\n\n  /* Device State Text Colors */\n  --sign-device-state-text-color-connected: green;\n  --sign-device-state-text-color-disconnected: red;\n\n  /* Loading Overlay */\n  --sign-loading-overlay-bg-color: rgba(255, 255, 255, 0.8);\n  --sign-loading-overlay-text-color: var(--text-color-0);\n  --sign-loading-overlay-spinner-color: var(--primary-color-0);\n  --sign-loading-overlay-spinner-border-color: rgba(78, 86, 234, 0.1);\n  --sign-loading-overlay-spinner-size: 30px;\n}\n```\n\n### 📋 Full CSS Variable Reference\n\n#### Base Colors & General\n\n| Variable                      | Default             | Description                                     |\n| :---------------------------- | :------------------ | :---------------------------------------------- |\n| `--primary-color-0`           | `#4e56ea`           | Primary brand color.                            |\n| `--primary-color-10`          | `#7178ee`           | Primary hover/accent color.                     |\n| `--background-color-0`        | `#f1f2fd`           | Secondary background color.                     |\n| `--background-color-10`       | `#e3e4fc`           | Main bar background color.                      |\n| `--text-color-0`              | `#333e4a`           | Main text color.                                |\n| `--white-color`               | `#ffffff`           | Pure white color.                               |\n| `--grey-color`                | `#b5b9be`           | Disabled state color.                           |\n| `--sign-font-family`          | `Arial, sans-serif` | Global font family.                             |\n| `--sign-common-border-radius` | `8px`               | Shared radius token reused by bars and buttons. |\n\n#### Layout & Constraints\n\n| Variable                | Default     | Description                            |\n| :---------------------- | :---------- | :------------------------------------- |\n| `--min-height`          | `48px`      | Minimum height for bars and buttons.   |\n| `--spacing-constraints` | `16px 24px` | Default padding/margin for containers. |\n\n#### Top Bar\n\n| Variable                                    | Default                            | Description                         |\n| :------------------------------------------ | :--------------------------------- | :---------------------------------- |\n| `--sign-top-bar-bg-base`                    | `var(--background-color-10)`       | Background color of the top bar.    |\n| `--sign-top-bar-text-base`                  | `var(--primary-color-0)`           | Text color in the top bar.          |\n| `--sign-top-bar-padding`                    | `var(--spacing-constraints)`       | Inner padding of the top bar.       |\n| `--sign-top-bar-min-height`                 | `var(--min-height)`                | Minimum height of the top bar.      |\n| `--sign-top-bar-border-top-left-radius`     | `var(--sign-common-border-radius)` | Top-left radius of the top bar.     |\n| `--sign-top-bar-border-top-right-radius`    | `var(--sign-common-border-radius)` | Top-right radius of the top bar.    |\n| `--sign-top-bar-border-bottom-left-radius`  | `0`                                | Bottom-left radius of the top bar.  |\n| `--sign-top-bar-border-bottom-right-radius` | `0`                                | Bottom-right radius of the top bar. |\n\n#### Canvas & Signature Line\n\n| Variable                                           | Default                                        | Description                                                                  |\n| :------------------------------------------------- | :--------------------------------------------- | :--------------------------------------------------------------------------- |\n| `--sign-canvas-bg-base`                            | `var(--background-color-0)`                    | Background color of the drawing area.                                        |\n| `--sign-canvas-wrapper-border-top-left-radius`     | `0`                                            | Top-left canvas radius, typically rounded when the top bar is hidden.        |\n| `--sign-canvas-wrapper-border-top-right-radius`    | `0`                                            | Top-right canvas radius, typically rounded when the top bar is hidden.       |\n| `--sign-canvas-wrapper-border-bottom-left-radius`  | `0`                                            | Bottom-left canvas radius, typically rounded when the bottom bar is hidden.  |\n| `--sign-canvas-wrapper-border-bottom-right-radius` | `0`                                            | Bottom-right canvas radius, typically rounded when the bottom bar is hidden. |\n| `--sign-line-height`                               | `22px`                                         | Vertical offset/height for the guide line.                                   |\n| `--sign-line-margin-bottom`                        | `16px`                                         | Bottom spacing used in canvas line layout.                                   |\n| `--sign-line-border-base`                          | `var(--primary-color-10)`                      | Color of the signature guide line.                                           |\n| `--sign-line-additional-text-color`                | `var(--text-color-0)`                          | Color of the helper text below the line.                                     |\n| `--sign-line-margin`                               | `0px 24px var(--sign-line-margin-bottom) 24px` | Spacing around the guide line.                                               |\n| `--sign-canvas-line-text-font-size`                | `12px`                                         | Font size for guide line labels.                                             |\n| `--sign-canvas-height-offset`                      | `var(--sign-line-height)`                      | Canvas offset calculation for the guide line.                                |\n\n#### Bottom Bar\n\n| Variable                                       | Default                            | Description                              |\n| :--------------------------------------------- | :--------------------------------- | :--------------------------------------- |\n| `--sign-bottom-bar-bg-base`                    | `var(--background-color-10)`       | Background color of the bottom bar.      |\n| `--sign-bottom-bar-padding`                    | `var(--spacing-constraints)`       | Inner padding of the bottom bar.         |\n| `--sign-bottom-bar-min-height`                 | `var(--min-height)`                | Minimum height of the bottom bar.        |\n| `--sign-bottom-bar-gap`                        | `12px`                             | Space between buttons in the bottom bar. |\n| `--sign-bottom-bar-border-top-left-radius`     | `0`                                | Top-left radius of the bottom bar.       |\n| `--sign-bottom-bar-border-top-right-radius`    | `0`                                | Top-right radius of the bottom bar.      |\n| `--sign-bottom-bar-border-bottom-left-radius`  | `var(--sign-common-border-radius)` | Bottom-left radius of the bottom bar.    |\n| `--sign-bottom-bar-border-bottom-right-radius` | `var(--sign-common-border-radius)` | Bottom-right radius of the bottom bar.   |\n\n#### Buttons (General)\n\n| Variable                      | Default             | Description                    |\n| :---------------------------- | :------------------ | :----------------------------- |\n| `--sign-button-font-size`     | `16px`              | Font size for all buttons.     |\n| `--sign-button-padding`       | `14px 16px`         | Inner padding for all buttons. |\n| `--sign-button-min-height`    | `var(--min-height)` | Minimum height for buttons.    |\n| `--sign-button-border-radius` | `8px`               | Border radius for all buttons. |\n| `--sign-button-font-weight`   | `500`               | Font weight for all buttons.   |\n\n#### Primary Buttons (OK, Clear, Cancel)\n\n| Variable                                | Description                          |\n| :-------------------------------------- | :----------------------------------- |\n| `--sign-button-primary-bg-base`         | Background color of primary buttons. |\n| `--sign-button-primary-bg-hover`        | Hover background color.              |\n| `--sign-button-primary-bg-disabled`     | Disabled background color.           |\n| `--sign-button-primary-text-base`       | Text color for primary buttons.      |\n| `--sign-button-primary-text-hover`      | Hover text color.                    |\n| `--sign-button-primary-text-disabled`   | Disabled text color.                 |\n| `--sign-button-primary-border-base`     | Border of primary buttons.           |\n| `--sign-button-primary-border-hover`    | Hover border color.                  |\n| `--sign-button-primary-border-disabled` | Disabled border color.               |\n\n#### Link/Connect Buttons\n\n| Variable                             | Default                             | Description                                  |\n| :----------------------------------- | :---------------------------------- | :------------------------------------------- |\n| `--sign-button-link-bg-base`         | `transparent`                       | Background color for secondary/link buttons. |\n| `--sign-button-link-bg-hover`        | `var(--background-color-10)`        | Hover background color.                      |\n| `--sign-button-link-bg-disabled`     | `transparent`                       | Disabled background color.                   |\n| `--sign-button-link-text-base`       | `var(--primary-color-0)`            | Text color for secondary/link buttons.       |\n| `--sign-button-link-text-hover`      | `var(--primary-color-10)`           | Hover text color.                            |\n| `--sign-button-link-text-disabled`   | `var(--grey-color)`                 | Disabled text color.                         |\n| `--sign-button-link-border-base`     | `1px solid var(--primary-color-0)`  | Border for secondary/link buttons.           |\n| `--sign-button-link-border-hover`    | `1px solid var(--primary-color-10)` | Hover border color.                          |\n| `--sign-button-link-border-disabled` | `1px solid var(--grey-color)`       | Disabled border color.                       |\n\n#### Status & Overlays\n\n| Variable                                      | Default                    | Description                        |\n| :-------------------------------------------- | :------------------------- | :--------------------------------- |\n| `--sign-device-state-text-color-connected`    | `green`                    | Text color when device is ready.   |\n| `--sign-device-state-text-color-disconnected` | `red`                      | Text color when disconnected.      |\n| `--sign-loading-overlay-bg-color`             | `rgba(255, 255, 255, 0.8)` | Background of the loading spinner. |\n| `--sign-loading-overlay-text-color`           | `var(--text-color-0)`      | Loading overlay text color.        |\n| `--sign-loading-overlay-spinner-color`        | `var(--primary-color-0)`   | Color of the animated spinner.     |\n| `--sign-loading-overlay-spinner-border-color` | `rgba(78, 86, 234, 0.1)`   | Base border color of spinner ring. |\n| `--sign-loading-overlay-spinner-size`         | `30px`                     | Size of the spinner icon.          |\n\n## 💬 Feedback & Support\n\nWe are constantly working to improve our components and drivers. Your feedback is essential to us. Whether you found a bug, have a feature request, or need technical assistance, please reach out to us:\n\n- 📧 **Support Email:** [esign@signosoft.com](mailto:esign@signosoft.com)\n- 🌐 **Official Website:** [www.signosoft.com](https://www.signosoft.com)\n\n## 🛠️ Contributing\n\n### Commit naming convention\n\n- Every commit message must start with Jira task id and category:\n  - `MAIN-000/<category>: <summary>`\n- For work in progress:\n  - `MAIN-000/<category>: WIP - <summary>`\n\nAllowed categories:\n\n- `feat`: adding a new feature\n- `fix`: fixing a bug\n- `refactor`: performance/readability/maintainability change\n- `chore`: docs, formatting, tests, cleanup, tooling\n- `merge`: branch merge into `main`\n\nUse infinitive verb form in commit summaries:\n\n- <span style=\"color: #16a34a;\"><strong>RIGHT:</strong></span> `add`, `fix`, `remove`, `update`, `refactor`\n- <span style=\"color: #dc2626;\"><strong>WRONG:</strong></span> Continuous tense: `adding`, `removing` Past tense: `added`, `fixed`\n\nExamples:\n\n```bash\ngit commit -m \"MAIN-000/feat: add new button component; add button to templates\"\n```\n\n```bash\ngit commit -m \"MAIN-000/fix: add stop directive to button component to prevent propagation\"\n```\n\n```bash\ngit commit -m \"MAIN-000/refactor: rewrite button component in TypeScript\"\n```\n\n```bash\ngit commit -m \"MAIN-000/chore: write button documentation\"\n```\n\n```bash\ngit commit -m \"MAIN-000/merge: new button\"\n```\n\n```bash\ngit commit -m \"MAIN-000/feat: WIP - basic signing functionality\"\n```\n\n### Versioning and release commits\n\nFollow Semantic Versioning:\n\n- `MAJOR` (`x.0.0`): breaking changes\n- `MINOR` (`x.y.0`): backward-compatible feature set\n- `PATCH` (`x.y.z`): backward-compatible bug fixes\n\nCommit naming for version bumps:\n\n- Version-only change: use `chore`\n- Version bump with actual code/features in same commit: use `feat`/`fix`/`refactor` based on dominant change\n- For release commits, include both versions in message: `release from <old> to <new>`\n\nExample (version bump with feature changes):\n\n```bash\ngit commit -m \"MAIN-000/feat: release from 0.2.4 to 0.3.0 - add signature method\"\n```\n\nExample (version-only commit):\n\n```bash\ngit commit -m \"MAIN-000/chore: release from 0.2.4 to 0.3.0\"\n```\n\nHow version increment works:\n\n- `PATCH` (`x.y.Z`): increase patch only (`1.4.2` -> `1.4.3`)\n- `MINOR` (`x.Y.0`): increase minor, reset patch (`1.4.9` -> `1.5.0`)\n- `MAJOR` (`X.0.0`): increase major, reset minor and patch (`1.9.7` -> `2.0.0`)\n\nExamples:\n\n```bash\n# patch\ngit commit -m \"MAIN-000/fix: release from 1.0.0 to 1.0.1 - fix onPen throttle edge case\"\n\n# minor\ngit commit -m \"MAIN-000/feat: release from 1.1.1 to 1.2.0 - add lease refresh helper\"\n\n# major\ngit commit -m \"MAIN-000/refactor: release from 1.1.1 to 2.0.0 - remove legacy API\"\n```\n\n## 📄 License\n\n**Proprietary Commercial License**\n\nCopyright © 2026, Signosoft. All rights reserved.\n\nThis software is proprietary to Signosoft and is protected by copyright laws. It is **not open source**.\n\n### 🔐 Commercial Usage\n\nA valid, paid, and active commercial license agreement with Signosoft is **strictly required** for the use, operation, reproduction, distribution, or deployment of this software in any environment (including development, testing, staging, and production).\n\n### 📜 Key Terms\n\n- **Unauthorized Use:** Any use without a current, fully paid license is expressly prohibited and constitutes a violation of our intellectual property rights.\n- **Legal Action:** Signosoft reserves the right to pursue legal action to enforce its rights and seek damages for unauthorized use.\n- **Restrictions:** You may not reverse-engineer, decompile, or disassemble this software except as permitted by applicable law.\n\nFor information on how to obtain a valid commercial license, pricing, and support, please contact us at [esign@signosoft.com](mailto:esign@signosoft.com).\n\nSee the [LICENSE](LICENSE) file for the full legal text.\n","readmeFilename":"README.md"}