{"version":3,"file":"kendo.groupable.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendogroupable","js","this","$","undefined$1","kendo","window","Widget","ui","outerWidth","_outerWidth","kendoAttr","attr","extend","each","isRtl","ASCENDING","GROUP_SORT","DROP_CONTAINER","hint","target","title","htmlEncode","html","prepend","icon","iconClass","dropCue","removeText","element","contents","filter","nodeType","remove","Groupable","init","options","draggable","horizontalCuePosition","that","group","guid","intializePositions","_intializePositions","bind","_dropCuePositions","fn","call","support","Draggable","draggableElements","groupContainer","kendoDropTarget","dragenter","e","_canDrag","currentTarget","find","css","appendTo","dragleave","drop","position","targetElement","field","colID","sourceIndicator","indicator","dropCuePositions","lastCuePosition","length","method","parentLeft","parent","left","sortOptions","sort","data","dir","hasClass","_dropCuePosition","getOffset","parseInt","_canDrop","before","buildIndicator","wrapper","_setIndicatorSortOptions","_change","_messageContainer","_list","show","add","kendoDraggable","dragcancel","_dragCancel","dragstart","marginLeft","elementPosition","dragend","_dragEnd","drag","_drag","allowDrag","preventDefault","dataSource","addClass","_createList","_refreshHandler","unbind","refresh","groups","fieldAttr","titleAttr","items","hide","index","compare","_invalidateGroupContainer","destroy","off","events","name","messages","empty","enableContextMenu","indicators","grep","item","removeHandler","_removeIndicator","sender","clickHandler","dirIcon","newDir","originalEvent","closest","id","kendoChip","label","removable","size","click","actions","first","ns","aggregates","names","idx","map","cell","aggregate","member","split","push","toArray","descriptors","indicatorSortOptions","trigger","removeData","is","Math","ceil","right","marginRight","event","x","location","source","next","dropped","list","text","kendoChipList","selectable","insertBefore","plugin","jQuery"],"sources":["kendo.groupable.js"],"mappings":"CAAA,SAAWA,EAAQC,GACI,iBAAZC,SAA0C,oBAAXC,OAAyBA,OAAOD,QAAUD,EAAQG,QAAQ,iBAAkBA,QAAQ,wBAAyBA,QAAQ,iBAAkBA,QAAQ,qBAAsBA,QAAQ,mBACjM,mBAAXC,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,iBAAkB,wBAAyB,iBAAkB,qBAAsB,mBAAoBJ,KAC3JD,EAA+B,oBAAfO,WAA6BA,WAAaP,GAAUQ,MAAcC,eAAiBT,EAAOS,gBAAkB,CAAC,EAAGT,EAAOS,eAAeC,GAAKT,IAC/J,CAJD,CAIGU,MAAM,WAggBL,OAvfA,SAAUC,EAAGC,GACT,IAAIC,EAAQC,OAAOD,MACfE,EAASF,EAAMG,GAAGD,OAClBE,EAAaJ,EAAMK,YACnBC,EAAYN,EAAMO,KAClBC,EAASV,EAAEU,OACXC,EAAOX,EAAEW,KACTC,GAAQ,EAKRC,EAAY,MAGZC,EAAa,aACbC,EAAiB,4BAGjBC,EAAO,SAASC,GACZ,IAAIC,EAAQD,EAAOR,KAAKP,EAAMO,KAAK,UAKnC,OAJIS,IACAA,EAAQhB,EAAMiB,WAAWD,IAGtBlB,EAAE,4CACJoB,KAAKF,GAASD,EAAOR,KAAKP,EAAMO,KAAK,WACrCY,QAAQnB,EAAMG,GAAGiB,KAAK,CAAEA,KAAM,SAAUC,UAAW,kBAC5D,EACAC,EAAUxB,EAAE,sCAGhB,SAASyB,EAAWC,GAChBA,EAAQC,WAAWC,QAAO,WACtB,OAAyB,IAAlB7B,KAAK8B,QAChB,IAAGC,QACP,CAEA,IAAIC,EAAY3B,EAAOM,OAAO,CAC1BsB,KAAM,SAASN,EAASO,GACpB,IAGIC,EACAC,EAJAC,EAAOrC,KACPsC,EAAQnC,EAAMoC,OACdC,EAAqBH,EAAKI,oBAAoBC,KAAKL,GAGhCA,EAAKM,kBAAoB,GAEhDtC,EAAOuC,GAAGX,KAAKY,KAAKR,EAAMV,EAASO,GAEnCrB,EAAQV,EAAM2C,QAAQjC,MAAMc,GAC5BS,EAAwBvB,EAAQ,QAAU,OAE1CwB,EAAKF,UAAYA,EAAYE,EAAKH,QAAQC,WAAa,IAAIhC,EAAMG,GAAGyC,UAAUV,EAAKV,QAAS,CACxFE,OAAQQ,EAAKH,QAAQc,kBACrB/B,KAAMA,EACNqB,MAAOA,IAGXD,EAAKY,eAAiBhD,EAAEoC,EAAKH,QAAQe,eAAgBZ,EAAKV,SACrDuB,gBAAgB,CACbZ,MAAOH,EAAUD,QAAQI,MACzBa,UAAW,SAASC,GACZf,EAAKgB,SAASD,EAAEjB,UAAUmB,iBAC1BnD,EAAMG,GAAGiB,KAAK6B,EAAEjB,UAAUlB,KAAKsC,KAAK,kBAAmB,CAAEhC,KAAM,SAC/DE,EAAQ+B,IAAIpB,EAAuB,GAAGqB,SAASpB,EAAKY,gBAE5D,EACAS,UAAW,SAASN,GAChBjD,EAAMG,GAAGiB,KAAK6B,EAAEjB,UAAUlB,KAAKsC,KAAK,kBAAmB,CAAEhC,KAAM,WAE/DE,EAAQM,QACZ,EACA4B,KAAM,SAASP,GACX,IAOIQ,EAPAC,EAAgBT,EAAEjB,UAAUmB,cAC5BQ,EAAQD,EAAcnD,KAAKP,EAAMO,KAAK,UACtCS,EAAQ0C,EAAcnD,KAAKP,EAAMO,KAAK,UACtCqD,EAAQF,EAAcnD,KAAK,MAC3BsD,EAAkB3B,EAAK4B,UAAUH,GACjCI,EAAmB7B,EAAKM,kBACxBwB,EAAkBD,EAAiBA,EAAiBE,OAAS,GAE7DC,EAAS,QACTC,EAAazD,IAAUsD,EAAkB,EAAIA,EAAgBxC,QAAQ4C,SAASX,WAAWY,KACzFC,EAAc9D,EAAO,CAAC,EAAG0B,EAAKH,QAAQwC,KAAMb,EAAcc,KAAK5D,IAC/D6D,EAAMH,EAAYG,KAEjBf,EAAcgB,SAAS,WAAcxC,EAAKgB,SAASQ,MAGpDM,GACAP,EAAWvB,EAAKyC,iBAAiB3E,EAAM4E,UAAUtD,GAAS+C,KAAOF,EAAaU,SAASb,EAAgBxC,QAAQ6B,IAAI,cAAe,KAAO3C,GAAS,EAAI,GAAKmE,SAASb,EAAgBxC,QAAQ6B,IAAI,eAAgB,OAChMnB,EAAK4C,SAAShF,EAAE+D,GAAkBJ,EAASjC,QAASiC,EAASY,QACrEZ,EAASsB,SACTb,EAAS,UAGbT,EAASjC,QAAQ0C,GAAQL,GAAmB3B,EAAK8C,eAAerB,EAAO3C,EAAOyD,EAAKb,GAAOqB,SAC1F/C,EAAKgD,yBAAyBvB,EAAOW,GACrCpC,EAAKiD,YAGT5D,EAAWW,EAAKkD,mBAChBlD,EAAKmD,MAAM7D,QAAQ8D,OACnBpD,EAAKmD,MAAME,IAAIrD,EAAK8C,eAAerB,EAAO3C,EAAOyD,EAAKb,GAAOpC,SAC7DU,EAAKgD,yBAAyBvB,EAAOW,GACrCpC,EAAKiD,WAEb,IAEHK,eAAe,CACZ9D,OAAQ,aACRZ,KAAMA,EACNqB,MAAOH,EAAUD,QAAQI,MACzBsD,WAAYvD,EAAKwD,YAAYnD,KAAKL,GAClCyD,UAAW,SAAS1C,GAChB,IAAIzB,EAAUyB,EAAEE,cACZyC,EAAaf,SAASrD,EAAQ6B,IAAI,cAAe,IACjDwC,EAAkBrE,EAAQiC,WAC1BY,EAAO3D,EAAQmF,EAAgBxB,KAAOuB,EAAaC,EAAgBxB,KAAOjE,EAAWoB,GAEzFa,IACAf,EAAQ+B,IAAI,OAAQgB,GAAMf,SAASpB,EAAKY,gBACxC9C,EAAMG,GAAGiB,KAAKvB,KAAKiB,KAAKsC,KAAK,kBAAmB,CAAEhC,KAAM,QAC5D,EACA0E,QAAS,WACL5D,EAAK6D,SAASlG,KAClB,EACAmG,KAAM9D,EAAK+D,MAAM1D,KAAKL,KAG9BF,EAAUO,KAAK,CAAE,UAAW,aAAc,YAAa,QACvD,CACIuD,QAAS,WACL5D,EAAK6D,SAASlG,KAClB,EACA4F,WAAYvD,EAAKwD,YAAYnD,KAAKL,GAClCyD,UAAW,SAAS1C,GAEXf,EAAKH,QAAQmE,WAAchE,EAAKgB,SAASD,EAAEE,eAKhDd,IAJIY,EAAEkD,gBAKV,EACAH,KAAM9D,EAAK+D,MAAM1D,KAAKL,KAG1BA,EAAKkE,WAAalE,EAAKH,QAAQqE,WAC/BlE,EAAKkD,kBAAoBlD,EAAKY,eAAeM,KAAK,IAAMvC,GAEnDqB,EAAKkD,kBAAkBnB,SACxB/B,EAAKkD,kBAAoBtF,EAAE,UAAUuG,SAASxF,GAAgByC,SAASpB,EAAKY,iBAGhFZ,EAAKoE,cAEDpE,EAAKkE,YAAclE,EAAKqE,gBACxBrE,EAAKkE,WAAWI,OA5If,SA4I8BtE,EAAKqE,iBAEpCrE,EAAKqE,gBAAkBrE,EAAKuE,QAAQlE,KAAKL,GAGzCA,EAAKkE,aACLlE,EAAKkE,WAAW7D,KAAK,SAAUL,EAAKqE,iBACpCrE,EAAKuE,UAEb,EAEAA,QAAS,WACL,IAAIvE,EAAOrC,KAEP6G,EADaxE,EAAKkE,WACEjE,SAAW,GAC/BwE,EAAYrG,EAnKZ,SAoKAsG,EAAYtG,EAnKZ,SAqKA4B,EAAKY,iBACDZ,EAAKmD,QACLnD,EAAKmD,MAAMzD,OAAOM,EAAKmD,MAAMwB,SAC7B3E,EAAKmD,MAAM7D,QAAQsF,QAGnBJ,EAAOzC,QACP1C,EAAWW,EAAKkD,mBAGpB3E,EAAKiG,GAAQ,SAASK,EAAO5E,GACzB,IAAIwB,EAAQxB,EAAMwB,MACdc,EAAMtC,EAAMsC,IACZjD,EAAUU,EAAKV,QACd4B,KAAKlB,EAAKH,QAAQL,QAClBA,QAAO,WACJ,OAAO5B,EAAED,MAAMU,KAAKoG,KAAehD,CACvC,IACAG,EAAY5B,EAAK8C,eAAerB,EAAOnC,EAAQjB,KAAKqG,GAAYnC,EAAKjD,EAAQjB,KAAK,OAEtF2B,EAAKmD,MAAME,IAAIzB,EAAUtC,SACzBU,EAAKmD,MAAM7D,QAAQ8D,OACnBpD,EAAKgD,yBAAyBvB,EAAOnD,EAAO,CAAC,EAAG0B,EAAKH,QAAQwC,KAAM,CAAEE,IAAKA,EAAKuC,QAAS7E,EAAM6E,UAClG,KAGJ9E,EAAK+E,2BACT,EAEAC,QAAS,WACL,IAAIhF,EAAOrC,KAEXK,EAAOuC,GAAGyE,QAAQxE,KAAKR,GAEvBA,EAAKY,eAAeqE,IAjMnB,mBAmMGjF,EAAKY,eAAe0B,KAAK,oBACzBtC,EAAKY,eAAe0B,KAAK,mBAAmB0C,UAG5ChF,EAAKY,eAAe0B,KAAK,mBACzBtC,EAAKY,eAAe0B,KAAK,kBAAkB0C,UAG1ChF,EAAKH,QAAQC,WACdE,EAAKF,UAAUkF,UAGfhF,EAAKkE,YAAclE,EAAKqE,kBACxBrE,EAAKkE,WAAWI,OAAO,SAAUtE,EAAKqE,iBACtCrE,EAAKqE,gBAAkB,MAGvBrE,EAAKmD,OACLnD,EAAKmD,MAAM6B,UAGfhF,EAAKY,eAAiBZ,EAAKV,QAAUU,EAAKF,UAAY,IAC1D,EAEAoF,OAAQ,CAAC,SAAU,eAEnBrF,QAAS,CACLsF,KAAM,YACN3F,OAAQ,KACRmB,kBAAmB,KACnByE,SAAU,CACNC,MAAO,iEAEXhD,KAAM,CACFE,IAAK9D,EACLqG,QAAS,MAEbQ,mBAAmB,GAGvB1D,UAAW,SAASH,GAChB,IAAI8D,EAAa3H,EAAE,UAAWD,KAAKiD,gBACnC,OAAOhD,EAAE4H,KAAKD,GAAY,SAASE,GAE3B,OAAO7H,EAAE6H,GAAMpH,KAAKP,EAAMO,KAAK,YAAcoD,CACjD,IAAG,EACX,EAEAiE,cAAe,SAAS3E,GACTpD,KAENgI,iBAAiB5E,EAAE6E,OAAO7C,QACnC,EAEA8C,aAAc,SAAS9E,GACnB,IAEI+E,EADY/E,EAAE6E,OAAO7C,QACD7B,KAAK,gBACzB6E,EAASD,EAAQzH,KAAKD,EArQxB,UAqQ4CK,EAjQrC,OAiQ8DA,EAEnEb,EAAEmD,EAAEiF,cAAcnH,QAAQoH,QAAQ,6BAA6BlE,SAInE+D,EAAQzH,KAAKD,EA3QX,OA2Q2B2H,GATlBpI,KAUNsF,UACT,EAEAH,eAAgB,SAASrB,EAAO3C,EAAOyD,EAAK2D,GACxC,IACItE,EACA1C,EACA6D,EAHA/C,EAAOrC,KA+BX,OA1BA4E,EAAMA,IAAQvC,EAAKH,QAAQwC,MAAQ,CAAC,GAAGE,KAAO9D,EAe9CS,GADA6D,GAbAnB,EAAYhE,EAAE,UACGuI,UAAU,CACPjH,KAAM,SAA0B,QAAjBqD,GAAO,OAAkB,YAAc,cACtDpD,UAAW,cACXiH,MAAO,GAAGtH,GAAS2C,IACnB4E,WAAW,EACXC,KAAMtG,EAAKH,QAAQyG,MAAQ,SAC3B5G,OAAQM,EAAK0F,cAAcrF,KAAKL,GAChCuG,MAAOvG,EAAK6F,aAAaxF,KAAKL,GAC9BwG,QAASxG,EAAKH,QAAQyF,kBAAoB,CACtC,CAAEpG,KAAM,gBAAiBC,UAAW,6BACpC,OACLmD,KAAK,cACJS,SACL7B,KAAK,gBAAgBuF,QACpC1D,EAAQ1E,KAAK,QAAQP,EAAM4I,UAAWjF,GACtCsB,EAAQ1E,KAAK,QAAQP,EAAM4I,UAAW5H,GAAS,IAE3CoH,GACAnD,EAAQ1E,KAAK,QAAQP,EAAM4I,OAAQR,GAGvChH,EAAKb,KAAK,QAAS,WAAkB,OAAPkE,EAAe,YAAc,iBAC3DrD,EAAKb,KAAK,QAAQP,EAAM4I,QAASnE,GAE1BX,CACX,EAEAoB,yBAA0B,SAASvB,EAAO5B,GACtBjC,EAAED,KAAKiE,UAAUH,IACvBa,KAAK5D,EAAYmB,EAC/B,EAEA8G,WAAY,WACR,IACIC,EACAC,EACA9E,EAEJ,OALWpE,KAKC2B,QAAQ4B,KALTvD,KAKmBkC,QAAQL,QAAQsH,KAAI,WAC9C,IAAIC,EAAOnJ,EAAED,MACTqJ,EAAYD,EAAK1I,KAAKP,EAAMO,KAAK,eACjC4I,EAASF,EAAK1I,KAAKP,EAAMO,KAAK,UAElC,GAAI2I,GAA2B,KAAdA,EAGb,IAFAJ,EAAQI,EAAUE,MAAM,KACxBF,EAAY,GACPH,EAAM,EAAG9E,EAAS6E,EAAM7E,OAAQ8E,EAAM9E,EAAQ8E,IAC/CG,EAAUG,KAAK,CAAE1F,MAAOwF,EAAQD,UAAWJ,EAAMC,KAGzD,OAAOG,CACX,IAAGI,SACP,EAEAC,YAAa,WACT,IAEI5F,EAFAzB,EAAOrC,KACP4H,EAAa3H,EAAE,UAAWoC,EAAKY,gBAE/B+F,EAAa3G,EAAK2G,aAEtB,OAAO/I,EAAEkJ,IAAIvB,GAAY,SAASE,GAC9BA,EAAO7H,EAAE6H,GACThE,EAAQgE,EAAKpH,KAAKP,EAAMO,KAAK,UAC7B,IAAI+D,EAAcpC,EAAKH,QAAQwC,MAAQ,CAAC,EACpCiF,EAAuB7B,EAAKnD,KAAK5D,IAAe,CAAC,EACjDoH,EAAUL,EAAKvE,KAAK,gBAExB,MAAO,CACHO,MAAOA,EACPc,IAAKuD,EAAQzH,KAAKP,EAAMO,KAAK,QAC7BsI,WAAYA,GAAc,GAC1BjF,MAAO+D,EAAKpH,KAAKP,EAAMO,KAAK,OAC5ByG,QAASwC,EAAqBxC,SAAW1C,EAAY0C,QAE7D,GACJ,EAEAa,iBAAkB,SAAS/D,GACvB,IAAI5B,EAAOrC,KAEXqC,EAAKuH,QAlWK,cAkWgB,CACtB9F,MAAOG,EAAUvD,KAAKP,EAAMO,KAAK,UACjCqD,MAAOE,EAAUvD,KAAKP,EAAMO,KAAK,SAErC2B,EAAKmD,MAAMzD,OAAOkC,GAClBA,EAAUqD,MACVrD,EAAU4F,aACVxH,EAAK+E,4BACL/E,EAAKiD,SACT,EAEAA,QAAS,WACL,IAAIjD,EAAOrC,KACX,GAAIqC,EAAKkE,WAAY,CACjB,IAAImD,EAAcrH,EAAKqH,cACvB,GAAIrH,EAAKuH,QAAQ,SAAU,CAAE/C,OAAQ6C,IAEjC,YADArH,EAAKuE,UAGTvE,EAAKkE,WAAWjE,MAAMoH,EAC1B,CACJ,EAEA5E,iBAAkB,SAASlB,GACvB,IACIM,EAAmBlE,KAAK2C,kBAC5B,GAAKlB,EAAQqI,GAAG,aAA2C,IAA5B5F,EAAiBE,OAAhD,CAIAR,EAAWmG,KAAKC,KAAKpG,GAErB,IAAIO,EAAkBD,EAAiBA,EAAiBE,OAAS,GAC7DI,EAAOL,EAAgBK,KACvByF,EAAQ9F,EAAgB8F,MACxBlE,EAAaf,SAASb,EAAgBxC,QAAQ6B,IAAI,cAAe,IACjE0G,EAAclF,SAASb,EAAgBxC,QAAQ6B,IAAI,eAAgB,IACnEc,EAAaH,EAAgBxC,QAAQ4C,SAASX,WAAWY,KAAOQ,SAbzDhF,KAauEiD,eAAeO,IAAI,eAAgB,IAsBrH,OApBII,GAAYqG,IAAUpJ,GAAS+C,EAAWY,GAAQ3D,EAClD+C,EAAW,CACPY,KAAML,EAAgBxC,QAAQiC,WAAWY,MAAS3D,EAA4DyD,EAAayB,EAAjExF,EAAW4D,EAAgBxC,SAAWuI,GAChGvI,QAASwC,EAAgBxC,QACzBuD,QAAQ,IAGZtB,EAAW3D,EAAE4H,KAAK3D,GAAkB,SAAS4D,GACzC,OAAQA,EAAKtD,MAAQZ,GAAYA,GAAYkE,EAAKmC,OAAWpJ,GAAS+C,EAAWkE,EAAKmC,KAC1F,IAAG,MAGCrG,EAAW,CACPY,KAAM3D,EAAQ+C,EAASjC,QAAQiC,WAAWY,KAAOjE,EAAWqD,EAASjC,SAAWuI,EAAc5F,EAAaV,EAASjC,QAAQiC,WAAWY,KAAOuB,EAC9IpE,QAASiC,EAASjC,QAClBuD,QAAQ,IAKbtB,CA/BP,CAgCJ,EACAwC,MAAO,SAAS+D,GACZ,IAAIvG,EAAW5D,KAAK8E,iBAAiBqF,EAAMC,EAAEC,UAEzCzG,GACAnC,EAAQ+B,IAAI,CAAEgB,KAAMZ,EAASY,KAAMyF,MAAO,QAElD,EACA5G,SAAU,SAAS1B,GACf,IAAImC,EAAQnC,EAAQjB,KAAKP,EAAMO,KAAK,UAEpC,MAAgD,SAAzCiB,EAAQjB,KAAKP,EAAMO,KAAK,eAC3BoD,IACCnC,EAAQkD,SAAS,YACb7E,KAAKiE,UAAUH,GAC5B,EACAmB,SAAU,SAASqF,EAAQpJ,EAAQ0C,GAC/B,IAAI2G,EAAOD,EAAOC,OAElB,OADaD,EAAO,KAAOpJ,EAAO,MAAQqJ,EAAK,IAAMrJ,EAAO,KAAOqJ,EAAK,KAAQ1J,GAAS+C,EAAW2G,EAAK3G,WAAWY,MAAQ3D,GAAS+C,EAAW2G,EAAK3G,WAAWY,KAEpK,EACA0B,SAAU,SAAS/D,GACf,IAAIE,EAAOrC,KACP8D,EAAQ3B,EAAUmB,cAAc5C,KAAKP,EAAMO,KAAK,UAChDsD,EAAkB3B,EAAK4B,UAAUH,GAEjC3B,IAAcE,EAAKH,QAAQC,YAAcA,EAAUqI,SAAWxG,GAC9D3B,EAAK2F,iBAAiB/H,EAAE+D,IAG5B3B,EAAKwD,aACT,EACAA,YAAa,WACTpE,EAAQM,SACR/B,KAAK2C,kBAAoB,EAC7B,EACAF,oBAAqB,WACjB,IAEI+B,EADAoD,EAAa3H,EAAE,UADRD,KACwBiD,gBADxBjD,KAIN2C,kBAAoB1C,EAAEkJ,IAAIvB,GAAY,SAASE,GAGhD,OAFAA,EAAO7H,EAAE6H,GACTtD,EAAOrE,EAAM4E,UAAU+C,GAAMtD,KACtB,CACHA,KAAMQ,SAASR,EAAM,IACrByF,MAAOjF,SAASR,EAAOjE,EAAWuH,GAAO,IACzCnG,QAASmG,EAEjB,GACJ,EACAV,0BAA2B,WACvB,IACInE,EADOjD,KACeiD,eACtBwH,EAFOzK,KAEKwF,MAEZvC,GAAkBwH,GAAQA,EAAK9I,QAAQmI,GAAG,WAC1C9J,KAAKuF,kBAAkBmF,KAAK1K,KAAKkC,QAAQuF,SAASC,MAE1D,EAEAjB,YAAa,WACT,IAAIpE,EAAOrC,KAEXqC,EAAKY,eAAeM,KAAK,gBAAgBxB,SACzCM,EAAKmD,MAAQvF,EAAE,UAAU0K,cAAc,CAAEC,WAAY,OAAQjC,KAAMtG,EAAKH,QAAQyG,MAAQ,WAAYhE,KAAK,iBACzGtC,EAAKmD,MAAM7D,QAAQkJ,aAAaxI,EAAKkD,kBACzC,IAGJpF,EAAMG,GAAGwK,OAAO9I,EAEnB,CApfD,CAofG5B,OAAOD,MAAM4K,QACF5K,KAIjB","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.core.js'), require('kendo.draganddrop.js'), require('kendo.chip.js'), require('kendo.chiplist.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.draganddrop', 'kendo.chip', 'kendo.chiplist', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendogroupable = global.kendogroupable || {}, global.kendogroupable.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"groupable\",\n name: \"Groupable\",\n category: \"framework\",\n depends: [ \"core\", \"draganddrop\", \"icons\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n outerWidth = kendo._outerWidth,\n kendoAttr = kendo.attr,\n extend = $.extend,\n each = $.each,\n isRtl = false,\n\n DIR = \"dir\",\n FIELD = \"field\",\n TITLE = \"title\",\n ASCENDING = \"asc\",\n DESCENDING = \"desc\",\n REMOVEGROUP = \"removeGroup\",\n GROUP_SORT = \"group-sort\",\n DROP_CONTAINER = \"k-grouping-drop-container\",\n NS = \".kendoGroupable\",\n CHANGE = \"change\",\n hint = function(target) {\n var title = target.attr(kendo.attr(\"title\"));\n if (title) {\n title = kendo.htmlEncode(title);\n }\n\n return $('
')\n .html(title || target.attr(kendo.attr(\"field\")))\n .prepend(kendo.ui.icon({ icon: \"cancel\", iconClass: \"k-drag-status\" }));\n },\n dropCue = $('
');\n\n\n function removeText(element) {\n element.contents().filter(function() {\n return this.nodeType === 3;\n }).remove();\n }\n\n var Groupable = Widget.extend({\n init: function(element, options) {\n var that = this,\n group = kendo.guid(),\n intializePositions = that._intializePositions.bind(that),\n draggable,\n horizontalCuePosition,\n dropCuePositions = that._dropCuePositions = [];\n\n Widget.fn.init.call(that, element, options);\n\n isRtl = kendo.support.isRtl(element);\n horizontalCuePosition = isRtl ? \"right\" : \"left\";\n\n that.draggable = draggable = that.options.draggable || new kendo.ui.Draggable(that.element, {\n filter: that.options.draggableElements,\n hint: hint,\n group: group\n });\n\n that.groupContainer = $(that.options.groupContainer, that.element)\n .kendoDropTarget({\n group: draggable.options.group,\n dragenter: function(e) {\n if (that._canDrag(e.draggable.currentTarget)) {\n kendo.ui.icon(e.draggable.hint.find(\".k-drag-status\"), { icon: \"plus\" });\n dropCue.css(horizontalCuePosition, 0).appendTo(that.groupContainer);\n }\n },\n dragleave: function(e) {\n kendo.ui.icon(e.draggable.hint.find(\".k-drag-status\"), { icon: \"cancel\" });\n\n dropCue.remove();\n },\n drop: function(e) {\n var targetElement = e.draggable.currentTarget,\n field = targetElement.attr(kendo.attr(\"field\")),\n title = targetElement.attr(kendo.attr(\"title\")),\n colID = targetElement.attr(\"id\"),\n sourceIndicator = that.indicator(field),\n dropCuePositions = that._dropCuePositions,\n lastCuePosition = dropCuePositions[dropCuePositions.length - 1],\n position,\n method = \"after\",\n parentLeft = isRtl || !lastCuePosition ? 0 : lastCuePosition.element.parent().position().left;\n var sortOptions = extend({}, that.options.sort, targetElement.data(GROUP_SORT));\n var dir = sortOptions.dir;\n\n if (!targetElement.hasClass(\"k-chip\") && !that._canDrag(targetElement)) {\n return;\n }\n if (lastCuePosition) {\n position = that._dropCuePosition(kendo.getOffset(dropCue).left + parentLeft + parseInt(lastCuePosition.element.css(\"marginLeft\"), 10) * (isRtl ? -1 : 1) + parseInt(lastCuePosition.element.css(\"marginRight\"), 10));\n if (position && that._canDrop($(sourceIndicator), position.element, position.left)) {\n if (position.before) {\n method = \"before\";\n }\n\n position.element[method](sourceIndicator || that.buildIndicator(field, title, dir, colID).wrapper);\n that._setIndicatorSortOptions(field, sortOptions);\n that._change();\n }\n } else {\n removeText(that._messageContainer);\n that._list.element.show();\n that._list.add(that.buildIndicator(field, title, dir, colID).element);\n that._setIndicatorSortOptions(field, sortOptions);\n that._change();\n }\n }\n })\n .kendoDraggable({\n filter: \"div.k-chip\",\n hint: hint,\n group: draggable.options.group,\n dragcancel: that._dragCancel.bind(that),\n dragstart: function(e) {\n var element = e.currentTarget,\n marginLeft = parseInt(element.css(\"marginLeft\"), 10),\n elementPosition = element.position(),\n left = isRtl ? elementPosition.left - marginLeft : elementPosition.left + outerWidth(element);\n\n intializePositions();\n dropCue.css(\"left\", left).appendTo(that.groupContainer);\n kendo.ui.icon(this.hint.find(\".k-drag-status\"), { icon: \"plus\" });\n },\n dragend: function() {\n that._dragEnd(this);\n },\n drag: that._drag.bind(that)\n });\n\n draggable.bind([ \"dragend\", \"dragcancel\", \"dragstart\", \"drag\" ],\n {\n dragend: function() {\n that._dragEnd(this);\n },\n dragcancel: that._dragCancel.bind(that),\n dragstart: function(e) {\n\n if (!that.options.allowDrag && !that._canDrag(e.currentTarget)) {\n e.preventDefault();\n return;\n }\n\n intializePositions();\n },\n drag: that._drag.bind(that)\n });\n\n that.dataSource = that.options.dataSource;\n that._messageContainer = that.groupContainer.find(\".\" + DROP_CONTAINER);\n\n if (!that._messageContainer.length) {\n that._messageContainer = $('
').addClass(DROP_CONTAINER).appendTo(that.groupContainer);\n }\n\n that._createList();\n\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n } else {\n that._refreshHandler = that.refresh.bind(that);\n }\n\n if (that.dataSource) {\n that.dataSource.bind(\"change\", that._refreshHandler);\n that.refresh();\n }\n },\n\n refresh: function() {\n var that = this,\n dataSource = that.dataSource;\n var groups = dataSource.group() || [];\n var fieldAttr = kendoAttr(FIELD);\n var titleAttr = kendoAttr(TITLE);\n\n if (that.groupContainer) {\n if (that._list) {\n that._list.remove(that._list.items());\n that._list.element.hide();\n }\n\n if (groups.length) {\n removeText(that._messageContainer);\n }\n\n each(groups, function(index, group) {\n var field = group.field;\n var dir = group.dir;\n var element = that.element\n .find(that.options.filter)\n .filter(function() {\n return $(this).attr(fieldAttr) === field;\n });\n var indicator = that.buildIndicator(field, element.attr(titleAttr), dir, element.attr(\"id\"));\n\n that._list.add(indicator.element);\n that._list.element.show();\n that._setIndicatorSortOptions(field, extend({}, that.options.sort, { dir: dir, compare: group.compare }));\n });\n }\n\n that._invalidateGroupContainer();\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n that.groupContainer.off(NS);\n\n if (that.groupContainer.data(\"kendoDropTarget\")) {\n that.groupContainer.data(\"kendoDropTarget\").destroy();\n }\n\n if (that.groupContainer.data(\"kendoDraggable\")) {\n that.groupContainer.data(\"kendoDraggable\").destroy();\n }\n\n if (!that.options.draggable) {\n that.draggable.destroy();\n }\n\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind(\"change\", that._refreshHandler);\n that._refreshHandler = null;\n }\n\n if (that._list) {\n that._list.destroy();\n }\n\n that.groupContainer = that.element = that.draggable = null;\n },\n\n events: [\"change\", \"removeGroup\"],\n\n options: {\n name: \"Groupable\",\n filter: \"th\",\n draggableElements: \"th\",\n messages: {\n empty: \"Drag a column header and drop it here to group by that column\"\n },\n sort: {\n dir: ASCENDING,\n compare: null\n },\n enableContextMenu: false\n },\n\n indicator: function(field) {\n var indicators = $(\".k-chip\", this.groupContainer);\n return $.grep(indicators, function(item)\n {\n return $(item).attr(kendo.attr(\"field\")) === field;\n })[0];\n },\n\n removeHandler: function(e) {\n var that = this;\n\n that._removeIndicator(e.sender.wrapper);\n },\n\n clickHandler: function(e) {\n var that = this;\n var indicator = e.sender.wrapper;\n var dirIcon = indicator.find(\".k-chip-icon\");\n var newDir = dirIcon.attr(kendoAttr(DIR)) === ASCENDING ? DESCENDING : ASCENDING;\n\n if ($(e.originalEvent.target).closest('.k-groupable-context-menu').length) {\n return;\n }\n\n dirIcon.attr(kendoAttr(DIR), newDir);\n that._change();\n },\n\n buildIndicator: function(field, title, dir, id) {\n var that = this;\n var indicator;\n var icon;\n var wrapper;\n\n dir = dir || (that.options.sort || {}).dir || ASCENDING;\n indicator = $(`
`)\n .kendoChip({\n icon: `sort-${(dir || \"asc\") == \"asc\" ? \"asc-small\" : \"desc-small\"}`,\n iconClass: 'k-chip-icon',\n label: `${title || field}`,\n removable: true,\n size: that.options.size || \"medium\",\n remove: that.removeHandler.bind(that),\n click: that.clickHandler.bind(that),\n actions: that.options.enableContextMenu ? [\n { icon: \"more-vertical\", iconClass: \"k-groupable-context-menu\" }\n ] : null\n }).data(\"kendoChip\");\n wrapper = indicator.wrapper;\n icon = wrapper.find(\".k-chip-icon\").first();\n wrapper.attr(`data-${kendo.ns}field`, field);\n wrapper.attr(`data-${kendo.ns}title`, title || \"\");\n\n if (id) {\n wrapper.attr(`data-${kendo.ns}id`, id);\n }\n\n icon.attr(\"title\", `(sorted ${dir == \"asc\" ? \"ascending\" : \"descending\"})`);\n icon.attr(`data-${kendo.ns}dir`, dir);\n\n return indicator;\n },\n\n _setIndicatorSortOptions: function(field, options) {\n var indicator = $(this.indicator(field));\n indicator.data(GROUP_SORT, options);\n },\n\n aggregates: function() {\n var that = this;\n var names;\n var idx;\n var length;\n\n return that.element.find(that.options.filter).map(function() {\n var cell = $(this),\n aggregate = cell.attr(kendo.attr(\"aggregates\")),\n member = cell.attr(kendo.attr(\"field\"));\n\n if (aggregate && aggregate !== \"\") {\n names = aggregate.split(\",\");\n aggregate = [];\n for (idx = 0, length = names.length; idx < length; idx++) {\n aggregate.push({ field: member, aggregate: names[idx] });\n }\n }\n return aggregate;\n }).toArray();\n },\n\n descriptors: function() {\n var that = this,\n indicators = $(\".k-chip\", that.groupContainer),\n field,\n aggregates = that.aggregates();\n\n return $.map(indicators, function(item) {\n item = $(item);\n field = item.attr(kendo.attr(\"field\"));\n var sortOptions = that.options.sort || {};\n var indicatorSortOptions = item.data(GROUP_SORT) || {};\n var dirIcon = item.find(\".k-chip-icon\");\n\n return {\n field: field,\n dir: dirIcon.attr(kendo.attr(\"dir\")),\n aggregates: aggregates || [],\n colID: item.attr(kendo.attr(\"id\")),\n compare: indicatorSortOptions.compare || sortOptions.compare\n };\n });\n },\n\n _removeIndicator: function(indicator) {\n var that = this;\n\n that.trigger(REMOVEGROUP, {\n field: indicator.attr(kendo.attr(\"field\")),\n colID: indicator.attr(kendo.attr(\"id\")),\n });\n that._list.remove(indicator);\n indicator.off();\n indicator.removeData();\n that._invalidateGroupContainer();\n that._change();\n },\n\n _change: function() {\n var that = this;\n if (that.dataSource) {\n var descriptors = that.descriptors();\n if (that.trigger(\"change\", { groups: descriptors })) {\n that.refresh();\n return;\n }\n that.dataSource.group(descriptors);\n }\n },\n\n _dropCuePosition: function(position) {\n var that = this;\n var dropCuePositions = this._dropCuePositions;\n if (!dropCue.is(\":visible\") || dropCuePositions.length === 0) {\n return;\n }\n\n position = Math.ceil(position);\n\n var lastCuePosition = dropCuePositions[dropCuePositions.length - 1],\n left = lastCuePosition.left,\n right = lastCuePosition.right,\n marginLeft = parseInt(lastCuePosition.element.css(\"marginLeft\"), 10),\n marginRight = parseInt(lastCuePosition.element.css(\"marginRight\"), 10),\n parentLeft = lastCuePosition.element.parent().position().left - parseInt(that.groupContainer.css(\"paddingLeft\"), 10);\n\n if (position >= right && !isRtl || position < left && isRtl) {\n position = {\n left: lastCuePosition.element.position().left + (!isRtl ? outerWidth(lastCuePosition.element) + marginRight : parentLeft - marginLeft),\n element: lastCuePosition.element,\n before: false\n };\n } else {\n position = $.grep(dropCuePositions, function(item) {\n return (item.left <= position && position <= item.right) || (isRtl && position > item.right);\n })[0];\n\n if (position) {\n position = {\n left: isRtl ? position.element.position().left + outerWidth(position.element) + marginRight + parentLeft : position.element.position().left - marginLeft,\n element: position.element,\n before: true\n };\n }\n }\n\n return position;\n },\n _drag: function(event) {\n var position = this._dropCuePosition(event.x.location);\n\n if (position) {\n dropCue.css({ left: position.left, right: \"auto\" });\n }\n },\n _canDrag: function(element) {\n var field = element.attr(kendo.attr(\"field\"));\n\n return element.attr(kendo.attr(\"groupable\")) != \"false\" &&\n field &&\n (element.hasClass(\"k-chip\") ||\n !this.indicator(field));\n },\n _canDrop: function(source, target, position) {\n var next = source.next(),\n result = source[0] !== target[0] && (!next[0] || target[0] !== next[0] || (!isRtl && position > next.position().left || isRtl && position < next.position().left));\n return result;\n },\n _dragEnd: function(draggable) {\n var that = this,\n field = draggable.currentTarget.attr(kendo.attr(\"field\")),\n sourceIndicator = that.indicator(field);\n\n if (draggable !== that.options.draggable && !draggable.dropped && sourceIndicator) {\n that._removeIndicator($(sourceIndicator));\n }\n\n that._dragCancel();\n },\n _dragCancel: function() {\n dropCue.remove();\n this._dropCuePositions = [];\n },\n _intializePositions: function() {\n var that = this,\n indicators = $(\".k-chip\", that.groupContainer),\n left;\n\n that._dropCuePositions = $.map(indicators, function(item) {\n item = $(item);\n left = kendo.getOffset(item).left;\n return {\n left: parseInt(left, 10),\n right: parseInt(left + outerWidth(item), 10),\n element: item\n };\n });\n },\n _invalidateGroupContainer: function() {\n var that = this;\n var groupContainer = that.groupContainer;\n var list = that._list;\n\n if (groupContainer && list && list.element.is(\":empty\")) {\n this._messageContainer.text(this.options.messages.empty);\n }\n },\n\n _createList: function() {\n var that = this;\n\n that.groupContainer.find(\".k-chip-list\").remove();\n that._list = $(\"
\").kendoChipList({ selectable: \"none\", size: that.options.size || \"medium\" }).data(\"kendoChipList\");\n that._list.element.insertBefore(that._messageContainer);\n }\n });\n\n kendo.ui.plugin(Groupable);\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}