{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA,0CAA0C;AAC1C,uEAAuE;AACvE;;AACA;;AACA;;AACA;;AACA;;AAEA;AAEe,MAAM,qBAAqB,CAAA,GAAA,+BAAe,AAAD;IACpD,aAAc;QACV,KAAK,CAAC;YACF;gBAAE,MAAM;gBAAc,aAAa,CAAA,GAAA,yBAAS,AAAD;YAAE;YAC7C;gBAAE,MAAM;gBAAe,aAAa,CAAA,GAAA,0BAAU,AAAD;YAAE;YAC/C;gBAAE,MAAM;gBAAa,aAAa,CAAA,GAAA,wBAAQ,AAAD;YAAE;YAC3C;gBAAE,MAAM;gBAAkB,aAAa,CAAA,GAAA,mCAAmB,AAAD;YAAE;YAC3D;gBAAE,MAAM;gBAAa,aAAa,CAAA,GAAA,wBAAQ,AAAD;YAAE;YAC3C;gBAAE,MAAM;gBAAoB,aAAa,CAAA,GAAA,6BAAa,AAAD;YAAE;YACvD;gBAAE,MAAM;gBAAmB,aAAa,CAAA,GAAA,6BAAa,AAAD;YAAE;YACtD;gBAAE,MAAM;gBAAqB,aAAa,CAAA,GAAA,+BAAe,AAAD;YAAE;YAC1D;gBAAE,MAAM;gBAAe,aAAa,CAAA,GAAA,yBAAS,AAAD;YAAE;YAC9C;gBAAE,MAAM;gBAAiB,aAAa,CAAA,GAAA,4BAAY,AAAD;YAAE;YACnD;gBAAE,MAAM;gBAAqB,aAAa,CAAA,GAAA,+BAAe,AAAD;YAAE;YAC1D,0CAA0C;YAC1C,oEAAoE;YACpE;gBAAE,MAAM;gBAAa,aAAa,CAAA,GAAA,wBAAQ,AAAD;YAAE;YAC3C;gBAAE,MAAM;gBAAY,aAAa,CAAA,GAAA,uBAAO,AAAD;YAAE;SAC5C;IACL;AACJ;kBApBqB;AAsBrB,kCAAkC;AAClC,IAAI;;;;;AC1CW,MAAM;IAGjB,YAAY,IAAyB,CAAE;QACnC,IAAI,CAAC,iBAAiB,GAAG;QACzB,IAAI,CAAC,IAAI;IACb;IAEA,OAAa;QACT,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC,eAAe,GAAG,CAAC,KAAK,IAAI,KAAK,eAAe,MAAM,CAAC,KAAK,IAAI,EAAE,KAAK,WAAW;QACvF;IACJ;AACJ;kBAbqB;;;ACArB,QAAQ,cAAc,GAAG,SAAU,CAAC;IAClC,OAAO,KAAK,EAAE,UAAU,GAAG,IAAI;QAAC,SAAS;IAAC;AAC5C;AAEA,QAAQ,iBAAiB,GAAG,SAAU,CAAC;IACrC,OAAO,cAAc,CAAC,GAAG,cAAc;QAAC,OAAO;IAAI;AACrD;AAEA,QAAQ,SAAS,GAAG,SAAU,MAAM,EAAE,IAAI;IACxC,OAAO,IAAI,CAAC,QAAQ,OAAO,CAAC,SAAU,GAAG;QACvC,IACE,QAAQ,aACR,QAAQ,gBACR,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAE3C;QAGF,OAAO,cAAc,CAAC,MAAM,KAAK;YAC/B,YAAY;YACZ,KAAK;gBACH,OAAO,MAAM,CAAC,IAAI;YACpB;QACF;IACF;IAEA,OAAO;AACT;AAEA,QAAQ,MAAM,GAAG,SAAU,IAAI,EAAE,QAAQ,EAAE,GAAG;IAC5C,OAAO,cAAc,CAAC,MAAM,UAAU;QACpC,YAAY;QACZ,KAAK;IACP;AACF;;;;;AClCA;;AAEe,MAAM,iBAAiB,CAAA,GAAA,sCAAsB,AAAD;IAWvD,aAAc;QACV,KAAK;aAND,iBAAyB;aAEzB,YAAoB;QAMxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM;QAClC,IAAI,CAAC,2BAA2B,GAAG,AAC/B,IAAI,CAAC,YAAY,CAAC,4CACjB;QACL,IAAI,CAAC,kBAAkB,GAAG,OAAO,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,KAAK;QAC/F,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,+BAA+B;QAC7E,IAAI,CAAC,IAAI,CAAC,mBAAmB,EACzB,MAAM,IAAI,MAAM;QAGpB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY;QAC5C,IAAI,CAAC,YAAY,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,8BAA8B;IAC/E;IAEA,oBAA0B;QACtB,IAAI,CAAC,wBAAwB;QAC7B,OAAO,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,sBAAsB;IACxF;IAEA,yBAA+B;QAC3B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;QAC/B,MAAM,eAAe,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI;QACpD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY;QAC5C,IAAI,CAAC,YAAY,CAAC;YACd,OAAO;YACP,SAAS;YACT,QAAQ;QACZ;IACJ;IAEA,2BAAiC;QAC7B,MAAM,mBAAmB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI;QAC5D,IAAI,CAAC,YAAY,CAAC;YACd,OAAO;YACP,SAAS,OAAO,QAAQ;YACxB,QAAQ;QACZ;IACJ;IAEA,qBAAqB,KAAY,EAAQ;QACrC,MAAM,cAAc;QACpB,IAAI,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAClD,IAAI,CAAC,sBAAsB;aAE3B,IAAI,CAAC,cAAc,CAAC;IAE5B;IAEA,iBAAiB,KAAY,EAAQ;QACjC,IAAI,CAAE,CAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,AAAD,GAAI;QAChD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa;QAEvC,IAAI,UAAU,IAAI,CAAC,cAAc;YAC7B,IAAI,WAAW,IAAI,CAAC,mBAAmB,EACnC,IAAI,CAAC,SAAS,GAAG;iBAEjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB;eAE1C,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,WAAW,IAAI,CAAC,mBAAmB,GACpE,IACA,IAAI,CAAC,cAAc,GAAG;aAE5B,IAAI,CAAC,SAAS,GAAG;QAGrB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAC7E,IAAI,CAAC,cAAc,GAAG;IAC1B;IAEA,eAAuB;QACnB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO;QACtC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC,mBAAmB;QAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,qBAAqB;QACjE,OAAO,SAAS,SAAS,eAAe;IAC5C;AACJ;kBA3FqB;;;;;ACIN,MAAM,+BAA+B;IAIhD,aAAc;QACV,KAAK;QACL,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;IAEA,kDAAkD;IAClD,oBAA0B,CAAC;IAE3B;;;KAGC,GACD,uBAA6B;QACzB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACpB,KAAK,OAAO,CAAC,mBAAmB,CAAC,KAAK,KAAK,EAAE,KAAK,MAAM;QAC5D;IACJ;IAEA;;;;KAIC,GACD,aAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAe,EAAQ;QACzE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE;YAAO;YAAS;QAAO;QAC7C,QAAQ,gBAAgB,CAAC,OAAO;IACpC;IAEA;;;;;;;KAOC,GACD,eAAe,OAAoB,EAAwB;QACvD,MAAM,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAS,KAAK,OAAO,KAAK;QACpE,IAAI,CAAC,cAAc;QACnB,cAAc,QAAQ,oBAAoB,aAAa,KAAK,EAAE,aAAa,MAAM;QACjF,MAAM,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAS,KAAK,OAAO,KAAK;QACjE,IAAI,CAAC,SAAS,GAAG;QACjB,OAAO;IACX;AACJ;kBAhDqB;;;;;ACNrB;;AACA;;AACA;AAWe,MAAM,4BAA4B,CAAA,GAAA,sCAAsB,AAAD;IAoBlE,aAAc;QACV,KAAK;aAHD,QAAgB,EAAE;QAKtB,IAAI,CAAC,iBAAiB,GAAG,SAAS,aAAa,CAAC,4BAA4B;QAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB;QAC1D,IAAI,CAAC,UAAU,GAAG,SAAS,aAAa,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;QAC/E,IAAI,CAAC,WAAW,GAAG,SAAS,aAAa,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;QACjF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,8BAA8B;QACrE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,8BAA8B;QACrE,IAAI,CAAC,oBAAoB,GACrB,IAAI,CAAC,YAAY,CAAC,sCAAsC;QAE5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,sCAAsC;QACjF,IAAI,CAAC,eAAe,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,iCAAiC;QACjF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,iCAAiC;QAC3E,IAAI,CAAC,QAAQ,GAAG,OAAO,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe;QAClE,IAAI,CAAC,cAAc,GAAG;QACtB,IAAI,CAAC,OAAO,GAAG,CAAA,GAAA,wBAAM,AAAD,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACxE;IAEA,oBAA0B;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,IAAI,MAAM;QAEzC,IAAI,CAAC,wBAAwB;QAC7B,IAAI,CAAC,sBAAsB;QAC3B,IAAI,CAAC,qBAAqB;QAE1B,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;IACxC;IAEA,2BAAiC;QAC7B,MAAM,mBAAmB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI;QAC5D,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAsB,SAAS,OAAO,QAAQ;YAAE,QAAQ;QAAiB;IACxG;IAEA,qBAAqB,KAAY,EAAQ;QACrC,MAAM,cAAc;QACpB,IAAI,CAAC,QAAQ,GAAG,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe;QAC/D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,eAAe;IAChE;IAEA,yBAA+B;QAC3B,IAAI,CAAC,UAAU,EAAE,iBAAiB,SAAS,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;QACxE,IAAI,CAAC,WAAW,EAAE,iBAAiB,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;IAC9E;IAEA,wBAA8B;QAC1B,IAAI,CAAC,gBAAgB,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;IACjE;IAEA,iBAAuB;QACnB,IAAI,CAAC,iBAAiB,GAChB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,IACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa;QAC3C,SAAS,IAAI,CAAC,qBAAqB,CAAC,aAAa,IAAI,CAAC,OAAO;IACjE;IAEA,kBAAwB;QACpB,IAAI,CAAC,iBAAiB,GAChB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa;QAC9C,MAAM,UAAU,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClE,SAAS;IACb;IAEA,MAAM,gBAAgB,KAAY,EAAiB;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpB,MAAM,cAAc;QAEpB,MAAM,SAAS,MAAM,MAAM;QAC3B,IAAI;QACJ,IAAI,OAAO,YAAY,CAAC,mBACpB,UAAU;aAEV,UAAU,OAAO,OAAO,CAAC;QAG7B,IAAI,CAAC,SAAS;QACd,IACI,CAAC,QAAQ,aAAa,EAAE,UAAU,SAAS,IAAI,CAAC,oBAAoB,KACjE,CAAC,QAAQ,aAAa,EAAE,aAAa,qBAC1C;YACE,OAAO,QAAQ,CAAC,IAAI,GAAG,QAAQ,IAAI;YACnC,IAAI,CAAC,eAAe;YACpB;QACJ;QACA,MAAM,KAAK,QAAQ,YAAY,CAAC;QAEhC,IAAI,CAAC,IAAI;QACT,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;YACpB,MAAM,OAAO,IAAI,CAAC,OAAO,CAAC;YAC1B,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,UAAU,CAAC,KAAK,OAAO;YAC5B,oBAAoB,UAAU,CAAC,KAAK,OAAO;YAC3C,IAAI,CAAC,qBAAqB;QAC9B,OAAO;YACH,MAAM,WAAW,MAAM,IAAI,CAAC,WAAW,CAAC;YACxC,IAAI,CAAC,iBAAiB,CAAC;QAC3B;IACJ;IAEA,YAAY,EAAU,EAAE;QACpB,MAAM,MAAM,OAAO,KAAK,CAAC,UAAU,EAAE,SAAS;QAC9C,MAAM,OAAO;YACT,MAAM;YACN,cAAc;YACd,UAAU,IAAI,CAAC,iBAAiB;QACpC;QAEA,OAAO,IAAI,QAAuC,CAAC,SAAS;YACxD,CAAA,GAAA,qBAAY,AAAD,EAAE;gBACT,YAAY;gBACZ,gBAAgB,CAAC,WAA4C,QAAQ;gBACrE,eAAe,CAAC,QAAmB,OAAO;gBAC1C,SAAS;YACb;QACJ;IACJ;IAEA,kBAAkB,QAAuC,EAAE;QACvD,IAAI,CAAC,SAAS,OAAO,EAAE;QACvB,MAAM,OAAO,CAAA,GAAA,wBAAM,AAAD,EAAE,SAAS,UAAU,CAAC,SAAS;QACjD,IAAI,CAAC,MAAM;QACX,MAAM,aAAa,KAAK,aAAa,CAAC;QACtC,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,OAAO,CAAC;QACb,IAAI,CAAC,UAAU,CAAC;QAChB,oBAAoB,UAAU,CAAC;QAC/B,IAAI,CAAC,qBAAqB;IAC9B;IAEA,WAAW,OAAgB,EAAE;QACzB,MAAM,QAAQ,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,OAAO;QACZ,MAAM,qBAAqB,CAAC,cAAc;IAC9C;IAEA,QAAQ,OAAgB,EAAE;QACtB,MAAM,KAAK,QAAQ,YAAY,CAAC,uBAAuB;QACvD,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE;YAAI;QAAQ;IACzD;IAEA,QAAQ,EAAU,EAAE;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAS,KAAK,EAAE,KAAK;IACjD;IAEA,UAAU,EAAU,EAAE;QAClB,IAAI,OAAO,IAAI,OAAO;QACtB,MAAM,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAS,KAAK,EAAE,KAAK;QAC1D,OAAO,UAAU,MAAM,GAAG;IAC9B;IAEA,wBAAwB;QACpB,MAAM,QAAQ,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,OAAO;QACZ,MAAM,WAAW,MAAM,IAAI,CAAC,MAAM,QAAQ;QAC1C,MAAM,WAAW,SAAS,MAAM,CAAC,CAAC,UAAY,YAAY,MAAM,iBAAiB;QACjF,SAAS,OAAO,CAAC,CAAC,UAAY,QAAQ,MAAM;IAChD;IAEA,MAAM,iBAAiB;QACnB,IAAI,IAAI,CAAC,cAAc,EAAE;QACzB,IAAI,CAAC,cAAc,GAAG;QACtB,IAAI,CAAC,WAAW,IAAK,CAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAI;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;QAEzC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,MAAM,WAAW,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa;YAC1D,MAAM,OAAO,CAAA,GAAA,wBAAM,AAAD,EAAE,SAAS,UAAU,CAAC,SAAS;YACjD,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM;YAC3B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YAC7B,MAAM,aAAa,KAAK,aAAa,CAAC;YACtC,cAAc,IAAI,CAAC,OAAO,CAAC;QAC/B,OAAO;YACH,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG;YACzB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,IAAI,CAAC,UAAU;QACjE;IACJ;IAEA,MAAM,kBAAkB;QACpB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAC1B,IAAI,CAAC,cAAc,GAAG;QACtB,IAAI,CAAC,WAAW,IAAK,CAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAG;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;QACxC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG;QACzB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,IAAI,CAAC,WAAW;IAClE;IAEA,OAAO,WAAW,OAAgB,EAAE;QAChC,QAAQ,cAAc,CAAC;IAC3B;AACJ;kBAtNqB;;;ACbrB;;;CAGC;;AACD,MAAM,SAAS,CAAiB,MAAc,SAAS,KAAK;IACxD,IAAI,CAAC,MAAM,OAAO;IAClB,MAAM,SAAS,IAAI;IACnB,MAAM,MAAM,OAAO,eAAe,CAAC,MAAM;IACzC,OAAO,SACD,IAAI,IAAI,GACR,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC;kBAEe;;;;;iDCGF;kDAoDA;AApEb;AAYA,MAAM,qBAAqB,CAAC;IACxB,MAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC9C;AAEO,MAAM,cAAc,CAAC,0BAA0B,KAAK;IACvD,MAAM,WAAW;IAEjB,IACI,CAAC,OAAO,KAAK,IACV,CAAC,OAAO,KAAK,CAAC,UAAU,IACxB,CAAC,2BACD,CAAC,OAAO,KAAK,CAAC,UAAU,CAAC,aAAa,EAC3C,OAAO;IAET,OAAO,OAAO,KAAK,CAAC,UAAU,CAAC,aAAa;AAChD;AAEA,MAAM,sBAAsB,CAAI,UAAuB;IACnD,MAAM,OAAO,OAAO,IAAI,CAAC,SAAS,IAAI;IACtC,MAAM,OAAO,SAAS,aAAa,CAAC;IACpC,KAAK,SAAS,GAAG;IAEjB,MAAM,OAAO,SAAS,WAAW,KAAK,sBAAsB,KAAK,SAAS,KAAK,KACzE,KAAK,KAAK,CAAC,KAAK,SAAS,IACzB,CAAC;IAEP,gBAAgB,CAAA,GAAA,uCAAuB,AAAD,EAAE,SAAS,QAAQ,EAAE;IAE3D,OAAO;QACH,QAAQ,SAAS,MAAM;QACvB,UAAU,SAAS,QAAQ;QAC3B,cAAc,SAAS,IAAI;QAC3B,aAAa;QACb,SAAS,SAAS,MAAM,KAAK;QAC7B,YAAY,SAAS,WAAW,KAAK,cAAc,KAAK,SAAS,GAAG;QACpE,YAAY;QACZ;IACJ;AACJ;AAEA,MAAM,0BAA0B,CAAC;IAC7B,MAAM,eAAe,IAAI;IACzB,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM;QACtC,aAAa,MAAM,CAAC,KAAK,SAAS;IACtC;IACA,OAAO;AACX;AAEA,MAAM,4BAA4B,CAAC;IAC/B,MAAM,eAAe,IAAI;IACzB,SAAS,OAAO,CAAC,CAAC,OAAO;QACrB,aAAa,MAAM,CAAC,KAAK;IAC7B;IACA,OAAO;AACX;AAEO,MAAM,eAAe,OAAU,EAClC,UAAU,EACV,cAAc,EACd,gBAAgB,kBAAkB,EAClC,OAAO,EACP,qBAAqB,IAAI,EACzB,QAAQ,SAAS,EACjB,eAAe,IAAI,EACD;IAClB,MAAM,UAAU,IAAI,QAAQ;QACxB,oBAAoB;QACpB,iBAAiB;IACrB;IAEA,IAAI;IACJ,IAAI,SAAS;QACT,QAAQ,GAAG,CAAC,gBAAgB;QAC5B,IAAI,mBAAmB,iBACnB,OAAO;aACJ,IAAI,mBAAmB,UAC1B,OAAO,0BAA0B;aAC9B,IAAI,mBAAmB,QAC1B,OAAO,wBAAwB;IAEvC;IAEA,MAAM,OAAoB;QACtB,QAAQ,UAAU,SAAS;QAC3B;QACA;QACA,aAAa;QACb;IACJ;IAEA,IAAI;QACA,MAAM,WAAW,MAAM,MAAM,YAAY;QACzC,MAAM,cAAc,SAAS,OAAO,CAAC,GAAG,CAAC;QACzC,MAAM,OAAO,aAAa,SAAS,sBAC7B,MAAM,SAAS,IAAI,KACnB,MAAM,SAAS,IAAI;QACzB,MAAM,eAAe,qBAAqB,oBAAuB,MAAM,gBAAgB;QACvF,eAAe;IACnB,EAAE,OAAO,OAAO;QACZ,cAAc;IAClB;AACJ;;;;;;sDCnCa;4DA2CA;6DAcA;AAvIb;AAGA;;;UAEY;;;;;GAAA,qBAAA;AAYZ,MAAM,uBAAuB,CAAC,UAA2B;IACrD,IAAI;IACJ,IAAI,CAAC,SAAS,QAAQ,EAAE,OAAO;IAC/B,IAAI,SAAS,QAAQ,KAAK,eAAe;QACrC,MAAM,kBAA0C;YAC5C,GAAG,SAAS,yBAAyB,CAAC,IAAI;YAC1C,GAAG,SAAS,4BAA4B,CAAC,IAAI;YAC7C,GAAG,SAAS,yBAAyB,CAAC,IAAI;YAC1C,GAAG,SAAS,2BAA2B,CAAC,IAAI;YAC5C,GAAG,SAAS,4BAA4B,CAAC,IAAI;QACjD;QACA,cAAc,eAAe,CAAC,OAAO,SAAS,WAAW,KAAK,EAAE;IACpE,OAAO,IAAI,SAAS,QAAQ,KAAK,gBAC7B,cAAc,SAAS,0BAA0B,CAAC,IAAI;SACnD,IAAI,SAAS,QAAQ,KAAK,wBAC7B,cAAc,SAAS,oBAAoB,CAAC,IAAI;IAEpD,OAAO;AACX;AAEA,MAAM,kBAAkB,CAAC,iBAAyB,YAAoB,OAAO,GAAK;QAC9E,CAAC,YAAY,EAAE,gBAAgB,CAAC;QAChC,CAAC,OAAO,EAAE,UAAU,CAAC;QACrB;KACH,CAAC,IAAI,CAAC;AAEP,MAAM,eAAe,CAAC,SAAiB;IACnC,MAAM,iBAAuD;QACzD,WAA0B;YACtB,sCAAsC;YACtC,QAAQ,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,gBAAgB;QAClD;QACA,WAA0B;YACtB,sCAAsC;YACtC,QAAQ,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,gBAAgB,UAAU;QAC5D;QACA,SAAwB;YACpB,sCAAsC;YACtC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,gBAAgB;QACjD;QACA,QAAuB;YACnB,sCAAsC;YACtC,QAAQ,KAAK,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,gBAAgB;QACnD;IACJ;IAEA,cAAc,CAAC,KAAK;AACxB;AAEA,MAAM,yBAAyB,CAAC;IAC5B,IAAI,mBAAmB,cAAc,aAAa,CAAc;IAChE,IAAI,CAAC,kBAAkB;QACnB,mBAAmB,CAAA,GAAA,wBAAM,AAAD,EACpB;QAEJ,cAAc,qBAAqB,CAAC,aAAa;IACrD;IAEA,OAAO;AACX;AAEO,MAAM,mBAAmB,CAC5B,MACA,SACA,OAAe,GAAG,EAClB,UAAuC,CAAC,CAAC;IAEzC,IAAI,CAAC,SAAS;IACd,MAAM,UAAU,SAAS,gBAAgB,CAAoB;IAC7D,IAAI;IAEJ,IAAI,QAAQ,MAAM,KAAK,GACnB,mBAAmB,uBAAuB,SAAS,IAAI;SACpD;QACH,MAAM,aAAa,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,YACD,mBAAmB,uBAAuB,SAAS,IAAI;aAEvD,mBAAmB,uBAAuB;IAElD;IAEA,MAAM,QAAQ,CAAA,GAAA,wBAAM,AAAD,EAAE,CAAC;6DACmC,EAAE,KAAK,WAAW,GAAG;6DACrB,EAAE,KAAK,WAAW,GAAG;4CACtC,EAAE,QAAQ;;IAElD,CAAC;IAED,MAAM,KAAK,CAAC,SAAS,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC1D,MAAM,SAAS,CAAC,GAAG,CAAC;IAEpB,iBAAiB,WAAW,CAAC;IAE7B,MAAM,gBAAgB,CAAC,gBAAgB,CAAC;QACpC,IAAI,AAAC,MAAyB,aAAa,KAAK,WAAW;QAC3D,iBAAiB,WAAW,CAAC;IACjC;IAEA,QAAQ,cAAc,GAChB,aAAa,QAAQ,cAAc,EAAE,QACrC,aAAa,SAAS;AAChC;AAEO,MAAM,yBAAyB,CAAC,MAAe;IAClD,MAAM,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG;IACpC,MAAM,UAAU,mBAAmB,KAAK,IAAI;IAE5C,MAAM,cAA0C;QAC5C,GAAG,IAAM,4BAA2C,SAAS,KAAK,IAAI;QACtE,GAAG,IAAM,4BAA2C,SAAS,KAAK,IAAI;QACtE,GAAG,IAAM,0BAAyC,SAAS,KAAK,IAAI;QACpE,GAAG,IAAM,yBAAwC,SAAS,KAAK,IAAI;IACvE;IAEA,WAAW,CAAC,KAAK;AACrB;AAEO,MAAM,0BAA0B,CAAC,OAAkB;IACtD,MAAM,WAAW;QACb,GAAG,CAAA,GAAA,2BAAe,AAAD,CAAC;QAAE,GAAG,CAAA,GAAA,2BAAe,AAAD,CAAC;QAAE,GAAG,CAAA,GAAA,2BAAe,AAAD,CAAC;QAAE,GAAG,CAAA,GAAA,4BAAgB,AAAD,CAAC;IACnF;IACA,MAAM,OAAO,CAAC,CAAC;QACX,uBAAuB,MAAM,qBAAqB,UAAU;IAChE;AACJ;;;AC9IA,0BAA0B;;uDA8Hb;6DAYA;oDAMA;qDAMA;sDAMA;qDAMA;iEAMA;4DAMA;oDAMA;0DAMA;qDAMA;sDAKA;qDAKA;sDAKA;2DAKA;qDAMA;AAxNb,MAAM,0BAAiD;IACnD,UAAU;IACV,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,SACI;IACJ,UACI;IACJ,cAAc;IACd,cAAc;IACd,kCAAkC;IAClC,OAAO;IACP,aAAa;AACjB;AAEA,MAAM,qCAAkE;IACpE,qBAAqB;AACzB;AAEA,MAAM,gCAA6D;IAC/D,YAAY;IACZ,aAAa;AACjB;AAEA,MAAM,uBAAoC;IACtC,oBAAoB;QAAE,MAAM;QAAY,MAAM;IAAyB;IACvE,sBAAsB;QAAE,MAAM;QAAY,MAAM;IAA6B;IAC7E,2BAA2B;QAAE,MAAM;QAAY,MAAM;IAAoD;AAC7G;AAEA,MAAM,yBAAsC;IACxC,4BAA4B;QAAE,MAAM;QAAY,MAAM;IAA0B;AACpF;AAEA,MAAM,wBAAqC;IACvC,8BAA8B;QAAE,MAAM;QAAY,MAAM;IAA2B;IACnF,2BAA2B;QAAE,MAAM;QAAY,MAAM;IAAuB;IAC5E,6BAA6B;QAAE,MAAM;QAAY,MAAM;IAA+B;IACtF,8BAA8B;QAAE,MAAM;QAAY,MAAM;IAAgC;IACxF,2BAA2B;QAAE,MAAM;QAAY,MAAM;IAAuB;AAChF;AAEA,MAAM,wBAAqC;IACvC,aAAa;QAAE,MAAM;QAAY,MAAM;IAAG;IAC1C,YAAY;QAAE,MAAM;QAAY,MAAM;IAAoB;IAC1D,OAAO;QAAE,MAAM;QAAY,MAAM;IAAoC;AACzE;AAEA,MAAM,yBAAsC;IACxC,oBAAoB;QAAE,MAAM;QAAY,MAAM;IAAuD;IACrG,iBAAiB;QAAE,MAAM;QAAY,MAAM;IAAqC;IAChF,qBAAqB;QAAE,MAAM;QAAY,MAAM;IAAoC;IACnF,2BAA2B;QAAE,MAAM;QAAY,MAAM;IAA8C;AACvG;AAEA,MAAM,6BAA0C;IAC5C,qBAAqB;QAAE,MAAM;QAAY,MAAM;IAAkB;AACrE;AAEA,MAAM,wBAAqC;IACvC,eAAe;QAAE,MAAM;QAAY,MAAM;IAA6C;IACtF,sBAAsB;QAAE,MAAM;QAAY,MAAM;IAAiC;AACrF;AAEA,MAAM,wBAAqC;IACvC,kBAAkB;QAAE,MAAM;QAAY,MAAM;IAAkD;IAC9F,WAAW;QAAE,MAAM;QAAY,MAAM;IAAM;IAC3C,eAAe;QAAE,MAAM;QAAY,MAAM;IAAK;IAC9C,eAAe;QAAE,MAAM;QAAY,MAAM;IAA4B;IACrE,gBAAgB;QAAE,MAAM;QAAY,MAAM;IAAG;IAC7C,oBAAoB;QAAE,MAAM;QAAY,MAAM;IAAG;IACjD,uBAAuB;QAAE,MAAM;QAAY,MAAM;IAAG;IACpD,qBAAqB;QAAE,MAAM;QAAY,MAAM;IAAG;IAClD,qBAAqB;QAAE,MAAM;QAAY,MAAM;IAAG;AACtD;AAEA,MAAM,oCAAiD;IACnD,iBAAiB;QAAE,MAAM;QAAY,MAAM;IAAyB;IACpE,oBAAoB;QAAE,MAAM;QAAY,MAAM;IAAkB;AACpE;AAEA,MAAM,+BAA4C;IAC9C,gBAAgB;QAAE,MAAM;QAAY,MAAM;IAAsC;IAChF,iBAAiB;QAAE,MAAM;QAAY,MAAM;IAAuD;IAClG,cAAc;QAAE,MAAM;QAAY,MAAM;IAAoC;IAC5E,YAAY;QAAE,MAAM;QAAY,MAAM;IAAqE;IAC3G,iBAAiB;QAAE,MAAM;QAAY,MAAM;IAAsC;IACjF,eAAe;QAAE,MAAM;QAAY,MAAM;IAA8D;IACvG,cAAc;QAAE,MAAM;QAAY,MAAM;IAAgB;IACxD,0BAA0B;QAAE,MAAM;QAAY,MAAM;IAAiB;IACrE,YAAY;QAAE,MAAM;QAAY,MAAM;IAAc;IACpD,kBAAkB;QAAE,MAAM;QAAY,MAAM;IAA+C;IAC3F,cAAc;QAAE,MAAM;QAAY,MAAM;IAAyB;IACjE,YAAY;QAAE,MAAM;QAAY,MAAM;IAA8B;AACxE;AAEA,MAAM,uBAAoC;IACtC,aAAa;QAAE,MAAM;QAAY,MAAM;IAA6B;AACxE;AAEA,MAAM,yBAAsC;IACxC,cAAc;QAAE,MAAM;QAAY,MAAM;IAAkD;IAC1F,sBAAsB;QAAE,MAAM;QAAY,MAAM;IAAe;IAC/D,qBAAqB;QAAE,MAAM;QAAY,MAAM;IAAoD;AACvG;AAEA,MAAM,8BAA2C;IAC7C,kBAAkB;QAAE,MAAM;QAAY,MAAM;IAA4B;IACxE,cAAc;QAAE,MAAM;QAAY,MAAM;IAA6D;IACrG,cAAc;QAAE,MAAM;QAAY,MAAM;IAAiF;IACzH,cAAc;QAAE,MAAM;QAAY,MAAM;IAAqC;IAC7E,cAAc;QAAE,MAAM;QAAY,MAAM;IAAyB;IACjE,cAAc;QAAE,MAAM;QAAY,MAAM;IAAoC;IAC5E,cAAc;QAAE,MAAM;QAAY,MAAM;IAAkD;IAC1F,cAAc;QAAE,MAAM;QAAY,MAAM;IAAwB;IAChE,cAAc;QAAE,MAAM;QAAY,MAAM;IAAyC;AACrF;AAEA,IAAI,CAAC,OAAO,KAAK,EACb,OAAO,KAAK,GAAG,CAAC;AAGb,MAAM,oBAAyE;IAClF,GAAG,uBAAuB;IAC1B,GAAG,kCAAkC;IACrC,GAAG,6BAA6B;IAChC,GAAG,OAAO,KAAK,CAAC,sBAAsB;IACtC,GAAG,OAAO,KAAK,CAAC,8BAA8B;IAC9C,GAAG,OAAO,KAAK,CAAC,yBAAyB;IACzC,GAAG,OAAO,KAAK,CAAC,2BAA2B;IAC3C,GAAG,OAAO,KAAK,CAAC,mCAAmC;IACnD,GAAG,OAAO,KAAK,CAAC,8BAA8B;AAClD;AAEO,MAAM,0BAA0B;IACnC,GAAG,6BAA6B;IAChC,GAAG,OAAO,KAAK,CAAC,yBAAyB;IACzC,GAAG,OAAO,KAAK,CAAC,8BAA8B;AAClD;AAEO,MAAM,iBAAiB;IAC1B,GAAG,oBAAoB;IACvB,GAAG,OAAO,KAAK,CAAC,gBAAgB;IAChC,GAAG,OAAO,KAAK,CAAC,qBAAqB;AACzC;AAEO,MAAM,kBAAkB;IAC3B,GAAG,qBAAqB;IACxB,GAAG,OAAO,KAAK,CAAC,iBAAiB;IACjC,GAAG,OAAO,KAAK,CAAC,sBAAsB;AAC1C;AAEO,MAAM,mBAAmB;IAC5B,GAAG,sBAAsB;IACzB,GAAG,OAAO,KAAK,CAAC,kBAAkB;IAClC,GAAG,OAAO,KAAK,CAAC,uBAAuB;AAC3C;AAEO,MAAM,kBAAkB;IAC3B,GAAG,qBAAqB;IACxB,GAAG,OAAO,KAAK,CAAC,iBAAiB;IACjC,GAAG,OAAO,KAAK,CAAC,sBAAsB;AAC1C;AAEO,MAAM,8BAA8B;IACvC,GAAG,iCAAiC;IACpC,GAAG,OAAO,KAAK,CAAC,6BAA6B;IAC7C,GAAG,OAAO,KAAK,CAAC,kCAAkC;AACtD;AAEO,MAAM,yBAAyB;IAClC,GAAG,4BAA4B;IAC/B,GAAG,OAAO,KAAK,CAAC,wBAAwB;IACxC,GAAG,OAAO,KAAK,CAAC,6BAA6B;AACjD;AAEO,MAAM,iBAAiB;IAC1B,GAAG,oBAAoB;IACvB,GAAG,OAAO,KAAK,CAAC,gBAAgB;IAChC,GAAG,OAAO,KAAK,CAAC,qBAAqB;AACzC;AAEO,MAAM,uBAAuB;IAChC,GAAG,0BAA0B;IAC7B,GAAG,OAAO,KAAK,CAAC,sBAAsB;IACtC,GAAG,OAAO,KAAK,CAAC,2BAA2B;AAC/C;AAEO,MAAM,kBAAkB;IAC3B,GAAG,qBAAqB;IACxB,GAAG,OAAO,KAAK,CAAC,iBAAiB;IACjC,GAAG,OAAO,KAAK,CAAC,sBAAsB;AAC1C;AACO,MAAM,mBAAmB;IAC5B,GAAG,sBAAsB;IACzB,GAAG,OAAO,KAAK,CAAC,kBAAkB;IAClC,GAAG,OAAO,KAAK,CAAC,uBAAuB;AAC3C;AACO,MAAM,kBAAkB;IAC3B,GAAG,qBAAqB;IACxB,GAAG,OAAO,KAAK,CAAC,iBAAiB;IACjC,GAAG,OAAO,KAAK,CAAC,sBAAsB;AAC1C;AACO,MAAM,mBAAmB;IAC5B,GAAG,sBAAsB;IACzB,GAAG,OAAO,KAAK,CAAC,kBAAkB;IAClC,GAAG,OAAO,KAAK,CAAC,uBAAuB;AAC3C;AACO,MAAM,wBAAwB;IACjC,GAAG,2BAA2B;IAC9B,GAAG,OAAO,KAAK,CAAC,uBAAuB;IACvC,GAAG,OAAO,KAAK,CAAC,4BAA4B;AAChD;AAEO,MAAM,kBAAkB;IAC3B,GAAG,OAAO,KAAK,CAAC,iBAAiB;AACrC;;;;;AC5NA;;AAEe,MAAM,mBAAmB,CAAA,GAAA,sCAAsB,AAAD;IAMzD,aAAc;QACV,KAAK;QAEL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,gCAAgC;QACzE,IAAI,CAAC,cAAc,GAAG,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;QAEjE,qFAAqF;QACrF,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI;YACvB;gBAAC;gBAAM;aAAI;YACX;gBAAC;gBAAK;aAAI;YACV;gBAAC;gBAAK;aAAI;YACV;gBAAC;gBAAK;aAAK;YACX;gBAAC;gBAAM;aAAK;SACf;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW;IACvE;IAEA,oBAA0B;QACtB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI;QAChC,OAAO,QAAQ,GAAG,IAAI;IAC1B;IAEA,uBAA6B;QACzB,KAAK,CAAC;QACN,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI;IACtC;IAEA,UAAU,OAA8B,EAAE;QACtC,QAAQ,OAAO,CAAC;YACZ,MAAM,eAAe,OAAO,UAAU;YACtC,MAAM,oBAAoB,IAAI,CAAC,oBAAoB,CAAC;YACpD,IAAI,IAAI,CAAC,iBAAiB,KAAK,mBAAmB;gBAC9C,MAAM,QAAQ,IAAI,YAAY,IAAI,CAAC,eAAe,EAAE;oBAChD,SAAS;oBACT,QAAQ;wBACJ,OAAO;wBACP,YAAY;oBAChB;gBACJ;gBACA,IAAI,CAAC,iBAAiB,GAAG;gBACzB,IAAI,CAAC,aAAa,CAAC;YACvB;QACJ;IACJ;IAEA,qBAAqB,KAAa,EAAc;QAC5C,IAAI,oBAAgC;QACpC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO;YAC7B,IAAI,SAAS,OACT,oBAAoB;QAE5B;QACA,OAAO;IACX;AACJ;kBA5DqB;;;;;ACFrB;AACA;;AACA;AACA;AA4Be,MAAM,iBAAiB,CAAA,GAAA,sCAAsB,AAAD;IA4BvD,aAAc;QACV,KAAK;aA5BT,iBAAyB;aACzB,2BAAmC;aACnC,4BAAoC;aACpC,6BAAqC;aACrC,8BAAsC;aACtC,uBAA+B;aAC/B,2BAAmC;aAYnC,uBAAyC,CAAC;aAG1C,UAAkB;aAElB,uBAAgC;aAChC,uBAA+B;aAC/B,4BAAoC;QAIhC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,KAAK;QACnE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,KAAK;QACnF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,KAAK;QACrF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAA0B,KAAK;QACvF,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,2BAA2B,KAAK;QACzF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,KAAK;QAC3E,IAAI,CAAC,qBAAqB,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,wBAAwB,MAAM;QACzF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,gCAAgC;QACzE,IAAI,CAAC,qBAAqB,GACtB,IAAI,CAAC,YAAY,CAAC,uCAAuC;QAE7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,mCAAmC;QAC9E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,iCAAiC;QAE3E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EACtB,MAAM,IAAI,MAAM;QAGpB,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,YAAY;QAEhF,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAC9B,MAAM,IAAI,MAAM;QAGpB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EACxB,MAAM,IAAI,MAAM;QAEpB,SAAS,kBAAkB;IAC/B;IAEA,oBAA0B;QACtB,IAAI,CAAC,gBAAgB;IACzB;IAEA,mBAAyB;QACrB,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/B,MAAM,oBAAoB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;YACnD,MAAM,uBAAuB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;YAC1D,MAAM,uBAAuB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;YACpD,IAAI,CAAC,YAAY,CAAC;gBAAE,OAAO;gBAAS,SAAS,IAAI,CAAC,wBAAwB;gBAAE,QAAQ;YAAkB;YACtG,IAAI,CAAC,YAAY,CAAC;gBACd,OAAO;gBACP,SAAS,IAAI,CAAC,wBAAwB;gBACtC,QAAQ;YACZ;YACA,IAAI,CAAC,YAAY,CAAC;gBAAE,OAAO;gBAAS,SAAS;gBAAQ,QAAQ;YAAqB;QACtF;QAEA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,MAAM,2BAA2B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;YAC5D,IAAI,CAAC,YAAY,CAAC;gBACd,OAAO;gBACP,SAAS,IAAI,CAAC,sBAAsB;gBACpC,QAAQ;YACZ;QACJ;QAEA,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,MAAM,oBAAoB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;YACpD,IAAI,CAAC,YAAY,CAAC;gBACd,OAAO;gBACP,SAAS,IAAI,CAAC,uBAAuB;gBACrC,QAAQ;YACZ;QACJ;QAEA,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,MAAM,wBAAwB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;YACvD,IAAI,CAAC,YAAY,CAAC;gBACd,OAAO;gBACP,SAAS,IAAI,CAAC,yBAAyB;gBACvC,QAAQ;YACZ;QACJ;IACJ;IAEA,iBAAuB;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe;IAC3C;IAEA,SAAS,KAAiB,EAAQ;QAC9B,MAAM,eAAe,IAAI,CAAC,wBAAwB;QAClD,MAAM,gBAAgB,IAAI,CAAC,kBAAkB;QAC7C,IAAI,CAAC,gBAAgB,CAAC,eAAe;QACrC,MAAM,mBAAmB,aAAa,qBAAqB;QAC3D,MAAM,aAAa,cAAc,qBAAqB;QACtD,MAAM,aAAa;YACf;gBAAE,WAAW;YAAiB;YAC9B;gBAAE,WAAW;YAAW;SAC3B;QACD,IAAI,CAAA,GAAA,gCAAe,AAAD,EAAE,OAAO,aAAa;YACpC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe;YAC1C,IAAI,CAAC,WAAW;QACpB;IACJ;IAEA,iBAAuB;QACnB,MAAM,iBAAyB,CAAC;;;cAG1B,CAAC;QAEP,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,aAAa;IAC7D;IAEA,qBAA2B;QACvB,MAAM,SAAiB,CAAC;;;;;;gBAMhB,EAAE,CAAA,GAAA,uCAA2B,AAAD,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,IAAI,CAAC,qBAAqB,GAAG;;cAEvG,CAAC;QAEP,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,aAAa;IAC7D;IAEA,aAAmB;QACf,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAE9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,mBAAmB;QACpD,IAAI,CAAC,SAAS;QAEd,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB;YAC7C,IAAI,CAAC,kBAAkB;YACvB;QACJ;QAEA,IAAI,CAAC,eAAe;QAEpB,IAAI,CAAC,OAAO,IAAI,aAAa,IAAI,CAAC,OAAO;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,UAAU,CAAC;YAC7B,sBAAsB;YACtB,IAAI,CAAC,cAAc;YAEnB,MAAM,aAAa,IAAI,CAAC,iBAAiB;YACzC,MAAM,OAA+B,OAAO,WAAW,CAAC,OAAO,OAAO,CAAC;YAEvE,MAAM,MAAM,CAAA,GAAA,oBAAW,AAAD;YACtB,CAAA,GAAA,qBAAY,AAAD,EAAE;gBACT,YAAY;gBACZ,gBAAgB,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI;gBACnE,SAAS;YACb;QACJ,GAAG;IACP;IAEA,oBAAwC;QACpC,MAAM,SAA6B;YAC/B,MAAM;YACN,YAAY,mBAAmB,IAAI,CAAC,oBAAoB,CAAC,KAAK;YAC9D,iBAAiB,IAAI,CAAC,yBAAyB,EAAE,QAAQ;YACzD,aAAa,IAAI,CAAC,yBAAyB,EAAE;QACjD;QAEA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACjC,OAAO,OAAO,eAAe;YAC7B,OAAO,OAAO,WAAW;QAC7B;QAEA,OAAO;IACX;IAEA,qCAAqC,QAAoC,EAAQ;QAC7E,IAAI,CAAC,IAAI,CAAC,kBAAkB,EACxB;QAGJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB;QAC7C,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,SAAS,UAAU,CAAC,IAAI;IAChE;IAEA,YAAkB;QACd,MAAM,eAAe,SAAS,iBAAiB;QAE/C,aAAa,IAAI,CACb;YACI,SAAS,IAAI;YACb,WAAW,IAAI,CAAC,eAAe;QACnC,GACA;YACI,SAAS,IAAI;YACb,WAAW,IAAI,CAAC,qBAAqB;QACzC;QAGJ,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAC/B,SAAS,YAAY,CAAC;aAEtB,IAAI,CAAC,eAAe;IAE5B;IAEA,OAAO,oBAAmC;QACtC,MAAM,eAA8B,EAAE;QACtC,OAAO;IACX;IAEA,OAAO,aAAa,KAAoB,EAAQ;QAC5C,MAAM,OAAO,CAAC,CAAC;YACX,KAAK,OAAO,EAAE,UAAU,IAAI,KAAK,SAAS;QAC9C;IACJ;IAEA,OAAO,gBAAgB,KAAoB,EAAQ;QAC/C,MAAM,OAAO,CAAC,CAAC;YACX,KAAK,OAAO,EAAE,UAAU,OAAO,KAAK,SAAS;QACjD;IACJ;IAEA,kBAAwB;QACpB,IAAI,CAAC,kBAAkB,EAAE;IAC7B;IAEA,eAAqB;QACjB,MAAM,eAAe,SAAS,iBAAiB;QAC/C,aAAa,IAAI,CAAC;YACd,SAAS,IAAI;YACb,WAAW,IAAI,CAAC,eAAe;QACnC;QAEA,SAAS,eAAe,CAAC;IAC7B;IAEA,cAAoB;QAChB,MAAM,eAAe,SAAS,iBAAiB;QAC/C,aAAa,IAAI,CACb;YACI,SAAS,IAAI;YACb,WAAW,IAAI,CAAC,eAAe;QACnC,GACA;YACI,SAAS,IAAI;YACb,WAAW,IAAI,CAAC,qBAAqB;QACzC;QAEJ,IAAI,CAAC,eAAe;QACpB,SAAS,eAAe,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE;IAC3B;IAEA,OAAO,qBAA2B;QAC9B,MAAM,YAAY,aAAa,OAAO,CAAC,qBACjC,IAAI,IAAI,aAAa,OAAO,CAAC,sBAC7B;QAEN,IAAI,aAAa,UAAU,QAAQ,KAAK,OAAO,QAAQ,CAAC,QAAQ,EAC5D,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,mBAAmB;QAEzD,IAAI,WACA,aAAa,UAAU,CAAC;IAEhC;IAEA,sBAAwC;QACpC,MAAM,QAAQ,IAAI,CAAC,wBAAwB,EAAE,MAAM,UAAU;QAC7D,MAAM,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,sCAAsC;QACjF,MAAM,qBAAqB,OAAO,SAAS;QAC3C,MAAM,qBAAqB,IAAI,CAAC,uBAAuB,CAAC;QAExD,OAAO;YACH,SAAS;YACT;YACA,OAAO,MAAM,MAAM,IAAI,aAAa,CAAC,sBAAsB,CAAC;YAC5D;YACA;QACJ;IACJ;IAEA,wBAAwB,KAAa,EAAW;QAC5C,IAAI,UAAU,IAAI;YACd,IAAI,CAAC,oBAAoB,GAAG;YAC5B,OAAO;QACX;QAEA,IAAI;QACJ,IAAI,OAAO,KAAK,CAAC,oBAAoB,EACjC,4BAA4B,IAAI,OAAO,OAAO,KAAK,CAAC,oBAAoB,CAAC,kBAAkB;aAE3F,4BAA4B,IAAI,CAAC,yBAAyB;QAE9D,MAAM,UAAU,MAAM,KAAK,CAAC;QAC5B,IAAI,WAAW,QAAQ,MAAM,GAAG,GAAG;YAC/B,MAAM,YAAY,QAAQ,EAAE,CAAC;YAC7B,IAAI,WAAW;gBACX,IAAI,CAAC,oBAAoB,GAAG;gBAC5B,OAAO;YACX;YACA,OAAO;QACX;QAEA,IAAI,CAAC,oBAAoB,GAAG;QAC5B,OAAO;IACX;AACJ;kBAvUqB;;;;;ACdrB,6DAAgB;AAShB,qDAAgB;AATT,SAAS,wBAAwB,KAAY,EAAE,SAAkB,EAAE,MAAe;IACrF,OACI,MAAM,CAAC,GAAG,UAAU,IAAI,GAAI,CAAA,QAAQ,QAAQ,CAAA,KACzC,MAAM,CAAC,GAAG,UAAU,KAAK,GAAI,CAAA,QAAQ,SAAS,CAAA,KAC9C,MAAM,CAAC,GAAG,UAAU,GAAG,GAAI,CAAA,QAAQ,OAAO,CAAA,KAC1C,MAAM,CAAC,GAAG,UAAU,MAAM,GAAI,CAAA,QAAQ,UAAU,CAAA;AAE3D;AAEO,SAAS,gBAAgB,KAAiB,EAAE,UAA2B;IAC1E,MAAM,QAAe;QAAE,GAAG,MAAM,OAAO;QAAE,GAAG,MAAM,OAAO;IAAC;IAC1D,OAAO,WAAW,KAAK,CAAC,CAAC,OAAS,wBAAwB,OAAO,KAAK,SAAS,EAAE,KAAK,MAAM;AAChG;;;;;AC7BA;AACA;;AACA;AAee,MAAM,sBAAsB,CAAA,GAAA,sCAAsB,AAAD;IAa5D,aAAc;QACV,KAAK;QAEL,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,6BAA6B;QAC3E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B;QACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB;QAC3D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,yBAAyB;QAC7D,IAAI,CAAC,cAAc,GAAG;QACtB,IAAI,CAAC,aAAa,GAAG;QACrB,IAAI,CAAC,WAAW,GAAG,SAAS,aAAa,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB;QACxD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG;QAC1B,IAAI,CAAC,qBAAqB,GAAG;QAC7B,IAAI,CAAC,gBAAgB,GAAG;QAExB,IAAI,CAAC,WAAW,GAAG;YACf,YAAY;YACZ,UAAU,IAAI,CAAC,WAAW;YAC1B,kBAAkB;YAClB,MAAM,EAAE;QACZ;IACJ;IAEA,oBAA0B;QACtB,IAAI,CAAC,gBAAgB;IACzB;IAEA,mBAAmB;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;QAEvC,MAAM,iBAAiB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI;QACnD,MAAM,iBAAiB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;QACpD,MAAM,kBAAkB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;QACjD,MAAM,kBAAkB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;QACtD,MAAM,8BAA8B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI;QACrE,MAAM,iCAAiC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI;QAE3E,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,QAAQ;YAAG,QAAQ;QAAe;QACpF,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,SAAS;YAAG,QAAQ;QAAe;QACrF,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,WAAW,CAAC,QAAQ;YAAG,QAAQ;QAAgB;QACjG,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,QAAQ;YAAG,QAAQ;QAAe;QACpF,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,SAAS;YAAG,QAAQ;QAAe;QACrF,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAW,SAAS,IAAI,CAAC,QAAQ;YAAG,QAAQ;QAA4B;QACnG,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAW,SAAS,IAAI,CAAC,SAAS;YAAG,QAAQ;QAA4B;QACpG,IAAI,CAAC,YAAY,CAAC;YACd,OAAO;YACP,SAAS,IAAI,CAAC,WAAW,CAAC,QAAQ;YAClC,QAAQ;QACZ;QAEA,IAAI,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAU,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAgB;IAEjG;IAEA,mBAAmB,KAAoB,EAAQ;QAC3C,IAAI,CAAE,CAAA,MAAM,IAAI,KAAK,SAAS,MAAM,IAAI,KAAK,WAAW,MAAM,IAAI,KAAK,WAAU,GAAI;QAErF,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;QAE/D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;QAExC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,OAAO;QAC5C,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK;QACvC,MAAM,cAAc;IACxB;IAEA,sBAAsB,KAAoB,EAAQ;QAC9C,MAAM,aAAyC;YAC3C,WAAW,IAAM,IAAI,CAAC,cAAc,CAAC;YACrC,SAAS,IAAM,IAAI,CAAC,cAAc,CAAC;YACnC,OAAO,IAAM,IAAI,CAAC,UAAU,CAAC;YAC7B,OAAO,IAAM,IAAI,CAAC,UAAU,CAAC;YAC7B,KAAK,IAAM,IAAI,CAAC,YAAY,CAAC;YAC7B,QAAQ,IAAM,IAAI,CAAC,YAAY,CAAC;QACpC;QAEA,MAAM,SAAS,UAAU,CAAC,MAAM,IAAI,CAAC;QACrC,IAAI,CAAC,QAAQ;QAEb;QACA,MAAM,cAAc;IACxB;IAEA,eAAe,MAAe,EAAQ;QAClC,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;YACnC,MAAM,cAAc,SACd,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,kBAAkB,GACpD,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,sBAAsB;YAE9D,IAAI,uBAAuB,aACvB,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG;QAE5C,OACI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;QAGnE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAClC;QAGJ,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK;QACvC,IAAI,CAAC,WAAW;IACpB;IAEA,aAAa,WAAoB,KAAK,EAAQ;QAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3B,IAAI,CAAC,UAAU;gBACX,IAAI,CAAC,oBAAoB;gBACzB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG;YACpC;YACA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG;QACvC;IACJ;IAEA,iBAAiB;QACb,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,IACpE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM;IAE5E;IAEA,cAAoB;QAChB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,WAAW;QAEvD,IAAI,CAAC,YAAY,CAAC,kBAAkB;QAEpC,MAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,CAAC;QACpD,MAAM,WAAW,iBAAiB,YAAY;QAC9C,MAAM,EAAE,SAAS,EAAE,GAAG;QACtB,MAAM,WAAW,YAAY,SAAS,YAAY;QAClD,MAAM,WAAW,WAAW;QAE5B,IAAI,YAAY,aAAa,AAAC,WAAW,YAAa,UAAU;QAEhE,SAAS,SAAS,GAAG;IACzB;IAEA,iBAAuB;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,GACjF,IAAI,CAAC,aAAa,EAAE,sBAAsB,YAAY,IAAI,CAAC,WAAW;QAG1E,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa;IACpD;IAEA,cAAc,KAAY,EAAQ;QAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,MAAM;QACjC,MAAM,QAAQ,IAAI,CAAC,aAAa,CAAE,KAAK,CAAC,IAAI;QAE5C,IAAI,MAAM,MAAM,GAAG,GAAG;YAClB,IAAI,CAAC,gBAAgB,IAAI,aAAa,IAAI,CAAC,gBAAgB;YAC3D,IAAI,CAAC,gBAAgB,GAAG,WAAW;gBAC/B,IAAI,CAAC,SAAS;YAClB,GAAG;YACH;QACJ;QAEA,IAAI,CAAC,cAAc,GAAG;QAEtB,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,KAAK,IAAI,aAAa,IAAI,CAAC,KAAK;QACrC,IAAI,CAAC,KAAK,GAAG,WAAW;YACpB,IAAI,CAAC,OAAO,CAAC;QACjB,GAAG;IACP;IAEA,QAAQ,KAAa,EAAE;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;QAChC,IAAI,CAAC,YAAY,CAAC;QAElB,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO;QAEnC,MAAM,UAAU,IAAI,CAAC,YAAY,CAAC;QAClC,MAAM,SAAS,CAAC,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,wBAAwB,CAAC;QAElE,MAAM,YAAY,IAAI,IAAI;QAC1B,MAAM,EAAE,YAAY,EAAE,GAAG;QAEzB,OAAO,OAAO,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM;YACzC,aAAa,GAAG,CAAC,KAAK;QAC1B;QAEA,CAAA,GAAA,qBAAY,AAAD,EAAE;YACT,YAAY,UAAU,QAAQ;YAC9B,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI;YAChD,oBAAoB;QACxB;IACJ;IAEA,aAAa,KAAa,EAAE;QACxB,IAAI;QACJ,IAAI;QAEJ,MAAM,UAAkB,IAAI,CAAC,YAAY,EAAE,OAAO,iBAAiB;QAEnE,MAAM,MAAM,MAAM,KAAK,CAAC;QACxB,MAAM,cAAc;QACpB,MAAM,YAAY,IAAI,IAAI,CAAC,CAAC,OAAS,YAAY,IAAI,CAAC;QACtD,IAAI,cAAc,WACd,MAAM;aAEN,MAAM;QAGV,IAAI,CAAC,KACD;YAAA,IAAI,IAAI,MAAM,GAAG,GACb,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI;QACrB;QAGJ,MAAM,IAAI,QAAQ;QAClB,OAAO,MAAM,OAAO,CAAC,KAAK,IAAI,IAAI;QAClC,IAAI,SAAS,aACT,OAAO;QAGX,OAAO;YACH;YACA;YACA;QACJ;IACJ;IAEA,kBAAkB,QAAoB,EAAQ;QAC1C,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,SAAS;QACd,IAAI,MAAM,OAAO,CAAC,WACd,SAAS,OAAO,CAAC,CAAC;YACd,MAAM,cAAsB,CAAC;;qCAER,EAAE,QAAQ,OAAO,CAAC;iCACtB,EAAE,QAAQ,GAAG,CAAC;kCACb,EAAE,QAAQ,IAAI,CAAC;;;;wBAIzB,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,CAAC;;yBAE7B,CAAC;YAEV,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAE,kBAAkB,CAAC,aAAa;YAC3D,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK;gBAAE,KAAK,QAAQ,GAAG;gBAAE,MAAM,QAAQ,IAAI;gBAAE,SAAS,QAAQ,OAAO;YAAC;QACjG;QAGJ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAE,MAAM,KAAK,GAAG;YACrC,MAAM,cAAsB,CAAC;;;;;;wDAMe,EAAE,CAAA,GAAA,2BAAe,AAAD,EAAE,YAAY,CAAC;;sBAEjE,CAAC;YAEX,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAE,kBAAkB,CAAC,aAAa;QAC/D;QACA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG;QAChC,IAAI,CAAC,qBAAqB,IAAI,aAAa,IAAI,CAAC,qBAAqB;QACrE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAE,MAAM,GAAG;IACxC;IAEA,WAAW,KAAY,EAAQ;QAC3B,IAAI,eAA4B,MAAM,MAAM;QAC5C,eAAe,aAAa,OAAO,CAAC;QAEpC,IAAI,CAAC,cAAc;QACnB,MAAM,MAAM,aAAa,YAAY,CAAC;QACtC,MAAM,OAAO,aAAa,YAAY,CAAC;QACvC,MAAM,UAAU,aAAa,YAAY,CAAC;QAE1C,IAAI,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG;QAE1B,IAAI,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG;QAE3B,IAAI,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG;QAG9B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAE,KAAK;QAClC,IAAI,CAAC,SAAS;IAClB;IAEA,kBAAwB;QACpB,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,SAAS,CAAE,KAAK,GAAG;QACxB,IAAI,CAAC,QAAQ,CAAE,KAAK,GAAG;IAC3B;IAEA,YAAkB;QACd,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe;QAC7C;QACA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE;IAC9B;IAEA,uBAAuB;QACnB,IAAI,CAAC,qBAAqB,IAAI,aAAa,IAAI,CAAC,qBAAqB;QACrE,IAAI,CAAC,qBAAqB,GAAG,WAAW;YACpC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC;;;sBAGpB,CAAC;QACf,GAAG;IACP;IAEA,aAAa,eAAe,IAAqB,EAAoB;QACjE,MAAM,SAAS,CAAC,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,wBAAwB,CAAC;QAClE,MAAM,cAAc;YAChB,SAAS,KAAK,aAAa,CAAC,4BAAgD;YAC5E,KAAK,KAAK,aAAa,CAAC,wBAA4C;YACpE,MAAM,KAAK,aAAa,CAAC,yBAA6C;QAC1E;QAEA,MAAM,eAA4B;YAC9B,SAAS,YAAY,OAAO,CAAC,KAAK;YAClC,KAAK,YAAY,GAAG,CAAC,KAAK;YAC1B,MAAM,YAAY,IAAI,CAAC,KAAK;QAChC;QAEA,MAAM,YAAY,IAAI,IAAI;QAC1B,MAAM,EAAE,YAAY,EAAE,GAAG;QAEzB,OAAO,OAAO,CAAC,cAAc,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM;YAC9C,aAAa,GAAG,CAAC,KAAK;QAC1B;QAEA,OAAO,IAAI,QAAQ,CAAC;YAChB,CAAA,GAAA,qBAAY,AAAD,EAAE;gBACT,YAAY,UAAU,QAAQ;gBAC9B,oBAAoB;gBACpB,gBAAgB,CAAC;oBACb,IAAI,UAAU;oBACd,IAAI,MAAM,OAAO,CAAC,WACd,SAAS,IAAI,CAAC,CAAC;wBACX,UAAU,cAAc,qBAAqB,CAAC,cAAc;wBAE5D,OAAO;oBACX;oBAEJ,QAAQ;gBACZ;YACJ;QACJ;IACJ;IAEA,OAAO,sBAAsB,OAAoB,EAAE,OAAoB,EAAW;QAC9E,MAAM,QAAQ,OAAO,IAAI,CAAC;QAC1B,MAAM,QAAQ,OAAO,IAAI,CAAC;QAC1B,IAAI,UAAU;QAEd,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM,EAAE;YAC/B,UAAU;YACV,OAAO;QACX;QAEA,MAAM,OAAO,CAAC,CAAC;YACX,IAAI,OAAO,CAAC,IAAyB,KAAK,OAAO,CAAC,IAAyB,EAAE;gBACzE,UAAU;gBACV,OAAO;YACX;QACJ;QACA,OAAO;IACX;AACJ;kBA7XqB;;;;;ACjBrB;;AAEe,MAAM,kBAAkB,CAAA,GAAA,sCAAsB,AAAD;IASxD,aAAc;QACV,KAAK;aATT,mBAA2B;aAC3B,mBAA2B;QASvB,MAAM,UAAU,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB;QACxD,MAAM,UAAU,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB;QACxD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,gCAAgC;QACzE,IAAI,CAAC,eAAe,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,2BAA2B;QAC3E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QAErC,IAAI,CAAC,SACD,MAAM,IAAI,MAAM;QAGpB,IAAI,CAAC,SACD,MAAM,IAAI,MAAM;QAGpB,IAAI,CAAC,OAAO,GAAG,QAAQ,iBAAiB,GAAG,IAAI,QAAQ,QAAQ,GAAG;QAClE,IAAI,CAAC,cAAc,GAAG,QAAQ,iBAAiB,GAAG,IAAI,QAAQ,QAAQ,GAAG;QAEzE,IAAI,CAAC,IAAI,CAAC,OAAO,EACb,MAAM,IAAI,MAAM;QAGpB,IAAI,CAAC,IAAI,CAAC,cAAc,EACpB,MAAM,IAAI,MAAM;QAGpB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EACvE,MAAM,IAAI,MAAM;IAExB;IAEA,oBAA0B;QACtB,IAAI,CAAC,gBAAgB;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,GAAG;YAC3C,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG;YACxD,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,eAAe,GAAG;QACrD;IACJ;IAEA,mBAAyB;QACrB,IAAI,IAAI,CAAC,OAAO,EACZ;eAAI,IAAI,CAAC,OAAO;SAAC,CAAC,OAAO,CAAC,CAAC,SAAS;YAChC,MAAM,SAAS;YACf,MAAM,eAAe,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ;YAC1D,IAAI,CAAC,YAAY,CAAC;gBAAE,OAAO;gBAAS,SAAS;gBAAQ,QAAQ;YAAa;QAC9E;IAER;IAEA,aAAa,MAAyB,EAAE,KAAa,EAAQ;QACzD,MAAM,QAAQ,OAAO,aAAa,CAAC;QACnC,IAAI,AAAC,SAAS,MAAM,QAAQ,IAAK,OAAO,QAAQ,EAAE;QAClD,MAAM,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK;QACvC,IAAI,CAAC,MAAM;YACP,MAAM,MAAM,OAAO,YAAY,CAAC;YAChC,MAAM,SAAS,OAAO,YAAY,CAAC,aAAa;YAChD,IAAI,CAAC,KAAK;YACV,OAAO,IAAI,CAAC,KAAK;QACrB,OAAO;YACH,IAAI,CAAC,cAAc;YACnB,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe;YACzC,KAAK,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe;QAC3C;QACA,IAAI,CAAC,uBAAuB,CAAC;IACjC;IAEA,iBAAuB;QACnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAC1B;eAAI,IAAI,CAAC,cAAc;SAAC,CAAC,OAAO,CAAC,CAAC,SAAS;YACvC,MAAM,SAAS;YACf,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe;YAC5C,MAAM,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK;YAChC,IAAI,CAAC,MAAM;YACX,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe;QAC9C;IACJ;IAEA,wBAAwB,KAAa,EAAE;QACnC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAC1B,MAAM,iBAAiB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAChD,MAAM,cAAc,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc;QAClD,MAAM,eAAe,YAAY,MAAM,CAAC,CAAC,UAAY,YAAY;QACjE,aAAa,OAAO,CAAC,CAAC;YAClB,MAAM,gBAAgB,QAAQ,gBAAgB,CAAmB;YACjE,cAAc,OAAO,CAAC,CAAC;gBACnB,aAAa,QAAQ,GAAG;gBACxB,aAAa,YAAY,CAAC,uBAAuB;YACrD;QACJ;QACA,MAAM,gBAAgB,gBAAgB,iBAAmC;QACzE,eAAe,QAAQ,CAAC;YACpB,aAAa,QAAQ,GAAG;YACxB,aAAa,eAAe,CAAC;QACjC;IACJ;AACJ;kBAzGqB;;;;;ACFrB;AACA;;AACA;;AACA;AAMe,MAAM,qBAAqB,CAAA,GAAA,sCAAsB,AAAD;qBAoBpD,qBAAqB;QAAC;KAAa;IAE1C,aAAc;QACV,KAAK;aAfT,gBAAyB;QAiBrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAoB,8BAA8B;QACxF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,mCAAmC;QACrE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,mCAAmC;QAC5E,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,sCAAsC;QACpF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,sCAAsC;QACpF,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,YAAY,CAAC,6CAC7C;QACP,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,iCAAiC;QACxE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,8BAA8B;QACrE,IAAI,CAAC,mBAAmB,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,sCAAsC;QAE1F,gBAAgB;QAChB,IAAI,CAAC,eAAe,GAChB,IAAI,CAAC,YAAY,CAAC,gCAAgC;QAEtD,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,IAAI,CAAC,eAAe;QACvD,IAAI,CAAC,eAAe,GAChB,IAAI,CAAC,YAAY,CAAC,gCAAgC;QAEtD,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,IAAI,CAAC,eAAe;QACvD,IAAI,CAAC,eAAe,GAChB,IAAI,CAAC,YAAY,CAAC,gCAAgC;QAEtD,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,IAAI,CAAC,eAAe;IAC3D;IAEA,oBAA0B;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,MAAM;QACxC,IACI,CAAC,IAAI,CAAC,oBAAoB,IACvB,CAAC,IAAI,CAAC,oBAAoB,EAE7B,MAAM,IAAI,MAAM;QAEpB,IAAI,CAAC,0BAA0B;QAC/B,IAAI,CAAC,aAAa;IACtB;IAEA,yBAAyB,IAAY,EAAE,QAAgB,EAAE,QAAgB,EAAE;QACvE,IAAI,SAAS,cACT,IAAI,CAAC,UAAU,CAAC,OAAO;IAE/B;IAEA,6BAAmC;QAC/B,MAAM,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACtC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,YAAY;YAAG,QAAQ;QAAW;QAEpF,MAAM,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;QAC1C,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC,eAAe;YAAE,SAAS,IAAI;YAAE,QAAQ;QAAa;QAErF,MAAM,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;QAC1C,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC,eAAe;YAAE,SAAS,IAAI;YAAE,QAAQ;QAAa;IACzF;IAEA,wBAA8B;QAC1B,MAAM,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;QACxC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS;YAAQ,QAAQ;QAAY;IAC7E;IAEA,yBAA+B;QAC3B,MAAM,eAAe,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI;QACxD,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAU,SAAS;YAAQ,QAAQ;QAAa;IAC/E;IAEA,OAAO;QACH,SAAS,IAAI,CAAC,qBAAqB,CAAC,aAAa,IAAI,CAAC,OAAO;QAC7D,IAAI,CAAC,OAAO,CAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa;QAC9C,IAAI,CAAC,oBAAoB;QACzB,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ;QACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW;IACvC;IAEA,SAAS;QACL,+FAA+F;QAC/F,WAAW;YACP,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,sBAAsB;QAC/B,GAAG;IACP;IAEA,SAAS;QACL,IAAI,CAAC,aAAa;QAClB,IAAI,CAAC,QAAQ;IACjB;IAEA,MAAM,KAAiB,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACnB,MAAM,mBAAmB,IAAI,CAAC,YAAY,CAAE,qBAAqB;QACjE,MAAM,cAAc,IAAI,CAAC,OAAO,CAAE,qBAAqB;QACvD,MAAM,aAAa;YACf;gBAAE,WAAW;YAAiB;YAC9B;gBAAE,WAAW;YAAY;SAC5B;QACD,IAAI,CAAA,GAAA,gCAAe,AAAD,EAAE,OAAO,aAAa;YACpC,IAAI,CAAC,OAAO,CAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa;YACjD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW;YACnC,IAAI,CAAC,cAAc,CAAC;QACxB;IACJ;IAEA,WAAW;QACP,QAAQ,GAAG,CAAC;YACR,aAAa,SAAS,CAAC,IAAI,CAAC,oBAAoB;SACnD,EAAE,IAAI,CAAC,CAAC;YACL,IAAI,CAAC,aAAa,GAAG;YACrB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;QAClC,GAAG,KAAK,CAAC;YACL,IAAI,CAAC,aAAa,GAAG;QACzB;IACJ;IAEA,gBAAsB;QAClB,CAAA,GAAA,qBAAY,AAAD,EAAE;YACT,YAAY,IAAI,CAAC,oBAAoB;YACrC,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;QAC9C;IACJ;IAEA,OAAO,UAAa,GAAW,EAA0B;QACrD,OAAO,IAAI,QAAQ,CAAC;YAChB,CAAA,GAAA,qBAAY,AAAD,EAAE;gBACT,YAAY;gBACZ,gBAAgB,CAAC;oBACb,QAAQ;gBACZ;YACJ;QACJ;IACJ;IAEA,YAAY,QAAsC,EAAQ;QACtD,IAAI,CAAC,YAAY,CAAC,SAAS,OAAO,EAAE;QACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,UAAU;QACxC,IAAI,CAAC,UAAU,CAAC;IACpB;IAEA,WAAW,QAAgB,EAAE;QACzB,IAAI,aAAa,GACb,IAAI,CAAC,YAAY,EAAE,UAAU,IAAI,IAAI,CAAC,0BAA0B;aAC7D;YACH,IAAI,CAAC,YAAY,EAAE,aAAa,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;YAChE,IAAI,CAAC,YAAY,EAAE,UAAU,OAAO,IAAI,CAAC,0BAA0B;QACvE;IACJ;IAEA,aAAa,QAAoB,EAAQ;QACrC,IAAI,CAAC,YAAY,CAAC,SAAS,OAAO,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;QAC1B,MAAM,QAAQ,CAAA,GAAA,wBAAM,AAAD,EAAe,SAAS,UAAU;QACrD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG;QAChC,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,aAAa,MAAM,SAAS;IACvE;IAEA,uBAAuB;QACnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,CAAE,qBAAqB;QAClE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAE,qBAAqB;QACrD,MAAM,mBAAmB,QAAQ;QAEjC,IAAI,CAAC,OAAO,CAAE,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAErD,IAAI,oBAAoB,IAAI,CAAC,mBAAmB,EAC5C,IAAI,CAAC,OAAO,CAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,MAAM,EAAE,CAAC;aAC5C;YACH,IAAI,CAAC,OAAO,CAAE,KAAK,CAAC,IAAI,GAAG;YAC3B,IAAI,CAAC,OAAO,CAAE,KAAK,CAAC,SAAS,GAAG;QACpC;IACJ;AACJ;kBAhMqB;;;;;ACTrB;;AAOe,MAAM,wBAAwB,CAAA,GAAA,sCAAsB,AAAD;IAU9D,aAAc;QACV,KAAK;QAEL,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,+BAA+B;QACvE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,+BAA+B;QACvE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,+BAA+B;QACvE,IAAI,CAAC,cAAc,GAAG;YAClB,SAAS,IAAI,CAAC,YAAY,CAAC,wBAAwB;YACnD,YAAY,IAAI,CAAC,YAAY,CAAC,4BAA4B;QAC9D;QACA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,gCAAgC;IAC7E;IAEA,oBAA0B;QACtB,IACI,AAAC,CAAA,CAAC,IAAI,CAAC,aAAa,IACjB,CAAC,IAAI,CAAC,aAAa,IACnB,CAAC,IAAI,CAAC,aAAa,AAAD,KAClB,CAAC,IAAI,CAAC,YAAY,EACvB,MAAM,IAAI,MAAM;QAElB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ;QACpC,IAAI,CAAC,gBAAgB;IACzB;IAEA,mBAAyB;QACrB,MAAM,eAAe,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;QAC/C,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,aAAa;YAAG,QAAQ;QAAa;IAC3F;IAEA,cAAoB;QAChB,IAAI,CAAC,oBAAoB;IAC7B;IAEA,uBAA6B;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe;QAC1C,IAAI,CAAC,aAAa,EAAE,UAAU,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO;QAChE,IAAI,CAAC,aAAa,EAAE,UAAU,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU;IACvE;IAEA,kBAAkB,QAAiB,EAAQ;QACvC,IAAI,UAAU;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe;YAC1C,IAAI,CAAC,aAAa,EAAE,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU;QACpE,OACI,IAAI,CAAC,aAAa,EAAE,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO;IAErE;AACJ;kBA5DqB;;;;;ACPrB;AACA;;AACA;;;AAEA;;;;;;;CAOC,aAEI;;;;;GAAA,kBAAA;AA2BU,MAAM,iBAAiB,CAAA,GAAA,sCAAsB,AAAD;IAwBvD,aAAc;QACV,KAAK;aAxBC,UAAwB,EAAE;aAC1B,gBAAwB;aAIlC,aAAsB;aACtB,uBAAgC;QAoB5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QACpC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,qCACxC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,sCAAuC;QAC1E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,gCAAgC;QACzE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,sCAAsC;QACpF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,sCACvC;QACP,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,mCAAmC;QAC9E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB;QAChE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B;QAClE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAkC;QAC9E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAkC;QAC7E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,mCAAmC;QAC/E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAkC;QAC7E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,mCAAmC;QAC/E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC;IAChD;IAEA,oBAA0B;QACtB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,MAAM;QAC/B,IAAI,CAAC,qBAAqB;QAC1B,IAAI,CAAC,aAAa;IACtB;IAEA,wBAA8B;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAClB,MAAM,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;QACnD,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,MAAM;YAAE,QAAQ;QAAQ;IAC9E;IAEA,qBAAqB,IAAqB,EAAQ;QAC9C,MAAM,WAAW,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;QAC5C,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAU,SAAS;YAAM,QAAQ;QAAS;IACzE;IAEA,wBAA8B;QAC1B,MAAM,UAAU,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;QAC1C,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS;YAAQ,QAAQ;QAAQ;IACzE;IAEA,aAAa,GAAW,EAAqB;QACzC,MAAM,SAAS,SAAS,YAAY,CAAC;YACjC,WAAW,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;YACzF,gBAAgB,IAAI,CAAC,oBAAoB;YACzC,gBAAgB,IAAI,CAAC,oBAAoB;YACzC,KAAK;YACL,WAAW,IAAI,CAAC,SAAS;YACzB,YAAY;YACZ,cAAc,IAAI,CAAC,YAAY;YAC/B,oBAAoB,IAAI,CAAC,kBAAkB;YAC3C,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,oBAAoB,IAAI,CAAC,kBAAkB;YAC3C,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,oBAAoB,IAAI,CAAC,kBAAkB;QAC/C;QACA,MAAM,WAAW,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;QAC5C,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS;YAAQ,QAAQ;QAAS;QACtE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE;YAAK;QAAO,KAAK;QAC1D,OAAO;IACX;IAEA,WAAW,GAAW,EAAQ;QAC1B,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,kBAAkB;YACvB,MAAM,SAAS,IAAI,CAAC,YAAY,CAAC;YACjC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,KAAK,OAAO,SAAS;YAC/C,IAAI,CAAC,kBAAkB,CAAC;QAC5B,OACI,CAAA,GAAA,qBAAY,AAAD,EAAE;YACT,YAAY;YACZ,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE;QAC1D;IAER;IAEA,mBAAmB,GAAW,EAAE,OAA+B,EAAQ;QACnE,CAAA,GAAA,qBAAY,AAAD,EAAE;YACT,YAAY;YACZ,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE;YACtD;QACJ;IACJ;IAEA,sBAAsB,GAAW,EAAE,QAAoB,EAAQ;QAC3D,IAAI,CAAC,YAAY,CAAC,SAAS,OAAO,EAAE;QACpC,IAAI,CAAC,kBAAkB;QACvB,MAAM,SAAS,IAAI,CAAC,YAAY,CAAC;QACjC,MAAM,UAAU,OAAO,aAAa,CAAC;QACrC,IAAI,CAAC,SAAS;QACd,QAAQ,SAAS,GAAG,SAAS,UAAU;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,KAAK,OAAO,SAAS;QAC/C,IAAI,CAAC,kBAAkB,CAAC;QACxB,MAAM,OAAO,QAAQ,aAAa,CAAC;QACnC,QAAQ,IAAI,CAAC,oBAAoB,CAAC;IACtC;IAEA,WAAW,GAAW,EAAE;QACpB,IAAI,CAAC,mBAAmB,CAAC;QACzB,+FAA+F;QAC/F,WAAW;YACP,IAAI,CAAC,qBAAqB;QAC9B;IACJ;IAEA,8DAA8D;IAC9D,YAAY,KAAU,EAAQ;QAC1B,MAAM,aAAa,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa;QACrD,8DAA8D;QAC9D,MAAM,mBAAmB,MAAM,SAAS,KAAK;QAE7C,IAAI,CAAC,cAAc,CAAC,kBAAkB;QACtC,MAAM,EAAE,MAAM,EAAE,GAAG;QACnB,IAAI,IAAI,CAAC,oBAAoB,EACzB,SAAS,oBAAoB,CAAC,QAAQ;IAE9C;IAEA,mBAAmB,MAAyB,EAAQ;QAChD,SAAS,wBAAwB,CAC7B,QACA,0BACA,IAAM,OAAO,KAAK;QAEtB,SAAS,wBAAwB,CAC7B,QACA,oCACA,CAAC,SAAW,IAAI,CAAC,aAAa,eAA2B;QAE7D,SAAS,wBAAwB,CAC7B,QACA,iCACA,CAAC,SAAW,IAAI,CAAC,aAAa,iBAA6B;QAE/D,SAAS,wBAAwB,CAC7B,QACA,kCACA,CAAC,SAAW,IAAI,CAAC,aAAa,kBAA8B;QAEhE,SAAS,wBAAwB,CAC7B,QACA,4BACA,CAAC,SAAW,IAAI,CAAC,aAAa,YAAwB;IAE9D;IAEA,OAAO,yBACH,MAAS,EACT,QAAgB,EAChB,QAA6C,EACzC;QACJ,MAAM,UAAU,OAAO,gBAAgB,CAAoB;QAC3D,QAAQ,OAAO,CAAC,CAAC;YACb,OAAO,gBAAgB,CAAC,SAAS,IAAM,SAAS;QACpD;IACJ;IAEA,cAAc,MAAqB,EAAE,MAAyB,EAAE;QAC5D,MAAM,UAA6C;YAC/C,cAAc,IAAM,IAAI,CAAC,OAAO,CAAC;YACjC,eAAe,IAAM,IAAI,CAAC,QAAQ;YAClC,SAAS,IAAM,IAAI,CAAC,MAAM,CAAC;YAC3B,YAAY,IAAM,IAAI,CAAC,SAAS,CAAC;QACrC;QACA,OAAO,CAAC,OAAO;IACnB;IAEA,qBAAqB;QACjB,MAAM,aAAa,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa;QACrD,IAAI,CAAC,YAAY;QACjB,WAAW,MAAM,CAAC,KAAK;IAC3B;IAEA,oBAAoB,GAAW,EAAE;QAC7B,MAAM,YAAY,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAe,WAAW,GAAG,KAAK;QACvE,IAAI,WAAW;YACX,MAAM,aAAa,IAAI,CAAC,cAAc,CAAC;YACvC,IAAI,CAAC,YAAY;YACjB,MAAM,iBAAiB,IAAI,CAAC,kBAAkB;YAC9C,IAAI,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,kBAAkB,CAAC,YAAY;YAExC,IAAI,gBAAgB;YACpB,WAAW,SAAS;QACxB,OACI,IAAI;YACA,MAAM,UAAU,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI;YAClD,OAAO,IAAI,CAAC,SAAS,MAAM,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,WAAW,IAAI,CAAC,UAAU,CAAC;QAC9F,EAAE,OAAO,OAAO;YACZ,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;QACtC;IAER;IAEA,QAAQ,MAAyB,EAAE;QAC/B,0BAA0B;QAC1B,MAAM,MAAM,OAAO,YAAY,CAAC;QAChC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM;QAC1B,IAAI,CAAC,kBAAkB;QACvB,IAAI,CAAC,mBAAmB,CAAC;QACzB,IAAI,CAAC,aAAa,IAAI;IAC1B;IAEA,WAAW;QACP,MAAM,iBAAiB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,GAAG;QAC5D,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,kBAAkB;QACvB,eAAe,MAAM,CAAC,SAAS;QAC/B,IAAI,CAAC,aAAa,IAAI;IAC1B;IAEA,OAAO,MAAyB,EAAE;QAC9B,MAAM,QAAQ,OAAO,OAAO,YAAY,CAAC;QACzC,MAAM,iBAAiB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,gBAAgB;QACrB,IAAI,CAAC,kBAAkB;QACvB,eAAe,MAAM,CAAC,SAAS;QAC/B,IAAI,CAAC,aAAa,GAAG;IACzB;IAEA,UAAU,MAAyB,EAAE;QACjC,OAAO,IAAI,EAAE;QACb,IAAI,CAAC,kBAAkB;IAC3B;IAEA,WAAW,IAAqB,EAAE,KAAkB,EAAQ;QACxD,MAAM,qBAAqB,KAAK,YAAY,CAAC;QAC7C,IAAI,CAAC,oBAAoB;QACzB,MAAM,cAAc;QACpB,MAAM,WAAW,IAAI,SAAS;QAC9B,MAAM,MAAM,KAAK,MAAM;QAEvB,CAAA,GAAA,qBAAY,AAAD,EAAE;YACT,YAAY;YACZ,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE;YACtD,SAAS;QACb;IACJ;IAEA,eAAe,GAAW,EAAiC;QACvD,MAAM,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAS,KAAK,GAAG,KAAK;QAC5D,OAAO,YAAY;IACvB;IAEA,eAAqB;QACjB,MAAM,kBAAkB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAS,CAAC,KAAK,MAAM,CAAC,IAAI;QACtE,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,aAAa,GAAG;QACrB,IAAI,CAAC,cAAc,CAAC;IACxB;IAEA,OAAO,aACH,OAA8D,EAC7D;QACD,MAAM,EACF,GAAG,EACH,YAAY,WAAW,EACvB,iBAAiB,qEAAqE,EACtF,iBAAiB,kBAAkB,EACnC,OAAO,EACP,YAAY,KAAK,EACjB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EACrB,GAAG;QAEJ,MAAM,SAAS,CAAA,GAAA,wBAAM,AAAD,EAAK,CAAC;YACtB,EAAE,YAAY,CAAC;qBACN,EAAE,IAAI,QAAQ,EAAE,UAAU;;;mCAGZ,EAAE,eAAe;;;oCAGhB,EAAE,eAAe;0CACX,EAAE,WAAW;oCACnB,EAAE,aAAa;mCAChB,EAAE,mBAAmB;;;;8DAIM,EAAE,kBAAkB;;uEAEX,EAAE,mBAAmB;;;;8DAI9B,EAAE,kBAAkB;;uEAEX,EAAE,mBAAmB;;;;;sBAKtE,EAAE,IAAI;gBACZ,CAAC,GAAG,CAAC;qBACA,EAAE,IAAI,QAAQ,EAAE,UAAU;;;mCAGZ,EAAE,eAAe;;;oCAGhB,EAAE,eAAe;4BACzB,EAAE,QAAQ;;sBAEhB,EAAE,IAAI;gBACZ,CAAC,CAAC;QACV,CAAC;QACD,SAAS,IAAI,CAAC,qBAAqB,CAAC,aAAa;QACjD,SAAS,wBAAwB,CAC7B,QACA,0BACA,IAAM,SAAS,KAAK,CAAC;QAEzB,OAAO;IACX;IAEA,OAAO,KAA4B,OAAU,EAAE,UAAU,KAAK,EAAE;QAC5D,IAAI,mBAAmB,mBACnB,UAAU,QAAQ,IAAI,KAAK,QAAQ,SAAS;aAE5C,QAAQ,SAAS,CAAC,GAAG,CAAC;IAE9B;IAEA,OAAO,MAA6B,OAAU,EAAE;QAC5C,IAAI,mBAAmB,mBACnB,QAAQ,KAAK;aACV;YACH,QAAQ,SAAS,CAAC,MAAM,CAAC;YACzB,QAAQ,aAAa,CAAC,IAAI,MAAM;QACpC;IACJ;IAEA,OAAO,qBAAqB,OAA0B,EAAE,KAAiB,EAAE;QACvE;;;;;SAKC,GACD,IACI,MAAM,OAAO,KAAK,KACf,MAAM,OAAO,KAAK,KACjB,CAAA,MAAM,MAAM,YAAY,qBAAqB,MAAM,MAAM,YAAY,iBAAgB,GAC3F;QACF,MAAM,mBAAmB,QAAQ,qBAAqB;QACtD,IACI,MAAM,OAAO,GAAG,iBAAiB,IAAI,IAClC,MAAM,OAAO,GAAG,iBAAiB,KAAK,IACtC,MAAM,OAAO,GAAG,iBAAiB,GAAG,IACpC,MAAM,OAAO,GAAG,iBAAiB,MAAM,EAE1C,QAAQ,KAAK;IAErB;IAEA,gBAAuB;QACnB,IAAI,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG;IAEhC;IAEA,mBAAmB,MAAyB,EAAE,GAAW,EAAE;QACvD,CAAA,GAAA,qBAAY,AAAD,EAAE;YACT,YAAY;YACZ,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE;QAC1D;IACJ;IAEA,sBAAsB,UAA6B,EAAE,QAAoB,EAAE;QACvE,MAAM,cAAc,WAAW,aAAa,CAAC;QAC7C,YAAa,SAAS,GAAG,SAAS,UAAU;QAC5C,WAAW,SAAS;QACpB,IAAI,CAAC,kBAAkB,CAAC;IAC5B;AACJ;kBA3ZqB;;;;;ACxCrB;;AAoBe,MAAM,kBAAkB,CAAA,GAAA,yBAAS,AAAD;IAC3C,aAAc;QACV,KAAK;IACT;IAEA,kBAAkB;QACd,OAAO;YACH,OAAO;YACP,WAAW;gBACP,UAAU;oBACN,aAAa,IAAI,CAAC,aAAa;oBAC/B,UAAU,IAAI,CAAC,cAAc;gBACjC;YACJ;QACJ;IACJ;IAEA,gBAAgB;QACZ,MAAM,cAAc,IAAI,CAAC,aAAa,CAAc;QACpD,MAAM,UAAU,IAAI,CAAC,aAAa,CAAc;QAChD,MAAM,MAAM,IAAI,CAAC,aAAa,CAAc;QAC5C,MAAM,WAAW,IAAI,CAAC,aAAa,CAAc;QACjD,MAAM,WAAW,IAAI,CAAC,aAAa,CAAc;QACjD,OAAO;YACH,IAAI,IAAI,CAAC,QAAQ,CAAE,SAAS;YAC5B,aAAa,cAAc,YAAY,SAAS,GAAG;YACnD,SAAS,UAAU,QAAQ,SAAS,GAAG;YACvC,KAAK,MAAM,IAAI,SAAS,GAAG;YAC3B,UAAU,WAAW,SAAS,SAAS,GAAG;YAC1C,UAAU,WAAW,SAAS,SAAS,GAAG;QAC9C;IACJ;IAEA,iBAAiB;QACb,MAAM,OAAsB,EAAE;QAC9B,MAAM,QAAQ,IAAI,CAAC,gBAAgB,CAAc;QACjD,MAAM,IAAI,CAAC,OAAO,OAAO,CAAC,CAAC;YACvB,MAAM,KAAK,KAAK,aAAa,CAAc;YAC3C,MAAM,OAAO,KAAK,aAAa,CAAc;YAC7C,MAAM,QAAQ,KAAK,aAAa,CAAc;YAC9C,MAAM,WAAW,KAAK,aAAa,CAAc;YACjD,MAAM,QAAQ,KAAK,aAAa,CAAc;YAC9C,MAAM,WAAW,KAAK,aAAa,CAAc;YACjD,MAAM,WAAW,KAAK,aAAa,CAAc;YACjD,KAAK,IAAI,CAAC;gBACN,IAAI,KAAK,GAAG,SAAS,GAAG;gBACxB,MAAM,OAAO,KAAK,SAAS,GAAG;gBAC9B,OAAO,QAAQ,MAAM,SAAS,GAAG;gBACjC,UAAU,WAAW,SAAS,SAAS,GAAG;gBAC1C,OAAO,QAAQ,MAAM,SAAS,GAAG;gBACjC,UAAU,WAAW,SAAS,SAAS,GAAG;gBAC1C,UAAU,WAAW,SAAS,SAAS,GAAG;YAC9C;QACJ;QACA,OAAO;IACX;AACJ;kBAxDqB;;;;;ACpBrB;;AACA;AAoBe,MAAM,kBAAkB,CAAA,GAAA,sCAAsB,AAAD;IAQxD,aAAc;QACV,KAAK;QAEL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB;QAC5D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,8BAA8B;QACjE,IAAI,CAAC,wBAAwB,GACzB,IAAI,CAAC,YAAY,CAAC,yCACf;QAEP,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,wCAAwC;QACxF,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,CAAC,qBAAqB,EAAE,aAAa,2BAA2B;QAC9F,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B;IAChF;IAEA,oBAA0B;QACtB,IAAI,CAAC,mBAAmB;QAExB,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB;QAErD,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,eAAe;QAElD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,SAAS,EAAE;QACzC,MAAM,OAAO,IAAI,CAAC,eAAe;QACjC,QAAQ,OAAO,SAAS,CAAC,IAAI,CAAC;IAClC;IAEA,sBAAsB;QAClB,MAAM,mBAAmB,SAAS,aAAa,CAAC,IAAI,CAAC,wBAAwB;QAC7E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,aAAa,IAAI;QAE5D,MAAM,cAAc,iBAAiB,gBAAgB,CAAc;QACnE,MAAM,eAAe,iBAAiB,gBAAgB,CAAc;QACpE,MAAM,iBAAiB,iBAAiB,gBAAgB,CAAc;QACtE,MAAM,eAAe,iBAAiB,gBAAgB,CAAc;QAEpE,MAAM,cAAc,MAAM,IAAI,CAAC;eAAI;eAAgB;eAAiB;eAAmB;SAAa;QAEpG,MAAM,QAA0C;YAC5C,MAAM,CAAA,GAAA,gCAAgB,AAAD,EAAE,OAAO;YAC9B,OAAO,CAAA,GAAA,gCAAgB,AAAD,EAAE,KAAK;YAC7B,SAAS,CAAA,GAAA,gCAAgB,AAAD,EAAE,OAAO;YACjC,OAAO,CAAA,GAAA,gCAAgB,AAAD,EAAE,IAAI;QAChC;QAEA,YAAY,OAAO,CAAC,CAAC;YACjB,MAAM,OAAO,KAAK,CAAC,KAAK,SAAS,CAAC;YAClC,MAAM,YAAY,MAAM,IAAI,CAAC,KAAK,UAAU,EAAE,cAAc,EAAE;YAC9D,MAAM,UAAU,UAAU,IAAI,CAAC,CAAC,OAAS,gBAAgB,OAAO,eAAe;YAC/E,MAAM,OAAO,KAAK,aAAa,CAAC,sBAAsB,eAAe;YACrE,MAAM,WAAW,KAAK,aAAa,CAAC,0BAA0B,eAAe;YAC7E,MAAM,OAAO,OAAO,KAAK,aAAa,CAAC,sBAAsB,gBAAgB;YAC7E,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,SAAS,EAAE,KAAK,KAAK,EAAE,SAAS,CAAC,CAAC;YAE7E,CAAA,GAAA,gCAAgB,AAAD,EAAE,MAAM,SAAS,MAAM;gBAAE;YAAe;QAC3D;QACA,iBAAiB,MAAM;IAC3B;IAEA,qBAAqB;QACjB,WAAW;YACP,IAAI,CAAC,qBAAqB,CAAE,MAAM,GAAG;QACzC,GAAG,IAAI,CAAC,WAAW;IACvB;IAEA,kBAAkB;QACd,OAAO;YACH,OAAO;YACP,WAAW;gBACP,UAAU;oBACN,aAAa,IAAI,CAAC,aAAa;oBAC/B,UAAU,IAAI,CAAC,cAAc;gBACjC;YACJ;QACJ;IACJ;IAEA,gBAAgB;QACZ,MAAM,cAAc,IAAI,CAAC,aAAa,CAAc;QACpD,MAAM,UAAU,IAAI,CAAC,aAAa,CAAc;QAChD,MAAM,MAAM,IAAI,CAAC,aAAa,CAAc;QAC5C,MAAM,WAAW,IAAI,CAAC,aAAa,CAAc;QACjD,OAAO;YACH,IAAI,IAAI,CAAC,QAAQ,CAAE,SAAS;YAC5B,aAAa,cAAc,YAAY,SAAS,GAAG;YACnD,SAAS,UAAU,QAAQ,SAAS,GAAG;YACvC,KAAK,MAAM,IAAI,SAAS,GAAG;YAC3B,UAAU,WAAW,SAAS,SAAS,GAAG;QAC9C;IACJ;IAEA,iBAAiB;QACb,MAAM,OAAsB,EAAE;QAC9B,MAAM,QAAQ,IAAI,CAAC,gBAAgB,CAAc;QACjD,MAAM,IAAI,CAAC,OAAO,OAAO,CAAC,CAAC;YACvB,MAAM,KAAK,KAAK,aAAa,CAAc;YAC3C,MAAM,OAAO,KAAK,aAAa,CAAc;YAC7C,MAAM,QAAQ,KAAK,aAAa,CAAc;YAC9C,MAAM,WAAW,KAAK,aAAa,CAAc;YACjD,MAAM,QAAQ,KAAK,aAAa,CAAc;YAC9C,MAAM,WAAW,KAAK,aAAa,CAAc;YACjD,MAAM,WAAW,KAAK,aAAa,CAAc;YACjD,KAAK,IAAI,CAAC;gBACN,IAAI,KAAK,GAAG,SAAS,GAAG;gBACxB,MAAM,OAAO,KAAK,SAAS,GAAG;gBAC9B,OAAO,QAAQ,MAAM,SAAS,GAAG;gBACjC,UAAU,WAAW,SAAS,SAAS,GAAG;gBAC1C,OAAO,QAAQ,MAAM,SAAS,GAAG;gBACjC,UAAU,WAAW,SAAS,SAAS,GAAG;gBAC1C,UAAU,WAAW,SAAS,SAAS,GAAG;YAC9C;QACJ;QACA,OAAO;IACX;IAEA,kBAAkB;QACd,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAE,qBAAqB;QACjE,MAAM,SAAS,OAAO,IAAI,CAAC,qBAAqB,EAAE,aAAa,kCAAkC;QACjG,MAAM,gBAAgB,IAAI,CAAC,aAAa,CAAC;QACzC,MAAM,WAAW,eAAe;QAChC,MAAM,cAAc,UAAU,OAAO;QACrC,MAAM,UAAU,MAAM,cAAc;QACpC,WAAW;YACP,OAAO,QAAQ,CAAC;gBAAE,KAAK;gBAAS,UAAU;YAAS;QACvD,GAAG;IACP;AACJ;kBArIqB;;;;;ACrBrB;;AACA;AAEe,MAAM,sBAAsB,CAAA,GAAA,6BAAa,AAAD;IAInD,aAAc;QACV,KAAK;QAEL,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,+BAA+B;IAC3E;IAEA,oBAAoB;QAChB,KAAK,CAAC;QAEN,IAAI,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,qBAAqB;IAElC;IAEA,wBAAwB;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAExB,MAAM,iBAAiB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;QACpD,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAe;IAC3F;IAEA,iBAAiB;QACb,IAAI,IAAI,CAAC,YAAY,EACjB,aAAa,IAAI,CAAC,YAAY;QAGlC,IAAI,CAAC,YAAY,GAAG,OAAO,UAAU,CAAC;YAClC,MAAM,OAAO;gBACT,QAAQ,IAAI,CAAC,YAAY,CAAE,KAAK;YACpC;YACA,CAAA,GAAA,qBAAY,AAAD,EAAE;gBACT,YAAY,IAAI,CAAC,cAAc;gBAC/B,gBAAgB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;gBAC7C,SAAS;YACb;QACJ,GAAG;IACP;IAEA,iBAAiB;QACb,OAAO,IAAI;IACf;IAEA;;;;;KAKC,GACD,qBAAqB;QACjB,SAAS,gBAAgB,CAAC,oBAAoB;YAC1C,IAAI,CAAC,sBAAsB;YAC3B,IAAI,CAAC,4BAA4B;YACjC,IAAI,CAAC,0BAA0B;YAC/B,IAAI,CAAC,mCAAmC;YACxC,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,wBAAwB;YAC7B,IAAI,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,qBAAqB;QAElC;IACJ;AACJ;kBAjEqB;;;;;ACHrB;;;UAKK;;;GAAA,eAAA;AAKU,MAAM,sBAAsB,CAAA,GAAA,sCAAsB,AAAD;IAkB5D,aAAc;QACV,KAAK;QACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAChC;QACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,6BAChC;QACP,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,0CAC3C;QACP,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,0CAC3C;QACP,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,YAAY,CAAC,6CAC9C;QACP,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,oCACtC;QACP,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAkB,sBACjD;QACP,IAAI,CAAC,yBAAyB,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,0CACxC;QACP,IAAI,CAAC,mBAAmB,GAAG;QAC3B,IAAI,CAAC,mBAAmB,GAAG;QAC3B,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,CAAC,YAAY,CAAC,oCAAoC,KAAK,OACxF;QACP,IAAI,CAAC,eAAe,GAAG,KAAO;IAClC;IAEA,oBAAoB;QAChB,IAAI,IAAI,CAAC,aAAa,MAAM,IAAI,CAAC,yBAAyB,EAAE;YACxD,IAAI,CAAC,kBAAkB;YACvB;QACJ;QACA,IAAI,CAAC,sBAAsB;QAC3B,IAAI,CAAC,4BAA4B;QACjC,IAAI,CAAC,0BAA0B;QAC/B,IAAI,CAAC,mCAAmC;QACxC,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,wBAAwB;IACjC;IAEA;;;;;KAKC,GACD,qBAAqB;QACjB,SAAS,gBAAgB,CAAC,oBAAoB;YAC1C,IAAI,CAAC,sBAAsB;YAC3B,IAAI,CAAC,4BAA4B;YACjC,IAAI,CAAC,0BAA0B;YAC/B,IAAI,CAAC,mCAAmC;YACxC,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,wBAAwB;QACjC;IACJ;IAEA,mBAAmB;IACnB,yBAAyB;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa;QAC7F,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;IACxE;IACA,aAAa;IAEb,mBAAmB;IACnB,2BAA2B;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAE9C,eAAe;QACf,IAAI,CAAC,sBAAsB;QAE3B,MAAM,iBAAiB;YAAE,YAAY;YAAM,iBAAiB;gBAAC;aAAW;QAAC;QAEzE,MAAM,0BAA0B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI;QAErE,MAAM,WAAW,IAAI,iBAAiB;QACtC,SAAS,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE;IACxC;IAEA,yBAAyB;QACrB,MAAM,mBAAmB,IAAI,CAAC,YAAY,CAAE,YAAY,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,2BAA2B;IACrD;IACA,aAAa;IAEb,gBAAgB;IAChB,+BAA+B;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,EAAE;QAEpD,MAAM,oBAAoB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;QAEvD,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAkB;IAC9F;IAEA,6BAA6B;QACzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QACxB,MAAM,sBAAsB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;QACvD,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAc,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAoB;QACjG,MAAM,oBAAoB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;QACrD,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAc,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAkB;IACnG;IAEA,aAAa,UAAsB,EAAE;QACjC,IACI,CAAC,IAAI,CAAC,YAAY,IACd,CAAE,CAAA,IAAI,CAAC,YAAY,YAAY,gBAAe,KAC/C,CAAE,CAAA,IAAI,CAAC,YAAY,YAAY,mBAAkB,GACtD,MAAM,IAAI,MAAM;QAElB,IAAI,CAAC,SAAS,CAAC,MAAM,CACjB,wBACA,AAAC,2BAAqC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ;IAEzE;IAEA,iBAAiB;QACb,IACI,CAAC,IAAI,CAAC,YAAY,IACd,CAAE,CAAA,IAAI,CAAC,YAAY,YAAY,gBAAe,KAC/C,CAAE,CAAA,IAAI,CAAC,YAAY,YAAY,mBAAkB,GACtD,MAAM,IAAI,MAAM;QAElB,IAAI,IAAI,CAAC,eAAe,EAAE;QAC1B,IAAI,CAAC,YAAY,CAAC,KAAK;QACvB,MAAM,mBAAmB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM;QACvD,MAAM,gBAAgB,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK;QACjD,IAAI,eACA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ;QAE3C,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,kBAAkB;QACtD,IAAI,eACA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ;IAE/C;IAEA,sCAAsC;QAClC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAEjD,MAAM,2BAA2B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI;QACrE,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAa,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAyB;QACrG,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAW,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAyB;QACnG,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAc,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAyB;QACtG,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAY,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAyB;IACxG;IAEA,sBAAsB,KAAY,EAAE;QAChC,IACI,CAAC,IAAI,CAAC,YAAY,IACf,CAAE,CAAA,IAAI,CAAC,YAAY,YAAY,gBAAe,GACnD,MAAM,IAAI,MAAM;QAElB,IAAI,MAAM,IAAI,KAAK,eAAe,MAAM,IAAI,KAAK,cAC7C,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG;aAEzB,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG;IAEjC;IACA,aAAa;IAEb,mBAAmB;IACnB,oBAAoB;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,MAAM;QAExC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa;QAErC,IAAI,IAAI,CAAC,aAAa,IAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB;QAGpD,IAAI,CAAC,kCAAkC;QACvC,IAAI,CAAC,mBAAmB;QACxB,IAAI,CAAC,qBAAqB;QAC1B,IAAI,CAAC,mCAAmC;QACxC,IAAI,CAAC,yCAAyC;IAClD;IAEA;;;;KAIC,GACD,eAAe;QACX,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,MAAM;QACxC,MAAM,YAAY,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QAEjD,IAAI,AAAC,cAAc,YAAc,cAAc,UAAW,MAAM,IAAI,MAAM;QAE1E,OAAO;IACX;IAEA;;;;KAIC,GACD,gBAAgB;QACZ,IAAI;QAEJ,IAAI,IAAI,CAAC,YAAY,YAAY,mBAAmB;YAChD,MAAM,iBAAiB,IAAI,CAAC,aAAa,CAAC;YAC1C,MAAM,sBAAsB,gBAAgB,aAAa;YACzD,iBAAiB;QACrB,OACI,iBAAiB,IAAI,CAAC,YAAY,EAAE,UAAU;QAGlD,OAAO;IACX;IAEA;;;KAGC,GACD,wBAAwB;QACpB,oBAAoB;QACpB,MAAM,uBAAuB,IAAI,CAAC,aAAa;QAE/C,IAAI,sBAAsB;YACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB;YAChD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,MAAM;YAExC,IAAI,IAAI,CAAC,aAAa,IAClB,IAAI,CAAC,6BAA6B;YAGtC,IAAI,CAAC,IAAI,CAAC,aAAa,IACnB,IAAI,CAAC,8BAA8B;QAE3C,OAAO;YACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB;YACnD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,MAAM;YACxC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;QACtC;IACJ;IAEA;;;KAGC,GACD,iCAAiC;QAC7B,IAAK,IAAI,CAAC,mBAAmB,KAAK,KAAK,IAAI,CAAC,mBAAmB,KAAK,GAAI;QACxE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAC3D,CAAC,EAAE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG;QACnE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAC5D,CAAC,EAAE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG;QACnE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAC,aAAa,GAAG;IAC7C;IAEA;;;KAGC,GACD,gCAAgC;QAC5B,IAAI,CAAC,YAAY,CAAE,KAAK,CAAC,aAAa,GAAG;QACzC,MAAM,wBAAwB,IAAI,CAAC,YAAY,CAAE,qBAAqB,GAAG,KAAK;QAC9E,MAAM,qBAAqB,OAAO,gBAAgB,CAAC,IAAI,CAAC,YAAY;QACpE,MAAM,mBAAmB,WAAW,mBAAmB,WAAW;QAClE,MAAM,oBAAoB,WAAW,mBAAmB,YAAY;QACpE,MAAM,aAAc,wBAAwB,mBAAmB;QAE/D,MAAM,mBAAmB,IAAI,CAAC,qBAAqB,GAAG,KAAK;QAE3D,MAAM,qBAAqB,OAAO,gBAAgB,CAAC,IAAI,CAAC,YAAY;QACpE,MAAM,oBAAoB,WAAW,mBAAmB,YAAY;QAEpE,MAAM,aAAa,AAAC,IAAI,CAAC,YAAY,IAAK,IAAI,CAAC,YAAY,OAAO,WAC5D,IAAI,CAAC,YAAY,CAAC,qBAAqB,GAAG,KAAK,GAAG;QAExD,MAAM,UAAU,KAAK,KAAK,CAAC,mBAAmB,aAAa,aAAa;QAExE,IAAI,CAAC,YAAY,CAAE,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;IACzD;IAEA;;;;KAIC,GACD,sBAAsB;QAClB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QACxB,IAAI,IAAI,CAAC,YAAY,YAAY,mBAAmB;QAEpD;kDAC0C,GAC1C,MAAM,gBAAgB,IAAI,CAAC,aAAa;QACxC,MAAM,YAAY,IAAI,CAAC,YAAY;QAEnC,IAAI,CAAC,iBAAkB,cAAc,UACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW;aACrD,IAAI,iBAAkB,cAAc,UACvC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW;IAEhE;IAEA;;;;KAIC,GACD,gBAAgB;QACZ,IAAI,CAAE,CAAA,IAAI,CAAC,YAAY,YAAY,gBAAe,GAAI,OAAO;QAE7D,OAAQ,IAAI,CAAC,YAAY,IAAK,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK;IAC7D;IAEA;;KAEC,GACD,sCAAsC;QAClC,MAAM,iBAAiB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI;QAC3D,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,YAAY;YAAG,QAAQ;QAAe;IAC5F;IAEA;;;KAGC,GACD,4CAA4C;QACxC,IAAI,CAAE,CAAA,IAAI,CAAC,YAAY,YAAY,iBAAgB,GAAI;QAEvD,MAAM,iBAAiB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI;QAElE,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAW,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAe;QACzF,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAY,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ;QAAe;IAC9F;IAEA;;;;KAIC,GACD,6BAA6B,KAAY,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG;QAEjB,IAAI,SAAS,WACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B;aAEnD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B;IAE9D;IAEA;;;KAGC,GACD,qCAAqC;QACjC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,MAAM;QAExC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI;QAC/D,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAiB,SAAS,IAAI,CAAC,YAAY;YAAE,QAAQ,IAAI,CAAC,eAAe;QAAC;IACzG;IAEA,4BAA4B;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;QAC3C,IAAI,CAAC,YAAY,CAAE,mBAAmB,CAAC,iBAAiB,IAAI,CAAC,eAAe;IAChF;AAEJ;kBA1XqB;;;;;ACVrB;;AACA;;AACA;AAEe,MAAM,gBAAgB,CAAA,GAAA,sCAAsB,AAAD;IAItD,aAAc;QACV,KAAK;QACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,yBAAyB;QACxD,IAAI,CAAC,GAAG,GAAG,SAAS,aAAa,CAAC,gCAAgC,aAAa;IACnF;IAEA,oBAA0B;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,MAAM;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,MAAM;QAC3B,MAAM,OAAO;YAAE,MAAM,IAAI,CAAC,KAAK;QAAC;QAEhC,CAAA,GAAA,qBAAY,AAAD,EAAE;YACT,YAAY,IAAI,CAAC,GAAG;YACpB,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;YAC1C,SAAS;QACb;IACJ;IAEA,YAAY,QAAoB,EAAQ;QACpC,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,SAAS,UAAU,EAAE;QAC/C,MAAM,QAAQ,CAAA,GAAA,wBAAM,AAAD,EAAE,SAAS,UAAU;QACxC,IAAI,CAAC,qBAAqB,CACtB,aACA;IAER;AACJ;kBA9BqB;;;;;ACJrB;;AACA;AACA;AACA;;;UA0BK;;;GAAA,cAAA;AAKU,MAAM,wBAAwB,CAAA,GAAA,sCAAsB,AAAD;IAgB9D,aAAc;QACV,KAAK;aAfT,iBAA+B,EAAE;QAiB7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;QAC1C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,qCAAqC;QACnF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,oCAAoC;QAChF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,oCAAoC;QAChF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,wCAAwC;QACxF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,6BAA6B;QAC1E,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,gCAAgC;QAChF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,YAAY,CAAC,wCAAwC;QACxF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,wCAAwC;QAC1F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,iCAAiC;QAC3E,mEAAmE;QACnE,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,YAAY,CAAC,4CAC5C;IACX;IAEA,oBAA0B;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAChB,IAAI,CAAC,cAAc,GAAG,EAAE;QACxB,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,mBAAmB;QACxB,IAAI,CAAC,sBAAsB;QAC3B,IAAI,CAAC,wBAAwB;QAC7B,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,+BAA+B;IACrE;IAEA,oBAAoB;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG;IAC3B;IAEA,sBAA4B;QACxB,MAAM,eAAyC,IAAI,CAAC,gBAAgB,CAAC;QACrE,MAAM,kBAAkB,MAAM,IAAI,CAAC;QACnC,MAAM,uBAAuB,gBAAgB,MAAM,CAAC,CAAC,UAAY,CAAC,QAAQ,QAAQ;QAClF,qBAAqB,OAAO,CAAC,CAAC;YAC1B,MAAM,UAAU,QAAQ,OAAO,CAAC,IAAI,CAAC,oBAAoB;YACzD,WACO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBACxB;gBACA;gBACA,UAAU,gBAAgB,wBAAwB,CAAC;YACvD;QACR;IACJ;IAEA,yBAAyB;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAChB,MAAM,kBAAkB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;QACnD,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAU,SAAS,IAAI,CAAC,IAAI;YAAE,QAAQ;QAAgB;IACrF;IAEA,2BAA2B;QACvB,IAAI,CAAE,CAAA,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,qBAAqB,AAAD,GAAI;QAE5F,MAAM,qBAAqB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI;QAC1D,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,kBAAkB;YAAE,QAAQ;QAAmB;QACjG,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO;YAAS,SAAS,IAAI,CAAC,qBAAqB;YAAE,QAAQ;QAAmB;IACxG;IAEA,kCAAkC;QAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM,eAAe,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE;YACnD,IAAI,CAAC,YAAY,CAAC;gBAAE,OAAO;gBAAQ,SAAS,KAAK,OAAO;gBAAE,QAAQ;YAAa;YAC/E,IAAI,CAAC,YAAY,CAAC;gBAAE,OAAO;gBAAS,SAAS,KAAK,OAAO;gBAAE,QAAQ;YAAa;QACpF;IACJ;IAEA,MAAM,oBAAsC;QACxC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO;QAClC,OAAO,IAAI,QAAQ,CAAC;YAChB,WAAW,KAAK,CAAC;gBACb,MAAM,UAAU,IAAI,CAAC,eAAe,CAAE,YAAY,CAAC;gBACnD,IAAI,CAAC,SAAS,OAAO,QAAQ;gBAC7B,MAAM,QAAQ,MAAM,WAAW,OAAO,CAAC,SAAS;oBAAE,QAAQ;gBAAS;gBACnE,IAAI,CAAC,OAAO,OAAO,QAAQ;gBAC3B,IAAI,CAAC,eAAe,CAAE,KAAK,GAAG;gBAC9B,QAAQ;YACZ;QACJ;IACJ;IAEA,MAAM,kBAAoC;QACtC,MAAM,iBAA4B,EAAE;QACpC,MAAM,gBAAgB,IAAI,CAAC,gBAAgB,CAAC;QAC5C,IAAI,cAAc,MAAM,KAAK,GAAG,OAAO;QAEvC,MAAM,cAAc,MAAM,IAAI,CAAC,eAAe,GAAG,CAAC,OAAO;YACrD,MAAM,QAAQ,QAAQ,aAAa,CAAC;YACpC,IAAI,CAAC,OAAO,OAAO;YAEnB,MAAM,UAAU,MAAM,CAAA,GAAA,6BAAa,AAAD,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI;YAC5D,MAAM,iBAAiB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAS,KAAK,OAAO,KAAK;YAC3E,IAAI,CAAC,WAAW,gBAAgB;gBAC5B,IAAI,CAAC,aAAa,CAAC;gBACnB,IAAI,CAAC,oBAAoB,CACrB,gBACA,CAAA,GAAA,6BAAiB,AAAD,EAAE,YAAY;YAEtC;YACA,OAAO;QACX;QACA,MAAM,UAAU,MAAM,QAAQ,GAAG,CAAC;QAClC,eAAe,IAAI,IAAI;QACvB,OAAO,eAAe,KAAK,CAAC,CAAC,OAAS;IAC1C;IAEA,MAAM,gBAAkC;QACpC,MAAM,iBAA4B,EAAE;QACpC,MAAM,gBAAgB,IAAI,CAAC,gBAAgB,CAAC;QAC5C,IAAI,cAAc,MAAM,KAAK,GAAG,OAAO;QAEvC,MAAM,cAAc,MAAM,IAAI,CAAC,eAAe,GAAG,CAAC,OAAO;YACrD,MAAM,SAAS,QAAQ,YAAY,CAAC;YACpC,MAAM,QAAQ,QAAQ,aAAa,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,UAAU,MAAM,KAAK,KAAK,IAAI,OAAO;YAEpD,MAAM,WAAW,MAAM,gBAAgB,aAAa,CAAqB,QAAQ,MAAM,KAAK;YAC5F,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,UAAU;YACvC,MAAM,iBAAiB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAS,KAAK,OAAO,KAAK;YAC3E,IAAI,CAAC,WAAW,gBAAgB;gBAC5B,IAAI,CAAC,aAAa,CAAC;gBACnB,IAAI,CAAC,oBAAoB,CACrB,gBACA,CAAA,GAAA,mCAAuB,AAAD,EAAE,WAAW;YAE3C;YACA,OAAO;QACX;QACA,MAAM,UAAU,MAAM,QAAQ,GAAG,CAAC;QAClC,eAAe,IAAI,IAAI;QACvB,OAAO,eAAe,KAAK,CAAC,CAAC,OAAS;IAC1C;IAEA,aAAa,cAAiB,GAAW,EAAE,KAAa,EAA0B;QAC9E,OAAO,IAAI,QAAQ,CAAC;YAChB,CAAA,GAAA,qBAAY,AAAD,EAAK;gBACZ,YAAY;gBACZ,SAAS;oBACL;gBACJ;gBACA,gBAAgB,CAAC;oBACb,QAAQ;gBACZ;YACJ;QACJ;IACJ;IAEA,MAAM,aAAa,KAAY,EAAE;QAC7B,MAAM,cAAc;QACpB,MAAM,cAAc,MAAM,IAAI,CAAC,WAAW;QAC1C,IAAI,CAAC,aAAa;QAClB,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,MAAM,gBAAgB,SAAS,aAAa,CAAc,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC/F,eAAe,cAAc,WAAW;YACxC;QACJ;QACA,IAAI,CAAC,IAAI,EAAE;IACf;IAEA,MAAM,cAAc;QAChB,MAAM,IAAI,CAAC,cAAc;QACzB,MAAM,iBAAiB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,OAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK;QACtF,IAAI,CAAC,gBAAgB,OAAO;QAC5B,MAAM,UAAU,MAAM,IAAI,CAAC,aAAa,MAAM,MAAM,IAAI,CAAC,eAAe;QACxE,MAAM,mBAAmB,MAAM,IAAI,CAAC,iBAAiB;QAErD,OACI,AAAC,CAAA,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,yBAAyB,EAAC,KAC5D,IAAI,CAAC,qBAAqB,MAC1B,WACA;IAEX;IAEA,MAAgB,iBAAgC;QAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC;QACvB;QAEA,IAAI,CAAC,sBAAsB,GAAG;IAClC;IAEA,cAAc,IAAgB,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC;QACnB,IAAI,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,EAC5B,IAAI,CAAC,WAAW,CAAC;IAEzB;IAEA,YAAY,IAAgB,EAAE;QAC1B,MAAM,eAAe,gBAAgB,wBAAwB,CAAC,KAAK,OAAO;QAC1E,MAAM,iBAAiB,aAAa,IAAI,CAAC,CAAC,WAAa,SAAS,KAAK;QACrE,MAAM,UAAU,iBACV,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAY,QAAQ,GAAG,KAAK,eAAe,GAAG,GAAG,SAAS,KAC9E,KAAK,OAAO,CAAC,iBAAiB;QAEpC,IAAI,CAAC,oBAAoB,CAAC,MAAM;IACpC;IAEA,qBAAqB,IAAgB,EAAE,OAAe,EAAE;QACpD,MAAM,cAAc,SAAS,aAAa,CAAC;QAC3C,YAAY,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB;QACjD,YAAY,WAAW,GAAG,gBAAgB,mBAAmB,CAAC,SAAS,KAAK,OAAO;QACnF,KAAK,cAAc,GAAG;QACtB,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB;QAClD,KAAK,OAAO,CAAC,qBAAqB,CAAC,aAAa;QAChD,IAAI,IAAI,CAAC,sBAAsB,EAAE;QACjC,IAAI,CAAC,sBAAsB,GAAG,KAAK,cAAc;QACjD,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC;YAAE,UAAU;YAAU,OAAO;QAAS;IACrF;IAEA,cAAc,IAAgB,EAAE;QAC5B,MAAM,cAAc,KAAK,cAAc;QACvC,IAAI,CAAC,aAAa;QAClB,YAAY,MAAM;QAClB,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB;IACzD;IAEA,OAAO,yBAAyB,OAAqB,EAAE;QACnD,MAAM,EAAE,QAAQ,EAAE,GAAG;QACrB,MAAM,eAA+B,EAAE;QACvC,8DAA8D;QAC9D,IAAK,MAAM,OAAO,SAAU;YACxB,MAAM,eAA6B;gBAC/B,KAAK;gBACL,OAAO,QAAQ,QAAQ,CAAC,IAA2B;YACvD;YACA,aAAa,IAAI,CAAC;QACtB;QACA,OAAO;IACX;IAEA,OAAO,yBAAyB,OAAqB,EAAsB;QACvE,MAAM,OAA2B,EAAE;QACnC,MAAM,oBAAoB;QAC1B,MAAM,gBAAgB,QAAQ,iBAAiB,GAAG,MAAM,CAAC,CAAC,OAAS,KAAK,UAAU,CAAC;QACnF,cAAc,OAAO,CAAC,CAAC;YACnB,MAAM,eAAe,IAChB,OAAO,CAAC,mBAAmB,IAC3B,OAAO,CAAC,OAAO,CAAC,IAAM,CAAC,CAAC,EAAE,CAAC,WAAW;YAC3C,MAAM,QAAQ,QAAQ,YAAY,CAAC;YACnC,SACO,KAAK,IAAI,CAAC;gBACT,KAAK;gBACL;YACJ;QACR;QAEA,IAAI,GAAA,6BAAiB,EAAE;YACnB,MAAM,WAAW,CAAA,GAAA,6BAAiB,AAAD;YACjC,OAAO,OAAO,CAAC,UAAU,OAAO,CAAC,CAAC;gBAC9B,MAAM,CAAC,KAAK,MAAM,GAAG;gBACrB,MAAM,eAAe,KAAK,MAAM,CAAC,CAAC,OAAS,KAAK,GAAG,KAAK;gBACxD,CAAC,aAAa,MAAM,IACb,KAAK,IAAI,CAAC;oBACT,KAAK;oBACL;gBACJ;YACR;QACJ;QAEA,OAAO;IACX;IAEA,OAAO,oBAAoB,KAAa,EAAE,OAAqB,EAAU;QACrE,MAAM,aAAqC;YACvC,eAAe,QAAQ,YAAY,CAAC,gBAAgB;YACpD,eAAe,QAAQ,YAAY,CAAC,gBAAgB;YACpD,YAAY,QAAQ,KAAK,CAAC,MAAM,CAAC,QAAQ,MAAM;YAC/C,UAAU,QAAQ,YAAY,CAAC,WAAW;YAC1C,SAAS,QAAQ,YAAY,CAAC,UAAU;YACxC,SAAS,QAAQ,YAAY,CAAC,UAAU;YACxC,kBAAkB,QAAQ,KAAK;QACnC;QACA,MAAM,KAAK,IAAI,OAAO,OAAO,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM;QACzD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,UAAY,UAAU,CAAC,QAAQ;IAC7D;IAEA,4BAA4B;QACxB,MAAM,WAAW,IAAI,CAAC,mBAAmB;QACzC,OAAO,SAAS,KAAK,CAAC,CAAC,OAAS,KAAK,OAAO,EAAE,UAAU,SAAS,IAAI,CAAC,sBAAsB;IAChG;IAEA,wBAAiC;QAC7B,IAAI;QACJ,MAAM,kBAAkB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAS,KAAK,OAAO,KAAK,IAAI,CAAC,kBAAkB;QACnG,MAAM,qBAAqB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAS,KAAK,OAAO,KAAK,IAAI,CAAC,qBAAqB;QACzG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,OAAO;QACpD,IAAI,gBAAgB,OAAO,CAAC,KAAK,KAAK,mBAAmB,OAAO,CAAC,KAAK,EAAE;YACpE,IAAI,CAAC,aAAa,CAAC;YACnB,IAAI,CAAC,oBAAoB,CACrB,oBACA,CAAA,GAAA,6BAAiB,AAAD,EAAE,mBAAmB;YAEzC,UAAU;QACd,OACI,UAAU;QAEd,OAAO;IACX;IAEA,iBAAiB,KAAY,EAAE;QAC3B,MAAM,SAAS,MAAM,aAAa;QAClC,MAAM,WAAW,IAAI,CAAC,mBAAmB;QAEzC,SAAS,OAAO,CAAC,CAAC;YACd,MAAM,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS,mBAAsB,MAAM;YAEvF,MAAM,cAAc,OAAO,KAAK,CAAC,KAAK,CAAC;YAEvC,IAAI,KAAK,SAAS;gBACd,IAAI,aAAa;oBACb,KAAK,OAAO,EAAE,UAAU,OAAO,IAAI,CAAC,wBAAwB;oBAC5D,KAAK,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,sBAAsB;gBAC3D,OAAO;oBACH,KAAK,OAAO,EAAE,UAAU,OAAO,IAAI,CAAC,sBAAsB;oBAC1D,KAAK,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,wBAAwB;gBAC7D;;YAGJ,IAAI,KAAK,SAAS;gBACd,IAAI,aAAa,WAAW,OAAO,KAAK,CAAC,MAAM,EAAE;oBAC7C,KAAK,OAAO,EAAE,UAAU,OAAO,IAAI,CAAC,wBAAwB;oBAC5D,KAAK,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,sBAAsB;gBAC3D,OAAO;oBACH,KAAK,OAAO,EAAE,UAAU,OAAO,IAAI,CAAC,sBAAsB;oBAC1D,KAAK,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,wBAAwB;gBAC7D;;QAER;IACJ;IAEA,sBAAsB;QAClB,MAAM,0BAA0B,IAAI,CAAC,qBAAqB,EAAE,cAAc;QAC1E,MAAM,sBAAsB,IAAI,CAAC,qBAAqB,EAAE,cAAc;QACtE,MAAM,uBAAuB,IAAI,CAAC,qBAAqB,EAAE,cAAc;QACvE,MAAM,8BAA8B,IAAI,CAAC,qBAAqB,EAAE,cAC5D;QAEJ,MAAM,mBAAmB,yBAAyB,aAAa;QAC/D,MAAM,eAAe,qBAAqB,aAAa;QACvD,MAAM,gBAAgB,sBAAsB,aAAa;QACzD,MAAM,uBAAuB,6BAA6B,aAAa;QACvE,OAAO;YACH;gBACI,SAAS;gBACT,SAAS;gBACT,SAAS;YACb;YACA;gBACI,SAAS;gBACT,SAAS;gBACT,SAAS;YACb;YACA;gBACI,SAAS;gBACT,SAAS;gBACT,SAAS;YACb;YACA;gBACI,SAAS;gBACT,SAAS;gBACT,SAAS;YACb;SACH;IACL;AACJ;kBAlYqB","sources":["webportal/config/layout/themes/project/ts/verification.ts","webportal/config/layout/themes/tk/ts/utilities/tk.module.factory.ts","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","webportal/config/layout/themes/tk/ts/components/tk.header.ts","webportal/config/layout/themes/tk/ts/utilities/tk.custom.element.factory.ts","webportal/config/layout/themes/tk/ts/components/tk.navigation.sidebar.ts","webportal/config/layout/themes/tk/ts/utilities/tk.render.ts","webportal/config/layout/themes/tk/ts/utilities/tk.fetch.ts","webportal/config/layout/themes/tk/ts/utilities/tk.notification.ts","webportal/config/layout/themes/tk/ts/utilities/tk.messages.ts","webportal/config/layout/themes/tk/ts/basiscs/tk.viewport.ts","webportal/config/layout/themes/tk/ts/controls/tk.search.ts","webportal/config/layout/themes/tk/ts/utilities/tk.shape.detector.ts","webportal/config/layout/themes/tk/ts/controls/tk.form.zipcity.ts","webportal/config/layout/themes/tk/ts/controls/tk.tabs.tab.ts","webportal/config/layout/themes/tk/ts/components/tk.minibasket.ts","webportal/config/layout/themes/tk/ts/controls/tk.tabs.accordion.ts","webportal/config/layout/themes/tk/ts/components/tk.dialog.ts","webportal/config/layout/themes/project/ts/basics/ns.manager.ts","webportal/config/layout/themes/tk/ts/basiscs/tk.manager.ts","webportal/config/layout/themes/project/ts/controls/ns.form.element.ts","webportal/config/layout/themes/tk/ts/controls/tk.form.element.ts","webportal/config/layout/themes/project/ts/components/ns.image.ts","webportal/config/layout/themes/tk/ts/controls/tk.form.validator.ts"],"sourcesContent":["import TKModuleFactory from '@tk/utilities/tk.module.factory';\r\nimport TKHeader from '@tk/components/tk.header';\r\nimport TKNavigationSidebar from '@tk/components/tk.navigation.sidebar';\r\nimport TKViewport from '@tk/basiscs/tk.viewport';\r\nimport TKSearch from '@tk/controls/tk.search';\r\nimport TKFormZipCity from '@tk/controls/tk.form.zipcity';\r\nimport TKTabsTab from '@tk/controls/tk.tabs.tab';\r\nimport TKMinibasket from '@tk/components/tk.minibasket';\r\nimport TKTabsAccordion from '@tk/controls/tk.tabs.accordion';\r\n// NS-53: Compare f�r Phase 1 auskommentiert\r\n// import TKCompareListLink from '@tk/components/tk.compare.list.link';\r\nimport TKDialog from '@tk/components/tk.dialog';\r\nimport TKFormValidator from '@tk/controls/tk.form.validator';\r\nimport NSManager from '@/basics/ns.manager';\r\nimport NSFormElement from '@/controls/ns.form.element';\r\nimport NSImage from '@/components/ns.image';\r\n\r\nimport '@scss/modules/verification.scss';\r\n\r\nexport default class Verification extends TKModuleFactory {\r\n constructor() {\r\n super([\r\n { name: 'tk-manager', constructor: NSManager },\r\n { name: 'tk-viewport', constructor: TKViewport },\r\n { name: 'tk-header', constructor: TKHeader },\r\n { name: 'tk-nav-sidebar', constructor: TKNavigationSidebar },\r\n { name: 'tk-search', constructor: TKSearch },\r\n { name: 'tk-form-zip-city', constructor: TKFormZipCity },\r\n { name: 'tk-form-element', constructor: NSFormElement },\r\n { name: 'tk-form-validator', constructor: TKFormValidator },\r\n { name: 'tk-tabs-tab', constructor: TKTabsTab },\r\n { name: 'tk-minibasket', constructor: TKMinibasket },\r\n { name: 'tk-tabs-accordion', constructor: TKTabsAccordion },\r\n // NS-53: Compare f�r Phase 1 auskommentiert\r\n // { name: 'tk-compare-list-link', constructor: TKCompareListLink },\r\n { name: 'tk-dialog', constructor: TKDialog },\r\n { name: 'ns-image', constructor: NSImage },\r\n ]);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line no-new\r\nnew Verification();\r\n","export default class TKModuleFactory {\r\n customElementList: CustomElementList[];\r\n\r\n constructor(list: CustomElementList[]) {\r\n this.customElementList = list;\r\n this.init();\r\n }\r\n\r\n init(): void {\r\n this.customElementList.forEach((item) => {\r\n !customElements.get(item.name) && customElements.define(item.name, item.constructor);\r\n });\r\n }\r\n}\r\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKHeader extends TKCustomElementFactory {\r\n header?: HTMLElement;\r\n disableScrolldownBreakpoint?: Breakpoint;\r\n minWidthBreakpoint: number;\r\n elementToScrollWith?: HTMLElement;\r\n\r\n private lastScrollPosY: number = 0;\r\n private maxHeightScrollWith: number;\r\n private scrollWay: number = 0;\r\n private scrollDeltaY: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.header = this.querySelector('header') || undefined;\r\n if (!this.header) throw new Error('Header: Header is missing!');\r\n this.disableScrolldownBreakpoint = (\r\n this.getAttribute('data-tk-disable-scrolldown-breakpoint') as Breakpoint\r\n ) || 's';\r\n this.minWidthBreakpoint = window.viewport.breakpoints.get(this.disableScrolldownBreakpoint) || 0;\r\n this.elementToScrollWith = this.querySelector('[data-tk-to-scroll-with]') || undefined;\r\n if (!this.elementToScrollWith) {\r\n throw new Error('Header: Element to scroll with is missing! Use the [data-tk-to-scroll-with] selector.');\r\n }\r\n\r\n this.maxHeightScrollWith = this.getMaxHeight();\r\n this.scrollDeltaY = Number(this.getAttribute('data-tk-scroll-delta-y')) || 1;\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerViewportListener();\r\n window.viewport.clientWidth < this.minWidthBreakpoint && this.registerScrollListener();\r\n }\r\n\r\n registerScrollListener(): void {\r\n if (!this.elementToScrollWith) return;\r\n const onScrolldown = this.handleScrolldown.bind(this);\r\n this.maxHeightScrollWith = this.getMaxHeight();\r\n this.pushListener({\r\n event: 'scroll',\r\n element: window,\r\n action: onScrolldown,\r\n });\r\n }\r\n\r\n registerViewportListener(): void {\r\n const onViewportResize = this.handleViewportResize.bind(this);\r\n this.pushListener({\r\n event: 'tk-viewport-resize',\r\n element: window.viewport,\r\n action: onViewportResize,\r\n });\r\n }\r\n\r\n handleViewportResize(event: Event): void {\r\n const customEvent = event as CustomEvent;\r\n if (customEvent.detail.width < this.minWidthBreakpoint) {\r\n this.registerScrollListener();\r\n } else {\r\n this.removeListener(window);\r\n }\r\n }\r\n\r\n handleScrolldown(event: Event): void {\r\n if (!(this.header && this.elementToScrollWith)) return;\r\n const { scrollY } = event.currentTarget as Window;\r\n\r\n if (scrollY > this.lastScrollPosY) {\r\n if (scrollY <= this.maxHeightScrollWith) {\r\n this.scrollWay = scrollY;\r\n } else {\r\n this.scrollWay = this.maxHeightScrollWith;\r\n }\r\n } else if (this.scrollWay > this.scrollDeltaY) {\r\n this.scrollWay = this.lastScrollPosY - scrollY >= this.maxHeightScrollWith\r\n ? 0\r\n : this.lastScrollPosY - scrollY;\r\n } else {\r\n this.scrollWay = 0;\r\n }\r\n\r\n this.elementToScrollWith.style.transform = `translateY(-${this.scrollWay}px)`;\r\n this.lastScrollPosY = scrollY;\r\n }\r\n\r\n getMaxHeight(): number {\r\n if (!this.elementToScrollWith) return 0;\r\n const { paddingBottom } = window.getComputedStyle(this.elementToScrollWith);\r\n const { height } = this.elementToScrollWith.getBoundingClientRect();\r\n return height - parseInt(paddingBottom, 10);\r\n }\r\n}\r\n","export interface Listener {\r\n event: keyof HTMLElementEventMap | TKCustomEventMap;\r\n element: EventTarget;\r\n action: (event: T) => void;\r\n}\r\n\r\nexport default class TKCustomElementFactory extends HTMLElement {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n listeners: Listener[];\r\n\r\n constructor() {\r\n super();\r\n this.listeners = [];\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n connectedCallback(): void {}\r\n\r\n /**\r\n * If the custom element is getting removed of the dom, all listeners\r\n * are getting removed of the element.\r\n */\r\n disconnectedCallback(): void {\r\n this.listeners.forEach((item) => {\r\n item.element.removeEventListener(item.event, item.action);\r\n });\r\n }\r\n\r\n /**\r\n * Here you can push a listener object directly to the listener array\r\n *\r\n * @param {Listener} {}\r\n */\r\n pushListener({ event, element, action }: Listener): void {\r\n this.listeners.push({ event, element, action });\r\n element.addEventListener(event, action as EventListener);\r\n }\r\n\r\n /**\r\n * Removes the given element from the listener array and removes the\r\n * EventListener from the element and returns the listener object.\r\n * If the element was not found, undefined is returned.\r\n *\r\n * @param {Element} element\r\n * @returns {Listener | undefined}\r\n */\r\n removeListener(element: EventTarget): Listener | undefined {\r\n const foundElement = this.listeners.find((item) => item.element === element);\r\n if (!foundElement) return;\r\n foundElement?.element.removeEventListener(foundElement.event, foundElement.action);\r\n const newList = this.listeners.filter((item) => item.element !== element);\r\n this.listeners = newList;\r\n return foundElement;\r\n }\r\n}\r\n","import render from '@tk/utilities/tk.render';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\ninterface NextLevelResponse {\r\n showItems: string\r\n}\r\n\r\ninterface Page {\r\n id: string\r\n element: HTMLElement\r\n}\r\n\r\nexport default class TKNavigationSidebar extends TKCustomElementFactory {\r\n navigationWrapper?: HTMLElement;\r\n wrapper?: HTMLElement;\r\n openButton?: HTMLElement;\r\n closeButton?: HTMLElement;\r\n openClassName: string;\r\n hasChildrenClassName: string;\r\n isMobile: boolean;\r\n isMobileActive: boolean;\r\n currentMenuId?: string;\r\n asyncTemplateName: string;\r\n desktopMinWidth: number;\r\n overlayClassName: string;\r\n overlay: HTMLElement;\r\n\r\n desktopView?: string;\r\n mobileView?: string;\r\n\r\n private pages: Page[] = [];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.navigationWrapper = document.querySelector('[data-tk-nav-wrapper]') || undefined;\r\n this.wrapper = this.querySelector('[data-tk-wrapper]') || undefined;\r\n this.openButton = document.querySelector(`[data-tk-nav-open=\"${this.id}\"]`) || undefined;\r\n this.closeButton = document.querySelector(`[data-tk-nav-close=\"${this.id}\"]`) || undefined;\r\n this.openClassName = this.getAttribute('data-tk-open-class-name') || 'viewport__navigation--open';\r\n this.currentMenuId = this.getAttribute('data-tk-current-menu-id') || undefined;\r\n this.hasChildrenClassName = (\r\n this.getAttribute('data-tk-has-children-class-name') || 'tk-nav-burger-item--has-children'\r\n );\r\n this.asyncTemplateName = this.getAttribute('data-tk-nav-async-template-name') || 'tk-navigation-burgerlist';\r\n this.desktopMinWidth = Number(this.getAttribute('data-tk-desktop-min-width')) || 1200;\r\n this.overlayClassName = this.getAttribute('data-tk-overlay-class-name') || 'viewport__overlay';\r\n this.isMobile = window.viewport.clientWidth < this.desktopMinWidth;\r\n this.isMobileActive = false;\r\n this.overlay = render(`
`)!;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.currentMenuId) throw new Error('Current menu id is missing!');\r\n\r\n this.registerViewportListener();\r\n this.registerButtonListener();\r\n this.registerClickListener();\r\n\r\n this.isMobile && this.switchToMobile();\r\n }\r\n\r\n registerViewportListener(): void {\r\n const onViewportResize = this.handleViewportResize.bind(this);\r\n this.pushListener({ event: 'tk-viewport-resize', element: window.viewport, action: onViewportResize });\r\n }\r\n\r\n handleViewportResize(event: Event): void {\r\n const customEvent = event as CustomEvent;\r\n this.isMobile = customEvent.detail.width < this.desktopMinWidth;\r\n this.isMobile ? this.switchToMobile() : this.switchToDesktop();\r\n }\r\n\r\n registerButtonListener(): void {\r\n this.openButton?.addEventListener('click', this.openNavigation.bind(this));\r\n this.closeButton?.addEventListener('click', this.closeNavigation.bind(this));\r\n }\r\n\r\n registerClickListener(): void {\r\n this.addEventListener('click', this.handleClickLink.bind(this));\r\n }\r\n\r\n openNavigation(): void {\r\n this.navigationWrapper\r\n ? this.navigationWrapper.classList.add(this.openClassName)\r\n : this.classList.add(this.openClassName);\r\n document.body.insertAdjacentElement('beforeend', this.overlay);\r\n }\r\n\r\n closeNavigation(): void {\r\n this.navigationWrapper\r\n ? this.navigationWrapper.classList.remove(this.openClassName)\r\n : this.classList.remove(this.openClassName);\r\n const overlay = document.querySelector(`.${this.overlayClassName}`);\r\n overlay?.remove();\r\n }\r\n\r\n async handleClickLink(event: Event): Promise {\r\n if (!this.isMobile) return;\r\n event.preventDefault();\r\n\r\n const target = event.target as HTMLAnchorElement;\r\n let element: HTMLAnchorElement | null;\r\n if (target.hasAttribute('data-tk-nav-id')) {\r\n element = target;\r\n } else {\r\n element = target.closest('[data-tk-nav-id]');\r\n }\r\n\r\n if (!element) return;\r\n if (\r\n !element.parentElement?.classList.contains(this.hasChildrenClassName)\r\n && !element.parentElement?.hasAttribute('data-tk-nav-page')\r\n ) {\r\n window.location.href = element.href;\r\n this.closeNavigation();\r\n return;\r\n }\r\n const id = element.getAttribute('data-tk-nav-id');\r\n\r\n if (!id) return;\r\n if (this.existPage(id)) {\r\n const page = this.getPage(id);\r\n if (!page) return;\r\n this.insertPage(page.element);\r\n TKNavigationSidebar.jumpToPage(page.element);\r\n this.removeLastPageFromDOM();\r\n } else {\r\n const response = await this.getTemplate(id);\r\n this.responseNextLevel(response);\r\n }\r\n }\r\n\r\n getTemplate(id: string) {\r\n const url = window.opacc.systemUrls?.async || '/WebPortal/async.aspx';\r\n const data = {\r\n type: 'navigation',\r\n navigationid: id,\r\n template: this.asyncTemplateName,\r\n };\r\n\r\n return new Promise>((resolve, reject) => {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: (response: TKResponse) => resolve(response),\r\n rejectHandler: (error: unknown) => reject(error),\r\n payload: data,\r\n });\r\n });\r\n }\r\n\r\n responseNextLevel(response: TKResponse) {\r\n if (!response.success) return;\r\n const html = render(response.dataAsJson.showItems);\r\n if (!html) return;\r\n const navigation = html.querySelector('[data-tk-nav-page]');\r\n if (!navigation) return;\r\n this.addPage(navigation);\r\n this.insertPage(navigation);\r\n TKNavigationSidebar.jumpToPage(navigation);\r\n this.removeLastPageFromDOM();\r\n }\r\n\r\n insertPage(element: Element) {\r\n const pages = this.querySelector('[data-tk-nav-pages]');\r\n if (!pages) return;\r\n pages.insertAdjacentElement('afterbegin', element);\r\n }\r\n\r\n addPage(element: Element) {\r\n const id = element.getAttribute('data-tk-nav-page') || '';\r\n !this.existPage(id) && this.pages.push({ id, element } as Page);\r\n }\r\n\r\n getPage(id: string) {\r\n return this.pages.find((page) => page.id === id);\r\n }\r\n\r\n existPage(id: string) {\r\n if (id === '') return false;\r\n const foundPage = this.pages.filter((page) => page.id === id);\r\n return foundPage.length > 0;\r\n }\r\n\r\n removeLastPageFromDOM() {\r\n const pages = this.querySelector('[data-tk-nav-pages]');\r\n if (!pages) return;\r\n const pageList = Array.from(pages.children);\r\n const oldPages = pageList.filter((element) => element !== pages.firstElementChild);\r\n oldPages.forEach((element) => element.remove());\r\n }\r\n\r\n async switchToMobile() {\r\n if (this.isMobileActive) return;\r\n this.isMobileActive = true;\r\n this.closeButton && (this.closeButton.hidden = false);\r\n if (!this.wrapper) return;\r\n this.desktopView = this.wrapper.innerHTML;\r\n\r\n if (!this.mobileView) {\r\n const response = await this.getTemplate(this.currentMenuId!);\r\n const html = render(response.dataAsJson.showItems);\r\n if (!html) throw new Error('Burgerlist: Root Element is missing!');\r\n this.wrapper.replaceChildren(html);\r\n const navigation = html.querySelector('[data-tk-nav-page]');\r\n navigation && this.addPage(navigation);\r\n } else {\r\n this.wrapper.innerHTML = '';\r\n this.wrapper.insertAdjacentHTML('afterbegin', this.mobileView);\r\n }\r\n }\r\n\r\n async switchToDesktop() {\r\n if (!this.isMobileActive) return;\r\n this.isMobileActive = false;\r\n this.closeButton && (this.closeButton.hidden = true);\r\n if (!this.wrapper) return;\r\n this.mobileView = this.wrapper.innerHTML;\r\n if (!this.desktopView) return;\r\n this.wrapper.innerHTML = '';\r\n this.wrapper.insertAdjacentHTML('afterbegin', this.desktopView);\r\n }\r\n\r\n static jumpToPage(element: Element) {\r\n element.scrollIntoView(false);\r\n }\r\n}\r\n","/**\r\n * @param {string} html representing any number of sibling elements\r\n * @return {NodeListOf}\r\n */\r\nconst render = (html: string, isBody = false): T => {\r\n if (!html) render('
');\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(html, 'text/html');\r\n return isBody\r\n ? doc.body as T\r\n : doc.body.children.item(0) as T;\r\n};\r\n\r\nexport default render;\r\n","import { sendNotificationByItems } from './tk.notification';\r\n\r\nexport interface FetchAsyncParams {\r\n requestURL: string;\r\n resolveHandler: (response: TKResponse) => void;\r\n rejectHandler?: (response: unknown) => void;\r\n payload?: Record | FormData | URLSearchParams;\r\n decodeJSONResponse?: boolean;\r\n cache?: RequestCache;\r\n showMessages?: boolean;\r\n}\r\n\r\nconst getDefaultErrorFnc = (error: unknown) => {\r\n throw new Error(`Request failed: ${error}`);\r\n};\r\n\r\nexport const setAsyncUrl = (checkForReadOnlyContext = false) => {\r\n const asyncUrl = '/WebPortal/async.aspx';\r\n\r\n if (\r\n !window.opacc\r\n || !window.opacc.systemUrls\r\n || !checkForReadOnlyContext\r\n || !window.opacc.systemUrls.asyncReadOnly\r\n ) return asyncUrl;\r\n\r\n return window.opacc.systemUrls.asyncReadOnly;\r\n};\r\n\r\nconst prepareJsonResponse = (response: WASResponse, showMessages: boolean) => {\r\n const data = window.atob(response.data);\r\n const html = document.createElement('div');\r\n html.innerHTML = data;\r\n\r\n const json = response.contentType === 'application/json' && html.innerText !== ''\r\n ? JSON.parse(html.innerText)\r\n : {};\r\n\r\n showMessages && sendNotificationByItems(response.messages, json);\r\n\r\n return {\r\n status: response.status,\r\n messages: response.messages,\r\n dataAsBase64: response.data,\r\n contentType: response,\r\n success: response.status === 'ok',\r\n dataAsHtml: response.contentType === 'text/html' ? html.innerText : '',\r\n dataAsJson: json,\r\n data,\r\n } as unknown as TKResponse;\r\n};\r\n\r\nconst recordToURLSearchParams = (data: Record): URLSearchParams => {\r\n const searchParams = new URLSearchParams();\r\n Object.entries(data).forEach(([key, value]) => {\r\n searchParams.append(key, value || '');\r\n });\r\n return searchParams;\r\n};\r\n\r\nconst formDataToURLSearchParams = (formData: FormData): URLSearchParams => {\r\n const searchParams = new URLSearchParams();\r\n formData.forEach((value, key) => {\r\n searchParams.append(key, value as string);\r\n });\r\n return searchParams;\r\n};\r\n\r\nexport const fetchRequest = async ({\r\n requestURL,\r\n resolveHandler,\r\n rejectHandler = getDefaultErrorFnc,\r\n payload,\r\n decodeJSONResponse = true,\r\n cache = 'default',\r\n showMessages = true,\r\n}: FetchAsyncParams) => {\r\n const headers = new Headers({\r\n 'x-requested-with': 'XMLHttpRequest',\r\n 'response-type': 'json',\r\n });\r\n\r\n let body;\r\n if (payload) {\r\n headers.set('content-type', 'application/x-www-form-urlencoded; charset=UTF-8');\r\n if (payload instanceof URLSearchParams) {\r\n body = payload;\r\n } else if (payload instanceof FormData) {\r\n body = formDataToURLSearchParams(payload);\r\n } else if (payload instanceof Object) {\r\n body = recordToURLSearchParams(payload);\r\n }\r\n }\r\n\r\n const init: RequestInit = {\r\n method: payload ? 'POST' : 'GET',\r\n headers,\r\n cache,\r\n credentials: 'include',\r\n body,\r\n };\r\n\r\n try {\r\n const response = await fetch(requestURL, init);\r\n const contentType = response.headers.get('content-type');\r\n const data = contentType?.includes('application/json')\r\n ? await response.json()\r\n : await response.text();\r\n const preparedData = decodeJSONResponse ? prepareJsonResponse(data, showMessages) : data;\r\n resolveHandler(preparedData);\r\n } catch (error) {\r\n rejectHandler(error);\r\n }\r\n};\r\n","import {\r\n accountMessages, deliveryMessages, generalMessages, paymentMessages,\r\n} from './tk.messages';\r\nimport render from './tk.render';\r\n\r\nexport enum NotificationType {\r\n SUCCESS = 'Success',\r\n WARNING = 'Warning',\r\n ERROR = 'Error',\r\n INFO = 'Info',\r\n}\r\n\r\ninterface MessageResponse {\r\n pluginId: string;\r\n paymentType: string;\r\n}\r\n\r\nconst mapMessageCodeToText = (response: MessageResponse, messages: Record) => {\r\n let textMessage;\r\n if (!response.pluginId) return '';\r\n if (response.pluginId === 'paymentType') {\r\n const paymentMessages: Record = {\r\n 0: messages.messagePaymentTypeGeneral.text,\r\n 1: messages.messagePaymentTypeCreditCard.text,\r\n 2: messages.messagePaymentTypeInvoice.text,\r\n 5: messages.messagePaymentTypeInAdvance.text,\r\n 6: messages.messagePaymentTypeOnDelivery.text,\r\n };\r\n textMessage = paymentMessages[Number(response.paymentType) || 0];\r\n } else if (response.pluginId === 'deliveryType') {\r\n textMessage = messages.messageDeliveryTypeGeneral.text;\r\n } else if (response.pluginId === 'checkoutAdressChange') {\r\n textMessage = messages.messageChangeSuccess.text;\r\n }\r\n return textMessage;\r\n};\r\n\r\nconst getConsoleStyle = (backgroundColor: string, textColor: string = 'white') => [\r\n `background: ${backgroundColor}`,\r\n `color: ${textColor}`,\r\n 'display: block',\r\n].join(';');\r\n\r\nconst logToConsole = (message: string, type: NotificationType) => {\r\n const consoleHandler: Record void> = {\r\n [NotificationType.SUCCESS](): void {\r\n // eslint-disable-next-line no-console\r\n console.info(`%c ${message}`, getConsoleStyle('green'));\r\n },\r\n [NotificationType.WARNING](): void {\r\n // eslint-disable-next-line no-console\r\n console.warn(`%c ${message}`, getConsoleStyle('yellow', 'black'));\r\n },\r\n [NotificationType.ERROR](): void {\r\n // eslint-disable-next-line no-console\r\n console.log(`%c ${message}`, getConsoleStyle('red'));\r\n },\r\n [NotificationType.INFO](): void {\r\n // eslint-disable-next-line no-console\r\n console.debug(`%c ${message}`, getConsoleStyle('blue'));\r\n },\r\n };\r\n\r\n consoleHandler[type]();\r\n};\r\n\r\nconst renderMessageContainer = (parentElement: HTMLElement) => {\r\n let messageContainer = parentElement.querySelector('[data-tk-message-container]');\r\n if (!messageContainer) {\r\n messageContainer = render(\r\n '
',\r\n );\r\n parentElement.insertAdjacentElement('beforeend', messageContainer);\r\n }\r\n\r\n return messageContainer;\r\n};\r\n\r\nexport const sendNotification = (\r\n type: NotificationType,\r\n message?: string,\r\n wait: number = 2.5,\r\n options: { consoleMessage?: string } = {},\r\n) => {\r\n if (!message) return;\r\n const dialogs = document.querySelectorAll('dialog[open]');\r\n let messageContainer: HTMLElement;\r\n\r\n if (dialogs.length === 0) {\r\n messageContainer = renderMessageContainer(document.body);\r\n } else {\r\n const lastDialog = Array.from(dialogs).at(-1);\r\n if (!lastDialog) {\r\n messageContainer = renderMessageContainer(document.body);\r\n } else {\r\n messageContainer = renderMessageContainer(lastDialog);\r\n }\r\n }\r\n\r\n const toast = render(`\r\n
\r\n \r\n ${message}\r\n
\r\n `);\r\n\r\n toast.style.animation = `fadein .5s, fadeout .5s ${wait}s`;\r\n toast.classList.add('tk-message--show');\r\n\r\n messageContainer.appendChild(toast);\r\n\r\n toast.addEventListener('animationend', (event) => {\r\n if ((event as AnimationEvent).animationName !== 'fadeout') return;\r\n messageContainer.removeChild(toast);\r\n });\r\n\r\n options.consoleMessage\r\n ? logToConsole(options.consoleMessage, type)\r\n : logToConsole(message, type);\r\n};\r\n\r\nexport const sendNotificationByItem = (item: Message, messageOverride?: string) => {\r\n const type = item.code.substring(0, 1);\r\n const message = messageOverride || item.text;\r\n\r\n const typeHandler: Record void> = {\r\n 1: () => sendNotification(NotificationType.SUCCESS, message, item.wait),\r\n 2: () => sendNotification(NotificationType.WARNING, message, item.wait),\r\n 3: () => sendNotification(NotificationType.ERROR, message, item.wait),\r\n 4: () => sendNotification(NotificationType.INFO, message, item.wait),\r\n };\r\n\r\n typeHandler[type]();\r\n};\r\n\r\nexport const sendNotificationByItems = (items: Message[], response: MessageResponse) => {\r\n const messages = {\r\n ...generalMessages, ...accountMessages, ...paymentMessages, ...deliveryMessages,\r\n };\r\n items.forEach((item) => {\r\n sendNotificationByItem(item, mapMessageCodeToText(response, messages));\r\n });\r\n};\r\n","/* eslint-disable max-len */\r\n\r\nconst globalFormErrorMessages: FormValidatorMessages = {\r\n badInput: 'Please enter a number.',\r\n patternMismatch: 'Please match the requested format.',\r\n rangeOverflow: 'Please select a value that is no more than {max}.',\r\n rangeUnderflow: 'Please select a value that is no less than {min}.',\r\n stepMismatch: 'Please select a value that is a multiple from {step}.',\r\n tooLong:\r\n 'Please shorten this text to no more than {maxLength} characters. You are currently using {length} characters.',\r\n tooShort:\r\n 'Please lengthen this text to {minLength} characters or more. You are currently using {length} characters.',\r\n typeMismatch: 'The value you have entered for this field is invalid.',\r\n valueMissing: 'Please fill out this field.',\r\n // These properties must be empty.\r\n valid: '',\r\n customError: '',\r\n};\r\n\r\nconst globalFormPasswordValidityMessages: FormExpandValidatorMessages = {\r\n passwordNotMatching: 'The password does not match the one above.',\r\n};\r\n\r\nconst globalFormExpandErrorMessages: FormExpandValidatorMessages = {\r\n stepAdjust: 'The value you entered for this field is invalid. The value has been changed from {currentValue} to {newValue}',\r\n existigName: 'This name {currentValue} already exists.',\r\n};\r\n\r\nconst globalBasketMessages: Translation = {\r\n messageEmptyBasket: { code: '1-6-6220', text: 'Shopping cart is empty' },\r\n messageAddedToBasket: { code: '1-6-6221', text: 'added to the shopping cart' },\r\n quickOrderMessageTooShort: { code: '1-6-6222', text: 'At least %1 characters are required for a search.' },\r\n};\r\n\r\nconst globalDeliveryMessages: Translation = {\r\n messageDeliveryTypeGeneral: { code: '1-6-6226', text: 'Delivery method changed' },\r\n};\r\n\r\nconst globalPaymentMessages: Translation = {\r\n messagePaymentTypeCreditCard: { code: '1-6-6227', text: 'Payment type credit card' },\r\n messagePaymentTypeInvoice: { code: '1-6-6227', text: 'Payment type invoice' },\r\n messagePaymentTypeInAdvance: { code: '1-6-6227', text: 'Payment type advance payment' },\r\n messagePaymentTypeOnDelivery: { code: '1-6-6227', text: 'Payment type cash on delivery' },\r\n messagePaymentTypeGeneral: { code: '1-6-6227', text: 'Payment type changed' },\r\n};\r\n\r\nconst globalCompareMessages: Translation = {\r\n messageHint: { code: '1-6-6240', text: '' },\r\n allRemoved: { code: '1-6-6240', text: 'All items removed' },\r\n empty: { code: '1-6-6240', text: 'Your article comparison is empty.' },\r\n};\r\n\r\nconst globalFavoriteMessages: Translation = {\r\n messageInvalidName: { code: '2-6-6270', text: 'Unable to create the wish list; the name is invalid.' },\r\n messageMaxLists: { code: '2-6-6277', text: 'Max. number of wish lists reached!' },\r\n messageMaxPositions: { code: '2-6-6278', text: 'Max. number of positions reached!' },\r\n messageDeleteConfirmation: { code: '2-6-6273', text: 'Do you really want to delete the wish list?' },\r\n};\r\n\r\nconst globalAutocompleteMessages: Translation = {\r\n messageNoValueFound: { code: '1-6-6290', text: 'No match found!' },\r\n};\r\n\r\nconst globalAccountMessages: Translation = {\r\n messageDelete: { code: '1-6-6200', text: 'Do you really want to delete this address?' },\r\n messageChangeSuccess: { code: '1-6-6200', text: 'Address successfully modified.' },\r\n};\r\n\r\nconst globalGeneralMessages: Translation = {\r\n messageEmptyText: { code: '1-6-6290', text: 'The output was suppressed due to an empty text.' },\r\n messageOk: { code: '1-6-6290', text: 'Yes' },\r\n messageCancel: { code: '1-6-6290', text: 'No' },\r\n messageChange: { code: '1-6-6290', text: 'The selection was changed' },\r\n messageDefault: { code: '1-6-0000', text: '' },\r\n messageDefaultInfo: { code: '1-6-0000', text: '' },\r\n messageDefaultWarning: { code: '2-6-0000', text: '' },\r\n messageDefaultError: { code: '3-6-0000', text: '' },\r\n messageDefaultDebug: { code: '4-6-0000', text: '' },\r\n};\r\n\r\nconst globalDirectSearchSuggestMessages: Translation = {\r\n messageTooShort: { code: '1-6-6260', text: 'At least 3 characters!' },\r\n messageResultEmpty: { code: '1-6-6260', text: 'No items found!' },\r\n};\r\n\r\nconst globalFileuploadAreaMessages: Translation = {\r\n defaultMessage: { code: '1-6-2002', text: 'Store the files here to upload them' },\r\n fallbackMessage: { code: '2-6-2002', text: 'Your browser does not support drag&drop file uploads' },\r\n fallbackText: { code: '2-6-2002', text: 'Use the form to upload your files' },\r\n fileTooBig: { code: '2-6-2002', text: 'The file is too large. The maximum file size is {{maxFileSize}} MB' },\r\n invalidFileType: { code: '2-6-2002', text: 'Unable to upload files of this type' },\r\n responseError: { code: '3-6-2002', text: 'The server rejected your request with status {{statusCode}}' },\r\n cancelUpload: { code: '1-6-2002', text: 'Cancel upload' },\r\n cancelUploadConfirmation: { code: '1-6-2002', text: 'Cancel upload?' },\r\n removeFile: { code: '1-6-2002', text: 'Remove file' },\r\n maxFilesExceeded: { code: '2-6-2002', text: 'You are not allowed to upload any more files' },\r\n buttonBrowse: { code: '1-6-2002', text: 'Select files to upload' },\r\n uploadHint: { code: '1-6-2002', text: 'Drag files and folders here' },\r\n};\r\n\r\nconst globalFilterMessages: Translation = {\r\n emptyResult: { code: '1-1-6280', text: 'Keine Ergebnisse gefunden.' },\r\n};\r\n\r\nconst globalCheckoutMessages: Translation = {\r\n missingTerms: { code: '3-6-6230', text: 'Please accept the General terms and conditions.' },\r\n loadingCheckoutTitle: { code: '1-6-6260', text: 'Almost done!' },\r\n loadingCheckoutText: { code: '1-6-6261', text: 'The order is carried out. This can take a moment!' },\r\n};\r\n\r\nconst globalHtmlErrorCodeMessages: Translation = {\r\n htmlErrorGeneral: { code: '3-6-6000', text: 'Something has gone wrong!' },\r\n htmlError401: { code: '3-6-6000', text: 'A valid authentication is required to process the request.' },\r\n htmlError403: { code: '3-6-6000', text: 'The request could not be processed due to missing authorization of the client.' },\r\n htmlError404: { code: '3-6-6000', text: 'The requested site does not exist.' },\r\n htmlError413: { code: '3-6-6000', text: 'The file is too large.' },\r\n htmlError415: { code: '3-6-6000', text: 'This media type is not supported.' },\r\n htmlError422: { code: '3-6-6000', text: 'Unable to display the requested site correctly.' },\r\n htmlError500: { code: '3-6-6000', text: 'Internal server error' },\r\n htmlError503: { code: '3-6-6000', text: 'The server is temporarily unavailable.' },\r\n};\r\n\r\nif (!window.opacc) {\r\n window.opacc = {};\r\n}\r\n\r\nexport const formErrorMessages: FormValidatorMessages & FormExpandValidatorMessages = {\r\n ...globalFormErrorMessages,\r\n ...globalFormPasswordValidityMessages,\r\n ...globalFormExpandErrorMessages,\r\n ...window.opacc.tkFormValidityMessages,\r\n ...window.opacc.tkFormPasswordValidityMessages,\r\n ...window.opacc.tkFormExpandErrorMessages,\r\n ...window.opacc.projectFormValidityMessages,\r\n ...window.opacc.projectFormPasswordValidityMessages,\r\n ...window.opacc.projectFormExpandErrorMessages,\r\n};\r\n\r\nexport const formExpandErrorMessages = {\r\n ...globalFormExpandErrorMessages,\r\n ...window.opacc.tkFormExpandErrorMessages,\r\n ...window.opacc.projectFormExpandErrorMessages,\r\n};\r\n\r\nexport const basketMessages = {\r\n ...globalBasketMessages,\r\n ...window.opacc.tkBasketMessages,\r\n ...window.opacc.projectBasketMessages,\r\n};\r\n\r\nexport const compareMessages = {\r\n ...globalCompareMessages,\r\n ...window.opacc.tkCompareMessages,\r\n ...window.opacc.projectCompareMessages,\r\n};\r\n\r\nexport const favoriteMessages = {\r\n ...globalFavoriteMessages,\r\n ...window.opacc.tkFavoriteMessages,\r\n ...window.opacc.projectFavoriteMessages,\r\n};\r\n\r\nexport const generalMessages = {\r\n ...globalGeneralMessages,\r\n ...window.opacc.tkGeneralMessages,\r\n ...window.opacc.projectGeneralMessages,\r\n};\r\n\r\nexport const directSearchSuggestMessages = {\r\n ...globalDirectSearchSuggestMessages,\r\n ...window.opacc.tkDirectSearchSuggestMessages,\r\n ...window.opacc.projectDirectSearchSuggestMessages,\r\n};\r\n\r\nexport const fileuploadAreaMessages = {\r\n ...globalFileuploadAreaMessages,\r\n ...window.opacc.tkFileUploadAreaMessages,\r\n ...window.opacc.projectFileUploadAreaMessages,\r\n};\r\n\r\nexport const filterMessages = {\r\n ...globalFilterMessages,\r\n ...window.opacc.tkFilterMessages,\r\n ...window.opacc.projectFilterMessages,\r\n};\r\n\r\nexport const autocompleteMessages = {\r\n ...globalAutocompleteMessages,\r\n ...window.opacc.tkAutocompleteMessages,\r\n ...window.opacc.projectAutocompleteMessages,\r\n};\r\n\r\nexport const paymentMessages = {\r\n ...globalPaymentMessages,\r\n ...window.opacc.tkPaymentMessages,\r\n ...window.opacc.projectPaymentMessages,\r\n};\r\nexport const deliveryMessages = {\r\n ...globalDeliveryMessages,\r\n ...window.opacc.tkDeliveryMessages,\r\n ...window.opacc.projectDeliveryMessages,\r\n};\r\nexport const accountMessages = {\r\n ...globalAccountMessages,\r\n ...window.opacc.tkAccountMessages,\r\n ...window.opacc.projectAccountMessages,\r\n};\r\nexport const checkoutMessages = {\r\n ...globalCheckoutMessages,\r\n ...window.opacc.tkCheckoutMessages,\r\n ...window.opacc.projectCheckoutMessages,\r\n};\r\nexport const htmlErrorCodeMessages = {\r\n ...globalHtmlErrorCodeMessages,\r\n ...window.opacc.tkHtmlErrorCodeMessages,\r\n ...window.opacc.projectHtmlErrorCodeMessages,\r\n};\r\n\r\nexport const zipCityMessages = {\r\n ...window.opacc.tkZipCityMessages,\r\n};\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKViewport extends TKCustomElementFactory {\r\n resizeEventName: string;\r\n resizeObserver: ResizeObserver;\r\n breakpoints: Map;\r\n currentBreakpoint: Breakpoint;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.resizeEventName = this.getAttribute('data-tk-resize-event-name') || 'tk-viewport-resize';\r\n this.resizeObserver = new ResizeObserver(this.checkSize.bind(this));\r\n\r\n // * These breakpoints must match the CSS breakpoints, otherwise conflicts may occur.\r\n this.breakpoints = new Map([\r\n ['xs', 576],\r\n ['s', 768],\r\n ['m', 992],\r\n ['l', 1200],\r\n ['xl', 1440],\r\n ]);\r\n this.currentBreakpoint = this.getCurrentBreakpoint(this.clientWidth);\r\n }\r\n\r\n connectedCallback(): void {\r\n this.resizeObserver.observe(this);\r\n window.viewport = this;\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.resizeObserver.unobserve(this);\r\n }\r\n\r\n checkSize(entries: ResizeObserverEntry[]) {\r\n entries.forEach(() => {\r\n const currentWidth = window.innerWidth;\r\n const currentBreakpoint = this.getCurrentBreakpoint(currentWidth);\r\n if (this.currentBreakpoint !== currentBreakpoint) {\r\n const event = new CustomEvent(this.resizeEventName, {\r\n bubbles: true,\r\n detail: {\r\n width: currentWidth,\r\n breakpoint: currentBreakpoint,\r\n },\r\n });\r\n this.currentBreakpoint = currentBreakpoint;\r\n this.dispatchEvent(event);\r\n }\r\n });\r\n }\r\n\r\n getCurrentBreakpoint(width: number): Breakpoint {\r\n let currentBreakpoint: Breakpoint = 'xs';\r\n this.breakpoints.forEach((value, key) => {\r\n if (width >= value) {\r\n currentBreakpoint = key;\r\n }\r\n });\r\n return currentBreakpoint;\r\n }\r\n}\r\n","import { fetchRequest, setAsyncUrl } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { directSearchSuggestMessages } from '@tk/utilities/tk.messages';\r\nimport { isOutsideShapes } from '@tk/utilities/tk.shape.detector';\r\n\r\ninterface ISeachInputField {\r\n minimum: number;\r\n value: string;\r\n valid: boolean;\r\n hasDangerousString: boolean;\r\n hasDisallowedChars: boolean;\r\n}\r\n// eslint-disable-next-line no-use-before-define\r\ntype FieldElement = HTMLElement | TKSearch;\r\n\r\ninterface IDOMElement {\r\n element?: FieldElement;\r\n className: string;\r\n}\r\n\r\ninterface ISearchDataRequest {\r\n type: string;\r\n inputValue: string;\r\n filterValue?: string;\r\n filterAttribute?: string;\r\n}\r\n\r\ninterface SearchResponse {\r\n html: string;\r\n}\r\n\r\nexport default class TKSearch extends TKCustomElementFactory {\r\n selectorSearch: string = '[data-tk-search]';\r\n selectorSearchBackButton: string = '[data-tk-search-back]';\r\n selectorSearchResetButton: string = '[data-tk-search-reset]';\r\n selectorSearchSubmitButton: string = '[data-tk-search-submit]';\r\n selectorSearchFilterElement: string = '[data-tk-search-filter]';\r\n selectorSearchResult: string = '[data-tk-search-result]';\r\n attributeSearchMinLength: string = '[data-tk-search-min-input-length]';\r\n activeClassName: string;\r\n activeResultClassName: string;\r\n tooShortClassName: string;\r\n loadingClassName: string;\r\n\r\n directSearchForm?: HTMLFormElement;\r\n directSearchInputElement?: HTMLInputElement;\r\n directSearchBackButton?: HTMLButtonElement;\r\n directSearchResetButton?: HTMLButtonElement;\r\n directSearchSubmitButton?: HTMLButtonElement;\r\n directSearchFilterElement?: HTMLSelectElement;\r\n directSearchInputObj: ISeachInputField = {} as ISeachInputField;\r\n directSearchResult?: HTMLElement;\r\n directSearchMinLength: number;\r\n timerID: number = 0;\r\n\r\n searchTermAsUrlParam: boolean = true;\r\n disallowedCharacters: string = '';\r\n disallowedCharactersRegex: RegExp = /[^a-zA-Z0-9 äÄãÃåÅáÁàÀâÂéÉèÈêÊëËöÖóÓòÒôÔõÕüÜúÚùÙûÛìÌíÍîÎïÏñÑøØçÇß',-_.]+/;\r\n\r\n constructor() {\r\n super();\r\n this.directSearchForm = this.querySelector(this.selectorSearch) || undefined;\r\n this.directSearchBackButton = this.querySelector(this.selectorSearchBackButton) || undefined;\r\n this.directSearchResetButton = this.querySelector(this.selectorSearchResetButton) || undefined;\r\n this.directSearchSubmitButton = this.querySelector(this.selectorSearchSubmitButton) || undefined;\r\n this.directSearchFilterElement = this.querySelector(this.selectorSearchFilterElement) || undefined;\r\n this.directSearchResult = this.querySelector(this.selectorSearchResult) || undefined;\r\n this.directSearchMinLength = Number(this.getAttribute(this.attributeSearchMinLength)) || 3;\r\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-search--active';\r\n this.activeResultClassName = (\r\n this.getAttribute('data-tk-active-result-class-name') || 'tk-search--has-data'\r\n );\r\n this.tooShortClassName = this.getAttribute('data-tk-too-short-class-name') || 'tk-search__result--too-short';\r\n this.loadingClassName = this.getAttribute('data-tk-loading-class-name') || 'tk-search__result--loading';\r\n\r\n if (!this.directSearchForm) {\r\n throw new Error('TK: Missing Direct-Search');\r\n }\r\n\r\n this.directSearchInputElement = this.directSearchForm.querySelector('input') || undefined;\r\n\r\n if (!this.directSearchInputElement) {\r\n throw new Error('TK: Missing Direct-Search-Input');\r\n }\r\n\r\n if (!this.directSearchResult) {\r\n throw new Error('TK: Missing Direct-Search Result Wrapper');\r\n }\r\n TKSearch.replaceToActionUrl();\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerListener();\r\n }\r\n\r\n registerListener(): void {\r\n if (this.directSearchInputElement) {\r\n const keyUpEventHandler = this.getSuggest.bind(this);\r\n const setClassEventHandler = this.setActiveClass.bind(this);\r\n const focusOutEventHandler = this.focusOut.bind(this);\r\n this.pushListener({ event: 'input', element: this.directSearchInputElement, action: keyUpEventHandler });\r\n this.pushListener({\r\n event: 'focusin',\r\n element: this.directSearchInputElement,\r\n action: setClassEventHandler,\r\n });\r\n this.pushListener({ event: 'click', element: window, action: focusOutEventHandler });\r\n }\r\n\r\n if (this.directSearchBackButton) {\r\n const navigateBackEventHandler = this.navigateBack.bind(this);\r\n this.pushListener({\r\n event: 'click',\r\n element: this.directSearchBackButton,\r\n action: navigateBackEventHandler,\r\n });\r\n }\r\n\r\n if (this.directSearchResetButton) {\r\n const resetEventHandler = this.resetSearch.bind(this);\r\n this.pushListener({\r\n event: 'click',\r\n element: this.directSearchResetButton,\r\n action: resetEventHandler,\r\n });\r\n }\r\n\r\n if (this.directSearchFilterElement) {\r\n const selectboxEventHandler = this.getSuggest.bind(this);\r\n this.pushListener({\r\n event: 'change',\r\n element: this.directSearchFilterElement,\r\n action: selectboxEventHandler,\r\n });\r\n }\r\n }\r\n\r\n setActiveClass(): void {\r\n this.classList.add(this.activeClassName);\r\n }\r\n\r\n focusOut(event: MouseEvent): void {\r\n const fieldElement = this.directSearchInputElement;\r\n const resultElement = this.directSearchResult;\r\n if (!fieldElement || !resultElement) return;\r\n const fieldElementRect = fieldElement.getBoundingClientRect();\r\n const resultRect = resultElement.getBoundingClientRect();\r\n const rectangles = [\r\n { rectangle: fieldElementRect },\r\n { rectangle: resultRect },\r\n ];\r\n if (isOutsideShapes(event, rectangles)) {\r\n this.classList.remove(this.activeClassName);\r\n this.resetSearch();\r\n }\r\n }\r\n\r\n setProgressBar(): void {\r\n const progressBarTpl: string = `\r\n
\r\n
\r\n
`;\r\n\r\n this.directSearchResult?.insertAdjacentHTML('beforeend', progressBarTpl);\r\n }\r\n\r\n setMessageTooShort(): void {\r\n const msgTpl: string = `\r\n
\r\n \r\n \r\n \r\n \r\n ${directSearchSuggestMessages.messageTooShort.text.replace('%1', String(this.directSearchMinLength))}\r\n \r\n
`;\r\n\r\n this.directSearchResult?.insertAdjacentHTML('beforeend', msgTpl);\r\n }\r\n\r\n getSuggest(): void {\r\n if (!this.directSearchResult) return;\r\n\r\n this.directSearchInputObj = this.validateSearchInput();\r\n this.modifyDOM();\r\n\r\n if (!this.directSearchInputObj.valid) {\r\n this.classList.add(this.activeResultClassName);\r\n this.setMessageTooShort();\r\n return;\r\n }\r\n\r\n this.resetResultList();\r\n\r\n this.timerID && clearTimeout(this.timerID);\r\n this.timerID = window.setTimeout(() => {\r\n // append Progress-Bar\r\n this.setProgressBar();\r\n\r\n const searchData = this.setDataForRequest();\r\n const data: Record = Object.fromEntries(Object.entries(searchData) as [string, string][]);\r\n\r\n const url = setAsyncUrl();\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.getDirectSearchSuggestDataFromResult.bind(this),\r\n payload: data,\r\n });\r\n }, 500);\r\n }\r\n\r\n setDataForRequest(): ISearchDataRequest {\r\n const retVal: ISearchDataRequest = {\r\n type: 'directsearchsuggest',\r\n inputValue: encodeURIComponent(this.directSearchInputObj.value),\r\n filterAttribute: this.directSearchFilterElement?.dataset.tkSearchFilterAttribute,\r\n filterValue: this.directSearchFilterElement?.value,\r\n };\r\n\r\n if (!this.directSearchFilterElement) {\r\n delete retVal.filterAttribute;\r\n delete retVal.filterValue;\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n getDirectSearchSuggestDataFromResult(response: TKResponse): void {\r\n if (!this.directSearchResult) {\r\n return;\r\n }\r\n\r\n this.classList.add(this.activeResultClassName);\r\n this.directSearchResult.innerHTML = response.dataAsJson.html;\r\n }\r\n\r\n modifyDOM(): void {\r\n const classListObj = TKSearch.clearClassListObj();\r\n\r\n classListObj.push(\r\n {\r\n element: this,\r\n className: this.activeClassName,\r\n },\r\n {\r\n element: this,\r\n className: this.activeResultClassName,\r\n },\r\n );\r\n\r\n if (this.directSearchInputObj.valid) {\r\n TKSearch.addClassList(classListObj);\r\n } else {\r\n this.resetResultList();\r\n }\r\n }\r\n\r\n static clearClassListObj(): IDOMElement[] {\r\n const classListObj: IDOMElement[] = [];\r\n return classListObj;\r\n }\r\n\r\n static addClassList(items: IDOMElement[]): void {\r\n items.forEach((item: IDOMElement) => {\r\n item.element?.classList.add(item.className);\r\n });\r\n }\r\n\r\n static removeClassList(items: IDOMElement[]): void {\r\n items.forEach((item: IDOMElement) => {\r\n item.element?.classList.remove(item.className);\r\n });\r\n }\r\n\r\n resetResultList(): void {\r\n this.directSearchResult?.replaceChildren();\r\n }\r\n\r\n navigateBack(): void {\r\n const classListObj = TKSearch.clearClassListObj();\r\n classListObj.push({\r\n element: this,\r\n className: this.activeClassName,\r\n });\r\n\r\n TKSearch.removeClassList(classListObj);\r\n }\r\n\r\n resetSearch(): void {\r\n const classListObj = TKSearch.clearClassListObj();\r\n classListObj.push(\r\n {\r\n element: this,\r\n className: this.activeClassName,\r\n },\r\n {\r\n element: this,\r\n className: this.activeResultClassName,\r\n },\r\n );\r\n this.resetResultList();\r\n TKSearch.removeClassList(classListObj);\r\n this.directSearchForm?.reset();\r\n }\r\n\r\n static replaceToActionUrl(): void {\r\n const actionUrl = localStorage.getItem('searchActionUrl')\r\n ? new URL(localStorage.getItem('searchActionUrl') as string)\r\n : undefined;\r\n\r\n if (actionUrl && actionUrl.pathname === window.location.pathname) {\r\n window.history.replaceState(null, 'searchActionUrl', actionUrl);\r\n }\r\n if (actionUrl) {\r\n localStorage.removeItem('searchActionUrl');\r\n }\r\n }\r\n\r\n validateSearchInput(): ISeachInputField {\r\n const value = this.directSearchInputElement?.value.trim() || '';\r\n const minLength = Number(this.getAttribute('data-tk-search-min-input-length') || 3);\r\n const hasDangerousString = value?.includes('<');\r\n const hasDisallowedChars = this.hasDisallowedCharacters(value);\r\n\r\n return {\r\n minimum: minLength,\r\n value,\r\n valid: value.length >= minLength && !hasDangerousString && !hasDisallowedChars,\r\n hasDangerousString,\r\n hasDisallowedChars,\r\n };\r\n }\r\n\r\n hasDisallowedCharacters(value: string): boolean {\r\n if (value === '') {\r\n this.disallowedCharacters = '';\r\n return false;\r\n }\r\n\r\n let disallowedCharactersRegex: RegExp;\r\n if (window.opacc.tkSearchTermModifier) {\r\n disallowedCharactersRegex = new RegExp(window.opacc.tkSearchTermModifier.disallowCharacters);\r\n } else {\r\n disallowedCharactersRegex = this.disallowedCharactersRegex;\r\n }\r\n const matches = value.match(disallowedCharactersRegex);\r\n if (matches && matches.length > 0) {\r\n const character = matches.at(0);\r\n if (character) {\r\n this.disallowedCharacters = character;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n this.disallowedCharacters = '';\r\n return false;\r\n }\r\n}\r\n","export interface Point {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface Offset {\r\n left?: number;\r\n right?: number;\r\n top?: number;\r\n bottom?: number;\r\n}\r\n\r\nexport interface RectangleItem {\r\n rectangle: DOMRect;\r\n offset?: Offset;\r\n}\r\n\r\nexport function isPointOutsideRectangle(point: Point, rectangle: DOMRect, offset?: Offset): boolean {\r\n return (\r\n point.x < rectangle.left + (offset?.left || 0)\r\n || point.x > rectangle.right + (offset?.right || 0)\r\n || point.y < rectangle.top + (offset?.top || 0)\r\n || point.y > rectangle.bottom + (offset?.bottom || 0)\r\n );\r\n}\r\n\r\nexport function isOutsideShapes(event: MouseEvent, rectangles: RectangleItem[]): boolean {\r\n const point: Point = { x: event.clientX, y: event.clientY };\r\n return rectangles.every((item) => isPointOutsideRectangle(point, item.rectangle, item.offset));\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { zipCityMessages } from '@tk/utilities/tk.messages';\r\n\r\ninterface ZipCityData {\r\n zip: string;\r\n city: string;\r\n country: string;\r\n}\r\n\r\ninterface ZipCityField {\r\n inputField?: HTMLInputElement;\r\n dropdown?: HTMLElement;\r\n listItemSelected?: HTMLElement;\r\n data?: ZipCityData[];\r\n}\r\n\r\nexport default class TKFormZipCity extends TKCustomElementFactory {\r\n fieldCountry?: HTMLInputElement | HTMLSelectElement;\r\n fieldZip?: HTMLInputElement;\r\n fieldCity?: HTMLInputElement;\r\n inputObject: ZipCityField;\r\n selectedField?: HTMLInputElement;\r\n listWrapper: HTMLElement;\r\n timer?: ReturnType;\r\n lastSearchTerm: string;\r\n listWrapperClassName: string;\r\n loadingSpinnerTimeout: number | null;\r\n clearDataTimeout: number | null;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.listWrapperClassName = this.getAttribute('data-tk-zip-list-class') || 'tk-form-zipcity__list';\r\n this.fieldCountry = this.querySelector('[data-tk-zip-country]') || undefined;\r\n this.fieldZip = this.querySelector('[data-tk-zip-zip]') || undefined;\r\n this.fieldCity = this.querySelector('[data-tk-zip-city]') || undefined;\r\n this.lastSearchTerm = '';\r\n this.selectedField = undefined;\r\n this.listWrapper = document.createElement('div');\r\n this.listWrapper.classList.add(this.listWrapperClassName);\r\n this.listWrapper.hidden = true;\r\n this.loadingSpinnerTimeout = null;\r\n this.clearDataTimeout = null;\r\n\r\n this.inputObject = {\r\n inputField: undefined,\r\n dropdown: this.listWrapper,\r\n listItemSelected: undefined,\r\n data: [],\r\n };\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerListener();\r\n }\r\n\r\n registerListener() {\r\n if (!this.fieldZip && !this.fieldCity) return;\r\n\r\n const onInputHandler = this.searchZipCity.bind(this);\r\n const onClickHandler = this.toggleDropdown.bind(this);\r\n const onSelectHandler = this.selectItem.bind(this);\r\n const onChangeHandler = this.clearFormFields.bind(this);\r\n const onInputKeyNavigationHandler = this.inputKeyNavigation.bind(this);\r\n const onDropdownKeyNavigationHandler = this.dropdownKeyNavigation.bind(this);\r\n\r\n this.pushListener({ event: 'click', element: this.fieldZip!, action: onClickHandler });\r\n this.pushListener({ event: 'click', element: this.fieldCity!, action: onClickHandler });\r\n this.pushListener({ event: 'click', element: this.inputObject.dropdown!, action: onSelectHandler });\r\n this.pushListener({ event: 'input', element: this.fieldZip!, action: onInputHandler });\r\n this.pushListener({ event: 'input', element: this.fieldCity!, action: onInputHandler });\r\n this.pushListener({ event: 'keydown', element: this.fieldZip!, action: onInputKeyNavigationHandler });\r\n this.pushListener({ event: 'keydown', element: this.fieldCity!, action: onInputKeyNavigationHandler });\r\n this.pushListener({\r\n event: 'keydown',\r\n element: this.inputObject.dropdown!,\r\n action: onDropdownKeyNavigationHandler,\r\n });\r\n\r\n if (this.fieldCountry) {\r\n this.pushListener({ event: 'change', element: this.fieldCountry, action: onChangeHandler });\r\n }\r\n }\r\n\r\n inputKeyNavigation(event: KeyboardEvent): void {\r\n if (!(event.code === 'Tab' || event.code === 'Enter' || event.code === 'ArrowDown')) return;\r\n\r\n this.inputObject.listItemSelected = this.inputObject.dropdown?.firstElementChild as HTMLElement;\r\n\r\n if (!this.inputObject.listItemSelected) return;\r\n\r\n this.inputObject.dropdown?.classList.remove('hide');\r\n this.inputObject.listItemSelected.focus();\r\n event.preventDefault();\r\n }\r\n\r\n dropdownKeyNavigation(event: KeyboardEvent): void {\r\n const keyActions: Record void> = {\r\n ArrowDown: () => this.handleArrowKey(true),\r\n ArrowUp: () => this.handleArrowKey(false),\r\n Enter: () => this.selectItem(event),\r\n Space: () => this.selectItem(event),\r\n Tab: () => this.hideDropdown(true),\r\n Escape: () => this.hideDropdown(true),\r\n };\r\n\r\n const action = keyActions[event.code];\r\n if (!action) return;\r\n\r\n action();\r\n event.preventDefault();\r\n }\r\n\r\n handleArrowKey(isDown: boolean): void {\r\n if (this.inputObject.listItemSelected) {\r\n const nextElement = isDown\r\n ? this.inputObject.listItemSelected.nextElementSibling\r\n : this.inputObject.listItemSelected.previousElementSibling;\r\n\r\n if (nextElement instanceof HTMLElement) {\r\n this.inputObject.listItemSelected = nextElement;\r\n }\r\n } else {\r\n this.inputObject.listItemSelected = this.inputObject.dropdown?.firstElementChild as HTMLElement;\r\n }\r\n\r\n if (!this.inputObject.listItemSelected) {\r\n return;\r\n }\r\n\r\n this.inputObject.listItemSelected.focus();\r\n this.setScroller();\r\n }\r\n\r\n hideDropdown(isHidden: boolean = false): void {\r\n if (this.inputObject.dropdown) {\r\n if (!isHidden) {\r\n this.showLoadingAnimation();\r\n this.listWrapper.style.border = 'unset';\r\n }\r\n this.inputObject.dropdown.hidden = isHidden;\r\n }\r\n }\r\n\r\n toggleDropdown() {\r\n if (this.inputObject.dropdown && this.inputObject.dropdown.hasChildNodes()) {\r\n this.inputObject.dropdown.hidden = !this.inputObject.dropdown.hidden;\r\n }\r\n }\r\n\r\n setScroller(): void {\r\n const { dropdown, listItemSelected } = this.inputObject;\r\n\r\n if (!dropdown || !listItemSelected) return;\r\n\r\n const index = Array.from(dropdown.children).indexOf(listItemSelected);\r\n const elHeight = listItemSelected.offsetHeight;\r\n const { scrollTop } = dropdown;\r\n const viewport = scrollTop + dropdown.offsetHeight;\r\n const elOffset = elHeight * index;\r\n\r\n if (elOffset >= scrollTop && (elOffset + elHeight) <= viewport) return;\r\n\r\n dropdown.scrollTop = elOffset;\r\n }\r\n\r\n setInputObject(): void {\r\n if (!this.selectedField?.parentElement?.querySelector(`.${this.listWrapperClassName}`)) {\r\n this.selectedField?.insertAdjacentElement('afterend', this.listWrapper);\r\n }\r\n\r\n this.inputObject.inputField = this.selectedField;\r\n }\r\n\r\n searchZipCity(event: Event): void {\r\n this.selectedField = event.target as HTMLInputElement;\r\n const value = this.selectedField!.value.trim();\r\n\r\n if (value.length < 2) {\r\n this.clearDataTimeout && clearTimeout(this.clearDataTimeout);\r\n this.clearDataTimeout = setTimeout(() => {\r\n this.clearData();\r\n }, 300);\r\n return;\r\n }\r\n\r\n this.lastSearchTerm = value;\r\n\r\n this.setInputObject();\r\n this.timer && clearTimeout(this.timer);\r\n this.timer = setTimeout(() => {\r\n this.callApi(value);\r\n }, 300);\r\n }\r\n\r\n callApi(value: string) {\r\n if (!this.inputObject.dropdown) return;\r\n this.hideDropdown(false);\r\n\r\n if (this.lastSearchTerm !== value) return;\r\n\r\n const zipCity = this.parseZipCity(value);\r\n const apiUrl = `${window.location.origin}/api/portal/v1/zipsearch`;\r\n\r\n const urlObject = new URL(apiUrl);\r\n const { searchParams } = urlObject;\r\n\r\n Object.entries(zipCity).forEach(([key, value]) => {\r\n searchParams.set(key, value);\r\n });\r\n\r\n fetchRequest({\r\n requestURL: urlObject.toString(),\r\n resolveHandler: this.refreshResultList.bind(this),\r\n decodeJSONResponse: false,\r\n });\r\n }\r\n\r\n parseZipCity(value: string) {\r\n let zip: string | number;\r\n let city: string;\r\n\r\n const country: string = this.fieldCountry?.value?.toLowerCase() || 'ch';\r\n\r\n const arr = value.split(' ');\r\n const numberRegex = /^[0-9]+$/;\r\n const regexTest = arr.find((elem) => numberRegex.test(elem));\r\n if (regexTest === undefined) {\r\n zip = '';\r\n } else {\r\n zip = regexTest;\r\n }\r\n\r\n if (!zip) {\r\n if (arr.length > 1) {\r\n zip = +arr[1] || '';\r\n }\r\n }\r\n\r\n zip = zip.toString();\r\n city = value.replace(zip, '').trim();\r\n if (city === 'undefined') {\r\n city = '';\r\n }\r\n\r\n return {\r\n zip,\r\n city,\r\n country,\r\n };\r\n }\r\n\r\n refreshResultList(response: TKResponse): void {\r\n if (!response) return;\r\n this.clearData();\r\n if (Array.isArray(response)) {\r\n response.forEach((element: ZipCityData) => {\r\n const listItemTpl: string = `\r\n `;\r\n\r\n this.inputObject.dropdown!.insertAdjacentHTML('beforeend', listItemTpl);\r\n this.inputObject.data?.push({ zip: element.zip, city: element.city, country: element.country });\r\n });\r\n }\r\n\r\n if (this.inputObject.data!.length === 0) {\r\n const listItemTpl: string = `\r\n
\r\n
\r\n \r\n \r\n \r\n ${zipCityMessages.noMatchFound}\r\n
\r\n
`;\r\n\r\n this.inputObject.dropdown!.insertAdjacentHTML('beforeend', listItemTpl);\r\n }\r\n this.listWrapper.style.border = '';\r\n this.loadingSpinnerTimeout && clearTimeout(this.loadingSpinnerTimeout);\r\n this.inputObject.dropdown!.hidden = false;\r\n }\r\n\r\n selectItem(event: Event): void {\r\n let selectedItem: HTMLElement = event.target as HTMLElement;\r\n selectedItem = selectedItem.closest('[data-tk-zip]') as HTMLElement;\r\n\r\n if (!selectedItem) return;\r\n const zip = selectedItem.getAttribute('data-tk-zip') as string;\r\n const city = selectedItem.getAttribute('data-tk-city') as string;\r\n const country = selectedItem.getAttribute('data-tk-country') as string;\r\n\r\n if (this.fieldZip) {\r\n this.fieldZip.value = zip;\r\n }\r\n if (this.fieldCity) {\r\n this.fieldCity.value = city;\r\n }\r\n if (this.fieldCountry) {\r\n this.fieldCountry.value = country;\r\n }\r\n\r\n this.inputObject.inputField!.focus();\r\n this.clearData();\r\n }\r\n\r\n clearFormFields(): void {\r\n this.clearData();\r\n this.fieldCity!.value = '';\r\n this.fieldZip!.value = '';\r\n }\r\n\r\n clearData(): void {\r\n if (this.inputObject.dropdown) {\r\n this.hideDropdown(true);\r\n this.inputObject.dropdown.replaceChildren();\r\n }\r\n this.inputObject.data = [];\r\n }\r\n\r\n showLoadingAnimation() {\r\n this.loadingSpinnerTimeout && clearTimeout(this.loadingSpinnerTimeout);\r\n this.loadingSpinnerTimeout = setTimeout(() => {\r\n this.listWrapper.innerHTML = `\r\n
\r\n
\r\n
`;\r\n }, 300);\r\n }\r\n\r\n static async isValidZipCity(form: HTMLFormElement): Promise {\r\n const apiUrl = `${window.location.origin}/api/portal/v1/zipsearch`;\r\n const zipCityElem = {\r\n country: form.querySelector('[data-tk-zip-country]') as HTMLInputElement || '',\r\n zip: form.querySelector('[data-tk-zip-zip]') as HTMLInputElement || '',\r\n city: form.querySelector('[data-tk-zip-city]') as HTMLInputElement || '',\r\n };\r\n\r\n const zipCityValue: ZipCityData = {\r\n country: zipCityElem.country.value,\r\n zip: zipCityElem.zip.value,\r\n city: zipCityElem.city.value,\r\n };\r\n\r\n const urlObject = new URL(apiUrl);\r\n const { searchParams } = urlObject;\r\n\r\n Object.entries(zipCityValue).forEach(([key, value]) => {\r\n searchParams.set(key, value);\r\n });\r\n\r\n return new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: urlObject.toString(),\r\n decodeJSONResponse: false,\r\n resolveHandler: (response: TKResponse) => {\r\n let isValid = false;\r\n if (Array.isArray(response)) {\r\n response.some((item: ZipCityData) => {\r\n isValid = TKFormZipCity.shallowObjectEquality(zipCityValue, item);\r\n\r\n return isValid;\r\n });\r\n }\r\n resolve(isValid);\r\n },\r\n });\r\n });\r\n }\r\n\r\n static shallowObjectEquality(object1: ZipCityData, object2: ZipCityData): boolean {\r\n const keys1 = Object.keys(object1);\r\n const keys2 = Object.keys(object2);\r\n let isEqual = true;\r\n\r\n if (keys1.length !== keys2.length) {\r\n isEqual = false;\r\n return isEqual;\r\n }\r\n\r\n keys1.forEach((key) => {\r\n if (object1[key as keyof ZipCityData] !== object2[key as keyof ZipCityData]) {\r\n isEqual = false;\r\n return isEqual;\r\n }\r\n });\r\n return isEqual;\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\nexport default class TKTabsTab extends TKCustomElementFactory {\r\n selectorTabsHead: string = '[data-tk-tab-head]';\r\n selectorTabsBody: string = '[data-tk-tab-body]';\r\n activeClassName: string;\r\n initialTabIndex: number;\r\n tabList?: HTMLCollection;\r\n tabContentList?: HTMLCollection;\r\n enableLinks: boolean;\r\n\r\n constructor() {\r\n super();\r\n const tabHead = this.querySelector(this.selectorTabsHead);\r\n const tabBody = this.querySelector(this.selectorTabsBody);\r\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-tabs-tab--active';\r\n this.initialTabIndex = Number(this.getAttribute('data-tk-initial-tab')) || 1;\r\n this.enableLinks = this.hasAttribute('data-tk-enable-links');\r\n\r\n if (!tabHead) {\r\n throw new Error('TK: Missing Tab-Header');\r\n }\r\n\r\n if (!tabBody) {\r\n throw new Error('TK: Missing Tab-Body');\r\n }\r\n\r\n this.tabList = tabHead.childElementCount > 0 ? tabHead.children : undefined;\r\n this.tabContentList = tabBody.childElementCount > 0 ? tabBody.children : undefined;\r\n\r\n if (!this.tabList) {\r\n throw new Error('TK: Empty Tab-Header');\r\n }\r\n\r\n if (!this.tabContentList) {\r\n throw new Error('TK: Empty Tab-Content');\r\n }\r\n\r\n if (this.tabList.length !== this.tabContentList.length && !this.enableLinks) {\r\n throw new Error('TK: Tab-Header Elements and Tab-Content Elements must be equal');\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.registerListener();\r\n if (this.tabList && +this.initialTabIndex > 0) {\r\n const button = this.tabList.item(this.initialTabIndex - 1) as HTMLButtonElement;\r\n this.setTabActive(button, this.initialTabIndex - 1);\r\n }\r\n }\r\n\r\n registerListener(): void {\r\n if (this.tabList) {\r\n [...this.tabList].forEach((element, index) => {\r\n const button = element as HTMLButtonElement;\r\n const eventHandler = this.setTabActive.bind(this, button, index);\r\n this.pushListener({ event: 'click', element: button, action: eventHandler });\r\n });\r\n }\r\n }\r\n\r\n setTabActive(button: HTMLButtonElement, index: number): void {\r\n const input = button.querySelector('input');\r\n if ((input && input.disabled) || button.disabled) return;\r\n const item = this.tabContentList?.item(index);\r\n if (!item) {\r\n const url = button.getAttribute('data-tk-url');\r\n const target = button.getAttribute('target') || undefined;\r\n if (!url) return;\r\n window.open(url, target);\r\n } else {\r\n this.setTabInactive();\r\n button.classList.add(this.activeClassName);\r\n item.classList.add(this.activeClassName);\r\n }\r\n this.toggleRequiredAttribute(index);\r\n }\r\n\r\n setTabInactive(): void {\r\n if (!this.tabContentList) return;\r\n [...this.tabContentList].forEach((element, index) => {\r\n const button = element as HTMLButtonElement;\r\n button.classList.remove(this.activeClassName);\r\n const item = this.tabList?.item(index);\r\n if (!item) return;\r\n item.classList.remove(this.activeClassName);\r\n });\r\n }\r\n\r\n toggleRequiredAttribute(index: number) {\r\n if (!this.tabContentList) return;\r\n const currentElement = this.tabContentList.item(index);\r\n const contentList = Array.from(this.tabContentList);\r\n const filteredList = contentList.filter((element) => element !== currentElement);\r\n filteredList.forEach((element) => {\r\n const fieldElements = element.querySelectorAll('input[required]');\r\n fieldElements.forEach((fieldElement) => {\r\n fieldElement.required = false;\r\n fieldElement.setAttribute('data-tk-is-required', '');\r\n });\r\n });\r\n const fieldElements = currentElement?.querySelectorAll('input[data-tk-is-required]');\r\n fieldElements?.forEach((fieldElement) => {\r\n fieldElement.required = true;\r\n fieldElement.removeAttribute('data-tk-is-required');\r\n });\r\n }\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\nimport { RectangleItem, isOutsideShapes } from '@tk/utilities/tk.shape.detector';\r\n\r\ninterface QuantityResponse {\r\n quantity: number;\r\n}\r\n\r\nexport default class TKMinibasket extends TKCustomElementFactory {\r\n headerButton?: HTMLButtonElement;\r\n overlay?: HTMLElement;\r\n contentWrapper?: HTMLUListElement;\r\n countItemsRequestURL?: string;\r\n getContentRequestURL?: string;\r\n headerButtonEmptyClassName: string;\r\n openClassName: string;\r\n isDataFetched: boolean = false;\r\n offset: number;\r\n minDistanceToBorder: number;\r\n\r\n // Custom Events\r\n openedEventName: TKCustomEventMap;\r\n openedEvent: CustomEvent;\r\n closedEventName: TKCustomEventMap;\r\n closedEvent: CustomEvent;\r\n updateEventName: TKCustomEventMap;\r\n updateEvent: CustomEvent;\r\n\r\n static observedAttributes = ['data-count'];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.headerButton = this.querySelector('[data-tk-header-button]') || undefined;\r\n this.overlay = this.querySelector('[data-tk-minibasket-overlay]') || undefined;\r\n this.contentWrapper = this.querySelector('[data-tk-minibasket-content]') || undefined;\r\n this.countItemsRequestURL = this.getAttribute('data-tk-count-items-request-url') || undefined;\r\n this.getContentRequestURL = this.getAttribute('data-tk-get-content-request-url') || undefined;\r\n this.headerButtonEmptyClassName = this.getAttribute('data-tk-header-button-empty-class-name')\r\n || 'tk-button__header--empty';\r\n this.offset = Number(this.getAttribute('data-tk-minibasket-offset')) || 4;\r\n this.openClassName = this.getAttribute('data-tk-open-class-name') || 'tk-minibasket--open';\r\n this.minDistanceToBorder = Number(this.getAttribute('data-tk-min-distance-to-border')) || 5;\r\n\r\n // Custom Events\r\n this.openedEventName = (\r\n this.getAttribute('data-tk-event-opened-name') || 'tk-minibasket-opened'\r\n ) as TKCustomEventMap;\r\n this.openedEvent = new CustomEvent(this.openedEventName);\r\n this.closedEventName = (\r\n this.getAttribute('data-tk-event-closed-name') || 'tk-minibasket-closed'\r\n ) as TKCustomEventMap;\r\n this.closedEvent = new CustomEvent(this.closedEventName);\r\n this.updateEventName = (\r\n this.getAttribute('data-tk-event-update-name') || 'tk-minibasket-update'\r\n ) as TKCustomEventMap;\r\n this.updateEvent = new CustomEvent(this.updateEventName);\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.headerButton) throw new Error('Minibasket: Header Button is missing!');\r\n if (\r\n !this.countItemsRequestURL\r\n || !this.getContentRequestURL\r\n ) {\r\n throw new Error('Minibasket: Request URLs are missing!');\r\n }\r\n this.registerInitializeListener();\r\n this.fetchQuantity();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\r\n if (name === 'data-count') {\r\n this.setCounter(Number(newValue));\r\n }\r\n }\r\n\r\n registerInitializeListener(): void {\r\n const handleOpen = this.open.bind(this);\r\n this.pushListener({ event: 'click', element: this.headerButton!, action: handleOpen });\r\n\r\n const handleOpened = this.opened.bind(this);\r\n this.pushListener({ event: this.openedEventName, element: this, action: handleOpened });\r\n\r\n const handleUpdate = this.update.bind(this);\r\n this.pushListener({ event: this.updateEventName, element: this, action: handleUpdate });\r\n }\r\n\r\n registerCloseListener(): void {\r\n const handleClose = this.close.bind(this);\r\n this.pushListener({ event: 'click', element: window, action: handleClose });\r\n }\r\n\r\n registerScrollListener(): void {\r\n const handleScroll = this.alignOverlayToButton.bind(this);\r\n this.pushListener({ event: 'scroll', element: window, action: handleScroll });\r\n }\r\n\r\n open() {\r\n document.body.insertAdjacentElement('beforeend', this.overlay!);\r\n this.overlay!.classList.add(this.openClassName);\r\n this.alignOverlayToButton();\r\n !this.isDataFetched && this.fetchAll();\r\n this.dispatchEvent(this.openedEvent);\r\n }\r\n\r\n opened() {\r\n // This method would be used to execute code in a non-blocking way to prevent potential delays.\r\n setTimeout(() => {\r\n this.registerCloseListener();\r\n this.registerScrollListener();\r\n }, 0);\r\n }\r\n\r\n update() {\r\n this.fetchQuantity();\r\n this.fetchAll();\r\n }\r\n\r\n close(event: MouseEvent) {\r\n if (!this.overlay) return;\r\n const headerButtonRect = this.headerButton!.getBoundingClientRect();\r\n const overlayRect = this.overlay!.getBoundingClientRect();\r\n const rectangles = [\r\n { rectangle: headerButtonRect },\r\n { rectangle: overlayRect },\r\n ] as RectangleItem[];\r\n if (isOutsideShapes(event, rectangles)) {\r\n this.overlay!.classList.remove(this.openClassName);\r\n this.dispatchEvent(this.closedEvent);\r\n this.removeListener(window);\r\n }\r\n }\r\n\r\n fetchAll() {\r\n Promise.all([\r\n TKMinibasket.fetchData(this.getContentRequestURL!),\r\n ]).then((responses) => {\r\n this.isDataFetched = true;\r\n this.placeContent(responses[0]);\r\n }).catch(() => {\r\n this.isDataFetched = false;\r\n });\r\n }\r\n\r\n fetchQuantity(): void {\r\n fetchRequest({\r\n requestURL: this.countItemsRequestURL!,\r\n resolveHandler: this.getQuantity.bind(this),\r\n });\r\n }\r\n\r\n static fetchData(url: string): Promise> {\r\n return new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: (response: TKResponse) => {\r\n resolve(response);\r\n },\r\n });\r\n });\r\n }\r\n\r\n getQuantity(response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n const { quantity } = response.dataAsJson;\r\n this.setCounter(quantity);\r\n }\r\n\r\n setCounter(quantity: number) {\r\n if (quantity === 0) {\r\n this.headerButton?.classList.add(this.headerButtonEmptyClassName);\r\n } else {\r\n this.headerButton?.setAttribute('data-count', `${quantity || 0}`);\r\n this.headerButton?.classList.remove(this.headerButtonEmptyClassName);\r\n }\r\n }\r\n\r\n placeContent(response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n if (!this.contentWrapper) return;\r\n const items = render(response.dataAsHtml);\r\n this.contentWrapper.innerHTML = '';\r\n this.contentWrapper.insertAdjacentHTML('beforeend', items.innerHTML);\r\n }\r\n\r\n alignOverlayToButton() {\r\n const { bottom, right } = this.headerButton!.getBoundingClientRect();\r\n const { width } = this.overlay!.getBoundingClientRect();\r\n const distanceToBorder = right - width;\r\n\r\n this.overlay!.style.top = `${bottom + this.offset}px`;\r\n\r\n if (distanceToBorder >= this.minDistanceToBorder) {\r\n this.overlay!.style.left = `${right - width}px`;\r\n } else {\r\n this.overlay!.style.left = '50%';\r\n this.overlay!.style.transform = 'translateX(-50%)';\r\n }\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\ninterface CustomElementAccordionIcon {\r\n iconAdd: string;\r\n iconRemove: string;\r\n}\r\n\r\nexport default class TKTabsAccordion extends TKCustomElementFactory {\r\n activeClassName: string;\r\n accordionHead?: HTMLDivElement;\r\n accordionBody?: HTMLDivElement;\r\n accordionIcon?: HTMLElement;\r\n triggerArea?: Element;\r\n accordionIcons: CustomElementAccordionIcon;\r\n isActive: boolean;\r\n isHeaderLink?: boolean;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.accordionHead = this.querySelector('[data-tk-accordion-head]') || undefined;\r\n this.accordionBody = this.querySelector('[data-tk-accordion-body]') || undefined;\r\n this.accordionIcon = this.querySelector('[data-tk-accordion-icon]') || undefined;\r\n this.accordionIcons = {\r\n iconAdd: this.getAttribute('data-tk-icon-open') || 'tk-icon-add',\r\n iconRemove: this.getAttribute('data-tk-icon-collapse') || 'tk-icon-remove',\r\n };\r\n this.isActive = this.hasAttribute('data-tk-accordion-is-active');\r\n this.isHeaderLink = this.accordionHead && this.accordionHead.hasAttribute('data-tk-accordion-link');\r\n this.activeClassName = this.getAttribute('data-tk-active-class-name') || 'tk-tabs-accordion--active';\r\n }\r\n\r\n connectedCallback(): void {\r\n if (\r\n (!this.accordionHead\r\n || !this.accordionBody\r\n || !this.accordionIcon)\r\n && !this.isHeaderLink\r\n ) throw new Error('Accordion: Elements are missing!');\r\n\r\n this.setAccordionState(this.isActive);\r\n this.registerListener();\r\n }\r\n\r\n registerListener(): void {\r\n const eventHandler = this.toggleEvent.bind(this);\r\n this.pushListener({ event: 'click', element: this.accordionHead!, action: eventHandler });\r\n }\r\n\r\n toggleEvent(): void {\r\n this.toggleMarkupElements();\r\n }\r\n\r\n toggleMarkupElements(): void {\r\n this.classList.toggle(this.activeClassName);\r\n this.accordionIcon?.classList.toggle(this.accordionIcons.iconAdd);\r\n this.accordionIcon?.classList.toggle(this.accordionIcons.iconRemove);\r\n }\r\n\r\n setAccordionState(isActive: boolean): void {\r\n if (isActive) {\r\n this.classList.toggle(this.activeClassName);\r\n this.accordionIcon?.classList.add(this.accordionIcons.iconRemove);\r\n } else {\r\n this.accordionIcon?.classList.add(this.accordionIcons.iconAdd);\r\n }\r\n }\r\n}\r\n","import { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\n\r\n/**\r\n * data-tk-dialog-jump-forward\r\n * data-tk-dialog-jump-backward\r\n * data-tk-dialog-jump-to\r\n * data-tk-dialog-close\r\n * data-tk-dialog-close-and-reset\r\n * data-tk-close-on-backdrop-click\r\n */\r\n\r\nenum DialogActions {\r\n JUMP_FORWARD = 'jump_forward',\r\n JUMP_BACKWARD = 'jump_backward',\r\n JUMP_TO = 'jump_to',\r\n RESET_FORM = 'reset_form',\r\n}\r\n\r\ninterface DialogItem {\r\n url: string;\r\n dialog: HTMLDialogElement;\r\n}\r\n\r\ninterface RenderedDialog {\r\n className?: string;\r\n closeClassName?: string;\r\n innerClassName?: string;\r\n content?: string;\r\n isConfirm?: boolean;\r\n confirmURL?: string;\r\n confirmTitle?: string;\r\n confirmDescription?: string;\r\n confirmCancelIcon?: string;\r\n confirmCancelLabel?: string;\r\n confirmSubmitIcon?: string;\r\n confirmSubmitLabel?: string;\r\n}\r\n\r\nexport default class TKDialog extends TKCustomElementFactory {\r\n protected dialogs: DialogItem[] = [];\r\n protected currentDialog: number = 0;\r\n\r\n url?: string;\r\n button?: HTMLButtonElement;\r\n shouldOpen: boolean = false;\r\n closeOnBackdropClick: boolean = true;\r\n dialogClassName: string;\r\n dialogInnerClassName: string;\r\n dialogCloseClassName: string;\r\n shouldMaxWidth: boolean;\r\n maxWidthClassName: string;\r\n formDataString?: string;\r\n isPopup: boolean;\r\n isConfirm: boolean;\r\n confirmTitle?: string;\r\n confirmDescription?: string;\r\n confirmCancelIcon?: string;\r\n confirmCancelLabel?: string;\r\n confirmSubmitIcon?: string;\r\n confirmSubmitLabel?: string;\r\n forceReloadContent:boolean;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.url = this.getAttribute('data-tk-url') || undefined;\r\n this.button = this.querySelector('button') || undefined;\r\n this.shouldOpen = this.hasAttribute('data-tk-open');\r\n this.closeOnBackdropClick = this.hasAttribute('data-tk-close-on-backdrop-click')\r\n ? JSON.parse(this.getAttribute('data-tk-close-on-backdrop-click')!) : true;\r\n this.shouldMaxWidth = this.hasAttribute('data-tk-should-max-width');\r\n this.dialogClassName = this.getAttribute('data-tk-dialog-class-name') || 'tk-dialog';\r\n this.dialogInnerClassName = this.getAttribute('data-tk-dialog-inner-class-name') || 'tk-dialog__inner';\r\n this.dialogCloseClassName = this.getAttribute('data-tk-dialog-close-class-name')\r\n || 'tk-button tk-button--tertiary tk-button--only-icon tk-dialog__close';\r\n this.maxWidthClassName = this.getAttribute('data-tk-max-width-class-name') || 'tk-dialog--max-width';\r\n this.formDataString = this.getAttribute('data-tk-form-data') || undefined;\r\n this.isPopup = this.hasAttribute('data-tk-is-popup');\r\n this.isConfirm = this.hasAttribute('data-tk-is-confirm');\r\n this.confirmTitle = this.getAttribute('data-tk-confirm-title') || undefined;\r\n this.confirmDescription = this.getAttribute('data-tk-confirm-description') || undefined;\r\n this.confirmCancelIcon = this.getAttribute('data-tk-confirm-cancel-icon') || 'cross';\r\n this.confirmCancelLabel = this.getAttribute('data-tk-confirm-cancel-label') || undefined;\r\n this.confirmSubmitIcon = this.getAttribute('data-tk-confirm-submit-icon') || 'check';\r\n this.confirmSubmitLabel = this.getAttribute('data-tk-confirm-submit-label') || undefined;\r\n this.forceReloadContent = this.hasAttribute('data-tk-force-reload-content');\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.url) throw new Error('Dialog: URL is missing!');\r\n this.registerClickListener();\r\n this.checkAutoOpen();\r\n }\r\n\r\n registerClickListener(): void {\r\n if (!this.button) return;\r\n const onClick = this.openDialog.bind(this, this.url!);\r\n this.pushListener({ event: 'click', element: this.button, action: onClick });\r\n }\r\n\r\n registerFormListener(form: HTMLFormElement): void {\r\n const onSubmit = this.handleForm.bind(this, form);\r\n this.pushListener({ event: 'submit', element: form, action: onSubmit });\r\n }\r\n\r\n registerCloseListener(): void {\r\n const onClick = this.closeDialog.bind(this);\r\n this.pushListener({ event: 'click', element: window, action: onClick });\r\n }\r\n\r\n createDialog(url: string): HTMLDialogElement {\r\n const dialog = TKDialog.renderDialog({\r\n className: `${this.dialogClassName} ${this.shouldMaxWidth ? this.maxWidthClassName : ''}`,\r\n closeClassName: this.dialogCloseClassName,\r\n innerClassName: this.dialogInnerClassName,\r\n tag: 'dialog',\r\n isConfirm: this.isConfirm,\r\n confirmURL: url,\r\n confirmTitle: this.confirmTitle,\r\n confirmDescription: this.confirmDescription,\r\n confirmCancelIcon: this.confirmCancelIcon,\r\n confirmCancelLabel: this.confirmCancelLabel,\r\n confirmSubmitIcon: this.confirmSubmitIcon,\r\n confirmSubmitLabel: this.confirmSubmitLabel,\r\n });\r\n const onClosed = this.closedDialog.bind(this);\r\n this.pushListener({ event: 'close', element: dialog, action: onClosed });\r\n this.currentDialog = this.dialogs.push({ url, dialog }) - 1;\r\n return dialog;\r\n }\r\n\r\n getContent(url: string): void {\r\n if (this.isConfirm) {\r\n this.closeCurrentDialog();\r\n const dialog = this.createDialog(url);\r\n this.isPopup ? dialog.show() : dialog.showModal();\r\n this.hookAfterShowModal(dialog);\r\n } else {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n });\r\n }\r\n }\r\n\r\n getContentWithData(url: string, payload: Record): void {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n payload,\r\n });\r\n }\r\n\r\n handleResponseSuccess(url: string, response: TKResponse): void {\r\n if (!response || !response.success) return;\r\n this.closeCurrentDialog();\r\n const dialog = this.createDialog(url);\r\n const content = dialog.querySelector('[data-tk-dialog-content]');\r\n if (!content) return;\r\n content.innerHTML = response.dataAsHtml;\r\n this.isPopup ? dialog.show() : dialog.showModal();\r\n this.hookAfterShowModal(dialog);\r\n const form = content.querySelector('form');\r\n form && this.registerFormListener(form);\r\n }\r\n\r\n openDialog(url: string) {\r\n this.handleUrlAndDialogs(url);\r\n // This method would be used to execute code in a non-blocking way to prevent potential delays.\r\n setTimeout(() => {\r\n this.registerCloseListener();\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n closeDialog(event: any): void {\r\n const dialogItem = this.dialogs.at(this.currentDialog);\r\n // Used to check if the event isn't triggered by the enter key\r\n const isRealClickEvent = event.pointerId !== -1;\r\n\r\n if (!dialogItem || !isRealClickEvent) return;\r\n const { dialog } = dialogItem;\r\n if (this.closeOnBackdropClick) {\r\n TKDialog.closeDialogIfOutside(dialog, event);\r\n }\r\n }\r\n\r\n hookAfterShowModal(dialog: HTMLDialogElement): void {\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-close]',\r\n () => dialog.close(),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-close-and-reset]',\r\n (button) => this.handleActions(DialogActions.RESET_FORM, button),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-jump-forward]',\r\n (button) => this.handleActions(DialogActions.JUMP_FORWARD, button),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-jump-backward]',\r\n (button) => this.handleActions(DialogActions.JUMP_BACKWARD, button),\r\n );\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-jump-to]',\r\n (button) => this.handleActions(DialogActions.JUMP_TO, button),\r\n );\r\n }\r\n\r\n static attachButtonClickHandler(\r\n dialog: T,\r\n selector: string,\r\n callback: (button: HTMLButtonElement) => void,\r\n ): void {\r\n const buttons = dialog.querySelectorAll(selector);\r\n buttons.forEach((button) => {\r\n button.addEventListener('click', () => callback(button));\r\n });\r\n }\r\n\r\n handleActions(action: DialogActions, button: HTMLButtonElement) {\r\n const handler: Record void> = {\r\n jump_forward: () => this.forward(button),\r\n jump_backward: () => this.backward(),\r\n jump_to: () => this.jumpTo(button),\r\n reset_form: () => this.resetForm(button),\r\n };\r\n handler[action]();\r\n }\r\n\r\n closeCurrentDialog() {\r\n const dialogItem = this.dialogs.at(this.currentDialog);\r\n if (!dialogItem) return;\r\n dialogItem.dialog.close();\r\n }\r\n\r\n handleUrlAndDialogs(url: string) {\r\n const existsURL = this.dialogs.some((dialogItem) => dialogItem.url === url);\r\n if (existsURL) {\r\n const nextDialog = this.getDialogByURL(url);\r\n if (!nextDialog) return;\r\n const waitForContent = this.forceReloadContent;\r\n if (this.forceReloadContent) {\r\n this.renewDialogContent(nextDialog, url);\r\n }\r\n if (waitForContent) return;\r\n nextDialog.showModal();\r\n } else {\r\n try {\r\n const payload = JSON.parse(this.formDataString || '{}');\r\n Object.keys(payload).length > 0 ? this.getContentWithData(url, payload) : this.getContent(url);\r\n } catch (error) {\r\n throw new Error(`Dialog: ${error}`);\r\n }\r\n }\r\n }\r\n\r\n forward(button: HTMLButtonElement) {\r\n // Check if already exists\r\n const url = button.getAttribute('data-tk-url');\r\n if (!url) throw new Error('Dialog: URL is missing!');\r\n this.closeCurrentDialog();\r\n this.handleUrlAndDialogs(url);\r\n this.currentDialog += 1;\r\n }\r\n\r\n backward() {\r\n const nextDialogItem = this.dialogs.at(this.currentDialog - 1);\r\n if (!nextDialogItem) return;\r\n this.closeCurrentDialog();\r\n nextDialogItem.dialog.showModal();\r\n this.currentDialog -= 1;\r\n }\r\n\r\n jumpTo(button: HTMLButtonElement) {\r\n const index = Number(button.getAttribute('data-tk-dialog-jump-to'));\r\n const nextDialogItem = this.dialogs.at(index);\r\n if (!nextDialogItem) return;\r\n this.closeCurrentDialog();\r\n nextDialogItem.dialog.showModal();\r\n this.currentDialog = index;\r\n }\r\n\r\n resetForm(button: HTMLButtonElement) {\r\n button.form?.reset();\r\n this.closeCurrentDialog();\r\n }\r\n\r\n handleForm(form: HTMLFormElement, event: SubmitEvent): void {\r\n const shouldSwitchToNext = form.hasAttribute('data-tk-switch-to-next');\r\n if (!shouldSwitchToNext) return;\r\n event.preventDefault();\r\n const formData = new FormData(form);\r\n const url = form.action;\r\n\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.handleResponseSuccess.bind(this, url),\r\n payload: formData,\r\n });\r\n }\r\n\r\n getDialogByURL(url: string): HTMLDialogElement | undefined {\r\n const dialogItem = this.dialogs.find((item) => item.url === url);\r\n return dialogItem?.dialog;\r\n }\r\n\r\n closedDialog(): void {\r\n const allDialogClosed = this.dialogs.every((item) => !item.dialog.open);\r\n if (!allDialogClosed) return;\r\n this.currentDialog = 0;\r\n this.removeListener(window);\r\n }\r\n\r\n static renderDialog(\r\n options: RenderedDialog & { tag: keyof HTMLElementTagNameMap },\r\n ): T {\r\n const {\r\n tag,\r\n className = 'tk-dialog',\r\n closeClassName = 'tk-button tk-button--tertiary tk-button--only-icon tk-dialog__close',\r\n innerClassName = 'tk-dialog__inner',\r\n content,\r\n isConfirm = false,\r\n confirmURL,\r\n confirmTitle,\r\n confirmDescription,\r\n confirmCancelIcon,\r\n confirmCancelLabel,\r\n confirmSubmitIcon,\r\n confirmSubmitLabel,\r\n } = options;\r\n\r\n const dialog = render(`\r\n ${isConfirm ? `\r\n <${tag} class=\"${className}\">\r\n \r\n
\r\n
\r\n

${confirmTitle}

\r\n

${confirmDescription}

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n ` : `\r\n <${tag} class=\"${className}\">\r\n \r\n
\r\n ${content}\r\n
\r\n \r\n `}\r\n `);\r\n document.body.insertAdjacentElement('beforeend', dialog);\r\n TKDialog.attachButtonClickHandler(\r\n dialog,\r\n '[data-tk-dialog-close]',\r\n () => TKDialog.close(dialog),\r\n );\r\n return dialog;\r\n }\r\n\r\n static open(element: T, isPopup = false) {\r\n if (element instanceof HTMLDialogElement) {\r\n isPopup ? element.show() : element.showModal();\r\n } else {\r\n element.classList.add('tk-dialog--open');\r\n }\r\n }\r\n\r\n static close(element: T) {\r\n if (element instanceof HTMLDialogElement) {\r\n element.close();\r\n } else {\r\n element.classList.remove('tk-dialog--open');\r\n element.dispatchEvent(new Event('close'));\r\n }\r\n }\r\n\r\n static closeDialogIfOutside(element: HTMLDialogElement, event: MouseEvent) {\r\n /**\r\n * Checking the coordinates of the client for the value 0 and the\r\n * HTMLSelectElement or HTMLOptionElement element ensures that the\r\n * dialogue does not close in Mozilla. This is a bug in Firefox\r\n * that has not yet been fixed.\r\n */\r\n if (\r\n event.clientX === 0\r\n && event.clientY === 0\r\n && (event.target instanceof HTMLSelectElement || event.target instanceof HTMLOptionElement)\r\n ) return;\r\n const dialogDimensions = element.getBoundingClientRect();\r\n if (\r\n event.clientX < dialogDimensions.left\r\n || event.clientX > dialogDimensions.right\r\n || event.clientY < dialogDimensions.top\r\n || event.clientY > dialogDimensions.bottom\r\n ) {\r\n element.close();\r\n }\r\n }\r\n\r\n checkAutoOpen() : void {\r\n if (this.shouldOpen) {\r\n this.openDialog(this.url!);\r\n }\r\n }\r\n\r\n renewDialogContent(dialog: HTMLDialogElement, url: string) {\r\n fetchRequest({\r\n requestURL: url,\r\n resolveHandler: this.getRenewDialogContent.bind(this, dialog),\r\n });\r\n }\r\n\r\n getRenewDialogContent(openDialog: HTMLDialogElement, response: TKResponse) {\r\n const dialogInner = openDialog.querySelector('[data-tk-dialog-content]');\r\n dialogInner!.innerHTML = response.dataAsHtml;\r\n openDialog.showModal();\r\n this.hookAfterShowModal(openDialog);\r\n }\r\n}\r\n","import TKManager from '@tk/basiscs/tk.manager';\r\n\r\ninterface ActionItem {\r\n id: string;\r\n affiliation: string;\r\n revenue: string;\r\n tax: string;\r\n shipping: string;\r\n}\r\n\r\ninterface ProductItem {\r\n id: string;\r\n name: string;\r\n brand: string;\r\n category: string;\r\n price: string;\r\n quantity: string;\r\n position: string;\r\n}\r\n\r\nexport default class NSManager extends TKManager {\r\n constructor() {\r\n super();\r\n }\r\n\r\n getPurchaseData() {\r\n return {\r\n event: 'event-purchase-ga4',\r\n ecommerce: {\r\n purchase: {\r\n actionField: this.getActionData(),\r\n products: this.getProductData(),\r\n },\r\n },\r\n };\r\n }\r\n\r\n getActionData() {\r\n const affiliation = this.querySelector('[data-tk-otm-affiliation]');\r\n const revenue = this.querySelector('[data-tk-otm-revenue]');\r\n const tax = this.querySelector('[data-tk-otm-tax]');\r\n const shipping = this.querySelector('[data-tk-otm-shipping]');\r\n const currency = this.querySelector('[data-tk-otm-currency]');\r\n return {\r\n id: this.basketId!.innerText,\r\n affiliation: affiliation ? affiliation.innerText : '',\r\n revenue: revenue ? revenue.innerText : '',\r\n tax: tax ? tax.innerText : '',\r\n shipping: shipping ? shipping.innerText : '',\r\n currency: currency ? currency.innerText : '',\r\n } as ActionItem;\r\n }\r\n\r\n getProductData() {\r\n const data: ProductItem[] = [];\r\n const items = this.querySelectorAll('[data-tk-otm-item]');\r\n Array.from(items).forEach((item) => {\r\n const id = item.querySelector('.otm-id');\r\n const name = item.querySelector('.otm-name');\r\n const brand = item.querySelector('.otm-brand');\r\n const category = item.querySelector('.otm-category');\r\n const price = item.querySelector('.otm-price');\r\n const quantity = item.querySelector('.otm-quantity');\r\n const position = item.querySelector('.otm-position');\r\n data.push({\r\n id: id ? id.innerText : '',\r\n name: name ? name.innerText : '',\r\n brand: brand ? brand.innerText : '',\r\n category: category ? category.innerText : '',\r\n price: price ? price.innerText : '',\r\n quantity: quantity ? quantity.innerText : '',\r\n position: position ? position.innerText : '',\r\n });\r\n });\r\n return data;\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { NotificationType, sendNotification } from '@tk/utilities/tk.notification';\r\n\r\ninterface ActionItem {\r\n id: string;\r\n affiliation: string;\r\n revenue: string;\r\n tax: string;\r\n shipping: string;\r\n}\r\n\r\ninterface ProductItem {\r\n id: string;\r\n name: string;\r\n brand: string;\r\n category: string;\r\n price: string;\r\n quantity: string;\r\n position: string;\r\n}\r\n\r\nexport default class TKManager extends TKCustomElementFactory {\r\n messageContainerSelector: string;\r\n basketId?: HTMLElement;\r\n eventName: string;\r\n sessionTimeoutWrapper?: HTMLElement;\r\n sessionTime?: number;\r\n firstItemToScrollInto?: HTMLElement;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.eventName = this.getAttribute('data-tk-event-name') || 'event-purchase';\r\n this.basketId = this.querySelector('[data-tk-otm-basket-id]') || undefined;\r\n this.messageContainerSelector = (\r\n this.getAttribute('data-tk-message-container-selector')\r\n || '[id^=\"wp_messages_container_\"]'\r\n );\r\n this.sessionTimeoutWrapper = this.querySelector('[data-tk-session-timeout-wrapper]') || undefined;\r\n this.sessionTime = Number(this.sessionTimeoutWrapper?.getAttribute('data-tk-session-time') || 0);\r\n this.firstItemToScrollInto = this.querySelector('[data-tk-scroll-into]') || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n this.processNotification();\r\n\r\n this.sessionTimeoutWrapper && this.showSessionTimeout();\r\n\r\n this.firstItemToScrollInto && this.scrollToElement();\r\n\r\n if (!this.basketId || !window.dataLayer) return;\r\n const data = this.getPurchaseData();\r\n data && window.dataLayer.push(data);\r\n }\r\n\r\n processNotification() {\r\n const messageContainer = document.querySelector(this.messageContainerSelector);\r\n if (!messageContainer || !messageContainer.hasChildNodes()) return;\r\n\r\n const infoMessage = messageContainer.querySelectorAll('.Info');\r\n const errorMessage = messageContainer.querySelectorAll('.Error');\r\n const warningMessage = messageContainer.querySelectorAll('.Warning');\r\n const debugMessage = messageContainer.querySelectorAll('.Debug');\r\n\r\n const messageList = Array.from([...infoMessage, ...errorMessage, ...warningMessage, ...debugMessage]);\r\n\r\n const types: Record = {\r\n Info: NotificationType.SUCCESS,\r\n Error: NotificationType.ERROR,\r\n Warning: NotificationType.WARNING,\r\n Debug: NotificationType.INFO,\r\n };\r\n\r\n messageList.forEach((item) => {\r\n const type = types[item.className];\r\n const childList = Array.from(item.firstChild?.childNodes || []);\r\n const message = childList.find((item) => item instanceof Text)?.textContent || '';\r\n const code = item.querySelector('.was-message-code')?.textContent || '';\r\n const addition = item.querySelector('.was-message-addition')?.textContent || '';\r\n const wait = Number(item.querySelector('.was-message-wait')?.textContent) || undefined;\r\n const consoleMessage = `${code}: ${message}} (wait: ${wait} sec.${addition})`;\r\n\r\n sendNotification(type, message, wait, { consoleMessage });\r\n });\r\n messageContainer.remove();\r\n }\r\n\r\n showSessionTimeout() {\r\n setTimeout(() => {\r\n this.sessionTimeoutWrapper!.hidden = false;\r\n }, this.sessionTime);\r\n }\r\n\r\n getPurchaseData() {\r\n return {\r\n event: 'event-purchase',\r\n ecommerce: {\r\n purchase: {\r\n actionField: this.getActionData(),\r\n products: this.getProductData(),\r\n },\r\n },\r\n };\r\n }\r\n\r\n getActionData() {\r\n const affiliation = this.querySelector('[data-tk-otm-affiliation]');\r\n const revenue = this.querySelector('[data-tk-otm-revenue]');\r\n const tax = this.querySelector('[data-tk-otm-tax]');\r\n const shipping = this.querySelector('[data-tk-otm-shipping]');\r\n return {\r\n id: this.basketId!.innerText,\r\n affiliation: affiliation ? affiliation.innerText : '',\r\n revenue: revenue ? revenue.innerText : '',\r\n tax: tax ? tax.innerText : '',\r\n shipping: shipping ? shipping.innerText : '',\r\n } as ActionItem;\r\n }\r\n\r\n getProductData() {\r\n const data: ProductItem[] = [];\r\n const items = this.querySelectorAll('[data-tk-otm-item]');\r\n Array.from(items).forEach((item) => {\r\n const id = item.querySelector('.otm-id');\r\n const name = item.querySelector('.otm-name');\r\n const brand = item.querySelector('.otm-brand');\r\n const category = item.querySelector('.otm-category');\r\n const price = item.querySelector('.otm-price');\r\n const quantity = item.querySelector('.otm-quantity');\r\n const position = item.querySelector('.otm-position');\r\n data.push({\r\n id: id ? id.innerText : '',\r\n name: name ? name.innerText : '',\r\n brand: brand ? brand.innerText : '',\r\n category: category ? category.innerText : '',\r\n price: price ? price.innerText : '',\r\n quantity: quantity ? quantity.innerText : '',\r\n position: position ? position.innerText : '',\r\n });\r\n });\r\n return data;\r\n }\r\n\r\n scrollToElement() {\r\n const { top } = this.firstItemToScrollInto!.getBoundingClientRect();\r\n const offset = Number(this.firstItemToScrollInto?.getAttribute('data-tk-scroll-into-offset')) || 16;\r\n const mainContainer = this.querySelector('main');\r\n const mainRect = mainContainer?.getBoundingClientRect();\r\n const mainRectTop = mainRect?.top || 0;\r\n const scrollY = top - mainRectTop - offset;\r\n setTimeout(() => {\r\n window.scrollTo({ top: scrollY, behavior: 'smooth' });\r\n }, 0);\r\n }\r\n}\r\n","import TKFormElement from '@tk/controls/tk.form.element';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\nexport default class NSFormElement extends TKFormElement {\r\n inputTimeout: number | undefined;\r\n processOnInput: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.processOnInput = this.getAttribute('data-tk-process-on-input') || '';\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n\r\n if (this.processOnInput) {\r\n this.registerInputListener();\r\n }\r\n }\r\n\r\n registerInputListener() {\r\n if (!this.fieldElement) return;\r\n\r\n const onInputHandler = this.onInputChanged.bind(this);\r\n this.pushListener({ event: 'input', element: this.fieldElement, action: onInputHandler });\r\n }\r\n\r\n onInputChanged() {\r\n if (this.inputTimeout) {\r\n clearTimeout(this.inputTimeout);\r\n }\r\n\r\n this.inputTimeout = window.setTimeout(() => {\r\n const data = {\r\n remark: this.fieldElement!.value,\r\n };\r\n fetchRequest({\r\n requestURL: this.processOnInput as string,\r\n resolveHandler: this.refreshContent.bind(this),\r\n payload: data,\r\n });\r\n }, 500);\r\n }\r\n\r\n refreshContent() {\r\n return this;\r\n }\r\n\r\n /**\r\n * For the Material Number Input or forms inside of tables, it is necessary that all surrounding elements have been\r\n * fullyloaded before the Material Number Element itself is displayed.\r\n * This is because the position of the label in the collapsed state\r\n * needs to be calculated for the Material Number Input. This calculation depends on the surrounding elements\r\n */\r\n onDomContentLoaded() {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n this.checkRequiredAttribute();\r\n this.registerAddonClickedListener();\r\n this.registerAddonHoverListener();\r\n this.registerShowPasswordClickedListener();\r\n this.initMaterialInput();\r\n this.observeDisabledAttribute();\r\n if (this.processOnInput) {\r\n this.registerInputListener();\r\n }\r\n });\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\n\r\ntype FieldElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | undefined;\r\ntype AddonType = 'prefix' | 'suffix';\r\n\r\nenum HoverState {\r\n ACTIVE = 'active',\r\n INACTIVE = 'inactive',\r\n}\r\n\r\nexport default class TKFormElement extends TKCustomElementFactory {\r\n fieldElement: FieldElement;\r\n labelElement: HTMLLabelElement | undefined;\r\n isMaterial: boolean;\r\n materialClass: string;\r\n materialNumberInputClass: string;\r\n materialLabelInsideClass: string;\r\n materialSelectFocussedClass: string;\r\n materialLoadedClass: string;\r\n addonElement: HTMLSpanElement | undefined;\r\n addonSuffixDistance: number;\r\n addonPrefixDistance: number;\r\n addonDefaultPadding: number;\r\n isPasswordInput: boolean;\r\n waitForSurroundingContent: HTMLElement | undefined;\r\n disableOnAddonClick: boolean;\r\n onTransitionEnd: () => void;\r\n\r\n constructor() {\r\n super();\r\n this.fieldElement = this.querySelector('input, select, textarea') as FieldElement;\r\n this.labelElement = this.querySelector('label')\r\n || undefined;\r\n this.isMaterial = this.hasAttribute('data-tk-is-material');\r\n this.materialClass = this.getAttribute('data-tk-material-class')\r\n || 'tk-form-material';\r\n this.materialNumberInputClass = this.getAttribute('data-tk-material-number-input-class')\r\n || 'tk-form-material--number';\r\n this.materialLabelInsideClass = this.getAttribute('data-tk-material-label-inside-class')\r\n || 'tk-form-material--label-inside';\r\n this.materialSelectFocussedClass = this.getAttribute('data-tk-material-select-focussed-class')\r\n || 'tk-form-select--focussed';\r\n this.materialLoadedClass = this.getAttribute('data-tk-material-loaded-class')\r\n || 'tk-form-material--loaded';\r\n this.isPasswordInput = this.hasAttribute('data-tk-toggle-password');\r\n this.disableOnAddonClick = this.hasAttribute('data-tk-disable-on-addon-click');\r\n this.addonElement = this.querySelector('[data-tk-addon]')\r\n || undefined;\r\n this.waitForSurroundingContent = (this.closest('[data-wait-for-surrounding-content]') as HTMLElement)\r\n || undefined;\r\n this.addonSuffixDistance = 0;\r\n this.addonPrefixDistance = 0;\r\n this.addonDefaultPadding = parseInt(this.getAttribute('data-tk-addon-default-padding') || '0', 10)\r\n || 4;\r\n this.onTransitionEnd = () => {};\r\n }\r\n\r\n connectedCallback() {\r\n if (this.isNumberInput() || this.waitForSurroundingContent) {\r\n this.onDomContentLoaded();\r\n return;\r\n }\r\n this.checkRequiredAttribute();\r\n this.registerAddonClickedListener();\r\n this.registerAddonHoverListener();\r\n this.registerShowPasswordClickedListener();\r\n this.initMaterialInput();\r\n this.observeDisabledAttribute();\r\n }\r\n\r\n /**\r\n * For the Material Number Input or forms inside of tables, it is necessary that all surrounding elements have been\r\n * fullyloaded before the Material Number Element itself is displayed.\r\n * This is because the position of the label in the collapsed state\r\n * needs to be calculated for the Material Number Input. This calculation depends on the surrounding elements\r\n */\r\n onDomContentLoaded() {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n this.checkRequiredAttribute();\r\n this.registerAddonClickedListener();\r\n this.registerAddonHoverListener();\r\n this.registerShowPasswordClickedListener();\r\n this.initMaterialInput();\r\n this.observeDisabledAttribute();\r\n });\r\n }\r\n\r\n // #region Required\r\n checkRequiredAttribute() {\r\n if (!this.labelElement || !this.fieldElement || !this.fieldElement.hasAttribute('required')) return;\r\n this.labelElement.textContent = `${this.labelElement.textContent} *`;\r\n }\r\n // #endregion\r\n\r\n // #region disabled\r\n observeDisabledAttribute() {\r\n if (!this.fieldElement || !this.labelElement) return;\r\n\r\n // inital check\r\n this.checkDisabledAttribute();\r\n\r\n const observerConfig = { attributes: true, attributeFilter: ['disabled'] };\r\n\r\n const onCheckDiabledAttribute = this.checkDisabledAttribute.bind(this);\r\n\r\n const observer = new MutationObserver(onCheckDiabledAttribute);\r\n observer.observe(this.fieldElement, observerConfig);\r\n }\r\n\r\n checkDisabledAttribute() {\r\n const addDisabledClass = this.fieldElement!.hasAttribute('disabled');\r\n this.classList.toggle('tk-form-input--disabled', addDisabledClass);\r\n }\r\n // #endregion\r\n\r\n // #region Addon\r\n registerAddonClickedListener() {\r\n if (!this.addonElement || this.disableOnAddonClick) return;\r\n\r\n const addonClickHandler = this.onAddonClicked.bind(this);\r\n\r\n this.pushListener({ event: 'click', element: this.addonElement, action: addonClickHandler });\r\n }\r\n\r\n registerAddonHoverListener() {\r\n if (!this.addonElement) return;\r\n const onHoverStartHandler = this.onAddonHover.bind(this, HoverState.ACTIVE);\r\n this.pushListener({ event: 'mouseenter', element: this.addonElement, action: onHoverStartHandler });\r\n const onHoverEndHandler = this.onAddonHover.bind(this, HoverState.INACTIVE);\r\n this.pushListener({ event: 'mouseleave', element: this.addonElement, action: onHoverEndHandler });\r\n }\r\n\r\n onAddonHover(hoverState: HoverState) {\r\n if (\r\n !this.fieldElement\r\n || (!(this.fieldElement instanceof HTMLInputElement)\r\n && !(this.fieldElement instanceof HTMLTextAreaElement))\r\n ) throw new Error('No Input element found');\r\n\r\n this.classList.toggle(\r\n 'tk-form--addon-hover',\r\n (hoverState === HoverState.ACTIVE) && !this.fieldElement.disabled,\r\n );\r\n }\r\n\r\n onAddonClicked() {\r\n if (\r\n !this.fieldElement\r\n || (!(this.fieldElement instanceof HTMLInputElement)\r\n && !(this.fieldElement instanceof HTMLTextAreaElement))\r\n ) throw new Error('No Input element found');\r\n\r\n if (this.isPasswordInput) return;\r\n this.fieldElement.focus();\r\n const lastCharPosition = this.fieldElement.value.length;\r\n const isNumberInput = this.fieldElement.type === 'number';\r\n if (isNumberInput) {\r\n this.fieldElement.setAttribute('type', 'text');\r\n }\r\n this.fieldElement.setSelectionRange(lastCharPosition, lastCharPosition);\r\n if (isNumberInput) {\r\n this.fieldElement.setAttribute('type', 'number');\r\n }\r\n }\r\n\r\n registerShowPasswordClickedListener() {\r\n if (!this.isPasswordInput || !this.addonElement) return;\r\n\r\n const passwordShowClickHandler = this.onPasswordShowClicked.bind(this);\r\n this.pushListener({ event: 'mousedown', element: this.addonElement, action: passwordShowClickHandler });\r\n this.pushListener({ event: 'mouseup', element: this.addonElement, action: passwordShowClickHandler });\r\n this.pushListener({ event: 'touchstart', element: this.addonElement, action: passwordShowClickHandler });\r\n this.pushListener({ event: 'touchend', element: this.addonElement, action: passwordShowClickHandler });\r\n }\r\n\r\n onPasswordShowClicked(event: Event) {\r\n if (\r\n !this.fieldElement\r\n || !(this.fieldElement instanceof HTMLInputElement)\r\n ) throw new Error('Missing input element');\r\n\r\n if (event.type === 'mousedown' || event.type === 'touchstart') {\r\n this.fieldElement.type = 'text';\r\n } else {\r\n this.fieldElement.type = 'password';\r\n }\r\n }\r\n // #endregion\r\n\r\n // #region Material\r\n initMaterialInput() {\r\n if (!this.isMaterial) return;\r\n if (!this.fieldElement) throw new Error('No element found');\r\n\r\n this.classList.add(this.materialClass);\r\n\r\n if (this.isNumberInput()) {\r\n this.classList.add(this.materialNumberInputClass);\r\n }\r\n\r\n this.registerLabelTransitionEndListener();\r\n this.calculateAddonWidth();\r\n this.setMaterialLabelState();\r\n this.registerMaterialValueChangeListener();\r\n this.registerMaterialSelectFocusChangeListener();\r\n }\r\n\r\n /**\r\n * This function is mainly used to check whether a valid value has been\r\n * set for the data-tk-addon attribute\r\n * @returns addonType: string representing the addon type\r\n */\r\n getAddonType() {\r\n if (!this.addonElement) throw new Error('Missing addon');\r\n const addonType = this.addonElement.getAttribute('data-tk-addon') as AddonType;\r\n\r\n if ((addonType !== 'prefix') && (addonType !== 'suffix')) throw new Error('Wrong addon type');\r\n\r\n return addonType;\r\n }\r\n\r\n /**\r\n * Checks whether the element contains a value or not. This information is required\r\n * to determine whether the label should be displayed inside or outside the element.\r\n * @returns isEmptyElement: boolean\r\n */\r\n checkForValue() {\r\n let isEmptyElement;\r\n\r\n if (this.fieldElement instanceof HTMLSelectElement) {\r\n const selectedOption = this.querySelector('option:checked');\r\n const isPlaceholderOption = selectedOption?.hasAttribute('data-tk-empty-option');\r\n isEmptyElement = isPlaceholderOption;\r\n } else {\r\n isEmptyElement = this.fieldElement?.value === '';\r\n }\r\n\r\n return isEmptyElement;\r\n }\r\n\r\n /**\r\n * This function implements the material functionality by displaying the label either\r\n * inside or outside the control, depending on the content\r\n */\r\n setMaterialLabelState() {\r\n // check input value\r\n const isEmptyMaterialInput = this.checkForValue();\r\n\r\n if (isEmptyMaterialInput) {\r\n this.classList.add(this.materialLabelInsideClass);\r\n if (!this.labelElement) throw new Error('Missing label element');\r\n\r\n if (this.isNumberInput()) {\r\n this.setupMaterialNumberLabelStyle();\r\n }\r\n\r\n if (!this.isNumberInput()) {\r\n this.setupMaterialDefaultLabelStyle();\r\n }\r\n } else {\r\n this.classList.remove(this.materialLabelInsideClass);\r\n if (!this.labelElement) throw new Error('Missing label element');\r\n this.labelElement.removeAttribute('style');\r\n }\r\n }\r\n\r\n /**\r\n * This function calculates the label position for a material input that is not of type\r\n * number and where the label is located within the input\r\n */\r\n setupMaterialDefaultLabelStyle() {\r\n if ((this.addonPrefixDistance === 0 && this.addonSuffixDistance === 0)) return;\r\n this.labelElement!.style.marginLeft = this.addonPrefixDistance > 0\r\n ? `${this.addonPrefixDistance + this.addonDefaultPadding}px` : '0px';\r\n this.labelElement!.style.marginRight = this.addonSuffixDistance > 0\r\n ? `${this.addonSuffixDistance + this.addonDefaultPadding}px` : '0px';\r\n this.labelElement!.style.paddingInline = '0';\r\n }\r\n\r\n /**\r\n * This function calculates the label position for a material input of type Number where\r\n * the label is located within the input\r\n */\r\n setupMaterialNumberLabelStyle() {\r\n this.labelElement!.style.paddingInline = '0';\r\n const labelWidthWithPadding = this.labelElement!.getBoundingClientRect().width;\r\n const computedLabelStyle = window.getComputedStyle(this.labelElement!);\r\n const labelPaddingLeft = parseFloat(computedLabelStyle.paddingLeft);\r\n const labelPaddingRight = parseFloat(computedLabelStyle.paddingRight);\r\n const labelWidth = (labelWidthWithPadding - labelPaddingLeft - labelPaddingRight);\r\n\r\n const formControlWidth = this.getBoundingClientRect().width;\r\n\r\n const computetInputStyle = window.getComputedStyle(this.fieldElement!);\r\n const inputPaddingRight = parseFloat(computetInputStyle.paddingRight);\r\n\r\n const addonWidth = (this.addonElement && (this.getAddonType() === 'suffix'))\r\n ? this.addonElement.getBoundingClientRect().width : 0;\r\n\r\n const xOffset = Math.round(formControlWidth - labelWidth - addonWidth - inputPaddingRight);\r\n\r\n this.labelElement!.style.paddingLeft = `${xOffset}px`;\r\n }\r\n\r\n /**\r\n * This function checks whether the current control has an addon. If so, depending\r\n * on the type of control, it checks whether the material label requires additional\r\n * spacing in the folded state\r\n */\r\n calculateAddonWidth() {\r\n if (!this.addonElement) return;\r\n if (this.fieldElement instanceof HTMLSelectElement) return;\r\n\r\n /* The text is displayed right-aligned for the number inputs.\r\n They must therefore be treated separately */\r\n const isNumberInput = this.isNumberInput();\r\n const addonType = this.getAddonType();\r\n\r\n if (!isNumberInput && (addonType === 'prefix')) {\r\n this.addonPrefixDistance = this.addonElement.offsetWidth;\r\n } else if (isNumberInput && (addonType === 'suffix')) {\r\n this.addonSuffixDistance = this.addonElement.offsetWidth;\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether the input is of type Number. This information is required because\r\n * the text does not start on the left when the number input is collapsed\r\n * @returns boolean: representing is input of type number\r\n */\r\n isNumberInput() {\r\n if (!(this.fieldElement instanceof HTMLInputElement)) return false;\r\n\r\n return (this.fieldElement && (this.fieldElement.type === 'number'));\r\n }\r\n\r\n /**\r\n * Listener for material control value changes\r\n */\r\n registerMaterialValueChangeListener() {\r\n const onValueChanged = this.setMaterialLabelState.bind(this);\r\n this.pushListener({ event: 'input', element: this.fieldElement!, action: onValueChanged });\r\n }\r\n\r\n /**\r\n * Is required so that a class can be added to the focused material select\r\n * element that colors the text of the select white\r\n */\r\n registerMaterialSelectFocusChangeListener() {\r\n if (!(this.fieldElement instanceof HTMLSelectElement)) return;\r\n\r\n const onFocusChanged = this.onMaterialSelectFocusChanged.bind(this);\r\n\r\n this.pushListener({ event: 'focusin', element: this.fieldElement, action: onFocusChanged });\r\n this.pushListener({ event: 'focusout', element: this.fieldElement, action: onFocusChanged });\r\n }\r\n\r\n /**\r\n * This function is used to add a class to the focused material select, which sets\r\n * the font to white if no option has been selected\r\n * @param event: Used to determin if focus has been set or removed\r\n */\r\n onMaterialSelectFocusChanged(event: Event) {\r\n const { type } = event;\r\n\r\n if (type === 'focusin') {\r\n this.classList.add(this.materialSelectFocussedClass);\r\n } else {\r\n this.classList.remove(this.materialSelectFocussedClass);\r\n }\r\n }\r\n\r\n /**\r\n * This function fades in the material element as soon as the label is in\r\n * the correct position\r\n */\r\n registerLabelTransitionEndListener() {\r\n if (!this.labelElement) throw new Error('Missing label element');\r\n\r\n this.onTransitionEnd = this.addMaterialLoadedModifier.bind(this);\r\n this.pushListener({ event: 'transitionend', element: this.labelElement, action: this.onTransitionEnd });\r\n }\r\n\r\n addMaterialLoadedModifier() {\r\n this.classList.add(this.materialLoadedClass);\r\n this.labelElement!.removeEventListener('transitionend', this.onTransitionEnd);\r\n }\r\n // #endregion\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport render from '@tk/utilities/tk.render';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\n\r\nexport default class NSImage extends TKCustomElementFactory {\r\n artId: string;\r\n url: string | null | undefined;\r\n\r\n constructor() {\r\n super();\r\n this.artId = this.getAttribute('data-tk-article-id') || '';\r\n this.url = document.querySelector('[data-tk-article-image-url]')?.getAttribute('data-op-url');\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.artId) throw Error('Missing article internal number.');\r\n if (!this.url) throw Error('Missing URL.');\r\n const data = { item: this.artId };\r\n\r\n fetchRequest({\r\n requestURL: this.url,\r\n resolveHandler: this.renderImage.bind(this),\r\n payload: data,\r\n });\r\n }\r\n\r\n renderImage(response: TKResponse): void {\r\n if (!response.success || !response.dataAsHtml) return;\r\n const image = render(response.dataAsHtml);\r\n this.insertAdjacentElement(\r\n 'beforeend',\r\n image,\r\n );\r\n }\r\n}\r\n","import TKCustomElementFactory from '@tk/utilities/tk.custom.element.factory';\r\nimport { fetchRequest } from '@tk/utilities/tk.fetch';\r\nimport { formErrorMessages, formExpandErrorMessages } from '@tk/utilities/tk.messages';\r\nimport TKFormZipCity from '@tk/controls/tk.form.zipcity';\r\n\r\ntype FieldElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\ninterface ValidityMessages {\r\n key: keyof ValidityState;\r\n value: string;\r\n}\r\n\r\ninterface Validation {\r\n element: FieldElement;\r\n wrapper: Element;\r\n state?: ValidityState;\r\n messageElement?: HTMLSpanElement;\r\n messages: ValidityMessages[];\r\n}\r\n\r\ninterface ValidityItem {\r\n key: keyof ValidityState;\r\n value: boolean;\r\n}\r\n\r\ninterface ValidationResponse {\r\n isValid: boolean;\r\n}\r\n\r\nenum matchType {\r\n Some = 'SOME',\r\n Full= 'FULLMATCH',\r\n}\r\n\r\nexport default class TKFormValidator extends TKCustomElementFactory {\r\n form?: HTMLFormElement;\r\n validationList: Validation[] = [];\r\n fieldWrapperSelector: string;\r\n formErrorClassName: string;\r\n fieldHintClassName: string;\r\n shouldValidateInline: boolean;\r\n passwordStrengthMeter?: HTMLElement;\r\n passwordNewElement?: HTMLElement;\r\n passwordRepeatElement?: HTMLElement;\r\n passwordValidClassName: string;\r\n passwordInvalidClassName: string;\r\n firstElementToScrollTo?: HTMLElement;\r\n googleRecaptcha?: HTMLInputElement;\r\n preventEnterDefaultAction: string | undefined;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.querySelector('form') || undefined;\r\n this.fieldWrapperSelector = this.getAttribute('data-tk-field-wrapper-selector') || '[data-tk-field-wrapper]';\r\n this.formErrorClassName = this.getAttribute('data-tk-form-error-class-name') || 'tk-form--error';\r\n this.fieldHintClassName = this.getAttribute('data-tk-field-hint-class-name') || 'tk-form__hint';\r\n this.shouldValidateInline = this.hasAttribute('data-tk-should-validate-inline');\r\n this.passwordStrengthMeter = this.querySelector('[data-tk-password-strength-meter]') || undefined;\r\n this.passwordNewElement = this.querySelector('[data-tk-password-new]') || undefined;\r\n this.passwordRepeatElement = this.querySelector('[data-tk-password-repeat]') || undefined;\r\n this.passwordValidClassName = this.getAttribute('data-tk-password-valid-class-name') || 'tk-form--valid';\r\n this.passwordInvalidClassName = this.getAttribute('data-tk-password-valid-class-name') || 'tk-form--invalid';\r\n this.googleRecaptcha = this.querySelector('[data-tk-google-recaptcha]') || undefined;\r\n // Selects an element that is clicked when the enter key is pressed\r\n this.preventEnterDefaultAction = this.getAttribute('data-tk-enter-data-attribute-selector')\r\n || undefined;\r\n }\r\n\r\n connectedCallback(): void {\r\n if (!this.form) return;\r\n this.validationList = [];\r\n this.setNoValidateForm();\r\n this.searchFieldElements();\r\n this.registerSubmitListener();\r\n this.registerPasswordListener();\r\n this.shouldValidateInline && this.registerFieldValidationListener();\r\n }\r\n\r\n setNoValidateForm() {\r\n if (!this.form) return;\r\n this.form.noValidate = true;\r\n }\r\n\r\n searchFieldElements(): void {\r\n const formElements: NodeListOf = this.querySelectorAll('input, select, textarea');\r\n const formElementList = Array.from(formElements);\r\n const filteredFormElements = formElementList.filter((element) => !element.disabled);\r\n filteredFormElements.forEach((element) => {\r\n const wrapper = element.closest(this.fieldWrapperSelector);\r\n wrapper\r\n && this.validationList.push({\r\n element,\r\n wrapper,\r\n messages: TKFormValidator.generateValidityMessages(element),\r\n });\r\n });\r\n }\r\n\r\n registerSubmitListener() {\r\n if (!this.form) return;\r\n const onSubmitHandler = this.validateForm.bind(this);\r\n this.pushListener({ event: 'submit', element: this.form, action: onSubmitHandler });\r\n }\r\n\r\n registerPasswordListener() {\r\n if (!(this.passwordStrengthMeter && this.passwordNewElement && this.passwordRepeatElement)) return;\r\n\r\n const onValidatePassword = this.validatePassword.bind(this);\r\n this.pushListener({ event: 'input', element: this.passwordNewElement, action: onValidatePassword });\r\n this.pushListener({ event: 'input', element: this.passwordRepeatElement, action: onValidatePassword });\r\n }\r\n\r\n registerFieldValidationListener() {\r\n this.validationList.forEach((item) => {\r\n const onValidation = this.validateField.bind(this, item);\r\n this.pushListener({ event: 'blur', element: item.element, action: onValidation });\r\n this.pushListener({ event: 'input', element: item.element, action: onValidation });\r\n });\r\n }\r\n\r\n async validateRecaptcha(): Promise {\r\n if (!this.googleRecaptcha) return true;\r\n return new Promise((resolve) => {\r\n grecaptcha.ready(async () => {\r\n const siteKey = this.googleRecaptcha!.getAttribute('data-tk-site-key');\r\n if (!siteKey) return resolve(false);\r\n const token = await grecaptcha.execute(siteKey, { action: 'submit' });\r\n if (!token) return resolve(false);\r\n this.googleRecaptcha!.value = token;\r\n resolve(true);\r\n });\r\n });\r\n }\r\n\r\n async validateZipCity(): Promise {\r\n const validationList: boolean[] = [];\r\n const fieldElements = this.querySelectorAll('[data-tk-field-check-zip-city]');\r\n if (fieldElements.length === 0) return true;\r\n\r\n const apiPromises = Array.from(fieldElements).map(async (element) => {\r\n const input = element.querySelector('input');\r\n if (!input) return true;\r\n\r\n const isValid = await TKFormZipCity.isValidZipCity(this.form!);\r\n const validationItem = this.validationList.find((item) => item.wrapper === element);\r\n if (!isValid && validationItem) {\r\n this.removeMessage(validationItem);\r\n this.createElementMessage(\r\n validationItem,\r\n formErrorMessages.typeMismatch,\r\n );\r\n }\r\n return isValid;\r\n });\r\n const results = await Promise.all(apiPromises);\r\n validationList.push(...results);\r\n return validationList.every((item) => item);\r\n }\r\n\r\n async validateByAPI(): Promise {\r\n const validationList: boolean[] = [];\r\n const fieldElements = this.querySelectorAll('[data-tk-field-check-api]');\r\n if (fieldElements.length === 0) return true;\r\n\r\n const apiPromises = Array.from(fieldElements).map(async (element) => {\r\n const apiURL = element.getAttribute('data-tk-field-check-api');\r\n const input = element.querySelector('input');\r\n if (!input || !apiURL || input.value === '') return true;\r\n\r\n const response = await TKFormValidator.fetchExistAPI(apiURL, input.value);\r\n const { isValid } = response.dataAsJson;\r\n const validationItem = this.validationList.find((item) => item.wrapper === element);\r\n if (!isValid && validationItem) {\r\n this.removeMessage(validationItem);\r\n this.createElementMessage(\r\n validationItem,\r\n formExpandErrorMessages.existigName,\r\n );\r\n }\r\n return isValid;\r\n });\r\n const results = await Promise.all(apiPromises);\r\n validationList.push(...results);\r\n return validationList.every((item) => item);\r\n }\r\n\r\n static async fetchExistAPI(url: string, value: string): Promise> {\r\n return new Promise((resolve) => {\r\n fetchRequest({\r\n requestURL: url,\r\n payload: {\r\n value,\r\n },\r\n resolveHandler: (response: TKResponse) => {\r\n resolve(response);\r\n },\r\n });\r\n });\r\n }\r\n\r\n async validateForm(event: Event) {\r\n event.preventDefault();\r\n const isFormValid = await this.isFormValid();\r\n if (!isFormValid) return;\r\n if (this.preventEnterDefaultAction) {\r\n const elemntToClick = document.querySelector(`[${this.preventEnterDefaultAction}]`);\r\n elemntToClick?.querySelector('button')?.click();\r\n return;\r\n }\r\n this.form?.submit();\r\n }\r\n\r\n async isFormValid() {\r\n await this.validateFields();\r\n const areFieldsValid = this.validationList.every((item) => item.element.validity.valid);\r\n if (!areFieldsValid) return false;\r\n const isValid = await this.validateByAPI() && await this.validateZipCity();\r\n const isRecaptchaValid = await this.validateRecaptcha();\r\n\r\n return (\r\n (!this.passwordStrengthMeter || this.checkPasswordStengthMeter())\r\n && this.checkPasswordMatching()\r\n && isValid\r\n && isRecaptchaValid\r\n );\r\n }\r\n\r\n protected async validateFields(): Promise {\r\n this.validationList.forEach((item) => {\r\n this.validateField(item);\r\n });\r\n\r\n this.firstElementToScrollTo = undefined;\r\n }\r\n\r\n validateField(item: Validation) {\r\n this.removeMessage(item);\r\n if (!item.element.validity.valid) {\r\n this.showMessage(item);\r\n }\r\n }\r\n\r\n showMessage(item: Validation) {\r\n const validityList = TKFormValidator.createValidityDictionary(item.element);\r\n const invalidMessage = validityList.find((validity) => validity.value);\r\n const message = invalidMessage\r\n ? item.messages.find((message) => message.key === invalidMessage.key)?.value || ''\r\n : item.element.validationMessage;\r\n\r\n this.createElementMessage(item, message);\r\n }\r\n\r\n createElementMessage(item: Validation, message: string) {\r\n const spanElement = document.createElement('span');\r\n spanElement.classList.add(this.fieldHintClassName);\r\n spanElement.textContent = TKFormValidator.replacePlaceholders(message, item.element);\r\n item.messageElement = spanElement;\r\n item.wrapper.classList.add(this.formErrorClassName);\r\n item.wrapper.insertAdjacentElement('beforeend', spanElement);\r\n if (this.firstElementToScrollTo) return;\r\n this.firstElementToScrollTo = item.messageElement;\r\n this.firstElementToScrollTo.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n\r\n removeMessage(item: Validation) {\r\n const spanElement = item.messageElement;\r\n if (!spanElement) return;\r\n spanElement.remove();\r\n item.wrapper.classList.remove(this.formErrorClassName);\r\n }\r\n\r\n static createValidityDictionary(element: FieldElement) {\r\n const { validity } = element;\r\n const validityList: ValidityItem[] = [];\r\n // eslint-disable-next-line guard-for-in, no-restricted-syntax\r\n for (const key in validity) {\r\n const validityItem: ValidityItem = {\r\n key: key as keyof ValidityState,\r\n value: Boolean(validity[key as keyof ValidityState]),\r\n };\r\n validityList.push(validityItem);\r\n }\r\n return validityList;\r\n }\r\n\r\n static generateValidityMessages(element: FieldElement): ValidityMessages[] {\r\n const list: ValidityMessages[] = [];\r\n const customErrorPrefix = 'data-tk-error-msg-';\r\n const attributeList = element.getAttributeNames().filter((name) => name.startsWith(customErrorPrefix));\r\n attributeList.forEach((key) => {\r\n const keyFormatted = key\r\n .replace(customErrorPrefix, '')\r\n .replace(/-./g, (x) => x[1].toUpperCase()) as keyof ValidityState;\r\n const value = element.getAttribute(key);\r\n value\r\n && list.push({\r\n key: keyFormatted,\r\n value,\r\n });\r\n });\r\n\r\n if (formErrorMessages) {\r\n const messages = formErrorMessages;\r\n Object.entries(messages).forEach((entry) => {\r\n const [key, value] = entry;\r\n const foundMessage = list.filter((item) => item.key === key);\r\n !foundMessage.length\r\n && list.push({\r\n key: key as keyof ValidityState,\r\n value,\r\n });\r\n });\r\n }\r\n\r\n return list;\r\n }\r\n\r\n static replacePlaceholders(value: string, element: FieldElement): string {\r\n const dictionary: Record = {\r\n '{minLength}': element.getAttribute('minlength') || '',\r\n '{maxLength}': element.getAttribute('maxlength') || '',\r\n '{length}': element.value.length.toString() || '',\r\n '{step}': element.getAttribute('step') || '',\r\n '{min}': element.getAttribute('min') || '',\r\n '{max}': element.getAttribute('max') || '',\r\n '{currentValue}': element.value,\r\n };\r\n const re = new RegExp(Object.keys(dictionary).join('|'), 'gi');\r\n return value.replace(re, (matched) => dictionary[matched]);\r\n }\r\n\r\n checkPasswordStengthMeter() {\r\n const patterns = this.getPasswordPatterns();\r\n return patterns.every((item) => item.element?.classList.contains(this.passwordValidClassName));\r\n }\r\n\r\n checkPasswordMatching(): boolean {\r\n let isValid: boolean;\r\n const newPasswordItem = this.validationList.find((item) => item.element === this.passwordNewElement);\r\n const repeatPasswordItem = this.validationList.find((item) => item.element === this.passwordRepeatElement);\r\n if (!newPasswordItem || !repeatPasswordItem) return true;\r\n if (newPasswordItem.element.value !== repeatPasswordItem.element.value) {\r\n this.removeMessage(repeatPasswordItem);\r\n this.createElementMessage(\r\n repeatPasswordItem,\r\n formErrorMessages.passwordNotMatching,\r\n );\r\n isValid = false;\r\n } else {\r\n isValid = true;\r\n }\r\n return isValid;\r\n }\r\n\r\n validatePassword(event: Event) {\r\n const target = event.currentTarget as HTMLInputElement;\r\n const patterns = this.getPasswordPatterns();\r\n\r\n patterns.forEach((item) => {\r\n const regex = new RegExp(item.pattern || '', item.matchtype === matchType.Full ? 'g' : '');\r\n\r\n const regexpMatch = target.value.match(regex);\r\n\r\n if (item.matchtype === matchType.Some) {\r\n if (regexpMatch) {\r\n item.element?.classList.remove(this.passwordInvalidClassName);\r\n item.element?.classList.add(this.passwordValidClassName);\r\n } else {\r\n item.element?.classList.remove(this.passwordValidClassName);\r\n item.element?.classList.add(this.passwordInvalidClassName);\r\n }\r\n }\r\n\r\n if (item.matchtype === matchType.Full) {\r\n if (regexpMatch?.length === target.value.length) {\r\n item.element?.classList.remove(this.passwordInvalidClassName);\r\n item.element?.classList.add(this.passwordValidClassName);\r\n } else {\r\n item.element?.classList.remove(this.passwordValidClassName);\r\n item.element?.classList.add(this.passwordInvalidClassName);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getPasswordPatterns() {\r\n const characterPatternElement = this.passwordStrengthMeter?.querySelector('[data-tk-pwd-character-pattern]');\r\n const upperPatternElement = this.passwordStrengthMeter?.querySelector('[data-tk-pwd-upper-pattern]');\r\n const numberPatternElement = this.passwordStrengthMeter?.querySelector('[data-tk-pwd-number-pattern]');\r\n const allowedSymbolPatternElement = this.passwordStrengthMeter?.querySelector(\r\n '[data-tk-pwd-allowed-symbols-pattern]',\r\n );\r\n const characterPattern = characterPatternElement?.getAttribute('data-tk-pwd-character-pattern');\r\n const upperPattern = upperPatternElement?.getAttribute('data-tk-pwd-upper-pattern');\r\n const numberPattern = numberPatternElement?.getAttribute('data-tk-pwd-number-pattern');\r\n const allowedSymbolPattern = allowedSymbolPatternElement?.getAttribute('data-tk-pwd-allowed-symbols-pattern');\r\n return [\r\n {\r\n pattern: characterPattern,\r\n element: characterPatternElement,\r\n matchtype: matchType.Some,\r\n },\r\n {\r\n pattern: upperPattern,\r\n element: upperPatternElement,\r\n matchtype: matchType.Some,\r\n },\r\n {\r\n pattern: numberPattern,\r\n element: numberPatternElement,\r\n matchtype: matchType.Some,\r\n },\r\n {\r\n pattern: allowedSymbolPattern,\r\n element: allowedSymbolPatternElement,\r\n matchtype: matchType.Full,\r\n },\r\n ];\r\n }\r\n}\r\n"],"names":[],"version":3,"file":"verification.js.map","sourceRoot":"../../../../../../../"}