{"_id":"@airlib/solid-form","_rev":"8-27a31e75da4d9c4280ae3268a6ed8ab7","name":"@airlib/solid-form","dist-tags":{"latest":"2.1.0"},"versions":{"1.0.0":{"name":"@airlib/solid-form","version":"1.0.0","author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","_id":"@airlib/solid-form@1.0.0","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"bugs":{"url":"https://github.com/beerush-id/airlib/issues"},"dist":{"shasum":"c9b7f16909bef9806b1389091caf6c3405e14028","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-1.0.0.tgz","fileCount":71,"integrity":"sha512-sFBCCHkf/C05Jz7+4Bf/j2//hhlu/peYTTe+Q5HAkEiaM2dpytAmt/v5PJjGBr/7Bl4xTdoCgyT11RGW0u2d0A==","signatures":[{"sig":"MEUCIQCBcBk5r6yf7q2tR5gVZ9/9LKhkPoZ0uD4gUKgO235NlAIgdVSWgV8Iw4B9LIEjwtjEK+RMGPdeigXEiUia5pWBl/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50989},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"c9b7f16909bef9806b1389091caf6c3405e14028","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsdown --watch","test":"rimraf coverage && vitest --run","build":"bun run clean && tsdown && publint","clean":"rimraf dist","format":"biome format --write","prepublish":"bun run format && bun run build","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"_integrity":"sha512-sFBCCHkf/C05Jz7+4Bf/j2//hhlu/peYTTe+Q5HAkEiaM2dpytAmt/v5PJjGBr/7Bl4xTdoCgyT11RGW0u2d0A==","repository":{"url":"git+https://github.com/beerush-id/airlib.git","type":"git"},"_npmVersion":"10.8.3","directories":{"src":"src","dist":"dist"},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","jsdom":"^27.0.0","rimraf":"^6.0.0","tsdown":"^0.15.0","vitest":"^3.2.0","publint":"^0.3.0","solid-js":"^1.9.0","@types/bun":"^1.3.0","@vitest/ui":"^3.2.0","@biomejs/biome":"^2.3.0","unplugin-solid":"1.0.0","vite-plugin-solid":"^2.11.10","@vitest/coverage-v8":"^3.2.0","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.0","@testing-library/user-event":"^14.6.0"},"peerDependencies":{"zod":"^4.1.5","solid-js":"^1.9.0","typescript":"6.0.3","@airlib/form":"^1.0.0","@anchorlib/solid":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/solid-form_1.0.0_1780534758664_0.09477101224114182","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@airlib/solid-form","version":"1.0.1","keywords":["solid","solidjs","form","validation","zod","reactive","air-stack","anchor","typescript"],"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","_id":"@airlib/solid-form@1.0.1","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"bugs":{"url":"https://github.com/beerush-id/airlib/issues"},"dist":{"shasum":"51ea4fe9e16e1cebc93fe5e416c8d614771832d6","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-1.0.1.tgz","fileCount":71,"integrity":"sha512-4IoH26sjtcdxejGb9JLr6mele2e4wpD/Wf6sfT8Xn3A29uidxeXoU8MW0TUBbW9Cc6GLXncbGU8vpChVzEnwdw==","signatures":[{"sig":"MEQCIBX1cEo1SxAADVYHZHRYao6KubyWdwRxw672awDG/QSMAiBjniXVVtN9qpHQ5BBmH9TVOoMBLiC9AWtQIvFD3US3WA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51332},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"51ea4fe9e16e1cebc93fe5e416c8d614771832d6","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsdown --watch","test":"rimraf coverage && vitest --run","build":"bun run clean && tsdown && publint","clean":"rimraf dist","format":"biome format --write","prepublish":"bun run format && bun run build","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"_integrity":"sha512-4IoH26sjtcdxejGb9JLr6mele2e4wpD/Wf6sfT8Xn3A29uidxeXoU8MW0TUBbW9Cc6GLXncbGU8vpChVzEnwdw==","repository":{"url":"git+https://github.com/beerush-id/airlib.git","type":"git"},"_npmVersion":"10.8.3","description":"Reactive and declarative SolidJS form components built on AIR Stack. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","directories":{"src":"src","dist":"dist"},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","jsdom":"^27.0.0","rimraf":"^6.0.0","tsdown":"^0.15.0","vitest":"^3.2.0","publint":"^0.3.0","solid-js":"^1.9.0","@types/bun":"^1.3.0","@vitest/ui":"^3.2.0","@biomejs/biome":"^2.3.0","unplugin-solid":"1.0.0","vite-plugin-solid":"^2.11.10","@vitest/coverage-v8":"^3.2.0","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.0","@testing-library/user-event":"^14.6.0"},"peerDependencies":{"zod":"^4.1.5","solid-js":"^1.9.0","typescript":"6.0.3","@airlib/form":"^1.0.1","@anchorlib/solid":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/solid-form_1.0.1_1780534982966_0.879805118122599","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@airlib/solid-form","version":"1.1.0","keywords":["solid","solidjs","form","validation","zod","reactive","air-stack","anchor","typescript"],"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","_id":"@airlib/solid-form@1.1.0","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"bugs":{"url":"https://github.com/beerush-id/airlib/issues"},"dist":{"shasum":"3eae071874225e05b8bfc366b86d41ad9cdf47fe","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-1.1.0.tgz","fileCount":74,"integrity":"sha512-19rMYFNqHqr4hHOJo9hxlJm1lx6xKp0BPdPRpTytqZ1Tql7DYb6SDQ0vG3ZiyiA1NIdy71t+9CCGiuS7X2MwCA==","signatures":[{"sig":"MEQCICAItCryOP1Erodax814MEVVd3avsaeLanKfaGpzIr/qAiBOmQzYjgN6wL0gbeIXGNvv83LSyx8qeLB05c8S/BWvSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87575},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"3eae071874225e05b8bfc366b86d41ad9cdf47fe","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsdown --watch","test":"rimraf coverage && vitest --run","build":"bun run clean && tsdown && publint","clean":"rimraf dist","format":"biome format --write","prepublish":"bun run format && bun run build","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"_integrity":"sha512-19rMYFNqHqr4hHOJo9hxlJm1lx6xKp0BPdPRpTytqZ1Tql7DYb6SDQ0vG3ZiyiA1NIdy71t+9CCGiuS7X2MwCA==","repository":{"url":"git+https://github.com/beerush-id/airlib.git","type":"git"},"_npmVersion":"10.8.3","description":"Reactive and declarative SolidJS form components built on AIR Stack. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","directories":{"src":"src","dist":"dist"},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","jsdom":"^27.0.0","rimraf":"^6.0.0","tsdown":"^0.15.0","vitest":"^3.2.0","publint":"^0.3.0","solid-js":"^1.9.0","@types/bun":"^1.3.0","@vitest/ui":"^3.2.0","@biomejs/biome":"^2.3.0","unplugin-solid":"1.0.0","vite-plugin-solid":"^2.11.10","@vitest/coverage-v8":"^3.2.0","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.0","@testing-library/user-event":"^14.6.0"},"peerDependencies":{"zod":"^4.1.5","solid-js":"^1.9.0","typescript":"6.0.3","@airlib/form":"1.1.0","@anchorlib/solid":"1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/solid-form_1.1.0_1780843767762_0.7805897103111932","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@airlib/solid-form","version":"1.1.1","keywords":["solid","solidjs","form","validation","zod","reactive","air-stack","anchor","typescript"],"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","_id":"@airlib/solid-form@1.1.1","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"bugs":{"url":"https://github.com/beerush-id/airlib/issues"},"dist":{"shasum":"6a85cad6f97ac6f5cdbe3b1e8aadd1b9bd68f5cd","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-1.1.1.tgz","fileCount":74,"integrity":"sha512-cUgjxDU09My+0z6h1AFTNizd6PkvSPzQCeHZ5mIClR2VEYsYhGfHs4F2JBHcuNsRurcdgA7Ti4gRe03mTJfGbw==","signatures":[{"sig":"MEUCIHdlOeA5ruXMs47i2BLsKZeA2tznt8yqSCJ2erUuO3BSAiEAtAtOhGQ1yGtLVLm9PkPI+NWoW9rXmkcX+1/SRZMEosc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87575},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"6a85cad6f97ac6f5cdbe3b1e8aadd1b9bd68f5cd","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsdown --watch","test":"rimraf coverage && vitest --run","build":"bun run clean && tsdown && publint","clean":"rimraf dist","format":"biome format --write","prepublish":"bun run format && bun run build","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"_integrity":"sha512-cUgjxDU09My+0z6h1AFTNizd6PkvSPzQCeHZ5mIClR2VEYsYhGfHs4F2JBHcuNsRurcdgA7Ti4gRe03mTJfGbw==","repository":{"url":"git+https://github.com/beerush-id/airlib.git","type":"git"},"_npmVersion":"10.8.3","description":"Reactive and declarative SolidJS form components built on AIR Stack. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","directories":{"src":"src","dist":"dist"},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","jsdom":"^27.0.0","rimraf":"^6.0.0","tsdown":"^0.15.0","vitest":"^3.2.0","publint":"^0.3.0","solid-js":"^1.9.0","@types/bun":"^1.3.0","@vitest/ui":"^3.2.0","@biomejs/biome":"^2.3.0","unplugin-solid":"1.0.0","vite-plugin-solid":"^2.11.10","@vitest/coverage-v8":"^3.2.0","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.0","@testing-library/user-event":"^14.6.0"},"peerDependencies":{"zod":"^4.1.5","solid-js":"^1.9.0","typescript":"6.0.3","@airlib/form":"1.1.1","@anchorlib/solid":"1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/solid-form_1.1.1_1780846509516_0.2546248946393872","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@airlib/solid-form","version":"1.2.0","keywords":["solid","solidjs","form","validation","zod","reactive","air-stack","anchor","typescript"],"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","_id":"@airlib/solid-form@1.2.0","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"bugs":{"url":"https://github.com/beerush-id/airlib/issues"},"dist":{"shasum":"080640f9ccd25b2af17fbc6e4fa66a6a21ce093e","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-1.2.0.tgz","fileCount":74,"integrity":"sha512-uzY+deuvDZOkGsBNP810RS29uVksfdWcJvYikFcYaHbBN3+sanW8UhjialTwpj/nMdeuVDSlngyPwZL2bFzLZQ==","signatures":[{"sig":"MEYCIQDOej/gUbij2pj8NXUOtVdSAMT9EP1BQBFpRK1vauhNjwIhAOfocIUuhsTfIMvXkbGFRGkYtKgS9Bcdz91Qdx7gDTRZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89057},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"080640f9ccd25b2af17fbc6e4fa66a6a21ce093e","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsdown --watch","test":"rimraf coverage && vitest --run","build":"bun run clean && tsdown && publint","clean":"rimraf dist","format":"biome format --write","prepublish":"bun run format && bun run build","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"_integrity":"sha512-uzY+deuvDZOkGsBNP810RS29uVksfdWcJvYikFcYaHbBN3+sanW8UhjialTwpj/nMdeuVDSlngyPwZL2bFzLZQ==","repository":{"url":"git+https://github.com/beerush-id/airlib.git","type":"git"},"_npmVersion":"10.8.3","description":"Reactive and declarative SolidJS form components built on AIR Stack. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","directories":{"src":"src","dist":"dist"},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","jsdom":"^27.0.0","rimraf":"^6.0.0","tsdown":"^0.15.0","vitest":"^3.2.0","publint":"^0.3.0","solid-js":"^1.9.0","@types/bun":"^1.3.0","@vitest/ui":"^3.2.0","@biomejs/biome":"^2.3.0","unplugin-solid":"1.0.0","vite-plugin-solid":"^2.11.10","@vitest/coverage-v8":"^3.2.0","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.0","@testing-library/user-event":"^14.6.0"},"peerDependencies":{"zod":"^4.1.5","solid-js":"^1.9.0","typescript":"6.0.3","@airlib/form":"1.2.0","@anchorlib/solid":"1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/solid-form_1.2.0_1780954090999_0.19665985030073196","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@airlib/solid-form","version":"1.2.1","keywords":["solid","solidjs","form","validation","zod","reactive","air-stack","anchor","typescript"],"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","_id":"@airlib/solid-form@1.2.1","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"bugs":{"url":"https://github.com/beerush-id/airlib/issues"},"dist":{"shasum":"9ee750dada7c77cd15bfacb6034f8fac0a516dc5","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-1.2.1.tgz","fileCount":74,"integrity":"sha512-Hc+Sl0UIRXDvuZIZVySV3qU8oQtTlbuMiROnO9Nu0Nr0eyhaiRJdhfTNicXWGBXDV3mwSIb9/qVkv9Cu5Xa+1w==","signatures":[{"sig":"MEUCIEQs5PsDdf8YHHfwwSkVnXr7prPKp6u1wEn4QZFCQ4rRAiEA6aocuA65SpAyU4L+S88lfj5/DjK2wwbZOGI0otLbQyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94635},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"9ee750dada7c77cd15bfacb6034f8fac0a516dc5","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsdown --watch","test":"rimraf coverage && vitest --run","build":"bun run clean && tsdown && publint","clean":"rimraf dist","format":"biome format --write","prepublish":"bun run format && bun run build","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"_integrity":"sha512-Hc+Sl0UIRXDvuZIZVySV3qU8oQtTlbuMiROnO9Nu0Nr0eyhaiRJdhfTNicXWGBXDV3mwSIb9/qVkv9Cu5Xa+1w==","repository":{"url":"git+https://github.com/beerush-id/airlib.git","type":"git"},"_npmVersion":"10.8.3","description":"Reactive and declarative SolidJS form components built on AIR Stack. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","directories":{"src":"src","dist":"dist"},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","jsdom":"^27.0.0","rimraf":"^6.0.0","tsdown":"^0.15.0","vitest":"^3.2.0","publint":"^0.3.0","solid-js":"^1.9.0","@types/bun":"^1.3.0","@vitest/ui":"^3.2.0","@biomejs/biome":"^2.3.0","unplugin-solid":"1.0.0","vite-plugin-solid":"^2.11.10","@vitest/coverage-v8":"^3.2.0","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.0","@testing-library/user-event":"^14.6.0"},"peerDependencies":{"zod":"^4.1.5","solid-js":"^1.9.0","typescript":"6.0.3","@airlib/form":"1.2.1","@anchorlib/solid":"1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/solid-form_1.2.1_1781087276009_0.2528691819907778","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@airlib/solid-form","version":"1.2.2","keywords":["solid","solidjs","form","validation","zod","reactive","air-stack","anchor","typescript"],"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","_id":"@airlib/solid-form@1.2.2","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"bugs":{"url":"https://github.com/beerush-id/airlib/issues"},"dist":{"shasum":"6a8078c29dce02ad9e92494a36a8c89e1be081e8","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-1.2.2.tgz","fileCount":74,"integrity":"sha512-k0OSph8STxEOzgusNb8Ty1xrkybgVjjRta4yR2K0qvXcMy3UA04Kl31UHr1uUEj6NzSm531nzBoXwc4eavo/Lg==","signatures":[{"sig":"MEUCIQDpFN0sng2qhRt/SPDXO0fcIAyV6m2UAijyOeYU4jTcnAIgZyP1NxvnRf+JwWTdjOMYtQ9lcI20try/QNNA+P7HBK0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94646},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"6a8078c29dce02ad9e92494a36a8c89e1be081e8","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsdown --watch ./src","build":"bun run clean && tsdown && publint","clean":"rimraf dist","format":"biome format --write","test:run":"rimraf coverage && vitest --run","prepublish":"bun run format && bun run build","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"_integrity":"sha512-k0OSph8STxEOzgusNb8Ty1xrkybgVjjRta4yR2K0qvXcMy3UA04Kl31UHr1uUEj6NzSm531nzBoXwc4eavo/Lg==","repository":{"url":"git+https://github.com/beerush-id/airlib.git","type":"git"},"_npmVersion":"10.8.3","description":"Reactive and declarative SolidJS form components built on AIR Stack. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","directories":{"src":"src","dist":"dist"},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","jsdom":"^27.0.0","rimraf":"^6.0.0","tsdown":"^0.15.0","vitest":"^3.2.0","publint":"^0.3.0","solid-js":"^1.9.0","@types/bun":"^1.3.0","@vitest/ui":"^3.2.0","@biomejs/biome":"^2.3.0","unplugin-solid":"1.0.0","vite-plugin-solid":"^2.11.10","@vitest/coverage-v8":"^3.2.0","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.0","@testing-library/user-event":"^14.6.0"},"peerDependencies":{"zod":"^4.1.5","solid-js":"^1.9.0","typescript":"6.0.3","@airlib/form":"^1.2.2","@anchorlib/solid":"1.2.8"},"_npmOperationalInternal":{"tmp":"tmp/solid-form_1.2.2_1783111762719_0.5476035340861363","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"type":"module","name":"@airlib/solid-form","version":"2.1.0","description":"Reactive and declarative SolidJS form components built on AirLib. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","keywords":["solid","solidjs","form","validation","zod","reactive","airlib","anchor","typescript"],"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","repository":{"type":"git","url":"git+https://github.com/beerush-id/airstack.git"},"bugs":{"url":"https://github.com/beerush-id/airstack/issues"},"sideEffects":false,"types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"solid":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js"}},"directories":{"dist":"dist","src":"src"},"publishConfig":{"access":"public"},"devDependencies":{"@biomejs/biome":"^2.5.6","@solidjs/testing-library":"^0.8.10","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1","@types/bun":"^1.3.1","@vitest/ui":"^4.1.11","jsdom":"^27.0.1","publint":"^0.3.15","rimraf":"^6.0.1","solid-js":"^1.9.9","tsdown":"^0.15.9","unplugin-solid":"^2.0.0","vite":"^8.0.10","vite-plugin-solid":"^2.11.10","vitest":"^4.1.11"},"dependencies":{"@airlib/form":"2.1.0"},"peerDependencies":{"@airlib/solid":"2.1.0","solid-js":"^1.9.9","typescript":"^5.9.3","zod":"^4.4.3"},"scripts":{"dev":"tsdown --watch ./src","clean":"rimraf dist","build":"bun run clean && tsdown && publint","prepublish":"bun run format && bun run build","format":"biome format --write","test:run":"rimraf coverage && vitest --run","test:preview":"rimraf coverage && vitest --run && vite preview --outDir coverage"},"license":"MIT","_id":"@airlib/solid-form@2.1.0","_integrity":"sha512-V8oNihrO5Cd35eAYnB92NnUf0SphjiyHQNTAf9PQESd8EqoUFtEuYXJLYKbU43FBaDtPbIDtHh/6IF1X5KeImQ==","_nodeVersion":"24.3.0","_npmVersion":"10.8.3","shasum":"772adb3e2e6d820e05dc5f9b4d3f0ce0b3c1be48","dist":{"integrity":"sha512-V8oNihrO5Cd35eAYnB92NnUf0SphjiyHQNTAf9PQESd8EqoUFtEuYXJLYKbU43FBaDtPbIDtHh/6IF1X5KeImQ==","shasum":"772adb3e2e6d820e05dc5f9b4d3f0ce0b3c1be48","tarball":"https://registry.npmjs.org/@airlib/solid-form/-/solid-form-2.1.0.tgz","fileCount":74,"unpackedSize":121527,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB0H9B4+d0FgvterJjlcwdKmoWABTWc9FNLR7IGZspabAiEAoGHalMqv8OCl20+TXIZ5smCTSZeUbM8T0FnSW/m6A7k="}]},"_npmUser":{"name":"mahdaen","email":"mahdaen@gmail.com"},"maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/solid-form_2.1.0_1788182573449_0.13509980265127308"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-04T00:59:18.212Z","modified":"2026-08-31T13:22:53.835Z","1.0.0":"2026-06-04T00:59:18.820Z","1.0.1":"2026-06-04T01:03:03.117Z","1.1.0":"2026-06-07T14:49:27.927Z","1.1.1":"2026-06-07T15:35:09.665Z","1.2.0":"2026-06-08T21:28:11.158Z","1.2.1":"2026-06-10T10:27:56.172Z","1.2.2":"2026-07-03T20:49:22.856Z","2.1.0":"2026-08-31T13:22:53.575Z"},"bugs":{"url":"https://github.com/beerush-id/airstack/issues"},"author":"Nanang Mahdaen El Agung <mahdaen@gmail.com>","license":"MIT","keywords":["solid","solidjs","form","validation","zod","reactive","airlib","anchor","typescript"],"repository":{"type":"git","url":"git+https://github.com/beerush-id/airstack.git"},"description":"Reactive and declarative SolidJS form components built on AirLib. Typed forms, field validation, cross-field matching, and array fields with fine-grained reactivity.","maintainers":[{"name":"mahdaen","email":"mahdaen@gmail.com"}],"readme":"# AirLib Solid Form\n\nHandling form states, validations, and complex data structures like arrays and nested objects in standard SolidJS can be verbose and hard to optimize for performance. `@airlib/solid-form` provides reactive form components built on top of `@airlib/solid` to solve this, ensuring high performance without unnecessary re-renders while giving a deep type-safe structure.\n\n## Creating Typed Forms\n\nBuilding robust forms requires strict schema validation and type safety. Here how we define a schema and create a typed form.\n\n```tsx\nimport { z } from 'zod';\nimport { createForm } from '@airlib/solid-form';\n\nconst userSchema = z.object({\n  name: z.string().min(3),\n  email: z.string().email(),\n});\n\nexport const UserForm = createForm(userSchema);\n```\n\nThe `createForm` function returns form components (`Form`, `Field`, `FieldList`) typed against the provided Zod schema, ensuring autocompletion and compile-time checks for all field names.\n\n## Building Form Interfaces\n\nBuilding the UI requires binding inputs to the form state. The typed form provides everything needed to structure the form with type safety.\n\n```tsx\nimport { UserForm } from './form';\nimport { TextInput, EmailInput, FormSubmit, FormReset } from '@airlib/solid-form';\n\nexport function ProfileEditor() {\n  return (\n    <UserForm onSubmit={(data) => console.log(data)}>\n      <UserForm.Field name=\"name\" label=\"Name\" errorClass=\"text-red-500\">\n        <TextInput placeholder=\"Enter name\" />\n      </UserForm.Field>\n\n      <UserForm.Field name=\"email\" label=\"Email\" errorClass=\"text-red-500\">\n        <EmailInput placeholder=\"Enter email\" />\n      </UserForm.Field>\n\n      <div>\n        <FormReset>Reset</FormReset>\n        <FormSubmit>Save Profile</FormSubmit>\n      </div>\n    </UserForm>\n  );\n}\n```\n\nThe `UserForm.Field` wrapper tracks errors and provides them to the UI, while components like `TextInput` and `EmailInput` connect to the form state under the hood. The `FormSubmit` and `FormReset` buttons track form changes and validation status, enabling or disabling based on the form's readiness.\n\n## Cross-Field Matching\n\nFields that must match another field (like confirm password) use the `match` prop.\n\n```tsx\nconst passwordSchema = z.object({\n  password: z.string().min(6),\n  confirmPassword: z.string().min(6),\n});\n\nconst PasswordForm = createForm(passwordSchema);\n\nexport function ChangePassword() {\n  return (\n    <PasswordForm onSubmit={save}>\n      <PasswordForm.Field name=\"password\" label=\"Password\">\n        <PasswordInput />\n      </PasswordForm.Field>\n\n      <PasswordForm.Field name=\"confirmPassword\" match=\"password\">\n        {(field) => (\n          <div>\n            <PasswordInput />\n            {field.touched && field.error?.map(err => <span>{err}</span>)}\n            {!field.matched && <span>Passwords don't match</span>}\n          </div>\n        )}\n      </PasswordForm.Field>\n\n      <FormSubmit>Change Password</FormSubmit>\n    </PasswordForm>\n  );\n}\n```\n\nThe `match` prop accepts a field path for equality checks, or a function for custom cross-field logic. `valid` and `matched` are separate signals — `valid` is schema-only, `matched` is match-only — the view layer decides how to compose them.\n\nFor custom logic beyond equality:\n\n```tsx\n<RangeForm.Field name=\"max\" match={(form) => form.fields['max'] > form.fields['min']}>\n```\n\n## Accessibility\n\n`Field` and input components handle accessibility attributes out of the box:\n\n- `<label>` gets `for` linked to the input's auto-generated `id`\n- Error messages render with `role=\"alert\"` and a stable `id`\n- Inputs get `aria-invalid` when errors exist\n- Inputs get `aria-describedby` pointing to the error element\n\nDot-path field names are sanitized to dashes for valid HTML ids (`address.city` → `address-city`).\n\n## Handling Form Arrays\n\nDealing with dynamic lists, such as arrays of objects, in a form is often complicated. The `FieldList` component abstracts this complexity.\n\n```tsx\nimport { z } from 'zod';\nimport { createForm, TextInput } from '@airlib/solid-form';\n\nconst teamSchema = z.object({\n  members: z.array(z.object({ name: z.string(), role: z.string() }))\n});\n\nconst TeamForm = createForm(teamSchema);\n\nexport function TeamEditor() {\n  return (\n    <TeamForm>\n      <TeamForm.FieldList name=\"members\">\n        {(items) => (\n          <div>\n            {items.map((member, i) => (\n              <div>\n                <TeamForm.Field name={`members.${i}.name`}>\n                  <TextInput placeholder=\"Name\" />\n                </TeamForm.Field>\n                <TeamForm.Field name={`members.${i}.role`}>\n                  <TextInput placeholder=\"Role\" />\n                </TeamForm.Field>\n              </div>\n            ))}\n            <button type=\"button\" onClick={() => items.push({ name: '', role: '' })}>\n              Add Member\n            </button>\n          </div>\n        )}\n      </TeamForm.FieldList>\n    </TeamForm>\n  );\n}\n```\n\nThe `FieldList` exposes the array items to the render function, allowing direct reactive mutations like `.push()` on the array. Because this uses `@airlib/solid` under the hood, these mutations are tracked without the need for verbose state management hooks.\n\n## Working With Custom Inputs\n\nSometimes standard inputs are not enough. Building custom inputs that integrate with the form state is trivial using the built-in `formInput` hook or the `createInput` factory.\n\n```tsx\nimport { setup } from '@airlib/solid';\nimport { formInput } from '@airlib/form';\n\nexport const CustomInput = setup<{ name: string }>((props) => {\n  const input = formInput(props);\n\n  return (\n    <div>\n      <input \n        name={input.name}\n        value={input.value || ''} \n        onInput={(e) => input.value = e.currentTarget.value} \n        onBlur={() => input.settled()}\n      />\n      {input.error?.map(err => <span class=\"error\">{err}</span>)}\n    </div>\n  );\n});\n```\n\nUsing `formInput()` wires up the input state, validation rules, and error tracking based on the provided `name` prop. For simpler standard inputs, use the `createInput('text')` factory.\n","readmeFilename":"readme.md"}