{"version":3,"sources":["../../src/pages/email-template/email-template.ts","../../node_modules/ngx-chips/fesm5/ngx-chips.js","../../node_modules/ng2-material-dropdown/fesm5/ng2-material-dropdown.js","../../src/pages/email-template/email-template.module.ts"],"names":[],"mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAAQ,GAAG;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,iEAAU;AAC7B,QAAQ,iEAAU;AAClB;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA4C,+DAAQ,GAAG;AACvD,4CAA4C,+DAAQ,GAAG;AACvD;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,2BAA2B,EAAE;AACzF;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2DAAY;AACxC;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA,2BAA2B,2DAAY;AACvC;AACA;AACA;AACA,2BAA2B,2DAAY;AACvC;AACA;AACA;AACA,6BAA6B,2DAAY;AACzC;AACA;AACA;AACA,mCAAmC,2DAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mEAAW,EAAE,qCAAqC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wBAAwB,iEAAS;AACjC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kCAAkC,EAAE;AACxE,iCAAiC,sBAAsB,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;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AW,yBAAyB,6CAA6C,uBAAuB,wBAAwB,2BAA2B,+CAA+C,iCAAiC,WAAW;AACxa,SAAS;AACT;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2DAAY;AACxC;AACA;AACA;AACA,4BAA4B,2DAAY;AACxC;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA,6BAA6B,2DAAY;AACzC;AACA;AACA;AACA,+BAA+B,2DAAY;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kCAAkC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAkC,EAAE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAQ,GAAG,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,8CAA8C,QAAQ,gEAAS;AAC/D;AACA,mBAAmB,kEAAW;AAC9B;AACA;AACA;AACA,2GAA2G,EAAE;AAC7G;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6DAAK;AAC3B,qDAAqD,qCAAqC,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAY,iBAAiB,8DAAM;AACrD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAQ,GAAG,sBAAsB;AAChD;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAU;AACd,QAAQ,gEAAS,CAAC,0EAAW,GAAG,gBAAgB;AAChD,QAAQ,iEAAU,gBAAgB,0EAAW;AAC7C;AACA,IAAI,iEAAU;AACd,QAAQ,sEAAe,CAAC,0DAAW;AACnC,QAAQ,iEAAU,gBAAgB,wDAAS;AAC3C;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,mEAAY;AACpB,QAAQ,iEAAU;AAClB,QAAQ,iEAAU;AAClB,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,mEAAY;AACpB,QAAQ,iEAAU;AAClB,QAAQ,iEAAU;AAClB,QAAQ,iEAAU;AAClB;AACA,uBAAuB,iEAAU;AACjC,QAAQ,gEAAS;AACjB;AACA,8UAA8U,mBAAmB,ybAAyb,uCAAuC;AACj0B,SAAS;AACT,QAAQ,iEAAU,uBAAuB,uDAAQ;AACjD;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,aAAa,yEAAiB;AAC9B,iBAAiB,iEAAU,cAAc,0BAA0B,EAAE;AACrE;AACA;AACA;AACA,IAAI,gEAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA;AACA,6BAA6B,2DAAY;AACzC;AACA;AACA;AACA;AACA,6BAA6B,2DAAY;AACzC;AACA;AACA;AACA;AACA,4BAA4B,2DAAY;AACxC;AACA;AACA;AACA;AACA,2BAA2B,2DAAY;AACvC;AACA;AACA;AACA;AACA,iCAAiC,2DAAY;AAC7C;AACA;AACA;AACA;AACA,4BAA4B,2DAAY;AACxC;AACA;AACA;AACA;AACA,sCAAsC,2DAAY;AAClD;AACA;AACA;AACA;AACA,gCAAgC,2DAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,2DAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,mCAAmC,4BAA4B;AAC/D;AACA;AACA,0BAA0B,+DAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+DAAQ,GAAG,wCAAwC,UAAU;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0BAA0B;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,QAAQ,gEAAS;AAClE;AACA;AACA,mBAAmB,kEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,0CAA0C,gCAAgC,gCAAgC,EAAE,MAAM;AAClH;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,SAAS,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAM,oBAAoB,6BAA6B,EAAE;AACrF;AACA,SAAS;AACT,yDAAyD,2DAAG;AAC5D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAK;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC;AAChC,mBAAmB;AACnB,sBAAsB;AACtB,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAK;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,qCAAqC,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAS;AACxB;AACA,mBAAmB,kEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,oCAAoC,+BAA+B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,2BAA2B,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,oBAAoB;AACpB,sBAAsB;AACtB,4BAA4B;AAC5B;AACA;AACA;AACA,0CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAAM,0BAA0B,mCAAmC,EAAE,GAAG,6DAAK;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,EAAE;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAY;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAY,OAAO,8DAAM;AAC3C;AACA,qCAAqC,gCAAgC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAwC,EAAE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+DAAQ,GAAG;AAC/B;AACA;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,4DAAK;AACb,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;AACd,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;AACd,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;AACd,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;AACd,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;AACd,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;AACd,QAAQ,iEAAU;AAClB;AACA,IAAI,iEAAU;AACd,QAAQ,6DAAM;AACd,QAAQ,iEAAU;AAClB;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CA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,wDAAS;AACzB;AACA,mDAAmD,sDAAsD,gBAAgB,sBAAsB,eAAe,sBAAsB,WAAW,UAAU,eAAe,gBAAgB,YAAY,gCAAgC,gBAAgB,gBAAgB,WAAW,aAAa,mBAAmB,gBAAgB,2BAA2B,WAAW,uDAAuD,WAAW,gCAAgC,4BAA4B,aAAa,4BAA4B,WAAW,YAAY,aAAa,YAAY,+DAA+D,YAAY,eAAe,WAAW,mBAAmB,mBAAmB,kBAAkB,YAAY,aAAa,sEAAsE,0BAA0B;AACl4B;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,oDAAoD;AACpD,SAAS,OAAO,yDAAU,GAAG;AAC7B,MAAM;AACN;AACA,2BAA2B,OAAO,qDAAM,EAAE;AAC1C,uBAAuB,OAAO,oDAAK,EAAE;AACrC;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,WAAW;AACzB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA,eAAe,EAAE,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA;AACA,kCAAkC,2DAAY;AAC9C,iCAAiC,2DAAY;AAC7C,mCAAmC,2DAAY;AAC/C;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA,kCAAkC,EAAE;AACpC;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,yDAAU,EAAE;AAC5B;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,wDAAS;AACzB;AACA,6CAA6C,sDAAsD,gBAAgB,sBAAsB,eAAe,eAAe,oBAAoB,gBAAgB,qBAAqB,YAAY,iBAAiB,qBAAqB,uBAAuB,mBAAmB,gBAAgB,2BAA2B,yBAAyB,gCAAgC,UAAU,qBAAqB,UAAU,sBAAsB,gCAAgC,iDAAiD,sBAAsB,eAAe,YAAY,YAAY,sBAAsB;AACnoB;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,8CAA8C;AAC9C,SAAS,8BAA8B;AACvC,SAAS,OAAO,yDAAU,GAAG;AAC7B,SAAS,OAAO,uDAAQ,GAAG;AAC3B,MAAM;AACN;AACA,0BAA0B,OAAO,oDAAK,EAAE;AACxC,mBAAmB,OAAO,oDAAK,EAAE;AACjC;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,GAAG;AAClB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,GAAG;AAClB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA,iCAAiC,gBAAgB;AACjD,uBAAuB,EAAE;AACzB,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE,WAAW;AAC5B,eAAe,EAAE,UAAU;AAC3B,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE,WAAW;AAC5B,eAAe,EAAE,UAAU;AAC3B,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,uBAAuB,EAAE;AACzB,uBAAuB,EAAE;AACzB,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;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","file":"8.c4debb463df3e6f75b71.chunk.js","sourcesContent":["import { Component, ViewChild} from '@angular/core';\r\nimport { IonicPage, NavController, NavParams, ViewController,} from 'ionic-angular';\r\n\r\n/**\r\n * Generated class for the EmailTemplatePage page.\r\n *\r\n * See https://ionicframework.com/docs/components/#navigation for more info on\r\n * Ionic pages and navigation.\r\n */\r\n\r\n@IonicPage()\r\n@Component({\r\n selector: 'page-email-template',\r\n templateUrl: 'email-template.html',\r\n})\r\nexport class EmailTemplatePage {\r\n\r\n // @ViewChild('ioninput') ioninputRef: ElementRef;\r\n @ViewChild('myInput') myInput;\r\n assessmentNameTag = ['#clientfirstname ','#clientlastname ','#practitionertitle ', '#practitionerfirstname ', '#practitionerlastname ', '#profession ', '#recipientname'];\r\n\r\n sendEmail: { title: string, subject: string, body: string, default: boolean } = {\r\n title: '',\r\n subject: '',\r\n body: '',\r\n default: false\r\n };\r\n\r\n constructor(public navCtrl: NavController, public navParams: NavParams, public viewCtrl: ViewController) {\r\n //this.sendEmail.title = 'Email Template'\r\n //this.sendEmail.subject = 'Hello' + ` ` + \"assessment request\";\r\n //this.sendEmail.body = \"Dear \" + `,\r\n\r\n//This is an automated email setup by ` + `who would like you to fill in a questionnaire to check in with you. Please click the link below and follow the prompts to fill in the assessment. The results will be available to ` + ` once you have submitted the assessment.\r\n//Thank you.` + `\\n` + `\\n` +\r\nif (this.navParams.data.template) {\r\n this.sendEmail.body = this.navParams.data.template.body;\r\n this.sendEmail.title = this.navParams.data.template.title;\r\n this.sendEmail.subject = this.navParams.data.template.subject;\r\n this.sendEmail.default = this.navParams.data.template.default;\r\n}\r\n\r\n\r\nthis.getLifeLineText();\r\n \r\n }\r\n\r\n getLifeLineText() {\r\n \r\n return `If you are in need urgent assistance please contact Lifeline on 13 11 14.`\r\n \r\n}\r\n\r\n ionViewDidLoad() {\r\n \r\n }\r\n\r\n saveTemplate(){\r\n this.viewCtrl.dismiss({template: this.sendEmail, dismiss:'done'});\r\n }\r\n\r\n onSelected(textToInsert) {\r\n this.myInput.setFocus();\r\n document.execCommand('insertText', false /*no UI*/, textToInsert);\r\n }\r\n\r\n cancel() {\r\n this.viewCtrl.dismiss({template: this.sendEmail, dismiss:'cancel'});\r\n }\r\n\r\n deleteTemplate(){\r\n this.viewCtrl.dismiss({template: this.sendEmail, dismiss:'delete'})\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/email-template/email-template.ts","import { __decorate, __assign, __metadata, __awaiter, __generator, __extends, __spread } from 'tslib';\nimport { Pipe, Injectable, Input, Output, EventEmitter, ViewChild, Component, TemplateRef, HostBinding, HostListener, ElementRef, Renderer2, ChangeDetectorRef, ContentChildren, QueryList, Injector, forwardRef, ContentChild, ViewChildren, NgModule } from '@angular/core';\nimport { FormGroup, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule, COMPOSITION_BUFFER_MODE } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { Ng2Dropdown, Ng2DropdownModule } from 'ng2-material-dropdown';\nimport { debounceTime, filter, first, map } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate, keyframes } from '@angular/animations';\n\nvar escape = function (s) { return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'); };\nvar HighlightPipe = /** @class */ (function () {\n function HighlightPipe() {\n }\n /**\n * @name transform\n * @param value {string}\n * @param arg {string}\n */\n HighlightPipe.prototype.transform = function (value, arg) {\n if (!arg.trim()) {\n return value;\n }\n try {\n var regex = new RegExp(\"(\" + escape(arg) + \")\", 'i');\n return value.replace(regex, '$1');\n }\n catch (e) {\n return value;\n }\n };\n HighlightPipe = __decorate([\n Pipe({\n name: 'highlight'\n })\n ], HighlightPipe);\n return HighlightPipe;\n}());\n\n/*\n** constants and default values for \n */\nvar PLACEHOLDER = '+ Tag';\nvar SECONDARY_PLACEHOLDER = 'Enter a new tag';\nvar KEYDOWN = 'keydown';\nvar KEYUP = 'keyup';\nvar MAX_ITEMS_WARNING = 'The number of items specified was greater than the property max-items.';\nvar ACTIONS_KEYS = {\n DELETE: 'DELETE',\n SWITCH_PREV: 'SWITCH_PREV',\n SWITCH_NEXT: 'SWITCH_NEXT',\n TAB: 'TAB'\n};\nvar KEY_PRESS_ACTIONS = {\n 8: ACTIONS_KEYS.DELETE,\n 37: ACTIONS_KEYS.SWITCH_PREV,\n 39: ACTIONS_KEYS.SWITCH_NEXT,\n 9: ACTIONS_KEYS.TAB\n};\nvar DRAG_AND_DROP_KEY = 'Text';\nvar NEXT = 'NEXT';\nvar PREV = 'PREV';\n\nvar DragProvider = /** @class */ (function () {\n function DragProvider() {\n this.state = {\n dragging: false,\n dropping: false,\n index: undefined\n };\n }\n /**\n * @name setDraggedItem\n * @param event\n * @param tag\n */\n DragProvider.prototype.setDraggedItem = function (event, tag) {\n if (event && event.dataTransfer) {\n event.dataTransfer.setData(DRAG_AND_DROP_KEY, JSON.stringify(tag));\n }\n };\n /**\n * @name getDraggedItem\n * @param event\n */\n DragProvider.prototype.getDraggedItem = function (event) {\n if (event && event.dataTransfer) {\n var data = event.dataTransfer.getData(DRAG_AND_DROP_KEY);\n try {\n return JSON.parse(data);\n }\n catch (_a) {\n return;\n }\n }\n };\n /**\n * @name setSender\n * @param sender\n */\n DragProvider.prototype.setSender = function (sender) {\n this.sender = sender;\n };\n /**\n * @name setReceiver\n * @param receiver\n */\n DragProvider.prototype.setReceiver = function (receiver) {\n this.receiver = receiver;\n };\n /**\n * @name onTagDropped\n * @param tag\n * @param indexDragged\n * @param indexDropped\n */\n DragProvider.prototype.onTagDropped = function (tag, indexDragged, indexDropped) {\n this.onDragEnd();\n this.sender.onRemoveRequested(tag, indexDragged);\n this.receiver.onAddingRequested(false, tag, indexDropped);\n };\n /**\n * @name setState\n * @param state\n */\n DragProvider.prototype.setState = function (state) {\n this.state = __assign({}, this.state, state);\n };\n /**\n * @name getState\n * @param key\n */\n DragProvider.prototype.getState = function (key) {\n return key ? this.state[key] : this.state;\n };\n /**\n * @name onDragEnd\n */\n DragProvider.prototype.onDragEnd = function () {\n this.setState({\n dragging: false,\n dropping: false,\n index: undefined\n });\n };\n DragProvider = __decorate([\n Injectable()\n ], DragProvider);\n return DragProvider;\n}());\n\nvar defaults = {\n tagInput: {\n separatorKeys: [],\n separatorKeyCodes: [],\n maxItems: Infinity,\n placeholder: PLACEHOLDER,\n secondaryPlaceholder: SECONDARY_PLACEHOLDER,\n validators: [],\n asyncValidators: [],\n onlyFromAutocomplete: false,\n errorMessages: {},\n theme: '',\n onTextChangeDebounce: 250,\n inputId: null,\n inputClass: '',\n clearOnBlur: false,\n hideForm: false,\n addOnBlur: false,\n addOnPaste: false,\n pasteSplitPattern: ',',\n blinkIfDupe: true,\n removable: true,\n editable: false,\n allowDupes: false,\n modelAsStrings: false,\n trimTags: true,\n ripple: true,\n tabIndex: '',\n disable: false,\n dragZone: '',\n onRemoving: undefined,\n onAdding: undefined,\n displayBy: 'display',\n identifyBy: 'value',\n animationDuration: {\n enter: '250ms',\n leave: '150ms'\n }\n },\n dropdown: {\n displayBy: 'display',\n identifyBy: 'value',\n appendToBody: true,\n offset: '50 0',\n focusFirstElement: false,\n showDropdownIfEmpty: false,\n minimumTextLength: 1,\n limitItemsTo: Infinity,\n keepOpen: true,\n dynamicUpdate: true,\n zIndex: 1000,\n matchingFn: matchingFn\n }\n};\n/**\n * @name matchingFn\n * @param this\n * @param value\n * @param target\n */\nfunction matchingFn(value, target) {\n var targetValue = target[this.displayBy].toString();\n return targetValue && targetValue\n .toLowerCase()\n .indexOf(value.toLowerCase()) >= 0;\n}\n\nvar OptionsProvider = /** @class */ (function () {\n function OptionsProvider() {\n }\n OptionsProvider.prototype.setOptions = function (options) {\n OptionsProvider.defaults.tagInput = __assign({}, defaults.tagInput, options.tagInput);\n OptionsProvider.defaults.dropdown = __assign({}, defaults.dropdown, options.dropdown);\n };\n OptionsProvider.defaults = defaults;\n return OptionsProvider;\n}());\n\nfunction isObject(obj) {\n return obj === Object(obj);\n}\nvar TagInputAccessor = /** @class */ (function () {\n function TagInputAccessor() {\n this._items = [];\n /**\n * @name displayBy\n */\n this.displayBy = OptionsProvider.defaults.tagInput.displayBy;\n /**\n * @name identifyBy\n */\n this.identifyBy = OptionsProvider.defaults.tagInput.identifyBy;\n }\n Object.defineProperty(TagInputAccessor.prototype, \"items\", {\n get: function () {\n return this._items;\n },\n set: function (items) {\n this._items = items;\n this._onChangeCallback(this._items);\n },\n enumerable: true,\n configurable: true\n });\n TagInputAccessor.prototype.onTouched = function () {\n this._onTouchedCallback();\n };\n TagInputAccessor.prototype.writeValue = function (items) {\n this._items = items || [];\n };\n TagInputAccessor.prototype.registerOnChange = function (fn) {\n this._onChangeCallback = fn;\n };\n TagInputAccessor.prototype.registerOnTouched = function (fn) {\n this._onTouchedCallback = fn;\n };\n /**\n * @name getItemValue\n * @param item\n * @param fromDropdown\n */\n TagInputAccessor.prototype.getItemValue = function (item, fromDropdown) {\n if (fromDropdown === void 0) { fromDropdown = false; }\n var property = fromDropdown && this.dropdown ? this.dropdown.identifyBy : this.identifyBy;\n return isObject(item) ? item[property] : item;\n };\n /**\n * @name getItemDisplay\n * @param item\n * @param fromDropdown\n */\n TagInputAccessor.prototype.getItemDisplay = function (item, fromDropdown) {\n if (fromDropdown === void 0) { fromDropdown = false; }\n var property = fromDropdown && this.dropdown ? this.dropdown.displayBy : this.displayBy;\n return isObject(item) ? item[property] : item;\n };\n /**\n * @name getItemsWithout\n * @param index\n */\n TagInputAccessor.prototype.getItemsWithout = function (index) {\n return this.items.filter(function (item, position) { return position !== index; });\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputAccessor.prototype, \"displayBy\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputAccessor.prototype, \"identifyBy\", void 0);\n return TagInputAccessor;\n}());\n\n/**\n * @name listen\n * @param listenerType\n * @param action\n * @param condition\n */\nfunction listen(listenerType, action, condition) {\n if (condition === void 0) { condition = true; }\n // if the event provided does not exist, throw an error\n if (!this.listeners.hasOwnProperty(listenerType)) {\n throw new Error('The event entered may be wrong');\n }\n // if a condition is present and is false, exit early\n if (!condition) {\n return;\n }\n // fire listener\n this.listeners[listenerType].push(action);\n}\n\nvar TagInputForm = /** @class */ (function () {\n function TagInputForm() {\n /**\n * @name onSubmit\n */\n this.onSubmit = new EventEmitter();\n /**\n * @name onBlur\n */\n this.onBlur = new EventEmitter();\n /**\n * @name onFocus\n */\n this.onFocus = new EventEmitter();\n /**\n * @name onKeyup\n */\n this.onKeyup = new EventEmitter();\n /**\n * @name onKeydown\n */\n this.onKeydown = new EventEmitter();\n /**\n * @name inputTextChange\n */\n this.inputTextChange = new EventEmitter();\n /**\n * @name validators\n */\n this.validators = [];\n /**\n * @name asyncValidators\n * @desc array of AsyncValidator that are used to validate the tag before it gets appended to the list\n */\n this.asyncValidators = [];\n /**\n * @name tabindex\n * @desc pass through the specified tabindex to the input\n */\n this.tabindex = '';\n /**\n * @name disabled\n */\n this.disabled = false;\n this.item = new FormControl({ value: '', disabled: this.disabled });\n }\n Object.defineProperty(TagInputForm.prototype, \"inputText\", {\n /**\n * @name inputText\n */\n get: function () {\n return this.item.value;\n },\n /**\n * @name inputText\n * @param text {string}\n */\n set: function (text) {\n this.item.setValue(text);\n this.inputTextChange.emit(text);\n },\n enumerable: true,\n configurable: true\n });\n TagInputForm.prototype.ngOnInit = function () {\n this.item.setValidators(this.validators);\n this.item.setAsyncValidators(this.asyncValidators);\n // creating form\n this.form = new FormGroup({\n item: this.item\n });\n };\n TagInputForm.prototype.ngOnChanges = function (changes) {\n if (changes.disabled && !changes.disabled.firstChange) {\n if (changes.disabled.currentValue) {\n this.form.controls['item'].disable();\n }\n else {\n this.form.controls['item'].enable();\n }\n }\n };\n Object.defineProperty(TagInputForm.prototype, \"value\", {\n /**\n * @name value\n */\n get: function () {\n return this.form.get('item');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @name isInputFocused\n */\n TagInputForm.prototype.isInputFocused = function () {\n var doc = typeof document !== 'undefined' ? document : undefined;\n return doc ? doc.activeElement === this.input.nativeElement : false;\n };\n /**\n * @name getErrorMessages\n * @param messages\n */\n TagInputForm.prototype.getErrorMessages = function (messages) {\n var _this = this;\n return Object.keys(messages)\n .filter(function (err) { return _this.value.hasError(err); })\n .map(function (err) { return messages[err]; });\n };\n /**\n * @name hasErrors\n */\n TagInputForm.prototype.hasErrors = function () {\n var _a = this.form, dirty = _a.dirty, value = _a.value, valid = _a.valid;\n return dirty && value.item && !valid;\n };\n /**\n * @name focus\n */\n TagInputForm.prototype.focus = function () {\n this.input.nativeElement.focus();\n };\n /**\n * @name blur\n */\n TagInputForm.prototype.blur = function () {\n this.input.nativeElement.blur();\n };\n /**\n * @name getElementPosition\n */\n TagInputForm.prototype.getElementPosition = function () {\n return this.input.nativeElement.getBoundingClientRect();\n };\n /**\n * - removes input from the component\n * @name destroy\n */\n TagInputForm.prototype.destroy = function () {\n var input = this.input.nativeElement;\n input.parentElement.removeChild(input);\n };\n /**\n * @name onKeyDown\n * @param $event\n */\n TagInputForm.prototype.onKeyDown = function ($event) {\n this.inputText = this.value.value;\n if ($event.key === 'Enter') {\n this.submit($event);\n this.inputText = '';\n }\n return this.onKeydown.emit($event);\n };\n /**\n * @name onKeyUp\n * @param $event\n */\n TagInputForm.prototype.onKeyUp = function ($event) {\n this.inputText = this.value.value;\n return this.onKeyup.emit($event);\n };\n /**\n * @name submit\n */\n TagInputForm.prototype.submit = function ($event) {\n $event.preventDefault();\n if (this.form.valid) {\n this.onSubmit.emit($event);\n }\n };\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagInputForm.prototype, \"onSubmit\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagInputForm.prototype, \"onBlur\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagInputForm.prototype, \"onFocus\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagInputForm.prototype, \"onKeyup\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagInputForm.prototype, \"onKeydown\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagInputForm.prototype, \"inputTextChange\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputForm.prototype, \"placeholder\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], TagInputForm.prototype, \"validators\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], TagInputForm.prototype, \"asyncValidators\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputForm.prototype, \"inputId\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputForm.prototype, \"inputClass\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputForm.prototype, \"tabindex\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputForm.prototype, \"disabled\", void 0);\n __decorate([\n ViewChild('input', { static: false }),\n __metadata(\"design:type\", Object)\n ], TagInputForm.prototype, \"input\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], TagInputForm.prototype, \"inputText\", null);\n TagInputForm = __decorate([\n Component({\n selector: 'tag-input-form',\n template: \"\\n\\n \\n\\n\",\n styles: [\".dark tag:focus{box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;transition:.25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.minimal.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.dark.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.bootstrap.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.bootstrap3-info.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;padding:4px;cursor:text;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{box-shadow:inset 0 1px 1px #d9534f;border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}.ng2-tag-input__text-input{display:inline;vertical-align:middle;border:none;padding:0 .5rem;height:38px;font-size:1em;font-family:Roboto,\\\"Helvetica Neue\\\",sans-serif}.ng2-tag-input__text-input:focus{outline:0}.ng2-tag-input__text-input[disabled=true]{opacity:.5;background:#fff}\"]\n })\n ], TagInputForm);\n return TagInputForm;\n}());\n\nvar TagRipple = /** @class */ (function () {\n function TagRipple() {\n this.state = 'none';\n }\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagRipple.prototype, \"state\", void 0);\n TagRipple = __decorate([\n Component({\n selector: 'tag-ripple',\n template: \"\\n \\n \",\n animations: [\n trigger('ink', [\n state('none', style({ width: 0, opacity: 0 })),\n transition('none => clicked', [\n animate(300, keyframes([\n style({ opacity: 1, offset: 0, width: '30%', borderRadius: '100%' }),\n style({ opacity: 1, offset: 0.5, width: '50%' }),\n style({ opacity: 0.5, offset: 1, width: '100%', borderRadius: '16px' })\n ]))\n ])\n ])\n ],\n styles: [\"\\n :host {\\n width: 100%;\\n height: 100%;\\n left: 0;\\n overflow: hidden;\\n position: absolute;\\n }\\n\\n .tag-ripple {\\n background: rgba(0, 0, 0, 0.1);\\n top: 50%;\\n left: 50%;\\n height: 100%;\\n transform: translate(-50%, -50%);\\n position: absolute;\\n }\\n \"]\n })\n ], TagRipple);\n return TagRipple;\n}());\n\n// mocking navigator\nvar navigator = typeof window !== 'undefined' ? window.navigator : {\n userAgent: 'Chrome',\n vendor: 'Google Inc'\n};\nvar isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\nvar TagComponent = /** @class */ (function () {\n function TagComponent(element, renderer, cdRef) {\n this.element = element;\n this.renderer = renderer;\n this.cdRef = cdRef;\n /**\n * @name disabled\n */\n this.disabled = false;\n /**\n * @name onSelect\n */\n this.onSelect = new EventEmitter();\n /**\n * @name onRemove\n */\n this.onRemove = new EventEmitter();\n /**\n * @name onBlur\n */\n this.onBlur = new EventEmitter();\n /**\n * @name onKeyDown\n */\n this.onKeyDown = new EventEmitter();\n /**\n * @name onTagEdited\n */\n this.onTagEdited = new EventEmitter();\n /**\n * @name editing\n */\n this.editing = false;\n /**\n * @name rippleState\n */\n this.rippleState = 'none';\n }\n Object.defineProperty(TagComponent.prototype, \"readonly\", {\n /**\n * @name readonly {boolean}\n */\n get: function () {\n return typeof this.model !== 'string' && this.model.readonly === true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @name select\n */\n TagComponent.prototype.select = function ($event) {\n if (this.readonly || this.disabled) {\n return;\n }\n if ($event) {\n $event.stopPropagation();\n }\n this.focus();\n this.onSelect.emit(this.model);\n };\n /**\n * @name remove\n */\n TagComponent.prototype.remove = function ($event) {\n $event.stopPropagation();\n this.onRemove.emit(this);\n };\n /**\n * @name focus\n */\n TagComponent.prototype.focus = function () {\n this.element.nativeElement.focus();\n };\n TagComponent.prototype.move = function () {\n this.moving = true;\n };\n /**\n * @name keydown\n * @param event\n */\n TagComponent.prototype.keydown = function (event) {\n if (this.editing) {\n if (event.keyCode === 13) {\n return this.disableEditMode(event);\n }\n }\n else {\n this.onKeyDown.emit({ event: event, model: this.model });\n }\n };\n /**\n * @name blink\n */\n TagComponent.prototype.blink = function () {\n var classList = this.element.nativeElement.classList;\n classList.add('blink');\n setTimeout(function () { return classList.remove('blink'); }, 50);\n };\n /**\n * @name toggleEditMode\n */\n TagComponent.prototype.toggleEditMode = function () {\n if (this.editable) {\n return this.editing ? undefined : this.activateEditMode();\n }\n };\n /**\n * @name onBlurred\n * @param event\n */\n TagComponent.prototype.onBlurred = function (event) {\n var _a;\n // Checks if it is editable first before handeling the onBlurred event in order to prevent\n // a bug in IE where tags are still editable with onlyFromAutocomplete set to true\n if (!this.editable) {\n return;\n }\n this.disableEditMode();\n var value = event.target.innerText;\n var result = typeof this.model === 'string'\n ? value\n : __assign({}, this.model, (_a = {}, _a[this.displayBy] = value, _a));\n this.onBlur.emit(result);\n };\n /**\n * @name getDisplayValue\n * @param item\n */\n TagComponent.prototype.getDisplayValue = function (item) {\n return typeof item === 'string' ? item : item[this.displayBy];\n };\n Object.defineProperty(TagComponent.prototype, \"isRippleVisible\", {\n /**\n * @desc returns whether the ripple is visible or not\n * only works in Chrome\n * @name isRippleVisible\n */\n get: function () {\n return !this.readonly && !this.editing && isChrome && this.hasRipple;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @name disableEditMode\n * @param $event\n */\n TagComponent.prototype.disableEditMode = function ($event) {\n var classList = this.element.nativeElement.classList;\n var input = this.getContentEditableText();\n this.editing = false;\n classList.remove('tag--editing');\n if (!input) {\n this.setContentEditableText(this.model);\n return;\n }\n this.storeNewValue(input);\n this.cdRef.detectChanges();\n if ($event) {\n $event.preventDefault();\n }\n };\n /**\n * @name isDeleteIconVisible\n */\n TagComponent.prototype.isDeleteIconVisible = function () {\n return (!this.readonly && !this.disabled && this.removable && !this.editing);\n };\n /**\n * @name getContentEditableText\n */\n TagComponent.prototype.getContentEditableText = function () {\n var input = this.getContentEditable();\n return input ? input.innerText.trim() : '';\n };\n /**\n * @name setContentEditableText\n * @param model\n */\n TagComponent.prototype.setContentEditableText = function (model) {\n var input = this.getContentEditable();\n var value = this.getDisplayValue(model);\n input.innerText = value;\n };\n /**\n * @name\n */\n TagComponent.prototype.activateEditMode = function () {\n var classList = this.element.nativeElement.classList;\n classList.add('tag--editing');\n this.editing = true;\n };\n /**\n * @name storeNewValue\n * @param input\n */\n TagComponent.prototype.storeNewValue = function (input) {\n var _this = this;\n var _a;\n var exists = function (tag) {\n return typeof tag === 'string'\n ? tag === input\n : tag[_this.displayBy] === input;\n };\n var hasId = function () {\n return _this.model[_this.identifyBy] !== _this.model[_this.displayBy];\n };\n // if the value changed, replace the value in the model\n if (exists(this.model)) {\n return;\n }\n var model = typeof this.model === 'string'\n ? input\n : (_a = {\n index: this.index\n },\n _a[this.identifyBy] = hasId()\n ? this.model[this.identifyBy]\n : input,\n _a[this.displayBy] = input,\n _a);\n if (this.canAddTag(model)) {\n this.onTagEdited.emit({ tag: model, index: this.index });\n }\n else {\n this.setContentEditableText(this.model);\n }\n };\n /**\n * @name getContentEditable\n */\n TagComponent.prototype.getContentEditable = function () {\n return this.element.nativeElement.querySelector('[contenteditable]');\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagComponent.prototype, \"model\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagComponent.prototype, \"removable\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagComponent.prototype, \"editable\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", TemplateRef)\n ], TagComponent.prototype, \"template\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagComponent.prototype, \"displayBy\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagComponent.prototype, \"identifyBy\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], TagComponent.prototype, \"index\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagComponent.prototype, \"hasRipple\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagComponent.prototype, \"disabled\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Function)\n ], TagComponent.prototype, \"canAddTag\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagComponent.prototype, \"onSelect\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagComponent.prototype, \"onRemove\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagComponent.prototype, \"onBlur\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagComponent.prototype, \"onKeyDown\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagComponent.prototype, \"onTagEdited\", void 0);\n __decorate([\n HostBinding('class.moving'),\n __metadata(\"design:type\", Boolean)\n ], TagComponent.prototype, \"moving\", void 0);\n __decorate([\n ViewChild(TagRipple, { static: false }),\n __metadata(\"design:type\", TagRipple)\n ], TagComponent.prototype, \"ripple\", void 0);\n __decorate([\n HostListener('keydown', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n ], TagComponent.prototype, \"keydown\", null);\n TagComponent = __decorate([\n Component({\n selector: 'tag',\n template: \"\\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n {{ getDisplayValue(model) }}\\n \\n\\n \\n \\n \\n \\n\\n\\n\\n\\n\",\n styles: [\":host,:host>div,:host>div:focus{outline:0;overflow:hidden;transition:opacity 1s;z-index:1}:host{max-width:400px}:host.blink{-webkit-animation:.3s ease-in-out forwards blink;animation:.3s ease-in-out forwards blink}@-webkit-keyframes blink{0%{opacity:.3}}@keyframes blink{0%{opacity:.3}}:host .disabled{cursor:not-allowed}:host [contenteditable=true]{outline:0}.tag-wrapper{flex-direction:row;display:flex}.tag__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\"]\n }),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n ChangeDetectorRef])\n ], TagComponent);\n return TagComponent;\n}());\n\n/**\n * @name animations\n */\nvar animations = [\n trigger('animation', [\n state('in', style({\n opacity: 1\n })),\n state('out', style({\n opacity: 0\n })),\n transition(':enter', [\n animate('{{ enter }}', keyframes([\n style({ opacity: 0, offset: 0, transform: 'translate(0px, 20px)' }),\n style({ opacity: 0.3, offset: 0.3, transform: 'translate(0px, -10px)' }),\n style({ opacity: 0.5, offset: 0.5, transform: 'translate(0px, 0px)' }),\n style({ opacity: 0.75, offset: 0.75, transform: 'translate(0px, 5px)' }),\n style({ opacity: 1, offset: 1, transform: 'translate(0px, 0px)' })\n ]))\n ]),\n transition(':leave', [\n animate('{{ leave }}', keyframes([\n style({ opacity: 1, transform: 'translateX(0)', offset: 0 }),\n style({ opacity: 1, transform: 'translateX(-15px)', offset: 0.7 }),\n style({ opacity: 0, transform: 'translateX(100%)', offset: 1.0 })\n ]))\n ])\n ])\n];\n\nvar TagInputDropdown = /** @class */ (function () {\n function TagInputDropdown(injector) {\n var _this = this;\n this.injector = injector;\n /**\n * @name offset\n */\n this.offset = defaults.dropdown.offset;\n /**\n * @name focusFirstElement\n */\n this.focusFirstElement = defaults.dropdown.focusFirstElement;\n /**\n * - show autocomplete dropdown if the value of input is empty\n * @name showDropdownIfEmpty\n */\n this.showDropdownIfEmpty = defaults.dropdown.showDropdownIfEmpty;\n /**\n * - desc minimum text length in order to display the autocomplete dropdown\n * @name minimumTextLength\n */\n this.minimumTextLength = defaults.dropdown.minimumTextLength;\n /**\n * - number of items to display in the autocomplete dropdown\n * @name limitItemsTo\n */\n this.limitItemsTo = defaults.dropdown.limitItemsTo;\n /**\n * @name displayBy\n */\n this.displayBy = defaults.dropdown.displayBy;\n /**\n * @name identifyBy\n */\n this.identifyBy = defaults.dropdown.identifyBy;\n /**\n * @description a function a developer can use to implement custom matching for the autocomplete\n * @name matchingFn\n */\n this.matchingFn = defaults.dropdown.matchingFn;\n /**\n * @name appendToBody\n */\n this.appendToBody = defaults.dropdown.appendToBody;\n /**\n * @name keepOpen\n * @description option to leave dropdown open when adding a new item\n */\n this.keepOpen = defaults.dropdown.keepOpen;\n /**\n * @name dynamicUpdate\n */\n this.dynamicUpdate = defaults.dropdown.dynamicUpdate;\n /**\n * @name zIndex\n */\n this.zIndex = defaults.dropdown.zIndex;\n /**\n * list of items that match the current value of the input (for autocomplete)\n * @name items\n */\n this.items = [];\n /**\n * @name tagInput\n */\n this.tagInput = this.injector.get(TagInputComponent);\n /**\n * @name _autocompleteItems\n */\n this._autocompleteItems = [];\n /**\n *\n * @name show\n */\n this.show = function () {\n var maxItemsReached = _this.tagInput.items.length === _this.tagInput.maxItems;\n var value = _this.getFormValue();\n var hasMinimumText = value.trim().length >= _this.minimumTextLength;\n var position = _this.calculatePosition();\n var items = _this.getMatchingItems(value);\n var hasItems = items.length > 0;\n var isHidden = _this.isVisible === false;\n var showDropdownIfEmpty = _this.showDropdownIfEmpty && hasItems && !value;\n var isDisabled = _this.tagInput.disable;\n var shouldShow = isHidden && ((hasItems && hasMinimumText) || showDropdownIfEmpty);\n var shouldHide = _this.isVisible && !hasItems;\n if (_this.autocompleteObservable && hasMinimumText) {\n return _this.getItemsFromObservable(value);\n }\n if ((!_this.showDropdownIfEmpty && !value) || maxItemsReached || isDisabled) {\n return _this.dropdown.hide();\n }\n _this.setItems(items);\n if (shouldShow) {\n _this.dropdown.show(position);\n }\n else if (shouldHide) {\n _this.hide();\n }\n };\n /**\n * @name requestAdding\n * @param item {Ng2MenuItem}\n */\n this.requestAdding = function (item) { return __awaiter(_this, void 0, void 0, function () {\n var tag;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tag = this.createTagModel(item);\n return [4 /*yield*/, this.tagInput.onAddingRequested(true, tag).catch(function () { })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); };\n /**\n * @name resetItems\n */\n this.resetItems = function () {\n _this.items = [];\n };\n /**\n * @name getItemsFromObservable\n * @param text\n */\n this.getItemsFromObservable = function (text) {\n _this.setLoadingState(true);\n var subscribeFn = function (data) {\n // hide loading animation\n _this.setLoadingState(false)\n // add items\n .populateItems(data);\n _this.setItems(_this.getMatchingItems(text));\n if (_this.items.length) {\n _this.dropdown.show(_this.calculatePosition());\n }\n else {\n _this.dropdown.hide();\n }\n };\n _this.autocompleteObservable(text)\n .pipe(first())\n .subscribe(subscribeFn, function () { return _this.setLoadingState(false); });\n };\n }\n Object.defineProperty(TagInputDropdown.prototype, \"autocompleteItems\", {\n /**\n * @name autocompleteItems\n * @desc array of items that will populate the autocomplete\n */\n get: function () {\n var _this = this;\n var items = this._autocompleteItems;\n if (!items) {\n return [];\n }\n return items.map(function (item) {\n var _a;\n return typeof item === 'string' ? (_a = {},\n _a[_this.displayBy] = item,\n _a[_this.identifyBy] = item,\n _a) : item;\n });\n },\n /**\n * @name autocompleteItems\n * @param items\n */\n set: function (items) {\n this._autocompleteItems = items;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @name ngAfterviewInit\n */\n TagInputDropdown.prototype.ngAfterViewInit = function () {\n var _this = this;\n this.onItemClicked().subscribe(function (item) {\n _this.requestAdding(item);\n });\n // reset itemsMatching array when the dropdown is hidden\n this.onHide().subscribe(this.resetItems);\n var DEBOUNCE_TIME = 200;\n var KEEP_OPEN = this.keepOpen;\n this.tagInput\n .onTextChange\n .asObservable()\n .pipe(debounceTime(DEBOUNCE_TIME), filter(function (value) {\n if (KEEP_OPEN === false) {\n return value.length > 0;\n }\n return true;\n }))\n .subscribe(this.show);\n };\n /**\n * @name updatePosition\n */\n TagInputDropdown.prototype.updatePosition = function () {\n var position = this.tagInput.inputForm.getElementPosition();\n this.dropdown.menu.updatePosition(position, this.dynamicUpdate);\n };\n Object.defineProperty(TagInputDropdown.prototype, \"isVisible\", {\n /**\n * @name isVisible\n */\n get: function () {\n return this.dropdown.menu.state.menuState.isVisible;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @name onHide\n */\n TagInputDropdown.prototype.onHide = function () {\n return this.dropdown.onHide;\n };\n /**\n * @name onItemClicked\n */\n TagInputDropdown.prototype.onItemClicked = function () {\n return this.dropdown.onItemClicked;\n };\n Object.defineProperty(TagInputDropdown.prototype, \"selectedItem\", {\n /**\n * @name selectedItem\n */\n get: function () {\n return this.dropdown.menu.state.dropdownState.selectedItem;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TagInputDropdown.prototype, \"state\", {\n /**\n * @name state\n */\n get: function () {\n return this.dropdown.menu.state;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @name hide\n */\n TagInputDropdown.prototype.hide = function () {\n this.resetItems();\n this.dropdown.hide();\n };\n /**\n * @name scrollListener\n */\n TagInputDropdown.prototype.scrollListener = function () {\n if (!this.isVisible || !this.dynamicUpdate) {\n return;\n }\n this.updatePosition();\n };\n /**\n * @name onWindowBlur\n */\n TagInputDropdown.prototype.onWindowBlur = function () {\n this.dropdown.hide();\n };\n /**\n * @name getFormValue\n */\n TagInputDropdown.prototype.getFormValue = function () {\n var formValue = this.tagInput.formValue;\n return formValue ? formValue.toString().trim() : '';\n };\n /**\n * @name calculatePosition\n */\n TagInputDropdown.prototype.calculatePosition = function () {\n return this.tagInput.inputForm.getElementPosition();\n };\n /**\n * @name createTagModel\n * @param item\n */\n TagInputDropdown.prototype.createTagModel = function (item) {\n var _a;\n var display = typeof item.value === 'string' ? item.value : item.value[this.displayBy];\n var value = typeof item.value === 'string' ? item.value : item.value[this.identifyBy];\n return __assign({}, item.value, (_a = {}, _a[this.tagInput.displayBy] = display, _a[this.tagInput.identifyBy] = value, _a));\n };\n /**\n *\n * @param value {string}\n */\n TagInputDropdown.prototype.getMatchingItems = function (value) {\n var _this = this;\n if (!value && !this.showDropdownIfEmpty) {\n return [];\n }\n var dupesAllowed = this.tagInput.allowDupes;\n return this.autocompleteItems.filter(function (item) {\n var hasValue = dupesAllowed ? false : _this.tagInput.tags.some(function (tag) {\n var identifyBy = _this.tagInput.identifyBy;\n var model = typeof tag.model === 'string' ? tag.model : tag.model[identifyBy];\n return model === item[_this.identifyBy];\n });\n return _this.matchingFn(value, item) && (hasValue === false);\n });\n };\n /**\n * @name setItems\n */\n TagInputDropdown.prototype.setItems = function (items) {\n this.items = items.slice(0, this.limitItemsTo || items.length);\n };\n /**\n * @name populateItems\n * @param data\n */\n TagInputDropdown.prototype.populateItems = function (data) {\n var _this = this;\n this.autocompleteItems = data.map(function (item) {\n var _a;\n return typeof item === 'string' ? (_a = {},\n _a[_this.displayBy] = item,\n _a[_this.identifyBy] = item,\n _a) : item;\n });\n return this;\n };\n /**\n * @name setLoadingState\n * @param state\n */\n TagInputDropdown.prototype.setLoadingState = function (state) {\n this.tagInput.isLoading = state;\n return this;\n };\n __decorate([\n ViewChild(Ng2Dropdown, { static: false }),\n __metadata(\"design:type\", Ng2Dropdown)\n ], TagInputDropdown.prototype, \"dropdown\", void 0);\n __decorate([\n ContentChildren(TemplateRef),\n __metadata(\"design:type\", QueryList)\n ], TagInputDropdown.prototype, \"templates\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputDropdown.prototype, \"offset\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"focusFirstElement\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"showDropdownIfEmpty\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Function)\n ], TagInputDropdown.prototype, \"autocompleteObservable\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"minimumTextLength\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], TagInputDropdown.prototype, \"limitItemsTo\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"displayBy\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"identifyBy\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Function)\n ], TagInputDropdown.prototype, \"matchingFn\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"appendToBody\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"keepOpen\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"dynamicUpdate\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputDropdown.prototype, \"zIndex\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n ], TagInputDropdown.prototype, \"autocompleteItems\", null);\n __decorate([\n HostListener('window:scroll'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], TagInputDropdown.prototype, \"scrollListener\", null);\n __decorate([\n HostListener('window:blur'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], TagInputDropdown.prototype, \"onWindowBlur\", null);\n TagInputDropdown = __decorate([\n Component({\n selector: 'tag-input-dropdown',\n template: \"\\n \\n \\n\\n \\n \\n\\n \\n \\n \\n \\n\\n\"\n }),\n __metadata(\"design:paramtypes\", [Injector])\n ], TagInputDropdown);\n return TagInputDropdown;\n}());\n\n// angular universal hacks\n/* tslint:disable-next-line */\nvar DragEvent = window.DragEvent;\nvar CUSTOM_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(function () { return TagInputComponent; }),\n multi: true\n};\nvar TagInputComponent = /** @class */ (function (_super) {\n __extends(TagInputComponent, _super);\n function TagInputComponent(renderer, dragProvider) {\n var _a;\n var _this = _super.call(this) || this;\n _this.renderer = renderer;\n _this.dragProvider = dragProvider;\n /**\n * @name separatorKeys\n * @desc keyboard keys with which a user can separate items\n */\n _this.separatorKeys = defaults.tagInput.separatorKeys;\n /**\n * @name separatorKeyCodes\n * @desc keyboard key codes with which a user can separate items\n */\n _this.separatorKeyCodes = defaults.tagInput.separatorKeyCodes;\n /**\n * @name placeholder\n * @desc the placeholder of the input text\n */\n _this.placeholder = defaults.tagInput.placeholder;\n /**\n * @name secondaryPlaceholder\n * @desc placeholder to appear when the input is empty\n */\n _this.secondaryPlaceholder = defaults.tagInput.secondaryPlaceholder;\n /**\n * @name maxItems\n * @desc maximum number of items that can be added\n */\n _this.maxItems = defaults.tagInput.maxItems;\n /**\n * @name validators\n * @desc array of Validators that are used to validate the tag before it gets appended to the list\n */\n _this.validators = defaults.tagInput.validators;\n /**\n * @name asyncValidators\n * @desc array of AsyncValidator that are used to validate the tag before it gets appended to the list\n */\n _this.asyncValidators = defaults.tagInput.asyncValidators;\n /**\n * - if set to true, it will only possible to add items from the autocomplete\n * @name onlyFromAutocomplete\n */\n _this.onlyFromAutocomplete = defaults.tagInput.onlyFromAutocomplete;\n /**\n * @name errorMessages\n */\n _this.errorMessages = defaults.tagInput.errorMessages;\n /**\n * @name theme\n */\n _this.theme = defaults.tagInput.theme;\n /**\n * @name onTextChangeDebounce\n */\n _this.onTextChangeDebounce = defaults.tagInput.onTextChangeDebounce;\n /**\n * - custom id assigned to the input\n * @name id\n */\n _this.inputId = defaults.tagInput.inputId;\n /**\n * - custom class assigned to the input\n */\n _this.inputClass = defaults.tagInput.inputClass;\n /**\n * - option to clear text input when the form is blurred\n * @name clearOnBlur\n */\n _this.clearOnBlur = defaults.tagInput.clearOnBlur;\n /**\n * - hideForm\n * @name clearOnBlur\n */\n _this.hideForm = defaults.tagInput.hideForm;\n /**\n * @name addOnBlur\n */\n _this.addOnBlur = defaults.tagInput.addOnBlur;\n /**\n * @name addOnPaste\n */\n _this.addOnPaste = defaults.tagInput.addOnPaste;\n /**\n * - pattern used with the native method split() to separate patterns in the string pasted\n * @name pasteSplitPattern\n */\n _this.pasteSplitPattern = defaults.tagInput.pasteSplitPattern;\n /**\n * @name blinkIfDupe\n */\n _this.blinkIfDupe = defaults.tagInput.blinkIfDupe;\n /**\n * @name removable\n */\n _this.removable = defaults.tagInput.removable;\n /**\n * @name editable\n */\n _this.editable = defaults.tagInput.editable;\n /**\n * @name allowDupes\n */\n _this.allowDupes = defaults.tagInput.allowDupes;\n /**\n * @description if set to true, the newly added tags will be added as strings, and not objects\n * @name modelAsStrings\n */\n _this.modelAsStrings = defaults.tagInput.modelAsStrings;\n /**\n * @name trimTags\n */\n _this.trimTags = defaults.tagInput.trimTags;\n /**\n * @name ripple\n */\n _this.ripple = defaults.tagInput.ripple;\n /**\n * @name tabindex\n * @desc pass through the specified tabindex to the input\n */\n _this.tabindex = defaults.tagInput.tabIndex;\n /**\n * @name disable\n */\n _this.disable = defaults.tagInput.disable;\n /**\n * @name dragZone\n */\n _this.dragZone = defaults.tagInput.dragZone;\n /**\n * @name onRemoving\n */\n _this.onRemoving = defaults.tagInput.onRemoving;\n /**\n * @name onAdding\n */\n _this.onAdding = defaults.tagInput.onAdding;\n /**\n * @name animationDuration\n */\n _this.animationDuration = defaults.tagInput.animationDuration;\n /**\n * @name onAdd\n * @desc event emitted when adding a new item\n */\n _this.onAdd = new EventEmitter();\n /**\n * @name onRemove\n * @desc event emitted when removing an existing item\n */\n _this.onRemove = new EventEmitter();\n /**\n * @name onSelect\n * @desc event emitted when selecting an item\n */\n _this.onSelect = new EventEmitter();\n /**\n * @name onFocus\n * @desc event emitted when the input is focused\n */\n _this.onFocus = new EventEmitter();\n /**\n * @name onFocus\n * @desc event emitted when the input is blurred\n */\n _this.onBlur = new EventEmitter();\n /**\n * @name onTextChange\n * @desc event emitted when the input value changes\n */\n _this.onTextChange = new EventEmitter();\n /**\n * - output triggered when text is pasted in the form\n * @name onPaste\n */\n _this.onPaste = new EventEmitter();\n /**\n * - output triggered when tag entered is not valid\n * @name onValidationError\n */\n _this.onValidationError = new EventEmitter();\n /**\n * - output triggered when tag is edited\n * @name onTagEdited\n */\n _this.onTagEdited = new EventEmitter();\n /**\n * @name isLoading\n */\n _this.isLoading = false;\n /**\n * @name listeners\n * @desc array of events that get fired using @fireEvents\n */\n _this.listeners = (_a = {},\n _a[KEYDOWN] = [],\n _a[KEYUP] = [],\n _a);\n /**\n * @description emitter for the 2-way data binding inputText value\n * @name inputTextChange\n */\n _this.inputTextChange = new EventEmitter();\n /**\n * @description private variable to bind get/set\n * @name inputTextValue\n */\n _this.inputTextValue = '';\n _this.errors = [];\n /**\n * @name appendTag\n * @param tag {TagModel}\n */\n _this.appendTag = function (tag, index) {\n if (index === void 0) { index = _this.items.length; }\n var items = _this.items;\n var model = _this.modelAsStrings ? tag[_this.identifyBy] : tag;\n _this.items = __spread(items.slice(0, index), [\n model\n ], items.slice(index, items.length));\n };\n /**\n * @name createTag\n * @param model\n */\n _this.createTag = function (model) {\n var _a;\n var trim = function (val, key) {\n return typeof val === 'string' ? val.trim() : val[key];\n };\n return __assign({}, typeof model !== 'string' ? model : {}, (_a = {}, _a[_this.displayBy] = _this.trimTags ? trim(model, _this.displayBy) : model, _a[_this.identifyBy] = _this.trimTags ? trim(model, _this.identifyBy) : model, _a));\n };\n /**\n *\n * @param tag\n * @param isFromAutocomplete\n */\n _this.isTagValid = function (tag, fromAutocomplete) {\n if (fromAutocomplete === void 0) { fromAutocomplete = false; }\n var selectedItem = _this.dropdown ? _this.dropdown.selectedItem : undefined;\n var value = _this.getItemDisplay(tag).trim();\n if (selectedItem && !fromAutocomplete || !value) {\n return false;\n }\n var dupe = _this.findDupe(tag, fromAutocomplete);\n // if so, give a visual cue and return false\n if (!_this.allowDupes && dupe && _this.blinkIfDupe) {\n var model = _this.tags.find(function (item) {\n return _this.getItemValue(item.model) === _this.getItemValue(dupe);\n });\n if (model) {\n model.blink();\n }\n }\n var isFromAutocomplete = fromAutocomplete && _this.onlyFromAutocomplete;\n var assertions = [\n // 1. there must be no dupe OR dupes are allowed\n !dupe || _this.allowDupes,\n // 2. check max items has not been reached\n !_this.maxItemsReached,\n // 3. check item comes from autocomplete or onlyFromAutocomplete is false\n ((isFromAutocomplete) || !_this.onlyFromAutocomplete)\n ];\n return assertions.filter(Boolean).length === assertions.length;\n };\n /**\n * @name onPasteCallback\n * @param data\n */\n _this.onPasteCallback = function (data) { return __awaiter(_this, void 0, void 0, function () {\n var getText, text, requests, resetInput;\n var _this = this;\n return __generator(this, function (_a) {\n getText = function () {\n var isIE = Boolean(window.clipboardData);\n var clipboardData = isIE ? (window.clipboardData) : data.clipboardData;\n var type = isIE ? 'Text' : 'text/plain';\n return clipboardData === null ? '' : clipboardData.getData(type) || '';\n };\n text = getText();\n requests = text\n .split(this.pasteSplitPattern)\n .map(function (item) {\n var tag = _this.createTag(item);\n _this.setInputValue(tag[_this.displayBy]);\n return _this.onAddingRequested(false, tag);\n });\n resetInput = function () { return setTimeout(function () { return _this.setInputValue(''); }, 50); };\n Promise.all(requests).then(function () {\n _this.onPaste.emit(text);\n resetInput();\n })\n .catch(resetInput);\n return [2 /*return*/];\n });\n }); };\n return _this;\n }\n Object.defineProperty(TagInputComponent.prototype, \"inputText\", {\n /**\n * @name inputText\n */\n get: function () {\n return this.inputTextValue;\n },\n /**\n * @name inputText\n * @param text\n */\n set: function (text) {\n this.inputTextValue = text;\n this.inputTextChange.emit(text);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TagInputComponent.prototype, \"tabindexAttr\", {\n /**\n * @desc removes the tab index if it is set - it will be passed through to the input\n * @name tabindexAttr\n */\n get: function () {\n return this.tabindex !== '' ? '-1' : '';\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @name ngAfterViewInit\n */\n TagInputComponent.prototype.ngAfterViewInit = function () {\n // set up listeners\n var _this = this;\n this.setUpKeypressListeners();\n this.setupSeparatorKeysListener();\n this.setUpInputKeydownListeners();\n if (this.onTextChange.observers.length) {\n this.setUpTextChangeSubscriber();\n }\n // if clear on blur is set to true, subscribe to the event and clear the text's form\n if (this.clearOnBlur || this.addOnBlur) {\n this.setUpOnBlurSubscriber();\n }\n // if addOnPaste is set to true, register the handler and add items\n if (this.addOnPaste) {\n this.setUpOnPasteListener();\n }\n var statusChanges$ = this.inputForm.form.statusChanges;\n statusChanges$.pipe(filter(function (status) { return status !== 'PENDING'; })).subscribe(function () {\n _this.errors = _this.inputForm.getErrorMessages(_this.errorMessages);\n });\n this.isProgressBarVisible$ = statusChanges$.pipe(map(function (status) {\n return status === 'PENDING' || _this.isLoading;\n }));\n // if hideForm is set to true, remove the input\n if (this.hideForm) {\n this.inputForm.destroy();\n }\n };\n /**\n * @name ngOnInit\n */\n TagInputComponent.prototype.ngOnInit = function () {\n // if the number of items specified in the model is > of the value of maxItems\n // degrade gracefully and let the max number of items to be the number of items in the model\n // though, warn the user.\n var hasReachedMaxItems = this.maxItems !== undefined &&\n this.items &&\n this.items.length > this.maxItems;\n if (hasReachedMaxItems) {\n this.maxItems = this.items.length;\n console.warn(MAX_ITEMS_WARNING);\n }\n // Setting editable to false to fix problem with tags in IE still being editable when\n // onlyFromAutocomplete is true\n this.editable = this.onlyFromAutocomplete ? false : this.editable;\n this.setAnimationMetadata();\n };\n /**\n * @name onRemoveRequested\n * @param tag\n * @param index\n */\n TagInputComponent.prototype.onRemoveRequested = function (tag, index) {\n var _this = this;\n return new Promise(function (resolve) {\n var subscribeFn = function (model) {\n _this.removeItem(model, index);\n resolve(tag);\n };\n _this.onRemoving ?\n _this.onRemoving(tag)\n .pipe(first())\n .subscribe(subscribeFn) : subscribeFn(tag);\n });\n };\n /**\n * @name onAddingRequested\n * @param fromAutocomplete {boolean}\n * @param tag {TagModel}\n * @param index? {number}\n * @param giveupFocus? {boolean}\n */\n TagInputComponent.prototype.onAddingRequested = function (fromAutocomplete, tag, index, giveupFocus) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var subscribeFn = function (model) {\n return _this\n .addItem(fromAutocomplete, model, index, giveupFocus)\n .then(resolve)\n .catch(reject);\n };\n return _this.onAdding ?\n _this.onAdding(tag)\n .pipe(first())\n .subscribe(subscribeFn, reject) : subscribeFn(tag);\n });\n };\n /**\n * @name selectItem\n * @desc selects item passed as parameter as the selected tag\n * @param item\n * @param emit\n */\n TagInputComponent.prototype.selectItem = function (item, emit) {\n if (emit === void 0) { emit = true; }\n var isReadonly = item && typeof item !== 'string' && item.readonly;\n if (isReadonly || this.selectedTag === item) {\n return;\n }\n this.selectedTag = item;\n if (emit) {\n this.onSelect.emit(item);\n }\n };\n /**\n * @name fireEvents\n * @desc goes through the list of the events for a given eventName, and fires each of them\n * @param eventName\n * @param $event\n */\n TagInputComponent.prototype.fireEvents = function (eventName, $event) {\n var _this = this;\n this.listeners[eventName].forEach(function (listener) { return listener.call(_this, $event); });\n };\n /**\n * @name handleKeydown\n * @desc handles action when the user hits a keyboard key\n * @param data\n */\n TagInputComponent.prototype.handleKeydown = function (data) {\n var event = data.event;\n var key = event.keyCode || event.which;\n var shiftKey = event.shiftKey || false;\n switch (KEY_PRESS_ACTIONS[key]) {\n case ACTIONS_KEYS.DELETE:\n if (this.selectedTag && this.removable) {\n var index = this.items.indexOf(this.selectedTag);\n this.onRemoveRequested(this.selectedTag, index);\n }\n break;\n case ACTIONS_KEYS.SWITCH_PREV:\n this.moveToTag(data.model, PREV);\n break;\n case ACTIONS_KEYS.SWITCH_NEXT:\n this.moveToTag(data.model, NEXT);\n break;\n case ACTIONS_KEYS.TAB:\n if (shiftKey) {\n if (this.isFirstTag(data.model)) {\n return;\n }\n this.moveToTag(data.model, PREV);\n }\n else {\n if (this.isLastTag(data.model) && (this.disable || this.maxItemsReached)) {\n return;\n }\n this.moveToTag(data.model, NEXT);\n }\n break;\n default:\n return;\n }\n // prevent default behaviour\n event.preventDefault();\n };\n TagInputComponent.prototype.onFormSubmit = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.onAddingRequested(false, this.formValue)];\n case 1:\n _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = _b.sent();\n return [2 /*return*/];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * @name setInputValue\n * @param value\n */\n TagInputComponent.prototype.setInputValue = function (value, emitEvent) {\n if (emitEvent === void 0) { emitEvent = true; }\n var control = this.getControl();\n // update form value with the transformed item\n control.setValue(value, { emitEvent: emitEvent });\n };\n /**\n * @name getControl\n */\n TagInputComponent.prototype.getControl = function () {\n return this.inputForm.value;\n };\n /**\n * @name focus\n * @param applyFocus\n * @param displayAutocomplete\n */\n TagInputComponent.prototype.focus = function (applyFocus, displayAutocomplete) {\n if (applyFocus === void 0) { applyFocus = false; }\n if (this.dragProvider.getState('dragging')) {\n return;\n }\n this.selectItem(undefined, false);\n if (applyFocus) {\n this.inputForm.focus();\n this.onFocus.emit(this.formValue);\n }\n };\n /**\n * @name blur\n */\n TagInputComponent.prototype.blur = function () {\n this.onTouched();\n this.onBlur.emit(this.formValue);\n };\n /**\n * @name hasErrors\n */\n TagInputComponent.prototype.hasErrors = function () {\n return !!this.inputForm && this.inputForm.hasErrors();\n };\n /**\n * @name isInputFocused\n */\n TagInputComponent.prototype.isInputFocused = function () {\n return !!this.inputForm && this.inputForm.isInputFocused();\n };\n /**\n * - this is the one way I found to tell if the template has been passed and it is not\n * the template for the menu item\n * @name hasCustomTemplate\n */\n TagInputComponent.prototype.hasCustomTemplate = function () {\n var template = this.templates ? this.templates.first : undefined;\n var menuTemplate = this.dropdown && this.dropdown.templates ?\n this.dropdown.templates.first : undefined;\n return Boolean(template && template !== menuTemplate);\n };\n Object.defineProperty(TagInputComponent.prototype, \"maxItemsReached\", {\n /**\n * @name maxItemsReached\n */\n get: function () {\n return this.maxItems !== undefined &&\n this.items.length >= this.maxItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TagInputComponent.prototype, \"formValue\", {\n /**\n * @name formValue\n */\n get: function () {\n var form = this.inputForm.value;\n return form ? form.value : '';\n },\n enumerable: true,\n configurable: true\n });\n /**3\n * @name onDragStarted\n * @param event\n * @param index\n */\n TagInputComponent.prototype.onDragStarted = function (event, tag, index) {\n event.stopPropagation();\n var item = { zone: this.dragZone, tag: tag, index: index };\n this.dragProvider.setSender(this);\n this.dragProvider.setDraggedItem(event, item);\n this.dragProvider.setState({ dragging: true, index: index });\n };\n /**\n * @name onDragOver\n * @param event\n */\n TagInputComponent.prototype.onDragOver = function (event, index) {\n this.dragProvider.setState({ dropping: true });\n this.dragProvider.setReceiver(this);\n event.preventDefault();\n };\n /**\n * @name onTagDropped\n * @param event\n * @param index\n */\n TagInputComponent.prototype.onTagDropped = function (event, index) {\n var item = this.dragProvider.getDraggedItem(event);\n if (!item || item.zone !== this.dragZone) {\n return;\n }\n this.dragProvider.onTagDropped(item.tag, item.index, index);\n event.preventDefault();\n event.stopPropagation();\n };\n /**\n * @name isDropping\n */\n TagInputComponent.prototype.isDropping = function () {\n var isReceiver = this.dragProvider.receiver === this;\n var isDropping = this.dragProvider.getState('dropping');\n return Boolean(isReceiver && isDropping);\n };\n /**\n * @name onTagBlurred\n * @param changedElement {TagModel}\n * @param index {number}\n */\n TagInputComponent.prototype.onTagBlurred = function (changedElement, index) {\n this.items[index] = changedElement;\n this.blur();\n };\n /**\n * @name trackBy\n * @param items\n */\n TagInputComponent.prototype.trackBy = function (index, item) {\n return item[this.identifyBy];\n };\n /**\n * @name updateEditedTag\n * @param tag\n */\n TagInputComponent.prototype.updateEditedTag = function (_a) {\n var tag = _a.tag, index = _a.index;\n this.onTagEdited.emit(tag);\n };\n /**\n * @name moveToTag\n * @param item\n * @param direction\n */\n TagInputComponent.prototype.moveToTag = function (item, direction) {\n var isLast = this.isLastTag(item);\n var isFirst = this.isFirstTag(item);\n var stopSwitch = (direction === NEXT && isLast) ||\n (direction === PREV && isFirst);\n if (stopSwitch) {\n this.focus(true);\n return;\n }\n var offset = direction === NEXT ? 1 : -1;\n var index = this.getTagIndex(item) + offset;\n var tag = this.getTagAtIndex(index);\n return tag.select.call(tag);\n };\n /**\n * @name isFirstTag\n * @param item {TagModel}\n */\n TagInputComponent.prototype.isFirstTag = function (item) {\n return this.tags.first.model === item;\n };\n /**\n * @name isLastTag\n * @param item {TagModel}\n */\n TagInputComponent.prototype.isLastTag = function (item) {\n return this.tags.last.model === item;\n };\n /**\n * @name getTagIndex\n * @param item\n */\n TagInputComponent.prototype.getTagIndex = function (item) {\n var tags = this.tags.toArray();\n return tags.findIndex(function (tag) { return tag.model === item; });\n };\n /**\n * @name getTagAtIndex\n * @param index\n */\n TagInputComponent.prototype.getTagAtIndex = function (index) {\n var tags = this.tags.toArray();\n return tags[index];\n };\n /**\n * @name removeItem\n * @desc removes an item from the array of the model\n * @param tag {TagModel}\n * @param index {number}\n */\n TagInputComponent.prototype.removeItem = function (tag, index) {\n this.items = this.getItemsWithout(index);\n // if the removed tag was selected, set it as undefined\n if (this.selectedTag === tag) {\n this.selectItem(undefined, false);\n }\n // focus input\n this.focus(true, false);\n // emit remove event\n this.onRemove.emit(tag);\n };\n /**\n * @name addItem\n * @desc adds the current text model to the items array\n * @param fromAutocomplete {boolean}\n * @param item {TagModel}\n * @param index? {number}\n * @param giveupFocus? {boolean}\n */\n TagInputComponent.prototype.addItem = function (fromAutocomplete, item, index, giveupFocus) {\n var _this = this;\n if (fromAutocomplete === void 0) { fromAutocomplete = false; }\n var display = this.getItemDisplay(item);\n var tag = this.createTag(item);\n if (fromAutocomplete) {\n this.setInputValue(this.getItemValue(item, true));\n }\n return new Promise(function (resolve, reject) {\n /**\n * @name reset\n */\n var reset = function () {\n // reset control and focus input\n _this.setInputValue('');\n if (giveupFocus) {\n _this.focus(false, false);\n }\n else {\n // focus input\n _this.focus(true, false);\n }\n resolve(display);\n };\n var appendItem = function () {\n _this.appendTag(tag, index);\n // emit event\n _this.onAdd.emit(tag);\n if (!_this.dropdown) {\n return;\n }\n _this.dropdown.hide();\n if (_this.dropdown.showDropdownIfEmpty) {\n _this.dropdown.show();\n }\n };\n var status = _this.inputForm.form.status;\n var isTagValid = _this.isTagValid(tag, fromAutocomplete);\n var onValidationError = function () {\n _this.onValidationError.emit(tag);\n return reject();\n };\n if (status === 'VALID' && isTagValid) {\n appendItem();\n return reset();\n }\n if (status === 'INVALID' || !isTagValid) {\n reset();\n return onValidationError();\n }\n if (status === 'PENDING') {\n var statusUpdate$ = _this.inputForm.form.statusChanges;\n return statusUpdate$\n .pipe(filter(function (statusUpdate) { return statusUpdate !== 'PENDING'; }), first())\n .subscribe(function (statusUpdate) {\n if (statusUpdate === 'VALID' && isTagValid) {\n appendItem();\n resolve();\n }\n else {\n onValidationError();\n }\n });\n }\n });\n };\n /**\n * @name setupSeparatorKeysListener\n */\n TagInputComponent.prototype.setupSeparatorKeysListener = function () {\n var _this = this;\n var useSeparatorKeys = this.separatorKeyCodes.length > 0 || this.separatorKeys.length > 0;\n var listener = function ($event) {\n var hasKeyCode = _this.separatorKeyCodes.indexOf($event.keyCode) >= 0;\n var hasKey = _this.separatorKeys.indexOf($event.key) >= 0;\n // the keyCode of keydown event is 229 when IME is processing the key event.\n var isIMEProcessing = $event.keyCode === 229;\n if (hasKeyCode || (hasKey && !isIMEProcessing)) {\n $event.preventDefault();\n _this.onAddingRequested(false, _this.formValue)\n .catch(function () { });\n }\n };\n listen.call(this, KEYDOWN, listener, useSeparatorKeys);\n };\n /**\n * @name setUpKeypressListeners\n */\n TagInputComponent.prototype.setUpKeypressListeners = function () {\n var _this = this;\n var listener = function ($event) {\n var isCorrectKey = $event.keyCode === 37 || $event.keyCode === 8;\n if (isCorrectKey &&\n !_this.formValue &&\n _this.items.length) {\n _this.tags.last.select.call(_this.tags.last);\n }\n };\n // setting up the keypress listeners\n listen.call(this, KEYDOWN, listener);\n };\n /**\n * @name setUpKeydownListeners\n */\n TagInputComponent.prototype.setUpInputKeydownListeners = function () {\n var _this = this;\n this.inputForm.onKeydown.subscribe(function (event) {\n _this.fireEvents('keydown', event);\n if (event.key === 'Backspace' && _this.formValue.trim() === '') {\n event.preventDefault();\n }\n });\n };\n /**\n * @name setUpOnPasteListener\n */\n TagInputComponent.prototype.setUpOnPasteListener = function () {\n var _this = this;\n var input = this.inputForm.input.nativeElement;\n // attach listener to input\n this.renderer.listen(input, 'paste', function (event) {\n _this.onPasteCallback(event);\n event.preventDefault();\n return true;\n });\n };\n /**\n * @name setUpTextChangeSubscriber\n */\n TagInputComponent.prototype.setUpTextChangeSubscriber = function () {\n var _this = this;\n this.inputForm.form\n .valueChanges\n .pipe(debounceTime(this.onTextChangeDebounce))\n .subscribe(function (value) {\n _this.onTextChange.emit(value.item);\n });\n };\n /**\n * @name setUpOnBlurSubscriber\n */\n TagInputComponent.prototype.setUpOnBlurSubscriber = function () {\n var _this = this;\n var filterFn = function () {\n var isVisible = _this.dropdown && _this.dropdown.isVisible;\n return !isVisible && !!_this.formValue;\n };\n this.inputForm\n .onBlur\n .pipe(debounceTime(100), filter(filterFn))\n .subscribe(function () {\n var reset = function () { return _this.setInputValue(''); };\n if (_this.addOnBlur) {\n return _this\n .onAddingRequested(false, _this.formValue, undefined, true)\n .then(reset)\n .catch(reset);\n }\n reset();\n });\n };\n /**\n * @name findDupe\n * @param tag\n * @param isFromAutocomplete\n */\n TagInputComponent.prototype.findDupe = function (tag, isFromAutocomplete) {\n var _this = this;\n var identifyBy = isFromAutocomplete ? this.dropdown.identifyBy : this.identifyBy;\n var id = tag[identifyBy];\n return this.items.find(function (item) { return _this.getItemValue(item) === id; });\n };\n /**\n * @name setAnimationMetadata\n */\n TagInputComponent.prototype.setAnimationMetadata = function () {\n this.animationMetadata = {\n value: 'in',\n params: __assign({}, this.animationDuration)\n };\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], TagInputComponent.prototype, \"separatorKeys\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], TagInputComponent.prototype, \"separatorKeyCodes\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputComponent.prototype, \"placeholder\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputComponent.prototype, \"secondaryPlaceholder\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], TagInputComponent.prototype, \"maxItems\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], TagInputComponent.prototype, \"validators\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], TagInputComponent.prototype, \"asyncValidators\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onlyFromAutocomplete\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"errorMessages\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputComponent.prototype, \"theme\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onTextChangeDebounce\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"inputId\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputComponent.prototype, \"inputClass\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagInputComponent.prototype, \"clearOnBlur\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagInputComponent.prototype, \"hideForm\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagInputComponent.prototype, \"addOnBlur\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagInputComponent.prototype, \"addOnPaste\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"pasteSplitPattern\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"blinkIfDupe\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"removable\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagInputComponent.prototype, \"editable\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"allowDupes\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"modelAsStrings\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"trimTags\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], TagInputComponent.prototype, \"inputText\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagInputComponent.prototype, \"ripple\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputComponent.prototype, \"tabindex\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], TagInputComponent.prototype, \"disable\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], TagInputComponent.prototype, \"dragZone\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onRemoving\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onAdding\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"animationDuration\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onAdd\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onRemove\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onSelect\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onFocus\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onBlur\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onTextChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onPaste\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onValidationError\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], TagInputComponent.prototype, \"onTagEdited\", void 0);\n __decorate([\n ContentChild(TagInputDropdown, { static: false }),\n __metadata(\"design:type\", TagInputDropdown)\n ], TagInputComponent.prototype, \"dropdown\", void 0);\n __decorate([\n ContentChildren(TemplateRef, { descendants: false }),\n __metadata(\"design:type\", QueryList)\n ], TagInputComponent.prototype, \"templates\", void 0);\n __decorate([\n ViewChild(TagInputForm, { static: false }),\n __metadata(\"design:type\", TagInputForm)\n ], TagInputComponent.prototype, \"inputForm\", void 0);\n __decorate([\n ViewChildren(TagComponent),\n __metadata(\"design:type\", QueryList)\n ], TagInputComponent.prototype, \"tags\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], TagInputComponent.prototype, \"inputTextChange\", void 0);\n __decorate([\n HostBinding('attr.tabindex'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], TagInputComponent.prototype, \"tabindexAttr\", null);\n TagInputComponent = __decorate([\n Component({\n selector: 'tag-input',\n providers: [CUSTOM_ACCESSOR],\n template: \"\\n\\n \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n\\n\\n\\n\\n \\n {{ error }}\\n \\n\\n\",\n animations: animations,\n styles: [\".dark tag:focus{box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;transition:.25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.minimal.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.dark.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.bootstrap.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.bootstrap3-info.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;padding:4px;cursor:text;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{box-shadow:inset 0 1px 1px #d9534f;border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}.progress-bar,.progress-bar:before{height:2px;width:100%;margin:0}.progress-bar{background-color:#2196f3;display:flex;position:absolute;bottom:0}.progress-bar:before{background-color:#82c4f8;content:\\\"\\\";-webkit-animation:2s cubic-bezier(.4,0,.2,1) infinite running-progress;animation:2s cubic-bezier(.4,0,.2,1) infinite running-progress}@-webkit-keyframes running-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0}100%{margin-left:100%;margin-right:0}}@keyframes running-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0}100%{margin-left:100%;margin-right:0}}tag{display:flex;flex-direction:row;flex-wrap:wrap;font-family:Roboto,\\\"Helvetica Neue\\\",sans-serif;font-weight:400;font-size:1em;letter-spacing:.05rem;color:#444;border-radius:16px;transition:.3s;margin:.1rem .3rem .1rem 0;padding:.08rem .45rem;height:32px;line-height:34px;background:#efefef;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}tag:not(.readonly):not(.tag--editing):focus{background:#2196f3;color:#fff;box-shadow:0 2px 3px 1px #d4d1d1}tag:not(.readonly):not(.tag--editing):active{background:#0d8aee;color:#fff;box-shadow:0 2px 3px 1px #d4d1d1}tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#e2e2e2;color:initial;box-shadow:0 2px 3px 1px #d4d1d1}tag.readonly{cursor:default}tag.readonly:focus,tag:focus{outline:0}tag.tag--editing{background-color:#fff;border:1px solid #ccc;cursor:text}.minimal tag{display:flex;flex-direction:row;flex-wrap:wrap;border-radius:0;background:#f9f9f9;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.minimal tag:not(.readonly):not(.tag--editing):active,.minimal tag:not(.readonly):not(.tag--editing):focus{background:#d0d0d0;color:initial}.minimal tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#ececec}.minimal tag.readonly{cursor:default}.minimal tag.readonly:focus,.minimal tag:focus{outline:0}.minimal tag.tag--editing{cursor:text}.dark tag{display:flex;flex-direction:row;flex-wrap:wrap;color:#f9f9f9;border-radius:3px;background:#444;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.dark tag:not(.readonly):not(.tag--editing):focus{background:#efefef;color:#444}.dark tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#2b2b2b;color:#f9f9f9}.dark tag.readonly{cursor:default}.dark tag.readonly:focus,.dark tag:focus{outline:0}.dark tag.tag--editing{cursor:text}.bootstrap tag{display:flex;flex-direction:row;flex-wrap:wrap;color:#f9f9f9;border-radius:.25rem;background:#0275d8;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.bootstrap tag:not(.readonly):not(.tag--editing):active,.bootstrap tag:not(.readonly):not(.tag--editing):focus{background:#025aa5}.bootstrap tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#0267bf;color:#f9f9f9}.bootstrap tag.readonly{cursor:default}.bootstrap tag.readonly:focus,.bootstrap tag:focus{outline:0}.bootstrap tag.tag--editing{cursor:text}.bootstrap3-info tag{display:flex;flex-direction:row;flex-wrap:wrap;font-family:inherit;font-weight:400;font-size:95%;color:#fff;border-radius:.25em;background:#5bc0de;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative;padding:.25em .6em;text-align:center;white-space:nowrap}.bootstrap3-info tag:not(.readonly):not(.tag--editing):active,.bootstrap3-info tag:not(.readonly):not(.tag--editing):focus{background:#28a1c5}.bootstrap3-info tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#46b8da;color:#fff}.bootstrap3-info tag.readonly{cursor:default}.bootstrap3-info tag.readonly:focus,.bootstrap3-info tag:focus{outline:0}.bootstrap3-info tag.tag--editing{cursor:text}:host{display:block}\"]\n }),\n __metadata(\"design:paramtypes\", [Renderer2,\n DragProvider])\n ], TagInputComponent);\n return TagInputComponent;\n}(TagInputAccessor));\n\nvar DeleteIconComponent = /** @class */ (function () {\n function DeleteIconComponent() {\n }\n DeleteIconComponent = __decorate([\n Component({\n selector: 'delete-icon',\n template: \"\\n \\n \\n \\n\",\n styles: [\".dark tag:focus{box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;transition:.25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.minimal.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.dark.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.bootstrap.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.bootstrap3-info.ng2-tag-input{display:block;flex-direction:row;flex-wrap:wrap;position:relative;padding:4px;cursor:text;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{box-shadow:inset 0 1px 1px #d9534f;border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{flex-wrap:wrap;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}:host(delete-icon){width:20px;height:16px;transition:.15s;display:inline-block;text-align:right}:host(delete-icon) path{fill:#444}:host(delete-icon) svg{vertical-align:bottom;height:34px}:host(delete-icon):hover{-webkit-transform:scale(1.5) translateY(-3px);transform:scale(1.5) translateY(-3px)}:host-context(.dark){text-align:right}:host-context(.dark) path{fill:#fff}:host-context(.dark) svg{vertical-align:bottom;height:34px}:host-context(.minimal){text-align:right}:host-context(.minimal) path{fill:#444}:host-context(.minimal) svg{vertical-align:bottom;height:34px}:host-context(.bootstrap){text-align:right}:host-context(.bootstrap) path{fill:#fff}:host-context(.bootstrap) svg{vertical-align:bottom;height:34px}:host-context(tag:active) path,:host-context(tag:focus) path{fill:#fff}:host-context(.darktag:active) path,:host-context(.darktag:focus) path{fill:#000}:host-context(.minimaltag:active) path,:host-context(.minimaltag:focus) path{fill:#000}:host-context(.bootstraptag:active) path,:host-context(.bootstraptag:focus) path{fill:#fff}:host-context(.bootstrap3-info){height:inherit}:host-context(.bootstrap3-info) path{fill:#fff}\"]\n })\n ], DeleteIconComponent);\n return DeleteIconComponent;\n}());\n\nvar optionsProvider = new OptionsProvider();\nvar TagInputModule = /** @class */ (function () {\n function TagInputModule() {\n }\n /**\n * @name withDefaults\n * @param options {Options}\n */\n TagInputModule.withDefaults = function (options) {\n optionsProvider.setOptions(options);\n };\n TagInputModule = __decorate([\n NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n Ng2DropdownModule\n ],\n declarations: [\n TagInputComponent,\n DeleteIconComponent,\n TagInputForm,\n TagComponent,\n HighlightPipe,\n TagInputDropdown,\n TagRipple\n ],\n exports: [\n TagInputComponent,\n DeleteIconComponent,\n TagInputForm,\n TagComponent,\n HighlightPipe,\n TagInputDropdown,\n TagRipple\n ],\n providers: [\n DragProvider,\n { provide: COMPOSITION_BUFFER_MODE, useValue: false },\n ]\n })\n ], TagInputModule);\n return TagInputModule;\n}());\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DeleteIconComponent, TagComponent, TagInputComponent, TagInputDropdown, TagInputForm, TagInputModule, TagRipple, TagInputAccessor as ɵa, animations as ɵb, DragProvider as ɵc, HighlightPipe as ɵd };\n//# sourceMappingURL=ngx-chips.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ngx-chips/fesm5/ngx-chips.js\n// module id = 1015\n// module chunks = 8","import { Component, Output, Input, EventEmitter, ElementRef, Injectable, Renderer, ContentChildren, HostListener, ContentChild, NgModule } from '@angular/core';\nimport { trigger, style, transition, animate, keyframes, state } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownButton = /** @class */ (function () {\n function Ng2DropdownButton(element) {\n this.element = element;\n this.onMenuToggled = new EventEmitter();\n this.showCaret = true;\n }\n /**\n * \\@name toggleMenu\n * @desc emits event to toggle menu\n * @return {?}\n */\n Ng2DropdownButton.prototype.toggleMenu = /**\n * \\@name toggleMenu\n * @desc emits event to toggle menu\n * @return {?}\n */\n function () {\n this.onMenuToggled.emit(true);\n };\n /**\n * \\@name getPosition\n * @desc returns position of the button\n * @return {?}\n */\n Ng2DropdownButton.prototype.getPosition = /**\n * \\@name getPosition\n * @desc returns position of the button\n * @return {?}\n */\n function () {\n return this.element.nativeElement.getBoundingClientRect();\n };\n Ng2DropdownButton.decorators = [\n { type: Component, args: [{\n selector: 'ng2-dropdown-button',\n styles: [\".ng2-dropdown-button{font-family:Roboto,\\\"Helvetica Neue\\\",Helvetica,Arial;background:#fff;padding:.45rem .25rem;font-size:14px;letter-spacing:.08rem;color:#444;outline:0;cursor:pointer;font-weight:400;border:none;border-bottom:1px solid #efefef;text-align:left;min-width:100px;width:100%;display:flex;flex-direction:row;max-width:150px}.ng2-dropdown-button:hover{color:#222}.ng2-dropdown-button:active,.ng2-dropdown-button:focus{color:#222;border-bottom:2px solid #2196f3}.ng2-dropdown-button__label{flex:1 1 95%}.ng2-dropdown-button__caret{width:12px;height:12px;display:flex;flex:1 1 6%}:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button{border:none;min-width:40px;width:40px;border-radius:100%;transition:all .2s;text-align:center;height:40px;padding:.5em}:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button:active{background:rgba(0,0,0,.2)}\"],\n template: \"\\n \\n \\n \\n\\n \\n \\n \\n\\n\"\n },] },\n ];\n /** @nocollapse */\n Ng2DropdownButton.ctorParameters = function () { return [\n { type: ElementRef, },\n ]; };\n Ng2DropdownButton.propDecorators = {\n \"onMenuToggled\": [{ type: Output },],\n \"showCaret\": [{ type: Input },],\n };\n return Ng2DropdownButton;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar /** @type {?} */ KEYS = {\n BACKSPACE: 9,\n PREV: 38,\n NEXT: 40,\n ENTER: 13,\n ESCAPE: 27\n};\n/**\n * \\@name onSwitchNext\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onSwitchNext = function (index, items, state$$1) {\n if (index < items.length - 1) {\n state$$1.select(items[index + 1], true);\n }\n};\n/**\n * \\@name onSwitchPrev\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onSwitchPrev = function (index, items, state$$1) {\n if (index > 0) {\n state$$1.select(items[index - 1], true);\n }\n};\n/**\n * \\@name onBackspace\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onBackspace = function (index, items, state$$1) {\n if (index < items.length - 1) {\n state$$1.select(items[index + 1], true);\n }\n else {\n state$$1.select(items[0], true);\n }\n};\n/**\n * @this {?}\n * @return {?}\n */\nfunction onEscape() {\n this.hide();\n}\n/**\n * \\@name onItemClicked\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onItemClicked = function (index, items, state$$1) {\n return state$$1.selectedItem ? state$$1.selectedItem.click() : undefined;\n};\nvar /** @type {?} */ ACTIONS = (_a = {},\n _a[KEYS.BACKSPACE] = onBackspace,\n _a[KEYS.PREV] = onSwitchPrev,\n _a[KEYS.NEXT] = onSwitchNext,\n _a[KEYS.ENTER] = onItemClicked,\n _a[KEYS.ESCAPE] = onEscape,\n _a);\n/**\n * @param {?} event\n * @return {?}\n */\nfunction arrowKeysHandler(event) {\n if ([38, 40].indexOf(event.keyCode) > -1) {\n event.preventDefault();\n }\n}\nvar _a;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownState = /** @class */ (function () {\n function Ng2DropdownState() {\n this.onItemSelected = new EventEmitter();\n this.onItemClicked = new EventEmitter();\n this.onItemDestroyed = new EventEmitter();\n }\n Object.defineProperty(Ng2DropdownState.prototype, \"selectedItem\", {\n get: /**\n * \\@name selectedItem\n * @desc getter for _selectedItem\n * @return {?}\n */\n function () {\n return this._selectedItem;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * \\@name selects a menu item and emits event\n * @param {?} item\n * @param {?=} dispatchEvent\n * @return {?}\n */\n Ng2DropdownState.prototype.select = /**\n * \\@name selects a menu item and emits event\n * @param {?} item\n * @param {?=} dispatchEvent\n * @return {?}\n */\n function (item, dispatchEvent) {\n if (dispatchEvent === void 0) { dispatchEvent = true; }\n this._selectedItem = item;\n if (!dispatchEvent || !item) {\n return;\n }\n item.focus();\n this.onItemSelected.emit(item);\n };\n /**\n * \\@name unselect\n * @desc sets _selectedItem as undefined\n * @return {?}\n */\n Ng2DropdownState.prototype.unselect = /**\n * \\@name unselect\n * @desc sets _selectedItem as undefined\n * @return {?}\n */\n function () {\n this._selectedItem = undefined;\n };\n return Ng2DropdownState;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar DropdownStateService = /** @class */ (function () {\n function DropdownStateService() {\n this.menuState = {\n isVisible: /** @type {?} */ (false),\n toString: /**\n * @return {?}\n */\n function () {\n return this.isVisible === true ? 'visible' : 'hidden';\n }\n };\n this.dropdownState = new Ng2DropdownState();\n }\n DropdownStateService.decorators = [\n { type: Injectable },\n ];\n return DropdownStateService;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2MenuItem = /** @class */ (function () {\n function Ng2MenuItem(state$$1, element, renderer) {\n this.state = state$$1;\n this.element = element;\n this.renderer = renderer;\n /**\n * \\@preventClose\n * @desc if true, clicking on the item won't close the dropdown\n */\n this.preventClose = false;\n }\n /**\n * @return {?}\n */\n Ng2MenuItem.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n this.state.dropdownState.onItemDestroyed.emit(this);\n };\n Object.defineProperty(Ng2MenuItem.prototype, \"isSelected\", {\n get: /**\n * \\@name isSelected\n * @desc returns current selected item\n * @return {?}\n */\n function () {\n return this === this.state.dropdownState.selectedItem;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * \\@name click\n * @desc emits select event\n * @param {?=} $event\n * @return {?}\n */\n Ng2MenuItem.prototype.select = /**\n * \\@name click\n * @desc emits select event\n * @param {?=} $event\n * @return {?}\n */\n function ($event) {\n this.state.dropdownState.select(this, true);\n if ($event) {\n $event.stopPropagation();\n $event.preventDefault();\n }\n };\n /**\n * \\@name click\n * @desc emits click event\n * @return {?}\n */\n Ng2MenuItem.prototype.click = /**\n * \\@name click\n * @desc emits click event\n * @return {?}\n */\n function () {\n this.state.dropdownState.onItemClicked.emit(this);\n };\n /**\n * \\@name focus\n * @return {?}\n */\n Ng2MenuItem.prototype.focus = /**\n * \\@name focus\n * @return {?}\n */\n function () {\n this.renderer.invokeElementMethod(this.element.nativeElement.children[0], 'focus');\n };\n Ng2MenuItem.decorators = [\n { type: Component, args: [{\n selector: 'ng2-menu-item',\n styles: [\".ng2-menu-item{font-family:Roboto,\\\"Helvetica Neue\\\",Helvetica,Arial;background:#fff;color:rgba(0,0,0,.87);cursor:pointer;font-size:.9em;text-transform:none;font-weight:400;letter-spacing:.03em;height:48px;line-height:48px;padding:.3em 1.25rem;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:background .25s}.ng2-menu-item--selected{background:rgba(158,158,158,.2);outline:0}.ng2-menu-item:focus{outline:0}.ng2-menu-item:active{background:rgba(158,158,158,.4)}:host(ng2-menu-item) /deep/ [ng2-menu-item-icon]{vertical-align:middle;font-size:28px;width:1.5em;height:30px;color:rgba(0,0,0,.44)}\"],\n template: \"\\n \\n\\n\"\n },] },\n ];\n /** @nocollapse */\n Ng2MenuItem.ctorParameters = function () { return [\n { type: DropdownStateService, },\n { type: ElementRef, },\n { type: Renderer, },\n ]; };\n Ng2MenuItem.propDecorators = {\n \"preventClose\": [{ type: Input },],\n \"value\": [{ type: Input },],\n };\n return Ng2MenuItem;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownMenu = /** @class */ (function () {\n function Ng2DropdownMenu(state$$1, element, renderer) {\n this.state = state$$1;\n this.element = element;\n this.renderer = renderer;\n /**\n * \\@name width\n */\n this.width = 4;\n /**\n * \\@description if set to true, the first element of the dropdown will be automatically focused\n * \\@name focusFirstElement\n */\n this.focusFirstElement = true;\n /**\n * \\@name appendToBody\n */\n this.appendToBody = true;\n /**\n * \\@name zIndex\n */\n this.zIndex = 1000;\n this.listeners = {\n arrowHandler: undefined,\n handleKeypress: undefined\n };\n }\n /**\n * \\@name show\n * \\@shows menu and selects first item\n * @param {?=} position\n * @param {?=} dynamic\n * @return {?}\n */\n Ng2DropdownMenu.prototype.show = /**\n * \\@name show\n * \\@shows menu and selects first item\n * @param {?=} position\n * @param {?=} dynamic\n * @return {?}\n */\n function (position, dynamic) {\n if (dynamic === void 0) { dynamic = true; }\n var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n var /** @type {?} */ wd = typeof window !== 'undefined' ? window : undefined;\n if (!this.state.menuState.isVisible) {\n // setting handlers\n this.listeners.handleKeypress = this.renderer.listen(dc.body, 'keydown', this.handleKeypress.bind(this));\n this.listeners.arrowHandler = this.renderer.listen(wd, 'keydown', arrowKeysHandler);\n }\n // update state\n this.state.menuState.isVisible = true;\n if (position) {\n this.updatePosition(position, dynamic);\n }\n };\n /**\n * \\@name hide\n * @desc hides menu\n * @return {?}\n */\n Ng2DropdownMenu.prototype.hide = /**\n * \\@name hide\n * @desc hides menu\n * @return {?}\n */\n function () {\n this.state.menuState.isVisible = false;\n // reset selected item state\n this.state.dropdownState.unselect();\n // call function to unlisten\n this.listeners.arrowHandler ? this.listeners.arrowHandler() : undefined;\n this.listeners.handleKeypress ? this.listeners.handleKeypress() : undefined;\n };\n /**\n * \\@name updatePosition\n * @desc updates the menu position every time it is toggled\n * @param {?} position {ClientRect}\n * @param {?} dynamic {boolean}\n * @return {?}\n */\n Ng2DropdownMenu.prototype.updatePosition = /**\n * \\@name updatePosition\n * @desc updates the menu position every time it is toggled\n * @param {?} position {ClientRect}\n * @param {?} dynamic {boolean}\n * @return {?}\n */\n function (position, dynamic) {\n this.position = position;\n this.updateOnChange(dynamic);\n };\n /**\n * \\@name handleKeypress\n * @desc executes functions on keyPress based on the key pressed\n * @param {?} $event\n * @return {?}\n */\n Ng2DropdownMenu.prototype.handleKeypress = /**\n * \\@name handleKeypress\n * @desc executes functions on keyPress based on the key pressed\n * @param {?} $event\n * @return {?}\n */\n function ($event) {\n var /** @type {?} */ key = $event.keyCode;\n var /** @type {?} */ items = this.items.toArray();\n var /** @type {?} */ index = items.indexOf(this.state.dropdownState.selectedItem);\n if (!ACTIONS.hasOwnProperty(key)) {\n return;\n }\n ACTIONS[key].call(this, index, items, this.state.dropdownState);\n };\n /**\n * \\@name getMenuElement\n * @return {?}\n */\n Ng2DropdownMenu.prototype.getMenuElement = /**\n * \\@name getMenuElement\n * @return {?}\n */\n function () {\n return this.element.nativeElement.children[0];\n };\n /**\n * \\@name calcPositionOffset\n * @param {?} position\n * @return {?}\n */\n Ng2DropdownMenu.prototype.calcPositionOffset = /**\n * \\@name calcPositionOffset\n * @param {?} position\n * @return {?}\n */\n function (position) {\n var /** @type {?} */ wd = typeof window !== 'undefined' ? window : undefined;\n var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n if (!wd || !dc || !position) {\n return;\n }\n var /** @type {?} */ element = this.getMenuElement();\n var /** @type {?} */ supportPageOffset = wd.pageXOffset !== undefined;\n var /** @type {?} */ isCSS1Compat = ((dc.compatMode || '') === 'CSS1Compat');\n var /** @type {?} */ x = supportPageOffset ? wd.pageXOffset : isCSS1Compat ?\n dc.documentElement.scrollLeft : dc.body.scrollLeft;\n var /** @type {?} */ y = supportPageOffset ? wd.pageYOffset : isCSS1Compat ?\n dc.documentElement.scrollTop : dc.body.scrollTop;\n var _a = this.applyOffset(position.top + (this.appendToBody ? y - 15 : 0) + \"px\", position.left + x - 5 + \"px\"), top = _a.top, left = _a.left;\n var /** @type {?} */ clientWidth = element.clientWidth;\n var /** @type {?} */ clientHeight = element.clientHeight;\n var /** @type {?} */ marginFromBottom = parseInt(top) + clientHeight + (this.appendToBody ? 0 : y - 15);\n var /** @type {?} */ marginFromRight = parseInt(left) + clientWidth;\n var /** @type {?} */ windowScrollHeight = wd.innerHeight + wd.scrollY;\n var /** @type {?} */ windowScrollWidth = wd.innerWidth + wd.scrollX;\n if (marginFromBottom >= windowScrollHeight) {\n top = parseInt(top.replace('px', '')) - clientHeight + \"px\";\n }\n if (marginFromRight >= windowScrollWidth) {\n var /** @type {?} */ marginRight = marginFromRight - windowScrollWidth + 30;\n left = parseInt(left.replace('px', '')) - marginRight + \"px\";\n }\n return { top: top, left: left };\n };\n /**\n * @param {?} top\n * @param {?} left\n * @return {?}\n */\n Ng2DropdownMenu.prototype.applyOffset = /**\n * @param {?} top\n * @param {?} left\n * @return {?}\n */\n function (top, left) {\n if (!this.offset) {\n return { top: top, left: left };\n }\n var /** @type {?} */ offset = this.offset.split(' ');\n if (!offset[1]) {\n offset[1] = '0';\n }\n top = parseInt(top.replace('px', '')) + parseInt(offset[0]) + \"px\";\n left = parseInt(left.replace('px', '')) + parseInt(offset[1]) + \"px\";\n return { top: top, left: left };\n };\n /**\n * @return {?}\n */\n Ng2DropdownMenu.prototype.ngOnInit = /**\n * @return {?}\n */\n function () {\n var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n if (this.appendToBody) {\n // append menu element to the body\n dc.body.appendChild(this.element.nativeElement);\n }\n };\n /**\n * @param {?=} dynamic\n * @return {?}\n */\n Ng2DropdownMenu.prototype.updateOnChange = /**\n * @param {?=} dynamic\n * @return {?}\n */\n function (dynamic) {\n if (dynamic === void 0) { dynamic = true; }\n var /** @type {?} */ element = this.getMenuElement();\n var /** @type {?} */ position = this.calcPositionOffset(this.position);\n if (position) {\n this.renderer.setElementStyle(element, 'top', position.top.toString());\n this.renderer.setElementStyle(element, 'left', position.left.toString());\n }\n // select first item unless user disabled this option\n if (this.focusFirstElement &&\n this.items.first &&\n !this.state.dropdownState.selectedItem) {\n this.state.dropdownState.select(this.items.first, false);\n }\n };\n /**\n * @return {?}\n */\n Ng2DropdownMenu.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n var /** @type {?} */ elem = this.element.nativeElement;\n elem.parentNode.removeChild(elem);\n if (this.listeners.handleKeypress) {\n this.listeners.handleKeypress();\n }\n };\n Ng2DropdownMenu.decorators = [\n { type: Component, args: [{\n selector: 'ng2-dropdown-menu',\n styles: [\":host{display:block}.ng2-dropdown-menu{overflow-y:auto;box-shadow:0 1px 2px 0 rgba(0,0,0,.3);position:absolute;padding:.5em 0;background:#fff;border-radius:1px;max-height:400px;width:260px;min-height:0;display:block}.ng2-dropdown-menu.ng2-dropdown-menu--inside-element{position:fixed}.ng2-dropdown-menu.ng2-dropdown-menu--width--2{width:200px}.ng2-dropdown-menu.ng2-dropdown-menu--width--4{width:260px}.ng2-dropdown-menu.ng2-dropdown-menu--width--6{width:320px}.ng2-dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1;overflow:hidden}:host /deep/ .ng2-menu-divider{height:1px;min-height:1px;max-height:1px;width:100%;display:block;background:#f9f9f9}\"],\n template: \"\\n\\n \\n \\n \\n\\n\\n\\n\\n\",\n animations: [\n trigger('fade', [\n state('visible', style({ display: 'block', opacity: 1, height: '*', width: '*' })),\n state('hidden', style({ display: 'none', opacity: 0, overflow: 'hidden', height: 0, width: 0 })),\n transition('hidden => visible', [\n animate('250ms ease-in', style({ opacity: 1, height: '*', width: '*' }))\n ]),\n transition('visible => hidden', [\n animate('350ms ease-out', style({ opacity: 0, width: 0, height: 0 }))\n ])\n ]),\n trigger('opacity', [\n transition('hidden => visible', [\n animate('450ms ease-in', keyframes([\n style({ opacity: 0, offset: 0 }),\n style({ opacity: 1, offset: 1 }),\n ]))\n ]),\n transition('visible => hidden', [\n animate('250ms ease-out', keyframes([\n style({ opacity: 1, offset: 0 }),\n style({ opacity: 0.5, offset: 0.3 }),\n style({ opacity: 0, offset: 1 }),\n ]))\n ])\n ])\n ]\n },] },\n ];\n /** @nocollapse */\n Ng2DropdownMenu.ctorParameters = function () { return [\n { type: DropdownStateService, },\n { type: ElementRef, },\n { type: Renderer, },\n ]; };\n Ng2DropdownMenu.propDecorators = {\n \"width\": [{ type: Input },],\n \"focusFirstElement\": [{ type: Input },],\n \"offset\": [{ type: Input },],\n \"appendToBody\": [{ type: Input },],\n \"zIndex\": [{ type: Input },],\n \"items\": [{ type: ContentChildren, args: [Ng2MenuItem,] },],\n };\n return Ng2DropdownMenu;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2Dropdown = /** @class */ (function () {\n function Ng2Dropdown(state$$1) {\n this.state = state$$1;\n this.dynamicUpdate = true;\n // outputs\n this.onItemClicked = new EventEmitter();\n this.onItemSelected = new EventEmitter();\n this.onShow = new EventEmitter();\n this.onHide = new EventEmitter();\n }\n /**\n * @return {?}\n */\n Ng2Dropdown.prototype.ngOnInit = /**\n * @return {?}\n */\n function () {\n var _this = this;\n this.state.dropdownState.onItemClicked.subscribe(function (item) {\n _this.onItemClicked.emit(item);\n if (item.preventClose) {\n return;\n }\n _this.hide.call(_this);\n });\n if (this.button) {\n this.button.onMenuToggled.subscribe(function () {\n _this.toggleMenu();\n });\n }\n this.state.dropdownState.onItemSelected.subscribe(function (item) {\n _this.onItemSelected.emit(item);\n });\n this.state.dropdownState.onItemDestroyed.subscribe(function (item) {\n var /** @type {?} */ newSelectedItem;\n var /** @type {?} */ items = _this.menu.items.toArray();\n if (item !== _this.state.dropdownState.selectedItem) {\n return;\n }\n if (_this.menu.focusFirstElement) {\n newSelectedItem = item === items[0] && items.length > 1 ? items[1] : items[0];\n }\n _this.state.dropdownState.select(newSelectedItem);\n });\n };\n /**\n * \\@name toggleMenu\n * @desc toggles menu visibility\n * @param {?=} position\n * @return {?}\n */\n Ng2Dropdown.prototype.toggleMenu = /**\n * \\@name toggleMenu\n * @desc toggles menu visibility\n * @param {?=} position\n * @return {?}\n */\n function (position) {\n if (position === void 0) { position = this.button.getPosition(); }\n this.state.menuState.isVisible ? this.hide() : this.show(position);\n };\n /**\n * - hides dropdown\n * \\@name hide\n * @return {?}\n */\n Ng2Dropdown.prototype.hide = /**\n * - hides dropdown\n * \\@name hide\n * @return {?}\n */\n function () {\n this.menu.hide();\n this.onHide.emit(this);\n };\n /**\n * - shows dropdown\n * \\@name show\n * @param {?=} position\n * @return {?}\n */\n Ng2Dropdown.prototype.show = /**\n * - shows dropdown\n * \\@name show\n * @param {?=} position\n * @return {?}\n */\n function (position) {\n if (position === void 0) { position = this.button.getPosition(); }\n this.menu.show(position, this.dynamicUpdate);\n this.onShow.emit(this);\n };\n /**\n * \\@name scrollListener\n * @return {?}\n */\n Ng2Dropdown.prototype.scrollListener = /**\n * \\@name scrollListener\n * @return {?}\n */\n function () {\n if (this.button && this.dynamicUpdate) {\n this.menu.updatePosition(this.button.getPosition(), true);\n }\n };\n Ng2Dropdown.decorators = [\n { type: Component, args: [{\n selector: 'ng2-dropdown',\n template: \"\\n \\n \\n\\n\",\n providers: [DropdownStateService]\n },] },\n ];\n /** @nocollapse */\n Ng2Dropdown.ctorParameters = function () { return [\n { type: DropdownStateService, },\n ]; };\n Ng2Dropdown.propDecorators = {\n \"button\": [{ type: ContentChild, args: [Ng2DropdownButton,] },],\n \"menu\": [{ type: ContentChild, args: [Ng2DropdownMenu,] },],\n \"dynamicUpdate\": [{ type: Input },],\n \"onItemClicked\": [{ type: Output },],\n \"onItemSelected\": [{ type: Output },],\n \"onShow\": [{ type: Output },],\n \"onHide\": [{ type: Output },],\n \"scrollListener\": [{ type: HostListener, args: ['window:scroll',] },],\n };\n return Ng2Dropdown;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownModule = /** @class */ (function () {\n function Ng2DropdownModule() {\n }\n Ng2DropdownModule.decorators = [\n { type: NgModule, args: [{\n exports: [\n Ng2MenuItem,\n Ng2DropdownButton,\n Ng2DropdownMenu,\n Ng2Dropdown\n ],\n declarations: [\n Ng2Dropdown,\n Ng2MenuItem,\n Ng2DropdownButton,\n Ng2DropdownMenu,\n ],\n imports: [\n CommonModule\n ]\n },] },\n ];\n return Ng2DropdownModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\nexport { Ng2Dropdown, Ng2DropdownMenu, Ng2MenuItem, Ng2DropdownButton, Ng2DropdownModule, DropdownStateService };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLW1hdGVyaWFsLWRyb3Bkb3duLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvY29tcG9uZW50cy9idXR0b24vbmcyLWRyb3Bkb3duLWJ1dHRvbi50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL2NvbXBvbmVudHMvbWVudS9hY3Rpb25zLnRzIiwibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvc2VydmljZXMvbmcyLWRyb3Bkb3duLXN0YXRlLnRzIiwibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZS50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL2NvbXBvbmVudHMvbWVudS1pdGVtL25nMi1tZW51LWl0ZW0udHMiLCJuZzovL25nMi1tYXRlcmlhbC1kcm9wZG93bi9zcmMvbW9kdWxlcy9jb21wb25lbnRzL21lbnUvbmcyLWRyb3Bkb3duLW1lbnUudHMiLCJuZzovL25nMi1tYXRlcmlhbC1kcm9wZG93bi9zcmMvbW9kdWxlcy9jb21wb25lbnRzL2Ryb3Bkb3duL25nMi1kcm9wZG93bi50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL25nMi1kcm9wZG93bi5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT3V0cHV0LFxuICAgIElucHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nMi1kcm9wZG93bi1idXR0b24nLFxuICAgIHN0eWxlczogW2AubmcyLWRyb3Bkb3duLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLEhlbHZldGljYSxBcmlhbDtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzouNDVyZW0gLjI1cmVtO2ZvbnQtc2l6ZToxNHB4O2xldHRlci1zcGFjaW5nOi4wOHJlbTtjb2xvcjojNDQ0O291dGxpbmU6MDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo0MDA7Ym9yZGVyOm5vbmU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VmZWZlZjt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOjEwMHB4O3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTUwcHh9Lm5nMi1kcm9wZG93bi1idXR0b246aG92ZXJ7Y29sb3I6IzIyMn0ubmcyLWRyb3Bkb3duLWJ1dHRvbjphY3RpdmUsLm5nMi1kcm9wZG93bi1idXR0b246Zm9jdXN7Y29sb3I6IzIyMjtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMjE5NmYzfS5uZzItZHJvcGRvd24tYnV0dG9uX19sYWJlbHtmbGV4OjEgMSA5NSV9Lm5nMi1kcm9wZG93bi1idXR0b25fX2NhcmV0e3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIDYlfTpob3N0LWNvbnRleHQoLm5nMi1kcm9wZG93bi1idXR0b24tLWljb24pIC5uZzItZHJvcGRvd24tYnV0dG9ue2JvcmRlcjpub25lO21pbi13aWR0aDo0MHB4O3dpZHRoOjQwcHg7Ym9yZGVyLXJhZGl1czoxMDAlO3RyYW5zaXRpb246YWxsIC4yczt0ZXh0LWFsaWduOmNlbnRlcjtoZWlnaHQ6NDBweDtwYWRkaW5nOi41ZW19Omhvc3QtY29udGV4dCgubmcyLWRyb3Bkb3duLWJ1dHRvbi0taWNvbikgLm5nMi1kcm9wZG93bi1idXR0b246YWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMil9YF0sXG4gICAgdGVtcGxhdGU6IGA8YnV0dG9uIGNsYXNzPSduZzItZHJvcGRvd24tYnV0dG9uJyB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiIHRhYmluZGV4PVwiMHNcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm5nMi1kcm9wZG93bi1idXR0b25fX2xhYmVsXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cIm5nMi1kcm9wZG93bi1idXR0b25fX2NhcmV0XCIgKm5nSWY9XCJzaG93Q2FyZXRcIj5cbiAgICAgICAgPHN2ZyBlbmFibGUtYmFja2dyb3VuZD1cIm5ldyAwIDAgMzIgMzJcIiBoZWlnaHQ9XCIxNnB4XCIgaWQ9XCLDkMKhw5DCu8OQwr7DkMK5XzFcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIHdpZHRoPVwiMTZweFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPjxwYXRoIGQ9XCJNMjQuMjg1LDExLjI4NEwxNiwxOS41NzFsLTguMjg1LTguMjg4Yy0wLjM5NS0wLjM5NS0xLjAzNC0wLjM5NS0xLjQyOSwwICBjLTAuMzk0LDAuMzk1LTAuMzk0LDEuMDM1LDAsMS40M2w4Ljk5OSw5LjAwMmwwLDBsMCwwYzAuMzk0LDAuMzk1LDEuMDM0LDAuMzk1LDEuNDI4LDBsOC45OTktOS4wMDIgIGMwLjM5NC0wLjM5NSwwLjM5NC0xLjAzNiwwLTEuNDMxQzI1LjMxOSwxMC44ODksMjQuNjc5LDEwLjg4OSwyNC4yODUsMTEuMjg0elwiIGZpbGw9XCIjMTIxMzEzXCIgaWQ9XCJFeHBhbmRfTW9yZVwiLz48Zy8+PGcvPjxnLz48Zy8+PGcvPjxnLz48L3N2Zz5cbiAgICA8L3NwYW4+XG48L2J1dHRvbj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgTmcyRHJvcGRvd25CdXR0b24ge1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25NZW51VG9nZ2xlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2FyZXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdG9nZ2xlTWVudVxuICAgICAqIEBkZXNjIGVtaXRzIGV2ZW50IHRvIHRvZ2dsZSBtZW51XG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZU1lbnUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25NZW51VG9nZ2xlZC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIGdldFBvc2l0aW9uXG4gICAgICogQGRlc2MgcmV0dXJucyBwb3NpdGlvbiBvZiB0aGUgYnV0dG9uXG4gICAgICovXG4gICAgcHVibGljIGdldFBvc2l0aW9uKCk6IENsaWVudFJlY3Qge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE5nMk1lbnVJdGVtIH0gZnJvbSAnLi4vbWVudS1pdGVtL25nMi1tZW51LWl0ZW0nO1xuaW1wb3J0IHsgTmcyRHJvcGRvd25NZW51IH0gZnJvbSAnLi9uZzItZHJvcGRvd24tbWVudSc7XG5pbXBvcnQgeyBOZzJEcm9wZG93blN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmcyLWRyb3Bkb3duLXN0YXRlJztcblxuY29uc3QgS0VZUyA9IHtcbiAgICBCQUNLU1BBQ0U6IDksXG4gICAgUFJFVjogMzgsXG4gICAgTkVYVDogNDAsXG4gICAgRU5URVI6IDEzLFxuICAgIEVTQ0FQRTogMjdcbn07XG5cbi8qKlxuICogQG5hbWUgb25Td2l0Y2hOZXh0XG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBpdGVtc1xuICogQHBhcmFtIHN0YXRlXG4gKi9cbmNvbnN0IG9uU3dpdGNoTmV4dCA9IChpbmRleDogbnVtYmVyLCBpdGVtczogTmcyTWVudUl0ZW1bXSwgc3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUpID0+IHtcbiAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdChpdGVtc1tpbmRleCArIDFdLCB0cnVlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBuYW1lIG9uU3dpdGNoUHJldlxuICogQHBhcmFtIGluZGV4XG4gKiBAcGFyYW0gaXRlbXNcbiAqIEBwYXJhbSBzdGF0ZVxuICovXG5jb25zdCBvblN3aXRjaFByZXYgPSAoaW5kZXg6IG51bWJlciwgaXRlbXM6IE5nMk1lbnVJdGVtW10sIHN0YXRlOiBOZzJEcm9wZG93blN0YXRlKSA9PiB7XG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBzdGF0ZS5zZWxlY3QoaXRlbXNbaW5kZXggLSAxXSwgdHJ1ZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAbmFtZSBvbkJhY2tzcGFjZVxuICogQHBhcmFtIGluZGV4XG4gKiBAcGFyYW0gaXRlbXNcbiAqIEBwYXJhbSBzdGF0ZVxuICovXG5jb25zdCBvbkJhY2tzcGFjZSA9IChpbmRleDogbnVtYmVyLCBpdGVtczogTmcyTWVudUl0ZW1bXSwgc3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUpID0+IHtcbiAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdChpdGVtc1tpbmRleCArIDFdLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5zZWxlY3QoaXRlbXNbMF0sIHRydWUpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIG9uRXNjYXBlKHRoaXM6IE5nMkRyb3Bkb3duTWVudSkge1xuICAgIHRoaXMuaGlkZSgpO1xufTtcblxuLyoqXG4gKiBAbmFtZSBvbkl0ZW1DbGlja2VkXG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBpdGVtc1xuICogQHBhcmFtIHN0YXRlXG4gKi9cbmNvbnN0IG9uSXRlbUNsaWNrZWQgPSAoaW5kZXg6IG51bWJlciwgaXRlbXM6IE5nMk1lbnVJdGVtW10sIHN0YXRlOiBOZzJEcm9wZG93blN0YXRlKSA9PiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkSXRlbSA/IHN0YXRlLnNlbGVjdGVkSXRlbS5jbGljaygpIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTlMgPSB7XG4gICAgW0tFWVMuQkFDS1NQQUNFXTogb25CYWNrc3BhY2UsXG4gICAgW0tFWVMuUFJFVl06IG9uU3dpdGNoUHJldixcbiAgICBbS0VZUy5ORVhUXTogb25Td2l0Y2hOZXh0LFxuICAgIFtLRVlTLkVOVEVSXTogb25JdGVtQ2xpY2tlZCxcbiAgICBbS0VZUy5FU0NBUEVdOiBvbkVzY2FwZVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFycm93S2V5c0hhbmRsZXIoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoWzM4LCA0MF0uaW5kZXhPZihldmVudC5rZXlDb2RlKSA+IC0xKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZzJNZW51SXRlbSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1pdGVtL25nMi1tZW51LWl0ZW0nO1xuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duU3RhdGUge1xuICAgIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZDogRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmcyTWVudUl0ZW0+KCk7XG4gICAgcHVibGljIG9uSXRlbUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxOZzJNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPigpO1xuICAgIHB1YmxpYyBvbkl0ZW1EZXN0cm95ZWQ6IEV2ZW50RW1pdHRlcjxOZzJNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPigpO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtOiBOZzJNZW51SXRlbTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHNlbGVjdGVkSXRlbVxuICAgICAqIEBkZXNjIGdldHRlciBmb3IgX3NlbGVjdGVkSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtKCk6IE5nMk1lbnVJdGVtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzZWxlY3RzIGEgbWVudSBpdGVtIGFuZCBlbWl0cyBldmVudFxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChpdGVtOiBOZzJNZW51SXRlbSB8IHVuZGVmaW5lZCwgZGlzcGF0Y2hFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gaXRlbTtcblxuICAgICAgICBpZiAoIWRpc3BhdGNoRXZlbnQgfHwgIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uZm9jdXMoKTtcblxuICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdW5zZWxlY3RcbiAgICAgKiBAZGVzYyBzZXRzIF9zZWxlY3RlZEl0ZW0gYXMgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmcyRHJvcGRvd25TdGF0ZSB9IGZyb20gJy4vbmcyLWRyb3Bkb3duLXN0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duU3RhdGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgbWVudVN0YXRlID0ge1xuICAgICAgICBpc1Zpc2libGU6IDxib29sZWFuPmZhbHNlLFxuICAgICAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlID09PSB0cnVlID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIGRyb3Bkb3duU3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUgPSBuZXcgTmcyRHJvcGRvd25TdGF0ZSgpO1xufVxuIiwiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgUmVuZGVyZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERyb3Bkb3duU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmcyLW1lbnUtaXRlbScsXG4gICAgc3R5bGVzOiBbYC5uZzItbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsSGVsdmV0aWNhLEFyaWFsO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi45ZW07dGV4dC10cmFuc2Zvcm06bm9uZTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtwYWRkaW5nOi4zZW0gMS4yNXJlbTt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4yNXN9Lm5nMi1tZW51LWl0ZW0tLXNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgxNTgsMTU4LDE1OCwuMik7b3V0bGluZTowfS5uZzItbWVudS1pdGVtOmZvY3Vze291dGxpbmU6MH0ubmcyLW1lbnUtaXRlbTphY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDE1OCwxNTgsMTU4LC40KX06aG9zdChuZzItbWVudS1pdGVtKSAvZGVlcC8gW25nMi1tZW51LWl0ZW0taWNvbl17dmVydGljYWwtYWxpZ246bWlkZGxlO2ZvbnQtc2l6ZToyOHB4O3dpZHRoOjEuNWVtO2hlaWdodDozMHB4O2NvbG9yOnJnYmEoMCwwLDAsLjQ0KX1gXSxcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9J25nMi1tZW51LWl0ZW0nXG4gICAgIHJvbGU9XCJidXR0b25cIlxuICAgICB0YWJpbmRleD1cIjBcIlxuICAgICBbY2xhc3MubmcyLW1lbnUtaXRlbS0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZFwiXG4gICAgIChrZXlkb3duLmVudGVyKT1cImNsaWNrKClcIlxuICAgICAoY2xpY2spPVwiY2xpY2soKVwiXG4gICAgIChtb3VzZW92ZXIpPVwic2VsZWN0KClcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIE5nMk1lbnVJdGVtIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAcHJldmVudENsb3NlXG4gICAgICogQGRlc2MgaWYgdHJ1ZSwgY2xpY2tpbmcgb24gdGhlIGl0ZW0gd29uJ3QgY2xvc2UgdGhlIGRyb3Bkb3duXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHByZXZlbnRDbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdmFsdWVcbiAgICAgKiBAZGVzYyBhbnkgdmFsdWUgYXNzb2NpYXRlZCB0byB0aGUgaXRlbVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0ZTogRHJvcGRvd25TdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyKSB7fVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtRGVzdHJveWVkLmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgaXNTZWxlY3RlZFxuICAgICAqIEBkZXNjIHJldHVybnMgY3VycmVudCBzZWxlY3RlZCBpdGVtXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcyA9PT0gdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBjbGlja1xuICAgICAqIEBkZXNjIGVtaXRzIHNlbGVjdCBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QoJGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUuc2VsZWN0KHRoaXMsIHRydWUpO1xuXG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgY2xpY2tcbiAgICAgKiBAZGVzYyBlbWl0cyBjbGljayBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLm9uSXRlbUNsaWNrZWQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBmb2N1c1xuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLCAnZm9jdXMnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIFJlbmRlcmVyLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIGFuaW1hdGUsXG4gICAga2V5ZnJhbWVzLFxuICAgIHN0YXRlXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5pbXBvcnQgeyBBQ1RJT05TLCBhcnJvd0tleXNIYW5kbGVyIH0gZnJvbSAnLi9hY3Rpb25zJztcblxuaW1wb3J0IHsgTmcyTWVudUl0ZW0gfSBmcm9tICcuLi9tZW51LWl0ZW0vbmcyLW1lbnUtaXRlbSc7XG5pbXBvcnQgeyBEcm9wZG93blN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Ryb3Bkb3duLXN0YXRlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nMi1kcm9wZG93bi1tZW51JyxcbiAgICBzdHlsZXM6IFtgOmhvc3R7ZGlzcGxheTpibG9ja30ubmcyLWRyb3Bkb3duLW1lbnV7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAxcHggMnB4IDAgcmdiYSgwLDAsMCwuMyk7cG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzouNWVtIDA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MXB4O21heC1oZWlnaHQ6NDAwcHg7d2lkdGg6MjYwcHg7bWluLWhlaWdodDowO2Rpc3BsYXk6YmxvY2t9Lm5nMi1kcm9wZG93bi1tZW51Lm5nMi1kcm9wZG93bi1tZW51LS1pbnNpZGUtZWxlbWVudHtwb3NpdGlvbjpmaXhlZH0ubmcyLWRyb3Bkb3duLW1lbnUubmcyLWRyb3Bkb3duLW1lbnUtLXdpZHRoLS0ye3dpZHRoOjIwMHB4fS5uZzItZHJvcGRvd24tbWVudS5uZzItZHJvcGRvd24tbWVudS0td2lkdGgtLTR7d2lkdGg6MjYwcHh9Lm5nMi1kcm9wZG93bi1tZW51Lm5nMi1kcm9wZG93bi1tZW51LS13aWR0aC0tNnt3aWR0aDozMjBweH0ubmcyLWRyb3Bkb3duLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgL2RlZXAvIC5uZzItbWVudS1kaXZpZGVye2hlaWdodDoxcHg7bWluLWhlaWdodDoxcHg7bWF4LWhlaWdodDoxcHg7d2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6I2Y5ZjlmOX1gXSxcbiAgICB0ZW1wbGF0ZTogYDwhLS0gTUVOVSAtLT5cbjxkaXYgY2xhc3M9J25nMi1kcm9wZG93bi1tZW51IG5nMi1kcm9wZG93bi1tZW51LS0td2lkdGgtLXt7IHdpZHRoIH19J1xuICAgICBbY2xhc3MubmcyLWRyb3Bkb3duLW1lbnUtLWluc2lkZS1lbGVtZW50XT1cIiFhcHBlbmRUb0JvZHlcIlxuICAgICBbY2xhc3MubmcyLWRyb3Bkb3duLW1lbnUtLW9wZW5dPVwic3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZVwiXG4gICAgIFtzdHlsZS56LWluZGV4XT1cInpJbmRleFwiXG4gICAgIFtAZmFkZV09XCJzdGF0ZS5tZW51U3RhdGUudG9TdHJpbmcoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmcyLWRyb3Bkb3duLW1lbnVfX29wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICAgICBbQG9wYWNpdHldPVwic3RhdGUubWVudVN0YXRlLnRvU3RyaW5nKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBCQUNLRFJPUCAtLT5cbjxkaXYgY2xhc3M9XCJuZzItZHJvcGRvd24tYmFja2Ryb3BcIiAqbmdJZj1cInN0YXRlLm1lbnVTdGF0ZS5pc1Zpc2libGVcIiAoY2xpY2spPVwiaGlkZSgpXCI+PC9kaXY+XG5gLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignZmFkZScsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoXG4gICAgICAgICAgICAgICAge2Rpc3BsYXk6ICdibG9jaycsIG9wYWNpdHk6IDEsIGhlaWdodDogJyonLCB3aWR0aDogJyonfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBzdGF0ZSgnaGlkZGVuJywgc3R5bGUoXG4gICAgICAgICAgICAgICAge2Rpc3BsYXk6ICdub25lJywgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nLCBoZWlnaHQ6IDAsIHdpZHRoOiAwfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdoaWRkZW4gPT4gdmlzaWJsZScsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDEsIGhlaWdodDogJyonLCB3aWR0aDogJyonfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gaGlkZGVuJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzM1MG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdvcGFjaXR5JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZGVuID0+IHZpc2libGUnLCBbXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnNDUwbXMgZWFzZS1pbicsIGtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAwLCBvZmZzZXQ6IDB9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDEsIG9mZnNldDogMX0pLFxuICAgICAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IGhpZGRlbicsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLW91dCcsIGtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAxLCBvZmZzZXQ6IDB9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAuNSwgb2Zmc2V0OiAwLjN9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAsIG9mZnNldDogMX0pLFxuICAgICAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duTWVudSB7XG4gICAgLyoqXG4gICAgICogQG5hbWUgd2lkdGhcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IG51bWJlciA9IDQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gaWYgc2V0IHRvIHRydWUsIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBkcm9wZG93biB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZFxuICAgICAqIEBuYW1lIGZvY3VzRmlyc3RFbGVtZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzRmlyc3RFbGVtZW50OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBzZXRzIGRyb3Bkb3duIG9mZnNldCBmcm9tIHRoZSBidXR0b25cbiAgICAgKiBAbmFtZSBvZmZzZXQge3N0cmluZ30gZm9sbG93IGZvcm1hdCAnPG51bWJlcj4gPG51bWJlcj4nIGV4LiAnMCAyMCdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgb2Zmc2V0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBhcHBlbmRUb0JvZHlcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kVG9Cb2R5OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHpJbmRleFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB6SW5kZXggPSAxMDAwO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgaXRlbXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKE5nMk1lbnVJdGVtKSBwdWJsaWMgaXRlbXM6IFF1ZXJ5TGlzdDxOZzJNZW51SXRlbT47XG5cbiAgICBwcml2YXRlIHBvc2l0aW9uOiBDbGllbnRSZWN0O1xuXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnMgPSB7XG4gICAgICAgIGFycm93SGFuZGxlcjogdW5kZWZpbmVkLFxuICAgICAgICBoYW5kbGVLZXlwcmVzczogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGF0ZTogRHJvcGRvd25TdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyKSB7fVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgc2hvd1xuICAgICAqIEBzaG93cyBtZW51IGFuZCBzZWxlY3RzIGZpcnN0IGl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhwb3NpdGlvbj86IENsaWVudFJlY3QsIGR5bmFtaWMgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB3ZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5tZW51U3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyBzZXR0aW5nIGhhbmRsZXJzXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcyA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGRjLmJvZHksICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlwcmVzcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmFycm93SGFuZGxlciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHdkLCAna2V5ZG93bicsIGFycm93S2V5c0hhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHN0YXRlXG4gICAgICAgIHRoaXMuc3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uLCBkeW5hbWljKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIGhpZGVcbiAgICAgKiBAZGVzYyBoaWRlcyBtZW51XG4gICAgICovXG4gICAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHJlc2V0IHNlbGVjdGVkIGl0ZW0gc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnVuc2VsZWN0KCk7XG5cbiAgICAgICAgLy8gY2FsbCBmdW5jdGlvbiB0byB1bmxpc3RlblxuICAgICAgICB0aGlzLmxpc3RlbmVycy5hcnJvd0hhbmRsZXIgPyB0aGlzLmxpc3RlbmVycy5hcnJvd0hhbmRsZXIoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMuaGFuZGxlS2V5cHJlc3MgPyB0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcygpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHVwZGF0ZVBvc2l0aW9uXG4gICAgICogQGRlc2MgdXBkYXRlcyB0aGUgbWVudSBwb3NpdGlvbiBldmVyeSB0aW1lIGl0IGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24ge0NsaWVudFJlY3R9XG4gICAgICogQHBhcmFtIGR5bmFtaWMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uOiBDbGllbnRSZWN0LCBkeW5hbWljOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgdGhpcy51cGRhdGVPbkNoYW5nZShkeW5hbWljKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBoYW5kbGVLZXlwcmVzc1xuICAgICAqIEBkZXNjIGV4ZWN1dGVzIGZ1bmN0aW9ucyBvbiBrZXlQcmVzcyBiYXNlZCBvbiB0aGUga2V5IHByZXNzZWRcbiAgICAgKiBAcGFyYW0gJGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUtleXByZXNzKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSAkZXZlbnQua2V5Q29kZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5pbmRleE9mKHRoaXMuc3RhdGUuZHJvcGRvd25TdGF0ZS5zZWxlY3RlZEl0ZW0pO1xuXG4gICAgICAgIGlmICghQUNUSU9OUy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBBQ1RJT05TW2tleV0uY2FsbCh0aGlzLCBpbmRleCwgaXRlbXMsIHRoaXMuc3RhdGUuZHJvcGRvd25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgZ2V0TWVudUVsZW1lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1lbnVFbGVtZW50KCk6IEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgY2FsY1Bvc2l0aW9uT2Zmc2V0XG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYWxjUG9zaXRpb25PZmZzZXQocG9zaXRpb24pOiB7IHRvcDogc3RyaW5nLCBsZWZ0OiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IHdkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGRjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghd2QgfHwgIWRjIHx8ICFwb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0TWVudUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3Qgc3VwcG9ydFBhZ2VPZmZzZXQgPSB3ZC5wYWdlWE9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBpc0NTUzFDb21wYXQgPSAoKGRjLmNvbXBhdE1vZGUgfHwgJycpID09PSAnQ1NTMUNvbXBhdCcpO1xuXG4gICAgICAgIGNvbnN0IHggPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdkLnBhZ2VYT2Zmc2V0IDogaXNDU1MxQ29tcGF0ID9cbiAgICAgICAgICAgIGRjLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogZGMuYm9keS5zY3JvbGxMZWZ0O1xuXG4gICAgICAgIGNvbnN0IHkgPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdkLnBhZ2VZT2Zmc2V0IDogaXNDU1MxQ29tcGF0ID9cbiAgICAgICAgICAgIGRjLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBkYy5ib2R5LnNjcm9sbFRvcDtcblxuICAgICAgICBsZXQgeyB0b3AsIGxlZnQgfSA9IHRoaXMuYXBwbHlPZmZzZXQoXG4gICAgICAgICAgICBgJHtwb3NpdGlvbi50b3AgKyAodGhpcy5hcHBlbmRUb0JvZHkgPyB5IC0gMTUgOiAwKX1weGAsXG4gICAgICAgICAgICBgJHtwb3NpdGlvbi5sZWZ0ICsgeCAtIDV9cHhgXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY2xpZW50V2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBjbGllbnRIZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBjb25zdCBtYXJnaW5Gcm9tQm90dG9tID0gcGFyc2VJbnQodG9wKSArIGNsaWVudEhlaWdodCArICh0aGlzLmFwcGVuZFRvQm9keSA/IDAgOiB5IC0gMTUpO1xuICAgICAgICBjb25zdCBtYXJnaW5Gcm9tUmlnaHQgPSBwYXJzZUludChsZWZ0KSArIGNsaWVudFdpZHRoO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvd1Njcm9sbEhlaWdodCA9IHdkLmlubmVySGVpZ2h0ICsgd2Quc2Nyb2xsWTtcbiAgICAgICAgY29uc3Qgd2luZG93U2Nyb2xsV2lkdGggPSB3ZC5pbm5lcldpZHRoICsgd2Quc2Nyb2xsWDtcblxuICAgICAgICBpZiAobWFyZ2luRnJvbUJvdHRvbSA+PSB3aW5kb3dTY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRvcCA9IGAke3BhcnNlSW50KHRvcC5yZXBsYWNlKCdweCcsICcnKSkgLSBjbGllbnRIZWlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcmdpbkZyb21SaWdodCA+PSB3aW5kb3dTY3JvbGxXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luUmlnaHQgPSBtYXJnaW5Gcm9tUmlnaHQgLSB3aW5kb3dTY3JvbGxXaWR0aCArIDMwO1xuICAgICAgICAgICAgbGVmdCA9IGAke3BhcnNlSW50KGxlZnQucmVwbGFjZSgncHgnLCAnJykpIC0gbWFyZ2luUmlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgdG9wLCBsZWZ0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseU9mZnNldCh0b3A6IHN0cmluZywgbGVmdDogc3RyaW5nKTogeyB0b3A6IHN0cmluZywgbGVmdDogc3RyaW5nIH0ge1xuICAgICAgICBpZiAoIXRoaXMub2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4geyB0b3AsIGxlZnQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMub2Zmc2V0LnNwbGl0KCcgJyk7XG5cbiAgICAgICAgaWYgKCFvZmZzZXRbMV0pIHtcbiAgICAgICAgICAgIG9mZnNldFsxXSA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRvcCA9IGAke3BhcnNlSW50KHRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUludChvZmZzZXRbMF0pfXB4YDtcbiAgICAgICAgbGVmdCA9IGAke3BhcnNlSW50KGxlZnQucmVwbGFjZSgncHgnLCAnJykpICsgcGFyc2VJbnQob2Zmc2V0WzFdKX1weGA7XG5cbiAgICAgICAgcmV0dXJuIHsgdG9wLCBsZWZ0IH07XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBkYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgICAgICAvLyBhcHBlbmQgbWVudSBlbGVtZW50IHRvIHRoZSBib2R5XG4gICAgICAgICAgICBkYy5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVPbkNoYW5nZShkeW5hbWljID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRNZW51RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY2FsY1Bvc2l0aW9uT2Zmc2V0KHRoaXMucG9zaXRpb24pO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUoZWxlbWVudCwgJ3RvcCcsIHBvc2l0aW9uLnRvcC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudFN0eWxlKGVsZW1lbnQsICdsZWZ0JywgcG9zaXRpb24ubGVmdC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNlbGVjdCBmaXJzdCBpdGVtIHVubGVzcyB1c2VyIGRpc2FibGVkIHRoaXMgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLmZvY3VzRmlyc3RFbGVtZW50ICYmXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpcnN0ICYmXG4gICAgICAgICAgICAhdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdCh0aGlzLml0ZW1zLmZpcnN0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcykge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuaGFuZGxlS2V5cHJlc3MoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgSG9zdExpc3RlbmVyLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmcyRHJvcGRvd25CdXR0b24gfSBmcm9tICcuLi9idXR0b24vbmcyLWRyb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBOZzJEcm9wZG93bk1lbnUgfSBmcm9tICcuLi9tZW51L25nMi1kcm9wZG93bi1tZW51JztcbmltcG9ydCB7IERyb3Bkb3duU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZzJNZW51SXRlbSB9IGZyb20gJy4uL21lbnUtaXRlbS9uZzItbWVudS1pdGVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZzItZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIm5nMi1kcm9wZG93bi1jb250YWluZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJuZzItZHJvcGRvd24tYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm5nMi1kcm9wZG93bi1tZW51XCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5gLFxuICAgIHByb3ZpZGVyczogWyBEcm9wZG93blN0YXRlU2VydmljZSBdXG59KVxuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duIHtcbiAgICAvLyBnZXQgY2hpbGRyZW4gY29tcG9uZW50c1xuICAgIEBDb250ZW50Q2hpbGQoTmcyRHJvcGRvd25CdXR0b24pIHB1YmxpYyBidXR0b246IE5nMkRyb3Bkb3duQnV0dG9uO1xuICAgIEBDb250ZW50Q2hpbGQoTmcyRHJvcGRvd25NZW51KSBwdWJsaWMgbWVudTogTmcyRHJvcGRvd25NZW51O1xuXG4gICAgQElucHV0KCkgcHVibGljIGR5bmFtaWNVcGRhdGUgPSB0cnVlO1xuXG4gICAgLy8gb3V0cHV0c1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25JdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uSXRlbVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25TaG93OiBFdmVudEVtaXR0ZXI8TmcyRHJvcGRvd24+ID0gbmV3IEV2ZW50RW1pdHRlcjxOZzJEcm9wZG93bj4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uSGlkZTogRXZlbnRFbWl0dGVyPE5nMkRyb3Bkb3duPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmcyRHJvcGRvd24+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRlOiBEcm9wZG93blN0YXRlU2VydmljZSkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLm9uSXRlbUNsaWNrZWQuc3Vic2NyaWJlKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGlja2VkLmVtaXQoaXRlbSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLnByZXZlbnRDbG9zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oaWRlLmNhbGwodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5idXR0b24ub25NZW51VG9nZ2xlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtU2VsZWN0ZWQuc3Vic2NyaWJlKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1TZWxlY3RlZC5lbWl0KGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtRGVzdHJveWVkLnN1YnNjcmliZSgoaXRlbTogTmcyTWVudUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdTZWxlY3RlZEl0ZW06IE5nMk1lbnVJdGVtIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLm1lbnUuaXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWVudS5mb2N1c0ZpcnN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkSXRlbSA9IGl0ZW0gPT09IGl0ZW1zWzBdICYmIGl0ZW1zLmxlbmd0aCA+IDEgPyBpdGVtc1sxXSA6IGl0ZW1zWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUuc2VsZWN0KG5ld1NlbGVjdGVkSXRlbSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHRvZ2dsZU1lbnVcbiAgICAgKiBAZGVzYyB0b2dnbGVzIG1lbnUgdmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVNZW51KHBvc2l0aW9uID0gdGhpcy5idXR0b24uZ2V0UG9zaXRpb24oKSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLm1lbnVTdGF0ZS5pc1Zpc2libGUgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogLSBoaWRlcyBkcm9wZG93blxuICAgICAqIEBuYW1lIGhpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51LmhpZGUoKTtcbiAgICAgICAgdGhpcy5vbkhpZGUuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAtIHNob3dzIGRyb3Bkb3duXG4gICAgICogQG5hbWUgc2hvd1xuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93KHBvc2l0aW9uID0gdGhpcy5idXR0b24uZ2V0UG9zaXRpb24oKSk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnUuc2hvdyhwb3NpdGlvbiwgdGhpcy5keW5hbWljVXBkYXRlKTtcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzY3JvbGxMaXN0ZW5lclxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICAgIHB1YmxpYyBzY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uICYmIHRoaXMuZHluYW1pY1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51LnVwZGF0ZVBvc2l0aW9uKHRoaXMuYnV0dG9uLmdldFBvc2l0aW9uKCksIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgTmcyRHJvcGRvd24gfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcGRvd24vbmcyLWRyb3Bkb3duJztcbmltcG9ydCB7IE5nMkRyb3Bkb3duTWVudSB9IGZyb20gJy4vY29tcG9uZW50cy9tZW51L25nMi1kcm9wZG93bi1tZW51JztcbmltcG9ydCB7IE5nMkRyb3Bkb3duQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnRzL2J1dHRvbi9uZzItZHJvcGRvd24tYnV0dG9uJztcbmltcG9ydCB7IE5nMk1lbnVJdGVtIH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUtaXRlbS9uZzItbWVudS1pdGVtJztcblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEcm9wZG93blN0YXRlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZXhwb3J0czogW1xuICAgICAgICBOZzJNZW51SXRlbSxcbiAgICAgICAgTmcyRHJvcGRvd25CdXR0b24sXG4gICAgICAgIE5nMkRyb3Bkb3duTWVudSxcbiAgICAgICAgTmcyRHJvcGRvd25cbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBOZzJEcm9wZG93bixcbiAgICAgICAgTmcyTWVudUl0ZW0sXG4gICAgICAgIE5nMkRyb3Bkb3duQnV0dG9uLFxuICAgICAgICBOZzJEcm9wZG93bk1lbnUsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmcyRHJvcGRvd25Nb2R1bGUge31cblxuZXhwb3J0IHtcbiAgICBOZzJEcm9wZG93bixcbiAgICBOZzJEcm9wZG93bk1lbnUsXG4gICAgTmcyTWVudUl0ZW0sXG4gICAgTmcyRHJvcGRvd25CdXR0b24sXG4gICAgRHJvcGRvd25TdGF0ZVNlcnZpY2Vcbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtJQTBCSSwyQkFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQ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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-material-dropdown/fesm5/ng2-material-dropdown.js\n// module id = 1016\n// module chunks = 8","import { NgModule } from '@angular/core';\r\nimport { IonicPageModule } from 'ionic-angular';\r\nimport { EmailTemplatePage } from './email-template';\r\nimport { TagInputModule } from 'ngx-chips';\r\n//import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport {IonTagsInputModule} from \"ionic-tags-input\";\r\n\r\n@NgModule({\r\n declarations: [\r\n EmailTemplatePage,\r\n ],\r\n providers: [ TagInputModule, IonTagsInputModule ],\r\n imports: [\r\n IonicPageModule.forChild(EmailTemplatePage),\r\n TagInputModule,\r\n IonTagsInputModule,\r\n ],\r\n})\r\nexport class EmailTemplatePageModule {}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/email-template/email-template.module.ts"],"sourceRoot":""}
\\n {{ error }}\\n