You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Vestride_Shuffle/dist/shuffle.js.map

1 line
84 KiB
Plaintext

{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 2bda26189da0ab787d25","webpack:///./src/point.js","webpack:///./src/classes.js","webpack:///./src/get-number.js","webpack:///./~/xtend/immutable.js","webpack:///./src/shuffle.js","webpack:///./~/array-parallel/index.js","webpack:///./~/array-uniq/index.js","webpack:///./src/computed-size.js","webpack:///./src/get-number-style.js","webpack:///./src/layout.js","webpack:///./src/on-transition-end.js","webpack:///./src/shuffle-item.js","webpack:///./src/sorter.js","webpack:///./~/custom-event-polyfill/custom-event-polyfill.js","webpack:///./~/matches-selector/index.js","webpack:///./~/throttleit/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/index.js"],"names":["Point","x","y","getNumber","equals","a","b","BASE","SHUFFLE_ITEM","VISIBLE","HIDDEN","value","parseFloat","toArray","arrayLike","Array","prototype","slice","call","arrayMax","array","Math","max","apply","arrayIncludes","obj","arguments","length","indexOf","id","Shuffle","element","options","xtend","useSizer","lastSort","group","lastFilter","ALL_ITEMS","isEnabled","isDestroyed","isInitialized","_transitions","isTransitioning","_queue","_getElementOption","TypeError","_init","items","_getItems","sizer","classList","add","Classes","_initItems","_onResize","_getResizeFunction","window","addEventListener","containerCss","getComputedStyle","containerWidth","getSize","width","_validateStyles","_setColumns","filter","initialSort","offsetWidth","_setTransitions","style","transition","speed","easing","resizeFunction","_handleResize","bind","throttle","throttleTime","option","querySelector","nodeType","jquery","styles","position","overflow","category","collection","set","_getFilteredSets","_toggleFilterClasses","visible","hidden","forEach","item","_doesPassFilter","push","attr","getAttribute","FILTER_ATTRIBUTE_KEY","keys","delimeter","split","JSON","parse","isArray","some","show","hide","init","dispose","visibleItems","_getFilteredItems","str","useTransforms","children","matches","el","itemSelector","map","sorter","by","isVisible","gutterSize","size","columnWidth","gutterWidth","getNumberStyle","gutter","_getGutterSize","_getColumnSize","calculatedColumns","abs","round","columnThreshold","cols","floor","colWidth","height","_getContainerSize","positions","index","min","staggerAmount","staggerAmountMax","name","details","shuffle","dispatchEvent","CustomEvent","bubbles","cancelable","detail","i","count","currPos","point","currScale","scale","itemSize","pos","_getItemPosition","callback","transitionDelay","applyCss","ShuffleItem","Css","after","Scale","before","_getStaggerAmount","getItemPosition","gridSize","total","threshold","buffer","_getConcealedItems","update","transform","left","top","itemCallback","done","onTransitionEnd","evt","opts","_getStylesForTransition","_whenTransitionDone","_cancelMovement","hasSpeed","hasQueue","_startTransitions","_styleImmediately","_dispatchLayout","transitions","callbacks","_getTransitionFunction","parallel","_movementFinished","objects","elements","_skipTransitions","_dispatch","EventType","LAYOUT","sortObj","_filter","_shrink","_updateItemCount","sort","_resetCols","_layout","_processQueue","_setContainerSize","isOnlyLayout","newItems","arrayUnique","concat","_updateItemsOrder","isUpdateLayout","oldItems","getItemByElement","handleLayout","removeEventListener","_disposeItems","parentNode","removeChild","REMOVED","remove","removeAttribute","includeMargins","marginLeft","marginRight","marginTop","marginBottom","zero","data","duration","transitionDuration","delay","__Point","__sorter","__getColumnSpan","__getAvailablePositions","__getShortColumn","document","body","documentElement","e","createElement","cssText","appendChild","ret","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","arrayMin","span","getColumnSpan","setY","getAvailablePositions","shortColumnIndex","getShortColumn","setHeight","itemWidth","columns","columnSpan","ceil","available","minPosition","len","eventName","uniqueId","listener","currentTarget","target","cancelTransitionEnd","addClasses","INITIAL","classes","className","key","removeClasses","visibility","opacity","randomize","tmp","current","random","defaults","reverse","arr","original","revert","valA","valB","undefined","module","exports","require","default"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;AChEA;;AAEA;;AAEA;;;;;AAKA,IAAMA,QAAQ,SAARA,KAAQ,CAAUC,CAAV,EAAaC,CAAb,EAAgB;AAC5B,OAAKD,CAAL,GAAS,mFAAAE,CAAUF,CAAV,CAAT;AACA,OAAKC,CAAL,GAAS,mFAAAC,CAAUD,CAAV,CAAT;AACD,CAHD;;AAKA;;;;;;AAMAF,MAAMI,MAAN,GAAe,UAAUC,CAAV,EAAaC,CAAb,EAAgB;AAC7B,SAAOD,EAAEJ,CAAF,KAAQK,EAAEL,CAAV,IAAeI,EAAEH,CAAF,KAAQI,EAAEJ,CAAhC;AACD,CAFD;;AAIA,wDAAeF,KAAf,C;;;;;;;ACxBA,wDAAe;AACbO,QAAM,SADO;AAEbC,gBAAc,cAFD;AAGbC,WAAS,uBAHI;AAIbC,UAAQ;AAJK,CAAf,C;;;;;;;;ACAA;;AAEA;;;;;;AAKe,SAASP,SAAT,CAAmBQ,KAAnB,EAA0B;AACvC,SAAOC,WAAWD,KAAX,KAAqB,CAA5B;AACD,C;;;;;;ACTD;;AAEA;;AAEA;AACA;;AAEA,mBAAmB,sBAAsB;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASE,OAAT,CAAiBC,SAAjB,EAA4B;AAC1B,SAAOC,MAAMC,SAAN,CAAgBC,KAAhB,CAAsBC,IAAtB,CAA2BJ,SAA3B,CAAP;AACD;;AAED,SAASK,QAAT,CAAkBC,KAAlB,EAAyB;AACvB,SAAOC,KAAKC,GAAL,CAASC,KAAT,CAAeF,IAAf,EAAqBD,KAArB,CAAP;AACD;;AAED,SAASI,aAAT,CAAuBJ,KAAvB,EAA8BK,GAA9B,EAAmC;AACjC,MAAIC,UAAUC,MAAV,KAAqB,CAAzB,EAA4B;AAC1B,WAAOH,cAAcJ,KAAd,EAAqBK,GAArB,CAAP;AACD;;AAED,SAAO,UAAUA,GAAV,EAAe;AACpB,WAAOL,MAAMQ,OAAN,CAAcH,GAAd,IAAqB,CAAC,CAA7B;AACD,GAFD;AAGD;;AAED;AACA,IAAII,KAAK,CAAT;;IAEMC,O;;AAEJ;;;;;;;AAOA,mBAAYC,OAAZ,EAAmC;AAAA,QAAdC,OAAc,uEAAJ,EAAI;;AAAA;;AACjC,SAAKA,OAAL,GAAe,6CAAAC,CAAMH,QAAQE,OAAd,EAAuBA,OAAvB,CAAf;;AAEA,SAAKE,QAAL,GAAgB,KAAhB;AACA,SAAKC,QAAL,GAAgB,EAAhB;AACA,SAAKC,KAAL,GAAa,KAAKC,UAAL,GAAkBP,QAAQQ,SAAvC;AACA,SAAKC,SAAL,GAAiB,IAAjB;AACA,SAAKC,WAAL,GAAmB,KAAnB;AACA,SAAKC,aAAL,GAAqB,KAArB;AACA,SAAKC,YAAL,GAAoB,EAApB;AACA,SAAKC,eAAL,GAAuB,KAAvB;AACA,SAAKC,MAAL,GAAc,EAAd;;AAEAb,cAAU,KAAKc,iBAAL,CAAuBd,OAAvB,CAAV;;AAEA,QAAI,CAACA,OAAL,EAAc;AACZ,YAAM,IAAIe,SAAJ,CAAc,kDAAd,CAAN;AACD;;AAED,SAAKf,OAAL,GAAeA,OAAf;AACA,SAAKF,EAAL,GAAU,aAAaA,IAAvB;;AAEA,SAAKkB,KAAL;AACA,SAAKN,aAAL,GAAqB,IAArB;AACD;;;;4BAEO;AACN,WAAKO,KAAL,GAAa,KAAKC,SAAL,EAAb;;AAEA,WAAKjB,OAAL,CAAakB,KAAb,GAAqB,KAAKL,iBAAL,CAAuB,KAAKb,OAAL,CAAakB,KAApC,CAArB;;AAEA,UAAI,KAAKlB,OAAL,CAAakB,KAAjB,EAAwB;AACtB,aAAKhB,QAAL,GAAgB,IAAhB;AACD;;AAED;AACA,WAAKH,OAAL,CAAaoB,SAAb,CAAuBC,GAAvB,CAA2BtB,QAAQuB,OAAR,CAAgB9C,IAA3C;;AAEA;AACA,WAAK+C,UAAL;;AAEA;AACA,WAAKC,SAAL,GAAiB,KAAKC,kBAAL,EAAjB;AACAC,aAAOC,gBAAP,CAAwB,QAAxB,EAAkC,KAAKH,SAAvC;;AAEA;AACA,UAAII,eAAeF,OAAOG,gBAAP,CAAwB,KAAK7B,OAA7B,EAAsC,IAAtC,CAAnB;AACA,UAAI8B,iBAAiB/B,QAAQgC,OAAR,CAAgB,KAAK/B,OAArB,EAA8BgC,KAAnD;;AAEA;AACA,WAAKC,eAAL,CAAqBL,YAArB;;AAEA;AACA;AACA,WAAKM,WAAL,CAAiBJ,cAAjB;;AAEA;AACA,WAAKK,MAAL,CAAY,KAAKlC,OAAL,CAAaI,KAAzB,EAAgC,KAAKJ,OAAL,CAAamC,WAA7C;;AAEA;AACA;AACA;AACA;AACA,WAAKpC,OAAL,CAAaqC,WAAb,CArCM,CAqCoB;AAC1B,WAAKC,eAAL;AACA,WAAKtC,OAAL,CAAauC,KAAb,CAAmBC,UAAnB,GAAgC,YAAY,KAAKvC,OAAL,CAAawC,KAAzB,GAAiC,KAAjC,GAAyC,KAAKxC,OAAL,CAAayC,MAAtF;AACD;;AAED;;;;;;;;yCAKqB;AACnB,UAAIC,iBAAiB,KAAKC,aAAL,CAAmBC,IAAnB,CAAwB,IAAxB,CAArB;AACA,aAAO,KAAK5C,OAAL,CAAa6C,QAAb,GACH,KAAK7C,OAAL,CAAa6C,QAAb,CAAsBH,cAAtB,EAAsC,KAAK1C,OAAL,CAAa8C,YAAnD,CADG,GAEHJ,cAFJ;AAGD;;AAED;;;;;;;;;sCAMkBK,M,EAAQ;AACxB;AACA;AACA,UAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;AAC9B,eAAO,KAAKhD,OAAL,CAAaiD,aAAb,CAA2BD,MAA3B,CAAP;;AAEF;AACC,OAJD,MAIO,IAAIA,UAAUA,OAAOE,QAAjB,IAA6BF,OAAOE,QAAP,KAAoB,CAArD,EAAwD;AAC7D,eAAOF,MAAP;;AAEF;AACC,OAJM,MAIA,IAAIA,UAAUA,OAAOG,MAArB,EAA6B;AAClC,eAAOH,OAAO,CAAP,CAAP;AACD;;AAED,aAAO,IAAP;AACD;;AAED;;;;;;;;oCAKgBI,M,EAAQ;AACtB;AACA,UAAIA,OAAOC,QAAP,KAAoB,QAAxB,EAAkC;AAChC,aAAKrD,OAAL,CAAauC,KAAb,CAAmBc,QAAnB,GAA8B,UAA9B;AACD;;AAED;AACA,UAAID,OAAOE,QAAP,KAAoB,QAAxB,EAAkC;AAChC,aAAKtD,OAAL,CAAauC,KAAb,CAAmBe,QAAnB,GAA8B,QAA9B;AACD;AACF;;AAED;;;;;;;;;;;;8BAS6D;AAAA,UAArDC,QAAqD,uEAA1C,KAAKjD,UAAqC;AAAA,UAAzBkD,UAAyB,uEAAZ,KAAKvC,KAAO;;AAC3D,UAAIwC,MAAM,KAAKC,gBAAL,CAAsBH,QAAtB,EAAgCC,UAAhC,CAAV;;AAEA;AACA,WAAKG,oBAAL,CAA0BF,GAA1B;;AAEA;AACA,WAAKnD,UAAL,GAAkBiD,QAAlB;;AAEA;AACA;AACA,UAAI,OAAOA,QAAP,KAAoB,QAAxB,EAAkC;AAChC,aAAKlD,KAAL,GAAakD,QAAb;AACD;;AAED,aAAOE,GAAP;AACD;;AAED;;;;;;;;;;qCAOiBF,Q,EAAUtC,K,EAAO;AAAA;;AAChC,UAAI2C,UAAU,EAAd;AACA,UAAIC,SAAS,EAAb;;AAEA;AACA,UAAIN,aAAaxD,QAAQQ,SAAzB,EAAoC;AAClCqD,kBAAU3C,KAAV;;AAEF;AACA;AACC,OALD,MAKO;AACLA,cAAM6C,OAAN,CAAc,UAACC,IAAD,EAAU;AACtB,cAAI,MAAKC,eAAL,CAAqBT,QAArB,EAA+BQ,KAAK/D,OAApC,CAAJ,EAAkD;AAChD4D,oBAAQK,IAAR,CAAaF,IAAb;AACD,WAFD,MAEO;AACLF,mBAAOI,IAAP,CAAYF,IAAZ;AACD;AACF,SAND;AAOD;;AAED,aAAO;AACLH,wBADK;AAELC;AAFK,OAAP;AAID;;AAED;;;;;;;;;;oCAOgBN,Q,EAAUvD,O,EAAS;;AAEjC,UAAI,OAAOuD,QAAP,KAAoB,UAAxB,EAAoC;AAClC,eAAOA,SAASpE,IAAT,CAAca,OAAd,EAAuBA,OAAvB,EAAgC,IAAhC,CAAP;;AAEF;AACC,OAJD,MAIO;AACL,YAAIkE,OAAOlE,QAAQmE,YAAR,CAAqB,UAAUpE,QAAQqE,oBAAvC,CAAX;AACA,YAAIC,OAAO,KAAKpE,OAAL,CAAaqE,SAAb,GACPJ,KAAKK,KAAL,CAAW,KAAKtE,OAAL,CAAaqE,SAAxB,CADO,GAEPE,KAAKC,KAAL,CAAWP,IAAX,CAFJ;;AAIA,YAAIlF,MAAM0F,OAAN,CAAcnB,QAAd,CAAJ,EAA6B;AAC3B,iBAAOA,SAASoB,IAAT,CAAclF,cAAc4E,IAAd,CAAd,CAAP;AACD;;AAED,eAAO5E,cAAc4E,IAAd,EAAoBd,QAApB,CAAP;AACD;AACF;;AAED;;;;;;;;+CAK0C;AAAA,UAAnBK,OAAmB,QAAnBA,OAAmB;AAAA,UAAVC,MAAU,QAAVA,MAAU;;AACxCD,cAAQE,OAAR,CAAgB,UAACC,IAAD,EAAU;AACxBA,aAAKa,IAAL;AACD,OAFD;;AAIAf,aAAOC,OAAP,CAAe,UAACC,IAAD,EAAU;AACvBA,aAAKc,IAAL;AACD,OAFD;AAGD;;AAED;;;;;;;;iCAK+B;AAAA,UAApB5D,KAAoB,uEAAZ,KAAKA,KAAO;;AAC7BA,YAAM6C,OAAN,CAAc,UAACC,IAAD,EAAU;AACtBA,aAAKe,IAAL;AACD,OAFD;AAGD;;AAED;;;;;;;oCAIkC;AAAA,UAApB7D,KAAoB,uEAAZ,KAAKA,KAAO;;AAChCA,YAAM6C,OAAN,CAAc,UAACC,IAAD,EAAU;AACtBA,aAAKgB,OAAL;AACD,OAFD;AAGD;;AAED;;;;;;;uCAImB;AACjB,WAAKC,YAAL,GAAoB,KAAKC,iBAAL,GAAyBrF,MAA7C;AACD;;AAED;;;;;;;;;;sCAOoC;AAAA,UAApBqB,KAAoB,uEAAZ,KAAKA,KAAO;;AAClC,UAAIwB,QAAQ,KAAKxC,OAAL,CAAawC,KAAzB;AACA,UAAIC,SAAS,KAAKzC,OAAL,CAAayC,MAA1B;;AAEA,UAAIwC,GAAJ;AACA,UAAI,KAAKjF,OAAL,CAAakF,aAAjB,EAAgC;AAC9BD,cAAM,eAAezC,KAAf,GAAuB,KAAvB,GAA+BC,MAA/B,GACJ,YADI,GACWD,KADX,GACmB,KADnB,GAC2BC,MADjC;AAED,OAHD,MAGO;AACLwC,cAAM,SAASzC,KAAT,GAAiB,KAAjB,GAAyBC,MAAzB,GACJ,SADI,GACQD,KADR,GACgB,KADhB,GACwBC,MADxB,GAEJ,YAFI,GAEWD,KAFX,GAEmB,KAFnB,GAE2BC,MAFjC;AAGD;;AAEDzB,YAAM6C,OAAN,CAAc,UAACC,IAAD,EAAU;AACtBA,aAAK/D,OAAL,CAAauC,KAAb,CAAmBC,UAAnB,GAAgC0C,GAAhC;AACD,OAFD;AAGD;;;gCAEW;AAAA;;AACV,aAAOpG,QAAQ,KAAKkB,OAAL,CAAaoF,QAArB,EACJjD,MADI,CACG;AAAA,eAAM,wDAAAkD,CAAQC,EAAR,EAAY,OAAKrF,OAAL,CAAasF,YAAzB,CAAN;AAAA,OADH,EAEJC,GAFI,CAEA;AAAA,eAAM,IAAI,8DAAJ,CAAgBF,EAAhB,CAAN;AAAA,OAFA,CAAP;AAGD;;AAED;;;;;;;wCAIoB;AAClB,UAAIF,WAAW,KAAKpF,OAAL,CAAaoF,QAA5B;AACA,WAAKnE,KAAL,GAAa,gFAAAwE,CAAO,KAAKxE,KAAZ,EAAmB;AAC9ByE,UAD8B,cAC3B1F,OAD2B,EAClB;AACV,iBAAOhB,MAAMC,SAAN,CAAgBY,OAAhB,CAAwBV,IAAxB,CAA6BiG,QAA7B,EAAuCpF,OAAvC,CAAP;AACD;AAH6B,OAAnB,CAAb;AAKD;;;wCAEmB;AAClB,aAAO,KAAKiB,KAAL,CAAWkB,MAAX,CAAkB;AAAA,eAAQ4B,KAAK4B,SAAb;AAAA,OAAlB,CAAP;AACD;;;yCAEoB;AACnB,aAAO,KAAK1E,KAAL,CAAWkB,MAAX,CAAkB;AAAA,eAAQ,CAAC4B,KAAK4B,SAAd;AAAA,OAAlB,CAAP;AACD;;AAED;;;;;;;;;;mCAOe7D,c,EAAgB8D,U,EAAY;AACzC,UAAIC,IAAJ;;AAEA;AACA,UAAI,OAAO,KAAK5F,OAAL,CAAa6F,WAApB,KAAoC,UAAxC,EAAoD;AAClDD,eAAO,KAAK5F,OAAL,CAAa6F,WAAb,CAAyBhE,cAAzB,CAAP;;AAEF;AACC,OAJD,MAIO,IAAI,KAAK3B,QAAT,EAAmB;AACxB0F,eAAO9F,QAAQgC,OAAR,CAAgB,KAAK9B,OAAL,CAAakB,KAA7B,EAAoCa,KAA3C;;AAEF;AACC,OAJM,MAIA,IAAI,KAAK/B,OAAL,CAAa6F,WAAjB,EAA8B;AACnCD,eAAO,KAAK5F,OAAL,CAAa6F,WAApB;;AAEF;AACC,OAJM,MAIA,IAAI,KAAK7E,KAAL,CAAWrB,MAAX,GAAoB,CAAxB,EAA2B;AAChCiG,eAAO9F,QAAQgC,OAAR,CAAgB,KAAKd,KAAL,CAAW,CAAX,EAAcjB,OAA9B,EAAuC,IAAvC,EAA6CgC,KAApD;;AAEF;AACC,OAJM,MAIA;AACL6D,eAAO/D,cAAP;AACD;;AAED;AACA,UAAI+D,SAAS,CAAb,EAAgB;AACdA,eAAO/D,cAAP;AACD;;AAED,aAAO+D,OAAOD,UAAd;AACD;;AAED;;;;;;;;;mCAMe9D,c,EAAgB;AAC7B,UAAI+D,IAAJ;AACA,UAAI,OAAO,KAAK5F,OAAL,CAAa8F,WAApB,KAAoC,UAAxC,EAAoD;AAClDF,eAAO,KAAK5F,OAAL,CAAa8F,WAAb,CAAyBjE,cAAzB,CAAP;AACD,OAFD,MAEO,IAAI,KAAK3B,QAAT,EAAmB;AACxB0F,eAAO,yFAAAG,CAAe,KAAK/F,OAAL,CAAakB,KAA5B,EAAmC,YAAnC,CAAP;AACD,OAFM,MAEA;AACL0E,eAAO,KAAK5F,OAAL,CAAa8F,WAApB;AACD;;AAED,aAAOF,IAAP;AACD;;AAED;;;;;;;;kCAKkE;AAAA,UAAtD/D,cAAsD,uEAArC/B,QAAQgC,OAAR,CAAgB,KAAK/B,OAArB,EAA8BgC,KAAO;;AAChE,UAAIiE,SAAS,KAAKC,cAAL,CAAoBpE,cAApB,CAAb;AACA,UAAIgE,cAAc,KAAKK,cAAL,CAAoBrE,cAApB,EAAoCmE,MAApC,CAAlB;AACA,UAAIG,oBAAoB,CAACtE,iBAAiBmE,MAAlB,IAA4BH,WAApD;;AAEA;AACA,UAAIxG,KAAK+G,GAAL,CAAS/G,KAAKgH,KAAL,CAAWF,iBAAX,IAAgCA,iBAAzC,IACA,KAAKnG,OAAL,CAAasG,eADjB,EACkC;AAChC;AACAH,4BAAoB9G,KAAKgH,KAAL,CAAWF,iBAAX,CAApB;AACD;;AAED,WAAKI,IAAL,GAAYlH,KAAKC,GAAL,CAASD,KAAKmH,KAAL,CAAWL,iBAAX,CAAT,EAAwC,CAAxC,CAAZ;AACA,WAAKtE,cAAL,GAAsBA,cAAtB;AACA,WAAK4E,QAAL,GAAgBZ,WAAhB;AACD;;AAED;;;;;;wCAGoB;AAClB,WAAK9F,OAAL,CAAauC,KAAb,CAAmBoE,MAAnB,GAA4B,KAAKC,iBAAL,KAA2B,IAAvD;AACD;;AAED;;;;;;;;wCAKoB;AAClB,aAAOxH,SAAS,KAAKyH,SAAd,CAAP;AACD;;AAED;;;;;;;;sCAKkBC,K,EAAO;AACvB,aAAOxH,KAAKyH,GAAL,CAASD,QAAQ,KAAK7G,OAAL,CAAa+G,aAA9B,EAA6C,KAAK/G,OAAL,CAAagH,gBAA1D,CAAP;AACD;;AAED;;;;;;8BAGUC,I,EAAoB;AAAA,UAAdC,OAAc,uEAAJ,EAAI;;AAC5B,UAAI,KAAK1G,WAAT,EAAsB;AACpB;AACD;;AAED0G,cAAQC,OAAR,GAAkB,IAAlB;AACA,aAAO,CAAC,KAAKpH,OAAL,CAAaqH,aAAb,CAA2B,IAAIC,WAAJ,CAAgBJ,IAAhB,EAAsB;AACvDK,iBAAS,IAD8C;AAEvDC,oBAAY,KAF2C;AAGvDC,gBAAQN;AAH+C,OAAtB,CAA3B,CAAR;AAKD;;AAED;;;;;;;iCAIa;AACX,UAAIO,IAAI,KAAKlB,IAAb;AACA,WAAKK,SAAL,GAAiB,EAAjB;AACA,aAAOa,GAAP,EAAY;AACV,aAAKb,SAAL,CAAe5C,IAAf,CAAoB,CAApB;AACD;AACF;;AAED;;;;;;;;4BAKQhD,K,EAAO;AAAA;;AACb,UAAI0G,QAAQ,CAAZ;AACA1G,YAAM6C,OAAN,CAAc,UAACC,IAAD,EAAU;AACtB,YAAI6D,UAAU7D,KAAK8D,KAAnB;AACA,YAAIC,YAAY/D,KAAKgE,KAArB;AACA,YAAIC,WAAWjI,QAAQgC,OAAR,CAAgBgC,KAAK/D,OAArB,EAA8B,IAA9B,CAAf;AACA,YAAIiI,MAAM,OAAKC,gBAAL,CAAsBF,QAAtB,CAAV;;AAEA,iBAASG,QAAT,GAAoB;AAClBpE,eAAK/D,OAAL,CAAauC,KAAb,CAAmB6F,eAAnB,GAAqC,EAArC;AACArE,eAAKsE,QAAL,CAAc,8DAAAC,CAAYC,GAAZ,CAAgB7J,OAAhB,CAAwB8J,KAAtC;AACD;;AAED;AACA;AACA,YAAI,uDAAAvK,CAAMI,MAAN,CAAauJ,OAAb,EAAsBK,GAAtB,KAA8BH,cAAc,8DAAAQ,CAAYG,KAAZ,CAAkB/J,OAAlE,EAA2E;AACzEyJ;AACA;AACD;;AAEDpE,aAAK8D,KAAL,GAAaI,GAAb;AACAlE,aAAKgE,KAAL,GAAa,8DAAAO,CAAYG,KAAZ,CAAkB/J,OAA/B;;AAEA;AACA;AACA,YAAI0E,SAAS,6CAAAlD,CAAM,8DAAAoI,CAAYC,GAAZ,CAAgB7J,OAAhB,CAAwBgK,MAA9B,CAAb;AACAtF,eAAOgF,eAAP,GAAyB,OAAKO,iBAAL,CAAuBhB,KAAvB,IAAgC,IAAzD;;AAEA,eAAK9G,MAAL,CAAYoD,IAAZ,CAAiB;AACfF,oBADe;AAEfX,wBAFe;AAGf+E;AAHe,SAAjB;;AAMAR;AACD,OAjCD;AAkCD;;AAED;;;;;;;;;qCAMiBK,Q,EAAU;AACzB,aAAO,wFAAAY,CAAgB;AACrBZ,0BADqB;AAErBnB,mBAAW,KAAKA,SAFK;AAGrBgC,kBAAU,KAAKnC,QAHM;AAIrBoC,eAAO,KAAKtC,IAJS;AAKrBuC,mBAAW,KAAK9I,OAAL,CAAasG,eALH;AAMrByC,gBAAQ,KAAK/I,OAAL,CAAa+I;AANA,OAAhB,CAAP;AAQD;;AAED;;;;;;;;8BAKgD;AAAA;;AAAA,UAAxCxF,UAAwC,uEAA3B,KAAKyF,kBAAL,EAA2B;;AAC9C,UAAItB,QAAQ,CAAZ;AACAnE,iBAAWM,OAAX,CAAmB,UAACC,IAAD,EAAU;AAC3B,iBAASoE,QAAT,GAAoB;AAClBpE,eAAKsE,QAAL,CAAc,8DAAAC,CAAYC,GAAZ,CAAgB5J,MAAhB,CAAuB6J,KAArC;AACD;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,YAAIzE,KAAKgE,KAAL,KAAe,8DAAAO,CAAYG,KAAZ,CAAkB9J,MAArC,EAA6C;AAC3CwJ;AACA;AACD;;AAEDpE,aAAKgE,KAAL,GAAa,8DAAAO,CAAYG,KAAZ,CAAkB9J,MAA/B;;AAEA,YAAIyE,SAAS,6CAAAlD,CAAM,8DAAAoI,CAAYC,GAAZ,CAAgB5J,MAAhB,CAAuB+J,MAA7B,CAAb;AACAtF,eAAOgF,eAAP,GAAyB,OAAKO,iBAAL,CAAuBhB,KAAvB,IAAgC,IAAzD;;AAEA,eAAK9G,MAAL,CAAYoD,IAAZ,CAAiB;AACfF,oBADe;AAEfX,wBAFe;AAGf+E;AAHe,SAAjB;;AAMAR;AACD,OA5BD;AA6BD;;AAED;;;;;;;oCAIgB;AACd;AACA,UAAI,CAAC,KAAKnH,SAAN,IAAmB,KAAKC,WAA5B,EAAyC;AACvC;AACD;;AAED;AACA,UAAIqB,iBAAiB/B,QAAQgC,OAAR,CAAgB,KAAK/B,OAArB,EAA8BgC,KAAnD;;AAEA;AACA,UAAIF,mBAAmB,KAAKA,cAA5B,EAA4C;AAC1C;AACD;;AAED,WAAKoH,MAAL;AACD;;AAED;;;;;;;;;mDAM0C;AAAA,UAAhBnF,IAAgB,SAAhBA,IAAgB;AAAA,UAAVX,MAAU,SAAVA,MAAU;;AACxC,UAAI,CAACA,OAAOgF,eAAZ,EAA6B;AAC3BhF,eAAOgF,eAAP,GAAyB,KAAzB;AACD;;AAED,UAAIlK,IAAI6F,KAAK8D,KAAL,CAAW3J,CAAnB;AACA,UAAIC,IAAI4F,KAAK8D,KAAL,CAAW1J,CAAnB;;AAEA,UAAI,KAAK8B,OAAL,CAAakF,aAAjB,EAAgC;AAC9B/B,eAAO+F,SAAP,kBAAgCjL,CAAhC,YAAwCC,CAAxC,kBAAsD4F,KAAKgE,KAA3D;AACD,OAFD,MAEO;AACL3E,eAAOgG,IAAP,GAAclL,IAAI,IAAlB;AACAkF,eAAOiG,GAAP,GAAalL,IAAI,IAAjB;AACD;;AAED,aAAOiF,MAAP;AACD;;AAED;;;;;;;;;;wCAOoBpD,O,EAASsJ,Y,EAAcC,I,EAAM;AAC/C,UAAIzJ,KAAK,mGAAA0J,CAAgBxJ,OAAhB,EAAyB,UAACyJ,GAAD,EAAS;AACzCH;AACAC,aAAK,IAAL,EAAWE,GAAX;AACD,OAHQ,CAAT;;AAKA,WAAK9I,YAAL,CAAkBsD,IAAlB,CAAuBnE,EAAvB;AACD;;AAED;;;;;;;;;2CAMuB4J,I,EAAM;AAAA;;AAC3B,aAAO,UAACH,IAAD,EAAU;AACfG,aAAK3F,IAAL,CAAUsE,QAAV,CAAmB,OAAKsB,uBAAL,CAA6BD,IAA7B,CAAnB;AACA,eAAKE,mBAAL,CAAyBF,KAAK3F,IAAL,CAAU/D,OAAnC,EAA4C0J,KAAKvB,QAAjD,EAA2DoB,IAA3D;AACD,OAHD;AAID;;AAED;;;;;;;;oCAKgB;AACd,UAAI,KAAK3I,eAAT,EAA0B;AACxB,aAAKiJ,eAAL;AACD;;AAED,UAAIC,WAAW,KAAK7J,OAAL,CAAawC,KAAb,GAAqB,CAApC;AACA,UAAIsH,WAAW,KAAKlJ,MAAL,CAAYjB,MAAZ,GAAqB,CAApC;;AAEA,UAAImK,YAAYD,QAAZ,IAAwB,KAAKpJ,aAAjC,EAAgD;AAC9C,aAAKsJ,iBAAL,CAAuB,KAAKnJ,MAA5B;AAED,OAHD,MAGO,IAAIkJ,QAAJ,EAAc;AACnB,aAAKE,iBAAL,CAAuB,KAAKpJ,MAA5B;AACA,aAAKqJ,eAAL;;AAEF;AACA;AACA;AACC,OAPM,MAOA;AACL,aAAKA,eAAL;AACD;;AAED;AACA,WAAKrJ,MAAL,CAAYjB,MAAZ,GAAqB,CAArB;AACD;;AAED;;;;;;;sCAIkBuK,W,EAAa;AAAA;;AAC7B;AACA,WAAKvJ,eAAL,GAAuB,IAAvB;;AAEA;AACA,UAAIwJ,YAAYD,YAAY3E,GAAZ,CAAgB;AAAA,eAAO,OAAK6E,sBAAL,CAA4B3K,GAA5B,CAAP;AAAA,OAAhB,CAAhB;;AAEA4K,MAAA,sDAAAA,CAASF,SAAT,EAAoB,KAAKG,iBAAL,CAAuB1H,IAAvB,CAA4B,IAA5B,CAApB;AACD;;;sCAEiB;AAChB;AACA,WAAKlC,YAAL,CAAkBmD,OAAlB,CAA0B,gFAA1B;;AAEA;AACA,WAAKnD,YAAL,CAAkBf,MAAlB,GAA2B,CAA3B;;AAEA;AACA,WAAKgB,eAAL,GAAuB,KAAvB;AACD;;AAED;;;;;;;;sCAKkB4J,O,EAAS;AAAA;;AACzB,UAAIA,QAAQ5K,MAAZ,EAAoB;AAClB,YAAI6K,WAAWD,QAAQhF,GAAR,CAAY;AAAA,iBAAO9F,IAAIqE,IAAJ,CAAS/D,OAAhB;AAAA,SAAZ,CAAf;;AAEAD,gBAAQ2K,gBAAR,CAAyBD,QAAzB,EAAmC,YAAM;AACvCD,kBAAQ1G,OAAR,CAAgB,UAACpE,GAAD,EAAS;AACvBA,gBAAIqE,IAAJ,CAASsE,QAAT,CAAkB,OAAKsB,uBAAL,CAA6BjK,GAA7B,CAAlB;AACAA,gBAAIyI,QAAJ;AACD,WAHD;AAID,SALD;AAMD;AACF;;;wCAEmB;AAClB,WAAKxH,YAAL,CAAkBf,MAAlB,GAA2B,CAA3B;AACA,WAAKgB,eAAL,GAAuB,KAAvB;AACA,WAAKsJ,eAAL;AACD;;;sCAEiB;AAChB,WAAKS,SAAL,CAAe5K,QAAQ6K,SAAR,CAAkBC,MAAjC;AACD;;AAED;;;;;;;;;2BAMOtH,Q,EAAUuH,O,EAAS;AACxB,UAAI,CAAC,KAAKtK,SAAV,EAAqB;AACnB;AACD;;AAED,UAAI,CAAC+C,QAAD,IAAcA,YAAYA,SAAS3D,MAAT,KAAoB,CAAlD,EAAsD;AACpD2D,mBAAWxD,QAAQQ,SAAnB;AACD;;AAED,WAAKwK,OAAL,CAAaxH,QAAb;;AAEA;AACA,WAAKyH,OAAL;;AAEA;AACA,WAAKC,gBAAL;;AAEA;AACA,WAAKC,IAAL,CAAUJ,OAAV;AACD;;AAED;;;;;;;2BAI2B;AAAA,UAAtBpB,IAAsB,uEAAf,KAAKtJ,QAAU;;AACzB,UAAI,CAAC,KAAKI,SAAV,EAAqB;AACnB;AACD;;AAED,WAAK2K,UAAL;;AAEA,UAAIlK,QAAQ,KAAKgE,iBAAL,EAAZ;AACAhE,cAAQ,gFAAAwE,CAAOxE,KAAP,EAAcyI,IAAd,CAAR;;AAEA,WAAK0B,OAAL,CAAanK,KAAb;;AAEA;AACA;AACA,WAAKoK,aAAL;;AAEA;AACA,WAAKC,iBAAL;;AAEA,WAAKlL,QAAL,GAAgBsJ,IAAhB;AACD;;AAED;;;;;;;;2BAKO6B,Y,EAAc;AACnB,UAAI,KAAK/K,SAAT,EAAoB;;AAElB,YAAI,CAAC+K,YAAL,EAAmB;AACjB;AACA,eAAKrJ,WAAL;AACD;;AAED;AACA,aAAKgJ,IAAL;AACD;AACF;;AAED;;;;;;;;6BAKS;AACP,WAAKhC,MAAL,CAAY,IAAZ;AACD;;AAED;;;;;;;;wBAKIsC,Q,EAAU;AACZA,iBAAW,kDAAAC,CAAYD,QAAZ,EAAsBhG,GAAtB,CAA0B;AAAA,eAAM,IAAI,8DAAJ,CAAgBF,EAAhB,CAAN;AAAA,OAA1B,CAAX;;AAEA;AACA,WAAK/D,UAAL,CAAgBiK,QAAhB;;AAEA;AACA,WAAKlJ,eAAL,CAAqBkJ,QAArB;;AAEA;AACA,WAAKvK,KAAL,GAAa,KAAKA,KAAL,CAAWyK,MAAX,CAAkBF,QAAlB,CAAb;AACA,WAAKG,iBAAL;AACA,WAAKxJ,MAAL,CAAY,KAAK7B,UAAjB;AACD;;AAED;;;;;;8BAGU;AACR,WAAKE,SAAL,GAAiB,KAAjB;AACD;;AAED;;;;;;;2BAIOoL,c,EAAgB;AACrB,WAAKpL,SAAL,GAAiB,IAAjB;AACA,UAAIoL,mBAAmB,KAAvB,EAA8B;AAC5B,aAAK1C,MAAL;AACD;AACF;;AAED;;;;;;;;;2BAMO1F,U,EAAY;AAAA;;AACjB,UAAI,CAACA,WAAW5D,MAAhB,EAAwB;AACtB;AACD;;AAED4D,mBAAa,kDAAAiI,CAAYjI,UAAZ,CAAb;;AAEA,UAAIqI,WAAWrI,WACZgC,GADY,CACR;AAAA,eAAW,OAAKsG,gBAAL,CAAsB9L,OAAtB,CAAX;AAAA,OADQ,EAEZmC,MAFY,CAEL;AAAA,eAAQ,CAAC,CAAC4B,IAAV;AAAA,OAFK,CAAf;;AAIA,UAAIgI,eAAe,SAAfA,YAAe,GAAM;AACvB,eAAK/L,OAAL,CAAagM,mBAAb,CAAiCjM,QAAQ6K,SAAR,CAAkBC,MAAnD,EAA2DkB,YAA3D;AACA,eAAKE,aAAL,CAAmBJ,QAAnB;;AAEA;AACArI,mBAAWM,OAAX,CAAmB,UAAC9D,OAAD,EAAa;AAC9BA,kBAAQkM,UAAR,CAAmBC,WAAnB,CAA+BnM,OAA/B;AACD,SAFD;;AAIA,eAAK2K,SAAL,CAAe5K,QAAQ6K,SAAR,CAAkBwB,OAAjC,EAA0C,EAAE5I,sBAAF,EAA1C;;AAEA;AACAA,qBAAa,IAAb;AACAqI,mBAAW,IAAX;AACD,OAdD;;AAgBA;AACA,WAAKlI,oBAAL,CAA0B;AACxBC,iBAAS,EADe;AAExBC,gBAAQgI;AAFgB,OAA1B;;AAKA,WAAKb,OAAL,CAAaa,QAAb;;AAEA,WAAKX,IAAL;;AAEA;AACA;AACA,WAAKjK,KAAL,GAAa,KAAKA,KAAL,CAAWkB,MAAX,CAAkB;AAAA,eAAQ,CAAC1C,cAAcoM,QAAd,EAAwB9H,IAAxB,CAAT;AAAA,OAAlB,CAAb;AACA,WAAKkH,gBAAL;;AAEA,WAAKjL,OAAL,CAAa2B,gBAAb,CAA8B5B,QAAQ6K,SAAR,CAAkBC,MAAhD,EAAwDkB,YAAxD;AACD;;AAED;;;;;;;;qCAKiB/L,O,EAAS;AACxB,WAAK,IAAI0H,IAAI,KAAKzG,KAAL,CAAWrB,MAAX,GAAoB,CAAjC,EAAoC8H,KAAK,CAAzC,EAA4CA,GAA5C,EAAiD;AAC/C,YAAI,KAAKzG,KAAL,CAAWyG,CAAX,EAAc1H,OAAd,KAA0BA,OAA9B,EAAuC;AACrC,iBAAO,KAAKiB,KAAL,CAAWyG,CAAX,CAAP;AACD;AACF;;AAED,aAAO,IAAP;AACD;;AAED;;;;;;8BAGU;AACR,WAAKmC,eAAL;AACAnI,aAAOsK,mBAAP,CAA2B,QAA3B,EAAqC,KAAKxK,SAA1C;;AAEA;AACA,WAAKxB,OAAL,CAAaoB,SAAb,CAAuBiL,MAAvB,CAA8B,SAA9B;AACA,WAAKrM,OAAL,CAAasM,eAAb,CAA6B,OAA7B;;AAEA;AACA,WAAKL,aAAL;;AAEA;AACA,WAAKhL,KAAL,GAAa,IAAb;AACA,WAAKhB,OAAL,CAAakB,KAAb,GAAqB,IAArB;AACA,WAAKnB,OAAL,GAAe,IAAf;AACA,WAAKW,YAAL,GAAoB,IAApB;;AAEA;AACA;AACA,WAAKF,WAAL,GAAmB,IAAnB;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;4BAsBeT,O,EAASuM,c,EAAgB;AACtC;AACA,UAAInJ,SAAS1B,OAAOG,gBAAP,CAAwB7B,OAAxB,EAAiC,IAAjC,CAAb;AACA,UAAIgC,QAAQ,yFAAAgE,CAAehG,OAAf,EAAwB,OAAxB,EAAiCoD,MAAjC,CAAZ;AACA,UAAIuD,SAAS,yFAAAX,CAAehG,OAAf,EAAwB,QAAxB,EAAkCoD,MAAlC,CAAb;;AAEA,UAAImJ,cAAJ,EAAoB;AAClB,YAAIC,aAAa,yFAAAxG,CAAehG,OAAf,EAAwB,YAAxB,EAAsCoD,MAAtC,CAAjB;AACA,YAAIqJ,cAAc,yFAAAzG,CAAehG,OAAf,EAAwB,aAAxB,EAAuCoD,MAAvC,CAAlB;AACA,YAAIsJ,YAAY,yFAAA1G,CAAehG,OAAf,EAAwB,WAAxB,EAAqCoD,MAArC,CAAhB;AACA,YAAIuJ,eAAe,yFAAA3G,CAAehG,OAAf,EAAwB,cAAxB,EAAwCoD,MAAxC,CAAnB;AACApB,iBAASwK,aAAaC,WAAtB;AACA9F,kBAAU+F,YAAYC,YAAtB;AACD;;AAED,aAAO;AACL3K,oBADK;AAEL2E;AAFK,OAAP;AAID;;AAED;;;;;;;;;;qCAOwB8D,Q,EAAUtC,Q,EAAU;AAC1C,UAAIyE,OAAO,KAAX;;AAEA;AACA,UAAIC,OAAOpC,SAASjF,GAAT,CAAa,UAACxF,OAAD,EAAa;AACnC,YAAIuC,QAAQvC,QAAQuC,KAApB;AACA,YAAIuK,WAAWvK,MAAMwK,kBAArB;AACA,YAAIC,QAAQzK,MAAM6F,eAAlB;;AAEA;AACA7F,cAAMwK,kBAAN,GAA2BH,IAA3B;AACArK,cAAM6F,eAAN,GAAwBwE,IAAxB;;AAEA,eAAO;AACLE,4BADK;AAELE;AAFK,SAAP;AAID,OAbU,CAAX;;AAeA7E;;AAEA;AACAsC,eAAS,CAAT,EAAYpI,WAAZ,CAtB0C,CAsBjB;;AAEzB;AACAoI,eAAS3G,OAAT,CAAiB,UAAC9D,OAAD,EAAU0H,CAAV,EAAgB;AAC/B1H,gBAAQuC,KAAR,CAAcwK,kBAAd,GAAmCF,KAAKnF,CAAL,EAAQoF,QAA3C;AACA9M,gBAAQuC,KAAR,CAAc6F,eAAd,GAAgCyE,KAAKnF,CAAL,EAAQsF,KAAxC;AACD,OAHD;AAID;;;;;;AAGHjN,QAAQuI,WAAR,GAAsB,8DAAtB;;AAEAvI,QAAQQ,SAAR,GAAoB,KAApB;AACAR,QAAQqE,oBAAR,GAA+B,QAA/B;;AAEA;;;AAGArE,QAAQ6K,SAAR,GAAoB;AAClBC,UAAQ,gBADU;AAElBuB,WAAS;AAFS,CAApB;;AAKA;AACArM,QAAQuB,OAAR,GAAkB,yDAAlB;;AAEA;AACAvB,QAAQE,OAAR,GAAkB;AAChB;AACAI,SAAON,QAAQQ,SAFC;;AAIhB;AACAkC,SAAO,GALS;;AAOhB;AACAC,UAAQ,MARQ;;AAUhB;AACA6C,gBAAc,GAXE;;AAahB;AACA;AACApE,SAAO,IAfS;;AAiBhB;AACA;AACA4E,eAAa,CAnBG;;AAqBhB;AACA;AACAD,eAAa,CAvBG;;AAyBhB;AACA;AACAxB,aAAW,IA3BK;;AA6BhB;AACA;AACA0E,UAAQ,CA/BQ;;AAiChB;AACA;AACAzC,mBAAiB,IAnCD;;AAqChB;AACA;AACAnE,eAAa,IAvCG;;AAyChB;AACA;AACAU,YAAU,kDA3CM;;AA6ChB;AACAC,gBAAc,GA9CE;;AAgDhB;AACAiE,iBAAe,EAjDC;;AAmDhB;AACAC,oBAAkB,GApDF;;AAsDhB;AACA9B,iBAAe;AAvDC,CAAlB;;AA0DA;AACApF,QAAQkN,OAAR,GAAkB,uDAAlB;AACAlN,QAAQmN,QAAR,GAAmB,yDAAnB;AACAnN,QAAQoN,eAAR,GAA0B,+DAA1B;AACApN,QAAQqN,uBAAR,GAAkC,uEAAlC;AACArN,QAAQsN,gBAAR,GAA2B,gEAA3B;;AAEA,8DAAetN,OAAf,C;;;;;;ACzlCA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;8CCvCA;;AAEA;;AAEA;AACA;AACA;;AAEA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,CAAC;AACD;AACA;;;;;;;;;;AC5DA,IAAIC,UAAUsN,SAASC,IAAT,IAAiBD,SAASE,eAAxC;AACA,IAAIC,IAAIH,SAASI,aAAT,CAAuB,KAAvB,CAAR;AACAD,EAAElL,KAAF,CAAQoL,OAAR,GAAkB,+CAAlB;AACA3N,QAAQ4N,WAAR,CAAoBH,CAApB;;AAEA,IAAIzL,QAAQN,OAAOG,gBAAP,CAAwB4L,CAAxB,EAA2B,IAA3B,EAAiCzL,KAA7C;AACA,IAAI6L,MAAM7L,UAAU,MAApB;;AAEAhC,QAAQmM,WAAR,CAAoBsB,CAApB;;AAEA,wDAAeI,GAAf,C;;;;;;;;;;ACXA;;AAEA;AACA;;AAEA;;;;;;;;;;AAUe,SAAS7H,cAAT,CAAwBhG,OAAxB,EAAiCuC,KAAjC,EACsC;AAAA,MAAjDa,MAAiD,uEAAxC1B,OAAOG,gBAAP,CAAwB7B,OAAxB,EAAiC,IAAjC,CAAwC;;AACnD,MAAIpB,QAAQ,mFAAAR,CAAUgF,OAAOb,KAAP,CAAV,CAAZ;;AAEA;AACA,MAAI,CAAC,+DAAD,IAAmCA,UAAU,OAAjD,EAA0D;AACxD3D,aAAS,mFAAAR,CAAUgF,OAAO0K,WAAjB,IACP,mFAAA1P,CAAUgF,OAAO2K,YAAjB,CADO,GAEP,mFAAA3P,CAAUgF,OAAO4K,eAAjB,CAFO,GAGP,mFAAA5P,CAAUgF,OAAO6K,gBAAjB,CAHF;AAID,GALD,MAKO,IAAI,CAAC,+DAAD,IAAmC1L,UAAU,QAAjD,EAA2D;AAChE3D,aAAS,mFAAAR,CAAUgF,OAAO8K,UAAjB,IACP,mFAAA9P,CAAUgF,OAAO+K,aAAjB,CADO,GAEP,mFAAA/P,CAAUgF,OAAOgL,cAAjB,CAFO,GAGP,mFAAAhQ,CAAUgF,OAAOiL,iBAAjB,CAHF;AAID;;AAED,SAAOzP,KAAP;AACD,C;;;;;;;;;;;;ACjCD;;AAEA;;AAEA,SAASQ,QAAT,CAAkBC,KAAlB,EAAyB;AACvB,SAAOC,KAAKC,GAAL,CAASC,KAAT,CAAeF,IAAf,EAAqBD,KAArB,CAAP;AACD;;AAED,SAASiP,QAAT,CAAkBjP,KAAlB,EAAyB;AACvB,SAAOC,KAAKyH,GAAL,CAASvH,KAAT,CAAeF,IAAf,EAAqBD,KAArB,CAAP;AACD;;AAED;;;;;;;;;;AAUO,SAASuJ,eAAT,OAAsF;AAAA,MAA3DZ,QAA2D,QAA3DA,QAA2D;AAAA,MAAjDnB,SAAiD,QAAjDA,SAAiD;AAAA,MAAtCgC,QAAsC,QAAtCA,QAAsC;AAAA,MAA5BC,KAA4B,QAA5BA,KAA4B;AAAA,MAArBC,SAAqB,QAArBA,SAAqB;AAAA,MAAVC,MAAU,QAAVA,MAAU;;AAC3F,MAAIuF,OAAOC,cAAcxG,SAAShG,KAAvB,EAA8B6G,QAA9B,EAAwCC,KAAxC,EAA+CC,SAA/C,CAAX;AACA,MAAI0F,OAAOC,sBAAsB7H,SAAtB,EAAiC0H,IAAjC,EAAuCzF,KAAvC,CAAX;AACA,MAAI6F,mBAAmBC,eAAeH,IAAf,EAAqBzF,MAArB,CAAvB;;AAEA;AACA,MAAInB,QAAQ,IAAI,uDAAJ,CACVvI,KAAKgH,KAAL,CAAWuC,WAAW8F,gBAAtB,CADU,EAEVrP,KAAKgH,KAAL,CAAWmI,KAAKE,gBAAL,CAAX,CAFU,CAAZ;;AAIA;AACA;AACA;AACA,MAAIE,YAAYJ,KAAKE,gBAAL,IAAyB3G,SAASrB,MAAlD;AACA,OAAK,IAAIe,IAAI,CAAb,EAAgBA,IAAI6G,IAApB,EAA0B7G,GAA1B,EAA+B;AAC7Bb,cAAU8H,mBAAmBjH,CAA7B,IAAkCmH,SAAlC;AACD;;AAED,SAAOhH,KAAP;AACD;;AAED;;;;;;;;AAQO,SAAS2G,aAAT,CAAuBM,SAAvB,EAAkChJ,WAAlC,EAA+CiJ,OAA/C,EAAwDhG,SAAxD,EAAmE;AACxE,MAAIiG,aAAaF,YAAYhJ,WAA7B;;AAEA;AACA;AACA;AACA,MAAIxG,KAAK+G,GAAL,CAAS/G,KAAKgH,KAAL,CAAW0I,UAAX,IAAyBA,UAAlC,IAAgDjG,SAApD,EAA+D;AAC7D;AACAiG,iBAAa1P,KAAKgH,KAAL,CAAW0I,UAAX,CAAb;AACD;;AAED;AACA,SAAO1P,KAAKyH,GAAL,CAASzH,KAAK2P,IAAL,CAAUD,UAAV,CAAT,EAAgCD,OAAhC,CAAP;AACD;;AAED;;;;;;AAMO,SAASL,qBAAT,CAA+B7H,SAA/B,EAA0CmI,UAA1C,EAAsDD,OAAtD,EAA+D;AACpE;AACA,MAAIC,eAAe,CAAnB,EAAsB;AACpB,WAAOnI,SAAP;AACD;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAIqI,YAAY,EAAhB;;AAEA;AACA,OAAK,IAAIxH,IAAI,CAAb,EAAgBA,KAAKqH,UAAUC,UAA/B,EAA2CtH,GAA3C,EAAgD;AAC9C;AACAwH,cAAUjL,IAAV,CAAe7E,SAASyH,UAAU3H,KAAV,CAAgBwI,CAAhB,EAAmBA,IAAIsH,UAAvB,CAAT,CAAf;AACD;;AAED,SAAOE,SAAP;AACD;;AAED;;;;;;;;AAQO,SAASN,cAAT,CAAwB/H,SAAxB,EAAmCmC,MAAnC,EAA2C;AAChD,MAAImG,cAAcb,SAASzH,SAAT,CAAlB;AACA,OAAK,IAAIa,IAAI,CAAR,EAAW0H,MAAMvI,UAAUjH,MAAhC,EAAwC8H,IAAI0H,GAA5C,EAAiD1H,GAAjD,EAAsD;AACpD,QAAIb,UAAUa,CAAV,KAAgByH,cAAcnG,MAA9B,IAAwCnC,UAAUa,CAAV,KAAgByH,cAAcnG,MAA1E,EAAkF;AAChF,aAAOtB,CAAP;AACD;AACF;;AAED,SAAO,CAAP;AACD,C;;;;;;;;;AChID;;AAEA,IAAIyC,cAAc,EAAlB;AACA,IAAIkF,YAAY,eAAhB;AACA,IAAI1H,QAAQ,CAAZ;;AAEA,SAAS2H,QAAT,GAAoB;AAClB,SAAOD,YAAY1H,OAAnB;AACD;;AAEM,SAAS6B,eAAT,CAAyBxJ,OAAzB,EAAkCmI,QAAlC,EAA4C;AACjD,MAAIrI,KAAKwP,UAAT;AACA,MAAIC,WAAW,SAAXA,QAAW,CAAC9F,GAAD,EAAS;AACtB,QAAIA,IAAI+F,aAAJ,KAAsB/F,IAAIgG,MAA9B,EAAsC;AACpCC,0BAAoB5P,EAApB;AACAqI,eAASsB,GAAT;AACD;AACF,GALD;;AAOAzJ,UAAQ2B,gBAAR,CAAyB0N,SAAzB,EAAoCE,QAApC;;AAEApF,cAAYrK,EAAZ,IAAkB,EAAEE,gBAAF,EAAWuP,kBAAX,EAAlB;;AAEA,SAAOzP,EAAP;AACD;;AAEM,SAAS4P,mBAAT,CAA6B5P,EAA7B,EAAiC;AACtC,MAAIqK,YAAYrK,EAAZ,CAAJ,EAAqB;AACnBqK,gBAAYrK,EAAZ,EAAgBE,OAAhB,CAAwBgM,mBAAxB,CAA4CqD,SAA5C,EAAuDlF,YAAYrK,EAAZ,EAAgByP,QAAvE;AACApF,gBAAYrK,EAAZ,IAAkB,IAAlB;AACA,WAAO,IAAP;AACD;;AAED,SAAO,KAAP;AACD,C;;;;;;;;;;;;;AClCD;AACA;;AAEA,IAAIA,KAAK,CAAT;;IAEMwI,W;AACJ,uBAAYtI,OAAZ,EAAqB;AAAA;;AACnB,SAAKF,EAAL,GAAUA,IAAV;AACA,SAAKE,OAAL,GAAeA,OAAf;AACA,SAAK2F,SAAL,GAAiB,IAAjB;AACD;;;;2BAEM;AACL,WAAKA,SAAL,GAAiB,IAAjB;AACA,WAAK3F,OAAL,CAAaoB,SAAb,CAAuBiL,MAAvB,CAA8B,yDAAA/K,CAAQ3C,MAAtC;AACA,WAAKqB,OAAL,CAAaoB,SAAb,CAAuBC,GAAvB,CAA2B,yDAAAC,CAAQ5C,OAAnC;AACD;;;2BAEM;AACL,WAAKiH,SAAL,GAAiB,KAAjB;AACA,WAAK3F,OAAL,CAAaoB,SAAb,CAAuBiL,MAAvB,CAA8B,yDAAA/K,CAAQ5C,OAAtC;AACA,WAAKsB,OAAL,CAAaoB,SAAb,CAAuBC,GAAvB,CAA2B,yDAAAC,CAAQ3C,MAAnC;AACD;;;2BAEM;AACL,WAAKgR,UAAL,CAAgB,CAAC,yDAAArO,CAAQ7C,YAAT,EAAuB,yDAAA6C,CAAQ5C,OAA/B,CAAhB;AACA,WAAK2J,QAAL,CAAcC,YAAYC,GAAZ,CAAgBqH,OAA9B;AACA,WAAK7H,KAAL,GAAaO,YAAYG,KAAZ,CAAkB/J,OAA/B;AACA,WAAKmJ,KAAL,GAAa,IAAI,uDAAJ,EAAb;AACD;;;+BAEUgI,O,EAAS;AAAA;;AAClBA,cAAQ/L,OAAR,CAAgB,UAACgM,SAAD,EAAe;AAC7B,cAAK9P,OAAL,CAAaoB,SAAb,CAAuBC,GAAvB,CAA2ByO,SAA3B;AACD,OAFD;AAGD;;;kCAEaD,O,EAAS;AAAA;;AACrBA,cAAQ/L,OAAR,CAAgB,UAACgM,SAAD,EAAe;AAC7B,eAAK9P,OAAL,CAAaoB,SAAb,CAAuBiL,MAAvB,CAA8ByD,SAA9B;AACD,OAFD;AAGD;;;6BAEQpQ,G,EAAK;AACZ,WAAK,IAAIqQ,GAAT,IAAgBrQ,GAAhB,EAAqB;AACnB,aAAKM,OAAL,CAAauC,KAAb,CAAmBwN,GAAnB,IAA0BrQ,IAAIqQ,GAAJ,CAA1B;AACD;AACF;;;8BAES;AACR,WAAKC,aAAL,CAAmB,CACjB,yDAAA1O,CAAQ3C,MADS,EAEjB,yDAAA2C,CAAQ5C,OAFS,EAGjB,yDAAA4C,CAAQ7C,YAHS,CAAnB;;AAMA,WAAKuB,OAAL,CAAasM,eAAb,CAA6B,OAA7B;AACA,WAAKtM,OAAL,GAAe,IAAf;AACD;;;;;;AAGHsI,YAAYC,GAAZ,GAAkB;AAChBqH,WAAS;AACPvM,cAAU,UADH;AAEPgG,SAAK,CAFE;AAGPD,UAAM,CAHC;AAIP6G,gBAAY,SAJL;AAKP,mBAAe;AALR,GADO;AAQhBvR,WAAS;AACPgK,YAAQ;AACNwH,eAAS,CADH;AAEND,kBAAY;AAFN,KADD;AAKPzH,WAAO;AALA,GARO;AAehB7J,UAAQ;AACN+J,YAAQ;AACNwH,eAAS;AADH,KADF;AAIN1H,WAAO;AACLyH,kBAAY;AADP;AAJD;AAfQ,CAAlB;;AAyBA3H,YAAYG,KAAZ,GAAoB;AAClB/J,WAAS,CADS;AAElBC,UAAQ;AAFU,CAApB;;AAKA,wDAAe2J,WAAf,C;;;;;;;;;;AC3FA;;AAEA;;AAEA;AACA,SAAS6H,SAAT,CAAmB9Q,KAAnB,EAA0B;AACxB,MAAI+Q,GAAJ;AACA,MAAIC,OAAJ;AACA,MAAIhH,MAAMhK,MAAMO,MAAhB;;AAEA,MAAI,CAACyJ,GAAL,EAAU;AACR,WAAOhK,KAAP;AACD;;AAED,SAAO,EAAEgK,GAAT,EAAc;AACZgH,cAAU/Q,KAAKmH,KAAL,CAAWnH,KAAKgR,MAAL,MAAiBjH,MAAM,CAAvB,CAAX,CAAV;AACA+G,UAAM/Q,MAAMgR,OAAN,CAAN;AACAhR,UAAMgR,OAAN,IAAiBhR,MAAMgK,GAAN,CAAjB;AACAhK,UAAMgK,GAAN,IAAa+G,GAAb;AACD;;AAED,SAAO/Q,KAAP;AACD;;AAED,IAAIkR,WAAW;AACb;AACAC,WAAS,KAFI;;AAIb;AACA9K,MAAI,IALS;;AAOb;AACAyK,aAAW,KARE;;AAUb;AACA;AACAJ,OAAK;AAZQ,CAAf;;AAeA;AACe,SAAStK,MAAT,CAAgBgL,GAAhB,EAAqBxQ,OAArB,EAA8B;AAC3C,MAAIyJ,OAAO,6CAAAxJ,CAAMqQ,QAAN,EAAgBtQ,OAAhB,CAAX;AACA,MAAIyQ,WAAW,GAAGxR,KAAH,CAASC,IAAT,CAAcsR,GAAd,CAAf;AACA,MAAIE,SAAS,KAAb;;AAEA,MAAI,CAACF,IAAI7Q,MAAT,EAAiB;AACf,WAAO,EAAP;AACD;;AAED,MAAI8J,KAAKyG,SAAT,EAAoB;AAClB,WAAOA,UAAUM,GAAV,CAAP;AACD;;AAED;AACA;AACA,MAAI,OAAO/G,KAAKhE,EAAZ,KAAmB,UAAvB,EAAmC;AACjC+K,QAAIvF,IAAJ,CAAS,UAAU5M,CAAV,EAAaC,CAAb,EAAgB;;AAEvB;AACA,UAAIoS,MAAJ,EAAY;AACV,eAAO,CAAP;AACD;;AAED,UAAIC,OAAOlH,KAAKhE,EAAL,CAAQpH,EAAEoL,KAAKqG,GAAP,CAAR,CAAX;AACA,UAAIc,OAAOnH,KAAKhE,EAAL,CAAQnH,EAAEmL,KAAKqG,GAAP,CAAR,CAAX;;AAEA;AACA,UAAIa,SAASE,SAAT,IAAsBD,SAASC,SAAnC,EAA8C;AAC5CH,iBAAS,IAAT;AACA,eAAO,CAAP;AACD;;AAED,UAAIC,OAAOC,IAAP,IAAeD,SAAS,WAAxB,IAAuCC,SAAS,UAApD,EAAgE;AAC9D,eAAO,CAAC,CAAR;AACD;;AAED,UAAID,OAAOC,IAAP,IAAeD,SAAS,UAAxB,IAAsCC,SAAS,WAAnD,EAAgE;AAC9D,eAAO,CAAP;AACD;;AAED,aAAO,CAAP;AACD,KAzBD;AA0BD;;AAED;AACA,MAAIF,MAAJ,EAAY;AACV,WAAOD,QAAP;AACD;;AAED,MAAIhH,KAAK8G,OAAT,EAAkB;AAChBC,QAAID,OAAJ;AACD;;AAED,SAAOC,GAAP;AACD,C;;;;;;AC9FD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;;;;;;;AC3CA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA,C;;;;;;AC5BA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,YAAY,SAAS;AACrB;;AAEA;AACA,gCAAgC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC/BA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;ACpBAM,OAAOC,OAAP,GAAiB,mBAAAC,CAAQ,CAAR,EAAqBC,OAAtC,C","file":"shuffle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"shuffle\"] = factory();\n\telse\n\t\troot[\"shuffle\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 2bda26189da0ab787d25","'use strict';\n\nimport getNumber from './get-number';\n\n/**\n * Represents a coordinate pair.\n * @param {number} [x=0] X.\n * @param {number} [y=0] Y.\n */\nconst Point = function (x, y) {\n this.x = getNumber(x);\n this.y = getNumber(y);\n};\n\n/**\n * Whether two points are equal.\n * @param {Point} a Point A.\n * @param {Point} b Point B.\n * @return {boolean}\n */\nPoint.equals = function (a, b) {\n return a.x === b.x && a.y === b.y;\n};\n\nexport default Point;\n\n\n\n// WEBPACK FOOTER //\n// ./src/point.js","export default {\n BASE: 'shuffle',\n SHUFFLE_ITEM: 'shuffle-item',\n VISIBLE: 'shuffle-item--visible',\n HIDDEN: 'shuffle-item--hidden',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/classes.js","'use strict';\n\n/**\n * Always returns a numeric value, given a value. Logic from jQuery's `isNumeric`.\n * @param {*} value Possibly numeric value.\n * @return {number} `value` or zero if `value` isn't numeric.\n */\nexport default function getNumber(value) {\n return parseFloat(value) || 0;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/get-number.js","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/xtend/immutable.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nimport 'custom-event-polyfill';\nimport matches from 'matches-selector';\nimport arrayUnique from 'array-uniq';\nimport xtend from 'xtend';\nimport throttle from 'throttleit';\nimport parallel from 'array-parallel';\nimport Point from './point';\nimport ShuffleItem from './shuffle-item';\nimport Classes from './classes';\nimport getNumberStyle from './get-number-style';\nimport sorter from './sorter';\nimport { onTransitionEnd, cancelTransitionEnd } from './on-transition-end';\nimport { getItemPosition, getColumnSpan, getAvailablePositions, getShortColumn } from './layout';\n\nfunction toArray(arrayLike) {\n return Array.prototype.slice.call(arrayLike);\n}\n\nfunction arrayMax(array) {\n return Math.max.apply(Math, array);\n}\n\nfunction arrayIncludes(array, obj) {\n if (arguments.length === 2) {\n return arrayIncludes(array)(obj);\n }\n\n return function (obj) {\n return array.indexOf(obj) > -1;\n };\n}\n\n// Used for unique instance variables\nlet id = 0;\n\nclass Shuffle {\n\n /**\n * Categorize, sort, and filter a responsive grid of items.\n *\n * @param {Element} element An element which is the parent container for the grid items.\n * @param {Object} [options=Shuffle.options] Options object.\n * @constructor\n */\n constructor(element, options = {}) {\n this.options = xtend(Shuffle.options, options);\n\n this.useSizer = false;\n this.lastSort = {};\n this.group = this.lastFilter = Shuffle.ALL_ITEMS;\n this.isEnabled = true;\n this.isDestroyed = false;\n this.isInitialized = false;\n this._transitions = [];\n this.isTransitioning = false;\n this._queue = [];\n\n element = this._getElementOption(element);\n\n if (!element) {\n throw new TypeError('Shuffle needs to be initialized with an element.');\n }\n\n this.element = element;\n this.id = 'shuffle_' + id++;\n\n this._init();\n this.isInitialized = true;\n }\n\n _init() {\n this.items = this._getItems();\n\n this.options.sizer = this._getElementOption(this.options.sizer);\n\n if (this.options.sizer) {\n this.useSizer = true;\n }\n\n // Add class and invalidate styles\n this.element.classList.add(Shuffle.Classes.BASE);\n\n // Set initial css for each item\n this._initItems();\n\n // Bind resize events\n this._onResize = this._getResizeFunction();\n window.addEventListener('resize', this._onResize);\n\n // Get container css all in one request. Causes reflow\n var containerCss = window.getComputedStyle(this.element, null);\n var containerWidth = Shuffle.getSize(this.element).width;\n\n // Add styles to the container if it doesn't have them.\n this._validateStyles(containerCss);\n\n // We already got the container's width above, no need to cause another\n // reflow getting it again... Calculate the number of columns there will be\n this._setColumns(containerWidth);\n\n // Kick off!\n this.filter(this.options.group, this.options.initialSort);\n\n // The shuffle items haven't had transitions set on them yet so the user\n // doesn't see the first layout. Set them now that the first layout is done.\n // First, however, a synchronous layout must be caused for the previous\n // styles to be applied without transitions.\n this.element.offsetWidth; // jshint ignore: line\n this._setTransitions();\n this.element.style.transition = 'height ' + this.options.speed + 'ms ' + this.options.easing;\n }\n\n /**\n * Returns a throttled and proxied function for the resize handler.\n * @return {Function}\n * @private\n */\n _getResizeFunction() {\n var resizeFunction = this._handleResize.bind(this);\n return this.options.throttle ?\n this.options.throttle(resizeFunction, this.options.throttleTime) :\n resizeFunction;\n }\n\n /**\n * Retrieve an element from an option.\n * @param {string|jQuery|Element} option The option to check.\n * @return {?Element} The plain element or null.\n * @private\n */\n _getElementOption(option) {\n // If column width is a string, treat is as a selector and search for the\n // sizer element within the outermost container\n if (typeof option === 'string') {\n return this.element.querySelector(option);\n\n // Check for an element\n } else if (option && option.nodeType && option.nodeType === 1) {\n return option;\n\n // Check for jQuery object\n } else if (option && option.jquery) {\n return option[0];\n }\n\n return null;\n }\n\n /**\n * Ensures the shuffle container has the css styles it needs applied to it.\n * @param {Object} styles Key value pairs for position and overflow.\n * @private\n */\n _validateStyles(styles) {\n // Position cannot be static.\n if (styles.position === 'static') {\n this.element.style.position = 'relative';\n }\n\n // Overflow has to be hidden.\n if (styles.overflow !== 'hidden') {\n this.element.style.overflow = 'hidden';\n }\n }\n\n /**\n * Filter the elements by a category.\n * @param {string} [category] Category to filter by. If it's given, the last\n * category will be used to filter the items.\n * @param {Array} [collection] Optionally filter a collection. Defaults to\n * all the items.\n * @return {!{visible: Array, hidden: Array}}\n * @private\n */\n _filter(category = this.lastFilter, collection = this.items) {\n var set = this._getFilteredSets(category, collection);\n\n // Individually add/remove hidden/visible classes\n this._toggleFilterClasses(set);\n\n // Save the last filter in case elements are appended.\n this.lastFilter = category;\n\n // This is saved mainly because providing a filter function (like searching)\n // will overwrite the `lastFilter` property every time its called.\n if (typeof category === 'string') {\n this.group = category;\n }\n\n return set;\n }\n\n /**\n * Returns an object containing the visible and hidden elements.\n * @param {string|Function} category Category or function to filter by.\n * @param {Array.<Element>} items A collection of items to filter.\n * @return {!{visible: Array, hidden: Array}}\n * @private\n */\n _getFilteredSets(category, items) {\n let visible = [];\n let hidden = [];\n\n // category === 'all', add visible class to everything\n if (category === Shuffle.ALL_ITEMS) {\n visible = items;\n\n // Loop through each item and use provided function to determine\n // whether to hide it or not.\n } else {\n items.forEach((item) => {\n if (this._doesPassFilter(category, item.element)) {\n visible.push(item);\n } else {\n hidden.push(item);\n }\n });\n }\n\n return {\n visible,\n hidden,\n };\n }\n\n /**\n * Test an item to see if it passes a category.\n * @param {string|Function} category Category or function to filter by.\n * @param {Element} element An element to test.\n * @return {boolean} Whether it passes the category/filter.\n * @private\n */\n _doesPassFilter(category, element) {\n\n if (typeof category === 'function') {\n return category.call(element, element, this);\n\n // Check each element's data-groups attribute against the given category.\n } else {\n let attr = element.getAttribute('data-' + Shuffle.FILTER_ATTRIBUTE_KEY);\n let keys = this.options.delimeter ?\n attr.split(this.options.delimeter) :\n JSON.parse(attr);\n\n if (Array.isArray(category)) {\n return category.some(arrayIncludes(keys));\n }\n\n return arrayIncludes(keys, category);\n }\n }\n\n /**\n * Toggles the visible and hidden class names.\n * @param {{visible, hidden}} Object with visible and hidden arrays.\n * @private\n */\n _toggleFilterClasses({ visible, hidden }) {\n visible.forEach((item) => {\n item.show();\n });\n\n hidden.forEach((item) => {\n item.hide();\n });\n }\n\n /**\n * Set the initial css for each item\n * @param {Array.<ShuffleItem>} [items] Optionally specifiy at set to initialize.\n * @private\n */\n _initItems(items = this.items) {\n items.forEach((item) => {\n item.init();\n });\n }\n\n /**\n * Remove element reference and styles.\n * @private\n */\n _disposeItems(items = this.items) {\n items.forEach((item) => {\n item.dispose();\n });\n }\n\n /**\n * Updates the visible item count.\n * @private\n */\n _updateItemCount() {\n this.visibleItems = this._getFilteredItems().length;\n }\n\n /**\n * Sets css transform transition on a group of elements. This is not executed\n * at the same time as `item.init` so that transitions don't occur upon\n * initialization of Shuffle.\n * @param {Array.<ShuffleItem>} items Shuffle items to set transitions on.\n * @private\n */\n _setTransitions(items = this.items) {\n let speed = this.options.speed;\n let easing = this.options.easing;\n\n var str;\n if (this.options.useTransforms) {\n str = 'transform ' + speed + 'ms ' + easing +\n ', opacity ' + speed + 'ms ' + easing;\n } else {\n str = 'top ' + speed + 'ms ' + easing +\n ', left ' + speed + 'ms ' + easing +\n ', opacity ' + speed + 'ms ' + easing;\n }\n\n items.forEach((item) => {\n item.element.style.transition = str;\n });\n }\n\n _getItems() {\n return toArray(this.element.children)\n .filter(el => matches(el, this.options.itemSelector))\n .map(el => new ShuffleItem(el));\n }\n\n /**\n * When new elements are added to the shuffle container, update the array of\n * items because that is the order `_layout` calls them.\n */\n _updateItemsOrder() {\n let children = this.element.children;\n this.items = sorter(this.items, {\n by(element) {\n return Array.prototype.indexOf.call(children, element);\n },\n });\n }\n\n _getFilteredItems() {\n return this.items.filter(item => item.isVisible);\n }\n\n _getConcealedItems() {\n return this.items.filter(item => !item.isVisible);\n }\n\n /**\n * Returns the column size, based on column width and sizer options.\n * @param {number} containerWidth Size of the parent container.\n * @param {number} gutterSize Size of the gutters.\n * @return {number}\n * @private\n */\n _getColumnSize(containerWidth, gutterSize) {\n var size;\n\n // If the columnWidth property is a function, then the grid is fluid\n if (typeof this.options.columnWidth === 'function') {\n size = this.options.columnWidth(containerWidth);\n\n // columnWidth option isn't a function, are they using a sizing element?\n } else if (this.useSizer) {\n size = Shuffle.getSize(this.options.sizer).width;\n\n // if not, how about the explicitly set option?\n } else if (this.options.columnWidth) {\n size = this.options.columnWidth;\n\n // or use the size of the first item\n } else if (this.items.length > 0) {\n size = Shuffle.getSize(this.items[0].element, true).width;\n\n // if there's no items, use size of container\n } else {\n size = containerWidth;\n }\n\n // Don't let them set a column width of zero.\n if (size === 0) {\n size = containerWidth;\n }\n\n return size + gutterSize;\n }\n\n /**\n * Returns the gutter size, based on gutter width and sizer options.\n * @param {number} containerWidth Size of the parent container.\n * @return {number}\n * @private\n */\n _getGutterSize(containerWidth) {\n var size;\n if (typeof this.options.gutterWidth === 'function') {\n size = this.options.gutterWidth(containerWidth);\n } else if (this.useSizer) {\n size = getNumberStyle(this.options.sizer, 'marginLeft');\n } else {\n size = this.options.gutterWidth;\n }\n\n return size;\n }\n\n /**\n * Calculate the number of columns to be used. Gets css if using sizer element.\n * @param {number} [containerWidth] Optionally specify a container width if\n * it's already available.\n */\n _setColumns(containerWidth = Shuffle.getSize(this.element).width) {\n var gutter = this._getGutterSize(containerWidth);\n var columnWidth = this._getColumnSize(containerWidth, gutter);\n var calculatedColumns = (containerWidth + gutter) / columnWidth;\n\n // Widths given from getStyles are not precise enough...\n if (Math.abs(Math.round(calculatedColumns) - calculatedColumns) <\n this.options.columnThreshold) {\n // e.g. calculatedColumns = 11.998876\n calculatedColumns = Math.round(calculatedColumns);\n }\n\n this.cols = Math.max(Math.floor(calculatedColumns), 1);\n this.containerWidth = containerWidth;\n this.colWidth = columnWidth;\n }\n\n /**\n * Adjust the height of the grid\n */\n _setContainerSize() {\n this.element.style.height = this._getContainerSize() + 'px';\n }\n\n /**\n * Based on the column heights, it returns the biggest one.\n * @return {number}\n * @private\n */\n _getContainerSize() {\n return arrayMax(this.positions);\n }\n\n /**\n * Get the clamped stagger amount.\n * @param {number} index Index of the item to be staggered.\n * @return {number}\n */\n _getStaggerAmount(index) {\n return Math.min(index * this.options.staggerAmount, this.options.staggerAmountMax);\n }\n\n /**\n * @return {boolean} Whether the event was prevented or not.\n */\n _dispatch(name, details = {}) {\n if (this.isDestroyed) {\n return;\n }\n\n details.shuffle = this;\n return !this.element.dispatchEvent(new CustomEvent(name, {\n bubbles: true,\n cancelable: false,\n detail: details,\n }));\n }\n\n /**\n * Zeros out the y columns array, which is used to determine item placement.\n * @private\n */\n _resetCols() {\n var i = this.cols;\n this.positions = [];\n while (i--) {\n this.positions.push(0);\n }\n }\n\n /**\n * Loops through each item that should be shown and calculates the x, y position.\n * @param {Array.<ShuffleItem>} items Array of items that will be shown/layed\n * out in order in their array.\n */\n _layout(items) {\n let count = 0;\n items.forEach((item) => {\n var currPos = item.point;\n var currScale = item.scale;\n var itemSize = Shuffle.getSize(item.element, true);\n var pos = this._getItemPosition(itemSize);\n\n function callback() {\n item.element.style.transitionDelay = '';\n item.applyCss(ShuffleItem.Css.VISIBLE.after);\n }\n\n // If the item will not change its position, do not add it to the render\n // queue. Transitions don't fire when setting a property to the same value.\n if (Point.equals(currPos, pos) && currScale === ShuffleItem.Scale.VISIBLE) {\n callback();\n return;\n }\n\n item.point = pos;\n item.scale = ShuffleItem.Scale.VISIBLE;\n\n // Use xtend here to clone the object so that the `before` object isn't\n // modified when the transition delay is added.\n let styles = xtend(ShuffleItem.Css.VISIBLE.before);\n styles.transitionDelay = this._getStaggerAmount(count) + 'ms';\n\n this._queue.push({\n item,\n styles,\n callback,\n });\n\n count++;\n });\n }\n\n /**\n * Determine the location of the next item, based on its size.\n * @param {{width: number, height: number}} itemSize Object with width and height.\n * @return {Point}\n * @private\n */\n _getItemPosition(itemSize) {\n return getItemPosition({\n itemSize,\n positions: this.positions,\n gridSize: this.colWidth,\n total: this.cols,\n threshold: this.options.columnThreshold,\n buffer: this.options.buffer,\n });\n }\n\n /**\n * Hides the elements that don't match our filter.\n * @param {Array.<ShuffleItem>} collection Collection to shrink.\n * @private\n */\n _shrink(collection = this._getConcealedItems()) {\n let count = 0;\n collection.forEach((item) => {\n function callback() {\n item.applyCss(ShuffleItem.Css.HIDDEN.after);\n }\n\n // Continuing would add a transitionend event listener to the element, but\n // that listener would not execute because the transform and opacity would\n // stay the same.\n // The callback is executed here because it is not guaranteed to be called\n // after the transitionend event because the transitionend could be\n // canceled if another animation starts.\n if (item.scale === ShuffleItem.Scale.HIDDEN) {\n callback();\n return;\n }\n\n item.scale = ShuffleItem.Scale.HIDDEN;\n\n let styles = xtend(ShuffleItem.Css.HIDDEN.before);\n styles.transitionDelay = this._getStaggerAmount(count) + 'ms';\n\n this._queue.push({\n item,\n styles,\n callback,\n });\n\n count++;\n });\n }\n\n /**\n * Resize handler.\n * @private\n */\n _handleResize() {\n // If shuffle is disabled, destroyed, don't do anything\n if (!this.isEnabled || this.isDestroyed) {\n return;\n }\n\n // Will need to check height in the future if it's layed out horizontaly\n var containerWidth = Shuffle.getSize(this.element).width;\n\n // containerWidth hasn't changed, don't do anything\n if (containerWidth === this.containerWidth) {\n return;\n }\n\n this.update();\n }\n\n /**\n * Returns styles which will be applied to the an item for a transition.\n * @param {Object} obj Transition options.\n * @return {!Object} Transforms for transitions, left/top for animate.\n * @private\n */\n _getStylesForTransition({ item, styles }) {\n if (!styles.transitionDelay) {\n styles.transitionDelay = '0ms';\n }\n\n let x = item.point.x;\n let y = item.point.y;\n\n if (this.options.useTransforms) {\n styles.transform = `translate(${x}px, ${y}px) scale(${item.scale})`;\n } else {\n styles.left = x + 'px';\n styles.top = y + 'px';\n }\n\n return styles;\n }\n\n /**\n * Listen for the transition end on an element and execute the itemCallback\n * when it finishes.\n * @param {Element} element Element to listen on.\n * @param {Function} itemCallback Callback for the item.\n * @param {Function} done Callback to notify `parallel` that this one is done.\n */\n _whenTransitionDone(element, itemCallback, done) {\n let id = onTransitionEnd(element, (evt) => {\n itemCallback();\n done(null, evt);\n });\n\n this._transitions.push(id);\n }\n\n /**\n * Return a function which will set CSS styles and call the `done` function\n * when (if) the transition finishes.\n * @param {Object} opts Transition object.\n * @return {Function} A function to be called with a `done` function.\n */\n _getTransitionFunction(opts) {\n return (done) => {\n opts.item.applyCss(this._getStylesForTransition(opts));\n this._whenTransitionDone(opts.item.element, opts.callback, done);\n };\n }\n\n /**\n * Execute the styles gathered in the style queue. This applies styles to elements,\n * triggering transitions.\n * @private\n */\n _processQueue() {\n if (this.isTransitioning) {\n this._cancelMovement();\n }\n\n let hasSpeed = this.options.speed > 0;\n let hasQueue = this._queue.length > 0;\n\n if (hasQueue && hasSpeed && this.isInitialized) {\n this._startTransitions(this._queue);\n\n } else if (hasQueue) {\n this._styleImmediately(this._queue);\n this._dispatchLayout();\n\n // A call to layout happened, but none of the newly visible items will\n // change position or the transition duration is zero, which will not trigger\n // the transitionend event.\n } else {\n this._dispatchLayout();\n }\n\n // Remove everything in the style queue\n this._queue.length = 0;\n }\n\n /**\n * Wait for each transition to finish, the emit the layout event.\n * @param {Array.<Object>} transitions Array of transition objects.\n */\n _startTransitions(transitions) {\n // Set flag that shuffle is currently in motion.\n this.isTransitioning = true;\n\n // Create an array of functions to be called.\n let callbacks = transitions.map(obj => this._getTransitionFunction(obj));\n\n parallel(callbacks, this._movementFinished.bind(this));\n }\n\n _cancelMovement() {\n // Remove the transition end event for each listener.\n this._transitions.forEach(cancelTransitionEnd);\n\n // Reset the array.\n this._transitions.length = 0;\n\n // Show it's no longer active.\n this.isTransitioning = false;\n }\n\n /**\n * Apply styles without a transition.\n * @param {Array.<Object>} objects Array of transition objects.\n * @private\n */\n _styleImmediately(objects) {\n if (objects.length) {\n let elements = objects.map(obj => obj.item.element);\n\n Shuffle._skipTransitions(elements, () => {\n objects.forEach((obj) => {\n obj.item.applyCss(this._getStylesForTransition(obj));\n obj.callback();\n });\n });\n }\n }\n\n _movementFinished() {\n this._transitions.length = 0;\n this.isTransitioning = false;\n this._dispatchLayout();\n }\n\n _dispatchLayout() {\n this._dispatch(Shuffle.EventType.LAYOUT);\n }\n\n /**\n * The magic. This is what makes the plugin 'shuffle'\n * @param {string|Function|Array.<string>} [category] Category to filter by.\n * Can be a function, string, or array of strings.\n * @param {Object} [sortObj] A sort object which can sort the visible set\n */\n filter(category, sortObj) {\n if (!this.isEnabled) {\n return;\n }\n\n if (!category || (category && category.length === 0)) {\n category = Shuffle.ALL_ITEMS;\n }\n\n this._filter(category);\n\n // Shrink each hidden item\n this._shrink();\n\n // How many visible elements?\n this._updateItemCount();\n\n // Update transforms on visible elements so they will animate to their new positions.\n this.sort(sortObj);\n }\n\n /**\n * Gets the visible elements, sorts them, and passes them to layout.\n * @param {Object} opts the options object for the sorted plugin\n */\n sort(opts = this.lastSort) {\n if (!this.isEnabled) {\n return;\n }\n\n this._resetCols();\n\n var items = this._getFilteredItems();\n items = sorter(items, opts);\n\n this._layout(items);\n\n // `_layout` always happens after `_shrink`, so it's safe to process the style\n // queue here with styles from the shrink method.\n this._processQueue();\n\n // Adjust the height of the container.\n this._setContainerSize();\n\n this.lastSort = opts;\n }\n\n /**\n * Reposition everything.\n * @param {boolean} isOnlyLayout If true, column and gutter widths won't be\n * recalculated.\n */\n update(isOnlyLayout) {\n if (this.isEnabled) {\n\n if (!isOnlyLayout) {\n // Get updated colCount\n this._setColumns();\n }\n\n // Layout items\n this.sort();\n }\n }\n\n /**\n * Use this instead of `update()` if you don't need the columns and gutters updated\n * Maybe an image inside `shuffle` loaded (and now has a height), which means calculations\n * could be off.\n */\n layout() {\n this.update(true);\n }\n\n /**\n * New items have been appended to shuffle. Mix them in with the current\n * filter or sort status.\n * @param {Array.<Element>} newItems Collection of new items.\n */\n add(newItems) {\n newItems = arrayUnique(newItems).map(el => new ShuffleItem(el));\n\n // Add classes and set initial positions.\n this._initItems(newItems);\n\n // Add transition to each item.\n this._setTransitions(newItems);\n\n // Update the list of items.\n this.items = this.items.concat(newItems);\n this._updateItemsOrder();\n this.filter(this.lastFilter);\n }\n\n /**\n * Disables shuffle from updating dimensions and layout on resize\n */\n disable() {\n this.isEnabled = false;\n }\n\n /**\n * Enables shuffle again\n * @param {boolean} [isUpdateLayout=true] if undefined, shuffle will update columns and gutters\n */\n enable(isUpdateLayout) {\n this.isEnabled = true;\n if (isUpdateLayout !== false) {\n this.update();\n }\n }\n\n /**\n * Remove 1 or more shuffle items\n * @param {Array.<Element>} collection An array containing one or more\n * elements in shuffle\n * @return {Shuffle} The shuffle object\n */\n remove(collection) {\n if (!collection.length) {\n return;\n }\n\n collection = arrayUnique(collection);\n\n let oldItems = collection\n .map(element => this.getItemByElement(element))\n .filter(item => !!item);\n\n let handleLayout = () => {\n this.element.removeEventListener(Shuffle.EventType.LAYOUT, handleLayout);\n this._disposeItems(oldItems);\n\n // Remove the collection in the callback\n collection.forEach((element) => {\n element.parentNode.removeChild(element);\n });\n\n this._dispatch(Shuffle.EventType.REMOVED, { collection });\n\n // Let it get garbage collected\n collection = null;\n oldItems = null;\n };\n\n // Hide collection first.\n this._toggleFilterClasses({\n visible: [],\n hidden: oldItems,\n });\n\n this._shrink(oldItems);\n\n this.sort();\n\n // Update the list of items here because `remove` could be called again\n // with an item that is in the process of being removed.\n this.items = this.items.filter(item => !arrayIncludes(oldItems, item));\n this._updateItemCount();\n\n this.element.addEventListener(Shuffle.EventType.LAYOUT, handleLayout);\n }\n\n /**\n * Retrieve a shuffle item by its element.\n * @param {Element} element Element to look for.\n * @return {?ShuffleItem} A shuffle item or null if it's not found.\n */\n getItemByElement(element) {\n for (var i = this.items.length - 1; i >= 0; i--) {\n if (this.items[i].element === element) {\n return this.items[i];\n }\n }\n\n return null;\n }\n\n /**\n * Destroys shuffle, removes events, styles, and classes\n */\n destroy() {\n this._cancelMovement();\n window.removeEventListener('resize', this._onResize);\n\n // Reset container styles\n this.element.classList.remove('shuffle');\n this.element.removeAttribute('style');\n\n // Reset individual item styles\n this._disposeItems();\n\n // Null DOM references\n this.items = null;\n this.options.sizer = null;\n this.element = null;\n this._transitions = null;\n\n // Set a flag so if a debounced resize has been triggered,\n // it can first check if it is actually isDestroyed and not doing anything\n this.isDestroyed = true;\n }\n\n /**\n * Returns the outer width of an element, optionally including its margins.\n *\n * There are a few different methods for getting the width of an element, none of\n * which work perfectly for all Shuffle's use cases.\n *\n * 1. getBoundingClientRect() `left` and `right` properties.\n * - Accounts for transform scaled elements, making it useless for Shuffle\n * elements which have shrunk.\n * 2. The `offsetWidth` property.\n * - This value stays the same regardless of the elements transform property,\n * however, it does not return subpixel values.\n * 3. getComputedStyle()\n * - This works great Chrome, Firefox, Safari, but IE<=11 does not include\n * padding and border when box-sizing: border-box is set, requiring a feature\n * test and extra work to add the padding back for IE and other browsers which\n * follow the W3C spec here.\n *\n * @param {Element} element The element.\n * @param {boolean} [includeMargins] Whether to include margins. Default is false.\n * @return {{width: number, height: number}} The width and height.\n */\n static getSize(element, includeMargins) {\n // Store the styles so that they can be used by others without asking for it again.\n var styles = window.getComputedStyle(element, null);\n var width = getNumberStyle(element, 'width', styles);\n var height = getNumberStyle(element, 'height', styles);\n\n if (includeMargins) {\n var marginLeft = getNumberStyle(element, 'marginLeft', styles);\n var marginRight = getNumberStyle(element, 'marginRight', styles);\n var marginTop = getNumberStyle(element, 'marginTop', styles);\n var marginBottom = getNumberStyle(element, 'marginBottom', styles);\n width += marginLeft + marginRight;\n height += marginTop + marginBottom;\n }\n\n return {\n width,\n height,\n };\n }\n\n /**\n * Change a property or execute a function which will not have a transition\n * @param {Array.<Element>} elements DOM elements that won't be transitioned.\n * @param {Function} callback A function which will be called while transition\n * is set to 0ms.\n * @private\n */\n static _skipTransitions(elements, callback) {\n let zero = '0ms';\n\n // Save current duration and delay.\n let data = elements.map((element) => {\n let style = element.style;\n let duration = style.transitionDuration;\n let delay = style.transitionDelay;\n\n // Set the duration to zero so it happens immediately\n style.transitionDuration = zero;\n style.transitionDelay = zero;\n\n return {\n duration,\n delay,\n };\n });\n\n callback();\n\n // Cause reflow.\n elements[0].offsetWidth; // jshint ignore:line\n\n // Put the duration back\n elements.forEach((element, i) => {\n element.style.transitionDuration = data[i].duration;\n element.style.transitionDelay = data[i].delay;\n });\n }\n}\n\nShuffle.ShuffleItem = ShuffleItem;\n\nShuffle.ALL_ITEMS = 'all';\nShuffle.FILTER_ATTRIBUTE_KEY = 'groups';\n\n/**\n * @enum {string}\n */\nShuffle.EventType = {\n LAYOUT: 'shuffle:layout',\n REMOVED: 'shuffle:removed',\n};\n\n/** @enum {string} */\nShuffle.Classes = Classes;\n\n// Overrideable options\nShuffle.options = {\n // Initial filter group.\n group: Shuffle.ALL_ITEMS,\n\n // Transition/animation speed (milliseconds).\n speed: 250,\n\n // CSS easing function to use.\n easing: 'ease',\n\n // e.g. '.picture-item'.\n itemSelector: '*',\n\n // Element or selector string. Use an element to determine the size of columns\n // and gutters.\n sizer: null,\n\n // A static number or function that tells the plugin how wide the gutters\n // between columns are (in pixels).\n gutterWidth: 0,\n\n // A static number or function that returns a number which tells the plugin\n // how wide the columns are (in pixels).\n columnWidth: 0,\n\n // If your group is not json, and is comma delimeted, you could set delimeter\n // to ','.\n delimeter: null,\n\n // Useful for percentage based heights when they might not always be exactly\n // the same (in pixels).\n buffer: 0,\n\n // Reading the width of elements isn't precise enough and can cause columns to\n // jump between values.\n columnThreshold: 0.01,\n\n // Shuffle can be isInitialized with a sort object. It is the same object\n // given to the sort method.\n initialSort: null,\n\n // By default, shuffle will throttle resize events. This can be changed or\n // removed.\n throttle: throttle,\n\n // How often shuffle can be called on resize (in milliseconds).\n throttleTime: 300,\n\n // Transition delay offset for each item in milliseconds.\n staggerAmount: 15,\n\n // Maximum stagger delay in milliseconds.\n staggerAmountMax: 250,\n\n // Whether to use transforms or absolute positioning.\n useTransforms: true,\n};\n\n// Expose for testing. Hack at your own risk.\nShuffle.__Point = Point;\nShuffle.__sorter = sorter;\nShuffle.__getColumnSpan = getColumnSpan;\nShuffle.__getAvailablePositions = getAvailablePositions;\nShuffle.__getShortColumn = getShortColumn;\n\nexport default Shuffle;\n\n\n\n// WEBPACK FOOTER //\n// ./src/shuffle.js","module.exports = function parallel(fns, context, callback) {\n if (!callback) {\n if (typeof context === 'function') {\n callback = context\n context = null\n } else {\n callback = noop\n }\n }\n\n var pending = fns && fns.length\n if (!pending) return callback(null, []);\n\n var finished = false\n var results = new Array(pending)\n\n fns.forEach(context ? function (fn, i) {\n fn.call(context, maybeDone(i))\n } : function (fn, i) {\n fn(maybeDone(i))\n })\n\n function maybeDone(i) {\n return function (err, result) {\n if (finished) return;\n\n if (err) {\n callback(err, results)\n finished = true\n return\n }\n\n results[i] = result\n\n if (!--pending) callback(null, results);\n }\n }\n}\n\nfunction noop() {}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/array-parallel/index.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n// there's 3 implementations written in increasing order of efficiency\n\n// 1 - no Set type is defined\nfunction uniqNoSet(arr) {\n\tvar ret = [];\n\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (ret.indexOf(arr[i]) === -1) {\n\t\t\tret.push(arr[i]);\n\t\t}\n\t}\n\n\treturn ret;\n}\n\n// 2 - a simple Set type is defined\nfunction uniqSet(arr) {\n\tvar seen = new Set();\n\treturn arr.filter(function (el) {\n\t\tif (!seen.has(el)) {\n\t\t\tseen.add(el);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n\n// 3 - a standard Set type is defined and it has a forEach method\nfunction uniqSetWithForEach(arr) {\n\tvar ret = [];\n\n\t(new Set(arr)).forEach(function (el) {\n\t\tret.push(el);\n\t});\n\n\treturn ret;\n}\n\n// V8 currently has a broken implementation\n// https://github.com/joyent/node/issues/8449\nfunction doesForEachActuallyWork() {\n\tvar ret = false;\n\n\t(new Set([true])).forEach(function (el) {\n\t\tret = el;\n\t});\n\n\treturn ret === true;\n}\n\nif ('Set' in global) {\n\tif (typeof Set.prototype.forEach === 'function' && doesForEachActuallyWork()) {\n\t\tmodule.exports = uniqSetWithForEach;\n\t} else {\n\t\tmodule.exports = uniqSet;\n\t}\n} else {\n\tmodule.exports = uniqNoSet;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/array-uniq/index.js\n// module id = 6\n// module chunks = 0","\nlet element = document.body || document.documentElement;\nlet e = document.createElement('div');\ne.style.cssText = 'width:10px;padding:2px;box-sizing:border-box;';\nelement.appendChild(e);\n\nlet width = window.getComputedStyle(e, null).width;\nlet ret = width === '10px';\n\nelement.removeChild(e);\n\nexport default ret;\n\n\n\n// WEBPACK FOOTER //\n// ./src/computed-size.js","'use strict';\n\nimport getNumber from './get-number';\nimport COMPUTED_SIZE_INCLUDES_PADDING from './computed-size';\n\n/**\n * Retrieve the computed style for an element, parsed as a float.\n * @param {Element} element Element to get style for.\n * @param {string} style Style property.\n * @param {CSSStyleDeclaration} [styles] Optionally include clean styles to\n * use instead of asking for them again.\n * @return {number} The parsed computed value or zero if that fails because IE\n * will return 'auto' when the element doesn't have margins instead of\n * the computed style.\n */\nexport default function getNumberStyle(element, style,\n styles = window.getComputedStyle(element, null)) {\n var value = getNumber(styles[style]);\n\n // Support IE<=11 and W3C spec.\n if (!COMPUTED_SIZE_INCLUDES_PADDING && style === 'width') {\n value += getNumber(styles.paddingLeft) +\n getNumber(styles.paddingRight) +\n getNumber(styles.borderLeftWidth) +\n getNumber(styles.borderRightWidth);\n } else if (!COMPUTED_SIZE_INCLUDES_PADDING && style === 'height') {\n value += getNumber(styles.paddingTop) +\n getNumber(styles.paddingBottom) +\n getNumber(styles.borderTopWidth) +\n getNumber(styles.borderBottomWidth);\n }\n\n return value;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/get-number-style.js","'use strict';\n\nimport Point from './point';\n\nfunction arrayMax(array) {\n return Math.max.apply(Math, array);\n}\n\nfunction arrayMin(array) {\n return Math.min.apply(Math, array);\n}\n\n/**\n * Determine the location of the next item, based on its size.\n * @param {Object} itemSize Object with width and height.\n * @param {Array.<number>} positions Positions of the other current items.\n * @param {number} gridSize The column width or row height.\n * @param {number} total The total number of columns or rows.\n * @param {number} threshold Buffer value for the column to fit.\n * @param {number} buffer Vertical buffer for the height of items.\n * @return {Point}\n */\nexport function getItemPosition({ itemSize, positions, gridSize, total, threshold, buffer }) {\n var span = getColumnSpan(itemSize.width, gridSize, total, threshold);\n var setY = getAvailablePositions(positions, span, total);\n var shortColumnIndex = getShortColumn(setY, buffer);\n\n // Position the item\n var point = new Point(\n Math.round(gridSize * shortColumnIndex),\n Math.round(setY[shortColumnIndex]));\n\n // Update the columns array with the new values for each column.\n // e.g. before the update the columns could be [250, 0, 0, 0] for an item\n // which spans 2 columns. After it would be [250, itemHeight, itemHeight, 0].\n var setHeight = setY[shortColumnIndex] + itemSize.height;\n for (var i = 0; i < span; i++) {\n positions[shortColumnIndex + i] = setHeight;\n }\n\n return point;\n}\n\n/**\n * Determine the number of columns an items spans.\n * @param {number} itemWidth Width of the item.\n * @param {number} columnWidth Width of the column (includes gutter).\n * @param {number} columns Total number of columns\n * @param {number} threshold A buffer value for the size of the column to fit.\n * @return {number}\n */\nexport function getColumnSpan(itemWidth, columnWidth, columns, threshold) {\n var columnSpan = itemWidth / columnWidth;\n\n // If the difference between the rounded column span number and the\n // calculated column span number is really small, round the number to\n // make it fit.\n if (Math.abs(Math.round(columnSpan) - columnSpan) < threshold) {\n // e.g. columnSpan = 4.0089945390298745\n columnSpan = Math.round(columnSpan);\n }\n\n // Ensure the column span is not more than the amount of columns in the whole layout.\n return Math.min(Math.ceil(columnSpan), columns);\n}\n\n/**\n * Retrieves the column set to use for placement.\n * @param {number} columnSpan The number of columns this current item spans.\n * @param {number} columns The total columns in the grid.\n * @return {Array.<number>} An array of numbers represeting the column set.\n */\nexport function getAvailablePositions(positions, columnSpan, columns) {\n // The item spans only one column.\n if (columnSpan === 1) {\n return positions;\n }\n\n // The item spans more than one column, figure out how many different\n // places it could fit horizontally.\n // The group count is the number of places within the positions this block\n // could fit, ignoring the current positions of items.\n // Imagine a 2 column brick as the second item in a 4 column grid with\n // 10px height each. Find the places it would fit:\n // [20, 10, 10, 0]\n // | | |\n // * * *\n //\n // Then take the places which fit and get the bigger of the two:\n // max([20, 10]), max([10, 10]), max([10, 0]) = [20, 10, 0]\n //\n // Next, find the first smallest number (the short column).\n // [20, 10, 0]\n // |\n // *\n //\n // And that's where it should be placed!\n //\n // Another example where the second column's item extends past the first:\n // [10, 20, 10, 0] => [20, 20, 10] => 10\n var available = [];\n\n // For how many possible positions for this item there are.\n for (var i = 0; i <= columns - columnSpan; i++) {\n // Find the bigger value for each place it could fit.\n available.push(arrayMax(positions.slice(i, i + columnSpan)));\n }\n\n return available;\n}\n\n/**\n * Find index of short column, the first from the left where this item will go.\n *\n * @param {Array.<number>} positions The array to search for the smallest number.\n * @param {number} buffer Optional buffer which is very useful when the height\n * is a percentage of the width.\n * @return {number} Index of the short column.\n */\nexport function getShortColumn(positions, buffer) {\n var minPosition = arrayMin(positions);\n for (var i = 0, len = positions.length; i < len; i++) {\n if (positions[i] >= minPosition - buffer && positions[i] <= minPosition + buffer) {\n return i;\n }\n }\n\n return 0;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/layout.js","'use strict';\n\nlet transitions = {};\nlet eventName = 'transitionend';\nlet count = 0;\n\nfunction uniqueId() {\n return eventName + count++;\n}\n\nexport function onTransitionEnd(element, callback) {\n let id = uniqueId();\n let listener = (evt) => {\n if (evt.currentTarget === evt.target) {\n cancelTransitionEnd(id);\n callback(evt);\n }\n };\n\n element.addEventListener(eventName, listener);\n\n transitions[id] = { element, listener };\n\n return id;\n}\n\nexport function cancelTransitionEnd(id) {\n if (transitions[id]) {\n transitions[id].element.removeEventListener(eventName, transitions[id].listener);\n transitions[id] = null;\n return true;\n }\n\n return false;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/on-transition-end.js","import Point from './point';\nimport Classes from './classes';\n\nlet id = 0;\n\nclass ShuffleItem {\n constructor(element) {\n this.id = id++;\n this.element = element;\n this.isVisible = true;\n }\n\n show() {\n this.isVisible = true;\n this.element.classList.remove(Classes.HIDDEN);\n this.element.classList.add(Classes.VISIBLE);\n }\n\n hide() {\n this.isVisible = false;\n this.element.classList.remove(Classes.VISIBLE);\n this.element.classList.add(Classes.HIDDEN);\n }\n\n init() {\n this.addClasses([Classes.SHUFFLE_ITEM, Classes.VISIBLE]);\n this.applyCss(ShuffleItem.Css.INITIAL);\n this.scale = ShuffleItem.Scale.VISIBLE;\n this.point = new Point();\n }\n\n addClasses(classes) {\n classes.forEach((className) => {\n this.element.classList.add(className);\n });\n }\n\n removeClasses(classes) {\n classes.forEach((className) => {\n this.element.classList.remove(className);\n });\n }\n\n applyCss(obj) {\n for (var key in obj) {\n this.element.style[key] = obj[key];\n }\n }\n\n dispose() {\n this.removeClasses([\n Classes.HIDDEN,\n Classes.VISIBLE,\n Classes.SHUFFLE_ITEM,\n ]);\n\n this.element.removeAttribute('style');\n this.element = null;\n }\n}\n\nShuffleItem.Css = {\n INITIAL: {\n position: 'absolute',\n top: 0,\n left: 0,\n visibility: 'visible',\n 'will-change': 'transform',\n },\n VISIBLE: {\n before: {\n opacity: 1,\n visibility: 'visible',\n },\n after: {},\n },\n HIDDEN: {\n before: {\n opacity: 0,\n },\n after: {\n visibility: 'hidden',\n },\n },\n};\n\nShuffleItem.Scale = {\n VISIBLE: 1,\n HIDDEN: 0.001,\n};\n\nexport default ShuffleItem;\n\n\n\n// WEBPACK FOOTER //\n// ./src/shuffle-item.js","'use strict';\n\nimport xtend from 'xtend';\n\n// http://stackoverflow.com/a/962890/373422\nfunction randomize(array) {\n var tmp;\n var current;\n let top = array.length;\n\n if (!top) {\n return array;\n }\n\n while (--top) {\n current = Math.floor(Math.random() * (top + 1));\n tmp = array[current];\n array[current] = array[top];\n array[top] = tmp;\n }\n\n return array;\n}\n\nlet defaults = {\n // Use array.reverse() to reverse the results\n reverse: false,\n\n // Sorting function\n by: null,\n\n // If true, this will skip the sorting and return a randomized order in the array\n randomize: false,\n\n // Determines which property of each item in the array is passed to the\n // sorting method.\n key: 'element',\n};\n\n// You can return `undefined` from the `by` function to revert to DOM order.\nexport default function sorter(arr, options) {\n let opts = xtend(defaults, options);\n let original = [].slice.call(arr);\n let revert = false;\n\n if (!arr.length) {\n return [];\n }\n\n if (opts.randomize) {\n return randomize(arr);\n }\n\n // Sort the elements by the opts.by function.\n // If we don't have opts.by, default to DOM order\n if (typeof opts.by === 'function') {\n arr.sort(function (a, b) {\n\n // Exit early if we already know we want to revert\n if (revert) {\n return 0;\n }\n\n let valA = opts.by(a[opts.key]);\n let valB = opts.by(b[opts.key]);\n\n // If both values are undefined, use the DOM order\n if (valA === undefined && valB === undefined) {\n revert = true;\n return 0;\n }\n\n if (valA < valB || valA === 'sortFirst' || valB === 'sortLast') {\n return -1;\n }\n\n if (valA > valB || valA === 'sortLast' || valB === 'sortFirst') {\n return 1;\n }\n\n return 0;\n });\n }\n\n // Revert to the original array if necessary\n if (revert) {\n return original;\n }\n\n if (opts.reverse) {\n arr.reverse();\n }\n\n return arr;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/sorter.js","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/custom-event-polyfill/custom-event-polyfill.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nvar proto = Element.prototype;\nvar vendor = proto.matches\n || proto.matchesSelector\n || proto.webkitMatchesSelector\n || proto.mozMatchesSelector\n || proto.msMatchesSelector\n || proto.oMatchesSelector;\n\nmodule.exports = match;\n\n/**\n * Match `el` to `selector`.\n *\n * @param {Element} el\n * @param {String} selector\n * @return {Boolean}\n * @api public\n */\n\nfunction match(el, selector) {\n if (vendor) return vendor.call(el, selector);\n var nodes = el.parentNode.querySelectorAll(selector);\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i] == el) return true;\n }\n return false;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/matches-selector/index.js\n// module id = 14\n// module chunks = 0","module.exports = throttle;\n\n/**\n * Returns a new function that, when invoked, invokes `func` at most once per `wait` milliseconds.\n *\n * @param {Function} func Function to wrap.\n * @param {Number} wait Number of milliseconds that must elapse between `func` invocations.\n * @return {Function} A new function that wraps the `func` function passed in.\n */\n\nfunction throttle (func, wait) {\n var ctx, args, rtn, timeoutID; // caching\n var last = 0;\n\n return function throttled () {\n ctx = this;\n args = arguments;\n var delta = new Date() - last;\n if (!timeoutID)\n if (delta >= wait) call();\n else timeoutID = setTimeout(call, wait - delta);\n return rtn;\n };\n\n function call () {\n timeoutID = 0;\n last = +new Date();\n rtn = func.apply(ctx, args);\n ctx = null;\n args = null;\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/throttleit/index.js\n// module id = 15\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 16\n// module chunks = 0","module.exports = require('./shuffle').default;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js"],"sourceRoot":""}