{"_id":"cordova-plugin-ra-chart","_rev":"39-ba03dec88fe184b68782ff256d3b49fa","name":"cordova-plugin-ra-chart","dist-tags":{"latest":"1.13.1"},"versions":{"1.0.0":{"name":"cordova-plugin-ra-chart","version":"1.0.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"93525b231b739761d1ab0558e698d6ed6039a822","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.0.tgz","fileCount":12,"integrity":"sha512-9x09ZPwPU/5NGVHSLSLEIDE+XBh8dXc/Xh3UlIl9232sRHdnnjJT6JWwgBFbV7PSbJAPLfshJxpV3v7mPhoscQ==","signatures":[{"sig":"MEUCIQD/oLTOBS7EoMNXgj0jo4rFD2VHU7e+VkwvA1QnQGU5pgIgFYJzZpiIEAhGArjKBxn3QCxdICZ437Fo6Vh5VaSm1U4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161405},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":["android","ios","browser","electron"]},"engines":{"cordovaDependencies":{"1.0.0":{"cordova":">=9.0.0"}}},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.0_1785061147456_0.7163927065041384","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"cordova-plugin-ra-chart","version":"1.0.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"558fc38921351f2a9542504df38850514b0bec0c","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.1.tgz","fileCount":12,"integrity":"sha512-t1qZKV93ERS6NYzwey6jzs31O5vEfY4+c4ZMyBOrVNIeImi+C5yQdKT7Veo9jkq+c1NOT5KSBmaDmYDPT7DAOA==","signatures":[{"sig":"MEUCIEWoWtwy2RCa+XjNvOJnUCF/IUqHYML9ZUrcBZdKoRERAiEAjccvZnES7dtLyBwWVtAMkIubmuYaQfk4zxQjj+lGssw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165157},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.1_1785068386229_0.710429688133664","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"cordova-plugin-ra-chart","version":"1.0.2","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.2","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"eb3d46aabce94d45666c2515328b56c5db5f6bd9","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.2.tgz","fileCount":12,"integrity":"sha512-CYZZ6gG4WgvbzEZSxSFFwN5/VpiBwWw2v4uEwQk+ymsbUlh9N2ktH02AisR+As7cnXx+VxY5KGWC/SQsLIxm3w==","signatures":[{"sig":"MEYCIQCAun4Yne7+QIxUUUxGocKsA+dbKBvq4Het3DN/oKKQ5QIhAIMb5yqrQjVMv/n38qT3hoN0ZcsgeVMW/l1B69V9/jTo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169136},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.2_1785069194097_0.3802193220393144","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"cordova-plugin-ra-chart","version":"1.0.3","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.3","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"3858aa8e5a38d8144ce48723803651e52f3441e2","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.3.tgz","fileCount":12,"integrity":"sha512-q76xXh/c1Uaov8u3smz6OZvRo0VuKaX2stlmQeVB0hAbR+NQvhRt2cKsdJJca5vv22PD7F6B8Lbj+zm2nJg/Wg==","signatures":[{"sig":"MEUCIQCMoWiq4gDAqyaTAFvesUBSQ1YJ4VTLTdh6eymS3N1GrgIgcB1hOmEdSjPTwYSn9O5h78p9Yyhg0JXbfd3hEm9+Rmg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177734},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.3_1785070049835_0.22597223893275742","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"cordova-plugin-ra-chart","version":"1.0.4","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.4","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"f7dea9d9051e1aad4fd2a563b111cf6bc33b4bd1","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.4.tgz","fileCount":12,"integrity":"sha512-/E50ihEYiPzY8cfcuL/uGMDgYBdSXXEplGS0g3LG1SK9O+aeCttskmNRmuzndJnWrXcYOmi5WkB2UhtlRI4HnQ==","signatures":[{"sig":"MEYCIQCRWe96NKMbrzdVZU/jFxehOaGJKNhddUrHmmwLPO1XzwIhAKniOGDNC17ps3qDfW0vd/f31QhGx9neIIAK5A48+JDd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183253},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.4_1785071502684_0.4009984096640402","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"cordova-plugin-ra-chart","version":"1.0.5","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.5","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"289a23c17943cbc42110f5bc410a22cf4ddf2977","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.5.tgz","fileCount":12,"integrity":"sha512-l5IFtY6zhAIC605REgXVoPyf/NI+9fyDBiTC7qnbzXZUpdOigSDV5MK3TGFR8/gFYu50QUYFysLC+cGeTPAc4Q==","signatures":[{"sig":"MEYCIQCP804bkBVprcQ9r+1NaQBL/3Tsr+c8OGL+O5sYIuwtfAIhAK3xzpZT+oLg4JCZJksjAyNtjPtRxoNtwicU0Qs9ONH1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187797},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.5_1785071927607_0.6863567018931689","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"cordova-plugin-ra-chart","version":"1.0.6","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.6","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"0e6e048608ccefa5360af521a334a050c5c48344","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.6.tgz","fileCount":12,"integrity":"sha512-xOHwTCE8SkIi69RS+T8ojA8ZexwZZXP0Rc2KgIn4/zLdijDFoI2w9nkYhrFHSydGhCK0s1W7DEfvD9PjEbVL3A==","signatures":[{"sig":"MEUCIB2owlqPFeY4yFw+cEbyJjaHlaHOUgNdMJgBLK1b/HGKAiEA5k99yuXvhVG9HCqBpn3DtadbrWSsi8xwvqZ7eTrThrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":193198},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.6_1785073717644_0.044067115970203075","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"cordova-plugin-ra-chart","version":"1.0.7","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.7","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"c006dfc1c72d65a08bb6dc748d56a7b6740500cb","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.7.tgz","fileCount":12,"integrity":"sha512-92WRpqIgWdrzGhJHlXQofdpMbgcJlEPlTaO1FmsiDtXbwdsW1/lv6IwiZH+KdiPfqGsrWhtzMRXuWkXkf7sXDQ==","signatures":[{"sig":"MEYCIQDG0XorMC21OrbawOzgmgSdUibK30W4Kbf1Qxf0jNklxwIhAMRVc3ycsXszWdL6ESoxACB+ePLvkUwOyl8ssQfE/pU1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":197654},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.7_1785075535693_0.6666350425041707","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"cordova-plugin-ra-chart","version":"1.0.8","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.0.8","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"880b7f4b200491d4358ea56f01c6425ec9332fc8","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.0.8.tgz","fileCount":12,"integrity":"sha512-Z6MZLCBlk02NJAly4DUh+gd1Uqykhp5xTrc4ElmsnHjdwcGHI8mMHjgMb/FVhMgyS9E9cAfcQqtnVAHgGmEHdQ==","signatures":[{"sig":"MEUCIQDfDxVv2H8bFmMS7TCUK9W4xURMjhy9IBOQBlkIQg9+KgIgcXJ0JvLD2fLBOSc++3FceToXtoyF669apdl3Y/XT2X4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200140},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.0.8_1785133027468_0.6838541953138981","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"cordova-plugin-ra-chart","version":"1.1.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.1.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"25ab6aa761205d6d4b40aa5ddf3c396f0fd54b0f","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.1.0.tgz","fileCount":12,"integrity":"sha512-P6r+979a7Z45fR4Rfy203iX35ylai4Whl680o70fglISLojoUWKehXt9zP2cQuVqcRtD9Crlz6WZyJfWnmUCxg==","signatures":[{"sig":"MEQCICBmDa8U0xp21Ww7ObC+cKWIDQs94hSNisji4w/fH7gBAiBhp/PGa6SI+tmBZSeU6GCvXzpMPV3IHzABNi/S7eks2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204689},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.1.0_1785133998373_0.592094627350964","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"cordova-plugin-ra-chart","version":"1.1.2","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.1.2","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"ecfa6bcbd8486b9a73205a500bcb639b35b7bf49","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.1.2.tgz","fileCount":12,"integrity":"sha512-hHn40u7D3U0/tSMA+b6WdOy4XlqazqhpvPjKb6FaB2ANoTha5lVns3DobNRfcya1zt84EnAPytRyKCd9ymU7TA==","signatures":[{"sig":"MEQCIDomduU3QvBuLJbDK53vX/P1NTeeKx8sQmAtfsotNEoAAiBhzaqEXO1YqsA72Cm8Uq//CGHKkX3ZKUJNRfHYQAEraw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208456},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.1.2_1785135886871_0.8871404334719706","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"cordova-plugin-ra-chart","version":"1.1.3","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.1.3","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"f2f6a30355aeae1b3710c7526b5ab3cf00e81124","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.1.3.tgz","fileCount":12,"integrity":"sha512-X4EPuVAhHwamfq119otZM0cAaIhn/WDux/xfd41IIg5dMPkrsKlMUcAUtcLgt4tYW5n134g649PR/e2Fqsl0Ag==","signatures":[{"sig":"MEQCIA7tAKGaUaPy9ALtN4MTo3lGyatHCys/AYWy9BwPtumYAiBtIyTwlPaeRpHP/Ys2gvvz2M/lztXENOBzyKAX1lPQgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210719},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.1.3_1785136576806_0.12188605189041324","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"cordova-plugin-ra-chart","version":"1.1.4","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.1.4","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"2c93d59a6369a5c3c52eb19d73386a669d6d681e","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.1.4.tgz","fileCount":12,"integrity":"sha512-sjPe/Sne28cHWSwFu+YqC17mcKHnhLXXVjB9xsDF5CHB/sIGUa1kY/KX7RSXokP7h+49/gRuODw3SPFaJ1Bj6A==","signatures":[{"sig":"MEYCIQCbY1+JWMg/AE1chEUXv5rRDeMe3hQlwzhDcoPjyeasmgIhAP+4P4P9+bmsmZ0uvCAqRZZfW0e+CeQKzQoDKhEH+OAL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213263},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.1.4_1785138386155_0.5345861464926427","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"cordova-plugin-ra-chart","version":"1.1.5","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.1.5","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"e85a4aa58caad671641cbb66f8e881f038181868","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.1.5.tgz","fileCount":12,"integrity":"sha512-SoKKlAvLg0wPBLIvSycL9nYnAEvGDfdgx/+uNnyamHqyLmaNeUhT5q4nut3aA7lD1yh0Ks7EGdM4etEII0LsZQ==","signatures":[{"sig":"MEUCIF1L8k2Zz9M38Sl4KNPwAckTFkiDQNOSo2E60UnPGisiAiEA8CAWTM/H0izg4kzzhD5svr3W0OSuxxh2eZD2woy2ZAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215986},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.1.5_1785145843327_0.20732696636803527","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"cordova-plugin-ra-chart","version":"1.2.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.2.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"37009e211d9d8923c05ed13f8b3227c872ffe2bb","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.2.0.tgz","fileCount":12,"integrity":"sha512-tTiPWTEaakmzPiU3OJh5xaWPiwQYvwrCGTuKnqYAejEqBwPJHvonODFsF/ePl68r+CXbuIOPPH26h40jwuyVTA==","signatures":[{"sig":"MEYCIQD043q+rSMrm28ZhuHxJC+ycsbaZeLZlMm+JYl/QFFhwAIhAMUVfLSl2mEcR6LREU+iMbD/xrPyo5iPAYxWw7bvtVxS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219265},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.2.0_1785146380663_0.6348261274919844","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"cordova-plugin-ra-chart","version":"1.2.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.2.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"abec37b2ffa2906a096e18b2ea42ffeb273b6b58","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.2.1.tgz","fileCount":12,"integrity":"sha512-GSr9BVINX4FjFsnlPdy2a2U5aKMVFbRmRyfvWpxb/2BGp91yyJ1mvDw98Yue4TzSzuI3FCcFj0Xazn4Zx3Fj+A==","signatures":[{"sig":"MEUCIEo8zCbqba4+k5LAeieN1HVT3QF4jy5KtQtvorbyRPaEAiEA0cI7b8ZpN/y1V8jRzFQY/hdguvgxYgpB5UiW6ZKIZjg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220793},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.2.1_1785148867802_0.9257446480675857","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"cordova-plugin-ra-chart","version":"1.3.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.3.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"60dd55b67f26ae079b1dcfb9942daa957c6d4635","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.3.0.tgz","fileCount":12,"integrity":"sha512-6GxtIeiuh7BPbonOi3cD9NgAY0hITeySt5fiq6XwmbDH1qImfvsfv0NowxhUpC52HXuqbSYpEd5tOB5TAm1nxw==","signatures":[{"sig":"MEUCIQDIYd3pYR0WPIfosJDeZ6hbOTT2gvtPYa/hVex1xSgadwIgdgTmEoVlu/SPu0HoVglil2vNCoRw91eVgjU4SaKjUe4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223985},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.3.0_1785152465643_0.6480615888420322","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"cordova-plugin-ra-chart","version":"1.3.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.3.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"c3b4754fb8f78b4ad6d821b722a325bb7ca802ea","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.3.1.tgz","fileCount":12,"integrity":"sha512-TeVDF3PXOmmcQURlWyhFdkafTxiFN2GJppEtxCeCc0iIbc6yHTL0pdPLy3wrsOqxSqF5Ds+dRDYlKeFcQnmKvQ==","signatures":[{"sig":"MEUCIQCi9BLocclItK2nfdfk2nxLcv1JjrY5bMyWJ3H84Bh34gIgIp5DBJE+qCo6Gh+XHShe2FC02FZ0UIbQLf3F7Cian7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224851},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.3.1_1785157327547_0.5503561962440233","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"cordova-plugin-ra-chart","version":"1.4.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.4.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"323ef91f3c4ab0a5991cdf337bf7448fc699740a","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.4.0.tgz","fileCount":12,"integrity":"sha512-02GkkUEiChwfbQuiU2CWVMAij0R80+JVySa7jHQZwT4HJt3FQU3G3DslFunlh/8QL4LqV8RZ1kTnlnBlHObxzA==","signatures":[{"sig":"MEUCIQC+AfBZ1OiQg49w1UIZqibzSFXqL/Tw9HEGiHMHVAT/igIgFxAvDl+q0y6m6FzVn+zbf9tjFZo4cLU4TUBgbWaUFOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227985},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.4.0_1785160956721_0.8772530909799543","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"cordova-plugin-ra-chart","version":"1.5.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.5.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"d99de78490273ab7db186275919a1c19b3779769","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.5.0.tgz","fileCount":12,"integrity":"sha512-F5i1SHOQHcmKORVb1hQ4sTmm7xOEQTLHdJugyCpevipyq1TneVy3aoUvcHdwc1cs2umIvMTnGLaEMFg6zgoXAQ==","signatures":[{"sig":"MEQCICpJSKUlhKH1vFbrLFfj+D1AVaB1lByUkDBXHNKfbg4fAiAr69VMnm76gIT7lXqfAAmfeYqLljrjwshCth/2+1N+hQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231136},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.5.0_1785218464378_0.4996173961235304","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"cordova-plugin-ra-chart","version":"1.5.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.5.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"99686428c10034a0394e4ff2421f7211a62304f2","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.5.1.tgz","fileCount":12,"integrity":"sha512-kumIMZAV9bpm7IXpPKZj+Xz7Hrj1z8Qua9k7jRVhvd4Lz9ptnBwx1bIM5l9zNR3r4bWlXpkavRubYW3QfQPGWw==","signatures":[{"sig":"MEQCIE8UCLm31W2rFEFKvgbY12dkSrEEKA5f73yIvJZyyxr5AiBlTWOlBoVUAOL3+SDSl65O1isNYcmvw3sCCjxRPM3+rw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231300},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.5.1_1785221612223_0.791150404292235","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"cordova-plugin-ra-chart","version":"1.6.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.6.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"60570bf2be16eef7bbd3b72ed6c6dbdcc953470d","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.6.0.tgz","fileCount":12,"integrity":"sha512-TPNcQiJA8RYTOKdCX14n5UfXXWWATGSkDBte6ezplE7PPgN25aj8IqfcZyRUD7DrhFWA1WvOZbfrOpCLJZKT+w==","signatures":[{"sig":"MEYCIQCBt/0gUMWkbnmRmP+TSdW68w0xofk6E+q2XdVpo9f3pAIhANy2JuycA9Y2OsasaXHAs1l7dlXls82hKq+3hQP5r7t8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233295},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.6.0_1785225689714_0.8055090233005089","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"cordova-plugin-ra-chart","version":"1.7.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.7.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"5fa2d9ecd301791d62aeb30294d0930717f92027","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.7.0.tgz","fileCount":12,"integrity":"sha512-QlS7fXjpFq2+f1qqIYQ1GIx38v7RLtIVpcPFGX1S52NWSLdIuzbq8RVTrbTB8F33aZFi13U4Rqv22ALPYELQSg==","signatures":[{"sig":"MEYCIQDxVEdXJRGTd9DNQO2yRCAiiLXDdif4XG8gmOYJkZFx8wIhAItyw1OxeGzTn2dfgY36TyP/Qn9xPfm+ptn7OptPdtYc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236372},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.7.0_1785227053954_0.08443529272378214","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"cordova-plugin-ra-chart","version":"1.7.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.7.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"534ea3b574c618c84af016da41dcadbfe4b68f3d","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.7.1.tgz","fileCount":12,"integrity":"sha512-scEr2SLPu24p5kMD7iUUp/bnWcv215MDysWe0Uu0hCYeZWYO7at2WagX+DZ/edjqiNl445/9CtTYb91cQMWIrg==","signatures":[{"sig":"MEYCIQDAbsjp5OdE3tYZWOlXGNBDuztypM1yanJm2hM+vYEA0wIhAMnVBlBsKl75MCxEq1fFQhzzIAR3EqKexknYPlvjEml9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237368},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.7.1_1785228150381_0.6590130980333442","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"cordova-plugin-ra-chart","version":"1.8.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.8.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"9ac378c098ec1302a19c4f0990b72abcfe7c48ad","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.8.0.tgz","fileCount":12,"integrity":"sha512-sH05tAIMeC4RLq74uzJ+ywV1jzyd4gx5c9uJmEASy6rhbhbMrrGp6Q2XN6dW6fSZVczSYnxgqT4pJNAsap1hWw==","signatures":[{"sig":"MEQCIFqyFsw7Y5i60XexR9QnLy/yMnruMN0VsI92Xg4QhaPGAiB9j/DGWz18/oSck57b0HXWjxs33TnRPPwa5L+6EIM3Pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241340},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.8.0_1785228525629_0.8187800918820218","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"cordova-plugin-ra-chart","version":"1.10.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.10.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"fe7332284ebbb7e70f24cd09e331f41f56052e79","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.10.0.tgz","fileCount":12,"integrity":"sha512-yejaufJ6tJY2K0qmFMMV2y1JqUZgPzUzeCnGSsbqTUiKN3GZEBIyEheW2drUpWIOuDkIfklkJ2gVPVd6rswq8Q==","signatures":[{"sig":"MEYCIQC7/Hy2ZQPG1MGIkhkbuEQS+TACO4lIz4rl09S3McN5EwIhAI1xUD1+s6bRxh917W1yF8kfQZczVovW2uMuil2CM1Aq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251208},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.10.0_1785229802158_0.5763579873405116","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"cordova-plugin-ra-chart","version":"1.10.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.10.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"0dfe51658c53346936e367334ff6546ace3371f4","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.10.1.tgz","fileCount":12,"integrity":"sha512-HL5KzCpoNKpJCqQYjdmDvOaNpt6Bd7fRoRLzMl+L/Pjj8NIOWhdiVnacNWCoy/eUxQeCAqK82w98hHXiOz1Hag==","signatures":[{"sig":"MEQCIAJ1UpB+0LNf5N4oLyAW9+QVsRSU5E3EOOrINCgHa6XbAiAUy+f8Pm2MBxEuR/P6DFSKBLb7lr5C5CDp6t0uFPCWZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252841},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.10.1_1785230527193_0.1506837948485651","host":"s3://npm-registry-packages-npm-production"}},"1.10.2":{"name":"cordova-plugin-ra-chart","version":"1.10.2","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.10.2","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"41b95c7a78a8d41f458391a10bfcf8c92c07c76b","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.10.2.tgz","fileCount":12,"integrity":"sha512-GHg+JcF+N4/VbZel/NnDQsNax5B2ABoSIltglHANrXV1P5ffKXl+M71fu7AWCWE8IUETmAD22J9k00poew6x7Q==","signatures":[{"sig":"MEQCIBtUI52o7VPjj2hxiZS2QjYsEBsxfxMftKJOa8SEg7A8AiADj78kj0zHOohb9NK3U5d28uP0QlyOmz5vET712fiznw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256850},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.10.2_1785306252529_0.870921140691781","host":"s3://npm-registry-packages-npm-production"}},"1.10.3":{"name":"cordova-plugin-ra-chart","version":"1.10.3","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.10.3","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"74493fb2deec35d1642c1142a0aa1e23b7c57d25","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.10.3.tgz","fileCount":12,"integrity":"sha512-sIbWXjSC7kTcRgeG/QJjQJhMKWxJ7B1w4UdsRx1LPTvVJ47sByzizaxC9kPxxQwL7O+qvFZaBfqBOqm6DT5jYw==","signatures":[{"sig":"MEUCIGSDlO60GevvGjDwZUhl4ReZHppxRIJHO7M2PS1tvSzNAiEA03MTemCbGz0WC4lyMu5ij/ItCHEtY1teTGDzZJwUl/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258396},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.10.3_1785307248763_0.4973868191480817","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"cordova-plugin-ra-chart","version":"1.11.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.11.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"fe78beab251a87d27cc17a8dfafdce1436b7f72e","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.11.0.tgz","fileCount":12,"integrity":"sha512-BOJnHPpq+Q3UDqHuBX5pGDWIAeciD3uO95hPoeCwuyf+5M99QAkMgn3AYYZupRDKPPP7R2Z/INf5w+GFz5BGsw==","signatures":[{"sig":"MEUCIH6MVPs+25Z1vnNCfcQbLnMSmmDG/Pu4jc8KZbli2EI6AiEAueQ2qRReaw/CriZSXasaHJN1qICZWfkqNb33k6r6A4s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260172},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.11.0_1785308681145_0.3245249764915783","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"cordova-plugin-ra-chart","version":"1.11.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.11.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"148402ff5ae07a39b71961ef4ffa8480a55e1f17","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.11.1.tgz","fileCount":12,"integrity":"sha512-G92ntCcjy1i9FcQl0Wv5ZnYuaRvYdCsp6yHhdUupUEhaR9HCwGV8Lfsss7IdWD0bX7xgThbqJw23gVEoqgDQ2g==","signatures":[{"sig":"MEUCIAjmsz8T4/S+5wcBoKSt8lQULmST8+Ib4ww56TLTdjcYAiEA11wGM1edRxGWJQCxPLCb42tmbYbhuxV0M9J/+UZnJiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265695},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.11.1_1785310851013_0.7838406395877895","host":"s3://npm-registry-packages-npm-production"}},"1.11.2":{"name":"cordova-plugin-ra-chart","version":"1.11.2","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.11.2","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"3b1a012b39d03fca34819d5b17d09b3959f79c63","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.11.2.tgz","fileCount":12,"integrity":"sha512-Evb3ecgf7nPjjcRt0kN4qnoTtu1B4fJnHjQ6Gjxsy4RgBQlkHtEQAz3aukFILj499KCoe4WEcdjYKS5n00wqzw==","signatures":[{"sig":"MEQCIE7y8bTJysf1P/nPGweQJFmC/lw3ArDbsAUSdOkqiXy4AiANWCaItjZrCMpjMp2W1cn1Pq9hw3kZ1loWpKnnuJ3dqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268521},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.11.2_1785319742032_0.9216738791930155","host":"s3://npm-registry-packages-npm-production"}},"1.11.3":{"name":"cordova-plugin-ra-chart","version":"1.11.3","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.11.3","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"b0dfd70a0e88a7a3aba8f5f2a4fc4a46bd4bf262","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.11.3.tgz","fileCount":12,"integrity":"sha512-ESEkPPp7okwLaE7L/bk6B+ZXfx6IAvH2WLjN2enADxfC5EjXsGhVFpCdcWWX7l2stMtYW24MN7x8gX4KifVUMg==","signatures":[{"sig":"MEYCIQDp50i3OfRA6a1WV6lZZ2YUFZTGpQq+QYbO+f7Wi711UQIhALJRV2WZjWzJRBN++0k3VYpPCQbFMRQi7WrR9hLLeoe3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270460},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.11.3_1785339088288_0.7573857488818134","host":"s3://npm-registry-packages-npm-production"}},"1.11.5":{"name":"cordova-plugin-ra-chart","version":"1.11.5","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.11.5","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"7c3c6c6550bd927972ba608c008ec6800307f11c","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.11.5.tgz","fileCount":12,"integrity":"sha512-36IWjJyM4VILVSVs2/ZUQKZ7YB6cYOibrDEt3/fHyyVQUdwqY+SusLiLYB3y/QKYZQa3KfMGUHDsry5EXpoYQQ==","signatures":[{"sig":"MEUCIHPhYUTkUyonQoFnhWNWgVp5f7IqG89pRfptaDmiGut1AiEAwYPAm6xxhbWpl6RXtFyt0r8qMffig9vYtzuTee1TMtk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":273802},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.11.5_1785391071685_0.05785857241863801","host":"s3://npm-registry-packages-npm-production"}},"1.11.6":{"name":"cordova-plugin-ra-chart","version":"1.11.6","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.11.6","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"3bdc20ce83d44ebbfa4406072ae6a40310caf901","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.11.6.tgz","fileCount":12,"integrity":"sha512-4cBIJp4o/RhDHnpQNd8+GHdlrZXMdDPLK6sVSOmTKTgPM3i+VHPCw3yqxhkD/+51lP4Iv1N7MkRihCYZUu9iUQ==","signatures":[{"sig":"MEYCIQCaQCWRNVZwdhs7qRQlxforTNUHidhCsXPz0AEaYCWmfgIhAJ9mjysrHo8BMEi2GmpRJCKo1uDgwqWDS23LhST52P1h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":276557},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.11.6_1785391786746_0.17396727821387636","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"cordova-plugin-ra-chart","version":"1.12.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.12.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"fb8470f80051f2a1b62bd2a29f6c4eb36041d672","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.12.0.tgz","fileCount":12,"integrity":"sha512-hphQfygXh7d/yNiMqeEIJF8WiUrAXvpY+YQA+F0oYdMAcqFKJrr2Vu6r3UOszC4wE2b62AY4HAcyLxWbnOEBfw==","signatures":[{"sig":"MEUCICPnNf/RcdydVU+beaIe9zXQxXsLxAfsnbTejwUwPeVzAiEA/uo8F20lHD3SejSvcPg5G3EnEuAHHwqzWhwzwH/dbtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":285005},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.12.0_1785397289962_0.9243230404120553","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"cordova-plugin-ra-chart","version":"1.12.1","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.12.1","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"2e8fd6d58adb059a20264f718b920fa284a40546","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.12.1.tgz","fileCount":12,"integrity":"sha512-zAyubjx2RZyvRcgKj+MVqFbd/vnET1xcM7EB6595U7kQqJ/ahaOodyj42fXjnsNHP13pXVKOUd4K9L5fmsLk3A==","signatures":[{"sig":"MEYCIQDO7vc56Lg2Rq8/gUm9MkHNEutF19G14aP1wxPGoIwjDwIhANp96otLx7+EoiJ0bOukb2FqY5LyE3eCGCTNNWfc51Uo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286977},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.12.1_1785402185229_0.8034812941538558","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"cordova-plugin-ra-chart","version":"1.13.0","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"author":{"name":"RemoteApps"},"license":"MIT","_id":"cordova-plugin-ra-chart@1.13.0","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"dist":{"shasum":"fdb3658951a00562a098f36284174f252fe088cd","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.13.0.tgz","fileCount":12,"integrity":"sha512-zC+VerLKyJxkPL3UGnbgvrbLcVHiWh9/OJ9CjMZgroeli0XroqGndLg3MkrlAioUT25YNDAf23enD37uyiN/cA==","signatures":[{"sig":"MEYCIQDRzu9CCBofrNKuKyJ5pGObnkbGpAJawoIusQf0LlDkoQIhAL4nQxAVKAiVn5tIIXceF+pmr/aoSwwrLzcz9bu9fkw1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293813},"main":"www/ra-chart.js","types":"types/index.d.ts","cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"_npmVersion":"10.9.2","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","directories":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_nodeVersion":"22.14.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/cordova-plugin-ra-chart_1.13.0_1785419179356_0.4052094788268452","host":"s3://npm-registry-packages-npm-production"}},"1.13.1":{"name":"cordova-plugin-ra-chart","version":"1.13.1","description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","main":"www/ra-chart.js","types":"types/index.d.ts","license":"MIT","author":{"name":"RemoteApps"},"cordova":{"id":"cordova-plugin-ra-chart","platforms":[]},"keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"dependencies":{},"peerDependencies":{},"sideEffects":["www/ra-chart.js","www/ra-chart.css"],"_id":"cordova-plugin-ra-chart@1.13.1","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-uSWI4jh0Ih8JperNNA2LnluQMYGChJzRfReol5YHoSZEJ/271farVpFfGIeO+/Gd+YbN+/Z+km72jVjIv6OjPA==","shasum":"494456e2148088ebb359a1eb2115f4ab375feee7","tarball":"https://registry.npmjs.org/cordova-plugin-ra-chart/-/cordova-plugin-ra-chart-1.13.1.tgz","fileCount":12,"unpackedSize":296753,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEONCwBqxtQbXKxAcoZJ/Ybabs/GAO6Q9YgIdZfsb1TJAiBaz1kpNma7PnXEmD8EYqBSjiyDQHeiQwaFlGIfU3lPYA=="}]},"_npmUser":{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"},"directories":{},"maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cordova-plugin-ra-chart_1.13.1_1785425155900_0.6593773558341489"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-26T10:19:07.420Z","modified":"2026-07-30T15:25:56.223Z","1.0.0":"2026-07-26T10:19:07.602Z","1.0.1":"2026-07-26T12:19:46.370Z","1.0.2":"2026-07-26T12:33:14.261Z","1.0.3":"2026-07-26T12:47:29.977Z","1.0.4":"2026-07-26T13:11:42.846Z","1.0.5":"2026-07-26T13:18:47.754Z","1.0.6":"2026-07-26T13:48:37.863Z","1.0.7":"2026-07-26T14:18:55.849Z","1.0.8":"2026-07-27T06:17:07.647Z","1.1.0":"2026-07-27T06:33:18.512Z","1.1.2":"2026-07-27T07:04:47.011Z","1.1.3":"2026-07-27T07:16:17.010Z","1.1.4":"2026-07-27T07:46:26.325Z","1.1.5":"2026-07-27T09:50:43.486Z","1.2.0":"2026-07-27T09:59:40.812Z","1.2.1":"2026-07-27T10:41:07.982Z","1.3.0":"2026-07-27T11:41:05.789Z","1.3.1":"2026-07-27T13:02:07.678Z","1.4.0":"2026-07-27T14:02:36.930Z","1.5.0":"2026-07-28T06:01:04.555Z","1.5.1":"2026-07-28T06:53:32.357Z","1.6.0":"2026-07-28T08:01:29.870Z","1.7.0":"2026-07-28T08:24:14.115Z","1.7.1":"2026-07-28T08:42:30.518Z","1.8.0":"2026-07-28T08:48:45.780Z","1.10.0":"2026-07-28T09:10:02.330Z","1.10.1":"2026-07-28T09:22:07.348Z","1.10.2":"2026-07-29T06:24:12.696Z","1.10.3":"2026-07-29T06:40:48.915Z","1.11.0":"2026-07-29T07:04:41.285Z","1.11.1":"2026-07-29T07:40:51.163Z","1.11.2":"2026-07-29T10:09:02.200Z","1.11.3":"2026-07-29T15:31:28.493Z","1.11.5":"2026-07-30T05:57:51.827Z","1.11.6":"2026-07-30T06:09:46.891Z","1.12.0":"2026-07-30T07:41:30.124Z","1.12.1":"2026-07-30T09:03:05.408Z","1.13.0":"2026-07-30T13:46:19.496Z","1.13.1":"2026-07-30T15:25:56.044Z"},"author":{"name":"RemoteApps"},"license":"MIT","keywords":["ecosystem:cordova","cordova-android","cordova-ios","cordova-browser","ionic","angular","chart","charts","svg","graph","dashboard","mobile","offline","no-dependencies"],"description":"Dependency-free SVG chart engine for Cordova and Ionic — 21 chart types with touch gestures, pinch-to-zoom, haptics and dark-mode theming. No native code, no build step.","maintainers":[{"name":"hussain_younis","email":"Hussainyounis11@gmail.com"}],"readme":"# raChart Cordova\n\nA dependency-free SVG chart engine for **Cordova** and **Ionic**. 21 chart types, built for touch: tap to inspect, drag to scrub, pinch to zoom, with haptics, dark mode and offline rendering.\n\nNo jQuery. No chart library. No native code. No build step. One 60 KB JS file and one CSS file.\n\n```\nra-chart-cordova/\n├── plugin.xml                      Cordova plugin descriptor\n├── package.json\n├── www/\n│   ├── ra-chart.js                 the engine (window.RaChart)\n│   └── ra-chart.css                styles + theme variables\n├── types/index.d.ts                TypeScript definitions\n├── ionic/                          Angular wrapper\n│   ├── ra-chart.component.ts/.html  <ra-chart>\n│   ├── ra-chart.module.ts          NgModule for non-standalone apps\n│   ├── ra-chart.loader.ts          lazy script loader\n│   ├── ra-chart.types.ts\n│   └── index.ts\n└── demo/\n    ├── index.html                  plain mobile demo (open in a browser)\n    └── dashboard.page.ts/.html     Ionic page example\n```\n\n---\n\n## Table of contents\n\n1. [Install](#install)\n2. [Quick start](#quick-start)\n3. [Ionic / Angular usage](#ionic--angular-usage)\n4. [Chart types](#chart-types)\n5. [Data shapes](#data-shapes)\n6. [Options](#options)\n7. [Methods](#methods)\n8. [Events](#events)\n9. [Mobile behaviour](#mobile-behaviour)\n10. [Theming and dark mode](#theming-and-dark-mode)\n11. [Recipes](#recipes)\n12. [Troubleshooting](#troubleshooting)\n13. [Tests](#tests)\n\n---\n\n## Install\n\n> **Ionic/Angular app? Use Option B.** The Cordova plugin route only exposes\n> `window.RaChart` after `deviceready`, so charts stay blank under `ionic serve`.\n> raChart has no native code, so the plugin buys you nothing there.\n\n### Option A — Cordova plugin\n\nRun from your Cordova project root, pointing at the folder that contains `plugin.xml`:\n\n```bash\ncordova plugin add ./ra-chart-cordova\n```\n\n`window.RaChart` is available once `deviceready` fires. Cordova does not inject CSS, so link it yourself in `index.html`:\n\n```html\n<link rel=\"stylesheet\" href=\"plugins/cordova-plugin-ra-chart/www/ra-chart.css\">\n```\n\n### Option B — Ionic app (recommended)\n\nCopy the two runtime files into your assets and the wrapper into your source tree:\n\n```\nsrc/assets/ra-chart/ra-chart.js      ← from www/\nsrc/assets/ra-chart/ra-chart.css     ← from www/\nsrc/app/shared/ra-chart/             ← the whole ionic/ folder\n```\n\nAdd the stylesheet to `angular.json`:\n\n```json\n\"styles\": [\n  \"src/theme/variables.scss\",\n  \"src/global.scss\",\n  \"src/assets/ra-chart/ra-chart.css\"\n]\n```\n\n> **`ra-chart.css` must be global — never a component's `styleUrls`.** Angular's\n> view encapsulation scopes those rules to `[_ngcontent-*]`, which never matches\n> the legend, tooltip and zoom bar because the engine creates them at runtime.\n> The classic symptom is a legend that reads `RevenueTarget` with no colour\n> swatches. Since v1.0.3 the engine injects its own structural styles so this\n> renders correctly regardless, and `ra-chart.css` is optional — it only supplies\n> theming. Load it globally to theme; skip it entirely and charts still look right.\n\nThe component lazy-loads `ra-chart.js` from `assets/ra-chart/ra-chart.js` on first use. To bundle it eagerly instead, add it to `angular.json` → `\"scripts\"`; the loader will detect `window.RaChart` and skip the fetch.\n\nTo load it from somewhere else:\n\n```ts\n// main.ts\nimport { RA_CHART_SCRIPT_URL } from './app/shared/ra-chart';\n\nbootstrapApplication(AppComponent, {\n  providers: [\n    { provide: RA_CHART_SCRIPT_URL, useValue: 'assets/vendor/ra-chart.js' }\n  ]\n});\n```\n\n### Option C — plain browser\n\n```html\n<link rel=\"stylesheet\" href=\"ra-chart.css\">\n<script src=\"ra-chart.js\"></script>\n```\n\n### The `<ra-chart>` custom element\n\nLoading `ra-chart.js` registers `<ra-chart>` as a real custom element, so the tag\nworks with no framework at all:\n\n```html\n<ra-chart type=\"column\" category=\"month\"></ra-chart>\n<script>\n  document.querySelector('ra-chart').data = rows;\n  document.querySelector('ra-chart').series = [{ name: 'Revenue', field: 'revenue' }];\n</script>\n```\n\nScalar options are attributes (`type`, `category`, `height`, `zoom`, `stacked`,\n`smooth`, `semi`, `depth`, `min`, `max`, `x-field`, `size-field`, …; dash-case maps\nto camelCase). Object options are properties (`data`, `series`, `colors`, `bands`,\n`fields`, `animation`).\n\nThis also acts as a safety net in Angular: if `RaChartComponent` is missing from\n`imports`, the element still renders rather than failing silently. When the Angular\ncomponent *is* present it renders its own child first and the custom element stands\ndown, so the two never double-render. Disable with\n`RaChart.defineElement = function () { return false; }` before load, or register\nunder a different tag with `RaChart.defineElement('my-chart')`.\n\n---\n\n## Quick start\n\n```html\n<div id=\"sales\"></div>\n```\n\n```js\nvar chart = new RaChart('#sales', {\n  type: 'column',\n  category: 'month',\n  series: [\n    { name: 'Revenue', field: 'revenue' },\n    { name: 'Target',  field: 'target'  }\n  ],\n  data: [\n    { month: 'Jan', revenue: 42, target: 38 },\n    { month: 'Feb', revenue: 55, target: 45 }\n  ],\n  height: 240\n});\n\nchart.setData(newRows);   // animates to the new values\nchart.destroy();          // always clean up\n```\n\nIn Cordova, wait for the platform first:\n\n```js\ndocument.addEventListener('deviceready', function () {\n  new RaChart('#sales', { /* ... */ });\n});\n```\n\n---\n\n## Ionic / Angular usage\n\n### Standalone component (Angular 16+)\n\n```ts\nimport { Component } from '@angular/core';\nimport { RaChartComponent } from '../shared/ra-chart';\nimport type { RaSeries, RaSelectEvent } from '../shared/ra-chart';\n\n@Component({\n  selector: 'app-sales',\n  standalone: true,\n  imports: [RaChartComponent],\n  templateUrl: './sales.page.html'\n})\nexport class SalesPage {\n  series: RaSeries[] = [{ name: 'Revenue', field: 'revenue' }];\n  rows = [{ month: 'Jan', revenue: 42 }, { month: 'Feb', revenue: 55 }];\n\n  onSelect(e: RaSelectEvent) {\n    console.log(e.category, e.value);\n  }\n}\n```\n\n```html\n<ra-chart type=\"column\"\n          category=\"month\"\n          [series]=\"series\"\n          [data]=\"rows\"\n          [zoom]=\"true\"\n          [height]=\"240\"\n          (select)=\"onSelect($event)\">\n</ra-chart>\n```\n\n> **`imports: [RaChartComponent]` is required.** Leave it out and Angular treats\n> `<ra-chart>` as an unknown element. Ionic projects usually include\n> `CUSTOM_ELEMENTS_SCHEMA`, which suppresses the error that would tell you —\n> so the tag appears in the DOM, `@Output()`s never fire, and you get a blank\n> box with a clean console. Since v1.0.2 the built-in custom element renders a\n> chart anyway (see below), but you lose the Angular outputs and inputs typing,\n> so add the import.\n\n### NgModule apps\n\n```ts\nimport { RaChartModule } from './shared/ra-chart';\n\n@NgModule({\n  imports: [RaChartModule]              // or RaChartModule.forRoot({ scriptUrl: '...' })\n})\nexport class SalesPageModule {}\n```\n\n### Calling methods\n\n```ts\n@ViewChild('chart') chart?: RaChartComponent;\n```\n\n```html\n<ra-chart #chart ...></ra-chart>\n```\n\n```ts\nthis.chart?.replay();\nthis.chart?.zoomTo(0.5, 1);\nthis.chart?.resetZoom();\nconst svg = this.chart?.toSVG();\nthis.chart?.instance?.setData(rows);            // raw engine handle\nthis.chart?.refresh(rows);                      // force-redraw from `rows`; see below\nthis.chart?.refresh({ series, data: rows });    // force-redraw from series/colors/…/rows too; see below\n```\n\n### Change detection\n\nThe component is `OnPush` and the engine runs **outside** Angular's zone, so touch scrubbing and animations never trigger change detection. Replace arrays instead of mutating them so `ngOnChanges` fires:\n\n```ts\nthis.rows = [...this.rows, newRow];    // ✅ detected\nthis.rows.push(newRow);                // ❌ ignored\n```\n\nA change to `data` alone animates the values in place. Changing any other input rebuilds the chart.\n\nIf you can't guarantee a new reference every time (data mutated by a library you don't control, updates arriving from outside Angular's zone — a native plugin callback is the usual case in a Cordova app), call `refresh()` right after the update instead of relying on `ngOnChanges`:\n\n```ts\n@ViewChild(RaChartComponent) chartRef!: RaChartComponent;\n\nthis.rows = [...this.rows, newRow];\nthis.chartRef.refresh(this.rows);   // redraws anyway — talks straight to the engine\n```\n\n**Always pass what changed into `refresh()` — do not call it bare and expect it to pick up a reassignment you just made.** `[data]=\"rows\"` only pushes the new `rows` reference into the component's own `data` field during Angular's *next* change-detection pass — that does not happen synchronously the instant you reassign `rows`, even from code running inside the zone. So:\n\n```ts\nthis.rows = newRows;\nthis.chartRef.refresh();        // ❌ may still read the OLD this.data — CD hasn't run yet\nthis.chartRef.refresh(newRows); // ✅ passes the value directly, no race\n```\n\nThis is the single most common reason `refresh()` \"does nothing\": it's called back-to-back with the reassignment in the same function, before Angular has had a chance to sync the binding. Passing the value directly sidesteps the timing question entirely — `refresh(x)` sets the field itself, then redraws.\n\n**One method covers both \"just the rows\" and \"the chart's shape changed too.\"** Pass a plain array and it's shorthand for `{ data: array }` — cheap, morphs values into the existing series/columns via the engine's `setData()`. Pass an object naming whatever else changed — `series`, `colors`, `category`, `legend`, `colorByPoint` — and `refresh()` automatically runs a full `update()` instead, so the new shape actually takes effect instead of leaving the old series/colours/legend in place with just the values moved:\n\n```ts\nthis.rows = newRows;\nthis.chartRef.refresh(newRows);                                // just rows — cheap path\n\nthis.series = newSeriesFromApi;   // series itself changed, not just the rows\nthis.rows = newRows;\nthis.chartRef.refresh({ series: newSeriesFromApi, data: newRows });  // shape changed — full rebuild\n```\n\nA concrete case: a chart bound to `[series]=\"Nationalseries\"` where `Nationalseries` is always the same fixed array (e.g. `[{ name: 'Noemp', field: 'noemp' }]`) only ever has its rows change — `refresh(newRows)` is enough. But if `Nationalseries` itself can be swapped out (a different metric from a different API call), pass it in the patch too: `refresh({ series: newSeriesFromApi, data: newRows })`.\n\nSee [No data showing](#no-data-showing--blank-chart) for the full diagnostic if a chart that worked once stops updating.\n\n---\n\n## Chart types\n\n| `type` | Shape | Notes |\n|---|---|---|\n| `column` | vertical bars | `stacked`, `fullStacked`, `depth` |\n| `bar` | horizontal bars | same options |\n| `line` | line | `smooth`, `stepped` |\n| `area` | filled line | `smooth`, `stepped` |\n| `lollipop` | stem + dot | good for sparse mobile series |\n| `pie` | pie | `semi`, `depth` |\n| `donut` | donut with live centre total | `semi`, `depth` |\n| `radar` | multi-axis polygon | |\n| `treemap` | squarified hierarchy | |\n| `sankey` | flow diagram | uses `from`/`to`/`value` rows |\n| `wordcloud` | spiral-packed words | |\n| `venn` | up to 3 sets | |\n| `candlestick` | OHLC | `upColor`, `downColor`, `zoom` |\n| `timeline` | events on an axis | accepts dates |\n| `gantt` | task bars with progress | accepts dates |\n| `scatter` | numeric X/Y | `xField` |\n| `bubble` | X/Y + size | `xField`, `sizeField` |\n| `funnel` | conversion stages | |\n| `pyramid` | proportional triangle | |\n| `gauge` | needle + bands | `max`, `bands` |\n| `heatmap` | matrix on a sequential ramp | |\n\n`RaChart.types` returns this list at runtime.\n\n---\n\n## Data shapes\n\nEverything takes an **array of plain objects**. `category` names the label field; `series` maps display names to value fields.\n\n**Most types** — `column`, `bar`, `line`, `area`, `lollipop`, `radar`, `heatmap`:\n\n```js\ncategory: 'month',\nseries: [{ name: 'Revenue', field: 'revenue' }, { name: 'Cost', field: 'cost' }],\ndata: [{ month: 'Jan', revenue: 42, cost: 30 }]\n```\n\n**Single-value types** — `pie`, `donut`, `treemap`, `wordcloud`, `venn`, `funnel`, `pyramid`, `gauge` (first series only):\n\n```js\ncategory: 'source',\nseries: [{ name: 'Share', field: 'value' }],\ndata: [{ source: 'Direct', value: 42 }]\n```\n\n**Candlestick:**\n\n```js\ncategory: 'day',\ndata: [{ day: '1', open: 102, high: 108, low: 100, close: 106 }]\n// rename columns: fields: { open: 'o', high: 'h', low: 'l', close: 'c' }\n```\n\n**Gantt** — dates or numbers, `progress` is optional (0–100):\n\n```js\ncategory: 'task',\ndata: [{ task: 'Design', start: '2026-01-20', end: '2026-03-01', progress: 100 }]\n// fields: { start: 'from', end: 'until', progress: 'pct' }\n```\n\n**Timeline:**\n\n```js\ncategory: 'milestone',\nseries: [{ name: 'Date', field: 'date' }],\ndata: [{ milestone: 'Launch', date: '2026-07-01' }]\n```\n\n**Sankey** — no `category`/`series`, just links:\n\n```js\ndata: [{ from: 'Solar', to: 'Grid', value: 30 }]\n// fields: { from: 'src', to: 'dst', value: 'amount' }\n```\n\n**Scatter / bubble:**\n\n```js\nxField: 'price', sizeField: 'reach',\nseries: [{ name: 'Brand A', field: 'rating' }],\ndata: [{ price: 12, rating: 3.8, reach: 20 }]\n```\n\n---\n\n## Options\n\n### Data\n\n| Option | Default | Description |\n|---|---|---|\n| `type` | `'column'` | Any type from the table above |\n| `data` | `[]` | Array of plain rows |\n| `category` | `'category'` | Row field used for labels |\n| `series` | `[]` | `[{ name, field }]` |\n| `colors` | `null` | Hex array; `null` picks the theme-aware palette |\n| `fields` | `null` | Rename columns per type (see above) |\n| `xField` / `sizeField` | `'x'` / `'size'` | Scatter and bubble |\n| `colorByPoint` | `false` | Colour each category separately in a single-series column/bar/lollipop |\n| `colorField` | `null` | Row property holding an explicit colour for that point |\n\n### Shape\n\n| Option | Default | Description |\n|---|---|---|\n| `sort` | `null` | Order the category axis: `'desc'` · `'asc'` (by bar height — the stacked total, or the first series when clustered) · `'label-asc'` · `'label-desc'` |\n| `sortControl` | `false` | Show a button cycling original → highest → lowest (XY types) |\n| `sortLabels` | `null` | `{ none, desc, asc }` wording for that button |\n| `categoryMax` | `0` | XY types: show only the first N sorted rows behind a \"+N more\" toggle next to the sort button. `0` shows every row |\n| `categoryMoreText` / `categoryLessText` | `'+{n} more'` / `'Show less'` | Toggle wording; `{n}` = hidden row count |\n| `stacked` | `false` | Stack column/bar series |\n| `fullStacked` | `false` | 100% stacked; tooltips switch to % |\n| `smooth` | `false` | Curved line/area |\n| `stepped` | `false` | Stepped line/area |\n| `semi` | `false` | Half-circle pie/donut |\n| `depth` | `0` | 3D extrusion px (column, bar, pie, donut) |\n\n### Scale\n\n| Option | Default | Description |\n|---|---|---|\n| `min` | `0` | Value-axis minimum |\n| `max` | `null` | Gauge maximum |\n| `bands` | `null` | Gauge zones `[{ from, to, color }]` |\n| `upColor` / `downColor` | green / red | Candlestick bull/bear |\n\n### Interaction\n\n| Option | Default | Description |\n|---|---|---|\n| `zoom` | `false` | `false` · `true` (slider + gestures) · `'pinch'` (gestures only, no slider) · `'slider'` |\n| `pinchZoom` | `true` | Pinch and pan when `zoom` is on |\n| `isolateGestures` | `true` | Keep chart gestures away from an ancestor `ion-slides` / Swiper |\n| `animateOnView` | `true` | Hold the entrance animation until the chart is scrolled into view |\n| `autoHeight` | `false` | Horizontal `bar`: grow tall enough for every row to stay legible |\n| `minBand` | `26` | Pixels per row when `autoHeight` is on |\n| `labelRotation` | `'auto'` | Category-label tilt. `'auto'` keeps labels flat while they fit, tilts to −35° when they would collide, −90° once columns get narrow. A number forces an angle; `0` forces flat |\n| `labelMaxLength` | `0` | Hard character cap on category labels; `0` disables. Full text stays in the tooltip |\n| `labelEllipsis` | `'…'` | Suffix appended when a label is shortened, e.g. `'....'` |\n| `legend` | `true` | Tappable; auto-hidden for single-series XY |\n| `legendMax` | `0` | Collapse the legend past N entries behind a \"+N more\" toggle |\n| `legendMoreText` / `legendLessText` | `'+{n} more'` / `'Show less'` | Toggle wording; `{n}` = hidden count |\n| `haptics` | `true` | Vibrate on touch-select |\n| `tooltipTrigger` | `'hover'` | `'hover'` reacts to the pointer; `'click'` selects only on click/tap and stays until dismissed |\n| `sheetTooltip` | `'auto'` | Dock tooltip to bottom; auto = touch device under 480px |\n| `tooltipHold` | `2600` | ms the tooltip stays after finger lift; `0` = until next tap |\n\n### Presentation\n\n| Option | Default | Description |\n|---|---|---|\n| `height` | `260` | Plot height px; legend and zoom bar sit outside it |\n| `emptyText` | `'No data'` | Caption shown when there is nothing to plot; `''` hides it |\n| `emptyIcon` | `null` | Empty-state icon: markup, an image path/URL, or `false` for none. `null` = built-in glyph |\n| `animation` | `{duration: 800, delay: 70}` | Entrance timing; data changes morph over 550 ms |\n\n### Empty state\n\nWhen `data` is empty — or the rows arrived but `series` is still empty — the chart draws a centred icon and caption instead of a bare pair of axes. It is the same for the engine, the `<ra-chart>` custom element and the Angular component, and it swaps back to a real plot the moment rows arrive.\n\n```js\nchart.setData([]);                    // → icon + \"No data\"\n```\n\n```html\n<ra-chart [data]=\"rows\" [series]=\"series\"\n          emptyText=\"No records found\"></ra-chart>\n```\n\n`emptyIcon` accepts whatever is convenient: inline markup, an emoji, or a path to your own asset (which gets wrapped in an `<img>` for you).\n\n```ts\nemptyIcon = '📭';                                  // an emoji\nemptyIcon = 'assets/img/no-data.svg';              // your own file\nemptyIcon = '<svg viewBox=\"0 0 24 24\">…</svg>';    // inline markup\nemptyIcon = false;                                 // caption only\n```\n\nThe built-in glyph is drawn in `currentColor` at `1em`, so restyling it needs no markup at all:\n\n```css\n.ra-chart__empty-icon { font-size: 40px; color: #cbd5e1; }\n.ra-chart__empty-text { color: #64748b; }\n```\n\nThe host element also fires `raChartEmpty` (Angular: `(empty)`) with `{ reason: 'no-data' | 'no-series' }`, in case the surrounding card wants to react — hiding a toolbar, say.\n\n---\n\n## Methods\n\n```js\nchart.setData(rows)              // morph to new values (rebuilds if the shape changed)\nchart.setType('donut')           // switch type; resets zoom and hidden series\nchart.update({ depth: 12 })      // merge options and rebuild\nchart.replay()                   // replay the entrance animation\nchart.resize()                   // re-measure (automatic on rotate/resize)\n\nchart.zoomTo(0.25, 0.75)         // fraction window\nchart.zoomTo(5, 10)              // integers = data index range\nchart.resetZoom()\nchart.getZoom()                  // { from, to, startIndex, endIndex }\n\nchart.toggleSeries(1)            // hide/show series or slice by index\nchart.toggleSeries(1, true)      // explicitly hide\n\nchart.toSVG()                    // SVG string, background included — for share/export\nchart.destroy()                  // remove listeners and observers\n```\n\nStatics: `RaChart.version`, `RaChart.defaults`, `RaChart.palette`, `RaChart.paletteDark`, `RaChart.types`, `RaChart.create(el, opts)`.\n\n---\n\n## Events\n\nThe engine dispatches **DOM CustomEvents** on the host element. The Angular component re-emits them as `@Output()`s.\n\n| DOM event | Angular output | Detail |\n|---|---|---|\n| `raChartReady` | `(ready)` | The chart instance |\n| `raChartSelect` | `(select)` | The tapped mark |\n| `raChartZoom` | `(zoomChange)` | `{ from, to, startIndex, endIndex }` |\n| `raChartToggle` | `(toggle)` | `{ index, name, hidden }` |\n| `raChartSort` | `(sortChange)` | `{ sort }` — `null` \\| `'desc'` \\| `'asc'` |\n| `raChartCategoryToggle` | `(categoryToggle)` | `{ expanded }` |\n| `raChartEmpty` | `(empty)` | `{ reason }` — `'no-data'` \\| `'no-series'` |\n\n```js\ndocument.getElementById('sales')\n  .addEventListener('raChartSelect', function (e) {\n    console.log(e.detail.category, e.detail.value);\n  });\n```\n\n`raChartSelect` detail varies by type — `category`/`series`/`value` for most, plus `ohlc` for candlestick, `start`/`end`/`progress` for gantt, `x`/`y`/`size` for scatter and bubble, `kind`/`from`/`to` for sankey. `row` carries the original data object.\n\n---\n\n## Mobile behaviour\n\n**Click-only tooltips.** `tooltipTrigger=\"click\"` stops anything reacting to the pointer merely passing over a mark. A click or tap selects it — pulling the slice out and dimming the rest — and it stays that way until you click the same mark again, click empty space, or click anywhere outside the chart. Each of those fully restores the chart, and no auto-hide timer runs, since the selection is deliberate.\n\n```html\n<ra-chart type=\"pie\" tooltipTrigger=\"click\" ...></ra-chart>\n```\n\n**Touch.** In the default `'hover'` mode, tap any mark to open its tooltip; drag without lifting to scrub across marks, each one snapping the tooltip along. The tooltip stays `tooltipHold` ms after you lift so it is readable, then fades. Tapping empty space dismisses it.\n\n**Smart zoom (no slider).** `zoom=\"pinch\"` drops the slider chrome and drives everything by gesture — pinch to zoom, one-finger drag to pan, wheel/trackpad to zoom about the cursor, double-tap (or double-click) to reset. Use `zoom=\"slider\"` for the bar alone, or `zoom` / `[zoom]=\"true\"` for both.\n\n```html\n<ra-chart type=\"column\" zoom=\"pinch\" ...></ra-chart>\n```\n\n**Pinch and pan.** With zoom enabled, two fingers on the plot zoom around the pinch midpoint and one finger pans once you are zoomed in. Panning only takes over the gesture after clearly horizontal movement, so vertical page scrolling still works. The range slider stays in sync.\n\n**Hit targets.** On coarse pointers, dots and points get invisible finger-sized hit rings, thin candlesticks get full-band hit columns, zoom handles grow to 26 px, and legend rows carry 44 px of padded height.\n\n**Haptics.** Selecting a mark or toggling a legend entry fires a light impact through Capacitor Haptics when available, falling back to `navigator.vibrate`, and silently doing nothing otherwise. Disable with `haptics: false`.\n\n**Bottom-sheet tooltips.** Under 480 px on touch devices the tooltip docks to the bottom edge instead of floating, so your thumb never covers the value.\n\n**Rotation.** A `ResizeObserver` on the host redraws after orientation changes, debounced 160 ms, without re-running entrance animations.\n\n**Animate on scroll.** On a page of stacked charts, only the ones on screen at load animate immediately. The rest draw flat and play their entrance the first time they are scrolled into view — once each, not on every pass. Nothing to wire up; it is on by default. Turn it off with `[animateOnView]=\"false\"` to animate everything at load. Where `IntersectionObserver` is unavailable the entrance simply runs immediately, so a chart is never left permanently static.\n\n**Entrance animations survive layout settling.** A container whose width resolves just after mount — `width: 100%` inside a card, an Ionic page finishing its transition — fires a resize almost immediately. Until v1.1.1 the resulting redraw was flat and swallowed the entrance animation before it was ever seen; a resize within the first 900 ms now replays it. Later resizes still redraw without animating.\n\n**Backgrounding.** Browsers freeze `requestAnimationFrame` while a page is hidden, which would otherwise leave a chart stuck mid-animation when the user switches apps. Charts built while hidden skip straight to their final frame, and a tween interrupted by backgrounding settles on its last frame instead of resuming half-drawn.\n\n**Reduced motion.** With `prefers-reduced-motion: reduce`, animations resolve to their final frame immediately.\n\n**Offline.** Everything renders locally — no network, no fonts, no tiles.\n\n---\n\n## Theming and dark mode\n\nEvery colour is a CSS custom property, and the engine reads the same variables when it paints SVG. Restyle from your Ionic theme file without touching JS:\n\n```css\n:root {\n  --ra-chart-surface: #ffffff;\n  --ra-chart-text:    #1f2937;\n  --ra-chart-label:   #898781;\n  --ra-chart-grid:    #e1e0d9;\n  --ra-chart-zoom-handle-border: #534ab7;\n}\n```\n\nDark mode activates automatically from `prefers-color-scheme`, Ionic 8's `.ion-palette-dark`, or a legacy `body.dark`. The series palette swaps to steps validated against a dark surface — it is a re-stepped palette, not an inverted one.\n\nForce a mode per chart with a class:\n\n```html\n<div class=\"ra-chart ra-chart--light\"></div>\n<div class=\"ra-chart ra-chart--dark\"></div>\n```\n\nThe default 8-colour palette is ordered so adjacent series stay distinguishable for colourblind viewers. If you pass your own `colors`, keep that in mind. Charts also carry non-colour cues — legends, direct labels, tooltips.\n\n### Long legends\n\nWith dozens of categories the key can run several times the height of the plot\nand push the chart off screen. `legendMax` keeps the first N entries and hides\nthe rest behind a toggle:\n\n```html\n<ra-chart type=\"pie\" category=\"job\" [legendMax]=\"8\"\n          legendMoreText=\"+{n} أخرى\" legendLessText=\"عرض أقل\"\n          [series]=\"series\" [data]=\"rows\"></ra-chart>\n```\n\nMeasured on 40 job titles: the legend drops from 694px to 151px, saving 543px\nof scroll. Hidden entries stay in the DOM, so expanding is instant and every\nentry still toggles its slice.\n\nWorth saying plainly though: a pie with 40 slices is unreadable whatever you do\nwith the legend — most slices are a sliver, and colour cannot identify 40\nthings. Collapsing the legend fixes the layout, not the chart. Prefer the\ntop-N approach below.\n\n**A pie or donut with several sub-1% slices bunched together** — since v1.11.0, their white separator no longer swallows them. A slice is widest at its outer edge, where its two straight sides are `2·R·sin(sweep/2)` apart; a fixed 2px stroke on a slice whose outer edge is only ~2px wide leaves nothing but white — visually a blank gap where several tiny categories actually sit. The stroke now shrinks for slices below that threshold so real fill colour always shows through; slices with a wide-enough outer edge keep the unchanged default 2px. Nothing to configure — it recalculates on every legend toggle too, so a slice that grows past the threshold (because you hid a bigger one) gets its full stroke back.\n\n### Many categories (departments, branches, cost centres)\n\nDozens of long-named categories cannot be read as vertical columns on a phone —\nat 50 categories each column is about 6px and most labels have to be dropped.\nA few workable answers, all using horizontal `bar` so names sit unrotated in the\nleft gutter:\n\n**Show them all, and let the page scroll.** `autoHeight` sizes the chart from the\nrow count instead of a fixed height:\n\n```html\n<ra-chart type=\"bar\" category=\"dept\" [autoHeight]=\"true\" [minBand]=\"28\"\n          [series]=\"series\" [data]=\"rows\"></ra-chart>\n```\n\nAdd `sort=\"desc\"` to rank the axis. Sorting is applied before any zoom window,\nso the window walks the ordered series, and your data array is never reordered:\n\n```html\n<ra-chart type=\"bar\" category=\"dept\" sort=\"desc\"\n          [series]=\"series\" [data]=\"rows\"></ra-chart>\n```\n\nTo let the reader choose, add a sort button instead. It cycles\noriginal → highest first → lowest first → original, keeps its choice through\nzooming, data updates and rotation, and fires `(sortChange)`:\n\n```html\n<ra-chart type=\"bar\" category=\"dept\" [sortControl]=\"true\"\n          [sortLabels]=\"{ none: 'ترتيب', desc: 'الأعلى أولاً', asc: 'الأدنى أولاً' }\"\n          [series]=\"series\" [data]=\"rows\"\n          (sortChange)=\"onSort($event)\"></ra-chart>\n```\n\nReturning to the original order is part of the cycle deliberately — a reader who\nsorts should always be able to get back to the sequence the data arrived in.\n\nRe-ordering is animated: each slot tweens from the value it held to the value\nits new rank puts there, so the bars visibly rise and fall into place rather\nthan snapping. Axis labels swap at once — interpolating text would be nonsense —\nso the motion carries the change and the labels confirm it. Reduced-motion\nsettings are honoured, and the animation works the same inside a zoom window.\n\n**Or collapse it behind a toggle, the same way `legendMax` collapses a long\nlegend.** `categoryMax` shows only the first N *sorted* rows and puts a\n\"+N more\" button next to the sort control — the reader stays on one screen\nby default, and the rest is one tap away instead of a scroll away:\n\n```html\n<ra-chart type=\"bar\" category=\"dept\" [autoHeight]=\"true\"\n          [sortControl]=\"true\" sort=\"desc\" [categoryMax]=\"10\"\n          categoryMoreText=\"+{n} أخرى\" categoryLessText=\"عرض أقل\"\n          [series]=\"series\" [data]=\"rows\"></ra-chart>\n```\n\nUnlike the legend's version this isn't a pure show/hide — the hidden rows were\nnever drawn (`autoHeight` sizes itself to however many bars actually exist), so\nexpanding rebuilds the plot and grows the chart to fit, then shrinks back on\ncollapse. Sorting while collapsed re-picks whichever N rows the *new* order\nputs on top, and the count on the button updates with it.\n\n**Or show the top N and roll up the rest into an \"Other\" bar**, which is the\nbetter choice when the reader needs the *total* to stay honest — `categoryMax`\nabove just hides the remaining rows, with nothing standing in for them until\n\"+N more\" is tapped:\n\n```ts\nget topDepartments() {\n  const n = 12;\n  const sorted = [...this.rows].sort((a, b) => b.count - a.count);\n  const head = sorted.slice(0, n), tail = sorted.slice(n);\n  if (tail.length) head.push({\n    dept: `Other (${tail.length})`,\n    count: tail.reduce((t, r) => t + r.count, 0)\n  });\n  return head;\n}\n```\n\n### A colour per bar\n\nColour normally means *series*, so a single-series column chart is one hue\nthroughout. Two ways to colour the individual bars instead:\n\n```html\n<!-- each category takes the next palette colour -->\n<ra-chart type=\"column\" category=\"month\" [colorByPoint]=\"true\"\n          [series]=\"series\" [data]=\"rows\"></ra-chart>\n\n<!-- or let the data decide, e.g. red below target, green above -->\n<ra-chart type=\"column\" category=\"month\" colorField=\"color\"\n          [series]=\"series\" [data]=\"rows\"></ra-chart>\n```\n\n```ts\nrows = [\n  { month: 'July',   count: 22, color: '#d03b3b' },\n  { month: 'August', count: 45, color: '#0ca30c' }\n];\n```\n\n`colorField` wins over `colorByPoint`, which in turn is ignored when there is\nmore than one series — there colour has to identify the series. Both work for\ncolumn, bar and lollipop.\n\n### Changing the colours of every chart\n\nThree ways, highest precedence first.\n\n**Per chart** — `colors` wins over everything:\n\n```html\n<ra-chart [colors]=\"['#534ab7', '#2196f3']\" ...></ra-chart>\n```\n\n**Globally in CSS** — the recommended way for Ionic. Set `--ra-chart-series-N`\nfrom 1 upward; the engine reads until the first one you leave unset. Because it\nis plain CSS, it is theme-scoped and switches automatically in dark mode:\n\n```css\n/* src/global.scss — applies to every chart in the app */\n.ra-chart {\n  --ra-chart-series-1: #534ab7;\n  --ra-chart-series-2: #2196f3;\n  --ra-chart-series-3: #f0334b;\n  --ra-chart-series-4: #eda100;\n}\n\n/* different steps for dark mode */\n.ion-palette-dark .ra-chart {\n  --ra-chart-series-1: #9085e9;\n  --ra-chart-series-2: #3987e5;\n  --ra-chart-series-3: #e66767;\n  --ra-chart-series-4: #c98500;\n}\n```\n\nScope it to recolour one section only — `.reports-page .ra-chart { … }`.\n\n**Globally in JS** — one call before any chart is created, e.g. in `main.ts`:\n\n```ts\ndeclare const RaChart: any;\n\nRaChart.setPalette(['#534ab7', '#2196f3', '#f0334b', '#eda100']);\nRaChart.setPalette(lightHexes, darkHexes);   // separate dark steps\nRaChart.resetPalette();                      // back to the built-in palette\n```\n\nColours cycle when a chart has more series than you supply. Charts that already\nexist keep their palette until they rebuild — call `replay()` on them, or set the\npalette before creating any chart.\n\n---\n\n## Recipes\n\n**Live data**\n\n```ts\nthis.sub = interval(5000).subscribe(() => {\n  this.rows = [...fetchLatest()];       // new array reference\n});\n```\n\n**Switch type from an ion-segment**\n\n```html\n<ion-segment [value]=\"type\" (ionChange)=\"type = $any($event.detail.value)\">\n  <ion-segment-button value=\"column\"><ion-label>Bars</ion-label></ion-segment-button>\n  <ion-segment-button value=\"donut\"><ion-label>Donut</ion-label></ion-segment-button>\n</ion-segment>\n\n<ra-chart [type]=\"type\" ...></ra-chart>\n```\n\n**Share a chart as an image**\n\n```ts\nimport { Share } from '@capacitor/share';\nimport { Filesystem, Directory } from '@capacitor/filesystem';\n\nasync share() {\n  const svg = this.chart!.toSVG();\n  const file = await Filesystem.writeFile({\n    path: 'chart.svg',\n    data: btoa(unescape(encodeURIComponent(svg))),\n    directory: Directory.Cache\n  });\n  await Share.share({ title: 'Chart', url: file.uri });\n}\n```\n\n**Brand colours**\n\n```ts\ncolors = ['#534ab7', '#2196f3', '#f0334b', '#eda100'];\n```\n\n```html\n<ra-chart [colors]=\"colors\" ...></ra-chart>\n```\n\n**Long series on a small screen** — show a window and let the user pinch:\n\n```ts\nready(chart: RaChartInstance) {\n  chart.zoomTo(Math.max(0, this.rows.length - 12), this.rows.length);\n}\n```\n\n```html\n<ra-chart [zoom]=\"true\" (ready)=\"ready($event)\" ...></ra-chart>\n```\n\n---\n\n## Troubleshooting\n\n### Install errors\n\n**`Failed to fetch plugin cordova-plugin-ra-chart via registry`** — the plugin is not published to npm. Install from the local folder instead, with a path (the leading `./` matters):\n\n```bash\ncordova plugin add ./ra-chart-cordova\n```\n\nRun it from your Cordova project root, and point at wherever the folder actually lives, e.g. `cordova plugin add C:/Users/You/Desktop/AI/ra-chart-cordova`.\n\n**`Cannot find plugin.xml for plugin \"...\"`** — the path is wrong or points one level off. It must be the folder that directly contains `plugin.xml`, not its parent and not `www/`.\n\n**`Plugin doesn't support this project's cordova version`** — this came from a version requirement that v1.0.1 removed. Update to v1.0.1, or delete the `<engines>` block from `plugin.xml`.\n\n**`npm ERR! code ENOLOCAL` / `Could not install from \"ra-chart-cordova\"`** — you ran `npm install` instead of `cordova plugin add`. This is a Cordova plugin, not an npm package.\n\n**Using Capacitor, not Cordova?** `cordova plugin add` does not exist there. Skip the plugin entirely and use Option B — copy the two files into `src/assets/` and use the `<ra-chart>` component. Nothing in raChart needs a native bridge.\n\n**In an Ionic/Angular app, prefer Option B over the plugin.** The Cordova route only sets `window.RaChart` after `deviceready`, which means charts do not render in `ionic serve` or in unit tests. Copying to `src/assets/` works everywhere.\n\n### No data showing / blank chart\n\nWork down this list — the first two cover almost every case.\n\n**1. Check the console.** Since v1.0.1 the engine reports naming mismatches itself:\n\n```\n[raChart] nothing to plot — series \"Revenue\" field \"revenue\" not found in the data.\nYour rows have: month, total. Check the `field`/`category` names against your data keys.\n```\n\nThat means `field: 'revenue'` does not match your rows, so every value read as 0. The `field` in `series` and the `category` string must match your data object keys **exactly**, including case. An API returning `Total` will not bind to `field: 'total'`.\n\n**2. `RaChartComponent` missing from `imports`** — the single most common cause in Ionic. Symptoms: the tag is in the DOM, no console error, and you had to add `display: block` yourself to see it. That last one is the giveaway — the component sets `:host { display: block }`, so if you needed to add it manually, the component was never attached. Add it to `imports: []`. Since v1.0.2 the custom element renders anyway and logs an actionable error, but the Angular `@Input()`/`@Output()` API only works with the import.\n\n**3. Async data with `<ra-chart>`** — fixed in v1.0.1. On v1.0.0 a chart whose `data` was still `[]` when the view initialised never built once the API responded, leaving it permanently blank. Update to v1.0.1. There is no workaround on v1.0.0 other than `*ngIf`-ing the chart until data arrives.\n\n**4. Mutating the array instead of replacing it.** The component is `OnPush`, so `push()` is invisible to it:\n\n```ts\nthis.rows = [...this.rows, row];   // ✅\nthis.rows.push(row);               // ❌ nothing redraws\n```\n\n**5. Values are strings.** `\"42\"` from JSON coerces fine, but `\"1,234\"` or `\"42%\"` becomes 0. Parse before binding.\n\n**6. Zero-width container.** A chart built inside a hidden tab, collapsed accordion or `display:none` parent measures 0 and draws nothing. Call `resize()` when it becomes visible.\n\n**7. Plain Cordova: building before `deviceready`.** `window.RaChart` does not exist until the plugin bootstraps. Wrap construction in a `deviceready` listener.\n\nTo silence the diagnostics in production: `RaChart.warnings = false;`\n\n### Runtime issues\n\n**\"Chart engine failed to load\"** — `ra-chart.js` is not on any path the loader tries. It attempts your `RA_CHART_SCRIPT_URL` first, then `assets/ra-chart/ra-chart.js`, `assets/js/ra-chart.js`, `assets/ra-chart.js`, and `plugins/cordova-plugin-ra-chart/www/ra-chart.js`. Confirm the file is in one of those, that `angular.json` copies `src/assets`, and check the browser Network tab for a 404.\n\n**Chart is blank but no error** — the host had zero width at build time (a hidden tab, a collapsed accordion). Call `chart.resize()` or the component's `resize()` when the container becomes visible.\n\n**Nothing happens when data changes, on a chart that showed correctly at first** — the chart worked once, then a later update to the same page didn't take. This is almost always the Angular wrapper not being told anything changed, not the chart itself: `chart.setData()` at the engine level always redraws correctly, including when passed the exact same array reference mutated in place — verified with 10 rapid in-place updates in a row, each landing on the exact target values. The wrapper only sees an update through `ngOnChanges`, which needs both of these to be true:\n\n1. **`data` becomes a *new* array reference.** Angular does `===` comparison — mutating in place never triggers it:\n   ```ts\n   this.rows.push(newRow);              // ❌ same reference, ngOnChanges never fires\n   this.rows = [...this.rows, newRow];  // ✅ new reference\n   ```\n2. **Something ran *inside* Angular's zone** to trigger a change-detection pass. `HttpClient` and `setTimeout`/DOM events are zone-patched and trigger this automatically. A few common sources are not: a Cordova/Capacitor native plugin callback, some WebSocket or third-party SDK clients, code explicitly run via `NgZone.runOutsideAngular`. Data can update correctly in your component field while Angular never notices.\n\nSince either gap fails silently — no error, no warning — call the component's `refresh()` right after your update as a fallback that talks straight to the engine and does not depend on Angular detecting anything. **Pass the new array in as the argument — do not call `refresh()` bare:**\n\n```ts\n@ViewChild(RaChartComponent) chartRef!: RaChartComponent;\n\n// after a mutation, or an update from outside the Angular zone:\nthis.rows = [...this.rows, newRow];\nthis.chartRef.refresh(this.rows);\n```\n\n**Why the argument matters, and the #1 reason `refresh()` \"does nothing\":** `refresh()` reads `this.data` — the chart component's *own* `@Input() data` field, not your page's `rows` directly. That field only gets the new reference during Angular's next change-detection pass, driven by `[data]=\"rows\"` in the template — it is not updated the instant you assign `this.rows = ...`, even from code that runs inside the zone. Call `refresh()` bare, synchronously right after the assignment, and it can run *before* that pass has happened, so it reads the stale `this.data` and redraws the same old values — which looks exactly like \"refresh doesn't work.\" Passing the value directly (`refresh(this.rows)`) sets `this.data` itself before reading it, so there is no window for this race at all.\n\nTo check which gap you're hitting: add `console.log('rows changed', this.rows)` right where you update the data. If it never logs, the update code itself isn't running (a different bug). If it logs but the chart doesn't move even after switching to `refresh(this.rows)`, that's a genuinely new issue — worth reporting with the exact lines around the update.\n\n**A bare array only refreshes `data`.** `refresh(rows)` is shorthand for `refresh({ data: rows })`, which calls the engine's `setData()` — deliberately cheap, morphing values into the series/columns that are already drawn. If the same update also changed `series`, `colors`, `category`, `legend` or `colorByPoint`, pass those in the same call instead of a bare array — `refresh()` detects the extra keys and runs a full `update()` automatically:\n\n```ts\nthis.series = newSeriesFromApi;  // series itself changed, not just the rows\nthis.rows = newRows;\nthis.chartRef.refresh({ series: newSeriesFromApi, data: newRows });\n```\n\nIf `series`/`colors`/`category` never change for a given chart — only the rows do — the plain-array form (`refresh(rows)`) is enough and cheaper; pass the object form only when the chart's shape itself can change between updates.\n\n**Chart gets visually stuck after zooming — stale gridlines, a bar that won't respond to taps** — fixed in v1.10.3. Releasing a pinch or a slider drag commits the zoom via two `requestAnimationFrame` callbacks (see above); with no fallback, a delayed or dropped frame — a WebView hiccup, the app backgrounded right as you release — left the chart stuck in the transform-only preview indefinitely: axis, gridlines and category labels never caught up to the new range, and any mark the preview transform had moved outside the visible area became permanently untappable, so its tooltip never showed. A 250ms timeout now forces the commit regardless of whether the animation frames arrive; whichever path gets there first wins and the other is cancelled, so nothing double-fires.\n\n**On `<ra-chart>` used as a plain custom element (no `RaChartComponent` import), an explicit empty result still logs the \"no data\" warning and draws nothing** — fixed in v1.12.1, one layer under the v1.12.0 fix above. The element's own empty check could not tell \"never given any data\" apart from \"given `data = []`, a legitimate empty result\" — both looked identical (`!rows || !rows.length`), so a properly-wired chart whose query matched nothing still got treated as a wiring mistake: warned about, and never shown its `emptyIcon`/`emptyText`. Fixed by tracking whether `data` was ever assigned at all (`_raDataSet`, set the moment the property setter runs, even to `[]`) and only treating \"no data, never told anything\" as the warning case; an explicit empty result now always renders the configured empty state, warning-free.\n\n**No entrance animation on iOS specifically, everything else fine** — fixed in v1.13.1. `_tween` used to check `document.hidden` up front and skip straight to the final frame if it read true, on the reasoning that `requestAnimationFrame` is frozen on a genuinely hidden page. Some iOS Cordova/Capacitor WKWebView builds report `document.hidden` incorrectly (or never schedule rAF for other reasons) while the page is plainly on screen — a check made in advance cannot tell that apart from the page actually being hidden, so it skipped real, working animation on exactly the devices where the signal lies. Fixed by no longer trusting the prediction: the entrance tween now always attempts a real `requestAnimationFrame`, racing it against a `duration + 300ms` timeout — the same pattern already used for the zoom-commit fallback (v1.10.3). If frames arrive normally, the timeout is a no-op; if nothing ever arrives (the page truly is hidden, or rAF is broken for any other reason), the timeout is what still lands the chart on its final frame instead of leaving it stuck at frame zero. `prefers-reduced-motion` is unaffected — that one stays a deliberate, unconditional, checked-up-front skip, since it is a real accessibility preference rather than a fact about whether the page can currently paint.\n\n**`colorByPoint` has no effect — every bar/point stays the series colour** — fixed in v1.13.1. `colorByPoint` was the one boolean option missing from the engine's string-to-boolean coercion list, so a value that arrived as the *string* `\"true\"` (a plain HTML attribute, a merged JSON config, or the custom element's own attribute path, rather than an Angular `[colorByPoint]=\"true\"` property binding, which always delivers a real boolean) never got converted — though since any non-empty string is truthy in JavaScript, `colorByPoint=\"false\"` was actually the more dangerous half of this: it silently turned the feature *on*. Added to the coercion list alongside every other boolean option.\n\n**A filter that matches nothing leaves the previous chart on screen** — fixed in v1.12.0. Two separate faults, both on the empty path. The `<ra-chart>` custom element bailed out of its render as soon as it saw no rows, without touching the chart already drawn — so the old bars stayed put indefinitely and the update looked like it had been ignored. And `setData()` read `.length` straight off its argument, so a `null` or `undefined` response (rather than `[]`) threw a `TypeError` that took the whole update down before it could redraw. Empty data now always redraws, into the [empty state](#empty-state); `null`/`undefined` normalise to `[]` instead of throwing.\n\n**A sorted stacked chart is visibly out of order — a taller bar sitting after a shorter one under \"Highest first\"** — fixed in v1.11.6. Sorting ordered rows by the first series' value alone, but a stacked bar's height is the sum of all its segments, so the two disagreed whenever a row with a small first segment had a large total. With `Appraiser` as the first series, a department with 3 appraisers and nothing else sorted ahead of one with 2 appraisers plus 2 appraisees — a bar of 3 drawn before a bar of 4. Stacked and full-stacked charts now order by what is actually drawn: the total of the visible segments (for full-stacked, where every bar is the same height, each row's share of its own total). Clustered charts are unchanged — side-by-side bars have no single height to order by, so the documented first-series rule still applies there. Switching a series off from the legend now re-sorts too, since hiding a segment changes every bar's height and the order has to follow.\n\n**Same wrong-category symptom on a pie or radar chart, after a same-length `setData()` update that reorders rows** — fixed in v1.11.4, same root cause and same fix approach as the sort case just above, found during an audit prompted by it. Pie's legend also went stale in the same situation (right colours/values, names shifted), and radar's spoke-axis labels stayed put entirely — a spoke's value correctly re-shaped the polygon, but the label naming that spoke kept whatever category used to sit there. Both now read live state (`geom.cats`/`geom.vals`) instead of a build-time snapshot, and the pie legend and radar axis labels are refreshed as part of the same-length update rather than only on a full rebuild.\n\n**Tooltip shows the wrong category after sorting, or after a data update that reorders rows** — fixed in v1.11.3. A sort (via `sortControl` or `sort`) and a same-length `setData()`/`refresh()` update both animate marks into their new values without a full rebuild, for performance — they update the axis/category state (`geom.cats`, `viewData`) in place rather than recreating every mark and its tooltip wiring. The tooltip handler for column/bar/line-point/lollipop marks was capturing `cats`/`data` once, at the original build, in a closure — so after a reorder the bar at a given slot correctly animated to its new value, but its tooltip (and the emitted `select` event's `category`/`row`) still named whatever category used to occupy that slot before the reorder. Reproduced directly: sorting a 4-bar chart desc moved the tallest bar into slot 1 with the correct height (30, matching \"Delta\"), but its tooltip still read \"Bravo\" (the category originally built into that slot). Fixed by having the handler read the category and row live off `self.geom.cats`/`self.viewData` — which sorting and setData's morph path do keep current — instead of the stale closure. Verified: after the fix, the same repro shows the correct category at every slot both after a sort and after a same-length `setData()` call that reorders rows.\n\n**Tapping a mark to open its tooltip does nothing (or flashes it open and instantly closes it) once the chart has been zoomed in** — fixed in v1.11.1. The single-finger touch handler that arms panning treated *any* touch on a zoomed-in chart as the start of a pan, whether or not the finger actually moved. Lifting off — even a plain tap with zero movement — always finalised that as a completed gesture and forced a real redraw, which hides the tooltip as a side effect of rebuilding. So a tap correctly opened the tooltip via the pointer handler, then a couple of frames later the pan handler's unconditional redraw closed it again. Panning now only \"arms\" once real horizontal movement is seen (mirroring the existing `dx` threshold already used to detect a genuine pan vs. a vertical scroll), so a stationary tap never triggers the forced redraw and the tooltip stays open; an actual pan gesture is unaffected. Reproduced directly: a simulated tap-and-release with no movement while zoomed in previously showed the tooltip then hid it one tick later (`tipOn: true` → `false`, one unnecessary `_rebuildBody()` call); after the fix the tooltip stays open with zero rebuilds, while a genuine drag still pans and commits correctly.\n\n**A brief hitch right as the pinch ends** — fixed in v1.2.1. The single commit redraw ran synchronously inside the touch-end handler, so lifting the finger blocked while the marks were rebuilt. The transformed view is already correct, so the redraw now waits two frames and lets the browser paint the settled gesture first; the release is immediate. Rapid successive pinches supersede one another and collapse to a single redraw.\n\n**Zoom feels laggy / stutters behind the finger** — resolved in v1.2.0. Gestures no longer rebuild the chart frame by frame. While a pinch, pan or slider drag is in progress the already-drawn marks are stretched with a single SVG transform — one attribute write per frame, composited by the GPU — and one real redraw runs when you let go. A 20-frame pinch costs **0** rebuilds during the gesture and **1** on release, instead of 20. Category labels hide during the gesture, since they would otherwise stretch with the marks and sit at stale positions.\n\nEarlier pacing work in v1.1.5. A redraw rebuilds every mark, so on a mid-range phone it can outlast a frame; firing one per animation frame then queued more work than the device could finish and the plot trailed the gesture. Redraws are now paced by how long the previous one actually took — measured on a simulated 25 ms device, 40 rapid gesture updates collapse to 2 redraws, and the chart still lands exactly on the final position. Fewer categories on screen also redraw faster, so `zoom` on a long series is cheaper than it looks.\n\n**Zoom handle looks cut off at the ends** — fixed in v1.1.5. The bar clipped its own contents, slicing the round handles at 0% and 100%. The track is now inset by half the handle's touch pad instead, so the full circle is always visible and nothing widens the chart.\n\n**Pinch zoom does nothing on a real device (but seems fine in tests)** — fixed in v1.1.4. Two causes, both invisible to synthetic touch events:\n\n1. The plot declared `touch-action: pan-y pinch-zoom`, which tells the browser *it* owns the pinch, so the gesture never reached the chart. It is now `pan-y` — vertical page scrolling still belongs to the browser, pinch and horizontal drags belong to the chart.\n2. Each zoom frame rebuilt the whole plot container. Touch events stay targeted at the element where `touchstart` happened, so from the second frame on the handler was measuring a detached node (`clientWidth` 0) while the finger moved over a new one. Redraws now reuse the container and swap only the drawing surface, so a continuous gesture stays intact.\n\n**Zooming the chart also swipes the Ionic slider / changes tab** — fixed in v1.1.3. A pinch or pan inside an `ion-slides` (Swiper) or segment strip used to bubble up, so the ancestor read it as a horizontal drag and moved to the next slide. Chart gestures — pinch, pan, slider-handle drags and tooltip scrubbing — now stop propagating once the chart has claimed them. Vertical page scrolling still works, because that is governed by `preventDefault`/`touch-action` rather than propagation. Set `[isolateGestures]=\"false\"` to restore the old behaviour.\n\n**Page will not scroll over the chart** — only happens with `zoom: true`; vertical scrolling is preserved and horizontal drags pan. Set `pinchZoom: false` to disable gesture capture entirely.\n\n**`labelRotation` (or any option) seems ignored** — fixed in v1.0.8. Options written as Angular attributes arrive as strings, and `labelRotation=\"0\"` / `\"-45\"` failed the internal number check and silently fell back to `'auto'`. Numeric and boolean options are now coerced, so both forms work:\n\n```html\n<ra-chart labelRotation=\"0\" ...></ra-chart>      <!-- string, now honoured -->\n<ra-chart [labelRotation]=\"0\" ...></ra-chart>    <!-- number, always worked -->\n```\n\nTo turn tilting off for Arabic, `labelRotation=\"0\"` keeps labels flat — pair it with `labelMaxLength` so they stay short enough not to be thinned out.\n\n**Options set with `[prop]=\"…\"` on `<ra-chart>` are ignored** — fixed in v1.1.0. When the Angular component is not imported, `<ra-chart>` falls back to the built-in custom element, and Angular's `[zoom]=\"true\"` / `[labelMaxLength]=\"5\"` set DOM *properties*. The element previously read scalar options as attributes only, so those bindings vanished. Every option now has both a property accessor and an attribute, and properties assigned before the element upgrades are re-applied. Importing `RaChartComponent` remains the better path — you get typed inputs and the `@Output()`s.\n\n**Zoom slider drags but the chart does not change** — fixed in v1.0.8. The redraw was deferred to `requestAnimationFrame`, which browsers freeze while a page is hidden or backgrounded, leaving the handle moving over a frozen plot. It now redraws synchronously in that case.\n\n**Arabic / Hebrew: tilted labels overlap the plot** — fixed in v1.0.6. SVG resolves `text-anchor` against the inline direction, so under `dir=\"rtl\"` an `\"end\"` anchor flips to the opposite side and tilted labels swept *upward into* the chart instead of down away from it; axis numbers drifted toward the plot for the same reason. The drawing surface is now pinned to `direction: ltr`, which fixes anchoring while the bidi algorithm still shapes each Arabic run right-to-left. Nothing to configure — RTL pages work as they are.\n\nRTL notes: the HTML legend follows the page direction, so series read right-to-left (correct mirroring). Arabic glyphs sit taller than Latin, and the bottom padding now accounts for that, so labels are never clipped.\n\n**Only every other category label appears** — improved in v1.3.1. Flat labels that did not fit were dropped wholesale, so twelve months showed as \"July · Septe… · Novem…\". Each label is now trimmed to its own column first, and labels are only thinned out when even a couple of characters plus the ellipsis will not fit. Note that a long `labelEllipsis` works against you here: `\"....\"` costs about as much width as three letters, so on a narrow axis prefer the default `\"…\"` or none.\n\n**Category labels overlap or run together** — fixed in v1.0.5. Long names like \"Material Status\" are wider than their column, and the old spacing logic assumed a fixed 32px per label so it never thinned them out. Labels now tilt to −35° automatically (−90° when columns get narrow), the bottom padding grows to fit, and anything still too long is ellipsised with the full text kept in an SVG `<title>`. Override with `labelRotation`:\n\n```html\n<ra-chart labelRotation=\"0\" ...></ra-chart>     <!-- force flat (thins labels out) -->\n<ra-chart [labelRotation]=\"-90\" ...></ra-chart> <!-- force vertical -->\n```\n\nPrefer short category names where you can — tilted labels cost up to a third of the chart height.\n\n**Shortening long labels.** `labelMaxLength` caps them at a character count and appends `labelEllipsis`:\n\n```html\n<ra-chart [labelMaxLength]=\"5\" labelEllipsis=\"....\" ...></ra-chart>\n<!-- \"Total Employees\" → \"Total....\" -->\n```\n\nThe cap is applied *before* layout, so shortening labels enough to fit lets them stay flat and hands the vertical space back to the plot — in a five-category chart that is 72px of bottom padding down to 24px. The full text is still shown in the tooltip and kept in an SVG `<title>`.\n\nSet `labelEllipsis` to `''` for a hard cut with no suffix. Both options apply to vertical category axes and to the left gutter of horizontal `bar` charts.\n\nThe ellipsis follows the script: it trails Latin text (`Total…`) and leads Arabic or Hebrew (`…العمالة`), so in both cases it renders where the reader finishes the word.\n\nCuts land on word boundaries where possible, which matters most in Arabic — a blind slice of `العمالة الوطنية` leaves the bare definite article (`العمالة ال…`), while backing up to the space gives `…العمالة`. A long first word still fills the space rather than collapsing, so nothing disappears.\n\n**Labels are cut off** — increase `height`, or shorten category labels. Horizontal `bar` and `gantt` cap the label gutter at about a third of the width; longer names are ellipsised with the full text in a `<title>`.\n\n**Legend reads \"RevenueTarget\" with no colour swatches** — the legend HTML is unstyled, meaning `ra-chart.css` did not reach it. Almost always because it was added to a component's `styleUrls` instead of `angular.json` → `styles`; view encapsulation scopes it to `[_ngcontent-*]` and the runtime-created legend has no such attribute. Fixed by default in v1.0.3 (the engine injects its own structural CSS), so updating the engine resolves it. To theme, move `ra-chart.css` to the global styles array.\n\n**Tooltip appears far from the tap on a tall bar chart** — fixed in v1.7.1. The docked tooltip anchors to the bottom edge of the chart, which is correct while the whole chart is on screen but lands hundreds of pixels below the tap once the chart is taller than the viewport — an `autoHeight` bar list, for instance. Charts taller than the viewport now float the tooltip beside the pointer instead, overriding even an explicit `sheetTooltip: true`, since an off-screen tooltip is a fault rather than a preference.\n\n**Tooltip is clipped inside `ion-card`** — the tooltip is absolutely positioned inside the chart element; give the card content enough padding, or set `sheetTooltip: true` to dock it.\n\n**No haptics on device** — install `@capacitor/haptics`, or rely on the `navigator.vibrate` fallback (Android only; iOS Safari does not support it).\n\n---\n\n## Browser and platform support\n\nAndroid WebView 60+ (Android 8+), iOS 12+, and all modern desktop browsers. `ResizeObserver` falls back to window resize/orientation listeners; `CustomEvent` falls back to `createEvent` for old WebViews.\n\n---\n\n## Tests\n\n`tests/` holds a regression suite: every case in it is a bug that reached production once, reduced to the smallest thing that reproduces it and labelled with the version that fixed it. Serve the repo and open it:\n\n```bash\npython -m http.server 8123\n```\n\nthen visit `http://localhost:8123/tests/`. Results render on the page and print to the console. Serve it rather than opening `file://` directly — some previewers cache a `file://` page as a snapshot and will quietly test a stale copy of `www/ra-chart.js`. (The page loads the engine and specs with a cache-buster for the same reason: a green suite reported against code you have already changed is worse than no suite at all.)\n\nNo framework, no build step, nothing to install — the suite is a page and two scripts, matching the engine's own zero-dependency constraint.\n\n**When you fix a bug, add a case.** Two conventions make the suite trustworthy:\n\n- **Never wait on animation.** Call `T.settle(chart)` after construction and after any data-changing call. `requestAnimationFrame` is not dependable in an automated context (a background tab, a headless run, a preview pane reporting `document.hidden` inconsistently), and a tween that silently stops partway leaves marks mid-interpolation — or, after an entrance, with no position at all. Asserting against that produces confident, completely fabricated results.\n- **Check that a new test can fail.** Revert the fix, confirm the test goes red and that nothing unrelated does, then restore it. A test that has never failed has not been shown to test anything. Each case here was verified that way.\n\n## Licence\n\nMIT — RemoteApps.\n","readmeFilename":"README.md"}