{"version":3,"sources":["jsdelivr-header.js","/node_modules/tslib/tslib.es6.js","/projects/ngneat/forms-manager/src/lib/utils.ts","/projects/ngneat/forms-manager/src/lib/builders.ts","/projects/ngneat/forms-manager/src/lib/config.ts","/projects/ngneat/forms-manager/src/lib/forms-manager.store.ts","/projects/ngneat/forms-manager/src/lib/isEqual.ts","/projects/ngneat/forms-manager/src/lib/injection-tokens.ts","/projects/ngneat/forms-manager/src/lib/forms-manager.ts","/projects/ngneat/forms-manager/src/lib/validators.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,+1BCkJ6B,OAAO,OAgB9B,SAAU,EAAS,GACrB,IAAI,EAAsB,mBAAX,QAAyB,OAAO,SAAU,EAAI,GAAK,EAAE,GAAI,EAAI,EAC5E,GAAI,EAAG,OAAO,EAAE,KAAK,GACrB,GAAI,GAAyB,iBAAb,EAAE,OAAqB,MAAO,CAC1C,KAAM,WAEF,OADI,GAAK,GAAK,EAAE,SAAQ,OAAI,GACrB,CAAE,MAAO,GAAK,EAAE,KAAM,MAAO,E,GAG5C,MAAM,IAAI,UAAU,EAAI,0BAA4B,kCACxD,CAEgB,SAAA,EAAO,EAAG,GACtB,IAAI,EAAsB,mBAAX,QAAyB,EAAE,OAAO,UACjD,IAAK,EAAG,OAAO,EACf,IAAmB,EAAY,EAA3B,EAAI,EAAE,KAAK,GAAO,EAAK,GAC3B,IACI,WAAc,IAAN,GAAgB,KAAM,MAAQ,EAAI,EAAE,QAAQ,MAAM,EAAG,KAAK,EAAE,MACvE,CACD,MAAO,GAAS,EAAI,CAAE,MAAO,EAAU,CAC/B,QACJ,IACQ,IAAM,EAAE,OAAS,EAAI,EAAU,SAAI,EAAE,KAAK,EACjD,CACO,QAAE,GAAI,EAAG,MAAM,EAAE,KAAQ,CACpC,CACD,OAAO,CACX,C,SAkBgB,EAAc,EAAI,EAAM,GACpC,GAAI,GAA6B,IAArB,UAAU,OAAc,IAAK,IAA4B,EAAxB,EAAI,EAAG,EAAI,EAAK,OAAY,EAAI,EAAG,KACxE,GAAQ,KAAK,IACR,IAAI,EAAK,MAAM,UAAU,MAAM,KAAK,EAAM,EAAG,IAClD,EAAG,GAAK,EAAK,IAGrB,OAAO,EAAG,OAAO,GAAM,MAAM,UAAU,MAAM,KAAK,GACtD,CAqCyB,OAAO,OC7PzB,IAAM,EAAY,SAAI,GAC3B,OAAA,EAAO,KACL,UACE,SAAC,GAA8C,OAAA,OAA8C,IAEhG,EAEG,SAAU,EAAe,GAC7B,OAOO,MAPG,EACD,GAEF,MAAM,QAAQ,GAAS,EAAQ,CAAC,EACzC,CAMM,SAAU,EAAM,GACpB,OAAO,EAAS,GAAc,OAAA,OAAA,GAAA,GAAU,MAAM,QAAQ,GAAQ,EAAA,GAAA,EAAK,IAAS,CAC9E,CAMM,SAAU,EAAS,GACvB,QAAW,MAAP,GAAe,MAAM,QAAQ,KALP,EAK2B,EAJ9C,GAAmD,kBAA1C,OAAO,UAAU,SAAS,KAAK,KAA+B,MAAM,MAQ9D,iBAAR,EATV,IAAsB,CAU5B,CAEA,IAAM,EAAa,CACjB,QACA,WACA,UACA,UACA,SACA,WACA,UACA,SAOF,SAAS,EAAe,EAAY,GAClC,OAAO,EAAI,QAAO,SAAC,EAAK,EAAS,GAE/B,OADA,EAAI,GAAS,EAAW,EAAS,GAC1B,C,GACN,GACL,CAEA,SAAS,EAAW,EAAK,G,QACjB,EAAW,G,IAEjB,IAAkB,IAAA,EAAA,EAAA,OAAO,KAAK,IAAI,EAAA,EAAA,QAAE,EAAA,KAAA,EAAA,EAAA,OAAA,CAA/B,IAAM,EAAG,EAAA,MACN,EAAQ,EAAI,IACF,IAAZ,EAAG,KACD,EAAS,GACX,EAAS,GAAO,EAAW,EAAO,GACzB,MAAM,QAAQ,IAAkB,aAAR,EACjC,EAAS,GAAO,EAAe,EAAO,GAEtC,EAAS,GAAO,EAGrB,C,kGAED,OAAO,CACT,C,SAEgB,IACd,MAAyB,oBAAX,MAChB,CAEM,SAAU,EAAU,G,YAAkB,EAAA,GAAA,EAAA,EAAV,EAAU,UAAA,OAAV,IAAA,EAAU,EAAA,GAAA,UAAA,GAC1C,IAAK,EAAQ,OACX,OAAO,EAET,IAAM,EAAS,EAAQ,QAEvB,GAAI,EAAS,IAAW,EAAS,GAC/B,IAAK,IAAM,KAAO,EACZ,EAAS,EAAO,KACb,EAAO,IACV,OAAO,OAAO,IAAM,EAAA,IAAK,GAAM,GAAE,IAEnC,EAAU,EAAO,GAAM,EAAO,KAE9B,OAAO,OAAO,IAAU,EAAA,IAAC,GAAM,EAAO,GAAI,IAKhD,OAAO,EAAS,WAAA,EAAA,EAAA,CAAC,GAAM,EAAK,IAC9B,CCpGgB,SAAA,EAAoB,EAAwB,G,QACtD,EAEJ,GAAI,aAAmB,cAErB,OADA,EAAQ,EAAW,GAIrB,GAAI,aAAmB,aAAa,aAAmB,YAAW,CAChE,EAAQ,EAAW,G,IAEnB,IAAkB,IAAA,EAAA,EAAA,OAAO,KAAK,EAAQ,WAAS,EAAA,EAAA,QAAE,EAAA,KAAA,EAAA,EAAA,OAAA,CAA5C,IAAM,EAAG,EAAA,MACN,EAAU,EAAQ,SAAS,GAC7B,aAAmB,aAAa,aAAmB,YACrD,EAAM,SAAS,GAAO,EAAQ,EAAM,GAEpC,EAAM,SAAS,GAAO,EAAW,EAEpC,C,kGACF,CAED,OAAO,CACT,CAwCgB,SAAA,EAAY,EAAkB,GACtC,IAAA,EAAA,EAAmB,EAAK,MAAM,MAA7B,EAAK,EAAA,GAAK,EAAI,EAAA,MAAA,GACrB,OAAoB,IAAhB,EAAK,OACA,EAAQ,SAAS,GAGnB,EAAK,QAAO,SAAC,EAAkB,GACpC,OAAO,EAAQ,SAAS,eAAe,GAAQ,EAAQ,SAAS,GAAQ,I,GACvE,EAAQ,SAAS,GACtB,CAEM,SAAU,EAAW,GACzB,IAAM,EAAQ,CACZ,MAAO,EAAM,EAAQ,OACrB,SAAW,EAAgB,YAAe,EAAgB,cAAgB,KAC1E,MAAO,EAAQ,MACf,MAAO,EAAQ,MACf,QAAS,EAAQ,QACjB,SAAU,EAAQ,SAClB,OAAQ,EAAQ,OAChB,QAAS,EAAQ,QACjB,SAAU,EAAQ,SAClB,QAAS,EAAQ,QACjB,UAAW,EAAQ,WAOrB,OAJI,aAAmB,aAAa,aAAmB,eACrD,EAAgB,SAAI,aAAmB,YAAY,GAAK,IAGnD,CACT,CAEM,SAAU,EAAe,GAC7B,KAA0B,IAAnB,EAAQ,QACb,EAAQ,SAAS,EAErB,CC9FA,IAAM,EAAmB,CACvB,QAAS,CACP,IAAK,kBAEP,aAAc,KAoBhB,IAAA,EAAA,WACE,SAAA,EAAoB,QAAA,IAAA,MAA4B,IAA5B,KAAM,OAAN,C,CAKrB,OAHC,EAAK,UAAA,MAAL,SAAM,GACJ,YADI,IAAA,MAA4B,I,SAnBlC,EACA,EACA,GAEA,YAHA,IAAA,MAAoC,IAGpC,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,GACK,GACA,GACA,GAAY,CACf,QACK,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,GAAA,EAAS,SACT,EAAe,SACf,EAAa,UAGtB,CAMW,CAAY,EAAU,KAAK,OAAQ,E,EAE7C,CAAA,CAND,GAQa,EAA0B,IAAI,iBACzC,0BACA,CACE,WAAY,OACZ,QAAS,WACP,OAAO,IAAI,C,IC3CjB,EAAA,WAGE,SAAA,EAAoB,GAAA,KAAK,MAAL,EAClB,KAAK,MAAQ,IAAI,kBAAmB,E,CAkBvC,OAfC,EAAM,UAAA,OAAN,SAAU,GACR,OAAO,KAAK,MAAM,eAAe,KAAK,MAAI,GAAU,yB,EAGtD,EAAA,UAAA,SAAA,WACE,OAAO,KAAK,MAAM,U,EAGpB,EAAG,UAAA,IAAH,SAAI,GACF,KAAK,MAAM,KAAK,E,EAGlB,EAAM,UAAA,OAAN,SAAO,GACL,KAAK,MAAM,KAAK,OAAO,OAAO,GAAI,KAAK,WAAY,G,EAEtD,CAAA,CAtBD,GCFgB,SAAA,EAAQ,EAAG,GACzB,GAAI,IAAM,EACR,OAAO,EAGT,GAAI,GAAK,GAAiB,iBAAL,GAA6B,iBAAL,EAAe,CAC1D,GAAI,EAAE,cAAgB,EAAE,YACtB,OAAO,EAGT,IAAI,EAAQ,EAAG,EACf,GAAI,MAAM,QAAQ,GAAI,CAEpB,IADA,EAAS,EAAE,SACG,EAAE,OACd,OAAO,EAET,IAAK,EAAI,EAAgB,GAAR,KACf,IAAK,EAAQ,EAAE,GAAI,EAAE,IACnB,OAAO,EAGX,OAAO,CACR,CAED,GAAI,EAAE,cAAgB,OACpB,OAAO,EAAE,SAAW,EAAE,QAAU,EAAE,QAAU,EAAE,MAEhD,GAAI,EAAE,UAAY,OAAO,UAAU,QACjC,OAAO,EAAE,YAAc,EAAE,UAE3B,GAAI,EAAE,WAAa,OAAO,UAAU,SAClC,OAAO,EAAE,aAAe,EAAE,WAK5B,IADA,GADA,EAAO,OAAO,KAAK,IACL,UACC,OAAO,KAAK,GAAG,OAC5B,OAAO,EAGT,IAAK,EAAI,EAAgB,GAAR,KACf,IAAK,OAAO,UAAU,eAAe,KAAK,EAAG,EAAK,IAChD,OAAO,EAIX,IAAK,EAAI,EAAgB,GAAR,KAAa,CAC5B,IAAI,EAAM,EAAK,GAEf,IAAK,EAAQ,EAAE,GAAM,EAAE,IACrB,OAAO,CAEV,CAED,OAAO,CACR,CAGD,OAAO,GAAM,GAAK,GAAM,CAC1B,CCrDO,IAAM,EAA6D,IAAI,iBAE5E,wBAAyB,CACzB,WAAY,OACZ,QAAS,WAAM,OAAC,oBAAkB,SAAO,gBAAgB,oBAAiB,CAAU,IAOzE,EAA2D,IAAI,iBAE1E,sBAAuB,CACvB,WAAY,OACZ,QAAS,WAAM,OAAC,oBAAkB,SAAO,gBAAgB,kBAAe,CAAU,IAOvE,EAAwB,IAAI,iBACvC,wBACA,CACE,WAAY,OACZ,QAAS,WACP,OAAA,oBAAkB,SAAO,gBAAgB,SAAO,QAAuB,CAAS,IAQzE,EAAmD,CAC9D,QAAS,EACT,YAAa,GChCT,EAAc,OAAO,eAI3B,EAAA,WAOE,SACuD,EAAA,EACL,GADK,KAAM,OAAN,EACL,KAAc,eAAd,EAP1C,KAAA,eAAsD,IAAI,IAC1D,KAAA,YAAsD,IAAI,IAC1D,KAAA,gBAA8C,IAAI,IAClD,KAAA,UAAY,IAAI,UAMtB,KAAK,MAAQ,IAAI,EAAW,G,QAY9B,EAAA,UAAA,gBAAA,SAAgB,EAAwB,GACtC,OAAO,KAAK,eAAe,EAAM,GAAM,KAAK,OAAI,SAAA,GAAW,OAAA,EAAQ,KAAR,I,EAY7D,EAAO,UAAA,QAAP,SAAQ,GACN,OAAO,KAAK,WAAW,IAAS,KAAK,WAAW,GAAM,K,EAYxD,EAAA,UAAA,aAAA,SAAa,EAAwB,GACnC,OAAO,KAAK,eAAe,EAAM,GAAM,KAAK,OAAI,SAAA,GAAW,OAAA,EAAQ,KAAR,I,EAY7D,EAAA,UAAA,eAAA,SAAe,EAAwB,GACrC,OAAO,KAAK,eAAe,EAAM,GAAM,KAAK,OAAI,SAAA,GAAW,OAAA,EAAQ,QAAR,I,EAe7D,EAAA,UAAA,aAAA,SAAa,EAAwB,GACnC,OAAO,KAAK,eAAe,EAAM,GAAM,KAAK,OAAI,SAAA,GAAW,OAAA,EAAQ,KAAR,I,EAa7D,EAAA,UAAA,cAAA,SAA4B,EAAwB,GAClD,OAAO,KAAK,eAAe,EAAM,GAAM,KAAK,OAAI,SAAA,GAAW,OAAA,EAAQ,MAAR,I,EAkB7D,EAAA,UAAA,eAAA,SAAe,EAAwB,GACrC,IAAM,EAAW,KAAK,MAAM,QAAO,SAAA,GAAS,OAAA,EAAM,EAAY,IAAE,KAAK,GACrE,OAAK,EAIE,EAAS,KACd,OAAI,SAAA,GAAW,OAAA,EAAY,EAAS,EAAK,IACzC,wBAAqB,SAAC,EAAG,GAAM,OAAA,EAAQ,EAAG,EAAE,KALrC,EAAS,KAAK,wBAAqB,SAAC,EAAG,GAAM,OAAA,EAAQ,EAAG,EAAX,I,EAkBxD,EAAmB,UAAA,oBAAnB,SAAoB,GAApB,IAQC,EAAA,KAHC,OAJuC,IAAnC,KAAK,gBAAgB,IAAI,IAC3B,QAAQ,MAAM,qDAAqD,EAAI,YAGlE,KAAK,aAAa,GAAM,KAC7B,OAAI,SAAA,GAAW,OAAqD,IAArD,EAAQ,EAAS,EAAK,gBAAgB,IAAI,GAAgB,I,EAa7E,EAAgB,UAAA,iBAAhB,SAAiB,GACf,OAAO,KAAK,UACT,eACA,KAAK,UAAO,SAAA,GAAe,OAAA,IAAS,GAA+B,UAAhB,CAAuB,I,EAe/E,EAAA,UAAA,WAAA,SAAW,EAAwB,GACjC,OAAK,EAID,KAAK,WAAW,GAEX,EADS,KAAK,WAAW,GACJ,GAGvB,KARE,KAAK,MAAM,WAAW,E,EAwBjC,EAAe,UAAA,gBAAf,SAAgB,GACd,OAAO,KAAK,gBAAgB,IAAI,E,EAalC,EAAA,UAAA,WAAA,SAAW,EAAwB,GACjC,QAAS,KAAK,WAAW,EAAM,E,EAYjC,EAAA,UAAA,WAAA,SACE,EACA,EACA,GAKI,KAAK,YAAY,IAAI,IACvB,KAAK,YAAY,IAAI,GAAM,WAAW,EAAO,E,EAajD,EAAA,UAAA,SAAA,SACE,EACA,EACA,GAKI,KAAK,YAAY,IAAI,IACvB,KAAK,YAAY,IAAI,GAAM,SAAS,EAAO,E,EAa/C,EAAA,UAAA,MAAA,SACE,EACA,EACA,GAKI,KAAK,YAAY,IAAI,IACvB,KAAK,YAAY,IAAI,GAAM,MAAM,EAAO,E,EAa5C,EAAA,UAAA,gBAAA,SAAgB,EAAwB,GACtC,KAAK,gBAAgB,IAAI,EAAM,E,EAYjC,EAAgB,UAAA,iBAAhB,SAAiB,GACX,KAAK,YAAY,IAAI,KACvB,KAAK,YAAY,IAAI,GAAM,mBAE3B,KAAK,YAAY,EAAM,KAAK,YAAY,IAAI,I,EAahD,EAAA,UAAA,cAAA,SACE,EACA,GAKI,KAAK,YAAY,IAAI,KACvB,KAAK,YAAY,IAAI,GAAM,cAAc,GAEzC,KAAK,YAAY,EAAM,KAAK,YAAY,IAAI,I,EAahD,EAAA,UAAA,eAAA,SACE,EACA,GAKA,GAAI,KAAK,YAAY,IAAI,GAAO,CAC9B,IAAI,EAAU,KAAK,YAAY,IAAI,GAEnC,KAAK,uBAAuB,EAAS,GAErC,KAAK,YAAY,EAAM,EACxB,C,EAYH,EAAA,UAAA,YAAA,SACE,EACA,GAKI,KAAK,YAAY,IAAI,KACvB,KAAK,YAAY,IAAI,GAAM,YAAY,GAEvC,KAAK,YAAY,EAAM,KAAK,YAAY,IAAI,I,EAahD,EAAA,UAAA,cAAA,SACE,EACA,GAKI,KAAK,YAAY,IAAI,KACvB,KAAK,YAAY,IAAI,GAAM,cAAc,GAEzC,KAAK,YAAY,EAAM,KAAK,YAAY,IAAI,I,EAahD,EAAA,UAAA,eAAA,SACE,EACA,GAKI,KAAK,YAAY,IAAI,KACvB,KAAK,YAAY,IAAI,GAAM,eAAe,GAE1C,KAAK,YAAY,EAAM,KAAK,YAAY,IAAI,I,EAahD,EAAA,UAAA,gBAAA,SACE,EACA,GAKI,KAAK,YAAY,IAAI,KACvB,KAAK,YAAY,IAAI,GAAM,gBAAgB,GAE3C,KAAK,YAAY,EAAM,KAAK,YAAY,IAAI,I,EAWhD,EAAW,UAAA,YAAX,SAAY,G,QAmBX,EAAA,KAlBC,GAAI,EAAM,CACR,IAAM,EAAQ,EAAY,G,IAC1B,IAAmB,IAAA,EAAA,EAAA,GAAK,EAAA,EAAA,QAAE,EAAA,KAAA,EAAA,EAAA,OAAA,CAArB,IAAM,EAAI,EAAA,MACT,KAAK,eAAe,IAAI,IAC1B,KAAK,eAAe,IAAI,GAAM,cAEhC,KAAK,eAAe,OAAO,GAC3B,KAAK,YAAY,OAAO,GACxB,KAAK,UAAU,KAAK,EACrB,C,kGACF,MACC,KAAK,eAAe,SAAQ,SAAA,GAC1B,EAAa,cACb,EAAK,UAAU,KAAK,QACtB,IACA,KAAK,eAAe,QACpB,KAAK,YAAY,O,EAarB,EAAK,UAAA,MAAL,SAAM,GACJ,EAAO,KAAK,cAAc,GAAQ,KAAK,MAAM,IAAI,IACjD,KAAK,oBACL,KAAK,mBAAmB,E,EAY1B,EAAO,UAAA,QAAP,SAAQ,GACN,KAAK,YAAY,GACjB,KAAK,MAAM,E,EAgBb,EAAA,UAAA,OAAA,SAAO,EAAwB,EAA0B,G,MAwCxD,EAAA,UAxCwD,IAAA,MAAyB,IAChF,IAAM,EAAsC,KAAK,OAAO,MAAM,GAM9D,GAJI,EAAa,mBAAuD,IAAnC,KAAK,gBAAgB,IAAI,IAC5D,KAAK,gBAAgB,EAAM,EAAQ,OAGjC,KAAe,EAAO,eAA0C,IAA1B,KAAK,WAAW,GAAiB,CACzE,IAAM,EAAe,KAAK,eAAe,EAAa,QAAQ,KAC1D,EAAa,IACf,KAAK,MAAM,SAAM,EAAA,IACd,GAAO,EAAU,EAAQ,EAAM,GAAU,EAAa,I,GAG5D,CAGD,IAA8B,IAA1B,KAAK,WAAW,GAClB,EAAQ,WAAW,KAAK,eAAe,EAAM,EAAS,EAAa,mBAAoB,CACrF,WAAW,QAER,CACL,IAAM,EAAQ,KAAK,YAAY,EAAM,GACrC,KAAK,cAAc,EAAM,EAAO,EACjC,CAED,IAAM,EAAc,QAAK,WAAA,EAAA,EAAA,CACvB,EAAQ,cAAc,KAAK,2BAAuB,EAC/C,KAAK,sBAAsB,MAE7B,KAAK,YAAS,SAAA,GAAS,OAAC,IAAU,EAAc,QAAQ,QAAM,EAAa,aAAc,KACzF,WAAU,WACT,IAAM,EAAQ,EAAK,YAAY,EAAM,GACrC,EAAK,cAAc,EAAM,EAAO,EAClC,IAKF,OAHA,KAAK,eAAe,IAAI,EAAM,GAC9B,KAAK,YAAY,IAAI,EAAM,GAEpB,I,EAGD,EAAqB,UAAA,sBAArB,SAAsB,GAC5B,IAAM,EAAU,GAEhB,GAAyB,SAArB,EAAQ,SACV,EAAQ,KAAK,EAAQ,aAAa,KAAK,QAAM,UAI7C,GAFA,EAAQ,KAAK,EAAQ,cAEjB,aAAmB,YACrB,OAAO,OAAO,KAAK,EAAQ,UAAU,QACnC,SAAC,EAAU,GACT,MAA8B,SAA9B,EAAQ,IAAI,GAAK,SACT,IAAA,GAAA,EAAA,IAAU,CAAA,EAAQ,IAAI,GAAK,aAAa,KAAK,QAAM,MACxD,EAAA,GAAA,EAAK,GAFR,GAGF,GAKN,OAAO,C,EAGD,EAAA,UAAA,kBAAA,W,MACa,QAAnB,EAAA,KAAK,sBAAc,IAAA,KAAE,QACnB,KAAK,OAAO,QAAQ,QAAQ,IAC5B,KAAK,UAAU,KAAK,MAAM,Y,EAItB,EAAA,UAAA,cAAA,SAAc,EAAwB,EAAY,G,MACxD,GAAI,KAAe,EAAO,aAAc,CACtC,IAAM,EAAe,KAAK,eAAe,EAAO,QAAQ,KACxD,EAAa,GN/iBb,SAA4B,GAChC,OAAO,EAAW,GAAO,SAAA,GAAO,OAAA,EAAW,SAAS,EAApB,GAClC,CM6iB2B,CAAkB,GACpB,QAAnB,EAAA,KAAK,sBAAc,IAAA,KAAE,QAAQ,EAAO,QAAQ,IAAK,KAAK,UAAU,GACjE,C,EAGK,EAAc,UAAA,eAAd,SAAe,G,MACrB,OAAO,KAAK,OAAyB,QAAnB,EAAA,KAAK,sBAAc,IAAA,OAAA,EAAA,EAAE,QAAQ,KAAQ,K,EAGjD,EAAa,UAAA,cAAb,SAAc,GLjjBR,IAAc,EAAU,EKkjBpC,KAAK,MAAM,KLljBe,EKkjBG,KAAK,MAAM,WLljBJ,EKkjBgB,EAAY,GLjjB3D,OAAO,KAAK,GAAU,QAAO,SAAC,EAAK,GAIxC,OAH2C,IAAvC,EAAS,SAAS,KACpB,EAAI,GAAmB,EAAS,IAE3B,C,GACN,K,EK+iBK,EAAA,UAAA,eAAA,SACN,EACA,EACA,GAEA,IAAM,EAAiB,KAAK,WAAW,GACjC,EAAQ,EAAe,MAG7B,OAAK,EAAe,U,SL1lBtB,EACA,EACA,GAEA,GAAI,aAAmB,YAAW,CAEhC,GADA,EAAe,IACV,EACH,MAAM,IAAI,MAAM,oCAElB,EAAU,SAAQ,SAAC,EAAG,GACnB,OAAA,EAAsB,OAAO,EAAI,EAA+B,GAAG,GAEvE,MACC,OAAO,KAAK,GAAW,SAAQ,SAAA,GAC7B,IAAM,EAAQ,EAAU,GACxB,GAAI,MAAM,QAAQ,IAAU,EAAQ,IAAI,aAAwB,YAAW,CACzE,IAAK,GAAsB,KAAuB,KAAe,GAC/D,MAAM,IAAI,MAAM,wCAAwC,GAE1D,IAAM,EAAU,EAAQ,IAAI,GACtB,EAAK,EAAkB,GAC7B,EAAe,GACf,EAAM,SAAQ,SAAC,EAAG,GAAM,OAAA,EAAQ,OAAO,EAAG,EAAG,GAAG,GACjD,CACH,GAEJ,CKokBI,CAAgB,EAAO,EAAS,GACzB,GAJE,C,EAOH,EAAA,UAAA,YAAA,SAAY,EAAwB,G,MACpC,EAAQ,EAAoB,EAAM,GAKxC,OAJA,KAAK,MAAM,SAAM,EAAA,IACd,GAAO,E,IAGH,C,EAGD,EAAkB,UAAA,mBAAlB,SAAmB,GAAnB,IAIP,EAAA,KAHC,EACI,EAAY,GAAM,SAAQ,SAAA,GAAQ,OAAA,EAAK,gBAAgB,OAAO,EAA5B,IAClC,KAAK,gBAAgB,O,EAGnB,EAAA,UAAA,uBAAA,SACN,EACA,GAFM,IAsBP,EAAA,MAfC,EAAQ,YAAY,GAEhB,aAAmB,aAAa,aAAmB,cACnB,OAAO,KAAK,EAAQ,UAAU,KAC9D,SAAA,GAAe,OAAA,EAAQ,SAAS,EAAY,IAGrC,SAAQ,SAAA,GACf,EAAQ,YAAY,GAEf,EAAkC,UACrC,EAAK,uBAAuB,EAAS,EAEzC,G,IAlpBN,G,mFAAa,EAAc,KAAA,EAAA,MAQH,EAAuB,UAAA,IAAA,MACnC,IAAqB,OAAA,EAAA,gBAAA,aATpB,EAAA,MAAA,EAAA,uBAAA,WAAA,SAAA,QAAA,UAAA,SAAA,EAAA,KAAA,EAAc,WADD,S,kFACb,EAAc,WAAA,E,KAD1B,a,MAAW,CAAE,WAAY,W,2DASrB,Y,MAAY,S,MAAO,M,MAC6C,QAAO,WAAA,E,KAAvE,S,MAAO,M,sKCdI,SACd,EACA,GAEA,EAAQ,cAAc,EAAY,IAClC,EAAQ,wBACV,E,gBAdgB,SACd,EACA,GAEA,EAAQ,cAAc,EAAY,IAClC,EAAQ,wBACV,E","file":"/npm/@ngneat/forms-manager@2.5.1/bundles/ngneat-forms-manager.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@ngneat/forms-manager@2.5.1/bundles/ngneat-forms-manager.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.push(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.push(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nexport type Diff<T, U> = T extends U ? never : T;\n\nexport const filterNil = <T>(source: Observable<T | undefined | null>) =>\n  source.pipe(\n    filter(\n      (value): value is Diff<T, null | undefined> => value !== null && typeof value !== 'undefined'\n    )\n  );\n\nexport function coerceArray<T>(value: T | T[]): T[] {\n  if (isNil(value)) {\n    return [];\n  }\n  return Array.isArray(value) ? value : [value];\n}\n\nexport function isNil(v) {\n  return v === null || v === undefined;\n}\n\nexport function clone(value: any): any {\n  return isObject(value) ? { ...value } : Array.isArray(value) ? [...value] : value;\n}\n\nexport function isValidDate(value: any): boolean {\n  return value && Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value);\n}\n\nexport function isObject(val) {\n  if (val == null || Array.isArray(val) || isValidDate(val)) {\n    return false;\n  }\n\n  return typeof val === 'object';\n}\n\nconst removeKeys = [\n  'dirty',\n  'disabled',\n  'invalid',\n  'pending',\n  'errors',\n  'pristine',\n  'touched',\n  'valid',\n];\n\nexport function filterControlKeys(value) {\n  return filterKeys(value, key => removeKeys.includes(key));\n}\n\nfunction filtrArrayKeys(arr: any[], cb) {\n  return arr.reduce((acc, control, index) => {\n    acc[index] = filterKeys(control, cb);\n    return acc;\n  }, []);\n}\n\nfunction filterKeys(obj, cb) {\n  const filtered = {};\n\n  for (const key of Object.keys(obj)) {\n    const value = obj[key];\n    if (cb(key) === false) {\n      if (isObject(value)) {\n        filtered[key] = filterKeys(value, cb);\n      } else if (Array.isArray(value) && key === 'controls') {\n        filtered[key] = filtrArrayKeys(value, cb);\n      } else {\n        filtered[key] = value;\n      }\n    }\n  }\n\n  return filtered;\n}\n\nexport function isBrowser() {\n  return typeof window !== 'undefined';\n}\n\nexport function mergeDeep(target, ...sources) {\n  if (!sources.length) {\n    return target;\n  }\n  const source = sources.shift();\n\n  if (isObject(target) && isObject(source)) {\n    for (const key in source) {\n      if (isObject(source[key])) {\n        if (!target[key]) {\n          Object.assign(target, { [key]: {} });\n        }\n        mergeDeep(target[key], source[key]);\n      } else {\n        Object.assign(target, { [key]: source[key] });\n      }\n    }\n  }\n\n  return mergeDeep(target, ...sources);\n}\n","import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { Control, ControlFactory, HashMap } from './types';\nimport { clone } from './utils';\n\nexport function toStore<FormsState>(name: keyof FormsState, control: AbstractControl) {\n  let value;\n\n  if (control instanceof FormControl) {\n    value = buildValue(control);\n    return value;\n  }\n\n  if (control instanceof FormGroup || control instanceof FormArray) {\n    value = buildValue(control);\n\n    for (const key of Object.keys(control.controls)) {\n      const current = control.controls[key];\n      if (current instanceof FormGroup || current instanceof FormArray) {\n        value.controls[key] = toStore(name, current);\n      } else {\n        value.controls[key] = buildValue(current);\n      }\n    }\n  }\n\n  return value;\n}\n\nexport function handleFormArray(\n  formValue: HashMap | any[],\n  control: AbstractControl,\n  arrControlFactory: ControlFactory | HashMap<ControlFactory>\n) {\n  if (control instanceof FormArray) {\n    clearFormArray(control as FormArray);\n    if (!arrControlFactory) {\n      throw new Error('Please provide arrControlFactory');\n    }\n    formValue.forEach((v, i) =>\n      (control as FormArray).insert(i, (arrControlFactory as Function)(v))\n    );\n  } else {\n    Object.keys(formValue).forEach(controlName => {\n      const value = formValue[controlName];\n      if (Array.isArray(value) && control.get(controlName) instanceof FormArray) {\n        if (!arrControlFactory || (arrControlFactory && !(controlName in arrControlFactory))) {\n          throw new Error(`Please provide arrControlFactory for ${controlName}`);\n        }\n        const current = control.get(controlName) as FormArray;\n        const fc = arrControlFactory[controlName];\n        clearFormArray(current);\n        value.forEach((v, i) => current.insert(i, fc(v)));\n      }\n    });\n  }\n}\n\nexport function deleteControl(snapshot, controls: any[]) {\n  return Object.keys(snapshot).reduce((acc, currentFormName) => {\n    if (controls.includes(currentFormName) === false) {\n      acc[currentFormName] = snapshot[currentFormName];\n    }\n    return acc;\n  }, {});\n}\n\nexport function findControl(control: Control, path: string) {\n  const [first, ...rest] = path.split('.');\n  if (rest.length === 0) {\n    return control.controls[first];\n  }\n\n  return rest.reduce((current: Control, name: string) => {\n    return current.controls.hasOwnProperty(name) ? current.controls[name] : null;\n  }, control.controls[first]);\n}\n\nexport function buildValue(control: Partial<AbstractControl>): Control {\n  const value = {\n    value: clone(control.value), // Clone object to prevent issue with third party that would be affected by store freezing.\n    rawValue: (control as any).getRawValue ? (control as any).getRawValue() : null,\n    valid: control.valid,\n    dirty: control.dirty,\n    invalid: control.invalid,\n    disabled: control.disabled,\n    errors: control.errors,\n    touched: control.touched,\n    pristine: control.pristine,\n    pending: control.pending,\n    untouched: control.untouched,\n  };\n\n  if (control instanceof FormGroup || control instanceof FormArray) {\n    value['controls'] = control instanceof FormArray ? [] : {};\n  }\n\n  return value;\n}\n\nexport function clearFormArray(control: FormArray) {\n  while (control.length !== 0) {\n    control.removeAt(0);\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type Config = {\n  storage: {\n    key: string;\n  };\n  debounceTime: number;\n};\n\nconst defaults: Config = {\n  storage: {\n    key: 'ngFormsManager',\n  },\n  debounceTime: 300,\n};\n\nexport function mergeConfig(\n  defaults: Config,\n  providerConfig: Partial<Config> = {},\n  inlineConfig: Partial<Config>\n): Config {\n  return {\n    ...defaults,\n    ...providerConfig,\n    ...inlineConfig,\n    storage: {\n      ...defaults.storage,\n      ...providerConfig.storage,\n      ...inlineConfig.storage,\n    },\n  };\n}\n\nexport class NgFormsManagerConfig {\n  constructor(private config: Partial<Config> = {}) {}\n\n  merge(inline: Partial<Config> = {}): Config {\n    return mergeConfig(defaults, this.config, inline);\n  }\n}\n\nexport const NG_FORMS_MANAGER_CONFIG = new InjectionToken<NgFormsManagerConfig>(\n  'NG_FORMS_MANAGER_CONFIG',\n  {\n    providedIn: 'root',\n    factory: () => {\n      return new NgFormsManagerConfig();\n    },\n  }\n);\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nexport class FormsStore<S> {\n  private store: BehaviorSubject<S>;\n\n  constructor(private state: S) {\n    this.store = new BehaviorSubject<S>(state);\n  }\n\n  select<R>(project: (store: S) => R): Observable<R> {\n    return this.store.asObservable().pipe(map(project), distinctUntilChanged());\n  }\n\n  getValue(): S {\n    return this.store.getValue();\n  }\n\n  set(state: S) {\n    this.store.next(state);\n  }\n\n  update(state: Partial<S>) {\n    this.store.next(Object.assign({}, this.getValue(), state));\n  }\n}\n","// https://github.com/epoberezkin/fast-deep-equal\nexport function isEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) {\n      return false;\n    }\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) {\n        return false;\n      }\n      for (i = length; i-- !== 0; ) {\n        if (!isEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    if (a.constructor === RegExp) {\n      return a.source === b.source && a.flags === b.flags;\n    }\n    if (a.valueOf !== Object.prototype.valueOf) {\n      return a.valueOf() === b.valueOf();\n    }\n    if (a.toString !== Object.prototype.toString) {\n      return a.toString() === b.toString();\n    }\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n\n    for (i = length; i-- !== 0; ) {\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n\n    for (i = length; i-- !== 0; ) {\n      var key = keys[i];\n\n      if (!isEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a !== a && b !== b;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, InjectionToken, PLATFORM_ID, Provider } from '@angular/core';\n\n/**\n * Injection Token to safely inject\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage} to Angular DI\n */\nexport const SESSION_STORAGE_TOKEN: InjectionToken<Storage | undefined> = new InjectionToken<\n  Storage | undefined\n>('SESSION_STORAGE_TOKEN', {\n  providedIn: 'root',\n  factory: () => (isPlatformBrowser(inject(PLATFORM_ID)) ? sessionStorage : undefined),\n});\n\n/**\n * Injection Token to safely inject\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage} to Angular DI\n */\nexport const LOCAL_STORAGE_TOKEN: InjectionToken<Storage | undefined> = new InjectionToken<\n  Storage | undefined\n>('LOCAL_STORAGE_TOKEN', {\n  providedIn: 'root',\n  factory: () => (isPlatformBrowser(inject(PLATFORM_ID)) ? localStorage : undefined),\n});\n\n/**\n * Injection Token to inject custom storage approach for persistence; must implement\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Storage} interface\n */\nexport const FORMS_MANAGER_STORAGE = new InjectionToken<Storage | undefined>(\n  'FORMS_MANAGER_STORAGE',\n  {\n    providedIn: 'root',\n    factory: () =>\n      isPlatformBrowser(inject(PLATFORM_ID)) ? inject(LOCAL_STORAGE_TOKEN) : undefined,\n  }\n);\n\n/**\n * Value provider that injects usage of\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage} for persistence\n */\nexport const FORMS_MANAGER_SESSION_STORAGE_PROVIDER: Provider = {\n  provide: FORMS_MANAGER_STORAGE,\n  useExisting: SESSION_STORAGE_TOKEN,\n};\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { EMPTY, merge, Observable, Subject, Subscription, timer } from 'rxjs';\nimport { debounce, distinctUntilChanged, filter, map, mapTo } from 'rxjs/operators';\nimport { deleteControl, findControl, handleFormArray, toStore } from './builders';\nimport { Config, NgFormsManagerConfig, NG_FORMS_MANAGER_CONFIG } from './config';\nimport { FormsStore } from './forms-manager.store';\nimport { isEqual } from './isEqual';\nimport { Control, ControlFactory, FormKeys, HashMap, UpsertConfig } from './types';\nimport { coerceArray, filterControlKeys, filterNil, isBrowser, mergeDeep } from './utils';\nimport { FORMS_MANAGER_STORAGE } from './injection-tokens';\n\nconst NO_DEBOUNCE = Symbol('NO_DEBOUNCE');\n\n// @dynamic; see https://angular.io/guide/angular-compiler-options#strictmetadataemit\n@Injectable({ providedIn: 'root' })\nexport class NgFormsManager<FormsState = any> {\n  private readonly store: FormsStore<FormsState>;\n  private valueChanges$$: Map<keyof FormsState, Subscription> = new Map();\n  private instances$$: Map<keyof FormsState, AbstractControl> = new Map();\n  private initialValues$$: Map<keyof FormsState, any> = new Map();\n  private destroy$$ = new Subject();\n\n  constructor(\n    @Optional() @Inject(NG_FORMS_MANAGER_CONFIG) private config: NgFormsManagerConfig,\n    @Inject(FORMS_MANAGER_STORAGE) private readonly browserStorage?: Storage\n  ) {\n    this.store = new FormsStore({} as FormsState);\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Whether the control is valid\n   *\n   * const valid$ = manager.validityChanges('login');\n   *\n   */\n  validityChanges(name: keyof FormsState, path?: string): Observable<boolean> {\n    return this.controlChanges(name, path).pipe(map(control => control.valid));\n  }\n\n  /**\n   *\n   * Whether the control is valid\n   *\n   * @example\n   *\n   * manager.isValid(name);\n   *\n   */\n  isValid(name: keyof FormsState) {\n    return this.hasControl(name) && this.getControl(name).valid;\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Whether the control is dirty\n   *\n   * const dirty$ = manager.dirtyChanges('login');\n   *\n   */\n  dirtyChanges(name: keyof FormsState, path?: string): Observable<boolean> {\n    return this.controlChanges(name, path).pipe(map(control => control.dirty));\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Whether the control is disabled\n   *\n   * const disabled$ = manager.disableChanges('login');\n   *\n   */\n  disableChanges(name: keyof FormsState, path?: string): Observable<boolean> {\n    return this.controlChanges(name, path).pipe(map(control => control.disabled));\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Observe the control's value\n   *\n   * const value$ = manager.valueChanges('login');\n   * const value$ = manager.valueChanges<string>('login', 'email');\n   *\n   */\n  valueChanges<T = any>(name: keyof FormsState, path: string): Observable<T>;\n  valueChanges<T extends keyof FormsState>(name: T, path?: string): Observable<FormsState[T]>;\n  valueChanges(name: keyof FormsState, path?: string): Observable<any> {\n    return this.controlChanges(name, path).pipe(map(control => control.value));\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Observe the control's errors\n   *\n   * const errors$ = manager.errorsChanges<Errors>('login');\n   * const errors$ = manager.errorsChanges<Errors>('login', 'email');\n   *\n   */\n  errorsChanges<Errors = any>(name: keyof FormsState, path?: string): Observable<Errors> {\n    return this.controlChanges(name, path).pipe(map(control => control.errors as Errors));\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Observe the control's state\n   *\n   * const control$ = manager.controlChanges('login');\n   * const control$ = manager.controlChanges<string>('login', 'email');\n   *\n   */\n  controlChanges<State = any>(name: keyof FormsState, path: string): Observable<Control<State>>;\n  controlChanges<T extends keyof FormsState>(\n    name: T,\n    path?: string\n  ): Observable<Control<FormsState[T]>>;\n  controlChanges(name: keyof FormsState, path?: string): Observable<Control> {\n    const control$ = this.store.select(state => state[name as any]).pipe(filterNil);\n    if (!path) {\n      return control$.pipe(distinctUntilChanged((a, b) => isEqual(a, b)));\n    }\n\n    return control$.pipe(\n      map(control => findControl(control, path)),\n      distinctUntilChanged((a, b) => isEqual(a, b))\n    );\n  }\n\n  /**\n   *\n   * Whether the initial control value is deep equal to current value\n   *\n   * @example\n   *\n   * const dirty$ = manager.initialValueChanged('settings');\n   *\n   */\n  initialValueChanged(name: keyof FormsState): Observable<boolean> {\n    if (this.initialValues$$.has(name) === false) {\n      console.error(`You should set the withInitialValue option to the ${name} control`);\n    }\n\n    return this.valueChanges(name).pipe(\n      map(current => isEqual(current, this.initialValues$$.get(name)) === false)\n    );\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Emits when the control is destroyed\n   *\n   * const control$ = manager.controlChanges('login').pipe(takeUntil(controlDestroyed('login')))\n   *\n   */\n  controlDestroyed(name: keyof FormsState) {\n    return this.destroy$$\n      .asObservable()\n      .pipe(filter(controlName => name === controlName || controlName === '$$ALL'));\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Get the control's state\n   *\n   * const control = manager.getControl('login');\n   * const control = manager.getControl<string>('login', 'email');\n   *\n   */\n  getControl<State = any>(name: keyof FormsState, path: string): Control<State> | null;\n  getControl<T extends keyof FormsState>(name: T, path?: string): Control<FormsState[T]> | null;\n  getControl(name: keyof FormsState, path?: string): Control | null {\n    if (!path) {\n      return this.store.getValue()[name] as any;\n    }\n\n    if (this.hasControl(name)) {\n      const control = this.getControl(name);\n      return findControl(control, path);\n    }\n\n    return null;\n  }\n\n  /**\n   *\n   * Get the initial value for a control\n   *\n   * Will return undefined, if no initial value was returned.\n   *\n   * @example\n   *\n   * manager.getInitialValue('login');\n   *\n   */\n  getInitialValue<State = any>(name: keyof FormsState): State | undefined;\n  getInitialValue<T extends keyof FormsState>(name: keyof FormsState): FormsState[T] | undefined;\n  getInitialValue(name: keyof FormsState): any | undefined {\n    return this.initialValues$$.get(name);\n  }\n\n  /**\n   *\n   * @example\n   *\n   *  Whether the form exists\n   *\n   * manager.hasControl('login');\n   * manager.hasControl('login', 'email');\n   *\n   */\n  hasControl(name: keyof FormsState, path?: string): boolean {\n    return !!this.getControl(name, path);\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `patchValue` method\n   *\n   * manager.patchValue('login', { email: '' });\n   *\n   */\n  patchValue<T extends keyof FormsState>(\n    name: T,\n    value: Partial<FormsState[T]>,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ) {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).patchValue(value, options);\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `setValue` method\n   *\n   * manager.setValue('login', { email: '', name: '' });\n   *\n   */\n  setValue<T extends keyof FormsState>(\n    name: keyof FormsState,\n    value: FormsState[T],\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ) {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).setValue(value, options);\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `reset` method\n   *\n   * manager.reset('login', { email: '' });\n   *\n   */\n  reset<T extends keyof FormsState>(\n    name: T,\n    value?: Partial<FormsState[T]>,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ) {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).reset(value, options);\n    }\n  }\n\n  /**\n   *\n   * Sets the initial value for a control\n   *\n   * @example\n   *\n   * manager.setInitialValue('login', value);\n   *\n   */\n  setInitialValue(name: keyof FormsState, value: any) {\n    this.initialValues$$.set(name, value);\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `markAllAsTouched` method\n   *\n   * manager.markAllAsTouched('login');\n   *\n   */\n  markAllAsTouched(name: keyof FormsState): void {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).markAllAsTouched();\n\n      this.updateStore(name, this.instances$$.get(name));\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `markAsTouched` method\n   *\n   * manager.markAsTouched('login');\n   *\n   */\n  markAsTouched(\n    name: keyof FormsState,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ): void {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).markAsTouched(options);\n\n      this.updateStore(name, this.instances$$.get(name));\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Marks the control and all its descendant controls as dirty.\n   *\n   * manager.markAllAsDirty('login');\n   *\n   */\n  markAllAsDirty(\n    name: keyof FormsState,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ): void {\n    if (this.instances$$.has(name)) {\n      let control = this.instances$$.get(name);\n\n      this.markDescendantsAsDirty(control, options);\n\n      this.updateStore(name, control);\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `markAsDirty` method\n   *\n   * manager.markAsDirty('login');\n   *\n   */\n  markAsDirty(\n    name: keyof FormsState,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ): void {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).markAsDirty(options);\n\n      this.updateStore(name, this.instances$$.get(name));\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `markAsPending` method\n   *\n   * manager.markAsPending('login');\n   *\n   */\n  markAsPending(\n    name: keyof FormsState,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ): void {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).markAsPending(options);\n\n      this.updateStore(name, this.instances$$.get(name));\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `markAsPristine` method\n   *\n   * manager.markAsPristine('login');\n   *\n   */\n  markAsPristine(\n    name: keyof FormsState,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ): void {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).markAsPristine(options);\n\n      this.updateStore(name, this.instances$$.get(name));\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * A proxy to the original `markAsUntouched` method\n   *\n   * manager.markAsUntouched('login');\n   *\n   */\n  markAsUntouched(\n    name: keyof FormsState,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ): void {\n    if (this.instances$$.has(name)) {\n      this.instances$$.get(name).markAsUntouched(options);\n\n      this.updateStore(name, this.instances$$.get(name));\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * manager.unsubscribe('login');\n   *\n   */\n  unsubscribe(name?: FormKeys<FormsState>) {\n    if (name) {\n      const names = coerceArray(name);\n      for (const name of names) {\n        if (this.valueChanges$$.has(name)) {\n          this.valueChanges$$.get(name).unsubscribe();\n        }\n        this.valueChanges$$.delete(name);\n        this.instances$$.delete(name);\n        this.destroy$$.next(name);\n      }\n    } else {\n      this.valueChanges$$.forEach(subscription => {\n        subscription.unsubscribe();\n        this.destroy$$.next('$$ALL');\n      });\n      this.valueChanges$$.clear();\n      this.instances$$.clear();\n    }\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Removes the control from the store and from browser storage\n   *\n   * manager.clear('login');\n   *\n   */\n  clear(name?: FormKeys<FormsState>) {\n    name ? this.deleteControl(name) : this.store.set({} as FormsState);\n    this.removeFromStorage();\n    this.removeInitialValue(name);\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Calls unsubscribe and clear\n   *\n   * manager.destroy('login');\n   *\n   */\n  destroy(name?: FormKeys<FormsState>) {\n    this.unsubscribe(name);\n    this.clear(name);\n  }\n\n  /**\n   *\n   * @example\n   *\n   * Register a control\n   *\n   * manager.upsert('login', this.login);\n   * manager.upsert('login', this.login, { persistState: true });\n   * manager.upsert('login', this.login, { debounceTime: 500 });\n   *\n   * manager.upsert('login', this.login, { arrControlFactory: value => new FormControl('') });\n   *\n   */\n  upsert(name: keyof FormsState, control: AbstractControl, config: UpsertConfig = {}) {\n    const mergedConfig: Config & UpsertConfig = this.config.merge(config);\n\n    if (mergedConfig.withInitialValue && this.initialValues$$.has(name) === false) {\n      this.setInitialValue(name, control.value);\n    }\n\n    if (isBrowser() && config.persistState && this.hasControl(name) === false) {\n      const storageValue = this.getFromStorage(mergedConfig.storage.key);\n      if (storageValue[name]) {\n        this.store.update({\n          [name]: mergeDeep(toStore(name, control), storageValue[name]),\n        } as Partial<FormsState>);\n      }\n    }\n\n    /** If the control already exist, patch the control with the store value */\n    if (this.hasControl(name) === true) {\n      control.patchValue(this.toControlValue(name, control, mergedConfig.arrControlFactory), {\n        emitEvent: false,\n      });\n    } else {\n      const value = this.updateStore(name, control);\n      this.updateStorage(name, value, mergedConfig);\n    }\n\n    const unsubscribe = merge(\n      control.statusChanges.pipe(distinctUntilChanged()),\n      ...this.getValueChangeStreams(control)\n    )\n      .pipe(debounce(value => (value === NO_DEBOUNCE ? EMPTY : timer(mergedConfig.debounceTime))))\n      .subscribe(() => {\n        const value = this.updateStore(name, control);\n        this.updateStorage(name, value, mergedConfig);\n      });\n\n    this.valueChanges$$.set(name, unsubscribe);\n    this.instances$$.set(name, control);\n\n    return this;\n  }\n\n  private getValueChangeStreams(control: AbstractControl) {\n    const streams = [];\n\n    if (control.updateOn === 'blur') {\n      streams.push(control.valueChanges.pipe(mapTo(NO_DEBOUNCE)));\n    } else {\n      streams.push(control.valueChanges);\n\n      if (control instanceof FormGroup) {\n        return Object.keys(control.controls).reduce(\n          (previous, key) =>\n            control.get(key).updateOn === 'blur'\n              ? [...previous, control.get(key).valueChanges.pipe(mapTo(NO_DEBOUNCE))]\n              : [...previous],\n          streams\n        );\n      }\n    }\n\n    return streams;\n  }\n\n  private removeFromStorage() {\n    this.browserStorage?.setItem(\n      this.config.merge().storage.key,\n      JSON.stringify(this.store.getValue())\n    );\n  }\n\n  private updateStorage(name: keyof FormsState, value: any, config) {\n    if (isBrowser() && config.persistState) {\n      const storageValue = this.getFromStorage(config.storage.key);\n      storageValue[name] = filterControlKeys(value);\n      this.browserStorage?.setItem(config.storage.key, JSON.stringify(storageValue));\n    }\n  }\n\n  private getFromStorage(key: string) {\n    return JSON.parse(this.browserStorage?.getItem(key) || '{}');\n  }\n\n  private deleteControl(name: FormKeys<FormsState>) {\n    this.store.set(deleteControl(this.store.getValue(), coerceArray(name)) as FormsState);\n  }\n\n  private toControlValue(\n    name: keyof FormsState,\n    control: AbstractControl,\n    arrControlFactory: ControlFactory | HashMap<ControlFactory>\n  ) {\n    const currentControl = this.getControl(name);\n    const value = currentControl.value;\n\n    /** It means it's not a FormGroup or FormArray */\n    if (!currentControl.controls) {\n      return value;\n    }\n\n    handleFormArray(value, control, arrControlFactory);\n    return value;\n  }\n\n  private updateStore(name: keyof FormsState, control: AbstractControl) {\n    const value = toStore<FormsState>(name, control);\n    this.store.update({\n      [name]: value,\n    } as any);\n\n    return value;\n  }\n\n  private removeInitialValue(name?: FormKeys<FormsState>) {\n    name\n      ? coerceArray(name).forEach(name => this.initialValues$$.delete(name))\n      : this.initialValues$$.clear();\n  }\n\n  private markDescendantsAsDirty(\n    control: AbstractControl,\n    options?: {\n      onlySelf?: boolean;\n      emitEvent?: boolean;\n    }\n  ) {\n    control.markAsDirty(options);\n\n    if (control instanceof FormGroup || control instanceof FormArray) {\n      let controls: AbstractControl[] = Object.keys(control.controls).map(\n        controlName => control.controls[controlName]\n      );\n\n      controls.forEach(control => {\n        control.markAsDirty(options);\n\n        if ((control as FormGroup | FormArray).controls) {\n          this.markDescendantsAsDirty(control, options);\n        }\n      });\n    }\n  }\n}\n","import { AbstractControl, AsyncValidatorFn, ValidatorFn } from '@angular/forms';\nimport { coerceArray } from './utils';\n\nexport function setValidators(\n  control: AbstractControl,\n  validator: ValidatorFn | ValidatorFn[] | null\n) {\n  control.setValidators(coerceArray(validator));\n  control.updateValueAndValidity();\n}\n\nexport function setAsyncValidators(\n  control: AbstractControl,\n  validator: AsyncValidatorFn | AsyncValidatorFn[] | null\n) {\n  control.setValidators(coerceArray(validator));\n  control.updateValueAndValidity();\n}\n"]}