{"_id":"@anjunar/scalajs-ui-forms","_rev":"6-916f95edc29c2c8478a06531d24c3c6e","name":"@anjunar/scalajs-ui-forms","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@anjunar/scalajs-ui-forms","version":"1.0.0","author":{"name":"Patrick Bittner"},"license":"MIT","_id":"@anjunar/scalajs-ui-forms@1.0.0","maintainers":[{"name":"anjunar","email":"anjunar@gmx.de"}],"homepage":"https://github.com/anjunar/scalajs-ui#readme","bugs":{"url":"https://github.com/anjunar/scalajs-ui/issues"},"dist":{"shasum":"3295e3294c1003a01263592a61c8650293a24e34","tarball":"https://registry.npmjs.org/@anjunar/scalajs-ui-forms/-/scalajs-ui-forms-1.0.0.tgz","fileCount":50,"integrity":"sha512-G8L5cYI09p1XZFZSX8Yh5VfUao7lQ2DqXR8hPqAf3poew+PrXRbGR0sxTX6Kb60lXKeBuoLcCyUwYtwyRfgyAw==","signatures":[{"sig":"MEYCIQDVCRBxjIjzvYZ+57Xkz1YKHnqWcpusWNREbs9vL4rN2QIhANpoqunLt7oD35f7JosIhnoQ/4FtTqSIJlKrjTjxlX5+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86258},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"a9312d1aa728764c037b016ba66b703e003d6d50","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"npm run typecheck && npm run test && npm run test:consumer","prepack":"npm run build","typecheck":"npm run build && tsc -p tsconfig.test.json","test:watch":"vitest","test:consumer":"vitest run --config vitest.consumer.config.ts"},"_npmUser":{"name":"anjunar","email":"anjunar@gmx.de"},"repository":{"url":"git+https://github.com/anjunar/scalajs-ui.git","type":"git","directory":"npm/scalajs-ui-forms"},"_npmVersion":"11.17.0","description":"The TypeScript forms API of UI 3: model-bound inputs, validators, field groups, repeating and nested sub-forms, a combo box, and an image cropper, projected onto the ui.forms components that run in the Scala.js runtime published as @anjunar/scalajs-ui-bri","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","vitest":"^3.2.7","typescript":"^5.6.0","@types/node":"^22.0.0","@anjunar/scalajs-ui":"*","@anjunar/scalajs-ui-core":"*","@anjunar/scalajs-ui-bridge":"*","@anjunar/scalajs-ui-controls":"*","@anjunar/scalajs-ui-viewport":"*"},"peerDependencies":{"@anjunar/scalajs-ui":"^1.0.0","@anjunar/scalajs-ui-core":"^1.0.0","@anjunar/scalajs-ui-bridge":"^1.0.0","@anjunar/scalajs-ui-controls":"^1.0.0","@anjunar/scalajs-ui-viewport":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/scalajs-ui-forms_1.0.0_1789143252728_0.8904947478930239","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@anjunar/scalajs-ui-forms","version":"1.0.2","author":{"name":"Patrick Bittner"},"license":"MIT","_id":"@anjunar/scalajs-ui-forms@1.0.2","maintainers":[{"name":"anjunar","email":"anjunar@gmx.de"}],"homepage":"https://github.com/anjunar/scalajs-ui#readme","bugs":{"url":"https://github.com/anjunar/scalajs-ui/issues"},"dist":{"shasum":"f914b8d466f0410db88179181602bec60e776eaf","tarball":"https://registry.npmjs.org/@anjunar/scalajs-ui-forms/-/scalajs-ui-forms-1.0.2.tgz","fileCount":50,"integrity":"sha512-U4knzI2grv3AVE6M2HYZ4wCsWZ7DRHnkPcs/icYoIawHctMf3++g4Rl4zzbLYcNk4f8gRyQKhKRHjUSy7zIx9A==","signatures":[{"sig":"MEUCIQC3Lr7/wkZmdYEt+ag2ZeExSjGYMyKK/2GeWk3cLiqjRQIgO2iCfcDu6qo8ilh8TzrHK1qxwqnu2aEN8hGiQlwjMRM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCUa9OtlUt/vJyx/wNkgyK25B7zEH7PZI3o5SF+vdQa2AIhAJFsnMkH+esgXkcSGhZF6SMln5oX5Oikb3OLGYxSaQ/r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86431},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"192dd9f15ce1652b461173756defb0046fbd9ac4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"npm run typecheck && npm run test && npm run test:consumer","prepack":"npm run build","typecheck":"npm run build && tsc -p tsconfig.test.json","test:watch":"vitest","test:consumer":"vitest run --config vitest.consumer.config.ts"},"_npmUser":{"name":"anjunar","email":"anjunar@gmx.de"},"repository":{"url":"git+https://github.com/anjunar/scalajs-ui.git","type":"git","directory":"npm/scalajs-ui-forms"},"_npmVersion":"11.17.0","description":"The TypeScript forms API of Scala JS UI 1.0: model-bound inputs, validators, field groups, repeating and nested sub-forms, a combo box, and an image cropper, projected onto the ui.forms components that run in the Scala.js runtime published as @anjunar/sca","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","vitest":"^3.2.7","typescript":"^5.6.0","@types/node":"^22.0.0","@anjunar/scalajs-ui":"*","@anjunar/scalajs-ui-core":"*","@anjunar/scalajs-ui-bridge":"*","@anjunar/scalajs-ui-controls":"*","@anjunar/scalajs-ui-viewport":"*"},"peerDependencies":{"@anjunar/scalajs-ui":"^1.0.2","@anjunar/scalajs-ui-core":"^1.0.2","@anjunar/scalajs-ui-bridge":"^1.0.2","@anjunar/scalajs-ui-controls":"^1.0.2","@anjunar/scalajs-ui-viewport":"^1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/scalajs-ui-forms_1.0.2_1789506222545_0.7575266780831738","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@anjunar/scalajs-ui-forms","version":"1.0.3","author":{"name":"Patrick Bittner"},"license":"MIT","_id":"@anjunar/scalajs-ui-forms@1.0.3","maintainers":[{"name":"anjunar","email":"anjunar@gmx.de"}],"homepage":"https://github.com/anjunar/scalajs-ui#readme","bugs":{"url":"https://github.com/anjunar/scalajs-ui/issues"},"dist":{"shasum":"62ddefa8a945ab2f5c4e701de5e69abbf2e0d816","tarball":"https://registry.npmjs.org/@anjunar/scalajs-ui-forms/-/scalajs-ui-forms-1.0.3.tgz","fileCount":50,"integrity":"sha512-tRH2eYaD0LSQFNsLuR5/NWKjy99/iXDFvV+n5eqpVlQUWDi14EueONNCIFHkvd45mEwNuMmvhPDnNM+o7AoHOA==","signatures":[{"sig":"MEUCIQCtViTRB7EqLh7w+prCzc7BgoKllX3Ib9Dz8lK1rRp7NQIgU9//zbTAAF0guGIye8+/atM2OEV3kq3hW6Xjv5cu+Aw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEPNNzVKHAvic5YR/Y4F7O00wRz7ma/VFhFV4X/oB1MCAiEAg2giIxkERCd4Nq+kNWBPasNSji9/t2EMz1l8X1CvHSM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86431},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"81e89fc0d354046d9c9d548e5e1932d7baba0505","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"npm run typecheck && npm run test && npm run test:consumer","prepack":"npm run build","typecheck":"npm run build && tsc -p tsconfig.test.json","test:watch":"vitest","test:consumer":"vitest run --config vitest.consumer.config.ts"},"_npmUser":{"name":"anjunar","email":"anjunar@gmx.de"},"repository":{"url":"git+https://github.com/anjunar/scalajs-ui.git","type":"git","directory":"npm/scalajs-ui-forms"},"_npmVersion":"11.17.0","description":"The TypeScript forms API of Scala JS UI 1.0: model-bound inputs, validators, field groups, repeating and nested sub-forms, a combo box, and an image cropper, projected onto the ui.forms components that run in the Scala.js runtime published as @anjunar/sca","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","vitest":"^3.2.7","typescript":"^5.6.0","@types/node":"^22.0.0","@anjunar/scalajs-ui":"*","@anjunar/scalajs-ui-core":"*","@anjunar/scalajs-ui-bridge":"*","@anjunar/scalajs-ui-controls":"*","@anjunar/scalajs-ui-viewport":"*"},"peerDependencies":{"@anjunar/scalajs-ui":"^1.0.3","@anjunar/scalajs-ui-core":"^1.0.3","@anjunar/scalajs-ui-bridge":"^1.0.3","@anjunar/scalajs-ui-controls":"^1.0.3","@anjunar/scalajs-ui-viewport":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/scalajs-ui-forms_1.0.3_1789553097057_0.32933109096587887","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@anjunar/scalajs-ui-forms","version":"1.0.5","author":{"name":"Patrick Bittner"},"license":"MIT","_id":"@anjunar/scalajs-ui-forms@1.0.5","maintainers":[{"name":"anjunar","email":"anjunar@gmx.de"}],"homepage":"https://github.com/anjunar/scalajs-ui#readme","bugs":{"url":"https://github.com/anjunar/scalajs-ui/issues"},"dist":{"shasum":"f7aff522c1b0f7a67a6758591b4bdf8b250f240d","tarball":"https://registry.npmjs.org/@anjunar/scalajs-ui-forms/-/scalajs-ui-forms-1.0.5.tgz","fileCount":50,"integrity":"sha512-n6Jwa1xG68Kl+BW/HzXzilo3ZM/8n50vztRT8d7m4xOg+Pu+dbLphOvd20kZkIlFYiwXjbU9a+9gFNoHD3VYcg==","signatures":[{"sig":"MEYCIQCDA82rQdTfQT2bPcOp9ICyEKtW1tW2Vl3X1rnmRSGPgAIhAOVtLn8Y9FtEdA1CvsLgYyeeN4krjKqLicGQR22r0WMU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBtJe31eKRpUoNiXe3hP0YQbk1P/24eWF4cVtbi9a2DDAiEAgJa7HYtYVhA6ekE3qdcA7YhTATh0pZ65QsXxWkyi460=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86432},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"13988ebfcf64a17c3b7777ef28c3e55e6d48ddca","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"npm run typecheck && npm run test && npm run test:consumer","prepack":"npm run build","typecheck":"npm run build && tsc -p tsconfig.test.json","test:watch":"vitest","test:consumer":"vitest run --config vitest.consumer.config.ts"},"_npmUser":{"name":"anjunar","email":"anjunar@gmx.de"},"repository":{"url":"git+https://github.com/anjunar/scalajs-ui.git","type":"git","directory":"npm/scalajs-ui-forms"},"_npmVersion":"11.17.0","description":"The TypeScript forms API of Scala JS UI 1.0: model-bound inputs, validators, field groups, repeating and nested sub-forms, a combo box, and an image cropper, projected onto the ui.forms components that run in the Scala.js runtime published as @anjunar/sca","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","vitest":"^3.2.7","typescript":"^5.6.0","@types/node":"^22.0.0","@anjunar/scalajs-ui":"*","@anjunar/scalajs-ui-core":"*","@anjunar/scalajs-ui-bridge":"*","@anjunar/scalajs-ui-controls":"*","@anjunar/scalajs-ui-viewport":"*"},"peerDependencies":{"@anjunar/scalajs-ui":"^1.0.5","@anjunar/scalajs-ui-core":"^1.0.5","@anjunar/scalajs-ui-bridge":"^1.0.5","@anjunar/scalajs-ui-controls":"^1.0.5","@anjunar/scalajs-ui-viewport":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/scalajs-ui-forms_1.0.5_1789736150377_0.3070495826769253","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@anjunar/scalajs-ui-forms","version":"1.0.6","author":{"name":"Patrick Bittner"},"license":"MIT","_id":"@anjunar/scalajs-ui-forms@1.0.6","maintainers":[{"name":"anjunar","email":"anjunar@gmx.de"}],"homepage":"https://github.com/anjunar/scalajs-ui#readme","bugs":{"url":"https://github.com/anjunar/scalajs-ui/issues"},"dist":{"shasum":"86ad04196b7f58411881ebdd41bcf50422e05a8f","tarball":"https://registry.npmjs.org/@anjunar/scalajs-ui-forms/-/scalajs-ui-forms-1.0.6.tgz","fileCount":50,"integrity":"sha512-LBEYTEj7T7A94JaSa48EgzFTFmLEkGNbcKbb0+9bE3UVdTONoNUClkYfO3n4McO0h3xgA861YV4kzdv97V4QpA==","signatures":[{"sig":"MEYCIQDAqXM5xhJRDGsO1SLolfxbTcfmDaGMU03ZsrkQrXEbXwIhAIv+May1NPiYz5ieEYicqtsaE26i9hIGlzZhcY3NXo5B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCAoQ+wTrFUjNsROyAEJYJP6qNMU+jGAwVf1OOtP4ecSQIhAM7Bcxt+HQ6iqQhIMe5CBeBQ2NU8+Ldss0iELIahYpF8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86432},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b5f4e2ac72fff6d18aff21420f18a811c54578e0","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"npm run typecheck && npm run test && npm run test:consumer","prepack":"npm run build","typecheck":"npm run build && tsc -p tsconfig.test.json","test:watch":"vitest","test:consumer":"vitest run --config vitest.consumer.config.ts"},"_npmUser":{"name":"anjunar","email":"anjunar@gmx.de"},"repository":{"url":"git+https://github.com/anjunar/scalajs-ui.git","type":"git","directory":"npm/scalajs-ui-forms"},"_npmVersion":"11.17.0","description":"The TypeScript forms API of Scala JS UI 1.0: model-bound inputs, validators, field groups, repeating and nested sub-forms, a combo box, and an image cropper, projected onto the ui.forms components that run in the Scala.js runtime published as @anjunar/sca","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","vitest":"^3.2.7","typescript":"^5.6.0","@types/node":"^22.0.0","@anjunar/scalajs-ui":"*","@anjunar/scalajs-ui-core":"*","@anjunar/scalajs-ui-bridge":"*","@anjunar/scalajs-ui-controls":"*","@anjunar/scalajs-ui-viewport":"*"},"peerDependencies":{"@anjunar/scalajs-ui":"^1.0.6","@anjunar/scalajs-ui-core":"^1.0.6","@anjunar/scalajs-ui-bridge":"^1.0.6","@anjunar/scalajs-ui-controls":"^1.0.6","@anjunar/scalajs-ui-viewport":"^1.0.6"},"_npmOperationalInternal":{"tmp":"tmp/scalajs-ui-forms_1.0.6_1789958670675_0.5909939661990304","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"_id":"@anjunar/scalajs-ui-forms@1.1.0","bugs":{"url":"https://github.com/anjunar/scalajs-ui/issues"},"dist":{"shasum":"db42b762fc1f8db8c775fcf3c310c05b0cfcfcd6","tarball":"https://registry.npmjs.org/@anjunar/scalajs-ui-forms/-/scalajs-ui-forms-1.1.0.tgz","fileCount":50,"integrity":"sha512-VGy02u+vycmWszHaj8s5lvfyD1Eh3z2KOjU/EjYzXNR9I9YttoJahJinEN+H/URNPXB3xNTky23K9D9hs3CIsg==","signatures":[{"sig":"MEYCIQCoLBRVeT0AkZb/6QyPBfllUZVrRhsdI4PVsBICHFXG0gIhAJV1jwXH9gp2GsHSxDcxKHIacfy6n41tQhbi9jNzJpww","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDyzOvyRM2bn6MhKNUttogXy9oPbuvTHf+uVqtzuc7TdwIgf1L8ixo2JDP9tM2mK8rGvZYQYsVeZ061+mJGfHqm+6s="}],"unpackedSize":86432},"main":"./dist/index.js","name":"@anjunar/scalajs-ui-forms","type":"module","types":"./dist/index.d.ts","author":{"name":"Patrick Bittner"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"a054cd17cb7cb398f4be3461b25c2a5df009a442","license":"MIT","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","verify":"npm run typecheck && npm run test && npm run test:consumer","prepack":"npm run build","typecheck":"npm run build && tsc -p tsconfig.test.json","test:watch":"vitest","test:consumer":"vitest run --config vitest.consumer.config.ts"},"version":"1.1.0","_npmUser":{"name":"anjunar","email":"anjunar@gmx.de"},"homepage":"https://github.com/anjunar/scalajs-ui#readme","repository":{"url":"git+https://github.com/anjunar/scalajs-ui.git","type":"git","directory":"npm/scalajs-ui-forms"},"_npmVersion":"11.17.0","description":"The TypeScript forms API of Scala JS UI 1.0: model-bound inputs, validators, field groups, repeating and nested sub-forms, a combo box, and an image cropper, projected onto the ui.forms components that run in the Scala.js runtime published as @anjunar/sca","directories":{},"maintainers":[{"name":"anjunar","email":"anjunar@gmx.de"}],"sideEffects":false,"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^30.0.1","vitest":"^3.2.7","typescript":"^5.6.0","@types/node":"^22.0.0","@anjunar/scalajs-ui":"*","@anjunar/scalajs-ui-core":"*","@anjunar/scalajs-ui-bridge":"*","@anjunar/scalajs-ui-controls":"*","@anjunar/scalajs-ui-viewport":"*"},"peerDependencies":{"@anjunar/scalajs-ui":"^1.1.0","@anjunar/scalajs-ui-core":"^1.1.0","@anjunar/scalajs-ui-bridge":"^1.1.0","@anjunar/scalajs-ui-controls":"^1.1.0","@anjunar/scalajs-ui-viewport":"^1.1.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scalajs-ui-forms_1.1.0_1790707616952_0.4410161231409955"}}},"time":{"created":"2026-09-11T16:14:12.521Z","modified":"2026-09-29T18:46:57.305Z","1.0.0":"2026-09-11T16:14:12.865Z","1.0.2":"2026-09-15T21:03:42.630Z","1.0.3":"2026-09-16T10:04:57.146Z","1.0.5":"2026-09-18T12:55:50.462Z","1.0.6":"2026-09-21T02:44:30.764Z","1.1.0":"2026-09-29T18:46:57.030Z"},"bugs":{"url":"https://github.com/anjunar/scalajs-ui/issues"},"author":{"name":"Patrick Bittner"},"license":"MIT","homepage":"https://github.com/anjunar/scalajs-ui#readme","repository":{"url":"git+https://github.com/anjunar/scalajs-ui.git","type":"git","directory":"npm/scalajs-ui-forms"},"description":"The TypeScript forms API of Scala JS UI 1.0: model-bound inputs, validators, field groups, repeating and nested sub-forms, a combo box, and an image cropper, projected onto the ui.forms components that run in the Scala.js runtime published as @anjunar/sca","maintainers":[{"name":"anjunar","email":"anjunar@gmx.de"}],"readme":"# @anjunar/scalajs-ui-forms\n\nTyped Scala JS UI 1.0 forms for model-bound inputs, validators, field groups, nested and repeating forms, combo boxes, and image cropper fields.\n\n## Overview\n\nThis package projects `ui.forms` into TypeScript. It does not port validation or DOM behavior: the linked Scala.js runtime performs model binding, validation, input handling, overlays, and crop interaction.\n\n## Installation\n\n```bash\nnpm install @anjunar/scalajs-ui-core @anjunar/scalajs-ui-forms @anjunar/scalajs-ui-controls @anjunar/scalajs-ui-viewport @anjunar/scalajs-ui-bridge @anjunar/scalajs-ui\n```\n\nImport `@anjunar/scalajs-ui-bridge/forms` instead of the bare package to skip installing router/controls/viewport/editor -- see that package's README.\n\n## Quick start\n\n```ts\nimport { property } from \"@anjunar/scalajs-ui-core\";\nimport { email, form, input, inputContainer, notBlank } from \"@anjunar/scalajs-ui-forms\";\n\nconst model = { name: property(\"\"), email: property(\"\") };\n\nconst mounted = form(model, {\n  schema: { name: [notBlank()], email: [email()] },\n}, () => {\n  inputContainer({ label: \"Name\" }, () => input(\"name\"));\n  inputContainer({ label: \"Email\" }, () => input(\"email\", { type: \"email\" }));\n});\n\nmounted.validate();\n```\n\nModels are records or class instances containing one `Property` or `ListProperty` per bindable field. Decorated TypeScript classes can carry validator metadata; explicit schemas are useful for records or dynamic validator lists.\n\n## Usage\n\n- `fieldSet` groups controls and propagates disabled/error state; it does not create a model binding.\n- `arrayForm` repeats a body over a `ListProperty`.\n- `subForm` binds a nested model through a parent `Property`.\n- `comboBox` supports local arrays or list properties and uses a viewport overlay.\n- `imageCropper` maps a `MediaValue` and uses the viewport for its dialog.\n\nThe validators mirror the Scala annotation set: `notNull`, `notBlank`, `notEmpty`, `size`, numeric bounds, decimal bounds, `digits`, `pattern`, `email`, and past/future constraints. Decorator counterparts such as `@NotBlank()` and `@Email()` are exported as well.\n\n## SSR and non-JavaScript behavior\n\nSSR renders native form fields and their values. Hydration adds bidirectional updates, client validation, dropdown behavior, crop interaction, and server-error mapping. Keep the server form usable as HTML when JavaScript is disabled.\n\n## API overview\n\n- `form`, `subForm`, `arrayForm`\n- `input`, `inputContainer`, `fieldSet`\n- `comboBox`, `imageCropper`, `MediaValue`\n- `FormHandle`, `FormOptions`, `FormSchema`, `ValidatorSpec`\n- Validator functions and decorator classes exported from `validators`\n\n## Related modules\n\n- [`@anjunar/scalajs-ui-core`](../scalajs-ui-core/README.md) provides `Property` and lifecycle.\n- [`@anjunar/scalajs-ui-controls`](../scalajs-ui-controls/README.md) provides collection controls.\n- [`@anjunar/scalajs-ui-viewport`](../scalajs-ui-viewport/README.md) hosts dropdowns and dialogs.\n- [`@anjunar/scalajs-ui-editor`](../scalajs-ui-editor/README.md) provides a rich-text form field.\n","readmeFilename":"README.md"}