{"_id":"@aienpah/nanoform","_rev":"5-46bec82eed20b172f5c0d42b0e1e9468","name":"@aienpah/nanoform","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@aienpah/nanoform","version":"1.0.0","keywords":[],"author":{"name":"Aien Pahlevan"},"license":"MIT","_id":"@aienpah/nanoform@1.0.0","maintainers":[{"name":"aienpah","email":"aeenpahlevandev@gmail.com"}],"dist":{"shasum":"ea3a1b0f6ced9c9c8a6af3ce05d43c3de129744c","tarball":"https://registry.npmjs.org/@aienpah/nanoform/-/nanoform-1.0.0.tgz","fileCount":6,"integrity":"sha512-Ik76HrQHnhhogX3Du0AizPW7pGywtTjpI2e+BZTdWMAI+PBTt4t+0iW33FqbKtOutWQ1V3G0/rea8ixXYcBQ1g==","signatures":[{"sig":"MEQCIFJ+m1iXWvkaVyVsXdHzjBct6QxUshtYZheunvAsltsMAiAfTw2U97aEHGAk4YrIG0qa2uGexoeF9R0M9TcG8Ir1yQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8805},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"4ffe1f5db84cf3b9e7d8db24ee6c387c7de15c20","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --dts --format esm,cjs"},"_npmUser":{"name":"aienpah","email":"aeenpahlevandev@gmail.com"},"_npmVersion":"11.6.2","description":"just read me","directories":{},"sideEffects":false,"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^5.9.3","@types/react":"^19.2.14"},"peerDependencies":{"react":">=18"},"_npmOperationalInternal":{"tmp":"tmp/nanoform_1.0.0_1780477193610_0.7048775939143677","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aienpah/nanoform","version":"1.1.0","keywords":[],"author":{"name":"Aien Pahlevan"},"license":"MIT","_id":"@aienpah/nanoform@1.1.0","maintainers":[{"name":"aienpah","email":"aeenpahlevandev@gmail.com"}],"dist":{"shasum":"cf779ad6bbddf982af66f29b04318e1ef3c36351","tarball":"https://registry.npmjs.org/@aienpah/nanoform/-/nanoform-1.1.0.tgz","fileCount":6,"integrity":"sha512-q9wRa7wOYmo1Y5Q5qmXA4PQ1FFEE4Y96N/Bd26ds+XK6WXBC66hxFNFWsHLNlEMgV7qy40ysT08qGK4Ync3mHA==","signatures":[{"sig":"MEQCIBGhFl0k6oA4Aof1dFqnglxdq04wTqve7abX0+oYolSOAiA5O/rFopmpnf3w7XBJ/pTRoqW2nqwK8GyxVi1t+Usu7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10438},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"5f536eb2d0b2998d7b9e78d2851ce8179d5e9f9a","scripts":{"test":"vitest","build":"tsup src/index.ts --dts --format esm,cjs"},"_npmUser":{"name":"aienpah","email":"aeenpahlevandev@gmail.com"},"_npmVersion":"11.6.2","description":"nanoform","directories":{},"sideEffects":false,"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","jsdom":"^29.1.1","vitest":"^4.1.8","typescript":"^5.9.3","@types/react":"^19.2.14","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":">=18"},"_npmOperationalInternal":{"tmp":"tmp/nanoform_1.1.0_1780774010190_0.10425255018503865","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aienpah/nanoform","version":"1.1.1","keywords":[],"author":{"name":"Aien Pahlevan"},"license":"MIT","_id":"@aienpah/nanoform@1.1.1","maintainers":[{"name":"aienpah","email":"aeenpahlevandev@gmail.com"}],"homepage":"https://github.com/AeenPah/nano-form#readme","bugs":{"url":"https://github.com/AeenPah/nano-form/issues"},"dist":{"shasum":"f2ce16817161a1eac555f25f30b4a0f35fab4c40","tarball":"https://registry.npmjs.org/@aienpah/nanoform/-/nanoform-1.1.1.tgz","fileCount":6,"integrity":"sha512-h+Z+R9QmiQQs1gAofp9DXEb0tAnM9PhOq969SNRCU/kcbXp3Fprei/NeUinjmdBigbjp8J3BVojc4tJRDTfKPg==","signatures":[{"sig":"MEUCIARkBInD68f3cPFNcQJMnR9DjY3pV4ULXOnaa3LEx7hYAiEA7dkt0ZE3afOxU8W7YyhWFK3nouNq42mFEmUqluFH16s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10612},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"635a9d9303881e3c8a9eb791a887c6ff764d1421","scripts":{"test":"vitest","build":"tsup src/index.ts --dts --format esm,cjs"},"_npmUser":{"name":"aienpah","email":"aeenpahlevandev@gmail.com"},"repository":{"url":"git+https://github.com/AeenPah/nano-form.git","type":"git"},"_npmVersion":"11.6.2","description":"nanoform","directories":{},"sideEffects":false,"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","jsdom":"^29.1.1","vitest":"^4.1.8","typescript":"^5.9.3","@types/react":"^19.2.14","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":">=18"},"_npmOperationalInternal":{"tmp":"tmp/nanoform_1.1.1_1781471965412_0.08151429175144198","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@aienpah/nanoform","version":"1.1.2","keywords":[],"author":{"name":"Aien Pahlevan"},"license":"MIT","_id":"@aienpah/nanoform@1.1.2","maintainers":[{"name":"aienpah","email":"aeenpahlevandev@gmail.com"}],"homepage":"https://github.com/AeenPah/nano-form#readme","bugs":{"url":"https://github.com/AeenPah/nano-form/issues"},"dist":{"shasum":"4723ceff01fda45db71550f5e16a0320e0426d80","tarball":"https://registry.npmjs.org/@aienpah/nanoform/-/nanoform-1.1.2.tgz","fileCount":6,"integrity":"sha512-S0Q+q4XoFKoZSXmWdT5ovhdGaK42yLEecjWqdDZs3HtGt6N5rPPqyPwrEbskkI9DUxp5Vjtf70F7Jzk/5r3NMA==","signatures":[{"sig":"MEUCIHK7O5Cp+RfoqQSAk5kc2nPqKutryKmIn6w1406pt/mWAiEA0LL4DKb2JUYZ41kJFI1MtBiSRMOUTxwjjsw0Hrgp2Kw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12283},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"7bf2425c04d6d255a2004babaac973f4dec7c02c","scripts":{"test":"vitest","build":"tsup src/index.ts --dts --format esm,cjs"},"_npmUser":{"name":"aienpah","email":"aeenpahlevandev@gmail.com"},"repository":{"url":"git+https://github.com/AeenPah/nano-form.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiny React form hook built for simple forms.","directories":{},"sideEffects":false,"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","jsdom":"^29.1.1","vitest":"^4.1.8","typescript":"^5.9.3","@types/react":"^19.2.14","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":">=18"},"_npmOperationalInternal":{"tmp":"tmp/nanoform_1.1.2_1781538403577_0.32668348158752014","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@aienpah/nanoform","version":"1.1.3","description":"A tiny React form hook built for simple forms.","scripts":{"test":"vitest","build":"tsup src/index.ts --dts --format esm,cjs"},"type":"module","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","sideEffects":false,"keywords":[],"author":{"name":"Aien Pahlevan"},"license":"MIT","peerDependencies":{"react":">=18"},"devDependencies":{"@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/react":"^19.2.14","jsdom":"^29.1.1","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^4.1.8"},"repository":{"type":"git","url":"git+https://github.com/AeenPah/nano-form.git"},"bugs":{"url":"https://github.com/AeenPah/nano-form/issues"},"gitHead":"c1181c33ec478e95156c64f39ba0d02e3914e295","_id":"@aienpah/nanoform@1.1.3","homepage":"https://github.com/AeenPah/nano-form#readme","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-AqeVw3KQq8wwbEjYhYKjWSjfTAdhAz57xGCMCCgCY7o1B4EmOUCegiCBS1xkqF2W2tATWeY2ypm3Qq59B2iHcg==","shasum":"e1777d2f876db4d18a2e073a626783e6a26d1565","tarball":"https://registry.npmjs.org/@aienpah/nanoform/-/nanoform-1.1.3.tgz","fileCount":6,"unpackedSize":11661,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDLn+QSZGS18DIMClxAk7oO661Zkpbb52pkNiLibIVUPQIgBVf6nzEtTBNpWuTijLhS7ECeP9j4jbx7somgvdZypLk="}]},"_npmUser":{"name":"aienpah","email":"aeenpahlevandev@gmail.com"},"directories":{},"maintainers":[{"name":"aienpah","email":"aeenpahlevandev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nanoform_1.1.3_1784621330687_0.2500974982492037"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-03T08:59:53.424Z","modified":"2026-07-21T08:08:51.020Z","1.0.0":"2026-06-03T08:59:53.760Z","1.1.0":"2026-06-06T19:26:50.348Z","1.1.1":"2026-06-14T21:19:25.550Z","1.1.2":"2026-06-15T15:46:43.726Z","1.1.3":"2026-07-21T08:08:50.844Z"},"bugs":{"url":"https://github.com/AeenPah/nano-form/issues"},"author":{"name":"Aien Pahlevan"},"license":"MIT","homepage":"https://github.com/AeenPah/nano-form#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/AeenPah/nano-form.git"},"description":"A tiny React form hook built for simple forms.","maintainers":[{"name":"aienpah","email":"aeenpahlevandev@gmail.com"}],"readme":"# nanoform\r\n\r\nA tiny React form hook built for simple forms.\r\n\r\nnanoform was created for the forms most applications use every day—comments, sign-ins, contact forms, and basic checkout flows. While larger form libraries offer powerful features for complex use cases, sometimes you just need a straightforward way to handle a few inputs without extra complexity.\r\n\r\nnanoform stores field values in refs to avoid unnecessary re-renders while still supporting validation, async submissions, and form resets. It focuses on simplicity, performance, and an API that's easy to understand.\r\n\r\n## Example\r\n\r\n```tsx\r\nimport {\r\n  useForm,\r\n  validateForm,\r\n  VR,\r\n  type TValidationSchema,\r\n} from \"@aienpah/nanoform\";\r\n\r\ntype FormData = {\r\n  name: string;\r\n  email: string;\r\n};\r\n\r\nconst initialForm: FormData = {\r\n  name: \"\",\r\n  email: \"\",\r\n};\r\n\r\nconst formSchema: TValidationSchema<FormData> = {\r\n  name: [VR.required()],\r\n  email: [VR.required(), VR.email()],\r\n};\r\n\r\nexport default function App() {\r\n  const { formRef, errors, handleChange, handleSubmit, isSubmitting } =\r\n    useForm<FormData>(initialForm, (values) =>\r\n      validateForm(formSchema, values),\r\n    );\r\n\r\n  function onSubmit(values: FormData) {\r\n    console.log(\"Form submitted:\", values);\r\n  }\r\n\r\n  return (\r\n    <form ref={formRef} onSubmit={handleSubmit(onSubmit)}>\r\n      <div>\r\n        <label htmlFor=\"name\">Name</label>\r\n        <input id=\"name\" name=\"name\" type=\"text\" onChange={handleChange} />\r\n        {errors?.name && <p>{errors.name}</p>}\r\n      </div>\r\n      <div>\r\n        <label htmlFor=\"email\">Email</label>\r\n        <input id=\"email\" name=\"email\" type=\"email\" onChange={handleChange} />\r\n        {errors?.email && <p>{errors.email}</p>}\r\n      </div>\r\n      <button type=\"submit\" disabled={isSubmitting}>\r\n        {isSubmitting ? \"Submitting...\" : \"Submit\"}\r\n      </button>\r\n    </form>\r\n  );\r\n}\r\n```\r\n","readmeFilename":"README.md"}