{"_id":"@aarongustafson/pull-to-refresh","_rev":"7-d2b092dc6e75faecd973ff3a16ef98ca","name":"@aarongustafson/pull-to-refresh","dist-tags":{"latest":"1.1.0"},"versions":{"0.0.2":{"name":"@aarongustafson/pull-to-refresh","version":"0.0.2","keywords":["html","custom element","web component"],"author":{"url":"https://www.aaron-gustafson.com/","name":"Aaron Gustafson","email":"aaron@easy-designs.net"},"license":"MIT","_id":"@aarongustafson/pull-to-refresh@0.0.2","maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"dist":{"shasum":"066f96c63441a7589ae32b90ac3ba3a5206406ec","tarball":"https://registry.npmjs.org/@aarongustafson/pull-to-refresh/-/pull-to-refresh-0.0.2.tgz","fileCount":8,"integrity":"sha512-XLr7lpHriiNS5hZUcLW2AZLy6RMLznHfLxo6zLFrVd/yx5mYXEbDJ4rsHykYKYHsjkagux4+oEIqnSa8iJsjqQ==","signatures":[{"sig":"MEUCIFj3Iyiu1OMFxvRNO+Am3CPdnlTQbF4+iyZvZVfxB39vAiEAkC+EV7e6YJuN8cRx1KP2aZmCQi6vyAXCYVZNxZrkUOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30617},"main":"index.js","type":"module","module":"pull-to-refresh.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./index.js"},"./define.js":{"import":"./define.js"},"./pull-to-refresh.js":{"import":"./pull-to-refresh.js"},"./custom-elements.json":"./custom-elements.json"},"gitHead":"682dd9d1a573fc2ec9592abbfdadadeb78214555","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier","test":"vitest","setup":"node scripts/setup.js","format":"npm run format:eslint && npm run format:prettier","test:ui":"vitest --ui","test:run":"vitest run","lint:eslint":"eslint .","format:eslint":"eslint . --fix","lint:prettier":"prettier \"**/*.js\" --check --ignore-path .gitignore","test:coverage":"vitest run --coverage","format:prettier":"prettier \"**/*.js\" --write --ignore-path .gitignore"},"_npmUser":{"name":"aarongustafson","email":"aaron@easy-designs.net"},"repository":{"url":"git+https://github.com/aarongustafson/pull-to-refresh.git","type":"git"},"_npmVersion":"10.8.2","description":"Refreshes the current document or runs a specific JavaScript function when pulling down on the page","directories":{},"_nodeVersion":"20.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"eslint":"^9.39.1","vitest":"^4.0.10","prettier":"^3.6.2","happy-dom":"^20.0.10","@vitest/ui":"^4.0.10","@vitest/coverage-v8":"^4.0.10","@testing-library/dom":"^10.4.1","@open-wc/eslint-config":"^13.0.0","eslint-config-prettier":"^10.1.8","@testing-library/user-event":"^14.6.1"},"_npmOperationalInternal":{"tmp":"tmp/pull-to-refresh_0.0.2_1764455247767_0.019390611698922644","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@aarongustafson/pull-to-refresh","version":"0.0.3","keywords":["html","custom element","web component"],"author":{"url":"https://www.aaron-gustafson.com/","name":"Aaron Gustafson","email":"aaron@easy-designs.net"},"license":"MIT","_id":"@aarongustafson/pull-to-refresh@0.0.3","maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"dist":{"shasum":"16aa39572edcadfa43876b774d64d4f3c5c4d5db","tarball":"https://registry.npmjs.org/@aarongustafson/pull-to-refresh/-/pull-to-refresh-0.0.3.tgz","fileCount":8,"integrity":"sha512-mq/f37WTVAHkSLWMrU5C4dep4ni9F/IIiUOSVud3Ksx6D2g/+pHfBxRmErx/KaF5NkzLt5KLtbfv7mPRaRVBdw==","signatures":[{"sig":"MEQCIFWAXJN7aQLHO7p8l6yDgmh5fsaQf1QJiodP1fDTD3VPAiAThgNP54pXN7h+4F+0URJDi5IRCldGnCDOwA2ATo2G1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aarongustafson%2fpull-to-refresh@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30666},"main":"index.js","type":"module","module":"pull-to-refresh.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./index.js"},"./define.js":{"import":"./define.js"},"./pull-to-refresh.js":{"import":"./pull-to-refresh.js"},"./custom-elements.json":"./custom-elements.json"},"gitHead":"5b8aa6ac56615d75f669bbb420f82eb1545d50f8","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier","test":"vitest","setup":"node scripts/setup.js","format":"npm run format:eslint && npm run format:prettier","test:ui":"vitest --ui","test:run":"vitest run","lint:eslint":"eslint .","format:eslint":"eslint . --fix","lint:prettier":"prettier \"**/*.js\" --check --ignore-path .gitignore","test:coverage":"vitest run --coverage","format:prettier":"prettier \"**/*.js\" --write --ignore-path .gitignore"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82fd0a17-8fcc-4e74-bb83-81e054cd6fb8"}},"repository":{"url":"git+https://github.com/aarongustafson/pull-to-refresh.git","type":"git"},"_npmVersion":"11.6.4","description":"Refreshes the current document or runs a specific JavaScript function when pulling down on the page","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"eslint":"^9.39.1","vitest":"^4.0.10","prettier":"^3.6.2","happy-dom":"^20.0.10","@vitest/ui":"^4.0.10","@vitest/coverage-v8":"^4.0.10","@testing-library/dom":"^10.4.1","@open-wc/eslint-config":"^13.0.0","eslint-config-prettier":"^10.1.8","@testing-library/user-event":"^14.6.1"},"_npmOperationalInternal":{"tmp":"tmp/pull-to-refresh_0.0.3_1764455445324_0.4796357352154941","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@aarongustafson/pull-to-refresh","version":"0.0.4","keywords":["html","custom element","web component"],"author":{"url":"https://www.aaron-gustafson.com/","name":"Aaron Gustafson","email":"aaron@easy-designs.net"},"license":"MIT","_id":"@aarongustafson/pull-to-refresh@0.0.4","maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"dist":{"shasum":"c04c3f0f749ba28953b1d9e15b808ea84be63d29","tarball":"https://registry.npmjs.org/@aarongustafson/pull-to-refresh/-/pull-to-refresh-0.0.4.tgz","fileCount":8,"integrity":"sha512-4U9Yq1CI1oDZLZvlQHVn4i6ZLz/J+zcY9ORtUvQqpiRq2A9a7SeoysP35Iig1uTAYzfjZANdpXRcN949jHKCng==","signatures":[{"sig":"MEUCIHbRqazAkPB0XIXu/yj7xajh+8Xqfg16rDGnIn+VLQu3AiEAmn5QZS2stHsf6uBxpa/j80erVYlwrKUbwCv04gxMDpg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aarongustafson%2fpull-to-refresh@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30774},"main":"index.js","type":"module","module":"pull-to-refresh.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./index.js"},"./define.js":{"import":"./define.js"},"./pull-to-refresh.js":{"import":"./pull-to-refresh.js"},"./custom-elements.json":"./custom-elements.json"},"gitHead":"3e4e1d17bbf63d8a3241df6cd7465be93925197d","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier","test":"vitest","setup":"node scripts/setup.js","format":"npm run format:eslint && npm run format:prettier","test:ui":"vitest --ui","test:run":"vitest run","lint:eslint":"eslint .","format:eslint":"eslint . --fix","lint:prettier":"prettier \"**/*.js\" --check --ignore-path .gitignore","test:coverage":"vitest run --coverage","format:prettier":"prettier \"**/*.js\" --write --ignore-path .gitignore"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82fd0a17-8fcc-4e74-bb83-81e054cd6fb8"}},"repository":{"url":"git+https://github.com/aarongustafson/pull-to-refresh.git","type":"git"},"_npmVersion":"11.6.4","description":"Refreshes the current document or runs a specific JavaScript function when pulling down on the page","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"eslint":"^9.39.1","vitest":"^4.0.10","prettier":"^3.6.2","happy-dom":"^20.0.10","@vitest/ui":"^4.0.10","@vitest/coverage-v8":"^4.0.10","@testing-library/dom":"^10.4.1","@open-wc/eslint-config":"^13.0.0","eslint-config-prettier":"^10.1.8","@testing-library/user-event":"^14.6.1"},"_npmOperationalInternal":{"tmp":"tmp/pull-to-refresh_0.0.4_1764518961614_0.29257110935191677","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@aarongustafson/pull-to-refresh","version":"0.0.5","keywords":["html","custom element","web component"],"author":{"url":"https://www.aaron-gustafson.com/","name":"Aaron Gustafson","email":"aaron@easy-designs.net"},"license":"MIT","_id":"@aarongustafson/pull-to-refresh@0.0.5","maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"dist":{"shasum":"8c9be974c419c241d84fc0047d4c42a9943d7815","tarball":"https://registry.npmjs.org/@aarongustafson/pull-to-refresh/-/pull-to-refresh-0.0.5.tgz","fileCount":8,"integrity":"sha512-J9N0kVqSq++0egW7eW7RaqNgpLI+cncj/1ITrx7eX2boCZNZFsjlOjHRsIlfHir0OCDNV/bshDjYoMPTKVfJyg==","signatures":[{"sig":"MEQCIBn8ZZhI8WGMB7pJ2rstQQ5YRzfnjpavZF0rfybZTtgCAiAOx676H1oUPNDtAPjeF/HR4ggunVbFpfR6PiKprws8jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aarongustafson%2fpull-to-refresh@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36112},"main":"index.js","type":"module","module":"pull-to-refresh.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./index.js"},"./define.js":{"import":"./define.js"},"./pull-to-refresh.js":{"import":"./pull-to-refresh.js"},"./custom-elements.json":"./custom-elements.json"},"gitHead":"61e921c020f70bd3ceddae8df5b3a857502d4fa9","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier","test":"vitest","setup":"node scripts/setup.js","format":"npm run format:eslint && npm run format:prettier","test:ui":"vitest --ui","test:run":"vitest run","lint:eslint":"eslint .","format:eslint":"eslint . --fix","lint:prettier":"prettier \"**/*.js\" --check --ignore-path .gitignore","test:coverage":"vitest run --coverage","format:prettier":"prettier \"**/*.js\" --write --ignore-path .gitignore"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82fd0a17-8fcc-4e74-bb83-81e054cd6fb8"}},"repository":{"url":"git+https://github.com/aarongustafson/pull-to-refresh.git","type":"git"},"_npmVersion":"11.6.4","description":"Web component that enables pull-to-refresh functionality.","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"eslint":"^9.39.1","vitest":"^4.0.10","prettier":"^3.6.2","happy-dom":"^20.0.10","@vitest/ui":"^4.0.10","@vitest/coverage-v8":"^4.0.10","@testing-library/dom":"^10.4.1","@open-wc/eslint-config":"^13.0.0","eslint-config-prettier":"^10.1.8","@testing-library/user-event":"^14.6.1"},"_npmOperationalInternal":{"tmp":"tmp/pull-to-refresh_0.0.5_1764519421558_0.5428166041051625","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@aarongustafson/pull-to-refresh","version":"1.0.0","keywords":["html","custom element","web component"],"author":{"url":"https://www.aaron-gustafson.com/","name":"Aaron Gustafson","email":"aaron@easy-designs.net"},"license":"MIT","_id":"@aarongustafson/pull-to-refresh@1.0.0","maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"dist":{"shasum":"d3f3e22fd69b6207f113be143cd86f7a5d70407f","tarball":"https://registry.npmjs.org/@aarongustafson/pull-to-refresh/-/pull-to-refresh-1.0.0.tgz","fileCount":8,"integrity":"sha512-0ZNgqod9s3SasbywV1W3EeILWmOFCHKuPseE4fJJKqLHT+zz6YFmJPFDHpGwDE5xLUNLeD2Xo3igLRhaour7Yg==","signatures":[{"sig":"MEUCIQDe17x3IEspTErZbze9iQd+j2QhVq80gvuhQeFsfVQf0QIgEGMNGy2S2yorOzEd1sgMgBL+d3powmcnKC4zaG7oWiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aarongustafson%2fpull-to-refresh@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36663},"main":"index.js","type":"module","module":"pull-to-refresh.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./index.js"},"./define.js":{"import":"./define.js"},"./pull-to-refresh.js":{"import":"./pull-to-refresh.js"},"./custom-elements.json":"./custom-elements.json"},"gitHead":"8023c5fc51e41109442dd92ae900de18bfe3d251","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier","test":"vitest","setup":"node scripts/setup.js","format":"npm run format:eslint && npm run format:prettier","test:ui":"vitest --ui","test:run":"vitest run","lint:eslint":"eslint .","format:eslint":"eslint . --fix","lint:prettier":"prettier \"**/*.js\" --check --ignore-path .gitignore","test:coverage":"vitest run --coverage","format:prettier":"prettier \"**/*.js\" --write --ignore-path .gitignore"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82fd0a17-8fcc-4e74-bb83-81e054cd6fb8"}},"repository":{"url":"git+https://github.com/aarongustafson/pull-to-refresh.git","type":"git"},"_npmVersion":"11.6.4","description":"Web component that enables pull-to-refresh functionality.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"eslint":"^9.39.1","vitest":"^4.0.10","prettier":"^3.6.2","happy-dom":"^20.0.10","@vitest/ui":"^4.0.10","@vitest/coverage-v8":"^4.0.10","@testing-library/dom":"^10.4.1","@open-wc/eslint-config":"^13.0.0","eslint-config-prettier":"^10.1.8","@testing-library/user-event":"^14.6.1"},"_npmOperationalInternal":{"tmp":"tmp/pull-to-refresh_1.0.0_1765213690681_0.15521455814996488","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aarongustafson/pull-to-refresh","version":"1.0.1","keywords":["html","custom element","web component"],"author":{"url":"https://www.aaron-gustafson.com/","name":"Aaron Gustafson","email":"aaron@easy-designs.net"},"license":"MIT","_id":"@aarongustafson/pull-to-refresh@1.0.1","maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"dist":{"shasum":"626636f9cbd57d4dd0c407722292d2b85adb12f5","tarball":"https://registry.npmjs.org/@aarongustafson/pull-to-refresh/-/pull-to-refresh-1.0.1.tgz","fileCount":8,"integrity":"sha512-K7iNG1epKsM4H+BNPmMHcSh2qTdblAPwYbNI+PYue31Fr9gmOg/AefmVLv4VIcRvEmN6t6hIdIIHpMvFJgJFNg==","signatures":[{"sig":"MEQCIA5Aj2zQApn4VfuXAVyPthWhLGn0xlGTqk0+gyclPFOfAiACryS1I+3IXJoQSk+zIWPB1fHzgUTKt8JdHelVVADwOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aarongustafson%2fpull-to-refresh@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36179},"main":"index.js","type":"module","module":"pull-to-refresh.js","engines":{"node":">=14.0.0"},"exports":{".":{"import":"./index.js"},"./define.js":{"import":"./define.js"},"./pull-to-refresh.js":{"import":"./pull-to-refresh.js"},"./custom-elements.json":"./custom-elements.json"},"gitHead":"d47f6c5b84ce7e405e3da2847657b926d0662a79","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier","test":"vitest","setup":"node scripts/setup.js","format":"npm run format:eslint && npm run format:prettier","test:ui":"vitest --ui","version":"node scripts/update-demo-versions.js && git add demo/esm.html","test:run":"vitest run","lint:eslint":"eslint .","format:eslint":"eslint . --fix","lint:prettier":"prettier \"**/*.js\" --check --ignore-path .gitignore","test:coverage":"vitest run --coverage","format:prettier":"prettier \"**/*.js\" --write --ignore-path .gitignore"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82fd0a17-8fcc-4e74-bb83-81e054cd6fb8"}},"repository":{"url":"git+https://github.com/aarongustafson/pull-to-refresh.git","type":"git"},"_npmVersion":"11.6.4","description":"Web component that enables pull-to-refresh functionality.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"customElements":"custom-elements.json","devDependencies":{"eslint":"^9.39.1","vitest":"^4.0.10","prettier":"^3.6.2","happy-dom":"^20.0.10","@vitest/ui":"^4.0.10","@vitest/coverage-v8":"^4.0.10","@testing-library/dom":"^10.4.1","@open-wc/eslint-config":"^13.0.0","eslint-config-prettier":"^10.1.8","@testing-library/user-event":"^14.6.1"},"_npmOperationalInternal":{"tmp":"tmp/pull-to-refresh_1.0.1_1765308579150_0.13470928161438933","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aarongustafson/pull-to-refresh","version":"1.1.0","description":"Web component that enables pull-to-refresh functionality.","keywords":["html","custom element","web component"],"author":{"name":"Aaron Gustafson","email":"aaron@easy-designs.net","url":"https://www.aaron-gustafson.com/"},"license":"MIT","homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","repository":{"type":"git","url":"git+https://github.com/aarongustafson/pull-to-refresh.git"},"bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"type":"module","main":"index.js","module":"pull-to-refresh.js","types":"pull-to-refresh.d.ts","customElements":"custom-elements.json","exports":{".":{"import":"./index.js","types":"./pull-to-refresh.d.ts"},"./pull-to-refresh.js":{"import":"./pull-to-refresh.js","types":"./pull-to-refresh.d.ts"},"./define.js":{"import":"./define.js"},"./custom-elements.json":"./custom-elements.json"},"engines":{"node":">=20.0.0"},"scripts":{"setup":"node scripts/setup.js","test":"vitest","test:ui":"vitest --ui","test:run":"vitest run","test:coverage":"vitest run --coverage","lint":"npm run lint:eslint && npm run lint:prettier","format":"npm run format:eslint && npm run format:prettier","lint:eslint":"eslint .","format:eslint":"eslint . --fix","lint:prettier":"prettier \"**/*.js\" --check --ignore-path .gitignore","format:prettier":"prettier \"**/*.js\" --write --ignore-path .gitignore","version":"node scripts/update-demo-versions.js && git add demo/esm.html","postversion":"git push --follow-tags"},"devDependencies":{"@open-wc/eslint-config":"^13.0.0","@testing-library/dom":"^10.4.1","@testing-library/user-event":"^14.6.1","@vitest/coverage-v8":"^4.0.10","@vitest/ui":"^4.0.10","eslint":"^9.39.1","eslint-config-prettier":"^10.1.8","happy-dom":"^20.0.10","prettier":"^3.6.2","vitest":"^4.0.10"},"publishConfig":{"access":"public"},"gitHead":"96f7ca1c16b22317d8e4c6a788fe9e44ace1905c","_id":"@aarongustafson/pull-to-refresh@1.1.0","_nodeVersion":"20.19.6","_npmVersion":"11.7.0","dist":{"integrity":"sha512-9KfpXfN6v44N/NxPX1weBKgTnBALs+2WL9jM1PUfst2wYsgcrXD6FG4vQcyINvKNjKb7aj6LE/a/Qda8mM2ujA==","shasum":"29b0acd24b1f0f5cc1cfa6e3d5dbc709ee980f97","tarball":"https://registry.npmjs.org/@aarongustafson/pull-to-refresh/-/pull-to-refresh-1.1.0.tgz","fileCount":9,"unpackedSize":41053,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aarongustafson%2fpull-to-refresh@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDTlXIMKn6RcTyJ+WeVcjDlE0uHVgT0wBbU4ld832AHCAIhAN/j5PVQ7UGz/Yr6H5E59XGmNKdeqLkjEc8m95mTa2cb"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:82fd0a17-8fcc-4e74-bb83-81e054cd6fb8"}},"directories":{},"maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pull-to-refresh_1.1.0_1765688363108_0.8461788149580338"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-29T22:27:27.701Z","modified":"2025-12-14T04:59:23.645Z","0.0.2":"2025-11-29T22:27:27.954Z","0.0.3":"2025-11-29T22:30:45.524Z","0.0.4":"2025-11-30T16:09:21.811Z","0.0.5":"2025-11-30T16:17:01.762Z","1.0.0":"2025-12-08T17:08:10.852Z","1.0.1":"2025-12-09T19:29:39.294Z","1.1.0":"2025-12-14T04:59:23.270Z"},"bugs":{"url":"https://github.com/aarongustafson/pull-to-refresh/issues"},"author":{"name":"Aaron Gustafson","email":"aaron@easy-designs.net","url":"https://www.aaron-gustafson.com/"},"license":"MIT","homepage":"https://github.com/aarongustafson/pull-to-refresh#readme","keywords":["html","custom element","web component"],"repository":{"type":"git","url":"git+https://github.com/aarongustafson/pull-to-refresh.git"},"description":"Web component that enables pull-to-refresh functionality.","maintainers":[{"name":"aarongustafson","email":"aaron@easy-designs.net"}],"readme":"# Pull to Refresh Web Component\n\n[![npm version](https://img.shields.io/npm/v/@aarongustafson/pull-to-refresh.svg)](https://www.npmjs.com/package/@aarongustafson/pull-to-refresh)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/aarongustafson/pull-to-refresh/ci.yml?branch=main)](https://github.com/aarongustafson/pull-to-refresh/actions)\n\nA lightweight, customizable Web Component that adds pull-to-refresh functionality to your web applications. Perfect for mobile-first experiences and progressive web apps.\n\n## Demo\n\n[Live Demo](https://aarongustafson.github.io/pull-to-refresh/demo/) ([Source](./demo/index.html))\n\n### Additional Demos\n\n- [esm.sh CDN](https://aarongustafson.github.io/pull-to-refresh/demo/esm.html) ([Source](./demo/esm.html)) - Loading from esm.sh\n- [unpkg CDN](https://aarongustafson.github.io/pull-to-refresh/demo/unpkg.html) ([Source](./demo/unpkg.html)) - Loading from unpkg\n\n## Features\n\n- **Touch-optimized**: Smooth pull gesture with momentum and feedback\n- **Customizable**: Adjust threshold, text, and styling via attributes and CSS custom properties\n- **Event-driven**: Rich event API for complete control over the refresh lifecycle\n- **Accessible**: Semantic HTML and ARIA-friendly\n- **Framework-agnostic**: Works with any framework or vanilla JavaScript\n- **Lightweight**: No dependencies, just native Web Components\n- **Shadow DOM**: Encapsulated styles that won't leak\n- **TypeScript-ready**: Bundled definitions for editors and build tooling\n\n## TypeScript & Framework Support\n\n- Bundled `.d.ts` files describe both `PullToRefreshElement` and `definePullToRefresh`, so modern editors provide autocomplete without extra config.\n- Threshold/text/disabled props now reflect to attributes, keeping declarative templates in sync with imperative code.\n- `_upgradeProperty` preserves pre-upgrade assignments—handy for SSR, hydration, and framework wrappers.\n- Global `HTMLElementTagNameMap` augmentation lets TypeScript understand `document.querySelector('pull-to-refresh')` out of the box.\n\n## Quick Start\n\n### Installation\n\n```bash\nnpm install @aarongustafson/pull-to-refresh\n```\n\n### Usage\n\n**Option 1: Manual registration**\n```javascript\nimport { PullToRefreshElement } from '@aarongustafson/pull-to-refresh';\n\ncustomElements.define('pull-to-refresh', PullToRefreshElement);\n```\n\n**Option 2: Auto-define (browser environments only)**\n```javascript\nimport '@aarongustafson/pull-to-refresh/define.js';\n// Registers <pull-to-refresh> when customElements is available\n```\n\nPrefer to control when registration happens? Call the helper directly:\n\n```javascript\nimport { definePullToRefresh } from '@aarongustafson/pull-to-refresh/define.js';\n\ndefinePullToRefresh();\n```\n\nYou can also include the guarded script from HTML:\n\n```html\n<script src=\"./node_modules/@aarongustafson/pull-to-refresh/define.js\" type=\"module\"></script>\n```\n\n### Basic Example\n\n```html\n<pull-to-refresh>\n  <div class=\"content\">\n    <h1>My Content</h1>\n    <p>Pull down from the top to refresh!</p>\n  </div>\n</pull-to-refresh>\n\n<script type=\"module\">\n  import '@aarongustafson/pull-to-refresh';\n\n  const ptr = document.querySelector('pull-to-refresh');\n\n  ptr.addEventListener('ptr:refresh', (e) => {\n    // Perform your refresh logic (fetch data, etc.)\n    fetch('/api/data')\n      .then(response => response.json())\n      .then(data => {\n        // Update your content\n        updateContent(data);\n        // Signal completion\n        e.detail.complete();\n      });\n  });\n</script>\n```\n\n## API\n\n### Attributes\n\n| Attribute | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `threshold` | number | `80` | Distance in pixels to trigger refresh |\n| `indicator-text` | string | localized | Text shown when pulling down |\n| `release-text` | string | localized | Text shown when ready to release |\n| `refreshing-text` | string | localized | Text shown while refreshing |\n| `lang` | string | auto-detected | Language code for localization |\n| `disabled` | boolean | `false` | Disables pull-to-refresh functionality |\n| `disable-selection` | boolean | `false` | Prevents text selection during pull gesture |\n\n**Note:** The text attributes use automatic localization based on the `lang` attribute or auto-detection. See [Localization](#-localization-i18n) below.\n\n### Properties\n\nAll attributes are also available as properties:\n\n```javascript\nconst ptr = document.querySelector('pull-to-refresh');\nptr.threshold = 120;\nptr.indicatorText = 'Swipe down';\nptr.disabled = true;\n```\n\n### Events\n\n| Event | Detail | Description |\n|-------|--------|-------------|\n| `ptr:pull-start` | `{}` | Fired when pull gesture starts |\n| `ptr:pull-move` | `{ distance: number }` | Fired during pull gesture |\n| `ptr:pull-end` | `{}` | Fired when pull gesture ends |\n| `ptr:refresh` | `{ complete: Function }` | Fired when refresh is triggered |\n| `ptr:refresh-complete` | `{}` | Fired when refresh completes |\n\n**Important**: Call `event.detail.complete()` in your `ptr:refresh` handler to signal completion:\n\n```javascript\nptr.addEventListener('ptr:refresh', (e) => {\n  doAsyncWork().then(() => {\n    e.detail.complete(); // Call this when done\n  });\n});\n```\n\nIf you don't call `complete()`, the component will auto-complete after 2 seconds.\n\n### Slots\n\n| Slot | Description |\n|------|-------------|\n| (default) | Your scrollable content |\n| `indicator` | Optional custom indicator element |\n\n### CSS Custom Properties\n\n| Property | Default | Description |\n|----------|---------|-------------|\n| `--ptr-indicator-height` | `3.125rem` | Height of the indicator area |\n| `--ptr-indicator-bg` | `ButtonFace` | Background color of indicator |\n| `--ptr-indicator-color` | `ButtonText` | Text color of indicator |\n| `--ptr-indicator-font-size` | `0.875rem` | Font size of indicator text |\n| `--ptr-transition-duration` | `0.2s` | Duration of indicator transitions |\n\n### Methods\n\n| Method | Description |\n|--------|-------------|\n| `completeRefresh()` | Manually complete the refresh (alternative to calling `event.detail.complete()`) |\n\n## Examples\n\n### Custom Threshold\n\n```html\n<pull-to-refresh threshold=\"120\">\n  <div>Content here</div>\n</pull-to-refresh>\n```\n\n### Localization\n\nThe component automatically detects the language and displays localized text:\n\n```html\n<!-- Spanish -->\n<pull-to-refresh lang=\"es\">\n  <div>Contenido aquí</div>\n</pull-to-refresh>\n\n<!-- French -->\n<pull-to-refresh lang=\"fr\">\n  <div>Contenu ici</div>\n</pull-to-refresh>\n\n<!-- Japanese -->\n<pull-to-refresh lang=\"ja\">\n  <div>ここにコンテンツ</div>\n</pull-to-refresh>\n```\n\nThe component supports 16 languages with automatic fallback to English. Language is detected from:\n1. The element's `lang` attribute\n2. The nearest ancestor's `lang` attribute\n3. The document's `lang` attribute\n4. Default: English\n\nYou can also register custom translations:\n\n```javascript\nimport { PullToRefreshElement } from '@aarongustafson/pull-to-refresh';\n\nPullToRefreshElement.registerTranslations({\n  'pt-BR': {\n    indicator: '↓ Puxe para atualizar',\n    release: '↻ Solte para atualizar',\n    refreshing: '⏳ Atualizando...'\n  }\n});\n```\n\n### Custom Styling\n\n```html\n<style>\n  pull-to-refresh {\n    --ptr-indicator-bg: #f0f0f0;\n    --ptr-indicator-color: #1976d2;\n    --ptr-indicator-font-size: 1rem;\n    --ptr-indicator-height: 3.75rem;\n  }\n</style>\n\n<pull-to-refresh>\n  <div>Content here</div>\n</pull-to-refresh>\n```\n\n### Custom Messages\n\n```html\n<pull-to-refresh\n  indicator-text=\"⬇ Swipe down\"\n  release-text=\"🔄 Let go!\"\n  refreshing-text=\"⏳ Loading...\">\n  <div>Content here</div>\n</pull-to-refresh>\n```\n\n### With Fetch API\n\n```javascript\nptr.addEventListener('ptr:refresh', async (e) => {\n  try {\n    const response = await fetch('/api/latest');\n    const data = await response.json();\n    renderData(data);\n  } catch (error) {\n    console.error('Refresh failed:', error);\n  } finally {\n    e.detail.complete();\n  }\n});\n```\n\n### Disabled State\n\n```html\n<!-- Disable pull-to-refresh when needed -->\n<pull-to-refresh disabled>\n  <div>No refresh available</div>\n</pull-to-refresh>\n\n<script>\n  // Or toggle programmatically\n  ptr.disabled = true;\n</script>\n```\n\n### Tracking Pull Distance\n\n```javascript\nptr.addEventListener('ptr:pull-move', (e) => {\n  console.log('Pull distance:', e.detail.distance);\n  // Use this for custom animations, etc.\n});\n```\n\n## Localization (i18n)\n\nThe component includes built-in translations for **16 languages**:\n\n| Language | Code | Indicator Text |\n|----------|------|----------------|\n| English | `en` | ↓ Pull to refresh |\n| Chinese (Mandarin) | `zh` | ↓ 下拉刷新 |\n| Hindi | `hi` | ↓ रीफ्रेश करने के लिए खींचें |\n| Spanish | `es` | ↓ Desliza para actualizar |\n| French | `fr` | ↓ Tirez pour actualiser |\n| Arabic | `ar` | ↓ اسحب للتحديث |\n| Bengali | `bn` | ↓ রিফ্রেশ করতে টানুন |\n| Portuguese | `pt` | ↓ Puxe para atualizar |\n| Russian | `ru` | ↓ Потяните для обновления |\n| Japanese | `ja` | ↓ 引っ張って更新 |\n| German | `de` | ↓ Zum Aktualisieren ziehen |\n| Punjabi | `pa` | ↓ ਤਾਜ਼ਾ ਕਰਨ ਲਈ ਖਿੱਚੋ |\n| Javanese | `jv` | ↓ Tarik kanggo nyegerake |\n| Korean | `ko` | ↓ 당겨서 새로고침 |\n| Vietnamese | `vi` | ↓ Kéo để làm mới |\n| Italian | `it` | ↓ Trascina per aggiornare |\n\n### Language Detection\n\nThe component uses a cascading fallback approach:\n\n1. Element's `lang` attribute: `&lt;pull-to-refresh lang=\"es\"&gt;`\n2. Nearest ancestor with `lang`: `&lt;div lang=\"fr\"&gt;&lt;pull-to-refresh&gt;`\n3. Document language: `&lt;html lang=\"de\"&gt;`\n4. Default: English (en)\n\nRegional variants (e.g., `en-US`, `es-MX`, `fr-CA`) automatically fall back to their base language.\n\n### Custom Translations\n\nRegister custom translations or override existing ones:\n\n```javascript\nimport { PullToRefreshElement } from '@aarongustafson/pull-to-refresh';\n\n// Add a new language\nPullToRefreshElement.registerTranslations({\n  'nl': {\n    indicator: '↓ Trek om te vernieuwen',\n    release: '↻ Loslaten om te vernieuwen',\n    refreshing: '⏳ Vernieuwen...'\n  }\n});\n\n// Override existing translations\nPullToRefreshElement.registerTranslations({\n  'en': {\n    indicator: '⬇ Pull down',\n    release: '🔄 Let go',\n    refreshing: '⏳ Loading...'\n  }\n});\n```\n\n### Per-Instance Overrides\n\nYou can always override translations for individual instances:\n\n```html\n<pull-to-refresh\n  lang=\"es\"\n  indicator-text=\"Custom Spanish text\"\n  release-text=\"Custom release text\">\n  <!-- Content -->\n</pull-to-refresh>\n```\n\n## Testing\n\n```bash\nnpm test               # Run tests in watch mode\nnpm run test:run       # Run tests once\nnpm run test:ui        # Open Vitest UI\nnpm run test:coverage  # Generate coverage report\n```\n\n## Development\n\n```bash\nnpm install            # Install dependencies\nnpm run setup          # Run setup wizard (first time)\nnpm run lint           # Lint code\nnpm run format         # Format code\n```\n\n## Browser Support\n\nWorks in all modern browsers supporting:\n- Custom Elements v1\n- Shadow DOM v1\n- ES Modules\n- Pointer Events\n\nFor legacy browsers, use appropriate polyfills.\n\n## Package Exports\n\n```javascript\n// Auto-define\nimport '@aarongustafson/pull-to-refresh';\n\n// Class only\nimport { PullToRefreshElement } from '@aarongustafson/pull-to-refresh/pull-to-refresh.js';\n\n// Both\nimport { PullToRefreshElement } from '@aarongustafson/pull-to-refresh';\n\n// Manual define script\nimport '@aarongustafson/pull-to-refresh/define.js';\n```\n\n## Contributing\n\nContributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nMIT - See [LICENSE](LICENSE)\n\n## Credits\n\nCreated by [Aaron Gustafson](https://github.com/aarongustafson)\n\n---\n\n**Try it out!** Check out the [live demo](https://aarongustafson.github.io/pull-to-refresh/demo/index.html) 🚀\n","readmeFilename":"README.md"}