{"version":3,"sources":["./node_modules/@angular/cdk/esm5/drag-drop.es5.js"],"names":[],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4F;AACoB;AACb;AAClB;AACkN;AACxP;AACY;AACJ;;AAEnD;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA,oCAAoC,EAAE;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;;AAEA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA,qBAAqB,+CAA+C,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA,qBAAqB,oBAAoB,EAAE;AAC3C;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA,UAAU;AACV;AACA,kCAAkC,6FAA+B,EAAE,gBAAgB;AACnF;AACA;AACA,UAAU;AACV;AACA,iCAAiC,6FAA+B,EAAE,iBAAiB;AACnF;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,+BAA+B,4CAAO;AACtC;AACA;AACA;AACA,wCAAwC,iDAAY;AACpD;AACA;AACA;AACA,sCAAsC,iDAAY;AAClD;AACA;AACA;AACA,mCAAmC,iDAAY;AAC/C;AACA;AACA;AACA,mCAAmC,iDAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;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,4CAAO;AACxC;AACA;AACA;AACA,2BAA2B,4CAAO;AAClC;AACA;AACA;AACA,4BAA4B,4CAAO;AACnC;AACA;AACA;AACA,yBAAyB,4CAAO;AAChC;AACA;AACA;AACA,2BAA2B,4CAAO;AAClC;AACA;AACA;AACA,0BAA0B,4CAAO;AACjC;AACA;AACA;AACA,2BAA2B,4CAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA;AACA,+BAA+B,EAAE;AACjC;AACA,yFAAyF,EAAE;AAC3F,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,2BAA2B,EAAE;AAC7B;AACA,2BAA2B,EAAE;AAC7B;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,qCAAqC,wCAAwC,EAAE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,uBAAuB,EAAE;AACzB,2BAA2B,mFAAqB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE;AACtB,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,2BAA2B,QAAQ,2EAAa,SAAS,EAAE;AAC3D,oBAAoB,EAAE;AACtB,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,2BAA2B,oDAAoD,EAAE;AACjF,oBAAoB,EAAE;AACtB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE;AACtB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE;AACtB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB,sBAAsB,2EAAa;AACnC,oCAAoC,EAAE;AACtC,4BAA4B,EAAE;AAC9B,4BAA4B,EAAE,oDAAoD,EAAE;AACpF;AACA,8DAA8D,EAAE;AAChE,+DAA+D,EAAE;AACjE,wBAAwB,EAAE;AAC1B,wBAAwB,EAAE;AAC1B;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,oBAAoB,EAAE,iDAAiD,2EAAa;AACpF,oBAAoB,EAAE;AACtB;AACA,wBAAwB,EAAE,8CAA8C,EAAE;AAC1E;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB,oBAAoB,EAAE,8CAA8C,EAAE;AAC/F;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,EAAE;AACtE;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,iCAAiC;AACjC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE;AACtB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE,gCAAgC;AACtD,oBAAoB,EAAE;AACtB,oBAAoB,EAAE;AACtB,yBAAyB,EAAE;AAC3B,wBAAwB,EAAE;AAC1B;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;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,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA,wDAAwD,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB,sEAAsE,EAAE;AACxE,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA,sEAAsE,gEAAS;AAC/E,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B;AACA,mBAAmB,EAAE;AACrB;AACA,uCAAuC;AACvC,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE;AAC1B;AACA;AACA,YAAY,2EAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,uBAAuB,EAAE;AACzB,wCAAwC,EAAE;AAC1C,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA,8BAA8B,oCAAoC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,mCAAmC,qCAAqC,EAAE,6BAA6B;AACvG,4BAA4B,EAAE;AAC9B;AACA,mDAAmD,EAAE;AACrD;AACA;AACA;AACA,2CAA2C,EAAE;AAC7C,8CAA8C,EAAE;AAChD,iBAAiB;AACjB,aAAa;AACb;AACA,oBAAoB,EAAE;AACtB,oBAAoB,EAAE;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,uBAAuB,EAAE;AACzB,sCAAsC,EAAE,mFAAmF,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;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,gBAAgB,EAAE;AAClB;AACA;AACA;AACA;AACA,gBAAgB,EAAE;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA;AACA,2BAA2B,EAAE;AAC7B,0CAA0C,EAAE;AAC5C,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B,qDAAqD,EAAE;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,+CAA+C,EAAE,2FAA2F,EAAE;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB,0CAA0C,EAAE;AAC5C,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;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,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,oBAAoB;AACpB;AACA,gBAAgB;AAChB;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,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;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,sCAAsC,aAAa;AACnD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB,4BAA4B,EAAE;AAC9B,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA,mBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,uBAAuB,+BAA+B;AACtD,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA,sBAAsB,UAAU;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb;AACA,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,qBAAqB,aAAa,EAAE;AACpC;AACA;AACA;AACA,iCAAiC,4CAAO;AACxC;AACA;AACA;AACA,2BAA2B,4CAAO;AAClC;AACA;AACA;AACA;AACA,0BAA0B,4CAAO;AACjC;AACA;AACA;AACA,2BAA2B,4CAAO;AAClC;AACA;AACA;AACA,0BAA0B,4CAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iDAAY;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4CAAO;AAC5C;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,0BAA0B,2EAAa;AACvC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,YAAY,qDAAQ,IAAI,4DAAuB;AAC/C,sBAAsB,gEAAS;AAC/B;AACA,wBAAwB;AACxB;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,mBAAmB,EAAE;AACrB,wCAAwC,2EAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,sBAAsB,2EAAa;AACnC;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,4BAA4B,uCAAuC,EAAE;AACrE;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB,gEAAgE,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA,wBAAwB,EAAE;AAC1B;AACA;AACA;AACA,YAAY,2EAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qEAAqE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB;AACA,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB;AACA,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA,kCAAkC,aAAa,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,oBAAoB,EAAE;AACtB;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,yBAAyB,4CAA4C,EAAE,cAAc,EAAE;AACvF,wBAAwB,EAAE;AAC1B,wBAAwB,EAAE;AAC1B;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE;AACtB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE;AACtB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,oBAAoB,EAAE;AACtB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,gCAAgC,kCAAkC,EAAE;AACpE;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;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,gCAAgC,kCAAkC,EAAE;AACpE,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;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,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,0BAA0B,2EAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB,sBAAsB,2EAAa;AACnC;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT,mBAAmB,EAAE;AACrB,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,yBAAyB,mDAAmD,EAAE;AAC9E;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,4BAA4B,sCAAsC,EAAE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA,mBAAmB,EAAE;AACrB,mBAAmB,EAAE;AACrB,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;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;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,QAAQ,2EAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,4BAA4B,wCAAwC,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,2CAA2C,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,4BAA4B,2EAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,mDAAmD,EAAE;AACrD;AACA,oBAAoB;AACpB;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B,8CAA8C,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,QAAQ,gFAAkB;AAC1B,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA,UAAU;AACV;AACA,kCAAkC,6FAA+B;AACjE;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAO;AACtC;AACA;AACA;AACA;AACA,6BAA6B,4CAAO;AACpC;AACA;AACA;AACA,0BAA0B,4CAAO;AACjC;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA,uBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA,8BAA8B,2CAA2C,EAAE,UAAU,EAAE;AACvF;AACA,aAAa;AACb;AACA;AACA,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA,8BAA8B,yCAAyC,EAAE,UAAU,EAAE;AACrF;AACA,aAAa;AACb;AACA;AACA,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA,8BAA8B,6BAA6B,EAAE;AAC7D;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,wBAAwB;AACxB;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,6BAA6B,2BAA2B,EAAE;AAC1D;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,6BAA6B,uCAAuC,EAAE;AACtE;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA,6BAA6B,4CAA4C,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS,OAAO,wDAAU,UAAU,qBAAqB,IAAI;AAC7D;AACA;AACA,mDAAmD;AACnD,SAAS,OAAO,oDAAM,EAAE;AACxB,SAAS,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI;AAC3E,MAAM;AACN,0DAA0D,wEAAkB,EAAE,+CAA+C,6BAA6B,8DAAQ,CAAC,oDAAM,GAAG,8DAAQ,CAAC,wDAAQ,GAAG,EAAE,+CAA+C;AACjP;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,GAAG;AAClB,gBAAgB;AAChB;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,wDAAU,UAAU,qBAAqB,IAAI;AAC7D;AACA;AACA,2CAA2C;AAC3C,SAAS,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI,GAAG;AAC9E,SAAS,OAAO,oDAAM,EAAE;AACxB,SAAS,OAAO,oEAAa,EAAE;AAC/B,SAAS;AACT,MAAM;AACN,kDAAkD,wEAAkB,EAAE,uCAAuC,qBAAqB,8DAAQ,CAAC,wDAAQ,GAAG,8DAAQ,CAAC,oDAAM,GAAG,8DAAQ,CAAC,oEAAa,GAAG,8DAAQ,oBAAoB,EAAE,uCAAuC;AACtQ;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,wBAAwB,4DAAc;AACtC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,0BAA0B,4DAAc;;AAExC;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4CAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,qBAAqB,uBAAuB,EAAE;AAC9C;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,6BAA6B,mFAAqB;AAClD;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,uDAAS;AACzB;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,gDAAgD;AAChD,SAAS,OAAO,wDAAU,EAAE;AAC5B,SAAS,gCAAgC,OAAO,oDAAM,4BAA4B,GAAG,OAAO,sDAAQ,EAAE;AACtG,MAAM;AACN;AACA,oBAAoB,OAAO,mDAAK,oCAAoC;AACpE;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,uDAAS;AACzB;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,qDAAqD;AACrD,SAAS,OAAO,yDAAW;AAC3B,MAAM;AACN;AACA,gBAAgB,OAAO,mDAAK,EAAE;AAC9B;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,uDAAS;AACzB;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,iDAAiD;AACjD,SAAS,OAAO,yDAAW;AAC3B,MAAM;AACN;AACA,gBAAgB,OAAO,mDAAK,EAAE;AAC9B;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA,UAAU;AACV;AACA,0BAA0B,4DAAc;AACxC;AACA;AACA,CAAC;AACD;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAY;AACvC;AACA;AACA;AACA,4BAA4B,0DAAY;AACxC;AACA;AACA;AACA,yBAAyB,0DAAY;AACrC;AACA;AACA;AACA,2BAA2B,0DAAY;AACvC;AACA;AACA;AACA,0BAA0B,0DAAY;AACtC;AACA;AACA;AACA,2BAA2B,0DAAY;AACvC;AACA;AACA;AACA;AACA,yBAAyB,+CAAU;AACnC,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,uBAAuB,EAAE;AACzB,yDAAyD,0DAAG;AAC5D,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA,aAAa,EAAE,EAAE;AACjB;AACA,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iGAAiG,EAAE;AACnG,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,6BAA6B,mFAAqB;AAClD;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2DAAI,KAAK,gEAAS;AACpC;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,wCAAwC,gEAAS;AACjD;AACA,YAAY,0DAAG;AACf,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA,mCAAmC,qCAAqC,EAAE;AAC1E;AACA,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA,mCAAmC,uBAAuB,EAAE;AAC5D;AACA,aAAa;AACb;AACA,YAAY,gEAAS;AACrB,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA;AACA,uBAAuB,0CAAK;AAC5B,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA,iCAAiC,2BAA2B,EAAE;AAC9D,aAAa,IAAI,gEAAS;AAC1B,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;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;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,sBAAsB,2EAAa;AACnC,YAAY,+DAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA,iBAAiB;AACjB,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qCAAqC,kFAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,gCAAgC,gBAAgB;AAChD;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB;AACpB;AACA;AACA,iCAAiC,gBAAgB;AACjD,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,8BAA8B,0CAA0C;AACxE;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS,OAAO,uDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iCAAiC,iDAAiD;AAClF,iBAAiB,IAAI;AACrB;AACA;AACA,0CAA0C;AAC1C,SAAS,OAAO,wDAAU,EAAE;AAC5B,SAAS,gCAAgC,OAAO,oDAAM,0BAA0B,GAAG,OAAO,sDAAQ,EAAE,GAAG,OAAO,sDAAQ,EAAE,GAAG;AAC3H,SAAS,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI,GAAG;AAC9E,SAAS,OAAO,oDAAM,EAAE;AACxB,SAAS,OAAO,8DAAgB,EAAE;AAClC,SAAS,gCAAgC,OAAO,oDAAM,4BAA4B,GAAG;AACrF,SAAS,OAAO,gEAAc,gBAAgB,OAAO,sDAAQ,EAAE,GAAG;AAClE,SAAS,iBAAiB;AAC1B,SAAS,OAAO,+DAAiB;AACjC,MAAM;AACN;AACA,oBAAoB,OAAO,6DAAe,yBAAyB,oBAAoB,IAAI;AAC3F,4BAA4B,OAAO,0DAAY,0BAA0B,gBAAgB,IAAI;AAC7F,gCAAgC,OAAO,0DAAY,8BAA8B,gBAAgB,IAAI;AACrG,gBAAgB,OAAO,mDAAK,0BAA0B;AACtD,oBAAoB,OAAO,mDAAK,8BAA8B;AAC9D,+BAA+B,OAAO,mDAAK,iCAAiC;AAC5E,2BAA2B,OAAO,mDAAK,8BAA8B;AACrE,0BAA0B,OAAO,mDAAK,gCAAgC;AACtE,4BAA4B,OAAO,mDAAK,sCAAsC;AAC9E,oBAAoB,OAAO,mDAAK,8BAA8B;AAC9D,6BAA6B,OAAO,mDAAK,uCAAuC;AAChF,mBAAmB,OAAO,oDAAM,6BAA6B;AAC7D,oBAAoB,OAAO,oDAAM,8BAA8B;AAC/D,iBAAiB,OAAO,oDAAM,2BAA2B;AACzD,mBAAmB,OAAO,oDAAM,6BAA6B;AAC7D,kBAAkB,OAAO,oDAAM,4BAA4B;AAC3D,mBAAmB,OAAO,oDAAM,6BAA6B;AAC7D,iBAAiB,OAAO,oDAAM,2BAA2B;AACzD;AACA;AACA,CAAC;AACD;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA,eAAe,EAAE;AACjB,qCAAqC,EAAE;AACvC;AACA;AACA;AACA,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,qBAAqB,uBAAuB,EAAE;AAC9C;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,6BAA6B,mFAAqB;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,uDAAS;AACzB;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,oBAAoB,OAAO,mDAAK,uCAAuC;AACvE;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4CAAO;AACrC;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,qBAAqB,aAAa,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAY;AACvC;AACA;AACA;AACA,2BAA2B,0DAAY;AACvC;AACA;AACA;AACA;AACA,0BAA0B,0DAAY;AACtC;AACA;AACA;AACA,0BAA0B,0DAAY;AACtC;AACA;AACA;AACA,mBAAmB,EAAE;AACrB,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,6BAA6B,mFAAqB;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,qBAAqB,8BAA8B,EAAE;AACrD;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA,oCAAoC,mFAAqB;AACzD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,kBAAkB,gEAAS,oBAAoB,gEAAS;AACxD;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA,6BAA6B,sBAAsB,EAAE;AACrD,SAAS;AACT;AACA;AACA,gBAAgB;AAChB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB;AACA,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB;AACA,gBAAgB;AAChB;AACA;AACA,yEAAyE,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA,mBAAmB,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,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;AACA;AACA;AACA,sBAAsB,gEAAS,mBAAmB,gEAAS;AAC3D;AACA,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA,8BAA8B,iCAAiC,EAAE;AACjE;AACA;AACA,oBAAoB;AACpB;AACA;AACA,uBAAuB,EAAE;AACzB,2BAA2B,yEAAW;AACtC,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA;AACA;AACA,gCAAgC,EAAE;AAClC,+BAA+B,EAAE;AACjC,gCAAgC;AAChC;AACA,qCAAqC,yBAAyB,EAAE;AAChE,aAAa;AACb;AACA;AACA,2BAA2B,EAAE;AAC7B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA,6BAA6B,+BAA+B,EAAE;AAC9D,uBAAuB,EAAE;AACzB,wBAAwB;AACxB;AACA,6BAA6B,0BAA0B,EAAE;AACzD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,mBAAmB,EAAE;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,uDAAS;AACzB;AACA;AACA;AACA;AACA,yBAAyB,0CAA0C;AACnE,yBAAyB,6DAA6D;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,8CAA8C;AAC9C,SAAS,OAAO,wDAAU,EAAE;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,OAAO,+DAAiB,EAAE;AACnC,SAAS,OAAO,gEAAc,gBAAgB,OAAO,sDAAQ,EAAE,GAAG;AAClE,SAAS,uCAAuC,OAAO,sDAAQ,EAAE,GAAG,OAAO,sDAAQ,EAAE;AACrF,MAAM;AACN;AACA,uBAAuB,OAAO,6DAAe,SAAS,gEAAU;AAChE,gCAAgC;AAChC;AACA,iCAAiC,gBAAgB,EAAE;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB,uBAAuB,OAAO,mDAAK,qCAAqC;AACxE,gBAAgB,OAAO,mDAAK,8BAA8B;AAC1D,uBAAuB,OAAO,mDAAK,qCAAqC;AACxE,cAAc,OAAO,mDAAK,EAAE;AAC5B,oBAAoB,OAAO,mDAAK,kCAAkC;AAClE,oBAAoB,OAAO,mDAAK,kCAAkC;AAClE,2BAA2B,OAAO,mDAAK,yCAAyC;AAChF,0BAA0B,OAAO,mDAAK,wCAAwC;AAC9E,8BAA8B,OAAO,mDAAK,4CAA4C;AACtF,mBAAmB,OAAO,oDAAM,iCAAiC;AACjE,mBAAmB,OAAO,oDAAM,iCAAiC;AACjE,kBAAkB,OAAO,oDAAM,gCAAgC;AAC/D,kBAAkB,OAAO,oDAAM,gCAAgC;AAC/D;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,CAAC;;AAED;AACA;AACA,cAAc,uFAAuF;AACrG;;AAEA;AACA;AACA,cAAc,uFAAuF;AACrG;;AAEmU;AACnU","file":"default~modules-dashboard-dashboard-module~modules-enterprise-dashboard-enterprise-dashboard-module~~6d543209.js","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { normalizePassiveListenerOptions, _supportsShadowDom } from '@angular/cdk/platform';\nimport { coerceBooleanProperty, coerceElement, coerceNumberProperty, coerceArray } from '@angular/cdk/coercion';\nimport { Subscription, Subject, interval, animationFrameScheduler, Observable, merge } from 'rxjs';\nimport { startWith, takeUntil, take, map, switchMap, tap } from 'rxjs/operators';\nimport { Injectable, NgZone, Inject, InjectionToken, NgModule, ContentChildren, ElementRef, EventEmitter, forwardRef, Input, Output, Optional, Directive, ChangeDetectorRef, SkipSelf, ContentChild, ViewContainerRef, isDevMode, TemplateRef, ɵɵdefineInjectable, ɵɵinject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { Directionality } from '@angular/cdk/bidi';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Shallow-extends a stylesheet object with another stylesheet object.\n * \\@docs-private\n * @param {?} dest\n * @param {?} source\n * @return {?}\n */\nfunction extendStyles(dest, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = (/** @type {?} */ (source[key]));\n }\n }\n return dest;\n}\n/**\n * Toggles whether the native drag interactions should be enabled for an element.\n * \\@docs-private\n * @param {?} element Element on which to toggle the drag interactions.\n * @param {?} enable Whether the drag interactions should be enabled.\n * @return {?}\n */\nfunction toggleNativeDragInteractions(element, enable) {\n /** @type {?} */\n var userSelect = enable ? '' : 'none';\n extendStyles(element.style, {\n touchAction: enable ? '' : 'none',\n webkitUserDrag: enable ? '' : 'none',\n webkitTapHighlightColor: enable ? '' : 'transparent',\n userSelect: userSelect,\n msUserSelect: userSelect,\n webkitUserSelect: userSelect,\n MozUserSelect: userSelect\n });\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * Parses a CSS time value to milliseconds.\n * @param {?} value\n * @return {?}\n */\nfunction parseCssTimeUnitsToMs(value) {\n // Some browsers will return it in seconds, whereas others will return milliseconds.\n /** @type {?} */\n var multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\n/**\n * Gets the transform transition duration, including the delay, of an element in milliseconds.\n * @param {?} element\n * @return {?}\n */\nfunction getTransformTransitionDurationInMs(element) {\n /** @type {?} */\n var computedStyle = getComputedStyle(element);\n /** @type {?} */\n var transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n /** @type {?} */\n var property = transitionedProperties.find((/**\n * @param {?} prop\n * @return {?}\n */\n function (prop) { return prop === 'transform' || prop === 'all'; }));\n // If there's no transition for `all` or `transform`, we shouldn't do anything.\n if (!property) {\n return 0;\n }\n // Get the index of the property that we're interested in and match\n // it up to the same index in `transition-delay` and `transition-duration`.\n /** @type {?} */\n var propertyIndex = transitionedProperties.indexOf(property);\n /** @type {?} */\n var rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n /** @type {?} */\n var rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +\n parseCssTimeUnitsToMs(rawDelays[propertyIndex]);\n}\n/**\n * Parses out multiple values from a computed style into an array.\n * @param {?} computedStyle\n * @param {?} name\n * @return {?}\n */\nfunction parseCssPropertyValue(computedStyle, name) {\n /** @type {?} */\n var value = computedStyle.getPropertyValue(name);\n return value.split(',').map((/**\n * @param {?} part\n * @return {?}\n */\n function (part) { return part.trim(); }));\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Options that can be used to bind a passive event listener.\n * @type {?}\n */\nvar passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });\n/**\n * Options that can be used to bind an active event listener.\n * @type {?}\n */\nvar activeEventListenerOptions = normalizePassiveListenerOptions({ passive: false });\n/**\n * Time in milliseconds for which to ignore mouse events, after\n * receiving a touch event. Used to avoid doing double work for\n * touch devices where the browser fires fake mouse events, in\n * addition to touch events.\n * @type {?}\n */\nvar MOUSE_EVENT_IGNORE_TIME = 800;\n/**\n * Reference to a draggable item. Used to manipulate or dispose of the item.\n * \\@docs-private\n * @template T\n */\nvar /**\n * Reference to a draggable item. Used to manipulate or dispose of the item.\n * \\@docs-private\n * @template T\n */\nDragRef = /** @class */ (function () {\n function DragRef(element, _config, _document, _ngZone, _viewportRuler, _dragDropRegistry) {\n var _this = this;\n this._config = _config;\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n /**\n * CSS `transform` applied to the element when it isn't being dragged. We need a\n * passive transform in order for the dragged element to retain its new position\n * after the user has stopped dragging and because we need to know the relative\n * position in case they start dragging again. This corresponds to `element.style.transform`.\n */\n this._passiveTransform = { x: 0, y: 0 };\n /**\n * CSS `transform` that is applied to the element while it's being dragged.\n */\n this._activeTransform = { x: 0, y: 0 };\n /**\n * Emits when the item is being moved.\n */\n this._moveEvents = new Subject();\n /**\n * Subscription to pointer movement events.\n */\n this._pointerMoveSubscription = Subscription.EMPTY;\n /**\n * Subscription to the event that is dispatched when the user lifts their pointer.\n */\n this._pointerUpSubscription = Subscription.EMPTY;\n /**\n * Subscription to the viewport being scrolled.\n */\n this._scrollSubscription = Subscription.EMPTY;\n /**\n * Subscription to the viewport being resized.\n */\n this._resizeSubscription = Subscription.EMPTY;\n /**\n * Cached reference to the boundary element.\n */\n this._boundaryElement = null;\n /**\n * Whether the native dragging interactions have been enabled on the root element.\n */\n this._nativeInteractionsEnabled = true;\n /**\n * Elements that can be used to drag the draggable item.\n */\n this._handles = [];\n /**\n * Registered handles that are currently disabled.\n */\n this._disabledHandles = new Set();\n /**\n * Layout direction of the item.\n */\n this._direction = 'ltr';\n /**\n * Amount of milliseconds to wait after the user has put their\n * pointer down before starting to drag the element.\n */\n this.dragStartDelay = 0;\n this._disabled = false;\n /**\n * Emits as the drag sequence is being prepared.\n */\n this.beforeStarted = new Subject();\n /**\n * Emits when the user starts dragging the item.\n */\n this.started = new Subject();\n /**\n * Emits when the user has released a drag item, before any animations have started.\n */\n this.released = new Subject();\n /**\n * Emits when the user stops dragging an item in the container.\n */\n this.ended = new Subject();\n /**\n * Emits when the user has moved the item into a new container.\n */\n this.entered = new Subject();\n /**\n * Emits when the user removes the item its container by dragging it into another container.\n */\n this.exited = new Subject();\n /**\n * Emits when the user drops the item inside a container.\n */\n this.dropped = new Subject();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = this._moveEvents.asObservable();\n /**\n * Handler for the `mousedown`/`touchstart` events.\n */\n this._pointerDown = (/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.beforeStarted.next();\n // Delegate the event based on whether it started from a handle or the element itself.\n if (_this._handles.length) {\n /** @type {?} */\n var targetHandle = _this._handles.find((/**\n * @param {?} handle\n * @return {?}\n */\n function (handle) {\n /** @type {?} */\n var target = event.target;\n return !!target && (target === handle || handle.contains((/** @type {?} */ (target))));\n }));\n if (targetHandle && !_this._disabledHandles.has(targetHandle) && !_this.disabled) {\n _this._initializeDragSequence(targetHandle, event);\n }\n }\n else if (!_this.disabled) {\n _this._initializeDragSequence(_this._rootElement, event);\n }\n });\n /**\n * Handler that is invoked when the user moves their pointer after they've initiated a drag.\n */\n this._pointerMove = (/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n if (!_this._hasStartedDragging) {\n /** @type {?} */\n var pointerPosition = _this._getPointerPositionOnPage(event);\n /** @type {?} */\n var distanceX = Math.abs(pointerPosition.x - _this._pickupPositionOnPage.x);\n /** @type {?} */\n var distanceY = Math.abs(pointerPosition.y - _this._pickupPositionOnPage.y);\n /** @type {?} */\n var isOverThreshold = distanceX + distanceY >= _this._config.dragStartThreshold;\n // Only start dragging after the user has moved more than the minimum distance in either\n // direction. Note that this is preferrable over doing something like `skip(minimumDistance)`\n // in the `pointerMove` subscription, because we're not guaranteed to have one move event\n // per pixel of movement (e.g. if the user moves their pointer quickly).\n if (isOverThreshold) {\n /** @type {?} */\n var isDelayElapsed = Date.now() >= _this._dragStartTime + (_this.dragStartDelay || 0);\n if (!isDelayElapsed) {\n _this._endDragSequence(event);\n return;\n }\n // Prevent other drag sequences from starting while something in the container is still\n // being dragged. This can happen while we're waiting for the drop animation to finish\n // and can cause errors, because some elements might still be moving around.\n if (!_this._dropContainer || !_this._dropContainer.isDragging()) {\n _this._hasStartedDragging = true;\n _this._ngZone.run((/**\n * @return {?}\n */\n function () { return _this._startDragSequence(event); }));\n }\n }\n return;\n }\n // We only need the preview dimensions if we have a boundary element.\n if (_this._boundaryElement) {\n // Cache the preview element rect if we haven't cached it already or if\n // we cached it too early before the element dimensions were computed.\n if (!_this._previewRect || (!_this._previewRect.width && !_this._previewRect.height)) {\n _this._previewRect = (_this._preview || _this._rootElement).getBoundingClientRect();\n }\n }\n /** @type {?} */\n var constrainedPointerPosition = _this._getConstrainedPointerPosition(event);\n _this._hasMoved = true;\n event.preventDefault();\n _this._updatePointerDirectionDelta(constrainedPointerPosition);\n if (_this._dropContainer) {\n _this._updateActiveDropContainer(constrainedPointerPosition);\n }\n else {\n /** @type {?} */\n var activeTransform = _this._activeTransform;\n activeTransform.x =\n constrainedPointerPosition.x - _this._pickupPositionOnPage.x + _this._passiveTransform.x;\n activeTransform.y =\n constrainedPointerPosition.y - _this._pickupPositionOnPage.y + _this._passiveTransform.y;\n _this._applyRootElementTransform(activeTransform.x, activeTransform.y);\n // Apply transform as attribute if dragging and svg element to work for IE\n if (typeof SVGElement !== 'undefined' && _this._rootElement instanceof SVGElement) {\n /** @type {?} */\n var appliedTransform = \"translate(\" + activeTransform.x + \" \" + activeTransform.y + \")\";\n _this._rootElement.setAttribute('transform', appliedTransform);\n }\n }\n // Since this event gets fired for every pixel while dragging, we only\n // want to fire it if the consumer opted into it. Also we have to\n // re-enter the zone because we run all of the events on the outside.\n if (_this._moveEvents.observers.length) {\n _this._ngZone.run((/**\n * @return {?}\n */\n function () {\n _this._moveEvents.next({\n source: _this,\n pointerPosition: constrainedPointerPosition,\n event: event,\n distance: _this._getDragDistance(constrainedPointerPosition),\n delta: _this._pointerDirectionDelta\n });\n }));\n }\n });\n /**\n * Handler that is invoked when the user lifts their pointer up, after initiating a drag.\n */\n this._pointerUp = (/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this._endDragSequence(event);\n });\n this.withRootElement(element);\n _dragDropRegistry.registerDragItem(this);\n }\n Object.defineProperty(DragRef.prototype, \"disabled\", {\n /** Whether starting to drag this element is disabled. */\n get: /**\n * Whether starting to drag this element is disabled.\n * @return {?}\n */\n function () {\n return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);\n },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n /** @type {?} */\n var newValue = coerceBooleanProperty(value);\n if (newValue !== this._disabled) {\n this._disabled = newValue;\n this._toggleNativeDragInteractions();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n * @return {?}\n */\n DragRef.prototype.getPlaceholderElement = /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n * @return {?}\n */\n function () {\n return this._placeholder;\n };\n /** Returns the root draggable element. */\n /**\n * Returns the root draggable element.\n * @return {?}\n */\n DragRef.prototype.getRootElement = /**\n * Returns the root draggable element.\n * @return {?}\n */\n function () {\n return this._rootElement;\n };\n /** Registers the handles that can be used to drag the element. */\n /**\n * Registers the handles that can be used to drag the element.\n * @template THIS\n * @this {THIS}\n * @param {?} handles\n * @return {THIS}\n */\n DragRef.prototype.withHandles = /**\n * Registers the handles that can be used to drag the element.\n * @template THIS\n * @this {THIS}\n * @param {?} handles\n * @return {THIS}\n */\n function (handles) {\n (/** @type {?} */ (this))._handles = handles.map((/**\n * @param {?} handle\n * @return {?}\n */\n function (handle) { return coerceElement(handle); }));\n (/** @type {?} */ (this))._handles.forEach((/**\n * @param {?} handle\n * @return {?}\n */\n function (handle) { return toggleNativeDragInteractions(handle, false); }));\n (/** @type {?} */ (this))._toggleNativeDragInteractions();\n return (/** @type {?} */ (this));\n };\n /**\n * Registers the template that should be used for the drag preview.\n * @param template Template that from which to stamp out the preview.\n */\n /**\n * Registers the template that should be used for the drag preview.\n * @template THIS\n * @this {THIS}\n * @param {?} template Template that from which to stamp out the preview.\n * @return {THIS}\n */\n DragRef.prototype.withPreviewTemplate = /**\n * Registers the template that should be used for the drag preview.\n * @template THIS\n * @this {THIS}\n * @param {?} template Template that from which to stamp out the preview.\n * @return {THIS}\n */\n function (template) {\n (/** @type {?} */ (this))._previewTemplate = template;\n return (/** @type {?} */ (this));\n };\n /**\n * Registers the template that should be used for the drag placeholder.\n * @param template Template that from which to stamp out the placeholder.\n */\n /**\n * Registers the template that should be used for the drag placeholder.\n * @template THIS\n * @this {THIS}\n * @param {?} template Template that from which to stamp out the placeholder.\n * @return {THIS}\n */\n DragRef.prototype.withPlaceholderTemplate = /**\n * Registers the template that should be used for the drag placeholder.\n * @template THIS\n * @this {THIS}\n * @param {?} template Template that from which to stamp out the placeholder.\n * @return {THIS}\n */\n function (template) {\n (/** @type {?} */ (this))._placeholderTemplate = template;\n return (/** @type {?} */ (this));\n };\n /**\n * Sets an alternate drag root element. The root element is the element that will be moved as\n * the user is dragging. Passing an alternate root element is useful when trying to enable\n * dragging on an element that you might not have access to.\n */\n /**\n * Sets an alternate drag root element. The root element is the element that will be moved as\n * the user is dragging. Passing an alternate root element is useful when trying to enable\n * dragging on an element that you might not have access to.\n * @template THIS\n * @this {THIS}\n * @param {?} rootElement\n * @return {THIS}\n */\n DragRef.prototype.withRootElement = /**\n * Sets an alternate drag root element. The root element is the element that will be moved as\n * the user is dragging. Passing an alternate root element is useful when trying to enable\n * dragging on an element that you might not have access to.\n * @template THIS\n * @this {THIS}\n * @param {?} rootElement\n * @return {THIS}\n */\n function (rootElement) {\n /** @type {?} */\n var element = coerceElement(rootElement);\n if (element !== (/** @type {?} */ (this))._rootElement) {\n if ((/** @type {?} */ (this))._rootElement) {\n (/** @type {?} */ (this))._removeRootElementListeners((/** @type {?} */ (this))._rootElement);\n }\n element.addEventListener('mousedown', (/** @type {?} */ (this))._pointerDown, activeEventListenerOptions);\n element.addEventListener('touchstart', (/** @type {?} */ (this))._pointerDown, passiveEventListenerOptions);\n (/** @type {?} */ (this))._initialTransform = undefined;\n (/** @type {?} */ (this))._rootElement = element;\n }\n return (/** @type {?} */ (this));\n };\n /**\n * Element to which the draggable's position will be constrained.\n */\n /**\n * Element to which the draggable's position will be constrained.\n * @template THIS\n * @this {THIS}\n * @param {?} boundaryElement\n * @return {THIS}\n */\n DragRef.prototype.withBoundaryElement = /**\n * Element to which the draggable's position will be constrained.\n * @template THIS\n * @this {THIS}\n * @param {?} boundaryElement\n * @return {THIS}\n */\n function (boundaryElement) {\n var _this = this;\n (/** @type {?} */ (this))._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;\n (/** @type {?} */ (this))._resizeSubscription.unsubscribe();\n if (boundaryElement) {\n (/** @type {?} */ (this))._resizeSubscription = (/** @type {?} */ (this))._viewportRuler\n .change(10)\n .subscribe((/**\n * @return {?}\n */\n function () { return (/** @type {?} */ (_this))._containInsideBoundaryOnResize(); }));\n }\n return (/** @type {?} */ (this));\n };\n /** Removes the dragging functionality from the DOM element. */\n /**\n * Removes the dragging functionality from the DOM element.\n * @return {?}\n */\n DragRef.prototype.dispose = /**\n * Removes the dragging functionality from the DOM element.\n * @return {?}\n */\n function () {\n this._removeRootElementListeners(this._rootElement);\n // Do this check before removing from the registry since it'll\n // stop being considered as dragged once it is removed.\n if (this.isDragging()) {\n // Since we move out the element to the end of the body while it's being\n // dragged, we have to make sure that it's removed if it gets destroyed.\n removeElement(this._rootElement);\n }\n this._destroyPreview();\n this._destroyPlaceholder();\n this._dragDropRegistry.removeDragItem(this);\n this._removeSubscriptions();\n this.beforeStarted.complete();\n this.started.complete();\n this.released.complete();\n this.ended.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this._moveEvents.complete();\n this._handles = [];\n this._disabledHandles.clear();\n this._dropContainer = undefined;\n this._boundaryElement = this._rootElement = this._placeholderTemplate =\n this._previewTemplate = this._nextSibling = (/** @type {?} */ (null));\n };\n /** Checks whether the element is currently being dragged. */\n /**\n * Checks whether the element is currently being dragged.\n * @return {?}\n */\n DragRef.prototype.isDragging = /**\n * Checks whether the element is currently being dragged.\n * @return {?}\n */\n function () {\n return this._hasStartedDragging && this._dragDropRegistry.isDragging(this);\n };\n /** Resets a standalone drag item to its initial position. */\n /**\n * Resets a standalone drag item to its initial position.\n * @return {?}\n */\n DragRef.prototype.reset = /**\n * Resets a standalone drag item to its initial position.\n * @return {?}\n */\n function () {\n this._rootElement.style.transform = this._initialTransform || '';\n this._activeTransform = { x: 0, y: 0 };\n this._passiveTransform = { x: 0, y: 0 };\n };\n /**\n * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n * @param handle Handle element that should be disabled.\n */\n /**\n * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n * @param {?} handle Handle element that should be disabled.\n * @return {?}\n */\n DragRef.prototype.disableHandle = /**\n * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n * @param {?} handle Handle element that should be disabled.\n * @return {?}\n */\n function (handle) {\n if (this._handles.indexOf(handle) > -1) {\n this._disabledHandles.add(handle);\n }\n };\n /**\n * Enables a handle, if it has been disabled.\n * @param handle Handle element to be enabled.\n */\n /**\n * Enables a handle, if it has been disabled.\n * @param {?} handle Handle element to be enabled.\n * @return {?}\n */\n DragRef.prototype.enableHandle = /**\n * Enables a handle, if it has been disabled.\n * @param {?} handle Handle element to be enabled.\n * @return {?}\n */\n function (handle) {\n this._disabledHandles.delete(handle);\n };\n /** Sets the layout direction of the draggable item. */\n /**\n * Sets the layout direction of the draggable item.\n * @template THIS\n * @this {THIS}\n * @param {?} direction\n * @return {THIS}\n */\n DragRef.prototype.withDirection = /**\n * Sets the layout direction of the draggable item.\n * @template THIS\n * @this {THIS}\n * @param {?} direction\n * @return {THIS}\n */\n function (direction) {\n (/** @type {?} */ (this))._direction = direction;\n return (/** @type {?} */ (this));\n };\n /** Sets the container that the item is part of. */\n /**\n * Sets the container that the item is part of.\n * @param {?} container\n * @return {?}\n */\n DragRef.prototype._withDropContainer = /**\n * Sets the container that the item is part of.\n * @param {?} container\n * @return {?}\n */\n function (container) {\n this._dropContainer = container;\n };\n /**\n * Gets the current position in pixels the draggable outside of a drop container.\n */\n /**\n * Gets the current position in pixels the draggable outside of a drop container.\n * @return {?}\n */\n DragRef.prototype.getFreeDragPosition = /**\n * Gets the current position in pixels the draggable outside of a drop container.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var position = this.isDragging() ? this._activeTransform : this._passiveTransform;\n return { x: position.x, y: position.y };\n };\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @param value New position to be set.\n */\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @template THIS\n * @this {THIS}\n * @param {?} value New position to be set.\n * @return {THIS}\n */\n DragRef.prototype.setFreeDragPosition = /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @template THIS\n * @this {THIS}\n * @param {?} value New position to be set.\n * @return {THIS}\n */\n function (value) {\n (/** @type {?} */ (this))._activeTransform = { x: 0, y: 0 };\n (/** @type {?} */ (this))._passiveTransform.x = value.x;\n (/** @type {?} */ (this))._passiveTransform.y = value.y;\n if (!(/** @type {?} */ (this))._dropContainer) {\n (/** @type {?} */ (this))._applyRootElementTransform(value.x, value.y);\n }\n return (/** @type {?} */ (this));\n };\n /** Updates the item's sort order based on the last-known pointer position. */\n /**\n * Updates the item's sort order based on the last-known pointer position.\n * @return {?}\n */\n DragRef.prototype._sortFromLastPointerPosition = /**\n * Updates the item's sort order based on the last-known pointer position.\n * @return {?}\n */\n function () {\n /** @type {?} */\n var position = this._pointerPositionAtLastDirectionChange;\n if (position && this._dropContainer) {\n this._updateActiveDropContainer(position);\n }\n };\n /** Unsubscribes from the global subscriptions. */\n /**\n * Unsubscribes from the global subscriptions.\n * @private\n * @return {?}\n */\n DragRef.prototype._removeSubscriptions = /**\n * Unsubscribes from the global subscriptions.\n * @private\n * @return {?}\n */\n function () {\n this._pointerMoveSubscription.unsubscribe();\n this._pointerUpSubscription.unsubscribe();\n this._scrollSubscription.unsubscribe();\n };\n /** Destroys the preview element and its ViewRef. */\n /**\n * Destroys the preview element and its ViewRef.\n * @private\n * @return {?}\n */\n DragRef.prototype._destroyPreview = /**\n * Destroys the preview element and its ViewRef.\n * @private\n * @return {?}\n */\n function () {\n if (this._preview) {\n removeElement(this._preview);\n }\n if (this._previewRef) {\n this._previewRef.destroy();\n }\n this._preview = this._previewRef = (/** @type {?} */ (null));\n };\n /** Destroys the placeholder element and its ViewRef. */\n /**\n * Destroys the placeholder element and its ViewRef.\n * @private\n * @return {?}\n */\n DragRef.prototype._destroyPlaceholder = /**\n * Destroys the placeholder element and its ViewRef.\n * @private\n * @return {?}\n */\n function () {\n if (this._placeholder) {\n removeElement(this._placeholder);\n }\n if (this._placeholderRef) {\n this._placeholderRef.destroy();\n }\n this._placeholder = this._placeholderRef = (/** @type {?} */ (null));\n };\n /**\n * Clears subscriptions and stops the dragging sequence.\n * @param event Browser event object that ended the sequence.\n */\n /**\n * Clears subscriptions and stops the dragging sequence.\n * @private\n * @param {?} event Browser event object that ended the sequence.\n * @return {?}\n */\n DragRef.prototype._endDragSequence = /**\n * Clears subscriptions and stops the dragging sequence.\n * @private\n * @param {?} event Browser event object that ended the sequence.\n * @return {?}\n */\n function (event) {\n var _this = this;\n // Note that here we use `isDragging` from the service, rather than from `this`.\n // The difference is that the one from the service reflects whether a dragging sequence\n // has been initiated, whereas the one on `this` includes whether the user has passed\n // the minimum dragging threshold.\n if (!this._dragDropRegistry.isDragging(this)) {\n return;\n }\n this._removeSubscriptions();\n this._dragDropRegistry.stopDragging(this);\n this._toggleNativeDragInteractions();\n if (this._handles) {\n this._rootElement.style.webkitTapHighlightColor = this._rootElementTapHighlight;\n }\n if (!this._hasStartedDragging) {\n return;\n }\n this.released.next({ source: this });\n if (this._dropContainer) {\n // Stop scrolling immediately, instead of waiting for the animation to finish.\n this._dropContainer._stopScrolling();\n this._animatePreviewToPlaceholder().then((/**\n * @return {?}\n */\n function () {\n _this._cleanupDragArtifacts(event);\n _this._cleanupCachedDimensions();\n _this._dragDropRegistry.stopDragging(_this);\n }));\n }\n else {\n // Convert the active transform into a passive one. This means that next time\n // the user starts dragging the item, its position will be calculated relatively\n // to the new passive transform.\n this._passiveTransform.x = this._activeTransform.x;\n this._passiveTransform.y = this._activeTransform.y;\n this._ngZone.run((/**\n * @return {?}\n */\n function () {\n _this.ended.next({\n source: _this,\n distance: _this._getDragDistance(_this._getPointerPositionOnPage(event))\n });\n }));\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n }\n };\n /** Starts the dragging sequence. */\n /**\n * Starts the dragging sequence.\n * @private\n * @param {?} event\n * @return {?}\n */\n DragRef.prototype._startDragSequence = /**\n * Starts the dragging sequence.\n * @private\n * @param {?} event\n * @return {?}\n */\n function (event) {\n // Emit the event on the item before the one on the container.\n this.started.next({ source: this });\n if (isTouchEvent(event)) {\n this._lastTouchEventTime = Date.now();\n }\n this._toggleNativeDragInteractions();\n if (this._dropContainer) {\n /** @type {?} */\n var element = this._rootElement;\n // Grab the `nextSibling` before the preview and placeholder\n // have been created so we don't get the preview by accident.\n this._nextSibling = element.nextSibling;\n /** @type {?} */\n var preview = this._preview = this._createPreviewElement();\n /** @type {?} */\n var placeholder = this._placeholder = this._createPlaceholderElement();\n // We move the element out at the end of the body and we make it hidden, because keeping it in\n // place will throw off the consumer's `:last-child` selectors. We can't remove the element\n // from the DOM completely, because iOS will stop firing all subsequent events in the chain.\n element.style.display = 'none';\n this._document.body.appendChild((/** @type {?} */ (element.parentNode)).replaceChild(placeholder, element));\n getPreviewInsertionPoint(this._document).appendChild(preview);\n this._dropContainer.start();\n }\n };\n /**\n * Sets up the different variables and subscriptions\n * that will be necessary for the dragging sequence.\n * @param referenceElement Element that started the drag sequence.\n * @param event Browser event object that started the sequence.\n */\n /**\n * Sets up the different variables and subscriptions\n * that will be necessary for the dragging sequence.\n * @private\n * @param {?} referenceElement Element that started the drag sequence.\n * @param {?} event Browser event object that started the sequence.\n * @return {?}\n */\n DragRef.prototype._initializeDragSequence = /**\n * Sets up the different variables and subscriptions\n * that will be necessary for the dragging sequence.\n * @private\n * @param {?} referenceElement Element that started the drag sequence.\n * @param {?} event Browser event object that started the sequence.\n * @return {?}\n */\n function (referenceElement, event) {\n var _this = this;\n // Always stop propagation for the event that initializes\n // the dragging sequence, in order to prevent it from potentially\n // starting another sequence for a draggable parent somewhere up the DOM tree.\n event.stopPropagation();\n /** @type {?} */\n var isDragging = this.isDragging();\n /** @type {?} */\n var isTouchSequence = isTouchEvent(event);\n /** @type {?} */\n var isAuxiliaryMouseButton = !isTouchSequence && ((/** @type {?} */ (event))).button !== 0;\n /** @type {?} */\n var rootElement = this._rootElement;\n /** @type {?} */\n var isSyntheticEvent = !isTouchSequence && this._lastTouchEventTime &&\n this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();\n // If the event started from an element with the native HTML drag&drop, it'll interfere\n // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n // to do this for `mousedown` since doing the same for `touchstart` will stop any `click`\n // events from firing on touch devices.\n if (event.target && ((/** @type {?} */ (event.target))).draggable && event.type === 'mousedown') {\n event.preventDefault();\n }\n // Abort if the user is already dragging or is using a mouse button other than the primary one.\n if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent) {\n return;\n }\n // If we've got handles, we need to disable the tap highlight on the entire root element,\n // otherwise iOS will still add it, even though all the drag interactions on the handle\n // are disabled.\n if (this._handles.length) {\n this._rootElementTapHighlight = rootElement.style.webkitTapHighlightColor;\n rootElement.style.webkitTapHighlightColor = 'transparent';\n }\n this._hasStartedDragging = this._hasMoved = false;\n this._initialContainer = (/** @type {?} */ (this._dropContainer));\n // Avoid multiple subscriptions and memory leaks when multi touch\n // (isDragging check above isn't enough because of possible temporal and/or dimensional delays)\n this._removeSubscriptions();\n this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);\n this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);\n this._scrollSubscription = this._dragDropRegistry.scroll.pipe(startWith(null)).subscribe((/**\n * @return {?}\n */\n function () {\n _this._scrollPosition = _this._viewportRuler.getViewportScrollPosition();\n }));\n if (this._boundaryElement) {\n this._boundaryRect = this._boundaryElement.getBoundingClientRect();\n }\n // If we have a custom preview template, the element won't be visible anyway so we avoid the\n // extra `getBoundingClientRect` calls and just move the preview next to the cursor.\n this._pickupPositionInElement = this._previewTemplate && this._previewTemplate.template ?\n { x: 0, y: 0 } :\n this._getPointerPositionInElement(referenceElement, event);\n /** @type {?} */\n var pointerPosition = this._pickupPositionOnPage = this._getPointerPositionOnPage(event);\n this._pointerDirectionDelta = { x: 0, y: 0 };\n this._pointerPositionAtLastDirectionChange = { x: pointerPosition.x, y: pointerPosition.y };\n this._dragStartTime = Date.now();\n this._dragDropRegistry.startDragging(this, event);\n };\n /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */\n /**\n * Cleans up the DOM artifacts that were added to facilitate the element being dragged.\n * @private\n * @param {?} event\n * @return {?}\n */\n DragRef.prototype._cleanupDragArtifacts = /**\n * Cleans up the DOM artifacts that were added to facilitate the element being dragged.\n * @private\n * @param {?} event\n * @return {?}\n */\n function (event) {\n var _this = this;\n // Restore the element's visibility and insert it at its old position in the DOM.\n // It's important that we maintain the position, because moving the element around in the DOM\n // can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,\n // while moving the existing elements in all other cases.\n this._rootElement.style.display = '';\n if (this._nextSibling) {\n (/** @type {?} */ (this._nextSibling.parentNode)).insertBefore(this._rootElement, this._nextSibling);\n }\n else {\n coerceElement(this._initialContainer.element).appendChild(this._rootElement);\n }\n this._destroyPreview();\n this._destroyPlaceholder();\n this._boundaryRect = this._previewRect = undefined;\n // Re-enter the NgZone since we bound `document` events on the outside.\n this._ngZone.run((/**\n * @return {?}\n */\n function () {\n /** @type {?} */\n var container = (/** @type {?} */ (_this._dropContainer));\n /** @type {?} */\n var currentIndex = container.getItemIndex(_this);\n /** @type {?} */\n var pointerPosition = _this._getPointerPositionOnPage(event);\n /** @type {?} */\n var distance = _this._getDragDistance(_this._getPointerPositionOnPage(event));\n /** @type {?} */\n var isPointerOverContainer = container._isOverContainer(pointerPosition.x, pointerPosition.y);\n _this.ended.next({ source: _this, distance: distance });\n _this.dropped.next({\n item: _this,\n currentIndex: currentIndex,\n previousIndex: _this._initialContainer.getItemIndex(_this),\n container: container,\n previousContainer: _this._initialContainer,\n isPointerOverContainer: isPointerOverContainer,\n distance: distance\n });\n container.drop(_this, currentIndex, _this._initialContainer, isPointerOverContainer, distance);\n _this._dropContainer = _this._initialContainer;\n }));\n };\n /**\n * Updates the item's position in its drop container, or moves it\n * into a new one, depending on its current drag position.\n */\n /**\n * Updates the item's position in its drop container, or moves it\n * into a new one, depending on its current drag position.\n * @private\n * @param {?} __0\n * @return {?}\n */\n DragRef.prototype._updateActiveDropContainer = /**\n * Updates the item's position in its drop container, or moves it\n * into a new one, depending on its current drag position.\n * @private\n * @param {?} __0\n * @return {?}\n */\n function (_a) {\n var _this = this;\n var x = _a.x, y = _a.y;\n // Drop container that draggable has been moved into.\n /** @type {?} */\n var newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);\n // If we couldn't find a new container to move the item into, and the item has left its\n // initial container, check whether the it's over the initial container. This handles the\n // case where two containers are connected one way and the user tries to undo dragging an\n // item into a new container.\n if (!newContainer && this._dropContainer !== this._initialContainer &&\n this._initialContainer._isOverContainer(x, y)) {\n newContainer = this._initialContainer;\n }\n if (newContainer && newContainer !== this._dropContainer) {\n this._ngZone.run((/**\n * @return {?}\n */\n function () {\n // Notify the old container that the item has left.\n _this.exited.next({ item: _this, container: (/** @type {?} */ (_this._dropContainer)) });\n (/** @type {?} */ (_this._dropContainer)).exit(_this);\n // Notify the new container that the item has entered.\n _this._dropContainer = (/** @type {?} */ (newContainer));\n _this._dropContainer.enter(_this, x, y);\n _this.entered.next({\n item: _this,\n container: (/** @type {?} */ (newContainer)),\n currentIndex: (/** @type {?} */ (newContainer)).getItemIndex(_this)\n });\n }));\n }\n (/** @type {?} */ (this._dropContainer))._startScrollingIfNecessary(x, y);\n (/** @type {?} */ (this._dropContainer))._sortItem(this, x, y, this._pointerDirectionDelta);\n this._preview.style.transform =\n getTransform(x - this._pickupPositionInElement.x, y - this._pickupPositionInElement.y);\n };\n /**\n * Creates the element that will be rendered next to the user's pointer\n * and will be used as a preview of the element that is being dragged.\n */\n /**\n * Creates the element that will be rendered next to the user's pointer\n * and will be used as a preview of the element that is being dragged.\n * @private\n * @return {?}\n */\n DragRef.prototype._createPreviewElement = /**\n * Creates the element that will be rendered next to the user's pointer\n * and will be used as a preview of the element that is being dragged.\n * @private\n * @return {?}\n */\n function () {\n /** @type {?} */\n var previewConfig = this._previewTemplate;\n /** @type {?} */\n var previewTemplate = previewConfig ? previewConfig.template : null;\n /** @type {?} */\n var preview;\n if (previewTemplate) {\n /** @type {?} */\n var viewRef = (/** @type {?} */ (previewConfig)).viewContainer.createEmbeddedView(previewTemplate, (/** @type {?} */ (previewConfig)).context);\n preview = getRootNode(viewRef, this._document);\n this._previewRef = viewRef;\n preview.style.transform =\n getTransform(this._pickupPositionOnPage.x, this._pickupPositionOnPage.y);\n }\n else {\n /** @type {?} */\n var element = this._rootElement;\n /** @type {?} */\n var elementRect = element.getBoundingClientRect();\n preview = deepCloneNode(element);\n preview.style.width = elementRect.width + \"px\";\n preview.style.height = elementRect.height + \"px\";\n preview.style.transform = getTransform(elementRect.left, elementRect.top);\n }\n extendStyles(preview.style, {\n // It's important that we disable the pointer events on the preview, because\n // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.\n pointerEvents: 'none',\n // We have to reset the margin, because can throw off positioning relative to the viewport.\n margin: '0',\n position: 'fixed',\n top: '0',\n left: '0',\n zIndex: '1000'\n });\n toggleNativeDragInteractions(preview, false);\n preview.classList.add('cdk-drag-preview');\n preview.setAttribute('dir', this._direction);\n return preview;\n };\n /**\n * Animates the preview element from its current position to the location of the drop placeholder.\n * @returns Promise that resolves when the animation completes.\n */\n /**\n * Animates the preview element from its current position to the location of the drop placeholder.\n * @private\n * @return {?} Promise that resolves when the animation completes.\n */\n DragRef.prototype._animatePreviewToPlaceholder = /**\n * Animates the preview element from its current position to the location of the drop placeholder.\n * @private\n * @return {?} Promise that resolves when the animation completes.\n */\n function () {\n var _this = this;\n // If the user hasn't moved yet, the transitionend event won't fire.\n if (!this._hasMoved) {\n return Promise.resolve();\n }\n /** @type {?} */\n var placeholderRect = this._placeholder.getBoundingClientRect();\n // Apply the class that adds a transition to the preview.\n this._preview.classList.add('cdk-drag-animating');\n // Move the preview to the placeholder position.\n this._preview.style.transform = getTransform(placeholderRect.left, placeholderRect.top);\n // If the element doesn't have a `transition`, the `transitionend` event won't fire. Since\n // we need to trigger a style recalculation in order for the `cdk-drag-animating` class to\n // apply its style, we take advantage of the available info to figure out whether we need to\n // bind the event in the first place.\n /** @type {?} */\n var duration = getTransformTransitionDurationInMs(this._preview);\n if (duration === 0) {\n return Promise.resolve();\n }\n return this._ngZone.runOutsideAngular((/**\n * @return {?}\n */\n function () {\n return new Promise((/**\n * @param {?} resolve\n * @return {?}\n */\n function (resolve) {\n /** @type {?} */\n var handler = (/** @type {?} */ (((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n if (!event || (event.target === _this._preview && event.propertyName === 'transform')) {\n _this._preview.removeEventListener('transitionend', handler);\n resolve();\n clearTimeout(timeout);\n }\n }))));\n // If a transition is short enough, the browser might not fire the `transitionend` event.\n // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n // fire if the transition hasn't completed when it was supposed to.\n /** @type {?} */\n var timeout = setTimeout((/** @type {?} */ (handler)), duration * 1.5);\n _this._preview.addEventListener('transitionend', handler);\n }));\n }));\n };\n /** Creates an element that will be shown instead of the current element while dragging. */\n /**\n * Creates an element that will be shown instead of the current element while dragging.\n * @private\n * @return {?}\n */\n DragRef.prototype._createPlaceholderElement = /**\n * Creates an element that will be shown instead of the current element while dragging.\n * @private\n * @return {?}\n */\n function () {\n /** @type {?} */\n var placeholderConfig = this._placeholderTemplate;\n /** @type {?} */\n var placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;\n /** @type {?} */\n var placeholder;\n if (placeholderTemplate) {\n this._placeholderRef = (/** @type {?} */ (placeholderConfig)).viewContainer.createEmbeddedView(placeholderTemplate, (/** @type {?} */ (placeholderConfig)).context);\n placeholder = getRootNode(this._placeholderRef, this._document);\n }\n else {\n placeholder = deepCloneNode(this._rootElement);\n }\n placeholder.classList.add('cdk-drag-placeholder');\n return placeholder;\n };\n /**\n * Figures out the coordinates at which an element was picked up.\n * @param referenceElement Element that initiated the dragging.\n * @param event Event that initiated the dragging.\n */\n /**\n * Figures out the coordinates at which an element was picked up.\n * @private\n * @param {?} referenceElement Element that initiated the dragging.\n * @param {?} event Event that initiated the dragging.\n * @return {?}\n */\n DragRef.prototype._getPointerPositionInElement = /**\n * Figures out the coordinates at which an element was picked up.\n * @private\n * @param {?} referenceElement Element that initiated the dragging.\n * @param {?} event Event that initiated the dragging.\n * @return {?}\n */\n function (referenceElement, event) {\n /** @type {?} */\n var elementRect = this._rootElement.getBoundingClientRect();\n /** @type {?} */\n var handleElement = referenceElement === this._rootElement ? null : referenceElement;\n /** @type {?} */\n var referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;\n /** @type {?} */\n var point = isTouchEvent(event) ? event.targetTouches[0] : event;\n /** @type {?} */\n var x = point.pageX - referenceRect.left - this._scrollPosition.left;\n /** @type {?} */\n var y = point.pageY - referenceRect.top - this._scrollPosition.top;\n return {\n x: referenceRect.left - elementRect.left + x,\n y: referenceRect.top - elementRect.top + y\n };\n };\n /** Determines the point of the page that was touched by the user. */\n /**\n * Determines the point of the page that was touched by the user.\n * @private\n * @param {?} event\n * @return {?}\n */\n DragRef.prototype._getPointerPositionOnPage = /**\n * Determines the point of the page that was touched by the user.\n * @private\n * @param {?} event\n * @return {?}\n */\n function (event) {\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n /** @type {?} */\n var point = isTouchEvent(event) ? (event.touches[0] || event.changedTouches[0]) : event;\n return {\n x: point.pageX - this._scrollPosition.left,\n y: point.pageY - this._scrollPosition.top\n };\n };\n /** Gets the pointer position on the page, accounting for any position constraints. */\n /**\n * Gets the pointer position on the page, accounting for any position constraints.\n * @private\n * @param {?} event\n * @return {?}\n */\n DragRef.prototype._getConstrainedPointerPosition = /**\n * Gets the pointer position on the page, accounting for any position constraints.\n * @private\n * @param {?} event\n * @return {?}\n */\n function (event) {\n /** @type {?} */\n var point = this._getPointerPositionOnPage(event);\n /** @type {?} */\n var constrainedPoint = this.constrainPosition ? this.constrainPosition(point, this) : point;\n /** @type {?} */\n var dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;\n if (this.lockAxis === 'x' || dropContainerLock === 'x') {\n constrainedPoint.y = this._pickupPositionOnPage.y;\n }\n else if (this.lockAxis === 'y' || dropContainerLock === 'y') {\n constrainedPoint.x = this._pickupPositionOnPage.x;\n }\n if (this._boundaryRect) {\n var _a = this._pickupPositionInElement, pickupX = _a.x, pickupY = _a.y;\n /** @type {?} */\n var boundaryRect = this._boundaryRect;\n /** @type {?} */\n var previewRect = (/** @type {?} */ (this._previewRect));\n /** @type {?} */\n var minY = boundaryRect.top + pickupY;\n /** @type {?} */\n var maxY = boundaryRect.bottom - (previewRect.height - pickupY);\n /** @type {?} */\n var minX = boundaryRect.left + pickupX;\n /** @type {?} */\n var maxX = boundaryRect.right - (previewRect.width - pickupX);\n constrainedPoint.x = clamp(constrainedPoint.x, minX, maxX);\n constrainedPoint.y = clamp(constrainedPoint.y, minY, maxY);\n }\n return constrainedPoint;\n };\n /** Updates the current drag delta, based on the user's current pointer position on the page. */\n /**\n * Updates the current drag delta, based on the user's current pointer position on the page.\n * @private\n * @param {?} pointerPositionOnPage\n * @return {?}\n */\n DragRef.prototype._updatePointerDirectionDelta = /**\n * Updates the current drag delta, based on the user's current pointer position on the page.\n * @private\n * @param {?} pointerPositionOnPage\n * @return {?}\n */\n function (pointerPositionOnPage) {\n var x = pointerPositionOnPage.x, y = pointerPositionOnPage.y;\n /** @type {?} */\n var delta = this._pointerDirectionDelta;\n /** @type {?} */\n var positionSinceLastChange = this._pointerPositionAtLastDirectionChange;\n // Amount of pixels the user has dragged since the last time the direction changed.\n /** @type {?} */\n var changeX = Math.abs(x - positionSinceLastChange.x);\n /** @type {?} */\n var changeY = Math.abs(y - positionSinceLastChange.y);\n // Because we handle pointer events on a per-pixel basis, we don't want the delta\n // to change for every pixel, otherwise anything that depends on it can look erratic.\n // To make the delta more consistent, we track how much the user has moved since the last\n // delta change and we only update it after it has reached a certain threshold.\n if (changeX > this._config.pointerDirectionChangeThreshold) {\n delta.x = x > positionSinceLastChange.x ? 1 : -1;\n positionSinceLastChange.x = x;\n }\n if (changeY > this._config.pointerDirectionChangeThreshold) {\n delta.y = y > positionSinceLastChange.y ? 1 : -1;\n positionSinceLastChange.y = y;\n }\n return delta;\n };\n /** Toggles the native drag interactions, based on how many handles are registered. */\n /**\n * Toggles the native drag interactions, based on how many handles are registered.\n * @private\n * @return {?}\n */\n DragRef.prototype._toggleNativeDragInteractions = /**\n * Toggles the native drag interactions, based on how many handles are registered.\n * @private\n * @return {?}\n */\n function () {\n if (!this._rootElement || !this._handles) {\n return;\n }\n /** @type {?} */\n var shouldEnable = this._handles.length > 0 || !this.isDragging();\n if (shouldEnable !== this._nativeInteractionsEnabled) {\n this._nativeInteractionsEnabled = shouldEnable;\n toggleNativeDragInteractions(this._rootElement, shouldEnable);\n }\n };\n /** Removes the manually-added event listeners from the root element. */\n /**\n * Removes the manually-added event listeners from the root element.\n * @private\n * @param {?} element\n * @return {?}\n */\n DragRef.prototype._removeRootElementListeners = /**\n * Removes the manually-added event listeners from the root element.\n * @private\n * @param {?} element\n * @return {?}\n */\n function (element) {\n element.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n };\n /**\n * Applies a `transform` to the root element, taking into account any existing transforms on it.\n * @param x New transform value along the X axis.\n * @param y New transform value along the Y axis.\n */\n /**\n * Applies a `transform` to the root element, taking into account any existing transforms on it.\n * @private\n * @param {?} x New transform value along the X axis.\n * @param {?} y New transform value along the Y axis.\n * @return {?}\n */\n DragRef.prototype._applyRootElementTransform = /**\n * Applies a `transform` to the root element, taking into account any existing transforms on it.\n * @private\n * @param {?} x New transform value along the X axis.\n * @param {?} y New transform value along the Y axis.\n * @return {?}\n */\n function (x, y) {\n /** @type {?} */\n var transform = getTransform(x, y);\n // Cache the previous transform amount only after the first drag sequence, because\n // we don't want our own transforms to stack on top of each other.\n if (this._initialTransform == null) {\n this._initialTransform = this._rootElement.style.transform || '';\n }\n // Preserve the previous `transform` value, if there was one. Note that we apply our own\n // transform before the user's, because things like rotation can affect which direction\n // the element will be translated towards.\n this._rootElement.style.transform = this._initialTransform ?\n transform + ' ' + this._initialTransform : transform;\n };\n /**\n * Gets the distance that the user has dragged during the current drag sequence.\n * @param currentPosition Current position of the user's pointer.\n */\n /**\n * Gets the distance that the user has dragged during the current drag sequence.\n * @private\n * @param {?} currentPosition Current position of the user's pointer.\n * @return {?}\n */\n DragRef.prototype._getDragDistance = /**\n * Gets the distance that the user has dragged during the current drag sequence.\n * @private\n * @param {?} currentPosition Current position of the user's pointer.\n * @return {?}\n */\n function (currentPosition) {\n /** @type {?} */\n var pickupPosition = this._pickupPositionOnPage;\n if (pickupPosition) {\n return { x: currentPosition.x - pickupPosition.x, y: currentPosition.y - pickupPosition.y };\n }\n return { x: 0, y: 0 };\n };\n /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */\n /**\n * Cleans up any cached element dimensions that we don't need after dragging has stopped.\n * @private\n * @return {?}\n */\n DragRef.prototype._cleanupCachedDimensions = /**\n * Cleans up any cached element dimensions that we don't need after dragging has stopped.\n * @private\n * @return {?}\n */\n function () {\n this._boundaryRect = this._previewRect = undefined;\n };\n /**\n * Checks whether the element is still inside its boundary after the viewport has been resized.\n * If not, the position is adjusted so that the element fits again.\n */\n /**\n * Checks whether the element is still inside its boundary after the viewport has been resized.\n * If not, the position is adjusted so that the element fits again.\n * @private\n * @return {?}\n */\n DragRef.prototype._containInsideBoundaryOnResize = /**\n * Checks whether the element is still inside its boundary after the viewport has been resized.\n * If not, the position is adjusted so that the element fits again.\n * @private\n * @return {?}\n */\n function () {\n var _a = this._passiveTransform, x = _a.x, y = _a.y;\n if ((x === 0 && y === 0) || this.isDragging() || !this._boundaryElement) {\n return;\n }\n /** @type {?} */\n var boundaryRect = this._boundaryElement.getBoundingClientRect();\n /** @type {?} */\n var elementRect = this._rootElement.getBoundingClientRect();\n /** @type {?} */\n var leftOverflow = boundaryRect.left - elementRect.left;\n /** @type {?} */\n var rightOverflow = elementRect.right - boundaryRect.right;\n /** @type {?} */\n var topOverflow = boundaryRect.top - elementRect.top;\n /** @type {?} */\n var bottomOverflow = elementRect.bottom - boundaryRect.bottom;\n // If the element has become wider than the boundary, we can't\n // do much to make it fit so we just anchor it to the left.\n if (boundaryRect.width > elementRect.width) {\n if (leftOverflow > 0) {\n x += leftOverflow;\n }\n if (rightOverflow > 0) {\n x -= rightOverflow;\n }\n }\n else {\n x = 0;\n }\n // If the element has become taller than the boundary, we can't\n // do much to make it fit so we just anchor it to the top.\n if (boundaryRect.height > elementRect.height) {\n if (topOverflow > 0) {\n y += topOverflow;\n }\n if (bottomOverflow > 0) {\n y -= bottomOverflow;\n }\n }\n else {\n y = 0;\n }\n if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {\n this.setFreeDragPosition({ y: y, x: x });\n }\n };\n return DragRef;\n}());\n/**\n * Gets a 3d `transform` that can be applied to an element.\n * @param {?} x Desired position of the element along the X axis.\n * @param {?} y Desired position of the element along the Y axis.\n * @return {?}\n */\nfunction getTransform(x, y) {\n // Round the transforms since some browsers will\n // blur the elements for sub-pixel transforms.\n return \"translate3d(\" + Math.round(x) + \"px, \" + Math.round(y) + \"px, 0)\";\n}\n/**\n * Creates a deep clone of an element.\n * @param {?} node\n * @return {?}\n */\nfunction deepCloneNode(node) {\n /** @type {?} */\n var clone = (/** @type {?} */ (node.cloneNode(true)));\n /** @type {?} */\n var descendantsWithId = clone.querySelectorAll('[id]');\n /** @type {?} */\n var descendantCanvases = node.querySelectorAll('canvas');\n // Remove the `id` to avoid having multiple elements with the same id on the page.\n clone.removeAttribute('id');\n for (var i = 0; i < descendantsWithId.length; i++) {\n descendantsWithId[i].removeAttribute('id');\n }\n // `cloneNode` won't transfer the content of `canvas` elements so we have to do it ourselves.\n // We match up the cloned canvas to their sources using their index in the DOM.\n if (descendantCanvases.length) {\n /** @type {?} */\n var cloneCanvases = clone.querySelectorAll('canvas');\n for (var i = 0; i < descendantCanvases.length; i++) {\n /** @type {?} */\n var correspondingCloneContext = cloneCanvases[i].getContext('2d');\n if (correspondingCloneContext) {\n correspondingCloneContext.drawImage(descendantCanvases[i], 0, 0);\n }\n }\n }\n return clone;\n}\n/**\n * Clamps a value between a minimum and a maximum.\n * @param {?} value\n * @param {?} min\n * @param {?} max\n * @return {?}\n */\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * Helper to remove an element from the DOM and to do all the necessary null checks.\n * @param {?} element Element to be removed.\n * @return {?}\n */\nfunction removeElement(element) {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n}\n/**\n * Determines whether an event is a touch event.\n * @param {?} event\n * @return {?}\n */\nfunction isTouchEvent(event) {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n/**\n * Gets the element into which the drag preview should be inserted.\n * @param {?} documentRef\n * @return {?}\n */\nfunction getPreviewInsertionPoint(documentRef) {\n // We can't use the body if the user is in fullscreen mode,\n // because the preview will render under the fullscreen element.\n // TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.\n return documentRef.fullscreenElement ||\n documentRef.webkitFullscreenElement ||\n documentRef.mozFullScreenElement ||\n documentRef.msFullscreenElement ||\n documentRef.body;\n}\n/**\n * Gets the root HTML element of an embedded view.\n * If the root is not an HTML element it gets wrapped in one.\n * @param {?} viewRef\n * @param {?} _document\n * @return {?}\n */\nfunction getRootNode(viewRef, _document) {\n /** @type {?} */\n var rootNode = viewRef.rootNodes[0];\n if (rootNode.nodeType !== _document.ELEMENT_NODE) {\n /** @type {?} */\n var wrapper = _document.createElement('div');\n wrapper.appendChild(rootNode);\n return wrapper;\n }\n return (/** @type {?} */ (rootNode));\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * Moves an item one index in an array to another.\n * @template T\n * @param {?} array Array in which to move the item.\n * @param {?} fromIndex Starting index of the item.\n * @param {?} toIndex Index to which the item should be moved.\n * @return {?}\n */\nfunction moveItemInArray(array, fromIndex, toIndex) {\n /** @type {?} */\n var from = clamp$1(fromIndex, array.length - 1);\n /** @type {?} */\n var to = clamp$1(toIndex, array.length - 1);\n if (from === to) {\n return;\n }\n /** @type {?} */\n var target = array[from];\n /** @type {?} */\n var delta = to < from ? -1 : 1;\n for (var i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n array[to] = target;\n}\n/**\n * Moves an item from one array to another.\n * @template T\n * @param {?} currentArray Array from which to transfer the item.\n * @param {?} targetArray Array into which to put the item.\n * @param {?} currentIndex Index of the item in its current array.\n * @param {?} targetIndex Index at which to insert the item.\n * @return {?}\n */\nfunction transferArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n /** @type {?} */\n var from = clamp$1(currentIndex, currentArray.length - 1);\n /** @type {?} */\n var to = clamp$1(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n }\n}\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @template T\n * @param {?} currentArray Array from which to copy the item.\n * @param {?} targetArray Array into which is copy the item.\n * @param {?} currentIndex Index of the item in its current array.\n * @param {?} targetIndex Index at which to insert the item.\n *\n * @return {?}\n */\nfunction copyArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n /** @type {?} */\n var to = clamp$1(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray[currentIndex]);\n }\n}\n/**\n * Clamps a number between zero and a maximum.\n * @param {?} value\n * @param {?} max\n * @return {?}\n */\nfunction clamp$1(value, max) {\n return Math.max(0, Math.min(max, value));\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Counter used to generate unique ids for drop refs.\n * @type {?}\n */\nvar _uniqueIdCounter = 0;\n/**\n * Proximity, as a ratio to width/height, at which a\n * dragged item will affect the drop container.\n * @type {?}\n */\nvar DROP_PROXIMITY_THRESHOLD = 0.05;\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the\n * viewport. The value comes from trying it out manually until it feels right.\n * @type {?}\n */\nvar SCROLL_PROXIMITY_THRESHOLD = 0.05;\n/**\n * Number of pixels to scroll for each frame when auto-scrolling an element.\n * The value comes from trying it out manually until it feels right.\n * @type {?}\n */\nvar AUTO_SCROLL_STEP = 2;\n/**\n * Reference to a drop list. Used to manipulate or dispose of the container.\n * \\@docs-private\n * @template T\n */\nvar /**\n * Reference to a drop list. Used to manipulate or dispose of the container.\n * \\@docs-private\n * @template T\n */\nDropListRef = /** @class */ (function () {\n function DropListRef(element, _dragDropRegistry, _document, _ngZone, _viewportRuler) {\n var _this = this;\n this._dragDropRegistry = _dragDropRegistry;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n /**\n * Unique ID for the drop list.\n * @deprecated No longer being used. To be removed.\n * \\@breaking-change 8.0.0\n */\n this.id = \"cdk-drop-list-ref-\" + _uniqueIdCounter++;\n /**\n * Whether starting a dragging sequence from this container is disabled.\n */\n this.disabled = false;\n /**\n * Whether sorting items within the list is disabled.\n */\n this.sortingDisabled = false;\n /**\n * Whether auto-scrolling the view when the user\n * moves their pointer close to the edges is disabled.\n */\n this.autoScrollDisabled = false;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = (/**\n * @return {?}\n */\n function () { return true; });\n /**\n * Emits right before dragging has started.\n */\n this.beforeStarted = new Subject();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new Subject();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new Subject();\n /**\n * Emits when the user drops an item inside the container.\n */\n this.dropped = new Subject();\n /**\n * Emits as the user is swapping items while actively dragging.\n */\n this.sorted = new Subject();\n /**\n * Whether an item in the list is being dragged.\n */\n this._isDragging = false;\n /**\n * Cache of the dimensions of all the items inside the container.\n */\n this._itemPositions = [];\n /**\n * Keeps track of the container's scroll position.\n */\n this._scrollPosition = { top: 0, left: 0 };\n /**\n * Keeps track of the scroll position of the viewport.\n */\n this._viewportScrollPosition = { top: 0, left: 0 };\n /**\n * Keeps track of the item that was last swapped with the dragged item, as\n * well as what direction the pointer was moving in when the swap occured.\n */\n this._previousSwap = { drag: (/** @type {?} */ (null)), delta: 0 };\n /**\n * Drop lists that are connected to the current one.\n */\n this._siblings = [];\n /**\n * Direction in which the list is oriented.\n */\n this._orientation = 'vertical';\n /**\n * Connected siblings that currently have a dragged item.\n */\n this._activeSiblings = new Set();\n /**\n * Layout direction of the drop list.\n */\n this._direction = 'ltr';\n /**\n * Subscription to the window being scrolled.\n */\n this._viewportScrollSubscription = Subscription.EMPTY;\n /**\n * Vertical direction in which the list is currently scrolling.\n */\n this._verticalScrollDirection = 0 /* NONE */;\n /**\n * Horizontal direction in which the list is currently scrolling.\n */\n this._horizontalScrollDirection = 0 /* NONE */;\n /**\n * Used to signal to the current auto-scroll sequence when to stop.\n */\n this._stopScrollTimers = new Subject();\n /**\n * Handles the container being scrolled. Has to be an arrow function to preserve the context.\n */\n this._handleScroll = (/**\n * @return {?}\n */\n function () {\n if (!_this.isDragging()) {\n return;\n }\n /** @type {?} */\n var element = coerceElement(_this.element);\n _this._updateAfterScroll(_this._scrollPosition, element.scrollTop, element.scrollLeft);\n });\n /**\n * Starts the interval that'll auto-scroll the element.\n */\n this._startScrollInterval = (/**\n * @return {?}\n */\n function () {\n _this._stopScrolling();\n interval(0, animationFrameScheduler)\n .pipe(takeUntil(_this._stopScrollTimers))\n .subscribe((/**\n * @return {?}\n */\n function () {\n /** @type {?} */\n var node = _this._scrollNode;\n if (_this._verticalScrollDirection === 1 /* UP */) {\n incrementVerticalScroll(node, -AUTO_SCROLL_STEP);\n }\n else if (_this._verticalScrollDirection === 2 /* DOWN */) {\n incrementVerticalScroll(node, AUTO_SCROLL_STEP);\n }\n if (_this._horizontalScrollDirection === 1 /* LEFT */) {\n incrementHorizontalScroll(node, -AUTO_SCROLL_STEP);\n }\n else if (_this._horizontalScrollDirection === 2 /* RIGHT */) {\n incrementHorizontalScroll(node, AUTO_SCROLL_STEP);\n }\n }));\n });\n /** @type {?} */\n var nativeNode = this.element = coerceElement(element);\n this._shadowRoot = getShadowRoot(nativeNode) || _document;\n _dragDropRegistry.registerDropContainer(this);\n }\n /** Removes the drop list functionality from the DOM element. */\n /**\n * Removes the drop list functionality from the DOM element.\n * @return {?}\n */\n DropListRef.prototype.dispose = /**\n * Removes the drop list functionality from the DOM element.\n * @return {?}\n */\n function () {\n this._stopScrolling();\n this._stopScrollTimers.complete();\n this._removeListeners();\n this.beforeStarted.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this.sorted.complete();\n this._activeSiblings.clear();\n this._scrollNode = (/** @type {?} */ (null));\n this._dragDropRegistry.removeDropContainer(this);\n };\n /** Whether an item from this list is currently being dragged. */\n /**\n * Whether an item from this list is currently being dragged.\n * @return {?}\n */\n DropListRef.prototype.isDragging = /**\n * Whether an item from this list is currently being dragged.\n * @return {?}\n */\n function () {\n return this._isDragging;\n };\n /** Starts dragging an item. */\n /**\n * Starts dragging an item.\n * @return {?}\n */\n DropListRef.prototype.start = /**\n * Starts dragging an item.\n * @return {?}\n */\n function () {\n var _this = this;\n /** @type {?} */\n var element = coerceElement(this.element);\n this.beforeStarted.next();\n this._isDragging = true;\n this._cacheItems();\n this._siblings.forEach((/**\n * @param {?} sibling\n * @return {?}\n */\n function (sibling) { return sibling._startReceiving(_this); }));\n this._removeListeners();\n // @breaking-change 9.0.0 Remove check for _ngZone once it's marked as a required param.\n if (this._ngZone) {\n this._ngZone.runOutsideAngular((/**\n * @return {?}\n */\n function () { return element.addEventListener('scroll', _this._handleScroll); }));\n }\n else {\n element.addEventListener('scroll', this._handleScroll);\n }\n // @breaking-change 9.0.0 Remove check for _viewportRuler once it's marked as a required param.\n if (this._viewportRuler) {\n this._listenToScrollEvents();\n }\n };\n /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n */\n /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param {?} item Item that was moved into the container.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @return {?}\n */\n DropListRef.prototype.enter = /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param {?} item Item that was moved into the container.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @return {?}\n */\n function (item, pointerX, pointerY) {\n this.start();\n // If sorting is disabled, we want the item to return to its starting\n // position if the user is returning it to its initial container.\n /** @type {?} */\n var newIndex = this.sortingDisabled ? this._draggables.indexOf(item) : -1;\n if (newIndex === -1) {\n // We use the coordinates of where the item entered the drop\n // zone to figure out at which index it should be inserted.\n newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY);\n }\n /** @type {?} */\n var activeDraggables = this._activeDraggables;\n /** @type {?} */\n var currentIndex = activeDraggables.indexOf(item);\n /** @type {?} */\n var placeholder = item.getPlaceholderElement();\n /** @type {?} */\n var newPositionReference = activeDraggables[newIndex];\n // If the item at the new position is the same as the item that is being dragged,\n // it means that we're trying to restore the item to its initial position. In this\n // case we should use the next item from the list as the reference.\n if (newPositionReference === item) {\n newPositionReference = activeDraggables[newIndex + 1];\n }\n // Since the item may be in the `activeDraggables` already (e.g. if the user dragged it\n // into another container and back again), we have to ensure that it isn't duplicated.\n if (currentIndex > -1) {\n activeDraggables.splice(currentIndex, 1);\n }\n // Don't use items that are being dragged as a reference, because\n // their element has been moved down to the bottom of the body.\n if (newPositionReference && !this._dragDropRegistry.isDragging(newPositionReference)) {\n /** @type {?} */\n var element = newPositionReference.getRootElement();\n (/** @type {?} */ (element.parentElement)).insertBefore(placeholder, element);\n activeDraggables.splice(newIndex, 0, item);\n }\n else {\n coerceElement(this.element).appendChild(placeholder);\n activeDraggables.push(item);\n }\n // The transform needs to be cleared so it doesn't throw off the measurements.\n placeholder.style.transform = '';\n // Note that the positions were already cached when we called `start` above,\n // but we need to refresh them since the amount of items has changed.\n this._cacheItemPositions();\n this.entered.next({ item: item, container: this, currentIndex: this.getItemIndex(item) });\n };\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param item Item that was dragged out.\n */\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param {?} item Item that was dragged out.\n * @return {?}\n */\n DropListRef.prototype.exit = /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param {?} item Item that was dragged out.\n * @return {?}\n */\n function (item) {\n this._reset();\n this.exited.next({ item: item, container: this });\n };\n /**\n * Drops an item into this container.\n * @param item Item being dropped into the container.\n * @param currentIndex Index at which the item should be inserted.\n * @param previousContainer Container from which the item got dragged in.\n * @param isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @param distance Distance the user has dragged since the start of the dragging sequence.\n * @breaking-change 9.0.0 `distance` parameter to become required.\n */\n /**\n * Drops an item into this container.\n * \\@breaking-change 9.0.0 `distance` parameter to become required.\n * @param {?} item Item being dropped into the container.\n * @param {?} currentIndex Index at which the item should be inserted.\n * @param {?} previousContainer Container from which the item got dragged in.\n * @param {?} isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @param {?=} distance Distance the user has dragged since the start of the dragging sequence.\n * @return {?}\n */\n DropListRef.prototype.drop = /**\n * Drops an item into this container.\n * \\@breaking-change 9.0.0 `distance` parameter to become required.\n * @param {?} item Item being dropped into the container.\n * @param {?} currentIndex Index at which the item should be inserted.\n * @param {?} previousContainer Container from which the item got dragged in.\n * @param {?} isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @param {?=} distance Distance the user has dragged since the start of the dragging sequence.\n * @return {?}\n */\n function (item, currentIndex, previousContainer, isPointerOverContainer, distance) {\n if (distance === void 0) { distance = { x: 0, y: 0 }; }\n this._reset();\n this.dropped.next({\n item: item,\n currentIndex: currentIndex,\n previousIndex: previousContainer.getItemIndex(item),\n container: this,\n previousContainer: previousContainer,\n isPointerOverContainer: isPointerOverContainer,\n distance: distance\n });\n };\n /**\n * Sets the draggable items that are a part of this list.\n * @param items Items that are a part of this list.\n */\n /**\n * Sets the draggable items that are a part of this list.\n * @template THIS\n * @this {THIS}\n * @param {?} items Items that are a part of this list.\n * @return {THIS}\n */\n DropListRef.prototype.withItems = /**\n * Sets the draggable items that are a part of this list.\n * @template THIS\n * @this {THIS}\n * @param {?} items Items that are a part of this list.\n * @return {THIS}\n */\n function (items) {\n var _this = this;\n (/** @type {?} */ (this))._draggables = items;\n items.forEach((/**\n * @param {?} item\n * @return {?}\n */\n function (item) { return item._withDropContainer((/** @type {?} */ (_this))); }));\n if ((/** @type {?} */ (this)).isDragging()) {\n (/** @type {?} */ (this))._cacheItems();\n }\n return (/** @type {?} */ (this));\n };\n /** Sets the layout direction of the drop list. */\n /**\n * Sets the layout direction of the drop list.\n * @template THIS\n * @this {THIS}\n * @param {?} direction\n * @return {THIS}\n */\n DropListRef.prototype.withDirection = /**\n * Sets the layout direction of the drop list.\n * @template THIS\n * @this {THIS}\n * @param {?} direction\n * @return {THIS}\n */\n function (direction) {\n (/** @type {?} */ (this))._direction = direction;\n return (/** @type {?} */ (this));\n };\n /**\n * Sets the containers that are connected to this one. When two or more containers are\n * connected, the user will be allowed to transfer items between them.\n * @param connectedTo Other containers that the current containers should be connected to.\n */\n /**\n * Sets the containers that are connected to this one. When two or more containers are\n * connected, the user will be allowed to transfer items between them.\n * @template THIS\n * @this {THIS}\n * @param {?} connectedTo Other containers that the current containers should be connected to.\n * @return {THIS}\n */\n DropListRef.prototype.connectedTo = /**\n * Sets the containers that are connected to this one. When two or more containers are\n * connected, the user will be allowed to transfer items between them.\n * @template THIS\n * @this {THIS}\n * @param {?} connectedTo Other containers that the current containers should be connected to.\n * @return {THIS}\n */\n function (connectedTo) {\n (/** @type {?} */ (this))._siblings = connectedTo.slice();\n return (/** @type {?} */ (this));\n };\n /**\n * Sets the orientation of the container.\n * @param orientation New orientation for the container.\n */\n /**\n * Sets the orientation of the container.\n * @template THIS\n * @this {THIS}\n * @param {?} orientation New orientation for the container.\n * @return {THIS}\n */\n DropListRef.prototype.withOrientation = /**\n * Sets the orientation of the container.\n * @template THIS\n * @this {THIS}\n * @param {?} orientation New orientation for the container.\n * @return {THIS}\n */\n function (orientation) {\n (/** @type {?} */ (this))._orientation = orientation;\n return (/** @type {?} */ (this));\n };\n /**\n * Figures out the index of an item in the container.\n * @param item Item whose index should be determined.\n */\n /**\n * Figures out the index of an item in the container.\n * @param {?} item Item whose index should be determined.\n * @return {?}\n */\n DropListRef.prototype.getItemIndex = /**\n * Figures out the index of an item in the container.\n * @param {?} item Item whose index should be determined.\n * @return {?}\n */\n function (item) {\n if (!this._isDragging) {\n return this._draggables.indexOf(item);\n }\n // Items are sorted always by top/left in the cache, however they flow differently in RTL.\n // The rest of the logic still stands no matter what orientation we're in, however\n // we need to invert the array when determining the index.\n /** @type {?} */\n var items = this._orientation === 'horizontal' && this._direction === 'rtl' ?\n this._itemPositions.slice().reverse() : this._itemPositions;\n return findIndex(items, (/**\n * @param {?} currentItem\n * @return {?}\n */\n function (currentItem) { return currentItem.drag === item; }));\n };\n /**\n * Whether the list is able to receive the item that\n * is currently being dragged inside a connected drop list.\n */\n /**\n * Whether the list is able to receive the item that\n * is currently being dragged inside a connected drop list.\n * @return {?}\n */\n DropListRef.prototype.isReceiving = /**\n * Whether the list is able to receive the item that\n * is currently being dragged inside a connected drop list.\n * @return {?}\n */\n function () {\n return this._activeSiblings.size > 0;\n };\n /**\n * Sorts an item inside the container based on its position.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n /**\n * Sorts an item inside the container based on its position.\n * @param {?} item Item to be sorted.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @param {?} pointerDelta Direction in which the pointer is moving along each axis.\n * @return {?}\n */\n DropListRef.prototype._sortItem = /**\n * Sorts an item inside the container based on its position.\n * @param {?} item Item to be sorted.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @param {?} pointerDelta Direction in which the pointer is moving along each axis.\n * @return {?}\n */\n function (item, pointerX, pointerY, pointerDelta) {\n // Don't sort the item if sorting is disabled or it's out of range.\n if (this.sortingDisabled || !this._isPointerNearDropContainer(pointerX, pointerY)) {\n return;\n }\n /** @type {?} */\n var siblings = this._itemPositions;\n /** @type {?} */\n var newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY, pointerDelta);\n if (newIndex === -1 && siblings.length > 0) {\n return;\n }\n /** @type {?} */\n var isHorizontal = this._orientation === 'horizontal';\n /** @type {?} */\n var currentIndex = findIndex(siblings, (/**\n * @param {?} currentItem\n * @return {?}\n */\n function (currentItem) { return currentItem.drag === item; }));\n /** @type {?} */\n var siblingAtNewPosition = siblings[newIndex];\n /** @type {?} */\n var currentPosition = siblings[currentIndex].clientRect;\n /** @type {?} */\n var newPosition = siblingAtNewPosition.clientRect;\n /** @type {?} */\n var delta = currentIndex > newIndex ? 1 : -1;\n this._previousSwap.drag = siblingAtNewPosition.drag;\n this._previousSwap.delta = isHorizontal ? pointerDelta.x : pointerDelta.y;\n // How many pixels the item's placeholder should be offset.\n /** @type {?} */\n var itemOffset = this._getItemOffsetPx(currentPosition, newPosition, delta);\n // How many pixels all the other items should be offset.\n /** @type {?} */\n var siblingOffset = this._getSiblingOffsetPx(currentIndex, siblings, delta);\n // Save the previous order of the items before moving the item to its new index.\n // We use this to check whether an item has been moved as a result of the sorting.\n /** @type {?} */\n var oldOrder = siblings.slice();\n // Shuffle the array in place.\n moveItemInArray(siblings, currentIndex, newIndex);\n this.sorted.next({\n previousIndex: currentIndex,\n currentIndex: newIndex,\n container: this,\n item: item\n });\n siblings.forEach((/**\n * @param {?} sibling\n * @param {?} index\n * @return {?}\n */\n function (sibling, index) {\n // Don't do anything if the position hasn't changed.\n if (oldOrder[index] === sibling) {\n return;\n }\n /** @type {?} */\n var isDraggedItem = sibling.drag === item;\n /** @type {?} */\n var offset = isDraggedItem ? itemOffset : siblingOffset;\n /** @type {?} */\n var elementToOffset = isDraggedItem ? item.getPlaceholderElement() :\n sibling.drag.getRootElement();\n // Update the offset to reflect the new position.\n sibling.offset += offset;\n // Since we're moving the items with a `transform`, we need to adjust their cached\n // client rects to reflect their new position, as well as swap their positions in the cache.\n // Note that we shouldn't use `getBoundingClientRect` here to update the cache, because the\n // elements may be mid-animation which will give us a wrong result.\n if (isHorizontal) {\n // Round the transforms since some browsers will\n // blur the elements, for sub-pixel transforms.\n elementToOffset.style.transform = \"translate3d(\" + Math.round(sibling.offset) + \"px, 0, 0)\";\n adjustClientRect(sibling.clientRect, 0, offset);\n }\n else {\n elementToOffset.style.transform = \"translate3d(0, \" + Math.round(sibling.offset) + \"px, 0)\";\n adjustClientRect(sibling.clientRect, offset, 0);\n }\n }));\n };\n /**\n * Checks whether the user's pointer is close to the edges of either the\n * viewport or the drop list and starts the auto-scroll sequence.\n * @param pointerX User's pointer position along the x axis.\n * @param pointerY User's pointer position along the y axis.\n */\n /**\n * Checks whether the user's pointer is close to the edges of either the\n * viewport or the drop list and starts the auto-scroll sequence.\n * @param {?} pointerX User's pointer position along the x axis.\n * @param {?} pointerY User's pointer position along the y axis.\n * @return {?}\n */\n DropListRef.prototype._startScrollingIfNecessary = /**\n * Checks whether the user's pointer is close to the edges of either the\n * viewport or the drop list and starts the auto-scroll sequence.\n * @param {?} pointerX User's pointer position along the x axis.\n * @param {?} pointerY User's pointer position along the y axis.\n * @return {?}\n */\n function (pointerX, pointerY) {\n var _a;\n if (this.autoScrollDisabled) {\n return;\n }\n /** @type {?} */\n var scrollNode;\n /** @type {?} */\n var verticalScrollDirection = 0 /* NONE */;\n /** @type {?} */\n var horizontalScrollDirection = 0 /* NONE */;\n // Check whether we should start scrolling the container.\n if (this._isPointerNearDropContainer(pointerX, pointerY)) {\n /** @type {?} */\n var element = coerceElement(this.element);\n _a = getElementScrollDirections(element, this._clientRect, pointerX, pointerY), verticalScrollDirection = _a[0], horizontalScrollDirection = _a[1];\n if (verticalScrollDirection || horizontalScrollDirection) {\n scrollNode = element;\n }\n }\n // @breaking-change 9.0.0 Remove null check for _viewportRuler once it's a required parameter.\n // Otherwise check if we can start scrolling the viewport.\n if (this._viewportRuler && !verticalScrollDirection && !horizontalScrollDirection) {\n var _b = this._viewportRuler.getViewportSize(), width = _b.width, height = _b.height;\n /** @type {?} */\n var clientRect = { width: width, height: height, top: 0, right: width, bottom: height, left: 0 };\n verticalScrollDirection = getVerticalScrollDirection(clientRect, pointerY);\n horizontalScrollDirection = getHorizontalScrollDirection(clientRect, pointerX);\n scrollNode = window;\n }\n if (scrollNode && (verticalScrollDirection !== this._verticalScrollDirection ||\n horizontalScrollDirection !== this._horizontalScrollDirection ||\n scrollNode !== this._scrollNode)) {\n this._verticalScrollDirection = verticalScrollDirection;\n this._horizontalScrollDirection = horizontalScrollDirection;\n this._scrollNode = scrollNode;\n if ((verticalScrollDirection || horizontalScrollDirection) && scrollNode) {\n // @breaking-change 9.0.0 Remove null check for `_ngZone` once it is made required.\n if (this._ngZone) {\n this._ngZone.runOutsideAngular(this._startScrollInterval);\n }\n else {\n this._startScrollInterval();\n }\n }\n else {\n this._stopScrolling();\n }\n }\n };\n /** Stops any currently-running auto-scroll sequences. */\n /**\n * Stops any currently-running auto-scroll sequences.\n * @return {?}\n */\n DropListRef.prototype._stopScrolling = /**\n * Stops any currently-running auto-scroll sequences.\n * @return {?}\n */\n function () {\n this._stopScrollTimers.next();\n };\n /** Caches the position of the drop list. */\n /**\n * Caches the position of the drop list.\n * @private\n * @return {?}\n */\n DropListRef.prototype._cacheOwnPosition = /**\n * Caches the position of the drop list.\n * @private\n * @return {?}\n */\n function () {\n /** @type {?} */\n var element = coerceElement(this.element);\n this._clientRect = getMutableClientRect(element);\n this._scrollPosition = { top: element.scrollTop, left: element.scrollLeft };\n };\n /** Refreshes the position cache of the items and sibling containers. */\n /**\n * Refreshes the position cache of the items and sibling containers.\n * @private\n * @return {?}\n */\n DropListRef.prototype._cacheItemPositions = /**\n * Refreshes the position cache of the items and sibling containers.\n * @private\n * @return {?}\n */\n function () {\n var _this = this;\n /** @type {?} */\n var isHorizontal = this._orientation === 'horizontal';\n this._itemPositions = this._activeDraggables.map((/**\n * @param {?} drag\n * @return {?}\n */\n function (drag) {\n /** @type {?} */\n var elementToMeasure = _this._dragDropRegistry.isDragging(drag) ?\n // If the element is being dragged, we have to measure the\n // placeholder, because the element is hidden.\n drag.getPlaceholderElement() :\n drag.getRootElement();\n return { drag: drag, offset: 0, clientRect: getMutableClientRect(elementToMeasure) };\n })).sort((/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\n function (a, b) {\n return isHorizontal ? a.clientRect.left - b.clientRect.left :\n a.clientRect.top - b.clientRect.top;\n }));\n };\n /** Resets the container to its initial state. */\n /**\n * Resets the container to its initial state.\n * @private\n * @return {?}\n */\n DropListRef.prototype._reset = /**\n * Resets the container to its initial state.\n * @private\n * @return {?}\n */\n function () {\n var _this = this;\n this._isDragging = false;\n // TODO(crisbeto): may have to wait for the animations to finish.\n this._activeDraggables.forEach((/**\n * @param {?} item\n * @return {?}\n */\n function (item) { return item.getRootElement().style.transform = ''; }));\n this._siblings.forEach((/**\n * @param {?} sibling\n * @return {?}\n */\n function (sibling) { return sibling._stopReceiving(_this); }));\n this._activeDraggables = [];\n this._itemPositions = [];\n this._previousSwap.drag = null;\n this._previousSwap.delta = 0;\n this._stopScrolling();\n this._removeListeners();\n };\n /**\n * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n * @param currentIndex Index of the item currently being dragged.\n * @param siblings All of the items in the list.\n * @param delta Direction in which the user is moving.\n */\n /**\n * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n * @private\n * @param {?} currentIndex Index of the item currently being dragged.\n * @param {?} siblings All of the items in the list.\n * @param {?} delta Direction in which the user is moving.\n * @return {?}\n */\n DropListRef.prototype._getSiblingOffsetPx = /**\n * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n * @private\n * @param {?} currentIndex Index of the item currently being dragged.\n * @param {?} siblings All of the items in the list.\n * @param {?} delta Direction in which the user is moving.\n * @return {?}\n */\n function (currentIndex, siblings, delta) {\n /** @type {?} */\n var isHorizontal = this._orientation === 'horizontal';\n /** @type {?} */\n var currentPosition = siblings[currentIndex].clientRect;\n /** @type {?} */\n var immediateSibling = siblings[currentIndex + delta * -1];\n /** @type {?} */\n var siblingOffset = currentPosition[isHorizontal ? 'width' : 'height'] * delta;\n if (immediateSibling) {\n /** @type {?} */\n var start = isHorizontal ? 'left' : 'top';\n /** @type {?} */\n var end = isHorizontal ? 'right' : 'bottom';\n // Get the spacing between the start of the current item and the end of the one immediately\n // after it in the direction in which the user is dragging, or vice versa. We add it to the\n // offset in order to push the element to where it will be when it's inline and is influenced\n // by the `margin` of its siblings.\n if (delta === -1) {\n siblingOffset -= immediateSibling.clientRect[start] - currentPosition[end];\n }\n else {\n siblingOffset += currentPosition[start] - immediateSibling.clientRect[end];\n }\n }\n return siblingOffset;\n };\n /**\n * Checks whether the pointer coordinates are close to the drop container.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\n /**\n * Checks whether the pointer coordinates are close to the drop container.\n * @private\n * @param {?} pointerX Coordinates along the X axis.\n * @param {?} pointerY Coordinates along the Y axis.\n * @return {?}\n */\n DropListRef.prototype._isPointerNearDropContainer = /**\n * Checks whether the pointer coordinates are close to the drop container.\n * @private\n * @param {?} pointerX Coordinates along the X axis.\n * @param {?} pointerY Coordinates along the Y axis.\n * @return {?}\n */\n function (pointerX, pointerY) {\n var _a = this._clientRect, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n /** @type {?} */\n var xThreshold = width * DROP_PROXIMITY_THRESHOLD;\n /** @type {?} */\n var yThreshold = height * DROP_PROXIMITY_THRESHOLD;\n return pointerY > top - yThreshold && pointerY < bottom + yThreshold &&\n pointerX > left - xThreshold && pointerX < right + xThreshold;\n };\n /**\n * Gets the offset in pixels by which the item that is being dragged should be moved.\n * @param currentPosition Current position of the item.\n * @param newPosition Position of the item where the current item should be moved.\n * @param delta Direction in which the user is moving.\n */\n /**\n * Gets the offset in pixels by which the item that is being dragged should be moved.\n * @private\n * @param {?} currentPosition Current position of the item.\n * @param {?} newPosition Position of the item where the current item should be moved.\n * @param {?} delta Direction in which the user is moving.\n * @return {?}\n */\n DropListRef.prototype._getItemOffsetPx = /**\n * Gets the offset in pixels by which the item that is being dragged should be moved.\n * @private\n * @param {?} currentPosition Current position of the item.\n * @param {?} newPosition Position of the item where the current item should be moved.\n * @param {?} delta Direction in which the user is moving.\n * @return {?}\n */\n function (currentPosition, newPosition, delta) {\n /** @type {?} */\n var isHorizontal = this._orientation === 'horizontal';\n /** @type {?} */\n var itemOffset = isHorizontal ? newPosition.left - currentPosition.left :\n newPosition.top - currentPosition.top;\n // Account for differences in the item width/height.\n if (delta === -1) {\n itemOffset += isHorizontal ? newPosition.width - currentPosition.width :\n newPosition.height - currentPosition.height;\n }\n return itemOffset;\n };\n /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @param item Item that is being sorted.\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n * @param delta Direction in which the user is moving their pointer.\n */\n /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @private\n * @param {?} item Item that is being sorted.\n * @param {?} pointerX Position of the user's pointer along the X axis.\n * @param {?} pointerY Position of the user's pointer along the Y axis.\n * @param {?=} delta Direction in which the user is moving their pointer.\n * @return {?}\n */\n DropListRef.prototype._getItemIndexFromPointerPosition = /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @private\n * @param {?} item Item that is being sorted.\n * @param {?} pointerX Position of the user's pointer along the X axis.\n * @param {?} pointerY Position of the user's pointer along the Y axis.\n * @param {?=} delta Direction in which the user is moving their pointer.\n * @return {?}\n */\n function (item, pointerX, pointerY, delta) {\n var _this = this;\n /** @type {?} */\n var isHorizontal = this._orientation === 'horizontal';\n return findIndex(this._itemPositions, (/**\n * @param {?} __0\n * @param {?} _\n * @param {?} array\n * @return {?}\n */\n function (_a, _, array) {\n var drag = _a.drag, clientRect = _a.clientRect;\n if (drag === item) {\n // If there's only one item left in the container, it must be\n // the dragged item itself so we use it as a reference.\n return array.length < 2;\n }\n if (delta) {\n /** @type {?} */\n var direction = isHorizontal ? delta.x : delta.y;\n // If the user is still hovering over the same item as last time, and they didn't change\n // the direction in which they're dragging, we don't consider it a direction swap.\n if (drag === _this._previousSwap.drag && direction === _this._previousSwap.delta) {\n return false;\n }\n }\n return isHorizontal ?\n // Round these down since most browsers report client rects with\n // sub-pixel precision, whereas the pointer coordinates are rounded to pixels.\n pointerX >= Math.floor(clientRect.left) && pointerX <= Math.floor(clientRect.right) :\n pointerY >= Math.floor(clientRect.top) && pointerY <= Math.floor(clientRect.bottom);\n }));\n };\n /** Caches the current items in the list and their positions. */\n /**\n * Caches the current items in the list and their positions.\n * @private\n * @return {?}\n */\n DropListRef.prototype._cacheItems = /**\n * Caches the current items in the list and their positions.\n * @private\n * @return {?}\n */\n function () {\n this._activeDraggables = this._draggables.slice();\n this._cacheItemPositions();\n this._cacheOwnPosition();\n };\n /**\n * Updates the internal state of the container after a scroll event has happened.\n * @param scrollPosition Object that is keeping track of the scroll position.\n * @param newTop New top scroll position.\n * @param newLeft New left scroll position.\n * @param extraClientRect Extra `ClientRect` object that should be updated, in addition to the\n * ones of the drag items. Useful when the viewport has been scrolled and we also need to update\n * the `ClientRect` of the list.\n */\n /**\n * Updates the internal state of the container after a scroll event has happened.\n * @private\n * @param {?} scrollPosition Object that is keeping track of the scroll position.\n * @param {?} newTop New top scroll position.\n * @param {?} newLeft New left scroll position.\n * @param {?=} extraClientRect Extra `ClientRect` object that should be updated, in addition to the\n * ones of the drag items. Useful when the viewport has been scrolled and we also need to update\n * the `ClientRect` of the list.\n * @return {?}\n */\n DropListRef.prototype._updateAfterScroll = /**\n * Updates the internal state of the container after a scroll event has happened.\n * @private\n * @param {?} scrollPosition Object that is keeping track of the scroll position.\n * @param {?} newTop New top scroll position.\n * @param {?} newLeft New left scroll position.\n * @param {?=} extraClientRect Extra `ClientRect` object that should be updated, in addition to the\n * ones of the drag items. Useful when the viewport has been scrolled and we also need to update\n * the `ClientRect` of the list.\n * @return {?}\n */\n function (scrollPosition, newTop, newLeft, extraClientRect) {\n var _this = this;\n /** @type {?} */\n var topDifference = scrollPosition.top - newTop;\n /** @type {?} */\n var leftDifference = scrollPosition.left - newLeft;\n if (extraClientRect) {\n adjustClientRect(extraClientRect, topDifference, leftDifference);\n }\n // Since we know the amount that the user has scrolled we can shift all of the client rectangles\n // ourselves. This is cheaper than re-measuring everything and we can avoid inconsistent\n // behavior where we might be measuring the element before its position has changed.\n this._itemPositions.forEach((/**\n * @param {?} __0\n * @return {?}\n */\n function (_a) {\n var clientRect = _a.clientRect;\n adjustClientRect(clientRect, topDifference, leftDifference);\n }));\n // We need two loops for this, because we want all of the cached\n // positions to be up-to-date before we re-sort the item.\n this._itemPositions.forEach((/**\n * @param {?} __0\n * @return {?}\n */\n function (_a) {\n var drag = _a.drag;\n if (_this._dragDropRegistry.isDragging(drag)) {\n // We need to re-sort the item manually, because the pointer move\n // events won't be dispatched while the user is scrolling.\n drag._sortFromLastPointerPosition();\n }\n }));\n scrollPosition.top = newTop;\n scrollPosition.left = newLeft;\n };\n /** Removes the event listeners associated with this drop list. */\n /**\n * Removes the event listeners associated with this drop list.\n * @private\n * @return {?}\n */\n DropListRef.prototype._removeListeners = /**\n * Removes the event listeners associated with this drop list.\n * @private\n * @return {?}\n */\n function () {\n coerceElement(this.element).removeEventListener('scroll', this._handleScroll);\n this._viewportScrollSubscription.unsubscribe();\n };\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param x Pointer position along the X axis.\n * @param y Pointer position along the Y axis.\n */\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param {?} x Pointer position along the X axis.\n * @param {?} y Pointer position along the Y axis.\n * @return {?}\n */\n DropListRef.prototype._isOverContainer = /**\n * Checks whether the user's pointer is positioned over the container.\n * @param {?} x Pointer position along the X axis.\n * @param {?} y Pointer position along the Y axis.\n * @return {?}\n */\n function (x, y) {\n return isInsideClientRect(this._clientRect, x, y);\n };\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param item Drag item that is being moved.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param {?} item Drag item that is being moved.\n * @param {?} x Position of the item along the X axis.\n * @param {?} y Position of the item along the Y axis.\n * @return {?}\n */\n DropListRef.prototype._getSiblingContainerFromPosition = /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param {?} item Drag item that is being moved.\n * @param {?} x Position of the item along the X axis.\n * @param {?} y Position of the item along the Y axis.\n * @return {?}\n */\n function (item, x, y) {\n return this._siblings.find((/**\n * @param {?} sibling\n * @return {?}\n */\n function (sibling) { return sibling._canReceive(item, x, y); }));\n };\n /**\n * Checks whether the drop list can receive the passed-in item.\n * @param item Item that is being dragged into the list.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n /**\n * Checks whether the drop list can receive the passed-in item.\n * @param {?} item Item that is being dragged into the list.\n * @param {?} x Position of the item along the X axis.\n * @param {?} y Position of the item along the Y axis.\n * @return {?}\n */\n DropListRef.prototype._canReceive = /**\n * Checks whether the drop list can receive the passed-in item.\n * @param {?} item Item that is being dragged into the list.\n * @param {?} x Position of the item along the X axis.\n * @param {?} y Position of the item along the Y axis.\n * @return {?}\n */\n function (item, x, y) {\n if (!this.enterPredicate(item, this) || !isInsideClientRect(this._clientRect, x, y)) {\n return false;\n }\n /** @type {?} */\n var elementFromPoint = (/** @type {?} */ (this._shadowRoot.elementFromPoint(x, y)));\n // If there's no element at the pointer position, then\n // the client rect is probably scrolled out of the view.\n if (!elementFromPoint) {\n return false;\n }\n /** @type {?} */\n var nativeElement = coerceElement(this.element);\n // The `ClientRect`, that we're using to find the container over which the user is\n // hovering, doesn't give us any information on whether the element has been scrolled\n // out of the view or whether it's overlapping with other containers. This means that\n // we could end up transferring the item into a container that's invisible or is positioned\n // below another one. We use the result from `elementFromPoint` to get the top-most element\n // at the pointer position and to find whether it's one of the intersecting drop containers.\n return elementFromPoint === nativeElement || nativeElement.contains(elementFromPoint);\n };\n /**\n * Called by one of the connected drop lists when a dragging sequence has started.\n * @param sibling Sibling in which dragging has started.\n */\n /**\n * Called by one of the connected drop lists when a dragging sequence has started.\n * @param {?} sibling Sibling in which dragging has started.\n * @return {?}\n */\n DropListRef.prototype._startReceiving = /**\n * Called by one of the connected drop lists when a dragging sequence has started.\n * @param {?} sibling Sibling in which dragging has started.\n * @return {?}\n */\n function (sibling) {\n /** @type {?} */\n var activeSiblings = this._activeSiblings;\n if (!activeSiblings.has(sibling)) {\n activeSiblings.add(sibling);\n this._cacheOwnPosition();\n this._listenToScrollEvents();\n }\n };\n /**\n * Called by a connected drop list when dragging has stopped.\n * @param sibling Sibling whose dragging has stopped.\n */\n /**\n * Called by a connected drop list when dragging has stopped.\n * @param {?} sibling Sibling whose dragging has stopped.\n * @return {?}\n */\n DropListRef.prototype._stopReceiving = /**\n * Called by a connected drop list when dragging has stopped.\n * @param {?} sibling Sibling whose dragging has stopped.\n * @return {?}\n */\n function (sibling) {\n this._activeSiblings.delete(sibling);\n this._viewportScrollSubscription.unsubscribe();\n };\n /**\n * Starts listening to scroll events on the viewport.\n * Used for updating the internal state of the list.\n */\n /**\n * Starts listening to scroll events on the viewport.\n * Used for updating the internal state of the list.\n * @private\n * @return {?}\n */\n DropListRef.prototype._listenToScrollEvents = /**\n * Starts listening to scroll events on the viewport.\n * Used for updating the internal state of the list.\n * @private\n * @return {?}\n */\n function () {\n var _this = this;\n this._viewportScrollPosition = (/** @type {?} */ (this._viewportRuler)).getViewportScrollPosition();\n this._viewportScrollSubscription = this._dragDropRegistry.scroll.subscribe((/**\n * @return {?}\n */\n function () {\n if (_this.isDragging()) {\n /** @type {?} */\n var newPosition = (/** @type {?} */ (_this._viewportRuler)).getViewportScrollPosition();\n _this._updateAfterScroll(_this._viewportScrollPosition, newPosition.top, newPosition.left, _this._clientRect);\n }\n else if (_this.isReceiving()) {\n _this._cacheOwnPosition();\n }\n }));\n };\n return DropListRef;\n}());\n/**\n * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.\n * @param {?} clientRect `ClientRect` that should be updated.\n * @param {?} top Amount to add to the `top` position.\n * @param {?} left Amount to add to the `left` position.\n * @return {?}\n */\nfunction adjustClientRect(clientRect, top, left) {\n clientRect.top += top;\n clientRect.bottom = clientRect.top + clientRect.height;\n clientRect.left += left;\n clientRect.right = clientRect.left + clientRect.width;\n}\n/**\n * Finds the index of an item that matches a predicate function. Used as an equivalent\n * of `Array.prototype.findIndex` which isn't part of the standard Google typings.\n * @template T\n * @param {?} array Array in which to look for matches.\n * @param {?} predicate Function used to determine whether an item is a match.\n * @return {?}\n */\nfunction findIndex(array, predicate) {\n for (var i = 0; i < array.length; i++) {\n if (predicate(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Checks whether some coordinates are within a `ClientRect`.\n * @param {?} clientRect ClientRect that is being checked.\n * @param {?} x Coordinates along the X axis.\n * @param {?} y Coordinates along the Y axis.\n * @return {?}\n */\nfunction isInsideClientRect(clientRect, x, y) {\n var top = clientRect.top, bottom = clientRect.bottom, left = clientRect.left, right = clientRect.right;\n return y >= top && y <= bottom && x >= left && x <= right;\n}\n/**\n * Gets a mutable version of an element's bounding `ClientRect`.\n * @param {?} element\n * @return {?}\n */\nfunction getMutableClientRect(element) {\n /** @type {?} */\n var clientRect = element.getBoundingClientRect();\n // We need to clone the `clientRect` here, because all the values on it are readonly\n // and we need to be able to update them. Also we can't use a spread here, because\n // the values on a `ClientRect` aren't own properties. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n return {\n top: clientRect.top,\n right: clientRect.right,\n bottom: clientRect.bottom,\n left: clientRect.left,\n width: clientRect.width,\n height: clientRect.height\n };\n}\n/**\n * Increments the vertical scroll position of a node.\n * @param {?} node Node whose scroll position should change.\n * @param {?} amount Amount of pixels that the `node` should be scrolled.\n * @return {?}\n */\nfunction incrementVerticalScroll(node, amount) {\n if (node === window) {\n ((/** @type {?} */ (node))).scrollBy(0, amount);\n }\n else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n ((/** @type {?} */ (node))).scrollTop += amount;\n }\n}\n/**\n * Increments the horizontal scroll position of a node.\n * @param {?} node Node whose scroll position should change.\n * @param {?} amount Amount of pixels that the `node` should be scrolled.\n * @return {?}\n */\nfunction incrementHorizontalScroll(node, amount) {\n if (node === window) {\n ((/** @type {?} */ (node))).scrollBy(amount, 0);\n }\n else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n ((/** @type {?} */ (node))).scrollLeft += amount;\n }\n}\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param {?} clientRect Dimensions of the node.\n * @param {?} pointerY Position of the user's pointer along the y axis.\n * @return {?}\n */\nfunction getVerticalScrollDirection(clientRect, pointerY) {\n var top = clientRect.top, bottom = clientRect.bottom, height = clientRect.height;\n /** @type {?} */\n var yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n return 1 /* UP */;\n }\n else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n return 2 /* DOWN */;\n }\n return 0 /* NONE */;\n}\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param {?} clientRect Dimensions of the node.\n * @param {?} pointerX Position of the user's pointer along the x axis.\n * @return {?}\n */\nfunction getHorizontalScrollDirection(clientRect, pointerX) {\n var left = clientRect.left, right = clientRect.right, width = clientRect.width;\n /** @type {?} */\n var xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n return 1 /* LEFT */;\n }\n else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n return 2 /* RIGHT */;\n }\n return 0 /* NONE */;\n}\n/**\n * Gets the directions in which an element node should be scrolled,\n * assuming that the user's pointer is already within it scrollable region.\n * @param {?} element Element for which we should calculate the scroll direction.\n * @param {?} clientRect Bounding client rectangle of the element.\n * @param {?} pointerX Position of the user's pointer along the x axis.\n * @param {?} pointerY Position of the user's pointer along the y axis.\n * @return {?}\n */\nfunction getElementScrollDirections(element, clientRect, pointerX, pointerY) {\n /** @type {?} */\n var computedVertical = getVerticalScrollDirection(clientRect, pointerY);\n /** @type {?} */\n var computedHorizontal = getHorizontalScrollDirection(clientRect, pointerX);\n /** @type {?} */\n var verticalScrollDirection = 0 /* NONE */;\n /** @type {?} */\n var horizontalScrollDirection = 0 /* NONE */;\n // Note that we here we do some extra checks for whether the element is actually scrollable in\n // a certain direction and we only assign the scroll direction if it is. We do this so that we\n // can allow other elements to be scrolled, if the current element can't be scrolled anymore.\n // This allows us to handle cases where the scroll regions of two scrollable elements overlap.\n if (computedVertical) {\n /** @type {?} */\n var scrollTop = element.scrollTop;\n if (computedVertical === 1 /* UP */) {\n if (scrollTop > 0) {\n verticalScrollDirection = 1 /* UP */;\n }\n }\n else if (element.scrollHeight - scrollTop > element.clientHeight) {\n verticalScrollDirection = 2 /* DOWN */;\n }\n }\n if (computedHorizontal) {\n /** @type {?} */\n var scrollLeft = element.scrollLeft;\n if (computedHorizontal === 1 /* LEFT */) {\n if (scrollLeft > 0) {\n horizontalScrollDirection = 1 /* LEFT */;\n }\n }\n else if (element.scrollWidth - scrollLeft > element.clientWidth) {\n horizontalScrollDirection = 2 /* RIGHT */;\n }\n }\n return [verticalScrollDirection, horizontalScrollDirection];\n}\n/**\n * Gets the shadow root of an element, if any.\n * @param {?} element\n * @return {?}\n */\nfunction getShadowRoot(element) {\n if (_supportsShadowDom()) {\n /** @type {?} */\n var rootNode = element.getRootNode ? element.getRootNode() : null;\n if (rootNode instanceof ShadowRoot) {\n return rootNode;\n }\n }\n return null;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Event options that can be used to bind an active, capturing event.\n * @type {?}\n */\nvar activeCapturingEventOptions = normalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n/**\n * Service that keeps track of all the drag item and drop container\n * instances, and manages global event listeners on the `document`.\n * \\@docs-private\n * @template I, C\n */\n// Note: this class is generic, rather than referencing CdkDrag and CdkDropList directly, in order\n// to avoid circular imports. If we were to reference them here, importing the registry into the\n// classes that are registering themselves will introduce a circular import.\nvar DragDropRegistry = /** @class */ (function () {\n function DragDropRegistry(_ngZone, _document) {\n var _this = this;\n this._ngZone = _ngZone;\n /**\n * Registered drop container instances.\n */\n this._dropInstances = new Set();\n /**\n * Registered drag item instances.\n */\n this._dragInstances = new Set();\n /**\n * Drag item instances that are currently being dragged.\n */\n this._activeDragInstances = new Set();\n /**\n * Keeps track of the event listeners that we've bound to the `document`.\n */\n this._globalListeners = new Map();\n /**\n * Emits the `touchmove` or `mousemove` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerMove = new Subject();\n /**\n * Emits the `touchend` or `mouseup` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerUp = new Subject();\n /**\n * Emits when the viewport has been scrolled while the user is dragging an item.\n */\n this.scroll = new Subject();\n /**\n * Event listener that will prevent the default browser action while the user is dragging.\n * @param event Event whose default action should be prevented.\n */\n this._preventDefaultWhileDragging = (/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n if (_this._activeDragInstances.size) {\n event.preventDefault();\n }\n });\n this._document = _document;\n }\n /** Adds a drop container to the registry. */\n /**\n * Adds a drop container to the registry.\n * @param {?} drop\n * @return {?}\n */\n DragDropRegistry.prototype.registerDropContainer = /**\n * Adds a drop container to the registry.\n * @param {?} drop\n * @return {?}\n */\n function (drop) {\n if (!this._dropInstances.has(drop)) {\n if (this.getDropContainer(drop.id)) {\n throw Error(\"Drop instance with id \\\"\" + drop.id + \"\\\" has already been registered.\");\n }\n this._dropInstances.add(drop);\n }\n };\n /** Adds a drag item instance to the registry. */\n /**\n * Adds a drag item instance to the registry.\n * @param {?} drag\n * @return {?}\n */\n DragDropRegistry.prototype.registerDragItem = /**\n * Adds a drag item instance to the registry.\n * @param {?} drag\n * @return {?}\n */\n function (drag) {\n var _this = this;\n this._dragInstances.add(drag);\n // The `touchmove` event gets bound once, ahead of time, because WebKit\n // won't preventDefault on a dynamically-added `touchmove` listener.\n // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n if (this._dragInstances.size === 1) {\n this._ngZone.runOutsideAngular((/**\n * @return {?}\n */\n function () {\n // The event handler has to be explicitly active,\n // because newer browsers make it passive by default.\n _this._document.addEventListener('touchmove', _this._preventDefaultWhileDragging, activeCapturingEventOptions);\n }));\n }\n };\n /** Removes a drop container from the registry. */\n /**\n * Removes a drop container from the registry.\n * @param {?} drop\n * @return {?}\n */\n DragDropRegistry.prototype.removeDropContainer = /**\n * Removes a drop container from the registry.\n * @param {?} drop\n * @return {?}\n */\n function (drop) {\n this._dropInstances.delete(drop);\n };\n /** Removes a drag item instance from the registry. */\n /**\n * Removes a drag item instance from the registry.\n * @param {?} drag\n * @return {?}\n */\n DragDropRegistry.prototype.removeDragItem = /**\n * Removes a drag item instance from the registry.\n * @param {?} drag\n * @return {?}\n */\n function (drag) {\n this._dragInstances.delete(drag);\n this.stopDragging(drag);\n if (this._dragInstances.size === 0) {\n this._document.removeEventListener('touchmove', this._preventDefaultWhileDragging, activeCapturingEventOptions);\n }\n };\n /**\n * Starts the dragging sequence for a drag instance.\n * @param drag Drag instance which is being dragged.\n * @param event Event that initiated the dragging.\n */\n /**\n * Starts the dragging sequence for a drag instance.\n * @param {?} drag Drag instance which is being dragged.\n * @param {?} event Event that initiated the dragging.\n * @return {?}\n */\n DragDropRegistry.prototype.startDragging = /**\n * Starts the dragging sequence for a drag instance.\n * @param {?} drag Drag instance which is being dragged.\n * @param {?} event Event that initiated the dragging.\n * @return {?}\n */\n function (drag, event) {\n var _this = this;\n // Do not process the same drag twice to avoid memory leaks and redundant listeners\n if (this._activeDragInstances.has(drag)) {\n return;\n }\n this._activeDragInstances.add(drag);\n if (this._activeDragInstances.size === 1) {\n /** @type {?} */\n var isTouchEvent = event.type.startsWith('touch');\n /** @type {?} */\n var moveEvent = isTouchEvent ? 'touchmove' : 'mousemove';\n /** @type {?} */\n var upEvent = isTouchEvent ? 'touchend' : 'mouseup';\n // We explicitly bind __active__ listeners here, because newer browsers will default to\n // passive ones for `mousemove` and `touchmove`. The events need to be active, because we\n // use `preventDefault` to prevent the page from scrolling while the user is dragging.\n this._globalListeners\n .set(moveEvent, {\n handler: (/**\n * @param {?} e\n * @return {?}\n */\n function (e) { return _this.pointerMove.next((/** @type {?} */ (e))); }),\n options: activeCapturingEventOptions\n })\n .set(upEvent, {\n handler: (/**\n * @param {?} e\n * @return {?}\n */\n function (e) { return _this.pointerUp.next((/** @type {?} */ (e))); }),\n options: true\n })\n .set('scroll', {\n handler: (/**\n * @param {?} e\n * @return {?}\n */\n function (e) { return _this.scroll.next(e); }),\n // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't\n // the document. See https://github.com/angular/components/issues/17144.\n options: true\n })\n // Preventing the default action on `mousemove` isn't enough to disable text selection\n // on Safari so we need to prevent the selection event as well. Alternatively this can\n // be done by setting `user-select: none` on the `body`, however it has causes a style\n // recalculation which can be expensive on pages with a lot of elements.\n .set('selectstart', {\n handler: this._preventDefaultWhileDragging,\n options: activeCapturingEventOptions\n });\n this._ngZone.runOutsideAngular((/**\n * @return {?}\n */\n function () {\n _this._globalListeners.forEach((/**\n * @param {?} config\n * @param {?} name\n * @return {?}\n */\n function (config, name) {\n _this._document.addEventListener(name, config.handler, config.options);\n }));\n }));\n }\n };\n /** Stops dragging a drag item instance. */\n /**\n * Stops dragging a drag item instance.\n * @param {?} drag\n * @return {?}\n */\n DragDropRegistry.prototype.stopDragging = /**\n * Stops dragging a drag item instance.\n * @param {?} drag\n * @return {?}\n */\n function (drag) {\n this._activeDragInstances.delete(drag);\n if (this._activeDragInstances.size === 0) {\n this._clearGlobalListeners();\n }\n };\n /** Gets whether a drag item instance is currently being dragged. */\n /**\n * Gets whether a drag item instance is currently being dragged.\n * @param {?} drag\n * @return {?}\n */\n DragDropRegistry.prototype.isDragging = /**\n * Gets whether a drag item instance is currently being dragged.\n * @param {?} drag\n * @return {?}\n */\n function (drag) {\n return this._activeDragInstances.has(drag);\n };\n /**\n * Gets a drop container by its id.\n * @deprecated No longer being used. To be removed.\n * @breaking-change 8.0.0\n */\n /**\n * Gets a drop container by its id.\n * @deprecated No longer being used. To be removed.\n * \\@breaking-change 8.0.0\n * @param {?} id\n * @return {?}\n */\n DragDropRegistry.prototype.getDropContainer = /**\n * Gets a drop container by its id.\n * @deprecated No longer being used. To be removed.\n * \\@breaking-change 8.0.0\n * @param {?} id\n * @return {?}\n */\n function (id) {\n return Array.from(this._dropInstances).find((/**\n * @param {?} instance\n * @return {?}\n */\n function (instance) { return instance.id === id; }));\n };\n /**\n * @return {?}\n */\n DragDropRegistry.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n var _this = this;\n this._dragInstances.forEach((/**\n * @param {?} instance\n * @return {?}\n */\n function (instance) { return _this.removeDragItem(instance); }));\n this._dropInstances.forEach((/**\n * @param {?} instance\n * @return {?}\n */\n function (instance) { return _this.removeDropContainer(instance); }));\n this._clearGlobalListeners();\n this.pointerMove.complete();\n this.pointerUp.complete();\n };\n /** Clears out the global event listeners from the `document`. */\n /**\n * Clears out the global event listeners from the `document`.\n * @private\n * @return {?}\n */\n DragDropRegistry.prototype._clearGlobalListeners = /**\n * Clears out the global event listeners from the `document`.\n * @private\n * @return {?}\n */\n function () {\n var _this = this;\n this._globalListeners.forEach((/**\n * @param {?} config\n * @param {?} name\n * @return {?}\n */\n function (config, name) {\n _this._document.removeEventListener(name, config.handler, config.options);\n }));\n this._globalListeners.clear();\n };\n DragDropRegistry.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n DragDropRegistry.ctorParameters = function () { return [\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n ]; };\n /** @nocollapse */ DragDropRegistry.ngInjectableDef = ɵɵdefineInjectable({ factory: function DragDropRegistry_Factory() { return new DragDropRegistry(ɵɵinject(NgZone), ɵɵinject(DOCUMENT)); }, token: DragDropRegistry, providedIn: \"root\" });\n return DragDropRegistry;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Default configuration to be used when creating a `DragRef`.\n * @type {?}\n */\nvar DEFAULT_CONFIG = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 5\n};\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\nvar DragDrop = /** @class */ (function () {\n function DragDrop(_document, _ngZone, _viewportRuler, _dragDropRegistry) {\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n }\n /**\n * Turns an element into a draggable item.\n * @param element Element to which to attach the dragging functionality.\n * @param config Object used to configure the dragging behavior.\n */\n /**\n * Turns an element into a draggable item.\n * @template T\n * @param {?} element Element to which to attach the dragging functionality.\n * @param {?=} config Object used to configure the dragging behavior.\n * @return {?}\n */\n DragDrop.prototype.createDrag = /**\n * Turns an element into a draggable item.\n * @template T\n * @param {?} element Element to which to attach the dragging functionality.\n * @param {?=} config Object used to configure the dragging behavior.\n * @return {?}\n */\n function (element, config) {\n if (config === void 0) { config = DEFAULT_CONFIG; }\n return new DragRef(element, config, this._document, this._ngZone, this._viewportRuler, this._dragDropRegistry);\n };\n /**\n * Turns an element into a drop list.\n * @param element Element to which to attach the drop list functionality.\n */\n /**\n * Turns an element into a drop list.\n * @template T\n * @param {?} element Element to which to attach the drop list functionality.\n * @return {?}\n */\n DragDrop.prototype.createDropList = /**\n * Turns an element into a drop list.\n * @template T\n * @param {?} element Element to which to attach the drop list functionality.\n * @return {?}\n */\n function (element) {\n return new DropListRef(element, this._dragDropRegistry, this._document, this._ngZone, this._viewportRuler);\n };\n DragDrop.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] },\n ];\n /** @nocollapse */\n DragDrop.ctorParameters = function () { return [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: NgZone },\n { type: ViewportRuler },\n { type: DragDropRegistry }\n ]; };\n /** @nocollapse */ DragDrop.ngInjectableDef = ɵɵdefineInjectable({ factory: function DragDrop_Factory() { return new DragDrop(ɵɵinject(DOCUMENT), ɵɵinject(NgZone), ɵɵinject(ViewportRuler), ɵɵinject(DragDropRegistry)); }, token: DragDrop, providedIn: \"root\" });\n return DragDrop;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Injection token that is used to provide a CdkDropList instance to CdkDrag.\n * Used for avoiding circular imports.\n * @type {?}\n */\nvar CDK_DROP_LIST = new InjectionToken('CDK_DROP_LIST');\n/**\n * Injection token that is used to provide a CdkDropList instance to CdkDrag.\n * Used for avoiding circular imports.\n * @deprecated Use `CDK_DROP_LIST` instead.\n * \\@breaking-change 8.0.0\n * @type {?}\n */\nvar CDK_DROP_LIST_CONTAINER = CDK_DROP_LIST;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Injection token that can be used for a `CdkDrag` to provide itself as a parent to the\n * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily\n * to avoid circular imports.\n * \\@docs-private\n * @type {?}\n */\nvar CDK_DRAG_PARENT = new InjectionToken('CDK_DRAG_PARENT');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Handle that can be used to drag and CdkDrag instance.\n */\nvar CdkDragHandle = /** @class */ (function () {\n function CdkDragHandle(element, parentDrag) {\n this.element = element;\n /**\n * Emits when the state of the handle has changed.\n */\n this._stateChanges = new Subject();\n this._disabled = false;\n this._parentDrag = parentDrag;\n toggleNativeDragInteractions(element.nativeElement, false);\n }\n Object.defineProperty(CdkDragHandle.prototype, \"disabled\", {\n /** Whether starting to drag through this handle is disabled. */\n get: /**\n * Whether starting to drag through this handle is disabled.\n * @return {?}\n */\n function () { return this._disabled; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n this._disabled = coerceBooleanProperty(value);\n this._stateChanges.next(this);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n CdkDragHandle.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n this._stateChanges.complete();\n };\n CdkDragHandle.decorators = [\n { type: Directive, args: [{\n selector: '[cdkDragHandle]',\n host: {\n 'class': 'cdk-drag-handle'\n }\n },] },\n ];\n /** @nocollapse */\n CdkDragHandle.ctorParameters = function () { return [\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_DRAG_PARENT,] }, { type: Optional }] }\n ]; };\n CdkDragHandle.propDecorators = {\n disabled: [{ type: Input, args: ['cdkDragHandleDisabled',] }]\n };\n return CdkDragHandle;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Element that will be used as a template for the placeholder of a CdkDrag when\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\n * @template T\n */\nvar CdkDragPlaceholder = /** @class */ (function () {\n function CdkDragPlaceholder(templateRef) {\n this.templateRef = templateRef;\n }\n CdkDragPlaceholder.decorators = [\n { type: Directive, args: [{\n selector: 'ng-template[cdkDragPlaceholder]'\n },] },\n ];\n /** @nocollapse */\n CdkDragPlaceholder.ctorParameters = function () { return [\n { type: TemplateRef }\n ]; };\n CdkDragPlaceholder.propDecorators = {\n data: [{ type: Input }]\n };\n return CdkDragPlaceholder;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Element that will be used as a template for the preview\n * of a CdkDrag when it is being dragged.\n * @template T\n */\nvar CdkDragPreview = /** @class */ (function () {\n function CdkDragPreview(templateRef) {\n this.templateRef = templateRef;\n }\n CdkDragPreview.decorators = [\n { type: Directive, args: [{\n selector: 'ng-template[cdkDragPreview]'\n },] },\n ];\n /** @nocollapse */\n CdkDragPreview.ctorParameters = function () { return [\n { type: TemplateRef }\n ]; };\n CdkDragPreview.propDecorators = {\n data: [{ type: Input }]\n };\n return CdkDragPreview;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Injection token that can be used to configure the behavior of `CdkDrag`.\n * @type {?}\n */\nvar CDK_DRAG_CONFIG = new InjectionToken('CDK_DRAG_CONFIG', {\n providedIn: 'root',\n factory: CDK_DRAG_CONFIG_FACTORY\n});\n/**\n * \\@docs-private\n * @return {?}\n */\nfunction CDK_DRAG_CONFIG_FACTORY() {\n return { dragStartThreshold: 5, pointerDirectionChangeThreshold: 5 };\n}\n/**\n * Element that can be moved inside a CdkDropList container.\n * @template T\n */\nvar CdkDrag = /** @class */ (function () {\n function CdkDrag(element, dropContainer, _document, _ngZone, _viewContainerRef, config, _dir, dragDrop, _changeDetectorRef) {\n var _this = this;\n this.element = element;\n this.dropContainer = dropContainer;\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewContainerRef = _viewContainerRef;\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._destroyed = new Subject();\n /**\n * Amount of milliseconds to wait after the user has put their\n * pointer down before starting to drag the element.\n */\n this.dragStartDelay = 0;\n this._disabled = false;\n /**\n * Emits when the user starts dragging the item.\n */\n this.started = new EventEmitter();\n /**\n * Emits when the user has released a drag item, before any animations have started.\n */\n this.released = new EventEmitter();\n /**\n * Emits when the user stops dragging an item in the container.\n */\n this.ended = new EventEmitter();\n /**\n * Emits when the user has moved the item into a new container.\n */\n this.entered = new EventEmitter();\n /**\n * Emits when the user removes the item its container by dragging it into another container.\n */\n this.exited = new EventEmitter();\n /**\n * Emits when the user drops the item inside a container.\n */\n this.dropped = new EventEmitter();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = new Observable((/**\n * @param {?} observer\n * @return {?}\n */\n function (observer) {\n /** @type {?} */\n var subscription = _this._dragRef.moved.pipe(map((/**\n * @param {?} movedEvent\n * @return {?}\n */\n function (movedEvent) { return ({\n source: _this,\n pointerPosition: movedEvent.pointerPosition,\n event: movedEvent.event,\n delta: movedEvent.delta,\n distance: movedEvent.distance\n }); }))).subscribe(observer);\n return (/**\n * @return {?}\n */\n function () {\n subscription.unsubscribe();\n });\n }));\n this._dragRef = dragDrop.createDrag(element, config);\n this._dragRef.data = this;\n this._syncInputs(this._dragRef);\n this._handleEvents(this._dragRef);\n }\n Object.defineProperty(CdkDrag.prototype, \"boundaryElementSelector\", {\n /**\n * Selector that will be used to determine the element to which the draggable's position will\n * be constrained. Matching starts from the element's parent and goes up the DOM until a matching\n * element has been found\n * @deprecated Use `boundaryElement` instead.\n * @breaking-change 9.0.0\n */\n get: /**\n * Selector that will be used to determine the element to which the draggable's position will\n * be constrained. Matching starts from the element's parent and goes up the DOM until a matching\n * element has been found\n * @deprecated Use `boundaryElement` instead.\n * \\@breaking-change 9.0.0\n * @return {?}\n */\n function () {\n return typeof this.boundaryElement === 'string' ? this.boundaryElement : (/** @type {?} */ (undefined));\n },\n set: /**\n * @param {?} selector\n * @return {?}\n */\n function (selector) {\n this.boundaryElement = selector;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkDrag.prototype, \"disabled\", {\n /** Whether starting to drag this element is disabled. */\n get: /**\n * Whether starting to drag this element is disabled.\n * @return {?}\n */\n function () {\n return this._disabled || (this.dropContainer && this.dropContainer.disabled);\n },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n this._disabled = coerceBooleanProperty(value);\n this._dragRef.disabled = this._disabled;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n * @return {?}\n */\n CdkDrag.prototype.getPlaceholderElement = /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n * @return {?}\n */\n function () {\n return this._dragRef.getPlaceholderElement();\n };\n /** Returns the root draggable element. */\n /**\n * Returns the root draggable element.\n * @return {?}\n */\n CdkDrag.prototype.getRootElement = /**\n * Returns the root draggable element.\n * @return {?}\n */\n function () {\n return this._dragRef.getRootElement();\n };\n /** Resets a standalone drag item to its initial position. */\n /**\n * Resets a standalone drag item to its initial position.\n * @return {?}\n */\n CdkDrag.prototype.reset = /**\n * Resets a standalone drag item to its initial position.\n * @return {?}\n */\n function () {\n this._dragRef.reset();\n };\n /**\n * Gets the pixel coordinates of the draggable outside of a drop container.\n */\n /**\n * Gets the pixel coordinates of the draggable outside of a drop container.\n * @return {?}\n */\n CdkDrag.prototype.getFreeDragPosition = /**\n * Gets the pixel coordinates of the draggable outside of a drop container.\n * @return {?}\n */\n function () {\n return this._dragRef.getFreeDragPosition();\n };\n /**\n * @return {?}\n */\n CdkDrag.prototype.ngAfterViewInit = /**\n * @return {?}\n */\n function () {\n var _this = this;\n // We need to wait for the zone to stabilize, in order for the reference\n // element to be in the proper place in the DOM. This is mostly relevant\n // for draggable elements inside portals since they get stamped out in\n // their original DOM position and then they get transferred to the portal.\n this._ngZone.onStable.asObservable()\n .pipe(take(1), takeUntil(this._destroyed))\n .subscribe((/**\n * @return {?}\n */\n function () {\n _this._updateRootElement();\n // Listen for any newly-added handles.\n _this._handles.changes.pipe(startWith(_this._handles), \n // Sync the new handles with the DragRef.\n tap((/**\n * @param {?} handles\n * @return {?}\n */\n function (handles) {\n /** @type {?} */\n var childHandleElements = handles\n .filter((/**\n * @param {?} handle\n * @return {?}\n */\n function (handle) { return handle._parentDrag === _this; }))\n .map((/**\n * @param {?} handle\n * @return {?}\n */\n function (handle) { return handle.element; }));\n _this._dragRef.withHandles(childHandleElements);\n })), \n // Listen if the state of any of the handles changes.\n switchMap((/**\n * @param {?} handles\n * @return {?}\n */\n function (handles) {\n return merge.apply(void 0, handles.map((/**\n * @param {?} item\n * @return {?}\n */\n function (item) { return item._stateChanges; })));\n })), takeUntil(_this._destroyed)).subscribe((/**\n * @param {?} handleInstance\n * @return {?}\n */\n function (handleInstance) {\n // Enabled/disable the handle that changed in the DragRef.\n /** @type {?} */\n var dragRef = _this._dragRef;\n /** @type {?} */\n var handle = handleInstance.element.nativeElement;\n handleInstance.disabled ? dragRef.disableHandle(handle) : dragRef.enableHandle(handle);\n }));\n if (_this.freeDragPosition) {\n _this._dragRef.setFreeDragPosition(_this.freeDragPosition);\n }\n }));\n };\n /**\n * @param {?} changes\n * @return {?}\n */\n CdkDrag.prototype.ngOnChanges = /**\n * @param {?} changes\n * @return {?}\n */\n function (changes) {\n /** @type {?} */\n var rootSelectorChange = changes['rootElementSelector'];\n /** @type {?} */\n var positionChange = changes['freeDragPosition'];\n // We don't have to react to the first change since it's being\n // handled in `ngAfterViewInit` where it needs to be deferred.\n if (rootSelectorChange && !rootSelectorChange.firstChange) {\n this._updateRootElement();\n }\n // Skip the first change since it's being handled in `ngAfterViewInit`.\n if (positionChange && !positionChange.firstChange && this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n };\n /**\n * @return {?}\n */\n CdkDrag.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n this._destroyed.next();\n this._destroyed.complete();\n this._dragRef.dispose();\n };\n /** Syncs the root element with the `DragRef`. */\n /**\n * Syncs the root element with the `DragRef`.\n * @private\n * @return {?}\n */\n CdkDrag.prototype._updateRootElement = /**\n * Syncs the root element with the `DragRef`.\n * @private\n * @return {?}\n */\n function () {\n /** @type {?} */\n var element = this.element.nativeElement;\n /** @type {?} */\n var rootElement = this.rootElementSelector ?\n getClosestMatchingAncestor(element, this.rootElementSelector) : element;\n if (rootElement && rootElement.nodeType !== this._document.ELEMENT_NODE) {\n throw Error(\"cdkDrag must be attached to an element node. \" +\n (\"Currently attached to \\\"\" + rootElement.nodeName + \"\\\".\"));\n }\n this._dragRef.withRootElement(rootElement || element);\n };\n /** Gets the boundary element, based on the `boundaryElement` value. */\n /**\n * Gets the boundary element, based on the `boundaryElement` value.\n * @private\n * @return {?}\n */\n CdkDrag.prototype._getBoundaryElement = /**\n * Gets the boundary element, based on the `boundaryElement` value.\n * @private\n * @return {?}\n */\n function () {\n /** @type {?} */\n var boundary = this.boundaryElement;\n if (!boundary) {\n return null;\n }\n if (typeof boundary === 'string') {\n return getClosestMatchingAncestor(this.element.nativeElement, boundary);\n }\n /** @type {?} */\n var element = coerceElement(boundary);\n if (isDevMode() && !element.contains(this.element.nativeElement)) {\n throw Error('Draggable element is not inside of the node passed into cdkDragBoundary.');\n }\n return element;\n };\n /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\n /**\n * Syncs the inputs of the CdkDrag with the options of the underlying DragRef.\n * @private\n * @param {?} ref\n * @return {?}\n */\n CdkDrag.prototype._syncInputs = /**\n * Syncs the inputs of the CdkDrag with the options of the underlying DragRef.\n * @private\n * @param {?} ref\n * @return {?}\n */\n function (ref) {\n var _this = this;\n ref.beforeStarted.subscribe((/**\n * @return {?}\n */\n function () {\n if (!ref.isDragging()) {\n /** @type {?} */\n var dir = _this._dir;\n /** @type {?} */\n var placeholder = _this._placeholderTemplate ? {\n template: _this._placeholderTemplate.templateRef,\n context: _this._placeholderTemplate.data,\n viewContainer: _this._viewContainerRef\n } : null;\n /** @type {?} */\n var preview = _this._previewTemplate ? {\n template: _this._previewTemplate.templateRef,\n context: _this._previewTemplate.data,\n viewContainer: _this._viewContainerRef\n } : null;\n ref.disabled = _this.disabled;\n ref.lockAxis = _this.lockAxis;\n ref.dragStartDelay = coerceNumberProperty(_this.dragStartDelay);\n ref.constrainPosition = _this.constrainPosition;\n ref\n .withBoundaryElement(_this._getBoundaryElement())\n .withPlaceholderTemplate(placeholder)\n .withPreviewTemplate(preview);\n if (dir) {\n ref.withDirection(dir.value);\n }\n }\n }));\n };\n /** Handles the events from the underlying `DragRef`. */\n /**\n * Handles the events from the underlying `DragRef`.\n * @private\n * @param {?} ref\n * @return {?}\n */\n CdkDrag.prototype._handleEvents = /**\n * Handles the events from the underlying `DragRef`.\n * @private\n * @param {?} ref\n * @return {?}\n */\n function (ref) {\n var _this = this;\n ref.started.subscribe((/**\n * @return {?}\n */\n function () {\n _this.started.emit({ source: _this });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n _this._changeDetectorRef.markForCheck();\n }));\n ref.released.subscribe((/**\n * @return {?}\n */\n function () {\n _this.released.emit({ source: _this });\n }));\n ref.ended.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.ended.emit({ source: _this, distance: event.distance });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n _this._changeDetectorRef.markForCheck();\n }));\n ref.entered.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.entered.emit({\n container: event.container.data,\n item: _this,\n currentIndex: event.currentIndex\n });\n }));\n ref.exited.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.exited.emit({\n container: event.container.data,\n item: _this\n });\n }));\n ref.dropped.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.dropped.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n previousContainer: event.previousContainer.data,\n container: event.container.data,\n isPointerOverContainer: event.isPointerOverContainer,\n item: _this,\n distance: event.distance\n });\n }));\n };\n CdkDrag.decorators = [\n { type: Directive, args: [{\n selector: '[cdkDrag]',\n exportAs: 'cdkDrag',\n host: {\n 'class': 'cdk-drag',\n '[class.cdk-drag-disabled]': 'disabled',\n '[class.cdk-drag-dragging]': '_dragRef.isDragging()',\n },\n providers: [{ provide: CDK_DRAG_PARENT, useExisting: CdkDrag }]\n },] },\n ];\n /** @nocollapse */\n CdkDrag.ctorParameters = function () { return [\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_DROP_LIST,] }, { type: Optional }, { type: SkipSelf }] },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: NgZone },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_DRAG_CONFIG,] }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: DragDrop },\n { type: ChangeDetectorRef }\n ]; };\n CdkDrag.propDecorators = {\n _handles: [{ type: ContentChildren, args: [CdkDragHandle, { descendants: true },] }],\n _previewTemplate: [{ type: ContentChild, args: [CdkDragPreview, { static: false },] }],\n _placeholderTemplate: [{ type: ContentChild, args: [CdkDragPlaceholder, { static: false },] }],\n data: [{ type: Input, args: ['cdkDragData',] }],\n lockAxis: [{ type: Input, args: ['cdkDragLockAxis',] }],\n rootElementSelector: [{ type: Input, args: ['cdkDragRootElement',] }],\n boundaryElement: [{ type: Input, args: ['cdkDragBoundary',] }],\n dragStartDelay: [{ type: Input, args: ['cdkDragStartDelay',] }],\n freeDragPosition: [{ type: Input, args: ['cdkDragFreeDragPosition',] }],\n disabled: [{ type: Input, args: ['cdkDragDisabled',] }],\n constrainPosition: [{ type: Input, args: ['cdkDragConstrainPosition',] }],\n started: [{ type: Output, args: ['cdkDragStarted',] }],\n released: [{ type: Output, args: ['cdkDragReleased',] }],\n ended: [{ type: Output, args: ['cdkDragEnded',] }],\n entered: [{ type: Output, args: ['cdkDragEntered',] }],\n exited: [{ type: Output, args: ['cdkDragExited',] }],\n dropped: [{ type: Output, args: ['cdkDragDropped',] }],\n moved: [{ type: Output, args: ['cdkDragMoved',] }]\n };\n return CdkDrag;\n}());\n/**\n * Gets the closest ancestor of an element that matches a selector.\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\nfunction getClosestMatchingAncestor(element, selector) {\n /** @type {?} */\n var currentElement = (/** @type {?} */ (element.parentElement));\n while (currentElement) {\n // IE doesn't support `matches` so we have to fall back to `msMatchesSelector`.\n if (currentElement.matches ? currentElement.matches(selector) :\n ((/** @type {?} */ (currentElement))).msMatchesSelector(selector)) {\n return currentElement;\n }\n currentElement = currentElement.parentElement;\n }\n return null;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\n * from `cdkDropList`.\n * @template T\n */\nvar CdkDropListGroup = /** @class */ (function () {\n function CdkDropListGroup() {\n /**\n * Drop lists registered inside the group.\n */\n this._items = new Set();\n this._disabled = false;\n }\n Object.defineProperty(CdkDropListGroup.prototype, \"disabled\", {\n /** Whether starting a dragging sequence from inside this group is disabled. */\n get: /**\n * Whether starting a dragging sequence from inside this group is disabled.\n * @return {?}\n */\n function () { return this._disabled; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n this._disabled = coerceBooleanProperty(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n CdkDropListGroup.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n this._items.clear();\n };\n CdkDropListGroup.decorators = [\n { type: Directive, args: [{\n selector: '[cdkDropListGroup]',\n exportAs: 'cdkDropListGroup',\n },] },\n ];\n CdkDropListGroup.propDecorators = {\n disabled: [{ type: Input, args: ['cdkDropListGroupDisabled',] }]\n };\n return CdkDropListGroup;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Counter used to generate unique ids for drop zones.\n * @type {?}\n */\nvar _uniqueIdCounter$1 = 0;\nvar ɵ0 = undefined;\n// @breaking-change 8.0.0 `CdkDropList` implements `CdkDropListContainer` for backwards\n// compatiblity. The implements clause, as well as all the methods that it enforces can\n// be removed when `CdkDropListContainer` is deleted.\n/**\n * Container that wraps a set of draggable items.\n * @template T\n */\nvar CdkDropList = /** @class */ (function () {\n function CdkDropList(element, dragDrop, _changeDetectorRef, _dir, _group) {\n var _this = this;\n this.element = element;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._group = _group;\n /**\n * Emits when the list has been destroyed.\n */\n this._destroyed = new Subject();\n /**\n * Other draggable containers that this container is connected to and into which the\n * container's items can be transferred. Can either be references to other drop containers,\n * or their unique IDs.\n */\n this.connectedTo = [];\n /**\n * Direction in which the list is oriented.\n */\n this.orientation = 'vertical';\n /**\n * Unique ID for the drop zone. Can be used as a reference\n * in the `connectedTo` of another `CdkDropList`.\n */\n this.id = \"cdk-drop-list-\" + _uniqueIdCounter$1++;\n this._disabled = false;\n this._sortingDisabled = false;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = (/**\n * @return {?}\n */\n function () { return true; });\n /**\n * Whether to auto-scroll the view when the user moves their pointer close to the edges.\n */\n this.autoScrollDisabled = false;\n /**\n * Emits when the user drops an item inside the container.\n */\n this.dropped = new EventEmitter();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new EventEmitter();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new EventEmitter();\n /**\n * Emits as the user is swapping items while actively dragging.\n */\n this.sorted = new EventEmitter();\n this._dropListRef = dragDrop.createDropList(element);\n this._dropListRef.data = this;\n this._dropListRef.enterPredicate = (/**\n * @param {?} drag\n * @param {?} drop\n * @return {?}\n */\n function (drag, drop) {\n return _this.enterPredicate(drag.data, drop.data);\n });\n this._syncInputs(this._dropListRef);\n this._handleEvents(this._dropListRef);\n CdkDropList._dropLists.push(this);\n if (_group) {\n _group._items.add(this);\n }\n }\n Object.defineProperty(CdkDropList.prototype, \"disabled\", {\n /** Whether starting a dragging sequence from this container is disabled. */\n get: /**\n * Whether starting a dragging sequence from this container is disabled.\n * @return {?}\n */\n function () {\n return this._disabled || (!!this._group && this._group.disabled);\n },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n this._disabled = coerceBooleanProperty(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CdkDropList.prototype, \"sortingDisabled\", {\n /** Whether sorting within this drop list is disabled. */\n get: /**\n * Whether sorting within this drop list is disabled.\n * @return {?}\n */\n function () { return this._sortingDisabled; },\n set: /**\n * @param {?} value\n * @return {?}\n */\n function (value) {\n this._sortingDisabled = coerceBooleanProperty(value);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @return {?}\n */\n CdkDropList.prototype.ngAfterContentInit = /**\n * @return {?}\n */\n function () {\n var _this = this;\n this._draggables.changes\n .pipe(startWith(this._draggables), takeUntil(this._destroyed))\n .subscribe((/**\n * @param {?} items\n * @return {?}\n */\n function (items) {\n _this._dropListRef.withItems(items.map((/**\n * @param {?} drag\n * @return {?}\n */\n function (drag) { return drag._dragRef; })));\n }));\n };\n /**\n * @return {?}\n */\n CdkDropList.prototype.ngOnDestroy = /**\n * @return {?}\n */\n function () {\n /** @type {?} */\n var index = CdkDropList._dropLists.indexOf(this);\n if (index > -1) {\n CdkDropList._dropLists.splice(index, 1);\n }\n if (this._group) {\n this._group._items.delete(this);\n }\n this._dropListRef.dispose();\n this._destroyed.next();\n this._destroyed.complete();\n };\n /** Starts dragging an item. */\n /**\n * Starts dragging an item.\n * @return {?}\n */\n CdkDropList.prototype.start = /**\n * Starts dragging an item.\n * @return {?}\n */\n function () {\n this._dropListRef.start();\n };\n /**\n * Drops an item into this container.\n * @param item Item being dropped into the container.\n * @param currentIndex Index at which the item should be inserted.\n * @param previousContainer Container from which the item got dragged in.\n * @param isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n */\n /**\n * Drops an item into this container.\n * @param {?} item Item being dropped into the container.\n * @param {?} currentIndex Index at which the item should be inserted.\n * @param {?} previousContainer Container from which the item got dragged in.\n * @param {?} isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @return {?}\n */\n CdkDropList.prototype.drop = /**\n * Drops an item into this container.\n * @param {?} item Item being dropped into the container.\n * @param {?} currentIndex Index at which the item should be inserted.\n * @param {?} previousContainer Container from which the item got dragged in.\n * @param {?} isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @return {?}\n */\n function (item, currentIndex, previousContainer, isPointerOverContainer) {\n this._dropListRef.drop(item._dragRef, currentIndex, ((/** @type {?} */ (previousContainer)))._dropListRef, isPointerOverContainer);\n };\n /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n */\n /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param {?} item Item that was moved into the container.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @return {?}\n */\n CdkDropList.prototype.enter = /**\n * Emits an event to indicate that the user moved an item into the container.\n * @param {?} item Item that was moved into the container.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @return {?}\n */\n function (item, pointerX, pointerY) {\n this._dropListRef.enter(item._dragRef, pointerX, pointerY);\n };\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param item Item that was dragged out.\n */\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param {?} item Item that was dragged out.\n * @return {?}\n */\n CdkDropList.prototype.exit = /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param {?} item Item that was dragged out.\n * @return {?}\n */\n function (item) {\n this._dropListRef.exit(item._dragRef);\n };\n /**\n * Figures out the index of an item in the container.\n * @param item Item whose index should be determined.\n */\n /**\n * Figures out the index of an item in the container.\n * @param {?} item Item whose index should be determined.\n * @return {?}\n */\n CdkDropList.prototype.getItemIndex = /**\n * Figures out the index of an item in the container.\n * @param {?} item Item whose index should be determined.\n * @return {?}\n */\n function (item) {\n return this._dropListRef.getItemIndex(item._dragRef);\n };\n /**\n * Sorts an item inside the container based on its position.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n /**\n * Sorts an item inside the container based on its position.\n * @param {?} item Item to be sorted.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @param {?} pointerDelta Direction in which the pointer is moving along each axis.\n * @return {?}\n */\n CdkDropList.prototype._sortItem = /**\n * Sorts an item inside the container based on its position.\n * @param {?} item Item to be sorted.\n * @param {?} pointerX Position of the item along the X axis.\n * @param {?} pointerY Position of the item along the Y axis.\n * @param {?} pointerDelta Direction in which the pointer is moving along each axis.\n * @return {?}\n */\n function (item, pointerX, pointerY, pointerDelta) {\n return this._dropListRef._sortItem(item._dragRef, pointerX, pointerY, pointerDelta);\n };\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param item Drag item that is being moved.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param {?} item Drag item that is being moved.\n * @param {?} x Position of the item along the X axis.\n * @param {?} y Position of the item along the Y axis.\n * @return {?}\n */\n CdkDropList.prototype._getSiblingContainerFromPosition = /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param {?} item Drag item that is being moved.\n * @param {?} x Position of the item along the X axis.\n * @param {?} y Position of the item along the Y axis.\n * @return {?}\n */\n function (item, x, y) {\n /** @type {?} */\n var result = this._dropListRef._getSiblingContainerFromPosition(item._dragRef, x, y);\n return result ? result.data : null;\n };\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param x Pointer position along the X axis.\n * @param y Pointer position along the Y axis.\n */\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param {?} x Pointer position along the X axis.\n * @param {?} y Pointer position along the Y axis.\n * @return {?}\n */\n CdkDropList.prototype._isOverContainer = /**\n * Checks whether the user's pointer is positioned over the container.\n * @param {?} x Pointer position along the X axis.\n * @param {?} y Pointer position along the Y axis.\n * @return {?}\n */\n function (x, y) {\n return this._dropListRef._isOverContainer(x, y);\n };\n /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\n /**\n * Syncs the inputs of the CdkDropList with the options of the underlying DropListRef.\n * @private\n * @param {?} ref\n * @return {?}\n */\n CdkDropList.prototype._syncInputs = /**\n * Syncs the inputs of the CdkDropList with the options of the underlying DropListRef.\n * @private\n * @param {?} ref\n * @return {?}\n */\n function (ref) {\n var _this = this;\n if (this._dir) {\n this._dir.change\n .pipe(startWith(this._dir.value), takeUntil(this._destroyed))\n .subscribe((/**\n * @param {?} value\n * @return {?}\n */\n function (value) { return ref.withDirection(value); }));\n }\n ref.beforeStarted.subscribe((/**\n * @return {?}\n */\n function () {\n /** @type {?} */\n var siblings = coerceArray(_this.connectedTo).map((/**\n * @param {?} drop\n * @return {?}\n */\n function (drop) {\n return typeof drop === 'string' ?\n (/** @type {?} */ (CdkDropList._dropLists.find((/**\n * @param {?} list\n * @return {?}\n */\n function (list) { return list.id === drop; })))) : drop;\n }));\n if (_this._group) {\n _this._group._items.forEach((/**\n * @param {?} drop\n * @return {?}\n */\n function (drop) {\n if (siblings.indexOf(drop) === -1) {\n siblings.push(drop);\n }\n }));\n }\n ref.disabled = _this.disabled;\n ref.lockAxis = _this.lockAxis;\n ref.sortingDisabled = _this.sortingDisabled;\n ref.autoScrollDisabled = _this.autoScrollDisabled;\n ref\n .connectedTo(siblings.filter((/**\n * @param {?} drop\n * @return {?}\n */\n function (drop) { return drop && drop !== _this; })).map((/**\n * @param {?} list\n * @return {?}\n */\n function (list) { return list._dropListRef; })))\n .withOrientation(_this.orientation);\n }));\n };\n /** Handles events from the underlying DropListRef. */\n /**\n * Handles events from the underlying DropListRef.\n * @private\n * @param {?} ref\n * @return {?}\n */\n CdkDropList.prototype._handleEvents = /**\n * Handles events from the underlying DropListRef.\n * @private\n * @param {?} ref\n * @return {?}\n */\n function (ref) {\n var _this = this;\n ref.beforeStarted.subscribe((/**\n * @return {?}\n */\n function () {\n _this._changeDetectorRef.markForCheck();\n }));\n ref.entered.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.entered.emit({\n container: _this,\n item: event.item.data,\n currentIndex: event.currentIndex\n });\n }));\n ref.exited.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.exited.emit({\n container: _this,\n item: event.item.data\n });\n _this._changeDetectorRef.markForCheck();\n }));\n ref.sorted.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.sorted.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n container: _this,\n item: event.item.data\n });\n }));\n ref.dropped.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n function (event) {\n _this.dropped.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n previousContainer: event.previousContainer.data,\n container: event.container.data,\n item: event.item.data,\n isPointerOverContainer: event.isPointerOverContainer,\n distance: event.distance\n });\n // Mark for check since all of these events run outside of change\n // detection and we're not guaranteed for something else to have triggered it.\n _this._changeDetectorRef.markForCheck();\n }));\n };\n /**\n * Keeps track of the drop lists that are currently on the page.\n */\n CdkDropList._dropLists = [];\n CdkDropList.decorators = [\n { type: Directive, args: [{\n selector: '[cdkDropList], cdk-drop-list',\n exportAs: 'cdkDropList',\n providers: [\n // Prevent child drop lists from picking up the same group as their parent.\n { provide: CdkDropListGroup, useValue: ɵ0 },\n { provide: CDK_DROP_LIST_CONTAINER, useExisting: CdkDropList },\n ],\n host: {\n 'class': 'cdk-drop-list',\n '[id]': 'id',\n '[class.cdk-drop-list-disabled]': 'disabled',\n '[class.cdk-drop-list-dragging]': '_dropListRef.isDragging()',\n '[class.cdk-drop-list-receiving]': '_dropListRef.isReceiving()',\n }\n },] },\n ];\n /** @nocollapse */\n CdkDropList.ctorParameters = function () { return [\n { type: ElementRef },\n { type: DragDrop },\n { type: ChangeDetectorRef },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: CdkDropListGroup, decorators: [{ type: Optional }, { type: SkipSelf }] }\n ]; };\n CdkDropList.propDecorators = {\n _draggables: [{ type: ContentChildren, args: [forwardRef((/**\n * @return {?}\n */\n function () { return CdkDrag; })), {\n // Explicitly set to false since some of the logic below makes assumptions about it.\n // The `.withItems` call below should be updated if we ever need to switch this to `true`.\n descendants: false\n },] }],\n connectedTo: [{ type: Input, args: ['cdkDropListConnectedTo',] }],\n data: [{ type: Input, args: ['cdkDropListData',] }],\n orientation: [{ type: Input, args: ['cdkDropListOrientation',] }],\n id: [{ type: Input }],\n lockAxis: [{ type: Input, args: ['cdkDropListLockAxis',] }],\n disabled: [{ type: Input, args: ['cdkDropListDisabled',] }],\n sortingDisabled: [{ type: Input, args: ['cdkDropListSortingDisabled',] }],\n enterPredicate: [{ type: Input, args: ['cdkDropListEnterPredicate',] }],\n autoScrollDisabled: [{ type: Input, args: ['cdkDropListAutoScrollDisabled',] }],\n dropped: [{ type: Output, args: ['cdkDropListDropped',] }],\n entered: [{ type: Output, args: ['cdkDropListEntered',] }],\n exited: [{ type: Output, args: ['cdkDropListExited',] }],\n sorted: [{ type: Output, args: ['cdkDropListSorted',] }]\n };\n return CdkDropList;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nvar DragDropModule = /** @class */ (function () {\n function DragDropModule() {\n }\n DragDropModule.decorators = [\n { type: NgModule, args: [{\n declarations: [\n CdkDropList,\n CdkDropListGroup,\n CdkDrag,\n CdkDragHandle,\n CdkDragPreview,\n CdkDragPlaceholder,\n ],\n exports: [\n CdkDropList,\n CdkDropListGroup,\n CdkDrag,\n CdkDragHandle,\n CdkDragPreview,\n CdkDragPlaceholder,\n ],\n providers: [\n DragDrop,\n ]\n },] },\n ];\n return DragDropModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { DragDrop, DragRef, DropListRef, CdkDropList, CDK_DROP_LIST, CDK_DROP_LIST_CONTAINER, moveItemInArray, transferArrayItem, copyArrayItem, DragDropModule, DragDropRegistry, CdkDropListGroup, CDK_DRAG_CONFIG_FACTORY, CDK_DRAG_CONFIG, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder, CDK_DRAG_PARENT as ɵb };\n//# sourceMappingURL=drag-drop.es5.js.map\n"],"sourceRoot":"webpack:///"}