{"_id":"@a.nemreen/dga-dynamic-form","_rev":"15-343533d3df04ff5aca9d67c95c1e1b4c","name":"@a.nemreen/dga-dynamic-form","dist-tags":{"latest":"0.2.4"},"versions":{"0.1.0":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.0","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.0","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"2b581201a14cf648bd49ab98084421f50f48b455","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.0.tgz","fileCount":4,"integrity":"sha512-0BEmcdL4+RLPSqhcEJNGuAheShwVOLmG3AcLxnLZKz/lDUYUiWKxnWjHiIN/EzSemD3Pu3NuRqqa46VWZ+Lg8g==","signatures":[{"sig":"MEYCIQDq8Z7Hq939LfuTrca/djWEODv9tgO/gS9dUfUdsHP3oQIhALUAB225/meE1N6cCo8udcYYSr8QQ8fSNWA8VyfLJCLV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64751},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"3cbf2872d62de22a7b0fe17a7c3f2a1380a9d671","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0","@a.nemreen/dga-tokens":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.0_1784705328921_0.6555773601204049","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.1","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.1","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"a82ce9ce5f195ee5b13b028b89dfc0ce300e6206","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.1.tgz","fileCount":4,"integrity":"sha512-HID3UrRWyeYO42/1D7+SA57QxVnpd+boJrDDtBmcxf88zlLCcO93fMaC5dUuiOxHGoCmZuoHCAIbMU2fL1oIhA==","signatures":[{"sig":"MEUCIQD1xfYEkVNehBM7FnmGUg5E1u42+RQnNf9mOrEuevY3FQIgEAs47Uteid+mWDlo+luqXOS52MsQMHaCfiH8nrFE/BU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71935},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"3cbf2872d62de22a7b0fe17a7c3f2a1380a9d671","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0","@a.nemreen/dga-tokens":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.1_1784707083982_0.3971113622276279","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.2","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.2","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"e1377e6f25524f8fb6a0bd05566f2408c85baeaf","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.2.tgz","fileCount":5,"integrity":"sha512-Q26/PcSiiwi4Nej3elxtKKuZyAwbJ93h7LsZo0s5M0bEoGctscP/WGn/MQtrBxyVumy2BRxBcXuGkd2DOJicMg==","signatures":[{"sig":"MEUCIGFrLSpXHeV8B1cfzKHNlSy7WReeIpBEd0e3GpBAnRUrAiEA9BgAOpMkfqSIeZ7uZFd1SANuvl+py4rYGCcPH4TKVAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76563},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"b0a255da06391cf8f19451f6ea076fcd72160223","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0","@a.nemreen/dga-tokens":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.2_1784710720447_0.12096183696166851","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.3","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.3","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"048f0a02c63752736b0331d142d111c4a163bf58","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.3.tgz","fileCount":5,"integrity":"sha512-g7/4ojT90UiCsaLeAsZzl3yEOulJM/Jj6z5yjjPfWGHC7+5bQML1Bh+ySV6BA3kj+ceh+IpGJi6rdrHyZcxVTg==","signatures":[{"sig":"MEQCIEAMot2JhdN7Dxtx9JLvVXn8v+MGiSWMjQtQFTp73JYzAiBjQqkFkIrGSO+zGKcO8RiyVbBkLkyKZwGH1+ejKcu1Vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76727},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"f623e67866cce9816be4ccb3a56cf168e4d69fd5","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0","@a.nemreen/dga-tokens":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.3_1784715263504_0.1444867824658176","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.4","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.4","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"0955ce354fb58645eedb6da2712e21930190aaaa","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.4.tgz","fileCount":5,"integrity":"sha512-C+EDUoo6MJdh7+8PUgbBCDWONJKWuPIAvFNCERLPX6P4PzTOtLS2uvGZGdadAzGn3mM+nvUpAKbcIpU/BM4YDg==","signatures":[{"sig":"MEQCIBDlKCfFRJIYD6GQCfq+2yBuuVUS/5TgUUEHzZaRJoA7AiAFakF1Jj5q8/oXemgnvNxNvKZzVxWBp/NXIc2Vhw/iUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76727},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"f1464bc3537d3f8184bc1e3e8eb508fa4db61752","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0","@a.nemreen/dga-tokens":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.4_1784744208301_0.8857851915100885","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.5","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.5","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"09f9b92280ac74a70e6fd7d4d3467ce8bc1d5e5d","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.5.tgz","fileCount":5,"integrity":"sha512-R8wttyJ/eojxpfATWB3c2e5ZDSbXVkjJlIhUz51hF4MFrZWEcopbQuUnY7N5Zbm2Zu/o3Xm2OqPUdwl3TvvxFw==","signatures":[{"sig":"MEUCIE7PwqEa+Yd2IjUXXltNZzcd8SdZu/cxCRIdVUyriI0yAiEA6iIqxjP6L/tglqGRrzly6fFh38LIECeGt+Z9H2gPKns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77126},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"fe8746b7d999539fc47e71aea420e6ea6eaed814","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0","@a.nemreen/dga-tokens":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.5_1784788593123_0.4063243326743462","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.6","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.6","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"5ddcade0c64e0c72008c86df52da0bee3558197b","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.6.tgz","fileCount":5,"integrity":"sha512-kYPnlIuV7RyGGJU6kc72BH8OZT28z1sGLQq6XT3tHpjdbY+NZW2UL13ePFeLbUwnGaeacnHo42kOJpBpRNd/RQ==","signatures":[{"sig":"MEQCIGb+Q75vO9prMU8PSF3U9iQ59eB27IWEKiesw0Mkjd/aAiBH1Rt931/H0jgHDWIrkK6mb93vwTUH8BOX2h2bbXicAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77126},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"fe8746b7d999539fc47e71aea420e6ea6eaed814","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0","@a.nemreen/dga-tokens":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.6_1784788994814_0.07123077453679105","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.7","keywords":["angular","dynamic-form","schema-form","reactive-forms","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.7","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"8cff261b638b82936dea36a81e895426ed1d6d23","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.7.tgz","fileCount":5,"integrity":"sha512-89yr9Hsl9/emA0ez0ZGfrDW6Rb3VAGelykeKAMR+nA0l85hyhH11uEGXSrn9EvoIBp9eAz6kR/EBgIF9meqB+Q==","signatures":[{"sig":"MEYCIQCsyL///SA7DaXbgyTcGLjyp1ED2NeaA/rFFMSSVumg9wIhAIGiFiNczkXzQno7UPRqapJiKeInXw1bXnv7zzaSy1QY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79206},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"6842205ccb580ababcbb7186a37d1346282cf790","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven dynamic forms for Angular, rendered with @a.nemreen/dga-ui controls","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.7_1785318398872_0.7180308991736504","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.8","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.8","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"4057588177d9de38250d875962095c1feda7ed1c","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.8.tgz","fileCount":5,"integrity":"sha512-og9e0HgDOSLfxD7bGetqR9cxBHREggC54gmwooWH6SN1AwvDQkBlYHtX3XD3Y5xnYwK0UAtIlmQg6VkaoA5t6g==","signatures":[{"sig":"MEYCIQC6BUzBXehwxBNPjXhRGO3m55FHooQwSWvQYw3WFtvbCAIhAK0+w/EMlvrVWb6ChbiysSk4Ap4e5zN2vhgXZ2gOb7Le","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108258},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"40e249d58b379aaf7ff936a2d0e844d73a287fe0","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.8_1788243608637_0.33397733047285505","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@a.nemreen/dga-dynamic-form","version":"0.1.9","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.1.9","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"defc58160160b9a1eebf8b29d69205d228439c95","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.1.9.tgz","fileCount":5,"integrity":"sha512-uCHMNk6GxU9vCsV3v21WesHJD0xKIjMWtrGkO5+IV6txgHhbxlpcR0YThejt7UewyqRzESadnnqdwhZIt92gPg==","signatures":[{"sig":"MEYCIQC0k6a+zTLsRUccrsa5xmlyxYcpC+/RbaGXNFt0GOHuFgIhAPu+EYY8kjDw21+ZxilXfhmTQ/dBLwxIBvKgFrGV8Hei","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108388},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"248f338bd6f0fb4f4d0b675de96e116530589a3e","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.1.9_1788422970719_0.747553297770013","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@a.nemreen/dga-dynamic-form","version":"0.2.0","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.2.0","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"bce503a2f0313ec93ba77fe6a17fb596cf131ac8","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.2.0.tgz","fileCount":5,"integrity":"sha512-a8VGFU0d6l9f98EGzSftv/gqdZ7fc7KRcz9rev8QR+MWGRqDfREame/mUgRzdDn+1TkWIxQtoQs/jbw52uow7A==","signatures":[{"sig":"MEUCIQDm6PxejIXtKSE83JZU9FAv0Y0RmVuVHKpZjsmWIz+b+gIgWOdzQcOPO7OAtlZa9qtbaokRJwAhbyW7L+UmEHLjZ4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIACBN7EDH0DQrtP0Ss8ahskt3NPEiz76fpgxfdaAn69GAiEA7PTs5eVtzCiIPOZ0tVafPfz4SnGlHyJUDxTVc0orwns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127696},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"b45afc334b2f3a56d44596a4a28a7a9eb2dae4f4","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.2.0_1789367522194_0.9612830866969861","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@a.nemreen/dga-dynamic-form","version":"0.2.1","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.2.1","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"79a32d47e7f8b1eb59f9f85d2f454a8b56a475de","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.2.1.tgz","fileCount":5,"integrity":"sha512-QeU1ph+UnHDdcbPqg5Bone2w/o4uomPXDULyL6W681HjbXz3gcdKPjQbwGwdooLEy0vONqgV5HBCcjDok1Z0Nw==","signatures":[{"sig":"MEUCIQDTZNLV5JyQ4SNMeu8kWMcAv7mSzn9SSvGhizeAoaR6vAIgGOcdBxN712GXE+1W8JHtHZGMbvxIg9WkG80w3at29h0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCvRAUvdP/a03BuQePh/vOGpE3PLhsgE9qUkdC1O3UM6QIhAP4VY0+TgsI4qo9mq4RVZqYvIVZGABOHzSHhjWR8zowo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130951},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"7ce1e1660bb87b1e1b8544051c483a4688c4e4da","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.2.1_1789625258786_0.6056760322512331","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@a.nemreen/dga-dynamic-form","version":"0.2.2","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.2.2","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"f1c57e669b7830b9826ce578812db143ec08ee1d","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.2.2.tgz","fileCount":5,"integrity":"sha512-qzdCZfjS69ktbVK8bs+u5aVUohi9yMJm3fx/jh9TuyjVNveK/94TyD5jQA+fZ03cWEXlMi3yemKvIRPbJyH8mw==","signatures":[{"sig":"MEYCIQDJ+xbkV/VYZs8ucSw0gH00ZJje4wpqHKDCyRF384bPAAIhAP7yi5IO66cztwS9HB9uCUJqanzxRvFXMh7RWHcPYGTt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEPl8t6aYvO8ShuCa3tZG5inAuDtjZ84Uyua0GXXFtu5AiBtLb1Xt28kHxbhEiQTND/52u2i2nKexutT+kVedHHRbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131038},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"7ce1e1660bb87b1e1b8544051c483a4688c4e4da","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.2.2_1789625730473_0.8884609590088077","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@a.nemreen/dga-dynamic-form","version":"0.2.3","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","_id":"@a.nemreen/dga-dynamic-form@0.2.3","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"homepage":"https://nemreen.info/dga/","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"fd3eb5f80e39963cb570f4fffbf2a4b5b8917d2e","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.2.3.tgz","fileCount":5,"integrity":"sha512-57RwIJmuMTTURbJcu0xTw+2cW4J+o4Y3zWoeavscXiwEtR0bBRvbWDv6RT8aq9LIMVe0vZiY47SGfC7n0DzT2A==","signatures":[{"sig":"MEUCIFiJD/kgGSx1qChdodc2VpYSFcQqu3d86M/G8wEyBYspAiEA8v/1hy+WHn2gs+bICCZqiRQFKjrQOXGIX+j5LQlfzLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCggOa0O0fY3GG4tkxhPxClhLayswW0sa7IWFufx+E6gAIhAJlCb/3vyE8QOjtQiEeh+Oi7ICEJFmZFDDjZNteJQV2p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131123},"type":"module","module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"7ce1e1660bb87b1e1b8544051c483a4688c4e4da","typings":"types/a.nemreen-dga-dynamic-form.d.ts","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dga-dynamic-form_0.2.3_1789626412758_0.2798010791444645","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"_id":"@a.nemreen/dga-dynamic-form@0.2.4","bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"dist":{"shasum":"30ceb641d4f5bab71de8dfc95b744327c2967e66","tarball":"https://registry.npmjs.org/@a.nemreen/dga-dynamic-form/-/dga-dynamic-form-0.2.4.tgz","fileCount":5,"integrity":"sha512-MawlJnk7m61PSO4UUp8dMQwBR66U7vafr4KOTsAoomHy+vBz4RTtqn8xD61zIZ7qye/SXqy4kgwhgtNASmO2pw==","signatures":[{"sig":"MEYCIQCTHUelEMzRoZlqTzX/2z6upSNsDTl+t+3Hiy3FHA11iAIhANFcxipIQdXaLN1PkF/f7pL3ttDyodOX39aergy8sL+X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC3QY8gsNWXffzmsXyDOYAtgC+P6JDKNwKRGq+bdxVawgIhAMKjpDGCVLfQEvP75aOG6H4f2UyrjeTwhTV9KYpLwE5x"}],"unpackedSize":131393},"name":"@a.nemreen/dga-dynamic-form","type":"module","author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"module":"fesm2022/a.nemreen-dga-dynamic-form.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./types/a.nemreen-dga-dynamic-form.d.ts","default":"./fesm2022/a.nemreen-dga-dynamic-form.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"4ce0f69cd425d64093ece7867eec782157d26339","license":"MIT","typings":"types/a.nemreen-dga-dynamic-form.d.ts","version":"0.2.4","_npmUser":{"name":"a.nemreen","email":"a.nemreen@gmail.com"},"homepage":"https://nemreen.info/dga/","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"_npmVersion":"11.16.0","description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","directories":{},"maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"tslib":"^2.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/core":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/forms":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@angular/common":"^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0","@a.nemreen/dga-ui":"^0.2.0 || ^0.3.0","@a.nemreen/dga-tokens":"^0.2.0 || ^0.3.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dga-dynamic-form_0.2.4_1789629957471_0.0806556071194211"}}},"time":{"created":"2026-07-22T07:28:48.745Z","modified":"2026-09-17T07:25:57.717Z","0.1.0":"2026-07-22T07:28:49.110Z","0.1.1":"2026-07-22T07:58:04.129Z","0.1.2":"2026-07-22T08:58:40.594Z","0.1.3":"2026-07-22T10:14:23.643Z","0.1.4":"2026-07-22T18:16:48.439Z","0.1.5":"2026-07-23T06:36:33.259Z","0.1.6":"2026-07-23T06:43:14.939Z","0.1.7":"2026-07-29T09:46:39.013Z","0.1.8":"2026-09-01T06:20:08.846Z","0.1.9":"2026-09-03T08:09:30.842Z","0.2.0":"2026-09-14T06:32:02.288Z","0.2.1":"2026-09-17T06:07:38.875Z","0.2.2":"2026-09-17T06:15:30.583Z","0.2.3":"2026-09-17T06:26:52.850Z","0.2.4":"2026-09-17T07:25:57.545Z"},"bugs":{"url":"https://github.com/nemreen/dga-angular/issues"},"author":{"url":"https://nemreen.info","name":"Ahmed Nemreen","email":"a.nemreen@gmail.com"},"license":"MIT","homepage":"https://nemreen.info/dga/","keywords":["angular","dynamic-form","schema-form","reactive-forms","wizard","validators","file-upload","recaptcha","dga","design-system","rtl","arabic","saudi","government","forms"],"repository":{"url":"git+https://github.com/nemreen/dga-angular.git","type":"git","directory":"projects/dga-dynamic-form"},"description":"Schema-driven Angular dynamic forms — 18 field types, wizard, cross-field validators (password, Saudi phone, date range), staged uploads, lookup, reCAPTCHA v3, and conditional visibility. Built on @a.nemreen/dga-ui.","maintainers":[{"name":"a.nemreen","email":"a.nemreen@gmail.com"}],"readme":"# `@a.nemreen/dga-dynamic-form`\n\nSchema-driven dynamic forms for Angular, rendered with [`@a.nemreen/dga-ui`](https://www.npmjs.com/package/@a.nemreen/dga-ui) controls.\n\n**Version 0.2.0** — wizard card chrome, Back / Save as draft actions, and selectable option cards.\n\n## Install\n\n```bash\nnpm install @a.nemreen/dga-dynamic-form @a.nemreen/dga-ui @a.nemreen/dga-tokens\n```\n\n**Peers:** `@angular/core` / `common` / `forms` ^19–22, `@a.nemreen/dga-ui` ^0.2, `@a.nemreen/dga-tokens` ^0.2.\n\n## Setup\n\n```ts\nimport { provideHttpClient } from '@angular/common/http';\nimport { provideDgaDynamicForm } from '@a.nemreen/dga-dynamic-form';\n\nexport const appConfig = {\n  providers: [\n    provideHttpClient(),\n    provideDgaDynamicForm({\n      httpSubmit: true,\n      httpLookup: true,\n      dgaToast: true,\n      allowedOrigins: ['https://api.example.com'],\n    }),\n  ],\n};\n```\n\n**Security:** Treat CMS schemas as untrusted unless `allowedOrigins` is set. HTTP adapters reject non-`http(s)` URLs; same-origin paths (`/api/...`) are always allowed. Validate uploads server-side.\n\n### reCAPTCHA (production HTTP submits)\n\nUse **reCAPTCHA v3** (invisible). There is **no** `type: 'captcha'` field in the form schema.\n\n| Audience | What happens |\n|----------|----------------|\n| **End user** | No checkbox. Submit works like a normal form; Google scores in the background. |\n| **Developer** | Wire `ng-recaptcha` + override `DGA_CAPTCHA_ADAPTER` in `app.config`. |\n| **Backend** | Read `X-Recaptcha-Token` and verify with Google's secret key. |\n\n```bash\nnpm install ng-recaptcha\n```\n\n```ts\n// environments/environment.ts\nexport const environment = {\n  recaptchaSiteKey: '6Lc...your-v3-site-key...',\n};\n```\n\n`provideDgaDynamicForm` registers a **no-op** `DGA_CAPTCHA_ADAPTER` (token is always `null`). Override it after `provideDgaDynamicForm`. On submit the package calls `getToken('submit')` and sends header `X-Recaptcha-Token`.\n\n```ts\nimport { importProvidersFrom } from '@angular/core';\nimport {\n  RECAPTCHA_V3_SITE_KEY,\n  RecaptchaV3Module,\n  ReCaptchaV3Service,\n} from 'ng-recaptcha';\nimport { catchError, of } from 'rxjs';\nimport {\n  DGA_CAPTCHA_ADAPTER,\n  provideDgaDynamicForm,\n} from '@a.nemreen/dga-dynamic-form';\n\nexport const appConfig = {\n  providers: [\n    provideHttpClient(),\n    importProvidersFrom(RecaptchaV3Module),\n    { provide: RECAPTCHA_V3_SITE_KEY, useValue: environment.recaptchaSiteKey },\n    provideDgaDynamicForm({ httpSubmit: true }),\n    {\n      provide: DGA_CAPTCHA_ADAPTER,\n      useFactory: (recaptcha: ReCaptchaV3Service) => ({\n        getToken: (action?: string) => {\n          const googleAction = action === 'submit' ? 'form_submit' : action ?? 'form_submit';\n          return recaptcha.execute(googleAction).pipe(catchError(() => of(null)));\n        },\n      }),\n      deps: [ReCaptchaV3Service],\n    },\n  ],\n};\n```\n\nForm config — set `endpoint` (do **not** use `emitOnly` for live POSTs):\n\n```ts\nreadonly config: DgaDynamicFormConfig = {\n  endpoint: 'https://api.example.com/contact',\n  method: 'POST',\n  fields: [/* no captcha field */],\n};\n```\n\n**Backend:** verify token via `https://www.google.com/recaptcha/api/siteverify` with secret key; check `action === 'form_submit'` and score threshold.\n\n**Troubleshooting:** token null → provide site key + `RecaptchaV3Module`; captcha skipped → form uses `emitOnly`; script blocked → CSP must allow `www.google.com` and `www.gstatic.com`. Use `RecaptchaV3Module` only (not v2 `RecaptchaModule` checkbox).\n\nFull guide: demo `/dynamic-form` → reCAPTCHA section.\n\n```css\n@source \"../node_modules/@a.nemreen/dga-dynamic-form/**/*.{mjs,js}\";\n@source \"../node_modules/@a.nemreen/dga-ui/**/*.{mjs,js}\";\n```\n\n## Quick usage\n\n```ts\nimport { DgaDynamicForm, type DgaDynamicFormConfig } from '@a.nemreen/dga-dynamic-form';\n\nreadonly config: DgaDynamicFormConfig = {\n  endpoint: 'https://api.example.com/contact',\n  method: 'POST',\n  submitButtonLabel: { en: 'Send', ar: 'إرسال' },\n  fields: [\n    {\n      name: 'password',\n      type: 'password',\n      label: { en: 'Password', ar: 'كلمة المرور' },\n      required: true,\n    },\n    {\n      name: 'confirmPassword',\n      type: 'password',\n      label: { en: 'Confirm', ar: 'تأكيد' },\n      required: true,\n      validation: {\n        errorMessages: {\n          passwordMismatch: { en: 'Passwords must match', ar: 'يجب أن تتطابق كلمات المرور' },\n        },\n      },\n    },\n  ],\n};\n```\n\n```html\n<dga-dynamic-form\n  [config]=\"config\"\n  [locale]=\"'ar'\"\n  (formSubmitted)=\"onSubmit($event)\"\n  (fileDownload)=\"onDownload($event)\"\n/>\n```\n\nWhen both `password` and `confirmPassword` fields exist, `passwordMismatch` validation is applied automatically.\n\n---\n\n## Config reference (`DgaDynamicFormConfig`)\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `endpoint` | `string?` | — | Submit URL. Omit or use `emitOnly` to only emit `formSubmitted`. |\n| `method` | `DgaHttpMethod` | `'POST'` | HTTP method for submit adapter. |\n| `emitOnly` | `boolean?` | `false` | Skip HTTP; emit payload on `formSubmitted`. |\n| `fields` | `DgaFormField[]` | **required** | Field list. Can be `[]` when using `wizard.steps` only. |\n| `description` | `DgaFormLabel?` | — | Bilingual text above the form. |\n| `submitButtonLabel` | `DgaFormLabel?` | Submit / إرسال | Primary button label. |\n| `clearButtonLabel` | `DgaFormLabel?` | — | Shows Clear when set. |\n| `saveButtonLabel` | `DgaFormLabel?` | — | Draft save button label. |\n| `successMessage` | `DgaFormLabel?` | — | Toast on success. |\n| `errorMessage` | `DgaFormLabel?` | — | Toast on failure. |\n| `fieldMapping` | `Record<string, string>?` | — | Rename field keys in submit payload. |\n| `payloadTransformer` | `(data) => object \\| FormData` | — | Final reshape before submit. |\n| `formId` | `string?` | — | localStorage namespace for drafts. |\n| `enableLocalStorageSave` | `boolean?` | `false` | Enable Save draft + restore on init. |\n| `idempotencyKey` | `string?` | — | Sent as `Idempotency-Key` header. |\n| `consentBaseUrl` | `string?` | — | CMS base for `consentServiceName` fields → GET `{base}/consents/{name}`. |\n| `wizard` | `DgaWizardConfig?` | — | Multi-step mode (see below). |\n\n`DgaFormLabel` is a map of locale code → string. `en` and `ar` are required; extra keys match `provideDgaLocales` (e.g. `{ en, ar, ur }`). Resolution: exact locale → `en` → `ar` → first non-empty value.\n\n---\n\n## Wizard (`config.wizard`)\n\nWhen `enabled`, the form renders DGA chrome: a numbered stepper with a compact radial step counter, the current step in a card (title, description, optional badge), **Back** (outline, start), **Save as draft** (ghost), and **Next** / **Submit** (primary, end). Reloading restores a local draft behind an info banner when `enableLocalStorageSave` is on.\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `enabled` | `boolean` | — | Turn on stepper UI. |\n| `steps` | `DgaFormStep[]` | — | Ordered steps. |\n| `validateOnStepChange` | `boolean?` | `true` | Block Next if current step invalid. |\n| `allowSkipSteps` | `boolean?` | `false` | Allow jumping ahead in stepper. |\n| `showSaveButton` | `boolean?` | — | Show draft save in wizard chrome. |\n| `autoSave` | `boolean?` | — | When true + `saveEndpoint`, HTTP draft save on Save. |\n| `saveEndpoint` | `string?` | — | Draft HTTP URL. |\n| `saveMethod` | `DgaHttpMethod?` | `'POST'` | Method for `saveEndpoint`. |\n| `nextButtonText` / `previousButtonText` / `submitButtonText` / `saveButtonText` | `DgaFormLabel?` | — | Wizard chrome labels. |\n\n### Step (`DgaFormStep`)\n\n| Key | Type | Description |\n|-----|------|-------------|\n| `id` | `string` | Stable step id. |\n| `title` | `DgaFormLabel` | Stepper title. |\n| `description` | `DgaFormLabel?` | Stepper subtitle. |\n| `fields` | `DgaFormField[]` | Fields in this step. |\n| `optional` | `boolean?` | Skip validation for this step. |\n| `initialData` | `Record<string, unknown>?` | Pre-fill when entering the step. |\n\n---\n\n## Field (`DgaFormField`)\n\n### Built-in `type` values\n\n`text` · `email` · `password` · `textarea` · `number` · `otp` · `phone` · `select` · `multiselect` · `checkbox` · `radio` · `date` · `chips` · `toggle` · `file` · `multifile` · `multifilestaged` · `hidden`\n\nFields named `password` or `confirmPassword` with `type: 'text'` are rendered as password inputs.\n\n### Visibility & conditional required\n\n| Key | Description |\n|-----|-------------|\n| `dependsOn` | Other field that controls visibility. |\n| `showOnValues` | Show when `dependsOn` value is in list. |\n| `showOnTitleEn` / `showOnTitleAr` | Show when selected option label matches. |\n| `showWhenOptionProperty` | Show when selected option has `property === value`. |\n| `extraField` | Show when selected option has `requiresTextInput: true`. |\n| `extraFieldTrigger` | Trigger field for `extraField` (defaults to `dependsOn`). |\n| `requiredWhen` | `{ field, value?, values?, optionProperty?, optionPropertyValue? }` |\n\n### Lookup (remote options)\n\n| Key | Description |\n|-----|-------------|\n| `lookupDomain` | Base URL for lookup adapter. |\n| `lookupName` | Resource → `{domain}/lookup/{name}`. |\n| `lookupFilter` | Client-side filter on loaded options. |\n| `useParentId` | Pass `dependsOn` value as `parentId`; reloads when parent changes. |\n| `searchLookup` | Searchable select; remote search via `DGA_LOOKUP_ADAPTER`. |\n| `searchParamName` | Query param (default `q`). |\n| `minSearchLength` | Min chars before search (default `3` when `searchLookup`). |\n\nHTTP adapter maps `Id/Title`, `Code/Name`, and `{UserName,Email,DisplayName}` shapes. Nested titles keep **every** locale key (`{ En, Ar, Fr }` → `{ en, ar, fr }`). Radio, checkbox, select, and multiselect all use that map. The form then resolves the active locale (`provideDgaLocales` / `[locale]`) → `en` → `ar` → first non-empty value. Select/multiselect show only that locale in the dropdown (`dga-select` renders `keywords` as visible secondary text, so other languages are not copied there).\n\n### Files\n\n| Key | Types | Description |\n|-----|-------|-------------|\n| `acceptedFileTypes` | file, multifile, multifilestaged | e.g. `.pdf,.png`. |\n| `maxFileSize` | all file types | Max bytes per file. |\n| `maxFiles` | all file types | Max file count. |\n| `uploadEndpoint` | multifilestaged | POST staging URL → `{ fileId, fileName? }`. |\n| `deleteEndpoint` | multifilestaged | DELETE/POST removal URL (`:id` / `:fileId`). |\n| `deleteMethod` | multifilestaged | `'DELETE' \\| 'POST'`. |\n\n`multifilestaged` value: `DgaStagedFileRef[]`. Edit mode: `DgaExistingAttachment[]` on file fields.\n\n### Type-specific\n\n| Key | Types | Description |\n|-----|-------|-------------|\n| `minDate` / `maxDate` | date | ISO bounds on picker. |\n| `monthPicker` | date | Month-only mode. |\n| `maxChips` | chips | Max chip count validator. |\n| `allowDuplicates` | chips | Allow duplicate chip values. |\n| `countries` | phone | Extra dial codes after KSA (`+966`). `{ code, label?, name?: { en, ar } }`. Duplicate codes are skipped. Saudi mobile rules still apply to `+966`; other codes only require digits. |\n| `alwaysOpen` | select | `openMode=\"always\"` on `dga-select`. |\n| `optionsLayout` | radio, checkbox | `'stack'` (default), `'grid'`, or `'cards'` (selectable DGA option cards). |\n| `consentServiceName` | checkbox | Fetch label from CMS (`consentBaseUrl`). |\n| `excludeFromDraft` / `sensitive` | any | Strip from localStorage drafts. |\n\n### Validation (`field.validation`)\n\nSupports `pattern`, `minLength`, `maxLength`, `min`, `max`, `minDate`, `maxDate`, `required`.\n\n**Error message keys:** `required`, `pattern`, `minLength`, `maxLength`, `email`, `min`, `max`, `minDate`, `maxDate`, `maxChips`, `invalidFormat`, `invalidPrefix`, `invalidLength`, `passwordMismatch`, `endDateAfterStartDate`, `uploadInProgress`, `maxFiles`.\n\n**Auto cross-field rules:** `password` + `confirmPassword` → match validator; known date pairs (`StartDate`/`EndDate`, `UseCaseStartDate`/`UseCaseEndDate`, `startDate`/`endDate`) → end-after-start.\n\n---\n\n## Component API\n\n| Member | Description |\n|--------|-------------|\n| `[config]` | `DgaDynamicFormConfig` (required). |\n| `[locale]` | `'ar' \\| 'en'` (default from `<html lang>`). |\n| `(formSubmitted)` | HTTP response or payload when `emitOnly` / no endpoint. |\n| `(formError)` | Submit failure. |\n| `(clearButtonClick)` | After Clear. |\n| `(draftSaved)` | After localStorage save. |\n| `(fileDownload)` | Existing attachment download (`DgaExistingAttachment`). |\n| `patchFormValues(values)` | Patch controls; config `value` changes also patch at runtime. |\n| `getForm()` | Returns `FormGroup`. |\n\n---\n\n## Adapters\n\n| Token | Role |\n|-------|------|\n| `DGA_SUBMIT_ADAPTER` | `submit({ endpoint, method, body, headers })` |\n| `DGA_LOOKUP_ADAPTER` | `lookup({ domain, name, parentId?, search?, searchParamName? })` |\n| `DGA_FORM_TOAST_ADAPTER` | `show({ title?, message?, variant? })` |\n| `DGA_CAPTCHA_ADAPTER` | `getToken(action?) → Observable<string \\| null>` |\n| `DGA_FORM_I18N_ADAPTER` | `resolveLabel(label, locale)` |\n| `DGA_HTTP_SECURITY` | `{ allowedOrigins? }` for schema-driven URLs |\n| `DGA_DYNAMIC_FORM_FIELD_REGISTRY` | `{ type, component }[]` custom field renderers |\n\n### Exported utilities\n\n`dgaBuildFormGroup`, `dgaIsFieldVisible`, `dgaIsRequiredWhen`, `dgaApplyCrossFieldValidators`, `dgaSaudiMobileValidator`, `dgaPhoneFieldValidator`, `dgaPasswordMatchValidator`, `dgaAssertSafeHttpUrl`, `createHttpLookupAdapter`, `createHttpSubmitAdapter`.\n\n## License\n\nMIT — see [LICENSE](./LICENSE). Copyright (c) 2026 Ahmed Nemreen.\n","readmeFilename":"README.md"}