{"version":3,"sources":["jsdelivr-header.js","/node_modules/tslib/tslib.es6.js","/projects/ngx-formly-designer/src/lib/formly-designer-config.ts","/projects/ngx-formly-designer/src/lib/extensions/designer.ts","/projects/ngx-formly-designer/src/lib/wrappers/designer.ts","/projects/ngx-formly-designer/src/lib/drag-drop.service.ts","/projects/ngx-formly-designer/src/lib/util.ts","/projects/ngx-formly-designer/src/lib/formly-designer.service.ts","/projects/ngx-formly-designer/src/lib/fields.service.ts","/projects/ngx-formly-designer/src/lib/models.ts","/projects/ngx-formly-designer/src/lib/wrappers/field-designer.ts","/projects/ngx-formly-designer/src/lib/parent.service.ts","/projects/ngx-formly-designer/src/lib/config.ts","/projects/ngx-formly-designer/src/lib/formly-designer.component.ts","/projects/ngx-formly-designer/src/lib/components/field-editor.ts","/projects/ngx-formly-designer/src/lib/components/field-picker.ts","/projects/ngx-formly-designer/src/lib/components/properties.ts","/projects/ngx-formly-designer/src/lib/components/type-select.ts","/projects/ngx-formly-designer/src/lib/components/types.ts","/projects/ngx-formly-designer/src/lib/components/wrapper-editor.ts","/projects/ngx-formly-designer/src/lib/components/wrapper-picker.ts","/projects/ngx-formly-designer/src/lib/components/wrapper-select.ts","/projects/ngx-formly-designer/src/lib/components/wrappers-picker.ts","/projects/ngx-formly-designer/src/lib/json-helper.ts","/projects/ngx-formly-designer/src/lib/pipes/decycle.ts","/projects/ngx-formly-designer/src/lib/formly-designer.module.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;oFCUA,IAAI,EAAgB,SAAS,EAAG,GAI5B,OAHA,EAAgB,OAAO,gBAClB,CAAE,UAAW,cAAgB,OAAS,SAAU,EAAG,GAAK,EAAE,UAAY,CAAE,GACzE,SAAU,EAAG,GAAK,IAAK,IAAI,KAAK,EAAO,OAAO,UAAU,eAAe,KAAK,EAAG,KAAI,EAAE,GAAK,EAAE,GAAG,EAC5F,EAAc,EAAG,EAC5B,E,SAEgB,EAAU,EAAG,GACzB,GAAiB,mBAAN,GAA0B,OAAN,EAC3B,MAAM,IAAI,UAAU,uBAAyB,OAAO,GAAK,iCAE7D,SAAS,IAAO,KAAK,YAAc,CAAE,CADrC,EAAc,EAAG,GAEjB,EAAE,UAAkB,OAAN,EAAa,OAAO,OAAO,IAAM,EAAG,UAAY,EAAE,UAAW,IAAI,EACnF,C,SAwCgB,EAAU,EAAS,EAAY,EAAG,GAE9C,OAAO,IAAK,IAAM,EAAI,WAAU,SAAU,EAAS,GAC/C,SAAS,EAAU,GAAS,IAAM,EAAK,EAAU,KAAK,G,CAAW,MAAO,GAAK,EAAO,E,CAAK,CACzF,SAAS,EAAS,GAAS,IAAM,EAAK,EAAiB,MAAE,G,CAAW,MAAO,GAAK,EAAO,E,CAAK,CAC5F,SAAS,EAAK,GAJlB,IAAe,EAIa,EAAO,KAAO,EAAQ,EAAO,QAJ1C,EAIyD,EAAO,MAJhD,aAAiB,EAAI,EAAQ,IAAI,GAAE,SAAU,GAAW,EAAQ,EAAO,KAIhB,KAAK,EAAW,EAAU,CAC5G,GAAM,EAAY,EAAU,MAAM,EAAS,GAAc,KAAK,O,GAEtE,C,SAEgB,EAAY,EAAS,GACjC,IAAsG,EAAG,EAAG,EAAG,EAA3G,EAAI,CAAE,MAAO,EAAG,KAAM,WAAa,GAAW,EAAP,EAAE,GAAQ,MAAM,EAAE,GAAI,OAAO,EAAE,EAAG,EAAI,KAAM,GAAI,IAAK,IAChG,OAAO,EAAI,CAAE,KAAM,EAAK,GAAI,MAAS,EAAK,GAAI,OAAU,EAAK,IAAwB,mBAAX,SAA0B,EAAE,OAAO,UAAY,WAAa,OAAO,IAAK,GAAK,EACvJ,SAAS,EAAK,GAAK,OAAO,SAAU,GAAK,OACzC,SAAc,GACV,GAAI,EAAG,MAAM,IAAI,UAAU,mCAC3B,KAAO,OACH,GAAI,EAAI,EAAG,IAAM,EAAY,EAAR,EAAG,GAAS,EAAU,OAAI,EAAG,GAAK,EAAS,SAAO,EAAI,EAAU,SAAM,EAAE,KAAK,GAAI,GAAK,EAAE,SAAW,EAAI,EAAE,KAAK,EAAG,EAAG,KAAK,KAAM,OAAO,EAE3J,OADI,EAAI,EAAG,IAAG,EAAK,CAAS,EAAR,EAAG,GAAQ,EAAE,QACzB,EAAG,IACP,KAAK,EAAG,KAAK,EAAG,EAAI,EAAI,MACxB,KAAK,EAAc,OAAX,EAAE,QAAgB,CAAE,MAAO,EAAG,GAAI,MAAM,GAChD,KAAK,EAAG,EAAE,QAAS,EAAI,EAAG,GAAI,EAAK,CAAC,GAAI,SACxC,KAAK,EAAG,EAAK,EAAE,IAAI,MAAO,EAAE,KAAK,MAAO,SACxC,QACI,KAAM,EAAI,EAAE,MAAM,EAAI,EAAE,OAAS,GAAK,EAAE,EAAE,OAAS,KAAkB,IAAV,EAAG,IAAsB,IAAV,EAAG,IAAW,CAAE,EAAI,EAAG,Q,CACjG,GAAc,IAAV,EAAG,MAAc,GAAM,EAAG,GAAK,EAAE,IAAM,EAAG,GAAK,EAAE,IAAM,CAAE,EAAE,MAAQ,EAAG,GAAI,K,CAC9E,GAAc,IAAV,EAAG,IAAY,EAAE,MAAQ,EAAE,GAAI,CAAE,EAAE,MAAQ,EAAE,GAAI,EAAI,EAAI,K,CAC7D,GAAI,GAAK,EAAE,MAAQ,EAAE,GAAI,CAAE,EAAE,MAAQ,EAAE,GAAI,EAAE,IAAI,KAAK,GAAK,K,CACvD,EAAE,IAAI,EAAE,IAAI,MAChB,EAAE,KAAK,MAAO,SAEtB,EAAK,EAAK,KAAK,EAAS,E,CAC1B,MAAO,GAAK,EAAK,CAAC,EAAG,GAAI,EAAI,C,SAAe,EAAI,EAAI,C,CACtD,GAAY,EAAR,EAAG,GAAQ,MAAM,EAAG,GAAI,MAAO,CAAE,MAAO,EAAG,GAAK,EAAG,QAAK,EAAQ,MAAM,E,CArB9B,CAAK,CAAC,EAAG,GAAI,CAAG,CAuBpE,CAE6B,OAAO,O,SAYpB,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,C,SAEgB,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,M,CAExE,MAAO,GAAS,EAAI,CAAE,MAAO,E,SAEzB,IACQ,IAAM,EAAE,OAAS,EAAI,EAAU,SAAI,EAAE,KAAK,E,SAExC,GAAI,EAAG,MAAM,EAAE,K,EAE7B,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,O,IC9MnB,EAA+B,IAAI,iBAAuB,gCAE1D,EAAwB,YACxB,EAA8B,iBAC9B,EAAyB,CACpC,EACA,G,aAKA,SAAA,EACwC,EAC9B,GAFV,IAAA,EAAA,UACwC,IAAA,MAAA,IAC9B,KAAA,eAKV,KAAA,MAAgD,GAChD,KAAA,SAA+C,GAC/C,KAAA,SAA6B,CAAE,eAAe,GAL5C,EAAQ,SAAQ,SAAA,GAAU,OAAA,EAAK,UAAU,EAAO,G,QAOlD,EAAA,UAAA,UAAA,SAAU,GACJ,EAAO,UACT,KAAK,YAAY,EAAO,UAEtB,EAAO,OACT,KAAK,QAAQ,EAAO,OAElB,EAAO,UACT,KAAK,WAAW,EAAO,S,EAI3B,EAAA,UAAA,YAAA,SAAY,QACqB,IAA3B,EAAS,gBACX,KAAK,SAAS,gBAAkB,EAAS,c,EAI7C,EAAA,UAAA,QAAA,SAAQ,GAAR,IAAA,EAAA,KACE,GAAI,MAAM,QAAQ,GAChB,EAAQ,SAAQ,SAAC,GACf,EAAK,QAAQ,E,QAEV,CAEL,KAAK,aAAa,QAAQ,EAAQ,MAE7B,KAAK,MAAM,EAAQ,QACtB,KAAK,MAAM,EAAQ,MAA4B,IAGjD,IAAM,EAAO,KAAK,MAAM,EAAQ,MAChC,EAAK,KAAO,EAAQ,KACpB,EAAK,aAAe,EAAQ,WAC5B,EAAK,aAAe,EAAQ,WAC5B,EAAK,OAAS,EAAQ,M,GAI1B,EAAA,UAAA,WAAA,SAAW,GAAX,IAAA,EAAA,KACE,GAAI,MAAM,QAAQ,GAChB,EAAQ,SAAQ,SAAC,GACf,EAAK,WAAW,E,QAEb,CAEL,KAAK,aAAa,WAAW,EAAQ,MAEhC,KAAK,SAAS,EAAQ,QACzB,KAAK,SAAS,EAAQ,MAAwB,IAGhD,IAAM,EAAU,KAAK,SAAS,EAAQ,MACtC,EAAQ,KAAO,EAAQ,KACvB,EAAQ,OAAS,EAAQ,M,4BAnE9B,e,iEAGI,SAAM,KAAA,CAAC,M,MAdH,gB,mBCKT,SAAA,I,QACE,EAAA,UAAA,aAAA,SAAa,G,OAEe,QAAtB,EAAA,aAAK,EAAL,EAAO,uBAAe,IAAA,OAAA,EAAA,EAAE,eAC1B,EAAM,SAAQ,IAAA,CAAI,GAA2B,EAAM,EAAM,UAAY,KAAE,CAAG,I,2BAL/E,e,kBCID,SAAA,I,sDAAoD,EAAA,EAAA,G,GAAA,gB,oBANnD,YAAS,KAAA,CAAC,CACT,SAAU,0BACV,SAAU,4D,wCAKT,YAAS,KAAA,CAAC,iBAAkB,CAAE,KAAM,mBAAkB,QAAQ,O,iBCPjE,SAAA,IAEmB,KAAA,UAAY,IAAI,kBAA+B,MAC/C,KAAA,YAAc,IAAI,kBAA+B,K,QAElE,OAAA,eAAI,EAAA,UAAA,WAAQ,C,IAAZ,WAAiB,OAAO,KAAK,UAAU,KAAM,E,gCAE7C,OAAA,eAAI,EAAA,UAAA,YAAS,C,IAAb,WACE,OAAO,KAAK,UAAU,c,kCAGxB,OAAA,eAAI,EAAA,UAAA,aAAU,C,IAAd,WAAkC,OAAO,KAAK,YAAY,KAAM,E,IAEhE,SAAe,GACb,KAAK,YAAY,KAAK,E,kCAGxB,OAAA,eAAI,EAAA,UAAA,cAAW,C,IAAf,WACE,OAAO,KAAK,YAAY,c,kCAG1B,EAAA,UAAA,UAAA,SAAU,GACO,MAAX,IAGJ,QAAQ,OAAgC,OAAzB,KAAK,UAAU,OAC9B,KAAK,UAAU,KAAK,G,EAGtB,EAAA,UAAA,QAAA,WAC8B,MAAxB,KAAK,UAAU,OACjB,KAAK,UAAU,KAAK,K,2BA/BzB,eCCD,IAAM,EAAoB,yB,SAGV,EAAW,G,QAEzB,IAAW,EAAO,IAA4B,EAAO,GAAmB,MAAQ,EAAM,IAAK,CACzF,IAAI,EAA+B,GACnC,GAAI,EAAM,IAAK,CAEb,IAAM,EAAe,EAAQ,EAAM,KAAO,EAAM,IAAM,EAAM,IAAI,WAAW,MAAM,K,IACjF,IAAwB,IAAA,EAAA,EAAA,GAAY,EAAA,EAAA,QAAA,EAAA,KAAA,EAAA,EAAA,OAAE,CACT,iBADpB,EAAW,EAAA,QAGhB,EAAc,EAAY,QAAQ,aAAc,OAChD,EAAU,EAAQ,OAAO,EAAY,MAAM,OAE3C,EAAQ,KAAK,E,mGAGjB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,IAAM,EACqB,iBADrB,EAAc,EAAQ,KACW,QAAQ,KAAK,KAClD,EAAQ,GAAK,SAAS,EAAa,I,EAInC,EAAO,GAAqB,CAChC,IAAK,EAAM,IACX,KAAM,E,CAIV,OAAa,EAAO,GAAmB,KAAK,OAC9C,CAOO,ICpCK,EDoCC,EAAU,MAAM,QA0BhB,EAAW,SAAC,GAAsB,OAAO,MAAP,GAA8B,iBAAR,CAAgB,EAExE,EAAW,SAAC,GAAsB,MAAe,iBAAR,GAAoB,aAAe,MAAM,E,aEjE7F,SAAA,EACU,GAAA,KAAA,sB,QAGV,EAAA,UAAA,eAAA,SAAe,EAA0B,GACvC,IAAI,EAA+B,GACnC,GAAI,GAAS,EAAM,IAAK,CACtB,IAAM,EAAU,IAAI,IACpB,KAAK,eAAe,GAAQ,SAAC,EAAG,EAAM,GACpC,GAAU,EAAQ,IAAI,EAAG,E,IAG3B,EAAU,EAAW,GAErB,IADA,IAAI,EAAM,EAAQ,IAAI,GACf,GACL,EAAU,EAAW,GAAK,OAAO,GACjC,EAAM,EAAQ,IAAI,E,CAGtB,OAAO,C,EAGT,EAAA,UAAA,cAAA,SAAc,GACZ,OAAO,KAAK,UAAU,EAAM,O,EAG9B,EAAA,UAAA,iBAAA,SAAiB,GACf,OAAO,EAAU,KAAK,UAAU,EAAS,WAAa,E,EAGxD,EAAA,UAAA,WAAA,SAAW,EAA0B,EAA6B,GAChE,GAAiB,MAAb,EAAM,KAAgB,EAAS,EAAM,OAAS,EAAM,KAAS,EAAQ,EAAM,OAAS,EAAM,IAAI,OAChG,OAAO,EAET,IAAM,EAAkB,IAAI,IACtB,EAAU,KAAK,eAAe,GAAU,GAAI,GAAQ,OAAO,EAAW,IACtE,EAAS,EAAQ,OACvB,OAAQ,KAAK,eAAe,GAAQ,SAAC,EAAG,GACtC,IAAM,EAAO,EAAgB,IAAI,IAAM,EAAgB,IAAI,GAAI,GAAK,IAAI,OAAO,EAAW,KAAK,IAAI,GACnG,IAAI,aAAI,EAAJ,EAAM,UAAW,EAArB,CAGA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAC1B,GAAI,EAAK,KAAO,EAAQ,GACtB,OAGJ,OFd0C,EEcjB,MFdL,EEcF,GFbX,aAAgB,EAAE,aAAiB,EAAE,aAAgB,EAAE,Y,IAD1C,EAAsB,C,MEkB9C,EAAA,UAAA,KAAA,SAAK,EAAmB,G,MACtB,GAAK,GAAO,EAAQ,GAIpB,IADA,IAAM,EAAQ,EAAO,QACd,EAAM,QAAQ,CACnB,IAAM,EAAQ,EAAM,MACpB,IAAyB,QAArB,EAAA,EAAM,uBAAe,IAAA,OAAA,EAAA,EAAE,eAAgB,EACzC,OAAO,EAEL,EAAM,WACR,EAAM,KAAK,EAAM,YACR,EAAM,YACf,EAAM,KAAI,MAAV,EAAK,EAAA,GAAA,EAAS,EAAM,a,GAO1B,EAAA,UAAA,UAAA,SAAU,EAA0B,EAA6B,GAC/D,GAAK,GAAU,EAAf,CAGA,IAAM,EAAkB,IAAI,IACtB,EAAU,KAAK,eAAe,GAAU,GAAI,GAAQ,OAAO,EAAW,IACtE,EAAS,EAAQ,OACvB,OAAO,KAAK,eAAe,GAAQ,SAAC,EAAG,GACrC,IAAM,EAAO,EAAgB,IAAI,IAAM,EAAgB,IAAI,GAAI,GAAK,IAAI,OAAO,EAAW,KAAK,IAAI,GACnG,IAAI,aAAI,EAAJ,EAAM,UAAW,EAGrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAC1B,GAAI,EAAK,KAAO,EAAQ,GACtB,OAAO,C,MAOf,EAAA,UAAA,YAAA,SAAY,EAA0B,GFxBZ,IACtB,EACA,EE0CF,OAnBA,EAAM,gBAAe,OAAA,OAAA,GAAQ,EAAM,iBAC9B,GAAgB,EAAM,gBAAgB,cACzC,EAAM,gBAAgB,aF1BtB,GAAI,IAAI,MAAO,UACf,GAAiB,OAAX,kBAAW,IAAX,iBAAW,EAAX,YAAa,MAA4B,IAApB,YAAY,OAAkB,EACtD,uCAAuC,QAAQ,SAAS,SAAA,GAC7D,IAAI,EAAoB,GAAhB,KAAK,SAQb,OAPI,EAAI,GACN,GAAK,EAAI,GAAK,GAAK,EACnB,EAAI,KAAK,MAAM,EAAI,MAEnB,GAAK,EAAK,GAAK,GAAK,EACpB,EAAK,KAAK,MAAM,EAAK,MAEV,KAAL,EAAW,EAAS,EAAJ,EAAU,GAAM,SAAS,G,MEiB7C,EAAM,WACR,KAAK,aAAa,EAAM,WAAY,GAC3B,EAAM,YAAc,EAAM,WAAW,aAC1C,EACF,KAAK,YAAY,EAAM,WAAY,IAGnC,EAAM,gBAAgB,YAAc,CAAE,KAAM,EAAM,MAClD,EAAM,WAAa,EAAM,WAAW,kBAC7B,EAAM,kBACN,EAAM,KAEb,KAAK,aAAa,EAAM,WAAY,KAGjC,C,EAGT,EAAA,UAAA,aAAA,SAAa,EAA6B,GAA1C,IAAA,EAAA,KACE,EAAO,SAAQ,SAAA,GAAS,OAAA,EAAK,YAAY,EAAO,EAAa,G,EAG/D,EAAA,UAAA,eAAA,SAAe,EACb,EACA,EACA,G,QACA,EAAO,GAAQ,G,IACf,IAAoB,IAAA,EAAA,EAAA,GAAM,EAAA,EAAA,QAAA,EAAA,KAAA,EAAA,EAAA,OAAE,CAAvB,IAAM,EAAK,EAAA,MACR,EAAQ,EAAS,EAAO,EAAM,GACpC,GAAI,EACF,OAAO,EAET,GAAI,EAAM,WAAY,CACpB,IAAM,EAAa,KAAK,eAAe,CAAC,EAAM,YAAa,EAAU,EAAK,OAAO,EAAW,IAAS,GACrG,GAAI,EACF,OAAO,C,MAEJ,GAAI,EAAM,WAAY,CAC3B,IAAM,EAAa,KAAK,eAAe,EAAM,WAAY,EAAU,EAAK,OAAO,EAAW,IAAS,GACnG,GAAI,EACF,OAAO,C,sGAMP,EAAA,UAAA,UAAA,SAAU,EAAc,G,MACxB,EAA4C,QAAnC,EAAA,KAAK,mBAAmB,GAAM,UAAK,IAAA,OAAA,EAAA,EAAE,OACpD,OAAK,GAGL,KAAK,aAAa,YAAU,IAAS,GAC9B,GAHE,E,EAMH,EAAA,UAAA,mBAAA,SAAmB,GACzB,MAAa,SAAT,EACK,KAAK,qBAAqB,MAEtB,YAAT,EACK,KAAK,qBAAqB,SAE5B,E,2BAjKV,e,yCAHwB,G,EDMb,gDAAS,KACnB,EAAA,iBACA,IAAA,uB,IEVU,E,aFeV,SAAA,EACU,EACA,EACA,GAFA,KAAA,iBACA,KAAA,gBACA,KAAA,eAGO,KAAA,UAAY,IAAI,mBAAyB,GACzC,KAAA,gBAAkB,IAAI,kBAAqC,IAC3D,KAAA,QAAU,IAAI,kBAAqC,IACnD,KAAA,eAAiB,IAAI,kBAA0C,MAC/D,KAAA,OAAS,IAAI,kBAAqB,G,QAEnD,OAAA,eAAI,EAAA,UAAA,WAAQ,C,IAAZ,WACE,OAAO,KAAK,UAAU,K,MAGxB,SAAa,GACX,KAAK,UAAU,OAAO,E,kCAGxB,OAAA,eAAI,EAAA,UAAA,YAAS,C,IAAb,WACE,OAAO,KAAK,UAAU,c,kCAGxB,OAAA,eAAI,EAAA,UAAA,iBAAc,C,IAAlB,WACE,OAAO,KAAK,eAAe,c,kCAG7B,OAAA,eAAI,EAAA,UAAA,qBAAkB,C,IAAtB,W,QACE,OAAsD,QAA/C,EAA8B,QAA9B,EAAA,KAAK,eAAe,kBAAU,IAAA,OAAA,EAAA,EAAE,uBAAe,IAAA,OAAA,EAAA,EAAE,W,kCAG1D,OAAA,eAAI,EAAA,UAAA,iBAAc,C,IAAlB,WACE,OAAO,KAAK,gBAAgB,K,MAG9B,SAAmB,GAGjB,IAAM,EAAS,EAAQ,GAAS,YAAU,GAAS,GAC7C,EAAiB,KAAK,mBAAmB,EAAQ,YAAU,UACjE,KAAK,gBAAgB,KAAK,GAC1B,KAAK,QAAQ,KAAK,KAAK,mBAAmB,YAAU,GAAiB,YAAU,O,kCAGjF,OAAA,eAAI,EAAA,UAAA,kBAAe,C,IAAnB,WACE,OAAO,KAAK,gBAAgB,c,kCAG9B,OAAA,eAAI,EAAA,UAAA,SAAM,C,IAAV,WACE,OAAO,KAAK,QAAQ,K,MAGtB,SAAW,GAGT,IAAM,EAAS,YAAU,GACnB,EAAiB,KAAK,mBAAmB,EAAQ,YAAU,UACjE,KAAK,cAAc,aAAa,GAAgB,GAChD,KAAK,eAAe,KAAK,MACzB,KAAK,gBAAgB,KAAK,GAC1B,KAAK,QAAQ,KAAK,KAAK,mBAAmB,YAAU,GAAiB,YAAU,O,kCAGjF,OAAA,eAAI,EAAA,UAAA,UAAO,C,IAAX,WACE,OAAO,KAAK,QAAQ,c,kCAGtB,OAAA,eAAI,EAAA,UAAA,QAAK,C,IAAT,WACE,OAAO,KAAK,OAAO,K,MAGrB,SAAU,GACR,KAAK,OAAO,KAAc,MAAT,EAAgB,GAAK,E,kCAGxC,OAAA,eAAI,EAAA,UAAA,SAAM,C,IAAV,WACE,OAAO,KAAK,OAAO,c,kCAGrB,EAAA,UAAA,SAAA,SAAS,EAA0B,GACjC,KAAK,cAAc,YAAY,GAAO,GAEtC,IAAM,EAAS,YAAU,KAAK,gBACxB,EAAuB,MAAT,GAAiB,MAAM,GAAU,KAAK,OAAO,OAC/D,KAAK,IAAI,KAAK,OAAO,OAAQ,KAAK,IAAI,EAAG,IAE3C,EAAO,OAAO,EAAY,EAAG,GAE7B,KAAK,aAAa,E,EAGpB,EAAA,UAAA,YAAA,SAAY,GACV,IAAM,EAAQ,GACD,iBAAT,IACF,EAAM,KAAO,GAEf,IAAM,EAAe,KAAK,eAAe,MAAM,GAO/C,OANI,aAAY,EAAZ,EAAc,cAChB,EAAM,WAAa,CAAE,WAAY,MAEtB,iBAAT,IAA2B,aAAY,EAAZ,EAAc,eAC3C,EAAM,WAAa,IAEd,C,EAGT,EAAA,UAAA,cAAA,SAAc,GACZ,KAAK,eAAe,KAAK,E,EAG3B,EAAA,UAAA,YAAA,SAAY,G,MACV,KAAK,WAAW,GAChB,IAAM,EAAkC,QAArB,EAAA,EAAM,uBAAe,IAAA,OAAA,EAAA,EAAE,YACtC,KAAK,aAAa,EAAY,KAAM,KAAK,iBAC3C,KAAK,cAAc,EAAM,aAE3B,KAAK,c,EAGP,EAAA,UAAA,YAAA,SAAY,EAAoC,G,MACxC,EAAS,KAAK,cAAc,YAAY,KAAK,kBAAkB,IAAW,GAC1E,EAAsC,QAAzB,EAAA,aAAQ,EAAR,EAAU,uBAAe,IAAA,OAAA,EAAA,EAAE,YAC1C,KAAK,aAAa,EAAY,EAAQ,KAAK,kBACzC,GAAY,EAAS,cAAgB,EAAO,cAC9C,KAAK,WAAW,GAChB,KAAK,cAAc,EAAS,cAE9B,KAAK,e,EAIT,EAAA,UAAA,YAAA,SAAY,G,MACV,IAAK,IAAU,EAAQ,EAAM,UAC3B,MAAO,GAGT,IAAM,EAAc,YAAU,GAC1B,EAAW,EAAY,SAAY,EAAY,UAAY,GACzD,EAA0D,QAA1C,EAAA,KAAK,eAAe,SAAS,qBAAa,IAAA,IAAA,SAAM,EAAS,GAAM,MAAY,eAAZ,CAAwB,EACzG,GDvFwD,mBCuF5B,IAC9B,EAAW,EAAS,QAAO,SAAA,GAAK,OAAA,EAAc,EAAG,EAAY,KAI/D,IACM,GADkB,EAAM,MAAQ,KAAK,aAAa,QAAQ,EAAM,MAAM,UAAa,IAEtF,OAAO,KAAK,aAAa,qBAAqB,WAAW,KAAI,SAAA,GAAK,OAAA,EAAE,EAAY,KAChF,OAAO,KAAK,aAAa,qBAAqB,YAAY,KAAI,SAAA,GAAK,OAAA,EAAE,EAAY,KACjF,OAAO,GAGV,GAAI,EAAa,OAAS,EACxB,IAAK,IAAI,EAAI,EAAS,OAAS,EAAG,GAAK,EAAG,IACxC,IAAK,IAAI,EAAI,EAAa,OAAS,EAAG,GAAK,EAAG,IAC5C,GAAI,EAAS,KAAO,EAAa,GAAI,CACnC,EAAa,OAAO,EAAG,GACvB,EAAS,OAAO,EAAG,GACnB,K,CAKR,OAAO,C,EAIT,EAAA,UAAA,kBAAA,SAAkB,EAA0B,GAA5C,I,EAAA,EAAA,UAA4C,IAAA,MAAY,YAAU,UAChE,IA0BI,EA1BE,EAAe,KAAK,gBAAgB,GACpC,EDzIa,SAAC,GACtB,GAAW,MAAP,EACF,OAAO,EACF,GAAmB,mBAAR,GAAqC,iBAAR,GAAmC,kBAAR,GAChC,kBAAxC,OAAO,UAAU,SAAS,KAAK,GAC/B,OAAO,EACF,GAAmB,IAAf,EAAI,OACb,OAAO,EACF,GAAmB,iBAAR,EAAkB,CAGlC,IAAI,GAAI,EACR,IAAK,IAAM,KAAK,EACd,GAAI,EAEN,OAAO,C,CAGT,OAAO,CACT,CCsHsC,CAAQ,EAAM,KAAO,GAAK,CAAE,IAAK,EAAM,KAezE,GAbI,IACF,EAAO,KAAO,EAAa,KACvB,IAAc,YAAU,WAAiC,QAArB,EAAA,EAAM,uBAAe,IAAA,OAAA,EAAA,EAAE,eAC7D,EAAO,gBAAkB,CAAE,YAAa,EAAM,gBAAgB,cAEhE,KAAK,gBAAgB,EAAO,EAAQ,EAAa,QAC7C,EAAa,aACf,EAAO,WAAa,CAClB,WAAY,KAAK,mBAAmB,EAAM,WAAY,MAKxD,EAAQ,EAAM,cAAgB,EAAQ,EAAO,YAAa,CAC5D,EAAO,WAAa,KAAK,mBAAmB,EAAM,WAAY,GAE9D,IAAI,OAA2B,EAC3B,EAAS,EAAM,uBAChB,EAAuB,EAAM,oBAA+B,QAAQ,OAAS,IAC9E,EAAO,oBAAsB,E,CAK7B,EAAS,EAAM,aAAe,EAAa,EAAM,UAAqB,QAAQ,OAAS,IACzF,EAAO,UAAY,GAGrB,IAAM,EAAW,KAAK,YAAY,GAClC,GAAI,EAAS,OAAS,EAAG,CACvB,EAAO,SAAW,EAClB,IAAM,EAAwB,EAAS,KAAI,SAAA,GAAW,OAAA,EAAK,eAAe,SAAS,EAAQ,IACxF,QAAO,SAAA,GAAkB,OAAA,GAAkB,EAAQ,EAAe,OAAO,IACzE,QAA4B,SAAC,EAAU,GAAY,OAAA,EAAS,OAAO,EAAQ,QAAU,GAAG,GAAE,IAC7F,KAAK,gBAAgB,EAAO,EAAQ,E,CAEtC,OAAO,C,EAIT,EAAA,UAAA,mBAAA,SAAmB,EAAyC,GAA5D,IAAA,EAAA,UAA4D,IAAA,MAAY,YAAU,UAChF,IAAM,EAAoC,GAc1C,OAbI,EAAQ,IACV,EAAO,SAAQ,SAAA,GACb,IAAM,EAAS,EAAK,kBAAkB,EAAO,GACzC,EAAM,WACR,EAAO,WAAa,EAAK,kBAAkB,EAAM,WAAY,GACpD,EAAM,aAAe,EAAO,aACrC,EAAO,WAAa,EAAK,mBAAmB,EAAM,WAAY,IAE5D,OAAO,KAAK,GAAQ,OAAS,GAC/B,EAAa,KAAK,E,IAIjB,C,EAGT,EAAA,UAAA,YAAA,SAAY,GACV,MAAa,iBAAT,EACK,aAEF,UAAQ,E,EAGT,EAAA,UAAA,gBAAA,SAAgB,EAA0B,EAA6B,GACzE,EAAQ,IACV,EAAe,SAAQ,SAAA,GACrB,IAAM,EAAM,EAAc,IAC1B,GAAW,MAAP,EAAJ,CAGA,IAAM,EAAQ,MAAI,EAAO,GACZ,MAAT,KAAmB,EAAS,IAAU,EAAM,OAAS,IAAM,IAAU,EAAc,cACrF,MAAI,EAAU,EAAK,E,MAMnB,EAAA,UAAA,gBAAA,SAAgB,G,UAChB,EAAgD,QAAzC,EAAmC,QAAnC,EAAsB,QAAtB,EAAA,aAAK,EAAL,EAAO,uBAAe,IAAA,OAAA,EAAA,EAAE,mBAAW,IAAA,OAAA,EAAA,EAAE,YAAI,IAAA,IAAI,EAAM,KAC1D,EAAe,KAAK,eAAe,MAAM,GAC/C,OAAI,IAGe,iBAAf,EAAM,OAA6B,EAAM,MAAQ,EAAQ,EAAM,YAC1D,CAAE,KAAM,EAAM,KAAgB,YAAY,EAAM,OAAQ,SADjE,E,EAMM,EAAA,UAAA,aAAA,SAAa,EAAY,EAAiC,G,MAChE,IAAK,IAAO,EAAQ,GAClB,OAAO,EAET,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAI,EAAG,IAAK,CAC7C,IAAM,EAAa,EAAO,GAC1B,IAA8B,QAA1B,EAAA,EAAW,uBAAe,IAAA,OAAA,EAAA,EAAE,eAAgB,EAM9C,OALa,MAAT,EACF,EAAO,OAAO,EAAG,GAEjB,EAAO,GAAK,GAEP,EAET,GAAI,EAAW,YAAc,KAAK,aAAa,EAAI,EAAO,EAAW,YACnE,OAAO,EAET,GAAI,EAAW,YAAc,KAAK,kBAAkB,EAAI,EAAO,GAC7D,OAAO,C,CAGX,OAAO,C,EAGD,EAAA,UAAA,kBAAA,SAAkB,EAAmB,EAAiC,G,MAC5E,IAAK,EACH,OAAO,EAET,IAAM,EAAa,EAAO,WAC1B,QAAK,KAGyB,QAA1B,EAAA,EAAW,uBAAe,IAAA,OAAA,EAAA,EAAE,eAAgB,IAC1C,IACF,EAAO,WAAa,GACb,MAIP,EAAW,aAAc,KAAK,aAAa,EAAI,EAAO,EAAW,cAGrC,MAAzB,EAAW,YAAsB,KAAK,kBAAkB,EAAI,EAAO,G,EAGpE,EAAA,UAAA,UAAA,SAAU,EAAa,EAAc,GAC3C,YAD2C,IAAA,OAAA,GACpC,EAAO,GAAO,EAAY,EAAO,IAAM,GAAQ,C,EAGhD,EAAA,UAAA,KAAA,SAAK,EAA0B,QAAA,IAAA,OAAA,GAIrC,IAHA,IAAI,EAAO,GACP,GAAY,EACZ,EAAO,EAAc,EAAU,aAAO,EAAP,EAAS,OACnC,EAAQ,EAAM,EAAS,aAAI,EAAJ,EAAM,OAAU,EAAQ,EAAQ,EAAQ,EAAS,EAAO,OACtF,GAAI,aAAkB,aACpB,IAAK,IAAM,KAAO,EAAO,SACvB,GAAI,EAAO,SAAS,KAAS,EAAO,CAClC,EAAO,KAAK,UAAU,EAAK,EAAM,GACjC,GAAY,EACZ,K,OAGC,GAAI,aAAkB,YAC3B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,GAAI,EAAO,GAAG,KAAO,EAAO,CAC1B,EAAO,KAAK,UAAU,IAAM,EAAI,IAAK,EAAM,GAC3C,GAAY,EACZ,K,CAKR,OAAO,C,EAGD,EAAA,UAAA,WAAA,SAAW,GAAX,IAAA,EAAA,KAON,GANI,EAAM,YACR,KAAK,WAAW,EAAM,YAEpB,EAAM,YACR,EAAM,WAAW,SAAQ,SAAA,GAAK,OAAA,EAAK,WAAW,EAAE,IAE9C,EAAM,YAAa,CACrB,IAAM,EAAO,KAAK,KAAK,EAAM,aAC7B,QAAM,KAAK,MAAO,E,GAId,EAAA,UAAA,cAAA,SAAc,GACpB,IAAM,EAAS,aAAO,EAAP,EAAS,OACxB,GAAI,aAAkB,aACpB,IAAK,IAAM,KAAO,EAAO,SACvB,GAAI,EAAO,SAAS,KAAS,EAE3B,YADA,EAAO,cAAc,QAIpB,GAAI,aAAkB,YAC3B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,GAAI,EAAO,GAAG,KAAO,EAEnB,YADA,EAAO,SAAS,E,EAOhB,EAAA,UAAA,aAAA,SAAa,EAA8B,G,MACjD,KAAK,eAAiB,UAAU,YAAU,KAAK,gBAE/C,KAAK,eAAe,KAA0E,QAArE,EAAA,KAAK,cAAc,KAAK,KAAK,mBAAoB,KAAK,uBAAe,IAAA,IAAI,MAClG,KAAK,MAAQ,UAAS,YAAU,KAAK,M,2BAxXxC,e,yCARoD,G,MAD5C,G,MAFA,gB,EEFT,SAAY,GACV,EAAA,4BACA,EAAA,6BACD,CAHD,CAAY,MAAY,K,ICyBZ,E,aCtBZ,SAAA,IAQU,KAAA,UAAmC,E,QAJ3C,OAAA,eAAI,EAAA,UAAA,WAAQ,C,IAAZ,WAAwC,OAAO,KAAK,SAAU,E,IAC9D,SAAqB,GACnB,KAAK,UAAY,C,kCAInB,EAAA,UAAA,SAAA,SAAS,EAAe,GACtB,IAAM,EAAsB,MAAT,GAAiB,MAAM,GAAS,KAAK,SAAS,OAC/D,KAAK,IAAI,KAAK,SAAS,OAAQ,KAAK,IAAI,EAAG,IACvC,EAAW,KAAK,SAAS,QAC/B,EAAS,OAAO,EAAY,EAAG,GAC/B,KAAK,SAAW,C,EAGlB,EAAA,UAAA,YAAA,SAAY,GACV,KAAK,SAAW,KAAK,SAAS,QAAO,SAAA,GAAK,OAAA,IAAM,CAAK,G,EAGvD,EAAA,UAAA,cAAA,WACE,KAAK,SAAW,E,2BAvBnB,eDsBD,SAAY,GACV,IAAA,eACA,IAAA,mBACA,IAAA,gBACD,CAJD,CAAY,MAAa,K,kBAgKvB,SAAA,EACU,EACA,EACA,EACD,EACC,EACR,EAC0B,EACM,GARlC,IAAA,EAUE,EAAA,KAAA,OAAO,K,OATC,EAAA,iBACA,EAAA,kBACA,EAAA,gBACD,EAAA,wBACC,EAAA,OAEkB,EAAA,WACM,EAAA,sBA7ElC,EAAA,kBAAoB,EACZ,EAAA,cAAgC,GAShC,EAAA,OAAwB,KASxB,EAAA,aAAc,EASd,EAAA,aAAc,EAWd,EAAA,qBAA6C,KAyCnD,EAAc,OAAS,EACnB,GACF,EAAoB,SAAS,G,SAtFsB,EAAA,EAAA,GAOvD,OAAA,eAAI,EAAA,UAAA,QAAK,C,IAAT,WAA6B,OAAO,KAAK,MAAO,E,IAChD,SAAU,GACJ,IAAU,KAAK,SACjB,KAAK,OAAS,EACd,KAAK,eAAe,e,kCAKxB,OAAA,eAAI,EAAA,UAAA,aAAU,C,IAAd,WAAmB,OAAO,KAAK,WAAY,E,IAC3C,SAAe,GACT,IAAU,KAAK,cACjB,KAAK,YAAc,EACnB,KAAK,eAAe,e,kCAKxB,OAAA,eAAI,EAAA,UAAA,aAAU,C,IAAd,WAAmB,OAAO,KAAK,WAAY,E,IAC3C,SAAe,GACT,IAAU,KAAK,cACjB,KAAK,YAAc,EACnB,KAAK,eAAe,e,kCAKxB,OAAA,eAAI,EAAA,UAAA,SAAM,C,IAAV,eAAA,EAAmC,OAA+B,QAAxB,EAAA,KAAK,2BAAmB,IAAA,OAAA,EAAA,EAAE,MAAO,E,gCAE3E,OAAA,eAAI,EAAA,UAAA,sBAAmB,C,IAAvB,WAAkD,OAAO,KAAK,oBAAqB,E,IACnF,SAAwB,GAClB,IAAU,KAAK,uBACjB,KAAK,qBAAuB,EAC5B,KAAK,eAAe,e,kCAKxB,OAAA,eAAI,EAAA,UAAA,aAAU,C,IAAd,eAAA,EAAuC,OAAiC,QAA1B,EAAA,KAAK,MAAM,uBAAe,IAAA,OAAA,EAAA,EAAE,WAAY,E,gCAEtF,OAAA,eAAI,EAAA,UAAA,eAAY,C,IAAhB,WAA8B,OAAO,MAAM,QAAQ,KAAK,MAAM,WAAY,E,gCAE1E,OAAA,eAAI,EAAA,UAAA,eAAY,C,IAAhB,WACE,OAAO,KAAK,gBAAgB,WAAa,KAAK,U,kCAGhD,OAAA,eAAI,EAAA,UAAA,eAAY,C,IAAhB,WACE,OAAO,KAAK,gBAAgB,aAAe,KAAK,U,kCAGlD,OAAA,eAAI,EAAA,UAAA,mBAAgB,C,IAApB,WACE,OAAO,KAAK,eAAiB,KAAK,qBAAuB,KAAK,Y,kCAGhE,OAAA,eAAI,EAAA,UAAA,qBAAkB,C,IAAtB,WACE,OAAO,KAAK,cAAgB,KAAK,sBAAwB,EAAc,M,kCAGzE,OAAA,eAAI,EAAA,UAAA,oBAAiB,C,IAArB,WACE,OAAO,KAAK,cAAgB,KAAK,sBAAwB,EAAc,K,kCAGzE,OAAA,eAAI,EAAA,UAAA,YAAS,C,IAAb,WACE,OAAO,KAAK,sBAAsB,qBAAuB,KAAK,U,kCAoBhE,EAAA,UAAA,SAAA,e,IAAA,EAAA,KACE,GAAkB,QAAb,EAAA,KAAK,gBAAQ,IAAA,OAAA,EAAA,EAAE,YAApB,CAGA,IAAM,EAAsB,QAAZ,EAAA,KAAK,eAAO,IAAA,OAAA,EAAA,EAAE,cACzB,IAGL,KAAK,cAAc,KACjB,KAAK,gBAAgB,UAAU,WAAU,SAAA,GAAY,OAAA,EAAK,WAAyB,MAAZ,CAAgB,IACvF,YAAU,KAAK,SAAS,YAAa,WAAW,UAAU,KAAK,gBAAgB,KAAK,QAEtF,KAAK,KAAK,mBAAkB,WAC1B,EAAK,cAAc,KACjB,YAAU,EAAS,YAAY,WAAU,SAAA,GAAK,OAAA,EAAK,WAAW,EAAe,IAC7E,YAAU,EAAS,aAAa,WAAU,SAAA,GAAK,OAAA,EAAK,YAAY,EAAgB,I,OAKtF,EAAA,UAAA,YAAA,W,MACE,KAAK,cAAc,OAAO,GAAG,SAAQ,SAAA,GAAgB,OAAA,EAAa,aAAa,IACvD,QAAxB,EAAA,KAAK,2BAAmB,IAAA,KAAE,YAAY,K,EAIxC,EAAA,UAAA,QAAA,SAAQ,GACN,EAAM,kBACN,KAAK,sBAAsB,cAAc,KAAK,M,EAGhD,EAAA,UAAA,YAAA,SAAY,G,UACN,KAAK,gBAAgB,WAGP,QAAlB,EAAA,EAAM,oBAAY,IAAA,KAAE,QAAQ,EAAa,MAAsB,QAAf,EAAA,KAAK,kBAAU,IAAA,IAAI,IACnE,KAAK,gBAAgB,UAAyB,QAAf,EAAA,KAAK,kBAAU,IAAA,IAAI,M,EAGpD,EAAA,UAAA,UAAA,WACE,KAAK,gBAAgB,S,EAGvB,EAAA,UAAA,YAAA,SAAY,GACL,KAAK,sBAAsB,KAGhC,EAAM,iBACN,KAAK,oB,EAGP,EAAA,UAAA,YAAA,SAAY,GACL,KAAK,sBAAsB,IAG5B,KAAK,kBAAoB,IAC3B,KAAK,oBAC0B,IAA3B,KAAK,oBACP,KAAK,oBAAsB,M,EAKjC,EAAA,UAAA,WAAA,SAAW,GAAX,IAAA,EAAA,MACM,EAAM,kBAAqB,KAAK,sBAAsB,KAG1D,KAAK,KAAK,KAAI,W,QACZ,EAAK,oBAAsB,EAAK,uBAAuB,GACvD,EAAK,gBAAgB,WAAoD,QAAvC,EAA0B,QAA1B,EAAA,EAAK,MAAM,uBAAe,IAAA,OAAA,EAAA,EAAE,mBAAW,IAAA,IAAI,I,IAE/E,EAAM,iB,EAGA,EAAA,UAAA,sBAAA,SAAsB,G,QAC5B,OAAsB,QAAlB,EAAA,EAAM,oBAAY,IAAA,OAAA,EAAA,EAAE,MAAM,MAAK,SAAA,GAAK,OAAA,IAAM,EAAa,KAAK,KACvD,KAAK,gBAAgB,WAAa,KAAK,cAErB,QAAlB,EAAA,EAAM,oBAAY,IAAA,OAAA,EAAA,EAAE,MAAM,MAAK,SAAA,GAAK,OAAA,IAAM,EAAa,IAAI,MAClE,WAAS,KAAK,gBAAgB,S,EAG1B,EAAA,UAAA,uBAAA,SAAuB,G,MACvB,EAAmB,QAAZ,EAAA,KAAK,eAAO,IAAA,OAAA,EAAA,EAAE,cAAc,wBACzC,GAAI,EAAM,CACR,IAAM,EAA0B,IAAd,EAAK,OACvB,GAAI,EAAM,QAAU,EAAK,IAAM,EAC7B,OAAO,EAAc,OAEvB,GAAI,EAAM,QAAU,EAAK,OAAS,EAChC,OAAO,EAAc,K,CAGzB,OAAO,EAAc,I,EAGvB,EAAA,UAAA,OAAA,SAAO,G,QACL,GAAI,KAAK,sBAAsB,GAE7B,GADA,EAAM,kBACgB,QAAlB,EAAA,EAAM,oBAAY,IAAA,OAAA,EAAA,EAAE,MAAM,SAAS,EAAa,OAAQ,CAC1D,IAAM,EAAa,KAAK,gBAAgB,SAClC,EAAQ,KAAK,cAAc,KAAK,EAAY,KAAK,sBAAsB,gBAC7E,GAAI,EAAO,CAET,IAAM,EAAQ,KAAK,sBAAsB,GACzC,KAAK,sBAAsB,YAAY,GACnC,KAAK,QAAU,KAAK,sBAAwB,EAAc,KAC5D,KAAK,OAAO,cAAc,EAAO,GAEjC,KAAK,cAAc,E,OAGI,QAAlB,EAAA,EAAM,oBAAY,IAAA,OAAA,EAAA,EAAE,MAAM,SAAS,EAAa,QACrD,KAAK,gBAAgB,WACnB,KAAK,QAAU,KAAK,sBAAwB,EAAc,KAC5D,KAAK,OAAO,aAAa,KAAK,gBAAgB,SAAU,KAAK,yBAE7D,KAAK,aAAa,KAAK,gBAAgB,WAK/C,KAAK,gBAAgB,UACrB,KAAK,W,EAGP,EAAA,UAAA,YAAA,SAAY,GAAZ,IAAA,EAAA,KACE,EAAM,kBACN,KAAK,KAAK,KAAI,WACZ,EAAK,YAAa,EAClB,EAAK,MAAyC,MAAjC,EAAK,gBAAgB,SAChC,iBAAiB,EAAK,sBAAsB,YAAY,EAAK,MAAM,MACnE,I,KAIN,EAAA,UAAA,WAAA,WACE,KAAK,YAAa,C,EAGpB,EAAA,UAAA,gBAAA,WACE,KAAK,W,EAGD,EAAA,UAAA,cAAA,SAAc,EAA0B,G,kFAC5C,OAAK,KAAK,cAGL,KAAK,cAAc,WAAW,EAAO,KAAK,sBAAsB,eAAgB,KAAK,SAGpF,EAAe,YAAU,KAAK,QAClB,YAGZ,EAAuB,MAAT,GAAiB,MAAM,GAAU,EAAa,WAAW,OAC3E,KAAK,IAAI,EAAa,WAAW,OAAQ,KAAK,IAAI,EAAG,IACvD,EAAa,WAAW,OAAO,EAAY,EAAG,GAC9C,GAAO,QAAM,GACV,KACC,OAAI,WAAM,OAAA,EAAK,sBAAsB,YAAY,EAAK,MAAO,EAAa,IAC1E,cAAW,WAAM,OAAA,OAAK,IACtB,OAAI,WAAe,KACnB,cAjBF,G,QAoBE,EAAA,UAAA,aAAA,SAAa,EAAc,G,gGAE/B,OADM,EAAQ,KAAK,sBAAsB,YAAY,GACrD,GAAM,KAAK,cAAc,EAAO,I,cAAhC,EAAA,O,YAMM,EAAA,UAAA,sBAAA,SAAsB,G,UAC5B,GAAI,KAAK,QAAU,KAAK,sBAAwB,EAAc,KAAM,CAClE,IAAM,EAAiB,EACG,QAAxB,EAAA,KAAK,2BAAmB,IAAA,OAAA,EAAA,EAAE,SAAS,QAAO,SAAA,GAAE,IAAA,EAAI,OAAA,EAAG,cAAwC,QAAzB,EAAA,EAAU,uBAAe,IAAA,OAAA,EAAA,EAAE,YAAW,IAChF,QAAxB,EAAA,KAAK,2BAAmB,IAAA,OAAA,EAAA,EAAE,SACtB,EAAyC,QAA7B,EAAA,aAAc,EAAd,EAAgB,QAAQ,aAAK,IAAA,IAAI,EACnD,OAAO,KAAK,sBAAwB,EAAc,OAAS,EAAY,EAAY,C,GAK/E,EAAA,UAAA,UAAA,WACN,KAAK,kBAAoB,EACzB,KAAK,oBAAsB,KACvB,KAAK,eACP,KAAK,gBAAgB,WAAa,K,KAvRiB,gB,oBAjFxD,YAAS,KAAA,CAAC,CACT,SAAU,gCACV,SAAU,ywBA2EV,UAAW,CACT,G,QA3DO,k1C,yCAhDT,qB,MAiBO,G,MAAiB,G,MAAe,G,MAZvC,U,MAeO,G,+BA0KJ,SAAM,KAAA,CAAC,e,MA1KH,EAAa,WAAA,EAAA,KA2KjB,YAAQ,CAAA,KAAI,c,0CAhFd,YAAS,KAAA,CAAC,iBAAkB,CAAE,KAAM,mBAAkB,QAAQ,M,eAC9D,YAAS,KAAA,CAAC,UAAW,CAAE,KAAM,aAAY,QAAQ,M,eAiHjD,eAAY,KAAA,CAAC,QAAS,CAAC,c,IEzNb,EAAkB,GAElB,EAAoB,CAC/B,EACA,G,EAOA,SACE,GAEA,KAAK,SAAW,CACd,CAAE,KAAM,EAAuB,UAAW,GAC1C,CAAE,KAAM,EAA6B,UAAW,IAElD,KAAK,WAAa,CAChB,CAAE,KAAM,WAAY,UAAW,G,sBAZpC,e,yCAfQ,G,mBC8FP,SAAA,EACU,EACA,EACA,EACD,EACC,GAJA,KAAA,kBACA,KAAA,gBACA,KAAA,cACD,KAAA,wBACC,KAAA,gBAtBA,KAAA,aAAe,IAAI,eACnB,KAAA,YAAc,IAAI,eAE5B,KAAA,MAAkB,GAClB,KAAA,SAAqB,GACrB,KAAA,WAAuB,GACvB,KAAA,YAAmC,GAEnC,KAAA,kBAAoB,EAGpB,KAAA,QAAe,GAIE,KAAA,cAAgC,GAS/C,EAAc,OAAS,KAIvB,KAAK,KAAO,KAAK,YAAY,MAAM,IACnC,KAAK,YAAc,KAAK,gBAAgB,UAAU,KAAK,OAAI,SAAA,GAAY,OAAY,MAAZ,CAAgB,I,QAhBzF,OAAA,eAAI,EAAA,UAAA,aAAU,C,IAAd,WAA2B,MAAO,EAAG,E,gCAmBrC,OAAA,eACI,EAAA,UAAA,WAAQ,C,IADZ,WAEE,OAAO,KAAK,sBAAsB,Q,MAGpC,SAAa,GACX,KAAK,sBAAsB,SAAW,C,kCAGxC,OAAA,eACI,EAAA,UAAA,SAAM,C,IADV,WAEE,OAAO,KAAK,sBAAsB,M,MAGpC,SAAW,GACT,KAAK,sBAAsB,OAAS,C,kCAGtC,OAAA,eACI,EAAA,UAAA,QAAK,C,IADT,WAEE,OAAO,KAAK,sBAAsB,K,MAGpC,SAAU,GACR,KAAK,sBAAsB,MAAQ,C,kCAGrC,EAAA,UAAA,SAAA,eAAA,EAAA,KACE,KAAK,cAAc,KACjB,KAAK,sBAAsB,gBACxB,WAAU,SAAA,GAET,EAAK,cAAc,gBAEnB,EAAK,QAAU,GACf,EAAK,KAAO,EAAK,YAAY,MAAM,IACnC,EAAK,aAAa,KAAK,EAAK,sBAAsB,mBAAmB,EAAQ,YAAU,O,IAG3F,QAAM,KAAK,sBAAsB,OAAQ,KAAK,KAAK,cAChD,KAAK,eAAa,KAClB,WAAU,WAAM,OAAA,EAAK,YAAY,KAAK,EAAK,sBAAsB,MAAM,I,EAI9E,EAAA,UAAA,YAAA,WACE,KAAK,cAAc,OAAO,GAAG,SAAQ,SAAA,GAAgB,OAAA,EAAa,aAAa,G,EAGjF,EAAA,UAAA,gBAAA,SAAgB,GAAhB,IAAA,EAAA,KACE,QAAM,GAAG,KACP,OAAI,WACE,EAAK,cAAc,WAAW,EAAO,EAAK,sBAAsB,iBAClE,EAAK,sBAAsB,SAAS,E,IAGxC,cAAW,WAAM,OAAA,OAAK,KAAG,W,EAG7B,EAAA,UAAA,YAAA,SAAY,GACV,EAAM,iBACN,KAAK,mB,EAGP,EAAA,UAAA,YAAA,WACM,KAAK,kBAAoB,GAC3B,KAAK,mB,EAIT,EAAA,UAAA,WAAA,SAAW,GACT,EAAM,gB,EAGR,EAAA,UAAA,OAAA,SAAO,GACD,KAAK,OAAO,QAGX,WAAS,KAAK,gBAAgB,YAGnC,KAAK,aAAa,KAAK,gBAAgB,UACvC,EAAM,iB,EAGR,EAAA,UAAA,cAAA,SAAc,EAA0B,GACtC,KAAK,sBAAsB,SAAS,EAAO,E,EAG7C,EAAA,UAAA,aAAA,SAAa,EAAc,GACzB,IAAM,EAAQ,KAAK,sBAAsB,YAAY,GACrD,KAAK,cAAc,EAAO,E,2BAvL7B,YAAS,KAAA,CAAC,CACT,SAAU,kBACV,SAAU,kzBAmDV,UAAW,CACT,GAEF,cAAe,oBAAkB,K,QArCxB,4hC,yCAtBF,G,MAAiB,G,MALjB,e,MAK2C,G,MAC3C,G,+CA6DN,YAAS,KAAA,CAAC,sBAAuB,CAAE,KAAM,mBAAkB,QAAQ,M,oBACnE,W,mBACA,W,gBA+BA,U,cASA,U,aASA,WCzHH,IAAM,EAA2C,CAC/C,QAAS,oBACT,YAAa,cAAW,WAAM,OAAA,CAAoB,IAClD,OAAO,G,aAkEP,SAAA,EACU,EACA,EACD,GAHT,IAAA,EAAA,KACU,KAAA,gBACA,KAAA,KACD,KAAA,uBAZA,KAAA,YAAa,EACb,KAAA,UAAW,EACX,KAAA,cAAe,EACf,KAAA,YAAa,EAGL,KAAA,cAAgC,GAwBjD,KAAA,MAA2B,GAC3B,KAAA,OAA8B,GAC9B,KAAA,YAAa,EACb,KAAA,SAAU,EAEA,KAAA,SAAW,SAAC,GAAM,EAClB,KAAA,UAAY,aAtBpB,KAAK,KAAO,EAAG,MAAM,CACnB,IAAK,KAAK,IAAM,EAAG,QAAQ,IAC3B,UAAW,KAAK,UAAY,EAAG,QAAQ,IACvC,oBAAqB,KAAK,oBAAsB,EAAG,QAAQ,IAC3D,KAAM,KAAK,KAAO,EAAG,QAAQ,KAC5B,CAAE,UAAW,SAAC,GAAuB,OAAA,EAAK,UAAU,EAAQ,IAC/D,KAAK,UAAY,EAAG,MAAM,G,QAkB5B,EAAA,UAAA,SAAA,eAAA,EAAA,KACE,KAAK,cAAc,KAAK,KAAK,KAAK,aAC/B,WAAU,WAAM,OAAA,EAAK,cAAc,KAEtC,KAAK,cAAc,KAAK,KAAK,KAAK,cAC/B,KAAK,eAAa,IAClB,WAAU,WAAM,OAAA,EAAK,QAAU,EAAK,KAAK,OAAO,KAEnD,KAAK,uB,EAGP,EAAA,UAAA,YAAA,W,MAC+B,QAA7B,EAAA,KAAK,gCAAwB,IAAA,KAAE,cAC/B,KAAK,cAAc,OAAO,GAAG,SAAQ,SAAA,GAAgB,OAAA,EAAa,aAAa,G,EAGjF,EAAA,UAAA,WAAA,SAAW,G,MACoB,QAA7B,EAAA,KAAK,gCAAwB,IAAA,KAAE,cAC/B,KAAK,YAAY,GACjB,KAAK,KAAK,iBACV,KAAK,KAAK,kBACV,KAAK,uB,EAGP,EAAA,UAAA,iBAAA,SAAiB,GACf,KAAK,SAAW,C,EAGlB,EAAA,UAAA,kBAAA,SAAkB,GAChB,KAAK,UAAY,C,EAGnB,EAAA,UAAA,iBAAA,SAAiB,GACX,EACF,KAAK,KAAK,UAEV,KAAK,KAAK,Q,EAIN,EAAA,UAAA,sBAAA,eAAA,EAAA,KACN,KAAK,yBAA2B,QAAM,KAAK,UAAU,aAAc,KAAK,KAAK,cAC1E,KAAK,eAAa,IAClB,WAAU,WAAM,OAAA,EAAK,aAAa,G,EAG/B,EAAA,UAAA,YAAA,SAAY,GACb,EAAS,KACZ,EAAQ,IAEV,KAAK,IAAI,SAAS,EAAS,EAAM,KAAO,EAAM,IAAM,IACpD,KAAK,UAAU,SAAS,EAAS,EAAM,WAAa,EAAM,UAAY,IACtE,KAAK,oBAAoB,SAAS,EAAS,EAAM,qBAAuB,EAAM,oBAAsB,IACpG,KAAK,KAAK,SAAS,EAAS,EAAM,MAAQ,EAAM,KAAO,IACvD,KAAK,OAAS,KAAK,cAAc,cAAc,KAAK,KAAK,OACzD,KAAK,UAAY,KAAK,GAAG,MAAM,IAC/B,KAAK,MAAQ,YAAU,E,EAGjB,EAAA,UAAA,YAAA,WACN,GAAK,KAAK,SAAV,CAIA,IAAM,EAAQ,KAAK,MACnB,EAAM,IAAM,KAAK,IAAI,MACrB,EAAM,UAAY,KAAK,UAAU,MACjC,EAAM,oBAAsB,KAAK,oBAAoB,MACrD,EAAM,KAAO,KAAK,KAAK,MACvB,KAAK,SAAS,E,GAGR,EAAA,UAAA,aAAA,W,MACuB,QAA7B,EAAA,KAAK,gCAAwB,IAAA,KAAE,cAC/B,IAAM,EAAO,KAAK,KAAK,MACvB,KAAK,OAAS,KAAK,cAAc,cAAc,GAC/C,IAAM,EAAe,KAAK,qBAAqB,MAAM,GACrD,KAAK,WAAyC,OAA5B,aAAY,EAAZ,EAAc,YAChC,KAAK,UAAY,KAAK,GAAG,MAAM,IAC/B,KAAK,MAAQ,OAAO,OAAO,GAAI,KAAK,OACpC,KAAK,uB,EAGP,EAAA,UAAA,mBAAA,SAAmB,GACjB,KAAK,YAAY,E,EAGX,EAAA,UAAA,UAAA,SAAU,GAChB,GAAI,KAAK,WACP,OAAO,KAET,IAAM,EAAO,EAAQ,IAAI,QACnB,EAAU,EAAS,EAAK,QAAU,EAAK,MAAM,OAAO,OAAS,EAC7D,EAAS,CAAE,MAAM,GAIvB,OAHI,KAAK,WAAa,IACpB,EAAO,MAAO,GAET,EAAO,KAAO,EAAS,I,2BA7LjC,YAAS,KAAA,CAAC,CACT,SAAU,+BACV,SAAU,46DA+CV,UAAW,CACT,G,QATO,wI,yCAlDF,G,MAJsB,e,MAIP,G,sCA+DrB,U,gBACA,U,oBACA,U,kBACA,U,kBACA,YAAS,KAAA,CAAC,QAAS,CAAE,QAAQ,O,iBCR9B,SAAA,EACE,EACQ,EACA,GADA,KAAA,uBACA,KAAA,wBALA,KAAA,SAAW,IAAI,eAahB,KAAA,UAAY,IAAI,cAAY,IAErC,KAAA,YAAa,EARX,KAAK,KAAO,EAAG,MAAM,CACnB,KAAM,KAAK,KAAO,EAAG,QAAQ,GAAI,aAAW,QAAQ,CAAC,aAAW,SAAU,aAAW,QAAQ,iB,QASjG,OAAA,eAAI,EAAA,UAAA,WAAQ,C,IAAZ,WACE,OAAO,KAAK,sBAAsB,YAAY,KAAK,KAAK,M,kCAG1D,OAAA,eAAY,EAAA,UAAA,SAAM,C,IAAlB,W,MACE,OAAO,EAAe,QAAb,EAAA,KAAK,gBAAQ,IAAA,OAAA,EAAA,EAAE,c,kCAG1B,EAAA,UAAA,IAAA,WACE,IAAM,EAAO,KAAK,KAAK,MACjB,EAAQ,GACD,iBAAT,IACF,EAAM,KAAO,GAEf,IAAM,EAAe,KAAK,qBAAqB,MAAM,IAAS,GAC1D,EAAa,aACf,EAAM,WAAa,CAAE,WAAY,MAE/B,KAAK,WAAuB,iBAAT,GAAsD,MAA3B,EAAa,cAC7D,EAAM,WAAa,IAErB,KAAK,UAAU,SAAS,GACxB,KAAK,OAAO,MAAM,O,EAGpB,EAAA,UAAA,QAAA,WACE,KAAK,SAAS,KAAK,KAAK,UAAU,OAClC,KAAK,OAAO,MAAM,O,2BApGrB,YAAS,KAAA,CAAC,CACT,SAAU,+BACV,SAAU,s6C,QAkCD,mV,yCAzCF,e,MAEoB,G,MACpB,G,oCAyDN,YAAS,KAAA,CAAC,QAAS,CAAE,QAAQ,M,gBAC7B,Y,iBC5BD,SAAA,EACU,EACA,EACA,GAFA,KAAA,gBACA,KAAA,uBACA,KAAA,wBAZO,KAAA,cAAgC,GAEjD,KAAA,YAAa,EACb,KAAA,UAAY,IAAI,cAAY,IACpB,KAAA,MAAkC,I,QAE1C,OAAA,eACI,EAAA,UAAA,WAAQ,C,IADZ,WACiB,OAAqB,MAAd,KAAK,KAAc,E,gCAQ3C,EAAA,UAAA,SAAA,eAAA,EAAA,KACE,KAAK,cAAc,KACjB,KAAK,sBAAsB,gBAAgB,WAAU,SAAA,G,UAC7C,EAAwC,QAA3B,EAAU,QAAV,EAAA,EAAK,aAAK,IAAA,OAAA,EAAA,EAAE,uBAAe,IAAA,OAAA,EAAA,EAAE,YAChD,EAAK,SAAoD,QAA3C,EAAA,EAAK,cAAc,KAAK,EAAY,UAAO,IAAA,IAAI,K,IAE/D,KAAK,sBAAsB,eAAe,WAAU,SAAA,GAClD,EAAK,SAAS,E,MAKpB,EAAA,UAAA,YAAA,WACE,KAAK,cAAc,OAAO,GAAG,SAAQ,SAAA,GAAgB,OAAA,EAAa,aAAa,G,EAGjF,EAAA,UAAA,OAAA,WACM,KAAK,OACP,KAAK,sBAAsB,YAAY,KAAK,M,EAIhD,EAAA,UAAA,OAAA,eAAA,EAAA,KACO,KAAK,cAAc,WAAW,KAAK,UAAU,MAAO,KAAK,sBAAsB,iBAGpF,QAAM,GAAG,WAAU,WACjB,EAAK,sBAAsB,YAAY,EAAK,MAAO,EAAK,UAAU,M,KAItE,EAAA,UAAA,OAAA,WACE,KAAK,SAAS,K,EAGR,EAAA,UAAA,SAAA,SAAS,G,MACX,IAAU,KAAK,QACjB,KAAK,MAAQ,EACb,KAAK,WAA6B,kBAAhB,aAAK,EAAL,EAAO,OACqD,QAA3E,aAAK,EAAL,EAAO,QAAmD,QAA3C,EAAA,KAAK,qBAAqB,MAAM,EAAM,aAAK,IAAA,OAAA,EAAA,EAAE,aAC/D,KAAK,UAAU,SAAS,EAAQ,YAAU,GAAS,I,2BAzExD,YAAS,KAAA,CAAC,CACT,SAAU,6BACV,SAAU,ugB,QASD,wD,yCAfF,G,MAAe,G,MAAsB,G,oCA4B3C,cAAW,KAAA,CAAC,mBC1Bf,IAAM,EAA0C,CAC9C,QAAS,oBACT,YAAa,cAAW,WAAM,OAAA,CAAmB,IACjD,OAAO,G,aAyBP,SAAA,EACU,GAAA,KAAA,uBAJV,KAAA,YAAc,IAAI,cAClB,KAAA,MAA4C,GAMlC,KAAA,SAAW,SAAC,GAAU,EACtB,KAAA,UAAY,Y,QAEtB,EAAA,UAAA,gBAAA,WACE,KAAK,a,EAGP,EAAA,UAAA,YAAA,SAAY,GACN,EAAO,YACT,KAAK,a,EAIT,EAAA,UAAA,SAAA,eAAA,EAAA,KACE,KAAK,yBAA2B,KAAK,YAAY,aAAa,WAAU,SAAA,GAClE,EAAK,UACP,EAAK,SAAS,E,KAKpB,EAAA,UAAA,YAAA,W,MAC+B,QAA7B,EAAA,KAAK,gCAAwB,IAAA,KAAE,a,EAGjC,EAAA,UAAA,WAAA,SAAW,GACT,KAAK,YAAY,SAAS,E,EAG5B,EAAA,UAAA,iBAAA,SAAiB,GACf,KAAK,SAAW,C,EAGlB,EAAA,UAAA,kBAAA,SAAkB,GAChB,KAAK,UAAY,C,EAGnB,EAAA,UAAA,iBAAA,SAAiB,GACX,EACF,KAAK,YAAY,UAEjB,KAAK,YAAY,Q,EAIb,EAAA,UAAA,YAAA,eAAA,EAAA,KACN,QAAM,GAAG,WAAU,WACjB,EAAK,MAAQ,EAAK,WAClB,IAAM,GAAO,EAAK,YAA4B,MAAb,EAAK,MAA8B,KAAd,EAAK,KAAgC,EAAK,KAAtB,eACtE,EAAK,MAAM,MAAK,SAAA,GAAU,OAAA,EAAO,QAAU,CAAI,IACjD,EAAK,YAAY,SAAS,GACjB,EAAK,MAAM,OAAS,GAC7B,EAAK,YAAY,SAAS,EAAK,MAAM,GAAG,M,KAKtC,EAAA,UAAA,SAAA,WACN,IAAM,EAA4C,GAC5C,EAAU,OAAO,QAAQ,KAAK,qBAAqB,OAkBzD,OAjBwB,IAApB,KAAK,YACP,EAAQ,SAAQ,SAAC,G,IAAA,EAAA,EAAA,EAAA,GAAC,EAAG,EAAA,GAAO,EAAA,GACf,YACT,EAAM,KAAK,CAAE,MAAO,EAAK,MAAO,G,KAId,IAApB,KAAK,YACP,EAAM,KAAK,CAAE,MAAO,aAAc,MAAO,kBAEnB,IAApB,KAAK,YACP,EAAQ,SAAQ,SAAC,G,IAAA,EAAA,EAAA,EAAA,GAAC,EAAG,EAAA,GAAO,EAAA,GAChB,YACR,EAAM,KAAK,CAAE,MAAO,EAAK,MAAO,G,IAI/B,C,2BAvGV,YAAS,KAAA,CAAC,CACT,SAAU,8BACV,SAAU,iLAUV,UAAW,CAAC,G,QALH,qD,yCAfF,G,gCAyBN,U,kBACA,W,iBCED,SAAA,EACU,EACA,GADA,KAAA,kBACA,KAAA,uBAJV,KAAA,MAA4C,E,QAO5C,EAAA,UAAA,SAAA,WACE,KAAK,MAAQ,KAAK,U,EAGpB,EAAA,UAAA,YAAA,SAAY,EAAkB,G,MACV,QAAlB,EAAA,EAAM,oBAAY,IAAA,KAAE,QAAQ,EAAa,KAAM,GAC/C,KAAK,gBAAgB,UAAU,E,EAGjC,EAAA,UAAA,UAAA,WACE,KAAK,gBAAgB,S,EAGf,EAAA,UAAA,SAAA,WACN,IAAM,EAA4C,GAC5C,EAAU,OAAO,QAAQ,KAAK,qBAAqB,OAYzD,OAXA,EAAQ,SAAQ,SAAC,G,IAAA,EAAA,EAAA,EAAA,GAAC,EAAG,EAAA,GAAO,EAAA,GACf,YACT,EAAM,KAAK,CAAE,MAAO,EAAK,MAAO,G,IAGpC,EAAM,KAAK,CAAE,MAAO,aAAc,MAAO,iBACzC,EAAQ,SAAQ,SAAC,G,IAAA,EAAA,EAAA,EAAA,GAAC,EAAG,EAAA,GAAO,EAAA,GAChB,YACR,EAAM,KAAK,CAAE,MAAO,EAAK,MAAO,G,IAG7B,C,2BA3DV,YAAS,KAAA,CAAC,CACT,SAAU,wBACV,SAAU,wK,QAKD,4T,yCAVF,G,MAAiB,G,ECO1B,IAAM,EAA6C,CACjD,QAAS,oBACT,YAAa,cAAW,WAAM,OAAA,CAAsB,IACpD,OAAO,G,aA0BP,SAAA,EACU,EACA,GADA,KAAA,gBACA,KAAA,cAPD,KAAA,QAAyB,KAEjB,KAAA,cAAgC,GAUjD,KAAA,SAAU,EAGV,KAAA,OAA8B,GAEpB,KAAA,SAAW,SAAC,GAAU,EACtB,KAAA,UAAY,aATpB,KAAK,UAAY,EAAY,MAAM,G,QAWrC,EAAA,UAAA,SAAA,eAAA,EAAA,KACE,KAAK,cAAc,KAAK,KAAK,UAAU,cACpC,KAAK,aAAU,WAAM,OAAA,QAAM,EAAE,KAC7B,WAAU,WAAM,OAAA,EAAK,QAAU,EAAK,UAAU,OAAO,KAExD,KAAK,uB,EAGP,EAAA,UAAA,YAAA,W,MAC+B,QAA7B,EAAA,KAAK,gCAAwB,IAAA,KAAE,cAC/B,KAAK,cAAc,OAAO,GAAG,SAAQ,SAAA,GAAgB,OAAA,EAAa,aAAa,G,EAGjF,EAAA,UAAA,YAAA,SAAY,GACN,EAAQ,UACN,KAAK,0BACP,KAAK,yBAAyB,cAEhC,KAAK,OAAS,KAAK,cAAc,iBAAiB,KAAK,SACvD,KAAK,UAAY,KAAK,YAAY,MAAM,IACxC,KAAK,MAAQ,OAAO,OAAO,GAAI,KAAK,OAChC,KAAK,0BACP,KAAK,wB,EAKX,EAAA,UAAA,WAAA,SAAW,G,MACoB,QAA7B,EAAA,KAAK,gCAAwB,IAAA,KAAE,cAC1B,EAAS,KACZ,EAAM,IAER,KAAK,OAAS,KAAK,cAAc,iBAAiB,KAAK,SACvD,KAAK,UAAY,KAAK,YAAY,MAAM,IACxC,KAAK,MAAQ,YAAU,GACvB,KAAK,uB,EAGP,EAAA,UAAA,iBAAA,SAAiB,GACf,KAAK,SAAW,C,EAGlB,EAAA,UAAA,kBAAA,SAAkB,GAChB,KAAK,UAAY,C,EAGnB,EAAA,UAAA,iBAAA,SAAiB,GACX,EACF,KAAK,UAAU,UAEf,KAAK,UAAU,Q,EAIX,EAAA,UAAA,sBAAA,eAAA,EAAA,KACN,KAAK,yBAA2B,KAAK,UAAU,aAC5C,KAAK,eAAa,IAClB,WAAU,WAAM,OAAA,EAAK,aAAa,G,EAG/B,EAAA,UAAA,YAAA,WACD,KAAK,UAIV,KAAK,SAAS,KAAK,M,2BAvGtB,YAAS,KAAA,CAAC,CACT,SAAU,iCACV,SAAU,ySAWV,UAAW,CACT,O,yCAvBK,G,MAJsB,e,mCA+B5B,W,iBCuCD,SAAA,EACE,EACQ,EACA,GADA,KAAA,uBACA,KAAA,wBALA,KAAA,SAAW,IAAI,eAazB,KAAA,UAAY,IAAI,cAAY,IAN1B,KAAK,KAAO,EAAY,MAAM,CAC5B,QAAS,CAAC,GAAI,aAAW,QAAQ,CAAC,aAAW,SAAU,aAAW,QAAQ,iB,QAO9E,OAAA,eAAI,EAAA,UAAA,UAAO,C,IAAX,W,MACE,OAA+B,QAAxB,EAAA,KAAK,KAAK,IAAI,kBAAU,IAAA,OAAA,EAAA,EAAE,K,kCAGnC,OAAA,eAAY,EAAA,UAAA,SAAM,C,IAAlB,W,MACE,OAAO,EAAe,QAAb,EAAA,KAAK,gBAAQ,IAAA,OAAA,EAAA,EAAE,c,kCAG1B,EAAA,UAAA,IAAA,WACE,GAAK,KAAK,SAGN,EAAS,KAAK,OAAQ,CACxB,IAAM,EAAQ,YAAU,KAAK,OACzB,EAAQ,EAAM,WAAa,EAAM,SAAS,OAAS,EACrD,EAAM,SAAS,OAAO,EAAM,SAAS,OAAS,EAAG,EAAG,KAAK,SAEzD,EAAM,SAAW,CAAC,KAAK,SAEzB,KAAK,UAAU,SAAS,GAExB,IAAM,EAAS,KAAK,qBAAqB,SAAS,KAAK,SAAS,OAC5D,EAAQ,IAAW,EAAO,OAAS,EACrC,KAAK,OAAO,MAAM,QAElB,KAAK,S,GAKX,EAAA,UAAA,QAAA,WACE,KAAK,MAAQ,KAAK,sBAAsB,kBAAkB,KAAK,UAAU,OACzE,KAAK,SAAS,KAAK,KAAK,UAAU,OAClC,KAAK,OAAO,MAAM,O,2BA5GrB,YAAS,KAAA,CAAC,CACT,SAAU,iCACV,SAAU,45C,QAkCD,iY,yCA5CF,e,MAEA,G,MACA,G,oCA+DN,YAAS,KAAA,CAAC,QAAS,CAAE,QAAQ,M,aAC7B,U,gBACA,YChEH,IAAM,EAA6C,CACjD,QAAS,oBACT,YAAa,cAAW,WAAM,OAAA,CAAsB,IACpD,OAAO,G,aAoBP,SAAA,EACU,GAAA,KAAA,uBAGV,KAAA,YAAc,IAAI,cAClB,KAAA,SAAqB,GAEX,KAAA,SAAW,SAAC,GAAU,EACtB,KAAA,UAAY,Y,QAEtB,EAAA,UAAA,gBAAA,eAAA,EAAA,KACE,QAAM,GAAG,WAAU,WACjB,EAAK,SAAW,OAAO,KAAK,EAAK,qBAAqB,UAClD,EAAK,SAAS,OAAS,GACzB,EAAK,YAAY,SAAS,EAAK,SAAS,G,KAK9C,EAAA,UAAA,SAAA,eAAA,EAAA,KACE,KAAK,yBAA2B,KAAK,YAAY,aAAa,WAAU,SAAA,GAClE,EAAK,UACP,EAAK,SAAS,E,KAKpB,EAAA,UAAA,YAAA,W,MAC+B,QAA7B,EAAA,KAAK,gCAAwB,IAAA,KAAE,a,EAGjC,EAAA,UAAA,WAAA,SAAW,GACT,KAAK,YAAY,SAAS,E,EAG5B,EAAA,UAAA,iBAAA,SAAiB,GACf,KAAK,SAAW,C,EAGlB,EAAA,UAAA,kBAAA,SAAkB,GAChB,KAAK,UAAY,C,EAGnB,EAAA,UAAA,iBAAA,SAAiB,GACX,EACF,KAAK,YAAY,UAEjB,KAAK,YAAY,Q,2BAhEtB,YAAS,KAAA,CAAC,CACT,SAAU,iCACV,SAAU,iLAUV,UAAW,CAAC,G,QALH,qD,yCAfF,G,mBCgEP,SAAA,EACU,EACA,GADA,KAAA,uBACA,KAAA,wBATA,KAAA,SAAW,IAAI,eAEzB,KAAA,QAAyB,KACzB,KAAA,UAAY,IAAI,cAAY,IAE5B,KAAA,SAAqB,E,QAOrB,EAAA,UAAA,YAAA,SAAY,GACN,EAAQ,QACV,KAAK,SAAW,KAAK,sBAAsB,YAAY,EAAQ,MAAM,c,EAIzE,OAAA,eAAY,EAAA,UAAA,SAAM,C,IAAlB,W,MACE,OAAO,EAAe,QAAb,EAAA,KAAK,gBAAQ,IAAA,OAAA,EAAA,EAAE,c,kCAG1B,EAAA,UAAA,kBAAA,SAAkB,GAChB,KAAK,SAAS,KAAK,E,EAGrB,EAAA,UAAA,KAAA,SAAK,GAEH,GADA,KAAK,QAAU,KAAK,SAAS,GACzB,EAAS,KAAK,OAAQ,CACxB,IAAM,EAAQ,YAAU,KAAK,OAC7B,GAAI,EAAQ,aAAK,EAAL,EAAO,UAAW,CAC5B,KAAK,UAAU,SAAS,GAExB,IAAM,EAAS,KAAK,qBAAqB,SAAS,KAAK,SAAS,OAC5D,EAAQ,IAAW,EAAO,OAAS,EACrC,KAAK,OAAO,MAAM,QAElB,KAAK,S,IAMb,EAAA,UAAA,OAAA,SAAO,G,UACC,EAAwE,QAAnD,EAAoB,QAApB,EAAU,QAAV,EAAA,KAAK,aAAK,IAAA,OAAA,EAAA,EAAE,gBAAQ,IAAA,OAAA,EAAA,EAAE,QAAQ,KAAK,SAAS,WAAO,IAAA,KAAK,EACnF,KAAI,EAAqB,GAAzB,CAIA,IAAM,EAAQ,YAAU,KAAK,OAC5B,EAAM,SAAsB,OAAO,EAAoB,GACxD,KAAK,MAAQ,KAAK,sBAAsB,kBAAkB,GAC1D,KAAK,SAAS,KAAK,KAAK,M,GAG1B,EAAA,UAAA,QAAA,WACE,KAAK,MAAQ,KAAK,sBAAsB,kBAAkB,KAAK,UAAU,OACzE,KAAK,SAAS,KAAK,KAAK,OACxB,KAAK,OAAO,MAAM,O,gBCpHN,GAAW,GACzB,GAAa,MAAT,EACF,OAAO,EAGT,IAAI,EAAS,EACP,EAAU,IAAI,IACpB,OAAO,GAAS,YAAU,IAAQ,SAAC,EAAM,GACvC,GAAI,EAAS,GAAI,CACf,GAAI,EAAQ,IAAI,GAAI,CAClB,IAAI,EAAK,EAAQ,IAAI,GAKrB,OAJK,IACH,EAAE,IAAM,EAAK,IACb,EAAQ,IAAI,EAAG,IAEV,CAAE,KAAM,E,CAEf,EAAQ,IAAI,EAAG,E,IAKvB,CAEA,SAAS,GAAY,EAAQ,GAC3B,GAAI,EAAQ,GACV,IAAK,IAAI,EAAI,EAAG,EAAK,EAAkB,OAAQ,IAC7C,GAAc,KAAK,EAAK,EAAG,EAAI,GAAI,EAAnC,QAEG,GAAI,EAAS,GAClB,IAAK,IAAM,KAAO,EACX,EAAe,eAAe,IACjC,GAAc,KAAK,EAAK,EAAK,EAAI,GAAM,EAAvC,GAIN,OAAO,CACT,CAEA,SAAS,GAAyB,EAAa,EAAY,GACzD,IAAM,EAAc,EAAQ,EAAK,QACb,IAAhB,EACF,GAAS,EAAO,GACP,OACT,KAAK,GAAO,EAEhB,C,oBDzCC,YAAS,KAAA,CAAC,CACT,SAAU,kCACV,SAAU,06C,QAgCD,4R,yCAtCF,G,MACA,G,oCAsDN,YAAS,KAAA,CAAC,QAAS,CAAE,QAAQ,M,aAC7B,U,gBACA,Y,kBExDH,SAAA,I,QACI,EAAA,UAAA,UAAA,SAAU,GACN,OAAO,GAAQ,E,4BAHtB,OAAI,KAAA,CAAC,CAAE,KAAM,c,kBC6DZ,SAAA,EACE,EACA,GAEA,EAAa,UAAU,E,QAGlB,EAAA,QAAP,SAAe,GACb,YADa,IAAA,MAAA,IACN,CACL,SAAU,EACV,UAAW,CACT,CAAE,QAAS,+BAA8B,SAAU,CAAC,EAAiB,GAAoB,OAAO,GAChG,CAAE,QAAS,EAA8B,SAAU,EAAgB,OAAO,I,4BAtDjF,WAAQ,KAAA,CAAC,CACR,aAAc,CACZ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAEA,GAEA,EACA,GAEF,QAAS,CACP,eACA,cACA,sBAEA,eAAa,YAEf,QAAS,CACP,EACA,EACA,EACA,EACA,GAEF,UAAW,CACT,EACA,EACA,EACA,EACA,GAEF,gBAAiB,CAAC,kB,0CA/CX,G,MAXA,gB","file":"/npm/ngx-formly-designer@0.0.6/bundles/ngx-formly-designer.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ngx-formly-designer@0.0.6/bundles/ngx-formly-designer.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 __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 (_) 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    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\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: n === \"return\" } : 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","import { Inject, Injectable, InjectionToken } from '@angular/core';\r\nimport { FormlyConfig, FormlyFieldConfig } from '@ngx-formly/core';\r\n\r\nexport const FORMLY_DESIGNER_CONFIG_TOKEN = new InjectionToken<string>('FORMLY_DESIGNER_CONFIG_TOKEN');\r\n\r\nexport const DESIGNER_WRAPPER_NAME = '$designer';\r\nexport const FIELD_DESIGNER_WRAPPER_NAME = '$fieldDesigner';\r\nexport const DESIGNER_WRAPPER_TYPES = [\r\n  DESIGNER_WRAPPER_NAME,\r\n  FIELD_DESIGNER_WRAPPER_NAME,\r\n];\r\n\r\n@Injectable()\r\nexport class FormlyDesignerConfig {\r\n  constructor(\r\n    @Inject(FORMLY_DESIGNER_CONFIG_TOKEN) configs: DesignerConfigOption[] = [],\r\n    private formlyConfig: FormlyConfig\r\n  ) {\r\n    configs.forEach(config => this.addConfig(config));\r\n  }\r\n\r\n  types: { [name: string]: DesignerTypeOption } = {};\r\n  wrappers: { [name: string]: DesignerOption } = {};\r\n  settings: DesignerSettings = { showClassName: true };\r\n\r\n  addConfig(config: DesignerConfigOption): void {\r\n    if (config.settings) {\r\n      this.setSettings(config.settings);\r\n    }\r\n    if (config.types) {\r\n      this.setType(config.types);\r\n    }\r\n    if (config.wrappers) {\r\n      this.setWrapper(config.wrappers);\r\n    }\r\n  }\r\n\r\n  setSettings(settings: DesignerSettings): void {\r\n    if (settings.showClassName !== undefined) {\r\n      this.settings.showClassName = !!settings.showClassName;\r\n    }\r\n  }\r\n\r\n  setType(options: DesignerTypeOption | DesignerTypeOption[]): void {\r\n    if (Array.isArray(options)) {\r\n      options.forEach((option) => {\r\n        this.setType(option);\r\n      });\r\n    } else {\r\n      // Throw if type isn't part of the formly config\r\n      this.formlyConfig.getType(options.name);\r\n\r\n      if (!this.types[options.name]) {\r\n        this.types[options.name] = <DesignerTypeOption>{};\r\n      }\r\n\r\n      const type = this.types[options.name];\r\n      type.name = options.name;\r\n      type.fieldArray = !!options.fieldArray;\r\n      type.fieldGroup = !!options.fieldGroup;\r\n      type.fields = options.fields;\r\n    }\r\n  }\r\n\r\n  setWrapper(options: DesignerOption | DesignerOption[]): void {\r\n    if (Array.isArray(options)) {\r\n      options.forEach((option) => {\r\n        this.setWrapper(option);\r\n      });\r\n    } else {\r\n      // Throw if wrapper isn't part of the formly config\r\n      this.formlyConfig.getWrapper(options.name);\r\n\r\n      if (!this.wrappers[options.name]) {\r\n        this.wrappers[options.name] = <DesignerOption>{};\r\n      }\r\n\r\n      const wrapper = this.wrappers[options.name];\r\n      wrapper.name = options.name;\r\n      wrapper.fields = options.fields;\r\n    }\r\n  }\r\n}\r\n\r\nexport interface DesignerOption {\r\n  name: string;\r\n  fields?: FormlyFieldConfig[];\r\n}\r\n\r\nexport interface DesignerTypeOption extends DesignerOption {\r\n  fieldArray?: boolean;\r\n  fieldGroup?: boolean;\r\n}\r\n\r\nexport interface DesignerSettings {\r\n  showClassName?: boolean;\r\n  filterWrapper?: (wrapper: string, field: FormlyFieldConfig) => boolean;\r\n}\r\n\r\nexport interface DesignerConfigOption {\r\n  settings?: DesignerSettings;\r\n  types?: DesignerTypeOption[];\r\n  wrappers?: DesignerOption[];\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormlyExtension, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { DESIGNER_WRAPPER_NAME, FIELD_DESIGNER_WRAPPER_NAME } from '../formly-designer-config';\r\n\r\n/** Creates a wrapper sandwich to augment the form */\r\n@Injectable()\r\nexport class DesignerExtension implements FormlyExtension {\r\n  postPopulate(field: FormlyFieldConfig) {\r\n    // Only surround non-editor fields; assumes editor fields have no $designerId\r\n    if (field?.templateOptions?.$designerId) {\r\n      field.wrappers = [FIELD_DESIGNER_WRAPPER_NAME, ...(field.wrappers || []), DESIGNER_WRAPPER_NAME];\r\n    }\r\n  }\r\n}\r\n","import { Component, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FieldWrapper } from '@ngx-formly/core';\r\n\r\n@Component({\r\n  selector: 'formly-designer-wrapper',\r\n  template: `\r\n    <ng-template #fieldComponent></ng-template>\r\n  `\r\n})\r\nexport class FormlyDesignerWrapperComponent extends FieldWrapper {\r\n  @ViewChild('fieldComponent', { read: ViewContainerRef, static: true }) fieldComponent!: ViewContainerRef;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class DragDropService {\r\n  private readonly _dragging = new BehaviorSubject<string | null>(null);\r\n  private readonly _dropTarget = new BehaviorSubject<string | null>(null);\r\n\r\n  get dragging() { return this._dragging.value; }\r\n\r\n  get dragging$() {\r\n    return this._dragging.asObservable();\r\n  }\r\n\r\n  get dropTarget(): string | null { return this._dropTarget.value; }\r\n\r\n  set dropTarget(id: string | null) {\r\n    this._dropTarget.next(id);\r\n  }\r\n\r\n  get dropTarget$() {\r\n    return this._dropTarget.asObservable();\r\n  }\r\n\r\n  beginDrag(subject: string | null): void {\r\n    if (subject == null) {\r\n      return;\r\n    }\r\n    console.assert(this._dragging.value === null);\r\n    this._dragging.next(subject);\r\n  }\r\n\r\n  endDrag(): void {\r\n    if (this._dragging.value != null) {\r\n      this._dragging.next(null);\r\n    }\r\n  }\r\n}\r\n","import { FormlyFieldConfig } from '@ngx-formly/core';\r\n\r\nexport { cloneDeep, get, set, unset } from 'lodash-es';\r\n\r\nconst keyPathMemberName = '_formlyDesignerKeyPath';\r\n\r\n// Source: https://github.com/formly-js/ngx-formly/blob/master/src/core/src/lib/utils.ts\r\nexport function getKeyPath(field: { key?: string | number | string[], fieldGroup?: any, fieldArray?: any }): (string | number)[] {\r\n  /* We store the keyPath in the field for performance reasons. This function will be called frequently. */\r\n  if (!(<any>field)[keyPathMemberName] || (<any>field)[keyPathMemberName].key !== field.key) {\r\n    let keyPath: (string | number)[] = [];\r\n    if (field.key) {\r\n      /* Also allow for an array key, hence the type check  */\r\n      const pathElements = isArray(field.key) ? field.key : field.key.toString().split('.');\r\n      for (let pathElement of pathElements) {\r\n        if (typeof pathElement === 'string') {\r\n          /* replace paths of the form names[2] by names.2, cfr. angular formly */\r\n          pathElement = pathElement.replace(/\\[(\\w+)\\]/g, '.$1');\r\n          keyPath = keyPath.concat(pathElement.split('.'));\r\n        } else {\r\n          keyPath.push(pathElement);\r\n        }\r\n      }\r\n      for (let i = 0; i < keyPath.length; i++) {\r\n        const pathElement = keyPath[i];\r\n        if (typeof pathElement === 'string' && /^\\d+$/.test(pathElement)) {\r\n          keyPath[i] = parseInt(pathElement, 10);\r\n        }\r\n      }\r\n    }\r\n    (<any>field)[keyPathMemberName] = {\r\n      key: field.key,\r\n      path: keyPath,\r\n    };\r\n  }\r\n\r\n  return (<any>field)[keyPathMemberName].path.slice();\r\n}\r\n\r\n\r\nexport function equalType(a: FormlyFieldConfig, b: FormlyFieldConfig): boolean {\r\n  return (!a.fieldArray === !b.fieldArray) && (!a.fieldGroup === !b.fieldGroup);\r\n}\r\n\r\nexport const isArray = Array.isArray;\r\n\r\n// https://stackoverflow.com/a/28953167\r\nexport const isEmpty = (val: any): boolean => {\r\n  if (val == null) {\r\n    return true;\r\n  } else if (typeof val === 'function' || typeof val === 'number' || typeof val === 'boolean' ||\r\n    Object.prototype.toString.call(val) === '[object Date]') {\r\n    return false;\r\n  } else if (val.length === 0) { // 0 length array or string\r\n    return true;\r\n  } else if (typeof val === 'object') {\r\n    // empty object\r\n\r\n    let r = true;\r\n    for (const _ in val)\r\n      r = false;\r\n\r\n    return r;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\nexport const isFunction = (val: any): boolean => typeof val === 'function';\r\n\r\nexport const isObject = (val: any): boolean => val != null && typeof val === 'object';\r\n\r\nexport const isString = (val: any): boolean => typeof val === 'string' || val instanceof String;\r\n\r\n/** Source:  https://stackoverflow.com/a/8809472 */\r\nexport const generateUuid = () => {\r\n  let d = new Date().getTime();\r\n  let d2 = (performance?.now && (performance.now() * 1000)) || 0;\r\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n    let r = Math.random() * 16;\r\n    if (d > 0) {\r\n      r = (d + r) % 16 | 0;\r\n      d = Math.floor(d / 16);\r\n    } else {\r\n      r = (d2 + r) % 16 | 0;\r\n      d2 = Math.floor(d2 / 16);\r\n    }\r\n    return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);\r\n  });\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\r\nimport { FormlyConfig, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { FieldsService } from './fields.service';\r\nimport { DesignerTypeOption, DESIGNER_WRAPPER_TYPES, FormlyDesignerConfig } from './formly-designer-config';\r\nimport { cloneDeep, get, isArray, isEmpty, isFunction, isString, set, unset } from './util';\r\n\r\nexport enum FieldType {\r\n  Plain,\r\n  Designer,\r\n}\r\n\r\n@Injectable()\r\nexport class FormlyDesignerService {\r\n  constructor(\r\n    private designerConfig: FormlyDesignerConfig,\r\n    private fieldsService: FieldsService,\r\n    private formlyConfig: FormlyConfig,\r\n  ) { }\r\n\r\n  private readonly _disabled = new BehaviorSubject<boolean>(false);\r\n  private readonly _designerFields = new BehaviorSubject<FormlyFieldConfig[]>([]);\r\n  private readonly _fields = new BehaviorSubject<FormlyFieldConfig[]>([]);\r\n  private readonly _selectedField = new BehaviorSubject<FormlyFieldConfig | null>(null);\r\n  private readonly _model = new BehaviorSubject<any>({});\r\n\r\n  get disabled(): boolean {\r\n    return this._disabled.value;\r\n  }\r\n\r\n  set disabled(value: boolean) {\r\n    this._disabled.next(!!value);\r\n  }\r\n\r\n  get disabled$(): Observable<boolean> {\r\n    return this._disabled.asObservable();\r\n  }\r\n\r\n  get selectedField$(): Observable<FormlyFieldConfig | null> {\r\n    return this._selectedField.asObservable();\r\n  }\r\n\r\n  get selectedDesignerId(): string {\r\n    return this._selectedField.getValue()?.templateOptions?.$designerId;\r\n  }\r\n\r\n  get designerFields(): FormlyFieldConfig[] {\r\n    return this._designerFields.value;\r\n  }\r\n\r\n  set designerFields(value: FormlyFieldConfig[]) {\r\n    // Prune the fields because ngx-formly pollutes them with internal state\r\n    // causing incorrect behavior when re-applied.\r\n    const fields = isArray(value) ? cloneDeep(value) : [];\r\n    const designerFields = this.createPrunedFields(fields, FieldType.Designer);\r\n    this._designerFields.next(designerFields);\r\n    this._fields.next(this.createPrunedFields(cloneDeep(designerFields), FieldType.Plain));\r\n  }\r\n\r\n  get designerFields$(): Observable<FormlyFieldConfig[]> {\r\n    return this._designerFields.asObservable();\r\n  }\r\n\r\n  get fields(): FormlyFieldConfig[] {\r\n    return this._fields.value;\r\n  }\r\n\r\n  set fields(value: FormlyFieldConfig[]) {\r\n    // Prune the fields because ngx-formly pollutes them with internal state\r\n    // causing incorrect behavior when re-applied.\r\n    const fields = cloneDeep(value);\r\n    const designerFields = this.createPrunedFields(fields, FieldType.Designer);\r\n    this.fieldsService.mutateFields(designerFields, false);\r\n    this._selectedField.next(null);\r\n    this._designerFields.next(designerFields);\r\n    this._fields.next(this.createPrunedFields(cloneDeep(designerFields), FieldType.Plain));\r\n  }\r\n\r\n  get fields$(): Observable<FormlyFieldConfig[]> {\r\n    return this._fields.asObservable();\r\n  }\r\n\r\n  get model(): unknown {\r\n    return this._model.value;\r\n  }\r\n\r\n  set model(value: unknown) {\r\n    this._model.next(value == null ? {} : value);\r\n  }\r\n\r\n  get model$(): Observable<unknown> {\r\n    return this._model.asObservable();\r\n  }\r\n\r\n  addField(field: FormlyFieldConfig, index?: number): void {\r\n    this.fieldsService.mutateField(field, false);\r\n\r\n    const fields = cloneDeep(this.designerFields);\r\n    const fieldIndex = (index == null || isNaN(index)) ? this.fields.length :\r\n      Math.min(this.fields.length, Math.max(0, index));\r\n\r\n    fields.splice(fieldIndex, 0, field);\r\n\r\n    this.updateFields(fields);\r\n  }\r\n\r\n  createField(type: string): FormlyFieldConfig {\r\n    const field = {} as FormlyFieldConfig;\r\n    if (type !== 'formly-group') {\r\n      field.type = type;\r\n    }\r\n    const designerType = this.designerConfig.types[type];\r\n    if (designerType?.fieldArray) {\r\n      field.fieldArray = { fieldGroup: [] };\r\n    }\r\n    if (type === 'formly-group' || designerType?.fieldGroup) {\r\n      field.fieldGroup = [];\r\n    }\r\n    return field;\r\n  }\r\n\r\n  didClickField(value: FormlyFieldConfig): void {\r\n    this._selectedField.next(value);\r\n  }\r\n\r\n  removeField(field: FormlyFieldConfig): void {\r\n    this.unsetField(field);\r\n    const designerId = field.templateOptions?.$designerId;\r\n    if (this.replaceField(designerId, null, this.designerFields)) {\r\n      this.removeControl(field.formControl);\r\n    }\r\n    this.updateFields();\r\n  }\r\n\r\n  updateField(original: FormlyFieldConfig | null, modified: FormlyFieldConfig): void {\r\n    const pruned = this.fieldsService.mutateField(this.createPrunedField(modified), false);\r\n    const designerId = original?.templateOptions?.$designerId;\r\n    if (this.replaceField(designerId, pruned, this.designerFields)) {\r\n      if (original && original.formControl !== pruned.formControl) {\r\n        this.unsetField(original);\r\n        this.removeControl(original.formControl);\r\n      }\r\n      this.updateFields();\r\n    }\r\n  }\r\n\r\n  getWrappers(field: FormlyFieldConfig): string[] {\r\n    if (!field || !isArray(field.wrappers)) {\r\n      return [];\r\n    }\r\n\r\n    const clonedField = cloneDeep(field);\r\n    let wrappers = clonedField.wrappers = (clonedField.wrappers || []);\r\n    const filterWrapper = this.designerConfig.settings.filterWrapper ?? ((wrapper, _) => wrapper !== 'form-field');\r\n    if (filterWrapper && isFunction(filterWrapper)) {\r\n      wrappers = wrappers.filter(w => filterWrapper(w, clonedField));\r\n    }\r\n\r\n    // Determine wrappers part of the formly configuration (static and dynamic) to exclude them from the result\r\n    const staticWrappers = (field.type && this.formlyConfig.getType(field.type).wrappers) || [];\r\n    const typeWrappers = staticWrappers\r\n      .concat(this.formlyConfig.templateManipulators.preWrapper.map(m => m(clonedField)))\r\n      .concat(this.formlyConfig.templateManipulators.postWrapper.map(m => m(clonedField)))\r\n      .concat(DESIGNER_WRAPPER_TYPES);\r\n\r\n    // Remove wrappers part of the formly configuration from the result\r\n    if (typeWrappers.length > 0) {\r\n      for (let i = wrappers.length - 1; i >= 0; i--) {\r\n        for (let j = typeWrappers.length - 1; j >= 0; j--) {\r\n          if (wrappers[i] === typeWrappers[j]) {\r\n            typeWrappers.splice(j, 1);\r\n            wrappers.splice(i, 1);\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return wrappers;\r\n  }\r\n\r\n  /** Prunes field of unrecognized properties */\r\n  createPrunedField(field: FormlyFieldConfig, fieldType = FieldType.Designer): FormlyFieldConfig {\r\n    const designerType = this.getDesignerType(field);\r\n    const pruned: FormlyFieldConfig = isEmpty(field.key) ? {} : { key: field.key };\r\n\r\n    if (designerType) {\r\n      pruned.type = designerType.name;\r\n      if (fieldType === FieldType.Designer && field.templateOptions?.$designerId) {\r\n        pruned.templateOptions = { $designerId: field.templateOptions.$designerId };\r\n      }\r\n      this.applyProperties(field, pruned, designerType.fields);\r\n      if (designerType.fieldArray) {\r\n        pruned.fieldArray = {\r\n          fieldGroup: this.createPrunedFields(field.fieldGroup, fieldType)\r\n        };\r\n      }\r\n    }\r\n\r\n    if (isArray(field.fieldGroup) && !isArray(pruned.fieldArray)) {\r\n      pruned.fieldGroup = this.createPrunedFields(field.fieldGroup, fieldType);\r\n\r\n      let fieldGroupClassName: string;\r\n      if (isString(field.fieldGroupClassName) &&\r\n        (fieldGroupClassName = (field.fieldGroupClassName as string).trim()).length > 0) {\r\n        pruned.fieldGroupClassName = fieldGroupClassName;\r\n      }\r\n    }\r\n\r\n    let className: string;\r\n    if (isString(field.className) && (className = (field.className as string).trim()).length > 0) {\r\n      pruned.className = className;\r\n    }\r\n\r\n    const wrappers = this.getWrappers(field);\r\n    if (wrappers.length > 0) {\r\n      pruned.wrappers = wrappers;\r\n      const designerWrapperFields = wrappers.map(wrapper => this.designerConfig.wrappers[wrapper])\r\n        .filter(designerOption => designerOption && isArray(designerOption.fields))\r\n        .reduce<FormlyFieldConfig[]>((previous, current) => previous.concat(current.fields || []), []);\r\n      this.applyProperties(field, pruned, designerWrapperFields);\r\n    }\r\n    return pruned;\r\n  }\r\n\r\n  /** Prunes fields of unrecognized properties */\r\n  createPrunedFields(fields: FormlyFieldConfig[] | undefined, fieldType = FieldType.Designer): FormlyFieldConfig[] {\r\n    const prunedFields: FormlyFieldConfig[] = [];\r\n    if (isArray(fields)) {\r\n      fields.forEach(field => {\r\n        const pruned = this.createPrunedField(field, fieldType);\r\n        if (field.fieldArray) {\r\n          pruned.fieldArray = this.createPrunedField(field.fieldArray, fieldType);\r\n        } else if (field.fieldGroup && !pruned.fieldArray) {\r\n          pruned.fieldGroup = this.createPrunedFields(field.fieldGroup, fieldType);\r\n        }\r\n        if (Object.keys(pruned).length > 0) {\r\n          prunedFields.push(pruned);\r\n        }\r\n      });\r\n    }\r\n    return prunedFields;\r\n  }\r\n\r\n  getTypeName(type: string | null | undefined): string {\r\n    if (type === 'formly-group') {\r\n      return 'fieldGroup';\r\n    }\r\n    return type ?? '';\r\n  }\r\n\r\n  private applyProperties(field: FormlyFieldConfig, designed: FormlyFieldConfig, designerFields: FormlyFieldConfig[] | undefined): void {\r\n    if (isArray(designerFields)) {\r\n      designerFields.forEach(designerField => {\r\n        const key = designerField.key;\r\n        if (key == null) {\r\n          return;\r\n        }\r\n        const value = get(field, key);\r\n        if (value != null && (!isString(value) || value.length > 0) && value !== designerField.defaultValue) {\r\n          set(designed, key, value);\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  private getDesignerType(field: FormlyFieldConfig): DesignerTypeOption | undefined {\r\n    const type = field?.templateOptions?.$fieldArray?.type ?? field.type;\r\n    const designerType = this.designerConfig.types[type];\r\n    if (designerType) {\r\n      return designerType;\r\n    }\r\n    if (field.type === 'formly-group' || (!field.type && isArray(field.fieldGroup))) {\r\n      return { name: field.type as string, fieldGroup: true, fields: [] };\r\n    }\r\n    return;\r\n  }\r\n\r\n  private replaceField(id: string, field: FormlyFieldConfig | null, fields: FormlyFieldConfig[]): boolean {\r\n    if (!id || !isArray(fields)) {\r\n      return false;\r\n    }\r\n    for (let i = 0, l = fields.length; i < l; i++) {\r\n      const otherField = fields[i];\r\n      if (otherField.templateOptions?.$designerId === id) {\r\n        if (field == null) {\r\n          fields.splice(i, 1);\r\n        } else {\r\n          fields[i] = field;\r\n        }\r\n        return true;\r\n      }\r\n      if (otherField.fieldGroup && this.replaceField(id, field, otherField.fieldGroup)) {\r\n        return true;\r\n      }\r\n      if (otherField.fieldArray && this.replaceFieldArray(id, field, otherField)) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  private replaceFieldArray(id: string | null, field: FormlyFieldConfig | null, parent: FormlyFieldConfig): boolean {\r\n    if (!id) {\r\n      return false;\r\n    }\r\n    const fieldArray = parent.fieldArray;\r\n    if (!fieldArray) {\r\n      return false;\r\n    }\r\n    if (fieldArray.templateOptions?.$designerId === id) {\r\n      if (field) {\r\n        parent.fieldArray = field;\r\n        return true;\r\n      }\r\n      return false;\r\n    }\r\n    if (fieldArray.fieldGroup && this.replaceField(id, field, fieldArray.fieldGroup)) {\r\n      return true;\r\n    }\r\n    return fieldArray.fieldArray != null && this.replaceFieldArray(id, field, fieldArray);\r\n  }\r\n\r\n  private buildPath(key: string, path: string, arrayNext: boolean = false) {\r\n    return path ? key + (arrayNext ? path : '.' + path) : key;\r\n  }\r\n\r\n  private path(control: AbstractControl, includeSelf: boolean = true): string {\r\n    let path = '';\r\n    let arrayNext = false;\r\n    let root = includeSelf ? control : control?.parent;\r\n    for (let child = root, parent = root?.parent; !!parent; child = parent, parent = parent.parent) {\r\n      if (parent instanceof FormGroup) {\r\n        for (const key in parent.controls) {\r\n          if (parent.controls[key] === child) {\r\n            path = this.buildPath(key, path, arrayNext);\r\n            arrayNext = false;\r\n            break;\r\n          }\r\n        }\r\n      } else if (parent instanceof FormArray) {\r\n        for (let i = 0; i < parent.length; i++) {\r\n          if (parent.at(i) === child) {\r\n            path = this.buildPath('[' + i + ']', path, arrayNext);\r\n            arrayNext = true;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return path;\r\n  }\r\n\r\n  private unsetField(field: FormlyFieldConfig): void {\r\n    if (field.fieldArray) {\r\n      this.unsetField(field.fieldArray);\r\n    }\r\n    if (field.fieldGroup) {\r\n      field.fieldGroup.forEach(f => this.unsetField(f));\r\n    }\r\n    if (field.formControl) {\r\n      const path = this.path(field.formControl);\r\n      unset(this.model, path);\r\n    }\r\n  }\r\n\r\n  private removeControl(control: AbstractControl | undefined): void {\r\n    const parent = control?.parent;\r\n    if (parent instanceof FormGroup) {\r\n      for (const key in parent.controls) {\r\n        if (parent.controls[key] === control) {\r\n          parent.removeControl(key);\r\n          return;\r\n        }\r\n      }\r\n    } else if (parent instanceof FormArray) {\r\n      for (let i = 0; i < parent.length; i++) {\r\n        if (parent.at(i) === control) {\r\n          parent.removeAt(i);\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private updateFields(fields?: FormlyFieldConfig[], model?: any): void {\r\n    this.designerFields = fields ?? cloneDeep(this.designerFields);\r\n    // Update the selected field to use the updated instance, if any\r\n    this._selectedField.next(this.fieldsService.find(this.selectedDesignerId, this.designerFields) ?? null);\r\n    this.model = model ?? cloneDeep(this.model);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { DesignerOption, FormlyDesignerConfig } from './formly-designer-config';\r\nimport { cloneDeep, equalType, generateUuid, getKeyPath, isArray, isString } from './util';\r\n\r\n@Injectable()\r\nexport class FieldsService {\r\n  constructor(\r\n    private formlyDesignerConfig: FormlyDesignerConfig\r\n  ) { }\r\n\r\n  getFullKeyPath(field: FormlyFieldConfig, fields: FormlyFieldConfig[]): (string | number)[] {\r\n    let keyPath: (string | number)[] = [];\r\n    if (field && field.key) {\r\n      const parents = new Map<FormlyFieldConfig, FormlyFieldConfig>();\r\n      this.traverseFields(fields, (f, path, parent) => {\r\n        parent && parents.set(f, parent);\r\n      });\r\n\r\n      keyPath = getKeyPath(field);\r\n      let cur = parents.get(field);\r\n      while (cur) {\r\n        keyPath = getKeyPath(cur).concat(keyPath);\r\n        cur = parents.get(cur);\r\n      }\r\n    }\r\n    return keyPath;\r\n  }\r\n\r\n  getTypeFields(type: string): FormlyFieldConfig[] {\r\n    return this.getFields(type, 'type');\r\n  }\r\n\r\n  getWrapperFields(wrapper: string | null | undefined): FormlyFieldConfig[] {\r\n    return wrapper ? this.getFields(wrapper, 'wrapper') : [];\r\n  }\r\n\r\n  checkField(field: FormlyFieldConfig, fields: FormlyFieldConfig[], parent?: FormlyFieldConfig): boolean {\r\n    if (field.key == null || (isString(field.key) && !field.key) || (isArray(field.key) && !field.key.length)) {\r\n      return true;\r\n    }\r\n    const fullPathByField = new Map<FormlyFieldConfig, (string | number)[]>();\r\n    const newPath = this.getFullKeyPath(parent || {}, fields).concat(getKeyPath(field));\r\n    const length = newPath.length;\r\n    return !this.traverseFields(fields, (f, p) => {\r\n      const path = fullPathByField.get(f) || fullPathByField.set(f, (p || []).concat(getKeyPath(f))).get(f);\r\n      if (path?.length !== length) {\r\n        return;\r\n      }\r\n      for (let i = 0; i < length; i++) {\r\n        if (path[i] !== newPath[i]) {\r\n          return;\r\n        }\r\n      }\r\n      return !equalType(field, f);\r\n    });\r\n  }\r\n\r\n  find(id: string | null, fields?: FormlyFieldConfig[]): FormlyFieldConfig | undefined {\r\n    if (!id || !isArray(fields)) {\r\n      return;\r\n    }\r\n    const stack = fields.slice();\r\n    while (stack.length) {\r\n      const field = stack.pop() as FormlyFieldConfig;\r\n      if (field.templateOptions?.$designerId === id) {\r\n        return field;\r\n      }\r\n      if (field.fieldArray) {\r\n        stack.push(field.fieldArray);\r\n      } else if (field.fieldGroup) {\r\n        stack.push(...field.fieldGroup);\r\n      }\r\n    }\r\n    return;\r\n  }\r\n\r\n  /** Find a field by full key path  */\r\n  findField(field: FormlyFieldConfig, fields: FormlyFieldConfig[], parent?: FormlyFieldConfig): FormlyFieldConfig | undefined {\r\n    if (!field || !fields) {\r\n      return;\r\n    }\r\n    const fullPathByField = new Map<FormlyFieldConfig, (string | number)[]>();\r\n    const newPath = this.getFullKeyPath(parent || {}, fields).concat(getKeyPath(field));\r\n    const length = newPath.length;\r\n    return this.traverseFields(fields, (f, p) => {\r\n      const path = fullPathByField.get(f) || fullPathByField.set(f, (p || []).concat(getKeyPath(f))).get(f);\r\n      if (path?.length !== length) {\r\n        return;\r\n      }\r\n      for (let i = 0; i < length; i++) {\r\n        if (path[i] === newPath[i]) {\r\n          return f;\r\n        }\r\n      }\r\n      return;\r\n    });\r\n  }\r\n\r\n  mutateField(field: FormlyFieldConfig, editorField: boolean): FormlyFieldConfig {\r\n    field.templateOptions = { ...field.templateOptions };\r\n    if (!editorField && !field.templateOptions.$designerId) {\r\n      field.templateOptions.$designerId = generateUuid();\r\n    }\r\n    if (field.fieldGroup) {\r\n      this.mutateFields(field.fieldGroup, editorField);\r\n    } else if (field.fieldArray && field.fieldArray.fieldGroup) {\r\n      if (editorField) {\r\n        this.mutateField(field.fieldArray, editorField);\r\n      } else {\r\n        // Treating fieldArrays as fieldGroups\r\n        field.templateOptions.$fieldArray = { type: field.type };\r\n        field.fieldGroup = field.fieldArray.fieldGroup;\r\n        delete field.fieldArray;\r\n        delete field.type;\r\n\r\n        this.mutateFields(field.fieldGroup, editorField);\r\n      }\r\n    }\r\n    return field;\r\n  }\r\n\r\n  mutateFields(fields: FormlyFieldConfig[], editorFields: boolean): void {\r\n    fields.forEach(field => this.mutateField(field, editorFields));\r\n  }\r\n\r\n  traverseFields(fields: FormlyFieldConfig[],\r\n    callback: (field: FormlyFieldConfig, path?: (string | number)[], parent?: FormlyFieldConfig) => boolean | any,\r\n    path?: (string | number)[],\r\n    parent?: FormlyFieldConfig): boolean | any {\r\n    path = path || [];\r\n    for (const field of fields) {\r\n      const value = callback(field, path, parent);\r\n      if (value) {\r\n        return value;\r\n      }\r\n      if (field.fieldArray) {\r\n        const arrayValue = this.traverseFields([field.fieldArray], callback, path.concat(getKeyPath(field)), field);\r\n        if (arrayValue) {\r\n          return arrayValue;\r\n        }\r\n      } else if (field.fieldGroup) {\r\n        const groupValue = this.traverseFields(field.fieldGroup, callback, path.concat(getKeyPath(field)), field);\r\n        if (groupValue) {\r\n          return groupValue;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private getFields(name: string, type: string): FormlyFieldConfig[] {\r\n    const fields = this.getDesignerOptions(type)[name]?.fields;\r\n    if (!fields) {\r\n      return [];\r\n    }\r\n    this.mutateFields(cloneDeep(fields), true);\r\n    return fields;\r\n  }\r\n\r\n  private getDesignerOptions(type: string): { [name: string]: DesignerOption } {\r\n    if (type === 'type') {\r\n      return this.formlyDesignerConfig.types;\r\n    }\r\n    if (type === 'wrapper') {\r\n      return this.formlyDesignerConfig.wrappers;\r\n    }\r\n    return {};\r\n  }\r\n}\r\n","export enum DragDropType {\r\n  Type = 'formly-designer-type',\r\n  Field = 'formly-designer-field',\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  HostListener,\r\n  Inject,\r\n  NgZone,\r\n  OnDestroy,\r\n  OnInit,\r\n  Optional,\r\n  SkipSelf,\r\n  ViewChild,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { isString } from 'lodash';\r\nimport { fromEvent, NEVER, Subscription, timer } from 'rxjs';\r\nimport { catchError, map, tap } from 'rxjs/operators';\r\nimport { DragDropService, FieldsService, FormlyDesignerService } from '../';\r\nimport { DragDropType } from '../models';\r\nimport { Parent } from '../parent';\r\nimport { ParentService } from '../parent.service';\r\nimport { cloneDeep } from '../util';\r\n\r\nexport enum DropPlacement {\r\n  self,\r\n  before,\r\n  after,\r\n}\r\n\r\n@Component({\r\n  selector: 'formly-designer-field-wrapper',\r\n  template: `\r\n    <div #content class=\"designer-content\" [title]=\"title\"\r\n      [ngClass]=\"{\r\n        'designer-subject': isSubject,\r\n        'designer-drag-source': isDragSource,\r\n        'designer-drop-hint': isDragging,\r\n        'designer-drop-target': isDropTargetSelf,\r\n        'designer-hover': isHovering && !isDragging\r\n      }\"\r\n      draggable=\"true\" (dragstart)=\"onDragStart($event)\" (dragend)=\"onDragEnd()\"\r\n      (dragenter)=\"onDragEnter($event)\" (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\"\r\n      (mouseout)=\"onMouseOut()\">\r\n      <ng-template #fieldComponent></ng-template>\r\n    </div>\r\n    <div *ngIf=\"isDropTargetBefore\" class=\"designer-drop-target-before\"></div>\r\n    <div *ngIf=\"isDropTargetAfter\" class=\"designer-drop-target-after\"></div>\r\n  `,\r\n  styles: [`\r\n    :host {\r\n      display: flex;\r\n      position: relative;\r\n      justify-content: flex-start;\r\n      align-content: flex-start;\r\n      align-items: flex-start;\r\n      margin: .25rem;\r\n    }\r\n    .designer-content {\r\n      border: 1px dashed #000;\r\n      border-radius: 5px;\r\n      min-height: 2rem;\r\n      padding: .25em 1em;\r\n      width: 100%;\r\n    }\r\n    .designer-content.designer-hover {\r\n      background-color: #f0f4c3;\r\n      border-color: #00c853;\r\n      cursor: pointer;\r\n    }\r\n    .designer-content.designer-subject {\r\n      border-color: #00c853;\r\n      border-style: solid;\r\n      border-width: 2px;\r\n    }\r\n    .designer-content.designer-drop-hint {\r\n      background-color: pink;\r\n      border-color: #bbdefb;\r\n    }\r\n    .designer-content.designer-drop-target {\r\n      background-color: #f0f4c3;\r\n      border-color: #00c853;\r\n    }\r\n    .designer-drag-source {\r\n      opacity: .4;\r\n    }\r\n    .designer-drop-target-before {\r\n      position: absolute;\r\n      top: 0;\r\n      left: 0;\r\n      right: 0;\r\n      background-color: aqua;\r\n      height: 12px;\r\n      pointer-events: none;\r\n      z-index: 1;\r\n    }\r\n    .designer-drop-target-after {\r\n      position: absolute;\r\n      bottom: 0;\r\n      left: 0;\r\n      right: 0;\r\n      background-color: yellow;\r\n      height: 12px;\r\n      pointer-events: none;\r\n      z-index: 1;\r\n    }\r\n  `],\r\n  providers: [\r\n    ParentService,\r\n  ],\r\n})\r\nexport class FormlyDesignerFieldWrapperComponent extends FieldWrapper implements OnInit, OnDestroy, Parent {\r\n  @ViewChild('fieldComponent', { read: ViewContainerRef, static: true }) fieldComponent!: ViewContainerRef;\r\n  @ViewChild('content', { read: ElementRef, static: true }) content?: ElementRef<HTMLElement>;\r\n\r\n  dropTargetCounter = 0;\r\n  private subscriptions: Subscription[] = [];\r\n\r\n  get title(): string | null { return this._title; }\r\n  set title(value: string | null) {\r\n    if (value !== this._title) {\r\n      this._title = value;\r\n      this.changeDetector.markForCheck();\r\n    }\r\n  }\r\n  private _title: string | null = null;\r\n\r\n  get isDragging() { return this._isDragging; }\r\n  set isDragging(value: boolean) {\r\n    if (value !== this._isDragging) {\r\n      this._isDragging = value;\r\n      this.changeDetector.markForCheck();\r\n    }\r\n  }\r\n  private _isDragging = false;\r\n\r\n  get isHovering() { return this._isHovering; }\r\n  set isHovering(value: boolean) {\r\n    if (value !== this._isHovering) {\r\n      this._isHovering = value;\r\n      this.changeDetector.markForCheck();\r\n    }\r\n  }\r\n  private _isHovering = false;\r\n\r\n  get parent(): Parent | undefined { return this.parentParentService?.parent; }\r\n\r\n  get dropTargetPlacement(): DropPlacement | null { return this._dropTargetPlacement; }\r\n  set dropTargetPlacement(value: DropPlacement | null) {\r\n    if (value !== this._dropTargetPlacement) {\r\n      this._dropTargetPlacement = value;\r\n      this.changeDetector.markForCheck();\r\n    }\r\n  }\r\n  private _dropTargetPlacement: DropPlacement | null = null;\r\n\r\n  get designerId(): string | undefined { return this.field.templateOptions?.$designerId; }\r\n\r\n  get isFieldGroup(): boolean { return Array.isArray(this.field.fieldGroup); }\r\n\r\n  get isDragSource(): boolean {\r\n    return this.dragDropService.dragging === this.designerId;\r\n  }\r\n\r\n  get isDropTarget(): boolean {\r\n    return this.dragDropService.dropTarget === this.designerId;\r\n  }\r\n\r\n  get isDropTargetSelf(): boolean {\r\n    return this.isDropTarget && !this.dropTargetPlacement && this.isFieldGroup;\r\n  }\r\n\r\n  get isDropTargetBefore(): boolean {\r\n    return this.isDropTarget && this.dropTargetPlacement === DropPlacement.before;\r\n  }\r\n\r\n  get isDropTargetAfter(): boolean {\r\n    return this.isDropTarget && this.dropTargetPlacement === DropPlacement.after;\r\n  }\r\n\r\n  get isSubject(): boolean {\r\n    return this.formlyDesignerService.selectedDesignerId === this.designerId;\r\n  }\r\n\r\n  constructor(\r\n    private changeDetector: ChangeDetectorRef,\r\n    private dragDropService: DragDropService,\r\n    private fieldsService: FieldsService,\r\n    public formlyDesignerService: FormlyDesignerService,\r\n    private zone: NgZone,\r\n    parentService: ParentService,\r\n    @Inject(DOCUMENT) private document?: any,\r\n    @SkipSelf() @Optional() private parentParentService?: ParentService,\r\n  ) {\r\n    super();\r\n    parentService.parent = this;\r\n    if (parentParentService) {\r\n      parentParentService.addChild(this);\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.document?.defaultView) {\r\n      return;\r\n    }\r\n    const content = this.content?.nativeElement;\r\n    if (!content) {\r\n      return;\r\n    }\r\n    this.subscriptions.push(\r\n      this.dragDropService.dragging$.subscribe(dragging => this.isDragging = dragging != null),\r\n      fromEvent(this.document.defaultView, 'mouseup').subscribe(this.onWindowMouseUp.bind(this)),\r\n    );\r\n    this.zone.runOutsideAngular(() => {\r\n      this.subscriptions.push(\r\n        fromEvent(content, 'dragover').subscribe(e => this.onDragOver(e as DragEvent)),\r\n        fromEvent(content, 'mouseover').subscribe(e => this.onMouseOver(e as MouseEvent)),\r\n      );\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.splice(0).forEach(subscription => subscription.unsubscribe());\r\n    this.parentParentService?.removeChild(this);\r\n  }\r\n\r\n  @HostListener('click', ['$event'])\r\n  onClick(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.formlyDesignerService.didClickField(this.field);\r\n  }\r\n\r\n  onDragStart(event: DragEvent): void {\r\n    if (this.dragDropService.dragging) {\r\n      return;\r\n    }\r\n    event.dataTransfer?.setData(DragDropType.Field, this.designerId ?? '');\r\n    this.dragDropService.beginDrag(this.designerId ?? null);\r\n  }\r\n\r\n  onDragEnd(): void {\r\n    this.dragDropService.endDrag();\r\n  }\r\n\r\n  onDragEnter(event: DragEvent): void {\r\n    if (!this.shouldHandleDragEvent(event)) {\r\n      return;\r\n    }\r\n    event.preventDefault();\r\n    this.dropTargetCounter++;\r\n  }\r\n\r\n  onDragLeave(event: DragEvent): void {\r\n    if (!this.shouldHandleDragEvent(event)) {\r\n      return;\r\n    }\r\n    if (this.dropTargetCounter > 0) {\r\n      this.dropTargetCounter--;\r\n      if (this.dropTargetCounter === 0) {\r\n        this.dropTargetPlacement = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  onDragOver(event: DragEvent): void {\r\n    if (event.defaultPrevented || !this.shouldHandleDragEvent(event)) {\r\n      return;\r\n    }\r\n    this.zone.run(() => {\r\n      this.dropTargetPlacement = this.getDropTargetPlacement(event);\r\n      this.dragDropService.dropTarget = this.field.templateOptions?.$designerId ?? null;\r\n    });\r\n    event.preventDefault();\r\n  }\r\n\r\n  private shouldHandleDragEvent(event: DragEvent): boolean {\r\n    if (event.dataTransfer?.types.some(t => t === DragDropType.Field)) {\r\n      return this.dragDropService.dragging !== this.designerId;\r\n    }\r\n    return !!event.dataTransfer?.types.some(t => t === DragDropType.Type) &&\r\n      isString(this.dragDropService.dragging);\r\n  }\r\n\r\n  private getDropTargetPlacement(event: DragEvent): DropPlacement {\r\n    const rect = this.content?.nativeElement.getBoundingClientRect();\r\n    if (rect) {\r\n      const threshold = rect.height * .33;\r\n      if (event.clientY < rect.top + threshold) {\r\n        return DropPlacement.before;\r\n      }\r\n      if (event.clientY > rect.bottom - threshold) {\r\n        return DropPlacement.after;\r\n      }\r\n    }\r\n    return DropPlacement.self;\r\n  }\r\n\r\n  onDrop(event: DragEvent): void {\r\n    if (this.shouldHandleDragEvent(event)) {\r\n      event.stopPropagation();\r\n      if (event.dataTransfer?.types.includes(DragDropType.Field)) {\r\n        const designerId = this.dragDropService.dragging;\r\n        const field = this.fieldsService.find(designerId, this.formlyDesignerService.designerFields);\r\n        if (field) {\r\n          // Get placement index before the fields refresh caused by removal\r\n          const index = this.getDropPlacementIndex(field);\r\n          this.formlyDesignerService.removeField(field);\r\n          if (this.parent && this.dropTargetPlacement !== DropPlacement.self) {\r\n            this.parent.addChildField(field, index);\r\n          } else {\r\n            this.addChildField(field);\r\n          }\r\n        }\r\n      } else if (event.dataTransfer?.types.includes(DragDropType.Type)) {\r\n        if (this.dragDropService.dragging) {\r\n          if (this.parent && this.dropTargetPlacement !== DropPlacement.self) {\r\n            this.parent.addChildType(this.dragDropService.dragging, this.getDropPlacementIndex());\r\n          } else {\r\n            this.addChildType(this.dragDropService.dragging);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    this.dragDropService.endDrag();\r\n    this.resetDrop();\r\n  }\r\n\r\n  onMouseOver(event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.zone.run(() => {\r\n      this.isHovering = true;\r\n      this.title = this.dragDropService.dragging == null ?\r\n        `Click to edit ${this.formlyDesignerService.getTypeName(this.field.type)}` :\r\n        null;\r\n    });\r\n  }\r\n\r\n  onMouseOut(): void {\r\n    this.isHovering = false;\r\n  }\r\n\r\n  onWindowMouseUp(): void {\r\n    this.resetDrop();\r\n  }\r\n\r\n  async addChildField(field: FormlyFieldConfig, index?: number): Promise<void> {\r\n    if (!this.isFieldGroup) {\r\n      return;\r\n    }\r\n    if (!this.fieldsService.checkField(field, this.formlyDesignerService.designerFields, this.field)) {\r\n      return;\r\n    }\r\n    const updatedField = cloneDeep(this.field);\r\n    if (!updatedField.fieldGroup) {\r\n      return;\r\n    }\r\n    const fieldIndex = (index == null || isNaN(index)) ? updatedField.fieldGroup.length :\r\n      Math.min(updatedField.fieldGroup.length, Math.max(0, index));\r\n    updatedField.fieldGroup.splice(fieldIndex, 0, field);\r\n    return timer(0)\r\n      .pipe(\r\n        tap(() => this.formlyDesignerService.updateField(this.field, updatedField)),\r\n        catchError(() => NEVER),\r\n        map(() => undefined)\r\n      ).toPromise();\r\n  }\r\n\r\n  async addChildType(type: string, index?: number): Promise<void> {\r\n    const field = this.formlyDesignerService.createField(type);\r\n    await this.addChildField(field, index);\r\n  }\r\n\r\n  /**\r\n   * @param dropField - field to ignore for index determination\r\n   */\r\n  private getDropPlacementIndex(dropField?: FormlyFieldConfig): number | undefined {\r\n    if (this.parent && this.dropTargetPlacement !== DropPlacement.self) {\r\n      const parentChildren = dropField ?\r\n        this.parentParentService?.children.filter(fd => fd.designerId !== dropField.templateOptions?.$designerId) :\r\n        this.parentParentService?.children;\r\n      const dropIndex = parentChildren?.indexOf(this) ?? 0;\r\n      return this.dropTargetPlacement === DropPlacement.before ? dropIndex : dropIndex + 1;\r\n    }\r\n    return;\r\n  }\r\n\r\n  private resetDrop(): void {\r\n    this.dropTargetCounter = 0;\r\n    this.dropTargetPlacement = null;\r\n    if (this.isDropTarget) {\r\n      this.dragDropService.dropTarget = null;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Parent } from './parent';\r\n\r\n@Injectable()\r\nexport class ParentService {\r\n  parent?: Parent;\r\n\r\n  get children(): ReadonlyArray<Parent> { return this._children; }\r\n  private set children(value: ReadonlyArray<Parent>) {\r\n    this._children = value;\r\n  }\r\n  private _children: ReadonlyArray<Parent> = [];\r\n\r\n  addChild(child: Parent, index?: number): void {\r\n    const childIndex = index == null || isNaN(index) ? this.children.length :\r\n      Math.min(this.children.length, Math.max(0, index));\r\n    const children = this.children.slice();\r\n    children.splice(childIndex, 0, child);\r\n    this.children = children;\r\n  }\r\n\r\n  removeChild(child: Parent): void {\r\n    this.children = this.children.filter(c => c === child);\r\n  }\r\n\r\n  clearChildren(): void {\r\n    this.children = [];\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ConfigOption } from '@ngx-formly/core';\r\nimport { DesignerExtension } from './extensions/designer';\r\nimport {\r\n  DESIGNER_WRAPPER_NAME,\r\n  FIELD_DESIGNER_WRAPPER_NAME\r\n} from './formly-designer-config';\r\nimport { FormlyDesignerWrapperComponent } from './wrappers/designer';\r\nimport { FormlyDesignerFieldWrapperComponent } from './wrappers/field-designer';\r\n\r\nexport const fieldComponents = [];\r\n\r\nexport const wrapperComponents = [\r\n  FormlyDesignerWrapperComponent,\r\n  FormlyDesignerFieldWrapperComponent\r\n];\r\n\r\n@Injectable()\r\nexport class Config implements ConfigOption {\r\n  wrappers: { name: string; component: any; }[];\r\n  extensions: { name: string; extension: any; }[];\r\n  constructor(\r\n    designerExtension: DesignerExtension\r\n  ) {\r\n    this.wrappers = [\r\n      { name: DESIGNER_WRAPPER_NAME, component: FormlyDesignerWrapperComponent },\r\n      { name: FIELD_DESIGNER_WRAPPER_NAME, component: FormlyDesignerFieldWrapperComponent },\r\n    ];\r\n    this.extensions = [\r\n      { name: 'designer', extension: designerExtension }\r\n    ];\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n  ViewContainerRef,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { isString } from 'lodash';\r\nimport { merge, NEVER, Observable, Subscription, timer } from 'rxjs';\r\nimport { catchError, debounceTime, map, tap } from 'rxjs/operators';\r\nimport { DragDropService, FieldsService, FieldType, FormlyDesignerService } from './';\r\nimport { ParentService } from './parent.service';\r\n\r\n@Component({\r\n  selector: 'formly-designer',\r\n  template: `\r\n    <form novalidate [formGroup]=\"form\">\r\n      <formly-form *ngIf=\"fields.length > 0; else placeholder\" [options]=\"options\" [model]=\"model\" [form]=\"form\" [fields]=\"(formlyDesignerService.designerFields$ | async) ?? []\">\r\n      </formly-form>\r\n      <ng-template #placeholder>\r\n        <div class=\"content d-flex justify-content-center align-items-center\"\r\n          [ngClass]=\"{ 'drop-hint': isDragging$ | async, 'drop-target': dropTargetCounter > 0 }\"\r\n          (dragenter)=\"onDragEnter($event)\" (dragleave)=\"onDragLeave()\" (dragover)=\"onDragOver($event)\" (drop)=\"onDrop($event)\">\r\n          <div>+</div>\r\n        </div>\r\n      </ng-template>\r\n    </form>\r\n    <!--<div>\r\n      Designer Fields:\r\n      <pre>{{ formlyDesignerService.designerFields$ | async | decycle | json }}</pre>\r\n    </div>-->\r\n  `,\r\n  styles: [`\r\n    formly-designer > form > .content {\r\n      border: 1px dashed #000;\r\n      border-radius: 5px;\r\n      min-height: 2rem;\r\n      padding: 1.5em 1em 0 1em;\r\n      width: 100%;\r\n    }\r\n    formly-designer > form > .content.drop-hint {\r\n      background-color: #e3f2fd;\r\n      border-color: #bbdefb;\r\n    }\r\n    formly-designer > form > .content.drop-target {\r\n      background-color: #f0f4c3;\r\n      border-color: #00c853;\r\n    }\r\n    formly-designer > form > .content > div {\r\n      padding: 2rem;\r\n      padding-bottom: 4rem;\r\n      font-size: 64pt;\r\n      pointer-events: none;\r\n    }\r\n    formly-designer-field-picker .form-group > .input-group > formly-designer-type-select > select {\r\n      border-radius: .25rem 0 0 .25rem;\r\n      border-right: 0;\r\n    }\r\n    formly-designer-wrapper-editor .card > .card-body .form-control {\r\n      width: 100%;\r\n    }\r\n    formly-designer-wrapper-picker .form-group > .input-group > formly-designer-wrapper-select > select {\r\n      border-radius: .25rem 0 0 .25rem;\r\n      border-right: 0;\r\n    }\r\n  `],\r\n  providers: [\r\n    ParentService,\r\n  ],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormlyDesignerComponent implements OnDestroy, OnInit {\r\n  @ViewChild('formlyFormContainer', { read: ViewContainerRef, static: true }) formlyFormContainer?: ViewContainerRef;\r\n  @Output() fieldsChange = new EventEmitter<FormlyFieldConfig[]>();\r\n  @Output() modelChange = new EventEmitter<any>();\r\n\r\n  types: string[] = [];\r\n  wrappers: string[] = [];\r\n  properties: string[] = [];\r\n  debugFields: FormlyFieldConfig[] = [];\r\n  isDragging$: Observable<boolean>;\r\n  dropTargetCounter = 0;\r\n\r\n  form: FormGroup;\r\n  options: any = {};\r\n\r\n  get designerId(): string { return ''; }\r\n\r\n  private readonly subscriptions: Subscription[] = [];\r\n\r\n  constructor(\r\n    private dragDropService: DragDropService,\r\n    private fieldsService: FieldsService,\r\n    private formBuilder: FormBuilder,\r\n    public formlyDesignerService: FormlyDesignerService,\r\n    private parentService: ParentService,\r\n  ) {\r\n    parentService.parent = this;\r\n\r\n    // Editor forms will be restricted to a single field depth; all designer keys should be\r\n    // complex (e.g. \"templateOptions.some.property\")\r\n    this.form = this.formBuilder.group({});\r\n    this.isDragging$ = this.dragDropService.dragging$.pipe(map(dragging => dragging != null));\r\n  }\r\n\r\n  @Input()\r\n  get disabled(): boolean {\r\n    return this.formlyDesignerService.disabled;\r\n  }\r\n\r\n  set disabled(value: boolean) {\r\n    this.formlyDesignerService.disabled = value;\r\n  }\r\n\r\n  @Input()\r\n  get fields(): FormlyFieldConfig[] {\r\n    return this.formlyDesignerService.fields;\r\n  }\r\n\r\n  set fields(value: FormlyFieldConfig[]) {\r\n    this.formlyDesignerService.fields = value;\r\n  }\r\n\r\n  @Input()\r\n  get model(): any {\r\n    return this.formlyDesignerService.model;\r\n  }\r\n\r\n  set model(value: any) {\r\n    this.formlyDesignerService.model = value;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.subscriptions.push(\r\n      this.formlyDesignerService.designerFields$\r\n        .subscribe(fields => {\r\n          // Clear the existing children before the form reset\r\n          this.parentService.clearChildren();\r\n\r\n          this.options = {};\r\n          this.form = this.formBuilder.group({});\r\n          this.fieldsChange.emit(this.formlyDesignerService.createPrunedFields(fields, FieldType.Plain));\r\n        }),\r\n\r\n      merge(this.formlyDesignerService.model$, this.form.valueChanges)\r\n        .pipe(debounceTime(50))\r\n        .subscribe(() => this.modelChange.emit(this.formlyDesignerService.model)),\r\n    );\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.splice(0).forEach(subscription => subscription.unsubscribe());\r\n  }\r\n\r\n  onFieldSelected(field: FormlyFieldConfig): void {\r\n    timer(0).pipe(\r\n      tap(() => {\r\n        if (this.fieldsService.checkField(field, this.formlyDesignerService.designerFields)) {\r\n          this.formlyDesignerService.addField(field);\r\n        }\r\n      }),\r\n      catchError(() => NEVER)).subscribe();\r\n  }\r\n\r\n  onDragEnter(event: DragEvent): void {\r\n    event.preventDefault();\r\n    this.dropTargetCounter++;\r\n  }\r\n\r\n  onDragLeave(): void {\r\n    if (this.dropTargetCounter > 0) {\r\n      this.dropTargetCounter--;\r\n    }\r\n  }\r\n\r\n  onDragOver(event: DragEvent): void {\r\n    event.preventDefault();\r\n  }\r\n\r\n  onDrop(event: DragEvent): void {\r\n    if (this.fields.length) {\r\n      return;\r\n    }\r\n    if (!isString(this.dragDropService.dragging)) {\r\n      return;\r\n    }\r\n    this.addChildType(this.dragDropService.dragging);\r\n    event.preventDefault();\r\n  }\r\n\r\n  addChildField(field: FormlyFieldConfig, index?: number): void {\r\n    this.formlyDesignerService.addField(field, index);\r\n  }\r\n\r\n  addChildType(type: string, index?: number): void {\r\n    const field = this.formlyDesignerService.createField(type);\r\n    this.addChildField(field, index);\r\n  }\r\n}\r\n","import { Component, ElementRef, forwardRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { merge, Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { FieldsService, FormlyDesignerConfig } from '..';\r\nimport { cloneDeep, isObject, isString } from '../util';\r\n\r\nconst FIELD_EDITOR_CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => FieldEditorComponent),\r\n  multi: true\r\n};\r\n\r\n@Component({\r\n  selector: 'formly-designer-field-editor',\r\n  template: `\r\n    <form [formGroup]=\"form\" novalidate>\r\n      <div class=\"card\">\r\n        <div class=\"card-header\" [ngClass]=\"{solo: !hasContent && fields.length === 0}\">\r\n          <div class=\"form-group\">\r\n            <label class=\"form-control-label\">key</label>\r\n            <input formControlName=\"key\" class=\"form-control\">\r\n          </div>\r\n          <div *ngIf=\"formlyDesignerConfig.settings.showClassName\" class=\"form-group\">\r\n            <label class=\"form-control-label\">className</label>\r\n            <input formControlName=\"className\" class=\"form-control\">\r\n          </div>\r\n          <div *ngIf=\"fieldGroup && formlyDesignerConfig.settings.showClassName\" class=\"form-group\">\r\n            <label class=\"form-control-label\">fieldGroupClassName</label>\r\n            <input formControlName=\"fieldGroupClassName\" class=\"form-control\">\r\n          </div>\r\n          <div *ngIf=\"showType\" class=\"form-group\"\r\n            [ngClass]=\"{'has-danger': form.hasError('type') && (type.dirty || type.touched)}\">\r\n            <label class=\"form-control-label\">type</label>\r\n            <formly-designer-type-select formControlName=\"type\" [fieldGroup]=\"fieldGroup\" [type]=\"type.value\"></formly-designer-type-select>\r\n            <div *ngIf=\"form.hasError('type') && (type.dirty || type.touched)\" class=\"form-control-feedback\">\r\n              type required.\r\n            </div>\r\n          </div>\r\n          <div *ngIf=\"showWrappers\" class=\"form-group\">\r\n            <label class=\"form-control-label\">wrappers</label>\r\n            <formly-designer-wrappers-picker [field]=\"field\"\r\n              (selected)=\"onWrappersSelected($event)\">\r\n            </formly-designer-wrappers-picker>\r\n          </div>\r\n        </div>\r\n        <div #block class=\"card-body\">\r\n          <formly-form *ngIf=\"fields.length > 0\" [form]=\"fieldForm\" [fields]=\"fields\" [model]=\"field\">\r\n          </formly-form>\r\n          <ng-content></ng-content>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  `,\r\n  styles: [`\r\n    .card-header.solo {\r\n      border-bottom: 0;\r\n    }\r\n    .card-header.solo + .card-body {\r\n      display: none;\r\n    }\r\n  `],\r\n  providers: [\r\n    FIELD_EDITOR_CONTROL_VALUE_ACCESSOR\r\n  ]\r\n})\r\nexport class FieldEditorComponent implements ControlValueAccessor, OnDestroy, OnInit {\r\n  @Input() fieldGroup = false;\r\n  @Input() showType = false;\r\n  @Input() showWrappers = false;\r\n  @Input() hasContent = false;\r\n  @ViewChild('block', { static: true }) blockElRef?: ElementRef;\r\n\r\n  private readonly subscriptions: Subscription[] = [];\r\n  private valueChangesSubscription?: Subscription;\r\n\r\n  constructor(\r\n    private fieldsService: FieldsService,\r\n    private fb: FormBuilder,\r\n    public formlyDesignerConfig: FormlyDesignerConfig\r\n  ) {\r\n    this.form = fb.group({\r\n      key: this.key = fb.control(''),\r\n      className: this.className = fb.control(''),\r\n      fieldGroupClassName: this.fieldGroupClassName = fb.control(''),\r\n      type: this.type = fb.control('')\r\n    }, { validator: (control: FormGroup) => this.validator(control) });\r\n    this.fieldForm = fb.group({});\r\n  }\r\n\r\n  readonly form: FormGroup;\r\n  readonly key: FormControl;\r\n  readonly className: FormControl;\r\n  readonly fieldGroupClassName: FormControl;\r\n  readonly type: FormControl;\r\n\r\n  fieldForm: FormGroup;\r\n  field: FormlyFieldConfig = {};\r\n  fields: FormlyFieldConfig[] = [];\r\n  fieldArray = false;\r\n  invalid = false;\r\n\r\n  protected onChange = (_: any) => { };\r\n  protected onTouched = () => { };\r\n\r\n  ngOnInit(): void {\r\n    this.subscriptions.push(this.type.valueChanges\r\n      .subscribe(() => this.onTypeChange()));\r\n\r\n    this.subscriptions.push(this.form.statusChanges\r\n      .pipe(debounceTime(0))\r\n      .subscribe(() => this.invalid = this.form.invalid));\r\n\r\n    this.subscribeValueChanges();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.valueChangesSubscription?.unsubscribe();\r\n    this.subscriptions.splice(0).forEach(subscription => subscription.unsubscribe());\r\n  }\r\n\r\n  writeValue(obj: any) {\r\n    this.valueChangesSubscription?.unsubscribe();\r\n    this.updateField(obj);\r\n    this.form.markAsPristine();\r\n    this.form.markAsUntouched();\r\n    this.subscribeValueChanges();\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    if (isDisabled) {\r\n      this.form.disable();\r\n    } else {\r\n      this.form.enable();\r\n    }\r\n  }\r\n\r\n  private subscribeValueChanges(): void {\r\n    this.valueChangesSubscription = merge(this.fieldForm.valueChanges, this.form.valueChanges)\r\n      .pipe(debounceTime(0))\r\n      .subscribe(() => this.updateValue());\r\n  }\r\n\r\n  private updateField(field: FormlyFieldConfig): void {\r\n    if (!isObject(field)) {\r\n      field = {};\r\n    }\r\n    this.key.setValue(isString(field.key) ? field.key : '');\r\n    this.className.setValue(isString(field.className) ? field.className : '');\r\n    this.fieldGroupClassName.setValue(isString(field.fieldGroupClassName) ? field.fieldGroupClassName : '');\r\n    this.type.setValue(isString(field.type) ? field.type : '');\r\n    this.fields = this.fieldsService.getTypeFields(this.type.value);\r\n    this.fieldForm = this.fb.group({});\r\n    this.field = cloneDeep(field);\r\n  }\r\n\r\n  private updateValue(): void {\r\n    if (!this.onChange) {\r\n      return;\r\n    }\r\n\r\n    const field = this.field;\r\n    field.key = this.key.value;\r\n    field.className = this.className.value;\r\n    field.fieldGroupClassName = this.fieldGroupClassName.value;\r\n    field.type = this.type.value;\r\n    this.onChange(field);\r\n  }\r\n\r\n  private onTypeChange(): void {\r\n    this.valueChangesSubscription?.unsubscribe();\r\n    const type = this.type.value;\r\n    this.fields = this.fieldsService.getTypeFields(type);\r\n    const designerType = this.formlyDesignerConfig.types[type];\r\n    this.fieldArray = designerType?.fieldArray != null;\r\n    this.fieldForm = this.fb.group({});\r\n    this.field = Object.assign({}, this.field);\r\n    this.subscribeValueChanges();\r\n  }\r\n\r\n  onWrappersSelected(field: FormlyFieldConfig): void {\r\n    this.updateField(field);\r\n  }\r\n\r\n  private validator(control: FormGroup): { [key: string]: boolean } | null {\r\n    if (this.fieldGroup) {\r\n      return null;\r\n    }\r\n    const type = control.get('type') as FormControl;\r\n    const hasType = isString(type.value) && type.value.trim().length > 0;\r\n    const result = { type: false };\r\n    if (this.showType && !hasType) {\r\n      result.type = true;\r\n    }\r\n    return result.type ? result : null;\r\n  }\r\n}\r\n","import { Component, ElementRef, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { DesignerTypeOption, FormlyDesignerConfig } from '../formly-designer-config';\r\nimport { FormlyDesignerService } from '../formly-designer.service';\r\n\r\n@Component({\r\n  selector: 'formly-designer-field-picker',\r\n  template: `\r\n    <form novalidate [formGroup]=\"form\">\r\n      <div class=\"form-group\">\r\n        <div class=\"input-group\">\r\n          <formly-designer-type-select formControlName=\"type\">\r\n          </formly-designer-type-select>\r\n          <button type=\"button\" class=\"btn btn-secondary\" [disabled]=\"form.invalid\" (click)=\"add()\">\r\n            Add\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <div #modal class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\r\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n          <div class=\"modal-content\">\r\n            <div class=\"modal-header\">\r\n              <h5 class=\"modal-title\">Add {{ typeName }}</h5>\r\n              <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\r\n                <span aria-hidden=\"true\">&times;</span>\r\n              </button>\r\n            </div>\r\n            <div class=\"modal-body\">\r\n              <formly-designer-field-editor #editor [fieldGroup]=\"fieldEdit.value.fieldGroup\" [formControl]=\"fieldEdit\">\r\n              </formly-designer-field-editor>\r\n            </div>\r\n            <div class=\"modal-footer\">\r\n              <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Cancel</button>\r\n              <button type=\"button\" class=\"btn btn-primary\" (click)=\"onApply()\"\r\n                [disabled]=\"editor.invalid\">Apply</button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  `,\r\n  styles: [`\r\n    .btn:not(:disabled) {\r\n      cursor: pointer;\r\n    }\r\n    .input-group > .btn {\r\n      border-radius: 0 .25rem .25rem 0;\r\n    }\r\n    .input-group, .modal-header {\r\n      display: flex;\r\n    }\r\n    .modal-header {\r\n      justify-content: space-between;\r\n    }\r\n    formly-designer-type-select {\r\n      flex-grow: 2;\r\n    }\r\n  `]\r\n})\r\nexport class FieldPickerComponent {\r\n  @ViewChild('modal', { static: true }) modalRef?: ElementRef;\r\n  @Output() selected = new EventEmitter<FormlyFieldConfig>();\r\n\r\n  constructor(\r\n    fb: FormBuilder,\r\n    private formlyDesignerConfig: FormlyDesignerConfig,\r\n    private formlyDesignerService: FormlyDesignerService,\r\n  ) {\r\n    this.form = fb.group({\r\n      type: this.type = fb.control('', Validators.compose([Validators.required, Validators.pattern(/^\\s*\\S.*$/)]))\r\n    });\r\n  }\r\n\r\n  form: FormGroup;\r\n  readonly fieldEdit = new FormControl({});\r\n  readonly type: FormControl;\r\n  fieldGroup = false;\r\n\r\n  get typeName(): string {\r\n    return this.formlyDesignerService.getTypeName(this.type.value);\r\n  }\r\n\r\n  private get $modal(): JQuery & { modal: (command: string) => void } {\r\n    return $(this.modalRef?.nativeElement) as any;\r\n  }\r\n\r\n  add(): void {\r\n    const type = this.type.value;\r\n    const field = {} as FormlyFieldConfig;\r\n    if (type !== 'formly-group') {\r\n      field.type = type;\r\n    }\r\n    const designerType = this.formlyDesignerConfig.types[type] || {} as DesignerTypeOption;\r\n    if (designerType.fieldArray) {\r\n      field.fieldArray = { fieldGroup: [] };\r\n    }\r\n    if (this.fieldGroup = (type === 'formly-group' || designerType.fieldGroup != null)) {\r\n      field.fieldGroup = [];\r\n    }\r\n    this.fieldEdit.setValue(field);\r\n    this.$modal.modal('show');\r\n  }\r\n\r\n  onApply(): void {\r\n    this.selected.emit(this.fieldEdit.value);\r\n    this.$modal.modal('hide');\r\n  }\r\n}\r\n","import { Component, HostBinding, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FieldsService, FormlyDesignerConfig, FormlyDesignerService } from '../';\r\nimport { cloneDeep } from '../util';\r\nimport { Subscription, timer } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'formly-designer-properties',\r\n  template: `\r\n    <formly-designer-field-editor #editor [fieldGroup]=\"fieldGroup\" [hasContent]=\"true\" [showType]=\"true\" [showWrappers]=\"true\" [formControl]=\"fieldEdit\">\r\n      <div class=\"footer\">\r\n        <button (click)=\"remove()\" class=\"btn btn-secondary mr-1\">Remove</button>\r\n        <button (click)=\"cancel()\" class=\"btn btn-secondary ml-auto mr-1\">Cancel</button>\r\n        <button [disabled]=\"editor.invalid\" (click)=\"accept()\" class=\"btn btn-primary\">Apply</button>\r\n      </div>\r\n    </formly-designer-field-editor>\r\n  `,\r\n  styles: [`\r\n    .footer {\r\n      display: flex;\r\n    }\r\n  `]\r\n})\r\nexport class PropertiesComponent implements OnInit, OnDestroy {\r\n  private readonly subscriptions: Subscription[] = [];\r\n\r\n  fieldGroup = false;\r\n  fieldEdit = new FormControl({});\r\n  private field: FormlyFieldConfig | null = null;\r\n\r\n  @HostBinding('class.d-none')\r\n  get hasField() { return this.field == null; }\r\n\r\n  constructor(\r\n    private fieldsService: FieldsService,\r\n    private formlyDesignerConfig: FormlyDesignerConfig,\r\n    private formlyDesignerService: FormlyDesignerService\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.subscriptions.push(\r\n      this.formlyDesignerService.designerFields$.subscribe(fields => {\r\n        const designerId = this.field?.templateOptions?.$designerId;\r\n        this.setField(this.fieldsService.find(designerId, fields) ?? null);\r\n      }),\r\n      this.formlyDesignerService.selectedField$.subscribe(field => {\r\n        this.setField(field);\r\n      })\r\n    );\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscriptions.splice(0).forEach(subscription => subscription.unsubscribe());\r\n  }\r\n\r\n  remove(): void {\r\n    if (this.field) {\r\n      this.formlyDesignerService.removeField(this.field);\r\n    }\r\n  }\r\n\r\n  accept(): void {\r\n    if (!this.fieldsService.checkField(this.fieldEdit.value, this.formlyDesignerService.designerFields)) {\r\n      return;\r\n    }\r\n    timer(0).subscribe(() => {\r\n      this.formlyDesignerService.updateField(this.field, this.fieldEdit.value);\r\n    });\r\n  }\r\n\r\n  cancel(): void {\r\n    this.setField(null);\r\n  }\r\n\r\n  private setField(field: FormlyFieldConfig | null): void {\r\n    if (field !== this.field) {\r\n      this.field = field;\r\n      this.fieldGroup = field?.type === 'formly-group' ||\r\n        (field?.type && this.formlyDesignerConfig.types[field.type]?.fieldGroup) != null;\r\n      this.fieldEdit.setValue(field ? cloneDeep(field) : {});\r\n    }\r\n  }\r\n}\r\n","import { AfterViewInit, Component, forwardRef, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription, timer } from 'rxjs';\r\nimport { FormlyDesignerConfig } from '../';\r\n\r\nconst TYPE_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => TypeSelectComponent),\r\n  multi: true\r\n};\r\n\r\n@Component({\r\n  selector: 'formly-designer-type-select',\r\n  template: `\r\n    <select [formControl]=\"formControl\" class=\"custom-select\">\r\n      <option *ngFor=\"let type of types\" [ngValue]=\"type.value\">{{ type.label }}</option>\r\n    </select>\r\n  `,\r\n  styles: [`\r\n    select {\r\n      width: 100%;\r\n    }\r\n  `],\r\n  providers: [TYPE_SELECT_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class TypeSelectComponent implements AfterViewInit, ControlValueAccessor, OnChanges, OnInit, OnDestroy {\r\n  private valueChangesSubscription?: Subscription;\r\n\r\n  @Input() type?: string;\r\n  @Input() fieldGroup?: boolean;\r\n  formControl = new FormControl();\r\n  types: { label: string; value: string }[] = [];\r\n\r\n  constructor(\r\n    private formlyDesignerConfig: FormlyDesignerConfig\r\n  ) { }\r\n\r\n  protected onChange = (value: any) => { };\r\n  protected onTouched = () => { };\r\n\r\n  ngAfterViewInit(): void {\r\n    this.updateTypes();\r\n  }\r\n\r\n  ngOnChanges(change: SimpleChanges): void {\r\n    if (change.fieldGroup) {\r\n      this.updateTypes();\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.valueChangesSubscription = this.formControl.valueChanges.subscribe(value => {\r\n      if (this.onChange) {\r\n        this.onChange(value);\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.valueChangesSubscription?.unsubscribe();\r\n  }\r\n\r\n  writeValue(obj: any) {\r\n    this.formControl.setValue(obj);\r\n  }\r\n\r\n  registerOnChange(fn: any) {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any) {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    if (isDisabled) {\r\n      this.formControl.disable();\r\n    } else {\r\n      this.formControl.enable();\r\n    }\r\n  }\r\n\r\n  private updateTypes(): void {\r\n    timer(0).subscribe(() => {\r\n      this.types = this.getTypes();\r\n      const type = this.fieldGroup && (this.type == null || this.type === '') ? 'formly-group' : this.type;\r\n      if (this.types.some(option => option.value === type)) {\r\n        this.formControl.setValue(type);\r\n      } else if (this.types.length > 0) {\r\n        this.formControl.setValue(this.types[0].value);\r\n      }\r\n    });\r\n  }\r\n\r\n  private getTypes(): { label: string, value: string }[] {\r\n    const types: { label: string, value: string }[] = [];\r\n    const entries = Object.entries(this.formlyDesignerConfig.types);\r\n    if (this.fieldGroup !== true) {\r\n      entries.forEach(([key, value]) => {\r\n        if (!value.fieldGroup) {\r\n          types.push({ label: key, value: key });\r\n        }\r\n      });\r\n    }\r\n    if (this.fieldGroup !== false) {\r\n      types.push({ label: 'fieldGroup', value: 'formly-group' });\r\n    }\r\n    if (this.fieldGroup !== false) {\r\n      entries.forEach(([key, value]) => {\r\n        if (value.fieldGroup) {\r\n          types.push({ label: key, value: key });\r\n        }\r\n      });\r\n    }\r\n    return types;\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { DragDropService, FormlyDesignerConfig } from '../';\r\nimport { DragDropType } from '../models';\r\n\r\n@Component({\r\n  selector: 'formly-designer-types',\r\n  template: `\r\n    <div *ngFor=\"let type of types\" draggable=\"true\" (dragstart)=\"onDragStart($event, type.value)\" (dragend)=\"onDragEnd()\">\r\n      {{ type.label }}\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    :host {\r\n      display: flex;\r\n      flex-direction: column;\r\n    }\r\n    div {\r\n      margin: 2px;\r\n      padding: .5rem;\r\n      border-radius: .75rem;\r\n      background-color: #bbdefb;\r\n      line-break: anywhere;\r\n      white-space: pre-line;\r\n      cursor: grab;\r\n      user-select: none;\r\n    }\r\n  `]\r\n})\r\nexport class TypesComponent implements OnInit {\r\n  types: { label: string; value: string }[] = [];\r\n\r\n  constructor(\r\n    private dragDropService: DragDropService,\r\n    private formlyDesignerConfig: FormlyDesignerConfig\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.types = this.getTypes();\r\n  }\r\n\r\n  onDragStart(event: DragEvent, type: string): void {\r\n    event.dataTransfer?.setData(DragDropType.Type, type);\r\n    this.dragDropService.beginDrag(type);\r\n  }\r\n\r\n  onDragEnd(): void {\r\n    this.dragDropService.endDrag();\r\n  }\r\n\r\n  private getTypes(): { label: string, value: string }[] {\r\n    const types: { label: string, value: string }[] = [];\r\n    const entries = Object.entries(this.formlyDesignerConfig.types);\r\n    entries.forEach(([key, value]) => {\r\n      if (!value.fieldGroup) {\r\n        types.push({ label: key, value: key });\r\n      }\r\n    });\r\n    types.push({ label: 'fieldGroup', value: 'formly-group' });\r\n    entries.forEach(([key, value]) => {\r\n      if (value.fieldGroup) {\r\n        types.push({ label: key, value: key });\r\n      }\r\n    });\r\n    return types;\r\n  }\r\n\r\n}\r\n","import { Component, forwardRef, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Subscription, timer } from 'rxjs';\r\nimport { debounceTime, switchMap } from 'rxjs/operators';\r\nimport { FieldsService } from '../fields.service';\r\nimport { cloneDeep, isObject } from '../util';\r\n\r\nconst WRAPPER_EDITOR_CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => WrapperEditorComponent),\r\n  multi: true\r\n};\r\n\r\n@Component({\r\n  selector: 'formly-designer-wrapper-editor',\r\n  template: `\r\n    <form [formGroup]=\"fieldForm\" novalidate>\r\n      <div class=\"card\">\r\n        <div class=\"card-body\">\r\n          <formly-form [form]=\"fieldForm\" [fields]=\"fields\" [model]=\"field\">\r\n          </formly-form>\r\n          <ng-content></ng-content>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  `,\r\n  providers: [\r\n    WRAPPER_EDITOR_CONTROL_VALUE_ACCESSOR\r\n  ]\r\n})\r\nexport class WrapperEditorComponent implements ControlValueAccessor, OnChanges, OnDestroy, OnInit {\r\n  @Input() wrapper: string | null = null;\r\n\r\n  private readonly subscriptions: Subscription[] = [];\r\n  private valueChangesSubscription?: Subscription;\r\n\r\n  constructor(\r\n    private fieldsService: FieldsService,\r\n    private formBuilder: FormBuilder\r\n  ) {\r\n    this.fieldForm = formBuilder.group({});\r\n  }\r\n\r\n  invalid = false;\r\n  fieldForm: FormGroup;\r\n  field?: FormlyFieldConfig;\r\n  fields: FormlyFieldConfig[] = [];\r\n\r\n  protected onChange = (value: any) => { };\r\n  protected onTouched = () => { };\r\n\r\n  ngOnInit(): void {\r\n    this.subscriptions.push(this.fieldForm.statusChanges\r\n      .pipe(switchMap(() => timer(0)))\r\n      .subscribe(() => this.invalid = this.fieldForm.invalid));\r\n\r\n    this.subscribeValueChanges();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.valueChangesSubscription?.unsubscribe();\r\n    this.subscriptions.splice(0).forEach(subscription => subscription.unsubscribe());\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.wrapper) {\r\n      if (this.valueChangesSubscription) {\r\n        this.valueChangesSubscription.unsubscribe();\r\n      }\r\n      this.fields = this.fieldsService.getWrapperFields(this.wrapper);\r\n      this.fieldForm = this.formBuilder.group({});\r\n      this.field = Object.assign({}, this.field);\r\n      if (this.valueChangesSubscription) {\r\n        this.subscribeValueChanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  writeValue(obj: any) {\r\n    this.valueChangesSubscription?.unsubscribe();\r\n    if (!isObject(obj)) {\r\n      obj = {};\r\n    }\r\n    this.fields = this.fieldsService.getWrapperFields(this.wrapper);\r\n    this.fieldForm = this.formBuilder.group({});\r\n    this.field = cloneDeep(obj);\r\n    this.subscribeValueChanges();\r\n  }\r\n\r\n  registerOnChange(fn: any) {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any) {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    if (isDisabled) {\r\n      this.fieldForm.disable();\r\n    } else {\r\n      this.fieldForm.enable();\r\n    }\r\n  }\r\n\r\n  private subscribeValueChanges(): void {\r\n    this.valueChangesSubscription = this.fieldForm.valueChanges\r\n      .pipe(debounceTime(0))\r\n      .subscribe(() => this.updateValue());\r\n  }\r\n\r\n  private updateValue(): void {\r\n    if (!this.onChange) {\r\n      return;\r\n    }\r\n\r\n    this.onChange(this.field);\r\n  }\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FormlyDesignerConfig } from '../formly-designer-config';\r\nimport { FormlyDesignerService } from '../formly-designer.service';\r\nimport { cloneDeep, isArray, isObject } from '../util';\r\n\r\ndeclare var $: JQueryStatic;\r\n\r\n@Component({\r\n  selector: 'formly-designer-wrapper-picker',\r\n  template: `\r\n    <form novalidate [formGroup]=\"form\">\r\n      <div class=\"form-group\">\r\n        <div class=\"input-group\">\r\n          <formly-designer-wrapper-select formControlName=\"wrapper\">\r\n          </formly-designer-wrapper-select>\r\n          <button type=\"button\" class=\"btn btn-secondary\" [disabled]=\"form.invalid\" (click)=\"add()\">\r\n            Add\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <div #modal class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\r\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n          <div class=\"modal-content\">\r\n            <div class=\"modal-header\">\r\n              <h5 class=\"modal-title\">Add {{ wrapper }}</h5>\r\n              <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\r\n                <span aria-hidden=\"true\">&times;</span>\r\n              </button>\r\n            </div>\r\n            <div class=\"modal-body\">\r\n              <formly-designer-wrapper-editor #editor [formControl]=\"fieldEdit\" [wrapper]=\"wrapper\">\r\n              </formly-designer-wrapper-editor>\r\n            </div>\r\n            <div class=\"modal-footer\">\r\n              <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Cancel</button>\r\n              <button type=\"button\" class=\"btn btn-primary\" (click)=\"onApply()\"\r\n                [disabled]=\"editor.invalid\">Apply</button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  `,\r\n  styles: [`\r\n    :host {\r\n      width: inherit;\r\n    }\r\n    .btn:not(:disabled) {\r\n      cursor: pointer;\r\n    }\r\n    .input-group > .btn {\r\n      border-radius: 0 .25rem .25rem 0;\r\n    }\r\n    .input-group, .modal-header {\r\n      display: flex;\r\n    }\r\n    .modal-header {\r\n      justify-content: space-between;\r\n    }\r\n    formly-designer-wrapper-select {\r\n      flex-grow: 2;\r\n    }\r\n  `]\r\n})\r\nexport class WrapperPickerComponent {\r\n  @ViewChild('modal', { static: true }) modalRef?: ElementRef;\r\n  @Input() field?: FormlyFieldConfig;\r\n  @Output() selected = new EventEmitter<FormlyFieldConfig>();\r\n\r\n  constructor(\r\n    formBuilder: FormBuilder,\r\n    private formlyDesignerConfig: FormlyDesignerConfig,\r\n    private formlyDesignerService: FormlyDesignerService\r\n  ) {\r\n    this.form = formBuilder.group({\r\n      wrapper: ['', Validators.compose([Validators.required, Validators.pattern(/^\\s*\\S.*$/)])]\r\n    });\r\n  }\r\n\r\n  form: FormGroup;\r\n  fieldEdit = new FormControl({});\r\n\r\n  get wrapper(): string | null {\r\n    return this.form.get('wrapper')?.value;\r\n  }\r\n\r\n  private get $modal(): JQuery & { modal: (command: string) => void } {\r\n    return $(this.modalRef?.nativeElement) as any;\r\n  }\r\n\r\n  add(): void {\r\n    if (!this.wrapper) {\r\n      return;\r\n    }\r\n    if (isObject(this.field)) {\r\n      const field = cloneDeep(this.field) as FormlyFieldConfig;\r\n      if (isArray(field.wrappers) && field.wrappers.length > 0) {\r\n        field.wrappers.splice(field.wrappers.length - 1, 0, this.wrapper);\r\n      } else {\r\n        field.wrappers = [this.wrapper];\r\n      }\r\n      this.fieldEdit.setValue(field);\r\n\r\n      const fields = this.formlyDesignerConfig.wrappers[this.wrapper].fields;\r\n      if (isArray(fields) && fields.length > 0) {\r\n        this.$modal.modal('show');\r\n      } else {\r\n        this.onApply();\r\n      }\r\n    }\r\n  }\r\n\r\n  onApply(): void {\r\n    this.field = this.formlyDesignerService.createPrunedField(this.fieldEdit.value);\r\n    this.selected.emit(this.fieldEdit.value);\r\n    this.$modal.modal('hide');\r\n  }\r\n}\r\n","import { AfterViewInit, Component, forwardRef, OnDestroy, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription, timer } from 'rxjs';\r\nimport { FormlyDesignerConfig } from '../formly-designer-config';\r\n\r\nconst WRAPPER_SELECT_CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => WrapperSelectComponent),\r\n  multi: true\r\n};\r\n\r\n@Component({\r\n  selector: 'formly-designer-wrapper-select',\r\n  template: `\r\n    <select [formControl]=\"formControl\" class=\"custom-select\">\r\n      <option *ngFor=\"let wrapper of wrappers\" [ngValue]=\"wrapper\">{{ wrapper }}</option>\r\n    </select>\r\n  `,\r\n  styles: [`\r\n    select {\r\n      width: 100%;\r\n    }\r\n  `],\r\n  providers: [WRAPPER_SELECT_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class WrapperSelectComponent implements AfterViewInit, ControlValueAccessor, OnDestroy, OnInit {\r\n  private valueChangesSubscription?: Subscription;\r\n\r\n  constructor(\r\n    private formlyDesignerConfig: FormlyDesignerConfig\r\n  ) { }\r\n\r\n  formControl = new FormControl();\r\n  wrappers: string[] = [];\r\n\r\n  protected onChange = (value: any) => { };\r\n  protected onTouched = () => { };\r\n\r\n  ngAfterViewInit(): void {\r\n    timer(0).subscribe(() => {\r\n      this.wrappers = Object.keys(this.formlyDesignerConfig.wrappers);\r\n      if (this.wrappers.length > 0) {\r\n        this.formControl.setValue(this.wrappers[0]);\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.valueChangesSubscription = this.formControl.valueChanges.subscribe(value => {\r\n      if (this.onChange) {\r\n        this.onChange(value);\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.valueChangesSubscription?.unsubscribe();\r\n  }\r\n\r\n  writeValue(obj: any) {\r\n    this.formControl.setValue(obj);\r\n  }\r\n\r\n  registerOnChange(fn: any) {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any) {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    if (isDisabled) {\r\n      this.formControl.disable();\r\n    } else {\r\n      this.formControl.enable();\r\n    }\r\n  }\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FormlyDesignerConfig } from '../formly-designer-config';\r\nimport { FormlyDesignerService } from '../formly-designer.service';\r\nimport { cloneDeep, isArray, isObject } from '../util';\r\n\r\n@Component({\r\n  selector: 'formly-designer-wrappers-picker',\r\n  template: `\r\n    <div class=\"form-group\">\r\n      <div class=\"input-group\">\r\n        <formly-designer-wrapper-picker [field]=\"field\" (selected)=\"onWrapperSelected($event)\">\r\n        </formly-designer-wrapper-picker>\r\n      </div>\r\n      <div *ngFor=\"let wrapper of wrappers; let i = index\" class=\"badge badge-default noselect\" (click)=\"edit(i)\">\r\n        {{ wrapper }}&nbsp;&nbsp;<i class=\"fa fa-times\" aria-hidden=\"true\" (click)=\"remove(i)\"></i>\r\n      </div>\r\n    </div>\r\n    <div #modal class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\r\n      <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n        <div class=\"modal-content\">\r\n          <div class=\"modal-header\">\r\n            <h5 class=\"modal-title\">Edit {{ wrapper }}</h5>\r\n            <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\r\n              <span aria-hidden=\"true\">&times;</span>\r\n            </button>\r\n          </div>\r\n          <div class=\"modal-body\">\r\n            <formly-designer-wrapper-editor #editor [formControl]=\"fieldEdit\" [wrapper]=\"wrapper\">\r\n            </formly-designer-wrapper-editor>\r\n          </div>\r\n          <div class=\"modal-footer\">\r\n            <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Cancel</button>\r\n            <button type=\"button\" class=\"btn btn-primary\" (click)=\"onApply()\"\r\n              [disabled]=\"editor.invalid\">Apply</button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    `,\r\n  styles: [`\r\n    .badge {\r\n      margin-right: .25em;\r\n    }\r\n    .badge {\r\n      cursor: pointer;\r\n    }\r\n    .noselect {\r\n      -webkit-user-select: none;\r\n      -khtml-user-select: none;\r\n      -moz-user-select: none;\r\n      -ms-user-select: none;\r\n      user-select: none;\r\n    }\r\n  `]\r\n})\r\nexport class WrappersPickerComponent implements OnChanges {\r\n  @ViewChild('modal', { static: true }) modalRef?: ElementRef;\r\n  @Input() field?: FormlyFieldConfig;\r\n  @Output() selected = new EventEmitter<FormlyFieldConfig>();\r\n\r\n  wrapper: string | null = null;\r\n  fieldEdit = new FormControl({});\r\n\r\n  wrappers: string[] = [];\r\n\r\n  constructor(\r\n    private formlyDesignerConfig: FormlyDesignerConfig,\r\n    private formlyDesignerService: FormlyDesignerService\r\n  ) { }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.field) {\r\n      this.wrappers = this.formlyDesignerService.getWrappers(changes.field.currentValue);\r\n    }\r\n  }\r\n\r\n  private get $modal(): JQuery & { modal: (command: string) => void } {\r\n    return $(this.modalRef?.nativeElement) as any;\r\n  }\r\n\r\n  onWrapperSelected(field: FormlyFieldConfig): void {\r\n    this.selected.emit(field);\r\n  }\r\n\r\n  edit(index: number): void {\r\n    this.wrapper = this.wrappers[index];\r\n    if (isObject(this.field)) {\r\n      const field = cloneDeep(this.field);\r\n      if (isArray(field?.wrappers)) {\r\n        this.fieldEdit.setValue(field);\r\n\r\n        const fields = this.formlyDesignerConfig.wrappers[this.wrapper].fields;\r\n        if (isArray(fields) && fields.length > 0) {\r\n          this.$modal.modal('show');\r\n        } else {\r\n          this.onApply();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  remove(index: number): void {\r\n    const fieldWrappersIndex = this.field?.wrappers?.indexOf(this.wrappers[index]) ?? -1;\r\n    if (fieldWrappersIndex < 0) {\r\n      return;\r\n    }\r\n\r\n    const field = cloneDeep(this.field) as FormlyFieldConfig;\r\n    (field.wrappers as string[]).splice(fieldWrappersIndex, 1);\r\n    this.field = this.formlyDesignerService.createPrunedField(field);\r\n    this.selected.emit(this.field);\r\n  }\r\n\r\n  onApply(): void {\r\n    this.field = this.formlyDesignerService.createPrunedField(this.fieldEdit.value);\r\n    this.selected.emit(this.field);\r\n    this.$modal.modal('hide');\r\n  }\r\n}\r\n","import { cloneDeep, isArray, isObject } from './util';\r\n\r\nexport function decycle<T>(value: T): T {\r\n  if (value == null) {\r\n    return value;\r\n  }\r\n\r\n  let nextId = 1;\r\n  const objects = new Map<any, number>();\r\n  return traverse(cloneDeep(value), (_key, v) => {\r\n    if (isObject(v)) {\r\n      if (objects.has(v)) {\r\n        let id = objects.get(v);\r\n        if (!id) {\r\n          v.$id = id = nextId++;\r\n          objects.set(v, id);\r\n        }\r\n        return { $ref: id };\r\n      } else {\r\n        objects.set(v, 0);\r\n      }\r\n    }\r\n    return;\r\n  });\r\n}\r\n\r\nfunction traverse<T>(obj: T, replace: (key: string, value: any) => any): T {\r\n  if (isArray(obj)) {\r\n    for (let i = 0; i < (obj as unknown[]).length; i++) {\r\n      traverseValue.bind(obj, i, obj[i], replace)();\r\n    }\r\n  } else if (isObject(obj)) {\r\n    for (const key in obj) {\r\n      if ((obj as Object).hasOwnProperty(key)) {\r\n        traverseValue.bind(obj, key, obj[key], replace)();\r\n      }\r\n    }\r\n  }\r\n  return obj;\r\n}\r\n\r\nfunction traverseValue(this: any, key: string, value: any, replace: (key: string, value: any) => any): void {\r\n  const replacement = replace(key, value);\r\n  if (replacement === undefined) {\r\n    traverse(value, replace);\r\n  } else if (this) {\r\n    this[key] = replacement;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { decycle } from '../json-helper';\r\n\r\n@Pipe({ name: 'decycle' })\r\nexport class DecyclePipe implements PipeTransform {\r\n    transform(value: any): any {\r\n        return decycle(value);\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ANALYZE_FOR_ENTRY_COMPONENTS, ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyConfig, FormlyForm, FormlyModule } from '@ngx-formly/core';\r\nimport 'jquery';\r\nimport { FieldEditorComponent } from './components/field-editor';\r\nimport { FieldPickerComponent } from './components/field-picker';\r\nimport { PropertiesComponent } from './components/properties';\r\nimport { TypeSelectComponent } from './components/type-select';\r\nimport { TypesComponent } from './components/types';\r\nimport { WrapperEditorComponent } from './components/wrapper-editor';\r\nimport { WrapperPickerComponent } from './components/wrapper-picker';\r\nimport { WrapperSelectComponent } from './components/wrapper-select';\r\nimport { WrappersPickerComponent } from './components/wrappers-picker';\r\nimport { Config, fieldComponents, wrapperComponents } from './config';\r\nimport { DragDropService } from './drag-drop.service';\r\nimport { DesignerExtension } from './extensions/designer';\r\nimport { FieldsService } from './fields.service';\r\nimport { DesignerConfigOption, FormlyDesignerConfig, FORMLY_DESIGNER_CONFIG_TOKEN } from './formly-designer-config';\r\nimport { FormlyDesignerComponent } from './formly-designer.component';\r\nimport { DecyclePipe } from './pipes/decycle';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    FieldEditorComponent,\r\n    FieldPickerComponent,\r\n    FormlyDesignerComponent,\r\n    PropertiesComponent,\r\n    TypesComponent,\r\n    TypeSelectComponent,\r\n    WrapperEditorComponent,\r\n    WrapperSelectComponent,\r\n    WrapperPickerComponent,\r\n    WrappersPickerComponent,\r\n\r\n    DecyclePipe,\r\n\r\n    fieldComponents,\r\n    wrapperComponents\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    ReactiveFormsModule,\r\n\r\n    FormlyModule.forChild()\r\n  ],\r\n  exports: [\r\n    FieldEditorComponent,\r\n    FormlyDesignerComponent,\r\n    PropertiesComponent,\r\n    TypesComponent,\r\n    WrapperEditorComponent\r\n  ],\r\n  providers: [\r\n    Config,\r\n    DesignerExtension,\r\n    DragDropService,\r\n    FormlyDesignerConfig,\r\n    FieldsService\r\n  ],\r\n  entryComponents: [FormlyForm]\r\n})\r\nexport class FormlyDesignerModule {\r\n  constructor(\r\n    config: Config,\r\n    formlyConfig: FormlyConfig\r\n  ) {\r\n    formlyConfig.addConfig(config);\r\n  }\r\n\r\n  static forRoot(designerConfig: DesignerConfigOption = {}): ModuleWithProviders<FormlyDesignerModule> {\r\n    return {\r\n      ngModule: FormlyDesignerModule,\r\n      providers: [\r\n        { provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: [fieldComponents, wrapperComponents], multi: true },\r\n        { provide: FORMLY_DESIGNER_CONFIG_TOKEN, useValue: designerConfig, multi: true }\r\n      ]\r\n    };\r\n  }\r\n}\r\n"]}