UNPKG

69.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"CategoryAxis.js","sourceRoot":"","sources":["../../../../../src/.internal/charts/axes/CategoryAxis.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAoB,YAAY,EAAuF,MAAM,QAAQ,CAAC;AAKnJ,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAC;AAGnD;;;;;GAKG;AAEH;;;;GAIG;AACH;IAA0C,wCAAY;IAgBrD;;OAEG;IACH;QAAA,YACC,iBAAO,SAUP;QAvBM,qBAAe,GAA4C,EAAE,CAAC;QAcpE,KAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC;QACxC,KAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QAEzB,KAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC5B,KAAI,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;QAE/B,KAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAEvB,KAAI,CAAC,UAAU,EAAE,CAAC;;IACnB,CAAC;IAOD,sBAAW,0CAAQ;QAUnB;;WAEG;aACH;YACC,IAAI,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;oBACzC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;iBAClE;aACD;YACD,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACjC,CAAC;QAzBD;;;;WAIG;aACH,UAAoB,KAAa;YAChC,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,KAAK,EAAE;gBACxD,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;iBACzC;aACD;QACF,CAAC;;;OAAA;IAqBD,sBAAW,6CAAW;QAItB;;WAEG;aACH;YACC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACpC,CAAC;QAhBD;;;;;;WAMG;aACH,UAAuB,KAAa;YACnC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;;;OAAA;IASD,sBAAW,+CAAa;aAUxB;YACC,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QACxC,CAAC;aAZD,UAAyB,KAAa;YACrC,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;gBAC7C,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnB,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;oBACrC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;iBAClC;aACD;QACF,CAAC;;;OAAA;IAKF,2BAAC;AAAD,CAAC,AA1FD,CAA0C,YAAY,GA0FrD;;AAmDD;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;IAAyE,gCAAO;IAqD/E;;OAEG;IACH;QAAA;QAEC,OAAO;QACP,iBAAO,SAkBP;QAnCD;;WAEG;QACI,yBAAmB,GAA0C,IAAI,UAAU,EAA6B,CAAC;QAe/G,KAAI,CAAC,SAAS,GAAG,cAAc,CAAC;QAEhC,iBAAiB;QACjB,KAAI,CAAC,aAAa,GAAG,UAAU,CAAC;QAEhC,KAAI,CAAC,aAAa,GAAG,KAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,KAAI,CAAC,aAAa,CAAC,SAAS,GAAG,KAAI,CAAC;QACpC,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAI,CAAC,aAAa,CAAC,CAAC;QAGzC,cAAc;QACd,KAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,mBAAmB,GAAG,KAAI,CAAC,mBAAmB,CAAC;QACnD,KAAI,CAAC,WAAW,CAAC,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,UAAS,KAAK;YACpE,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC,CAAA;;IACJ,CAAC;IAED;;;;;OAKG;IACO,qCAAc,GAAxB;QACC,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACO,sCAAe,GAAzB;QACC,OAAO,IAAI,iBAAiB,EAAE,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACI,4CAAqB,GAA5B,UAA6B,QAA0B,EAAE,UAAmB;QAC3E,iBAAM,qBAAqB,YAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,QAAQ,GAAiB,QAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC7B,IAAI,oBAAoB,GAAsB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxF,IAAI,oBAAoB,EAAE;gBACzB,IAAI,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;gBACtC,IAAI,eAAe,GAAG,oBAAoB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACrE,IAAI,CAAC,eAAe,EAAE;oBACrB,eAAe,GAAG,EAAE,CAAC;oBACrB,oBAAoB,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC;iBACjE;gBACD,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/B;SACD;aACI;YACJ,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC9C;IACF,CAAC;IAED;;;;;OAKG;IACI,wCAAiB,GAAxB;QAAA,iBA6DC;QA3DA,iBAAM,iBAAiB,WAAE,CAAC;QAE1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAC,MAAM;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,YAAY,CAAC,EAAE;gBACrF,MAAM,CAAC,mBAAmB,EAAE,CAAC;aAC7B;iBACI;gBACJ,IAAI,UAAU,GAAG,KAAI,CAAC,eAAe,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,QAAQ,GAAG,KAAI,CAAC,eAAe,CAAC,KAAI,CAAC,GAAG,CAAC,CAAC;gBAE9C,IAAI,QAAQ,IAAI,KAAI,CAAC,SAAS,CAAC,MAAM,EAAE;oBACtC,QAAQ,EAAE,CAAC;iBACX;gBAED,IAAI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;gBAC1B,IAAI,QAAQ,SAAQ,CAAC;gBACrB,IAAI,QAAQ,SAAQ,CAAC;gBAErB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,YAAY,GAAG,KAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,YAAY,EAAE;wBACjB,IAAI,eAAe,GAAG,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;wBAE7D,IAAI,eAAe,EAAE;4BACpB,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,eAAe,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;gCAChD,IAAI,cAAc,GAAG,eAAe,CAAC,GAAC,CAAC,CAAC;gCACxC,IAAI,cAAc,EAAE;oCACnB,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;oCACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;wCAClD,QAAQ,GAAG,KAAK,CAAC;qCACjB;oCACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;wCAClD,QAAQ,GAAG,KAAK,CAAC;qCACjB;iCACD;6BACD;yBACD;qBACD;iBACD;gBAED,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBAC7B,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;iBAC7B;qBACI;oBACJ,MAAM,CAAC,KAAK,GAAG,KAAI,CAAC,KAAK,CAAC;iBAC1B;gBACD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBAC7B,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;iBAC/B;qBACI;oBACJ,MAAM,CAAC,GAAG,GAAG,KAAI,CAAC,GAAG,CAAC;iBACtB;gBAED,iDAAiD;gBACjD,IAAI,KAAI,CAAC,WAAW,IAAI,KAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpD,MAAM,CAAC,mBAAmB,EAAE,CAAC;iBAC7B;aACD;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,+BAAQ,GAAf;QAAA,iBAmHC;QAjHA,iBAAM,QAAQ,WAAE,CAAC;QAEjB,IAAI,SAAS,GAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAE9C,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACxF,IAAI,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAE/E,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACzB;QAED,2CAA2C;QAC3C,IAAI,QAAQ,GAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACvH,IAAI,SAAS,GAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAEvG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;QAClE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;QAEjD,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;YACvC,IAAI,CAAC,SAAS,EAAE,CAAC;SACjB;QAED,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE;YACzB,OAAO;SACP;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;SACvB;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,oFAAoF;QACpF,4BAA4B;QAC5B,0CAA0C;QAC1C,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9E,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1C,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;SAC3B;QAED,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACjE,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1C,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;SAC3B;QAED,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBAC9B,IAAI,QAAQ,GAAsB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE;oBAC3D,IAAI,SAAS,GAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,CAAC,SAAS,EAAE;wBACf,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;wBAC9B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;qBAC9C;oBAED,SAAS,EAAE,CAAC;iBACZ;qBACI;oBACJ,+DAA+D;oBAC/D,4GAA4G;oBAC5G,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;iBAC3B;aACD;SACD;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEnF,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAElC,UAAU,CAAC,IAAI,CAAC,UAAC,SAAS;gBACzB,IAAI,kBAAkB,GAAW,SAAS,CAAC,kBAAkB,CAAC;gBAC9D,IAAI,gBAAgB,GAAW,SAAS,CAAC,gBAAgB,CAAC;gBAE1D,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,KAAI,CAAC,WAAW,EAAE,GAAG,EAAE,KAAI,CAAC,SAAS,EAAE,CAAC,EAAE;oBAE5H,KAAK,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC,IAAI,gBAAgB,EAAE,CAAC,EAAE,EAAE;wBAC5D,IAAI,QAAQ,GAAG,KAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC1C,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;qBAC3B;oBAED,IAAI,WAAS,GAAW,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAI,CAAC,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;oBACrI,IAAI,WAAS,GAAG,CAAC,CAAC;oBAClB,IAAI,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE;wBAC5B,4BAA4B;wBAC5B,KAAK,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC,IAAI,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,WAAS,EAAE;4BAC1E,IAAI,QAAQ,GAAsB,KAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAC7D,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;4BAC5B,KAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;4BAC9B,KAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAS,CAAC,CAAC;4BAC9C,WAAS,EAAE,CAAC;yBACZ;qBACD;iBACD;YACF,CAAC,CAAC,CAAC;SACH;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,oBAAoB;QAClD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAED;;;;;;;OAOG;IACI,0CAAmB,GAA1B,UAA2B,QAA2B,EAAE,SAAkB,EAAE,KAAc;QACzF,iBAAM,mBAAmB,YAAC,QAAQ,CAAC,CAAC;QAEpC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACzC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,8BAA8B;QAE9B,IAAI,QAAQ,GAAiB,IAAI,CAAC,QAAQ,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC3B,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAChD;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC9B,QAAQ,GAAG,KAAK,CAAC;SACjB;QAED,IAAI,QAAQ,GAAW,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChF,IAAI,WAAW,GAAW,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEzF,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE7B,IAAI,YAAoB,CAAC;QACzB,IAAI,YAAoB,CAAC;QACzB,IAAI,eAAuB,CAAC;QAE5B,IAAI,QAAQ,CAAC,OAAO,EAAE;YACrB,YAAY,GAAG,QAAQ,CAAC;YACxB,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACxE,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;SACrF;QAED,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAEpD,IAAI,IAAI,GAAa,QAAQ,CAAC,IAAI,CAAC;QACnC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC3B,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;SACxD;QAED,IAAI,IAAI,GAAS,QAAQ,CAAC,IAAI,CAAC;QAC/B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC3B,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;SACxD;QAGD,IAAI,KAAK,GAAc,QAAQ,CAAC,KAAK,CAAC;QACtC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC7B,sLAAsL;YACtL,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE;gBACjD,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;aAC9B;YAED,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAE1D,IAAI,CAAC,QAAQ,YAAY,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,YAAY,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;gBACjN,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;oBACxB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;iBAClD;qBACI;oBACJ,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;iBAClD;aACD;SACD;QAED,IAAI,IAAI,GAAa,QAAQ,CAAC,QAAQ,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAE3B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACtB,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;gBACvC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1D,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aACpE;YAED,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;aACnC;SACD;QAED,IAAI,QAAQ,CAAC,MAAM,EAAE;YACpB,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;SAC9D;QAGD,IAAI,IAAI,GAAa,QAAQ,CAAC,IAAI,CAAC;QACnC,IAAI,IAAI,EAAE;YACT,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;SAChE;IACF,CAAC;IAGD;;OAEG;IACI,kCAAW,GAAlB;QACC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,iBAAM,WAAW,WAAE,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACI,sCAAe,GAAtB,UAAuB,QAA2B,EAAE,WAAmB;QACtE,IAAI,QAAQ,EAAE;YACb,qCAAqC;YACrC,iBAAM,eAAe,YAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC7C,wCAAwC;YACxC,kGAAkG;YAClG,yDAAyD;YACzD,2CAA2C;YAC3C,GAAG;YAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACtC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC7D;SACD;IACF,CAAC;IAGS,kCAAW,GAArB,UAAsB,WAAiB;QACtC,IAAI,QAAQ,GAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC7B,IAAI,QAAQ,GAAsB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE5E,IAAI,QAAQ,EAAE;gBACb,OAAO,QAAQ,CAAC;aAChB;iBACI;gBACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;aAC/B;SACD;IACF,CAAC;IAED;;;;;;;;;OASG;IACI,sCAAe,GAAtB,UAAuB,KAAa,EAAE,QAAoC;QACzE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC9B,QAAQ,GAAG,GAAG,CAAC;SACf;QAED,IAAI,UAAU,GAAW,IAAI,CAAC,UAAU,CAAC;QACzC,IAAI,QAAQ,GAAW,IAAI,CAAC,QAAQ,CAAC;QAErC,IAAI,UAAU,GAAW,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAErE,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACvC,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAEnC,UAAU,IAAI,aAAa,CAAC;QAC5B,UAAU,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAElC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAC,SAAS;gBACnD,IAAI,eAAe,GAAW,SAAS,CAAC,kBAAkB,CAAC;gBAC3D,IAAI,aAAa,GAAW,SAAS,CAAC,gBAAgB,CAAC;gBAEvD,IAAI,KAAK,GAAG,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;oBAC7F,OAAO,KAAK,CAAC;iBACb;gBAED,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;oBAC1G,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;oBACxD,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;oBAElD,IAAI,SAAS,GAAW,SAAS,CAAC,SAAS,CAAC;oBAE5C,kCAAkC;oBAClC,IAAI,KAAK,GAAG,aAAa,EAAE;wBAC1B,UAAU,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;qBAClE;oBACD,mCAAmC;yBAC9B,IAAI,KAAK,GAAG,eAAe,EAAE;qBAEjC;oBACD,qBAAqB;yBAChB;wBACJ,KAAK,GAAG,eAAe,GAAG,CAAC,KAAK,GAAG,eAAe,CAAC,GAAG,SAAS,CAAC;qBAChE;iBACD;gBAED,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;SACH;QAED,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE;YACb,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;SACvC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;IACrG,CAAC;IAED;;;;;;;;;OASG;IACI,yCAAkB,GAAzB,UAA0B,QAAgB,EAAE,QAA2B;QACtE,IAAI,KAAK,GAAW,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;OAQG;IACI,sCAAe,GAAtB,UAAuB,QAAgB,EAAE,QAA2B;QACnE,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjD,CAAC;IAGD;;;;;;;;OAQG;IACH,iCAAU,GAAV,UAAW,QAAgB,EAAE,QAA2B;QACvD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAGD;;;;;;;;OAQG;IACI,oCAAa,GAApB,UAAqB,QAAgB,EAAE,QAA2B;QACjE,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACI,sCAAe,GAAtB,UAAuB,QAAgB;QACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC7B,IAAI,QAAQ,GAAsB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5E,IAAI,QAAQ,EAAE;gBACb,OAAO,QAAQ,CAAC,KAAK,CAAC;aACtB;SACD;IACF,CAAC;IAED;;;;;OAKG;IACI,uCAAgB,GAAvB,UAAwB,aAAqB,EAAE,WAAmB;QACjE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;;;;;OAUG;IACI,sCAAe,GAAtB,UAAuB,KAAa,EAAE,GAAW,EAAE,aAAgC,EAAE,WAA8B;QAClH,IAAI,QAAQ,GAAW,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACrE,IAAI,MAAM,GAAW,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,uDAAuD;IAC5G,CAAC;IAED;;;;;;;OAOG;IACI,oCAAa,GAApB,UAAqB,QAAgB,EAAE,QAA2B;QACjE,IAAI,KAAK,GAAW,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACI,6CAAsB,GAA7B,UAA8B,MAAgB,EAAE,QAAgB;QAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;gBACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE;oBACnC,OAAO,QAAQ,CAAC;iBAChB;aACD;YACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;gBACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE;oBACnC,OAAO,QAAQ,CAAC;iBAChB;aACD;SACD;IACF,CAAC;IAED;;;;;OAKG;IACI,4CAAqB,GAA5B,UAA6B,MAAgB,EAAE,QAAgB;QAE9D,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACtD,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;gBACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE;oBACnC,OAAO,QAAQ,CAAC;iBAChB;aACD;YACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;gBACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE;oBACnC,OAAO,QAAQ,CAAC;iBAChB;aACD;SACD;IAEF,CAAC;IAED,iBAAiB;IACV,kDAA2B,GAAlC,UAAmC,QAAgB,EAAE,MAAgB;QAArE,iBAeC;QAdA,IAAI,cAAgC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAC,QAAQ;YAC9B,IAAI,MAAM,CAAC,KAAK,IAAI,KAAI,EAAE;gBACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE;oBACnC,cAAc,GAAG,QAAQ,CAAC;iBAC1B;aACD;iBACI,IAAI,MAAM,CAAC,KAAK,IAAI,KAAI,EAAE;gBAC9B,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE;oBACnC,cAAc,GAAG,QAAQ,CAAC;iBAC1B;aACD;QACF,CAAC,CAAC,CAAA;QACF,OAAO,cAAc,CAAC;IACvB,CAAC;IAGD;;;;;;;OAOG;IACI,wCAAiB,GAAxB,UAAyB,MAAgB,EAAE,QAAgB,EAAE,WAAqB;QAAlF,iBA+DC;QA7DA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAE7B,IAAI,OAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAE3C,IAAI,OAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACnC,OAAK,EAAE,CAAC;aACR;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAK,CAAC,CAAC;YAE9C,IAAI,QAAQ,EAAE;gBACb,IAAI,UAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACjC,IAAI,KAAqB,CAAC;gBAE1B,IAAI,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAK,CAAC,CAAC;gBACtD,IAAI,cAAc,EAAE;oBACnB,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;wBACzB,IAAI,cAAc,CAAC,SAAS,IAAI,UAAQ,EAAE;4BACzC,OAAO,cAAc,CAAC;yBACtB;qBACD;oBACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;wBACzB,IAAI,cAAc,CAAC,SAAS,IAAI,UAAQ,EAAE;4BACzC,OAAO,cAAc,CAAC;yBACtB;qBACD;iBACD;gBAGD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAC,QAAQ;oBAC9B,IAAI,MAAM,CAAC,KAAK,IAAI,KAAI,EAAE;wBACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,UAAQ,EAAE;4BACnC,IAAI,CAAC,KAAG,EAAE;gCACT,KAAG,GAAG,QAAQ,CAAC;6BACf;4BACD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAK,GAAG,KAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE;gCACnE,KAAG,GAAG,QAAQ,CAAC;6BACf;yBAED;qBACD;oBACD,IAAI,MAAM,CAAC,KAAK,IAAI,KAAI,EAAE;wBACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,UAAQ,EAAE;4BACnC,IAAI,CAAC,KAAG,EAAE;gCACT,KAAG,GAAG,QAAQ,CAAC;6BACf;4BACD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAK,GAAG,KAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE;gCACnE,KAAG,GAAG,QAAQ,CAAC;6BACf;yBACD;qBACD;gBACF,CAAC,CAAC,CAAA;gBAEF,OAAO;gBACP,IAAI,WAAW,EAAE;iBAEhB;gBAED,OAAO,KAAG,CAAC;aACX;SACD;IACF,CAAC;IAGD;;;;;;;;;OASG;IACI,2BAAI,GAAX,UAAY,QAA0B,EAAE,GAAY,EAAE,QAAiB,EAAE,QAAiB,EAAE,KAAc;QACzG,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3E,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SACxB;aACI;YACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACjD;IACF,CAAC;IAED;;;;;;;;OAQG;IACI,mCAAY,GAAnB,UAAoB,QAA0B,EAAE,GAAY,EAAE,QAAiB,EAAE,QAAiB,EAAE,KAAc;QACjH,IAAI,QAAQ,CAAC;QACb,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;SACvE;QAED,IAAI,KAAK,EAAE;YACV,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;SAC9D;QAED,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED;;;;;;;;;OASG;IACI,2BAAI,GAAX,UAAY,QAA0B,EAAE,GAAY,EAAE,QAAiB,EAAE,QAAiB,EAAE,KAAc;QAEzG,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE3E,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SACxB;aACI;YACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACjD;IACF,CAAC;IAED;;;;;;;;OAQG;IACI,mCAAY,GAAnB,UAAoB,QAA0B,EAAE,GAAY,EAAE,QAAiB,EAAE,QAAiB,EAAE,KAAc;QACjH,IAAI,QAAQ,CAAC;QACb,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;SACvE;QAED,IAAI,KAAK,EAAE;YACV,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;SAC9D;QAED,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,+BAAQ,GAAf,UAAgB,QAA0B,EAAE,GAAW,EAAE,QAAiB,EAAE,QAAiB,EAAE,KAAc;QAC5G,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE3E,IAAI,KAAK,EAAE;YACV,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;SAC9D;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACI,2CAAoB,GAA3B,UAA4B,QAAgB;QAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;OAQG;IACI,yCAAkB,GAAzB,UAA0B,QAAgB;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACI,qCAAc,GAArB,UAAsB,QAAgB;QACrC,IAAI,QAAQ,GAAsB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1F,IAAI,QAAQ,EAAE;YACb,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACjC,IAAI,IAAI,CAAC,WAAW,EAAE;gBACrB,OAAO,IAAI,CAAC,WAAW,CAAC;aACxB;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACpB,OAAO,QAAQ,CAAC,QAAQ,CAAC;aACzB;iBACI;gBACJ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACjE;SACD;IACF,CAAC;IAED;;;;;;OAMG;IACI,sCAAe,GAAtB,UAAuB,QAAgB;QACtC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,QAAQ,GAAG,CAAC,EAAE;YACjB,QAAQ,GAAG,CAAC,CAAC;SACb;QAED,IAAI,QAAQ,GAAG,CAAC,EAAE;YACjB,QAAQ,GAAG,CAAC,CAAC;SACb;QAED,IAAI,UAAU,GAAW,IAAI,CAAC,UAAU,CAAC;QACzC,IAAI,QAAQ,GAAW,IAAI,CAAC,QAAQ,CAAC;QACrC,IAAI,UAAU,GAAW,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7F,QAAQ,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;QAChD,IAAI,KAAK,GAAW,IAAI,CAAC;QAEzB,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAElC,mCAAmC;YACnC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAC,SAAS;gBACnD,IAAI,kBAAkB,GAAW,SAAS,CAAC,aAAa,CAAC;gBACzD,IAAI,gBAAgB,GAAW,SAAS,CAAC,WAAW,CAAC;gBAErD,IAAI,eAAe,GAAW,SAAS,CAAC,kBAAkB,CAAC;gBAC3D,IAAI,aAAa,GAAW,SAAS,CAAC,gBAAgB,CAAC;gBAEvD,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBACzD,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBAEnD,IAAI,SAAS,GAAW,SAAS,CAAC,SAAS,CAAC;gBAE5C,UAAU,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBAElE,qCAAqC;gBACrC,IAAI,QAAQ,GAAG,gBAAgB,EAAE;oBAChC,UAAU,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;iBAClE;gBACD,sCAAsC;qBACjC,IAAI,QAAQ,GAAG,kBAAkB,EAAE;iBAEvC;gBACD,qBAAqB;qBAChB;oBACJ,IAAI,aAAa,GAAG,CAAC,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;oBAC9F,KAAK,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC;oBACxF,OAAO,KAAK,CAAC;iBACb;gBAED,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;SACH;QAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC3B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;SACvD;QACD,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACnC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;SAClC;QACD,8EAA8E;QAC9E,0BAA0B;QAC1B,WAAW;QACX,GAAG;QAEH,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,yCAAkB,GAAzB,UAA0B,QAAgB;QACzC,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;OAWG;IACI,uCAAgB,GAAvB,UAAwB,QAAgB;QACvC,IAAI,QAAQ,GAAsB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1F,IAAI,QAAQ,EAAE;YACb,OAAO,QAAQ,CAAC,QAAQ,CAAC;SACzB;IACF,CAAC;IAQD,sBAAW,mCAAS;QANpB;;;;;WAKG;aACH;YACC,yEAAyE;YACzE,gDAAgD;YAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;;;OAAA;IAED;;;;OAIG;IACI,mCAAY,GAAnB;QACC,iBAAM,YAAY,WAAE,CAAC;QAErB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;IACnC,CAAC;IAYD,sBAAW,mCAAS;QAVpB;;;;;;;;;WASG;aACH;YACC,OAAO,IAAI,CAAC,UAAU,CAAC;QACxB,CAAC;;;OAAA;IAmCD,sBAAW,sCAAY;QAIvB;;WAEG;aACH;YACC,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;QA1CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAgCG;aACH,UAAwB,KAAmB;YAC1C,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC;;;OAAA;IASD;;;;;OAKG;IACI,oCAAa,GAApB,UAAqB,MAAiC;QAErD,IAAI,MAAM,EAAE;YAEX,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;gBAC/E,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;oBACzC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;iBAC3D;qBACI;oBACJ,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;oBACxD,OAAO,MAAM,CAAC,YAAY,CAAC;iBAC3B;aACD;SAED;QAED,iBAAM,aAAa,YAAC,MAAM,CAAC,CAAC;IAE7B,CAAC;IACF,mBAAC;AAAD,CAAC,AAlpCD,CAAyE,IAAI,GAkpC5E;;AAED;;;;;GAKG;AACH,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;AAC1D,QAAQ,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,GAAG,oBAAoB,CAAC","sourcesContent":["/**\r\n * Category axis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Axis, AxisItemLocation, AxisDataItem, IAxisProperties, IAxisDataFields, IAxisAdapters, IAxisEvents, IAxisDataItemAdapters } from \"./Axis\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisRendererX } from \"./AxisRendererX\";\r\nimport { AxisRendererY } from \"./AxisRendererY\";\r\nimport { SerialChart } from \"../types/SerialChart\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { ColumnSeries } from \"../series/ColumnSeries\";\r\nimport { CategoryAxisBreak } from \"./CategoryAxisBreak\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CategoryAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CategoryAxisDataItem extends AxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: CategoryAxis;\r\n\r\n\tpublic seriesDataItems: { [index: string]: XYSeriesDataItem[] } = {};\r\n\r\n\tpublic deltaAnimation: Animation;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisDataItemAdapters;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisDataItem\";\r\n\t\tthis.text = \"{category}\";\r\n\r\n\t\tthis.locations.category = 0;\r\n\t\tthis.locations.endCategory = 1;\r\n\r\n\t\tthis.deltaPosition = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Category.\r\n\t *\r\n\t * @param value Category\r\n\t */\r\n\tpublic set category(value: string) {\r\n\t\tlet oldCategory = this.properties.category;\r\n\t\tthis.setProperty(\"category\", value);\r\n\t\tif ($type.hasValue(oldCategory) && oldCategory != value) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tthis.component.validateDataElement(this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get category(): string {\r\n\t\tif (this._adapterO) {\r\n\t\t\tif (this._adapterO.isEnabled(\"category\")) {\r\n\t\t\t\treturn this._adapterO.apply(\"category\", this.properties.category);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.properties.category;\r\n\t}\r\n\r\n\t/**\r\n\t * End category.\r\n\t *\r\n\t * Used for items that span several categories, like [[CategoryAxisBreak]].\r\n\t *\r\n\t * @param value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tthis.setProperty(\"endCategory\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.properties.endCategory;\r\n\t}\r\n\r\n\tpublic set deltaPosition(value: number) {\r\n\t\tif (value != this.properties.deltaCoordinate) {\r\n\t\t\tthis.setProperty(\"deltaCoordinate\", value);\r\n\t\t\tif (this.component) {\r\n\t\t\t\tthis.component.invalidateDataItems();\r\n\t\t\t\tthis.component.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic get deltaPosition(): number {\r\n\t\treturn this.properties.deltaCoordinate;\r\n\t}\r\n}\r\n\r\n/**\r\n * Defines adapters for [[DataItem]]\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisDataItemAdapters extends IAxisDataItemAdapters {\r\n\tcategory: string;\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisDataFields extends IAxisDataFields {\r\n\r\n\t/**\r\n\t * A field that holds category information.\r\n\t */\r\n\tcategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisProperties extends IAxisProperties {\r\n\tsortBySeries?: ColumnSeries;\r\n}\r\n\r\n/**\r\n * Defines events for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisEvents extends IAxisEvents { }\r\n\r\n/**\r\n * Defines adapter for [[CategoryAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisAdapters extends IAxisAdapters, ICategoryAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a category-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"CategoryAxis\",\r\n * \"title\": {\r\n * \"text\": \"Clients\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link ICategoryAxisEvents} for a list of available Events\r\n * @see {@link ICategoryAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CategoryAxis<T extends AxisRenderer = AxisRenderer> extends Axis<T> {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: ICategoryAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICategoryAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICategoryAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: CategoryAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: CategoryAxisBreak;\r\n\r\n\t/**\r\n\t * A reference to chart the axis is for.\r\n\t */\r\n\tpublic chart: SerialChart;\r\n\r\n\t/**\r\n\t * Frequency of the labels on axis.\r\n\t */\r\n\tprotected _frequency: number;\r\n\r\n\t/**\r\n\t * A collection that holds Axis' data items sorted by each category.\r\n\t */\r\n\tpublic dataItemsByCategory: Dictionary<string, this[\"_dataItem\"]> = new Dictionary<string, this[\"_dataItem\"]>();\r\n\r\n\t/**\r\n\t * last data item is used for the closing grid\r\n\t */\r\n\tprotected _lastDataItem: CategoryAxisDataItem;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxis\";\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"category\";\r\n\r\n\t\tthis._lastDataItem = this.createDataItem();\r\n\t\tthis._lastDataItem.component = this;\r\n\t\tthis._disposers.push(this._lastDataItem);\r\n\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t\tlet dataItemsByCategory = this.dataItemsByCategory;\r\n\t\tthis.addDisposer(this.mainDataSet.events.on(\"removed\", function(event) {\r\n\t\t\tdataItemsByCategory.removeKey(event.oldValue.category);\r\n\t\t}))\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CategoryAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new CategoryAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\t\tsuper.processSeriesDataItem(dataItem, axisLetter);\r\n\t\tlet category: string = (<any>dataItem)[\"category\" + this.axisLetter];\r\n\t\tif ($type.hasValue(category)) {\r\n\t\t\tlet categoryAxisDataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\t\tif (categoryAxisDataItem) {\r\n\t\t\t\tlet seriesId = dataItem.component.uid;\r\n\t\t\t\tlet seriesDataItems = categoryAxisDataItem.seriesDataItems[seriesId];\r\n\t\t\t\tif (!seriesDataItems) {\r\n\t\t\t\t\tseriesDataItems = [];\r\n\t\t\t\t\tcategoryAxisDataItem.seriesDataItems[seriesId] = seriesDataItems;\r\n\t\t\t\t}\r\n\t\t\t\tseriesDataItems.push(dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.component.dataItems.remove(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateDataRange(): void {\r\n\r\n\t\tsuper.validateDataRange();\r\n\r\n\t\t$iter.each(this._series.iterator(), (series) => {\r\n\t\t\tif ((series.xAxis instanceof CategoryAxis) && (series.yAxis instanceof CategoryAxis)) {\r\n\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet startIndex = this.positionToIndex(this.start);\r\n\t\t\t\tlet endIndex = this.positionToIndex(this.end);\r\n\r\n\t\t\t\tif (endIndex >= this.dataItems.length) {\r\n\t\t\t\t\tendIndex--;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet seriesId = series.uid;\r\n\t\t\t\tlet minIndex: number;\r\n\t\t\t\tlet maxIndex: number;\r\n\r\n\t\t\t\tfor (let i = startIndex; i <= endIndex; i++) {\r\n\t\t\t\t\tlet axisDataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif (axisDataItem) {\r\n\t\t\t\t\t\tlet seriesDataItems = axisDataItem.seriesDataItems[seriesId];\r\n\r\n\t\t\t\t\t\tif (seriesDataItems) {\r\n\t\t\t\t\t\t\tfor (let i = 0; i < seriesDataItems.length; i++) {\r\n\t\t\t\t\t\t\t\tlet seriesDataItem = seriesDataItems[i];\r\n\t\t\t\t\t\t\t\tif (seriesDataItem) {\r\n\t\t\t\t\t\t\t\t\tlet index = seriesDataItem.index;\r\n\t\t\t\t\t\t\t\t\tif (!$type.isNumber(minIndex) || index < minIndex) {\r\n\t\t\t\t\t\t\t\t\t\tminIndex = index;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif (!$type.isNumber(maxIndex) || index > maxIndex) {\r\n\t\t\t\t\t\t\t\t\t\tmaxIndex = index;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($type.isNumber(minIndex)) {\r\n\t\t\t\t\tseries.startIndex = minIndex;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.start = this.start;\r\n\t\t\t\t}\r\n\t\t\t\tif ($type.isNumber(maxIndex)) {\r\n\t\t\t\t\tseries.endIndex = maxIndex + 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.end = this.end;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// range might not change, but axis breaks might.\r\n\t\t\t\tif (this._axisBreaks && this._axisBreaks.length > 0) {\r\n\t\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the whole axis. Causes it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tlet dataCount: number = this.dataItems.length;\r\n\r\n\t\tlet startIndex = $math.fitToRange(Math.floor(this.start * dataCount - 1), 0, dataCount);\r\n\t\tlet endIndex = $math.fitToRange(Math.ceil(this.end * dataCount), 0, dataCount);\r\n\r\n\t\tif (this.renderer.invalid) {\r\n\t\t\tthis.renderer.validate();\r\n\t\t}\r\n\r\n\t\t// find frequency at which we'll show items\r\n\t\tlet maxCount: number = this.renderer.axisLength / Math.max(this.renderer.minGridDistance, 1 / Number.MAX_SAFE_INTEGER);\r\n\t\tlet frequency: number = Math.min(this.dataItems.length, Math.ceil((endIndex - startIndex) / maxCount));\r\n\r\n\t\tthis._startIndex = Math.floor(startIndex / frequency) * frequency;\r\n\t\tthis._endIndex = Math.ceil(this.end * dataCount);\r\n\r\n\t\tthis.fixAxisBreaks();\r\n\r\n\t\tif (this._startIndex == this._endIndex) {\r\n\t\t\tthis._endIndex++;\r\n\t\t}\r\n\r\n\t\tthis._frequency = frequency;\r\n\r\n\t\tif (this.axisLength <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.maxZoomFactor = this.dataItems.length;\r\n\t\tif (this.dataItems.length <= 0) {\r\n\t\t\tthis.maxZoomFactor = 1;\r\n\t\t}\r\n\r\n\t\tthis.resetIterators();\r\n\r\n\t\t// it's important to use protected variables here, as getters will return 0 - length\r\n\t\t// TODO use iterator instead\r\n\t\t// @ todo: not solved cat axis item fading\r\n\t\tstartIndex = $math.max(0, this._startIndex - this._frequency);\r\n\t\tendIndex = $math.min(this.dataItems.length, this._endIndex + this._frequency);\r\n\r\n\t\tlet itemIndex = 0;\r\n\r\n\t\tfor (let i = 0; i < startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tif (i < this.dataItems.length) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (i / this._frequency == Math.round(i / this._frequency)) {\r\n\t\t\t\t\tlet axisBreak: CategoryAxisBreak = this.isInBreak(i);\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t//previously we disabled all before, but this is better for cpu\r\n\t\t\t\t\t//this.validateDataElement(dataItem, itemIndex); // helps to solve shrinking // not good - creates all items\r\n\t\t\t\t\tdataItem.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.appendDataItem(this._lastDataItem);\r\n\t\tthis.validateDataElement(this._lastDataItem, itemIndex + 1, this.dataItems.length);\r\n\r\n\t\tif (this._axisBreaks) {\r\n\t\t\tlet axisBreaks = this._axisBreaks;\r\n\r\n\t\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\t\tlet adjustedStartValue: number = axisBreak.adjustedStartValue;\r\n\t\t\t\tlet adjustedEndValue: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\t\tif ($math.intersect({ start: adjustedStartValue, end: adjustedEndValue }, { start: this._startIndex, end: this._endIndex })) {\r\n\r\n\t\t\t\t\tfor (let b = adjustedStartValue; b <= adjustedEndValue; b++) {\r\n\t\t\t\t\t\tlet dataItem = this.dataItems.getIndex(b);\r\n\t\t\t\t\t\tdataItem.__disabled = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet frequency: number = $math.fitToRange(Math.ceil(this._frequency / axisBreak.breakSize), 1, adjustedEndValue - adjustedStartValue);\r\n\t\t\t\t\tlet itemIndex = 0;\r\n\t\t\t\t\tif (axisBreak.breakSize > 0) {\r\n\t\t\t\t\t\t// TODO use iterator instead\r\n\t\t\t\t\t\tfor (let b = adjustedStartValue; b <= adjustedEndValue; b = b + frequency) {\r\n\t\t\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(b);\r\n\t\t\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\t\t\titemIndex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.validateBreaks();\r\n\t\tthis.validateAxisRanges();\r\n\r\n\t\tthis.ghostLabel.invalidate(); // solves font issue\r\n\t\tthis.renderer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElement description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param itemIndex [description]\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"], itemIndex?: number, index?: number): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\tdataItem.itemIndex = this._axisItemCount;\r\n\t\tthis._axisItemCount++;\r\n\r\n\t\t//dataItem.__disabled = false;\r\n\r\n\t\tlet renderer: AxisRenderer = this.renderer;\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = this.categoryToIndex(dataItem.category);\r\n\t\t}\r\n\r\n\t\tlet endIndex = this.categoryToIndex(dataItem.endCategory);\r\n\r\n\t\tif (!$type.isNumber(endIndex)) {\r\n\t\t\tendIndex = index;\r\n\t\t}\r\n\r\n\t\tlet position: number = this.indexToPosition(index, dataItem.locations.category);\r\n\t\tlet endPosition: number = this.indexToPosition(endIndex, dataItem.locations.endCategory);\r\n\r\n\t\tdataItem.position = position;\r\n\r\n\t\tlet fillEndIndex: number;\r\n\t\tlet fillPosition: number;\r\n\t\tlet fillEndPosition: number;\r\n\r\n\t\tif (dataItem.isRange) {\r\n\t\t\tfillEndIndex = endIndex;\r\n\t\t\tfillPosition = this.indexToPosition(index, dataItem.locations.category);\r\n\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, dataItem.locations.endCategory);\r\n\t\t}\r\n\r\n\t\tdataItem.point = renderer.positionToPoint(position);\r\n\r\n\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\tif (tick && !tick.disabled) {\r\n\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t}\r\n\r\n\t\tlet grid: Grid = dataItem.grid;\r\n\t\tif (grid && !grid.disabled) {\r\n\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t}\r\n\r\n\r\n\t\tlet label: AxisLabel = dataItem.label;\r\n\t\tif (label && !label.disabled) {\r\n\t\t\t// theorethically this might result problems if category text changes, the range text won't change. But otherwise range.label.text = \"custom text\" won't work, which is not intuitive.\r\n\t\t\tif (!dataItem.isRange || label.text == undefined) {\r\n\t\t\t\tdataItem.text = dataItem.text;\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateLabelElement(label, position, endPosition);\r\n\r\n\t\t\tif ((renderer instanceof AxisRendererY && dataItem.label.measuredWidth > this.ghostLabel.measuredWidth) || (renderer instanceof AxisRendererX && dataItem.label.measuredHeight > this.ghostLabel.measuredHeight)) {\r\n\t\t\t\tif (dataItem.label.html) {\r\n\t\t\t\t\tthis.ghostLabel.html = dataItem.label.currentText;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.ghostLabel.text = dataItem.label.currentText;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\tif (fill && !fill.disabled) {\r\n\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tfillEndIndex = index + this._frequency;\r\n\t\t\t\tfillPosition = this.indexToPosition(index, fill.location);\r\n\t\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, fill.location);\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tthis.fillRule(dataItem, itemIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (dataItem.bullet) {\r\n\t\t\trenderer.updateBullet(dataItem.bullet, position, endPosition);\r\n\t\t}\r\n\r\n\r\n\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\tif (mask) {\r\n\t\t\trenderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tthis.dataItemsByCategory.clear();\r\n\t\tsuper.disposeData();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes the axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t * @param dataContext The raw data that corresponds to this data item\r\n\t */\r\n\tpublic processDataItem(dataItem: this[\"_dataItem\"], dataContext: Object): void {\r\n\t\tif (dataItem) {\r\n\t\t\t// creat a collection for fast access\r\n\t\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t\t\t// check if such category already exists\r\n\t\t\t//let existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n\t\t\t//if (existingDataItem && existingDataItem != dataItem) {\r\n\t\t\t//\tthis.dataItems.remove(existingDataItem);\r\n\t\t\t//}\r\n\r\n\t\t\tif ($type.hasValue(dataItem.category)) {\r\n\t\t\t\tthis.dataItemsByCategory.setKey(dataItem.category, dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected getDataItem(dataContext?: any): this[\"_dataItem\"] {\r\n\t\tlet category: string = <string>(dataContext[this.dataFields.category]);\r\n\t\tif ($type.hasValue(category)) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\treturn dataItem;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this.dataItems.create();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a category index to an actual screen coordinate on the axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param index Index\r\n\t * @param location Location (0-1)\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic indexToPosition(index: number, location?: AxisItemLocation | number): number {\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet difference: number = this.adjustDifference(startIndex, endIndex);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tdifference -= startLocation;\r\n\t\tdifference -= (1 - endLocation);\r\n\r\n\t\tif (this._axisBreaks) {\r\n\t\t\tlet axisBreaks = this._axisBreaks;\r\n\r\n\t\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\t\tif (index < startIndex || !$type.isNumber(breakStartIndex) || !$type.isNumber(breakEndIndex)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($math.intersect({ start: breakStartIndex, end: breakEndIndex }, { start: startIndex, end: endIndex })) {\r\n\t\t\t\t\tbreakStartIndex = Math.max(startIndex, breakStartIndex);\r\n\t\t\t\t\tbreakEndIndex = Math.min(endIndex, breakEndIndex);\r\n\r\n\t\t\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\t\t\t// value to the right of break end\r\n\t\t\t\t\tif (index > breakEndIndex) {\r\n\t\t\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// value to the left of break start\r\n\t\t\t\t\telse if (index < breakStartIndex) {\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// value within break\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tindex = breakStartIndex + (index - breakStartIndex) * breakSize;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tlet deltaPosition = 0;\r\n\t\tlet dataItem = this.dataItems.getIndex(index);\r\n\t\tif (dataItem) {\r\n\t\t\tdeltaPosition = dataItem.deltaPosition;\r\n\t\t}\r\n\r\n\t\treturn $math.round(deltaPosition + (index + location - startLocation - startIndex) / difference, 5);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Position\r\n\t */\r\n\tpublic categoryToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.categoryToIndex(category);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic categoryToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\tlet position = this.categoryToPosition(category, location);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tanyToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\treturn this.categoryToPoint(category, location);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * An alias to `categoryToPosition()`.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\treturn this.categoryToPosition(category, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts named category to an index of data item it corresponds to.\r\n\t *\r\n\t * @param category Category\r\n\t * @return Data item index\r\n\t */\r\n\tpublic categoryToIndex(category: string): number {\r\n\t\tif ($type.hasValue(category)) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\t\tif (dataItem) {\r\n\t\t\t\treturn dataItem.index;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the axis to specific named ctaegories.\r\n\t *\r\n\t * @param startCategory Start category\r\n\t * @param endCategory End category\r\n\t */\r\n\tpublic zoomToCategories(startCategory: string, endCategory: string): void {\r\n\t\tthis.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1);\r\n\t}\r\n\r\n\t/**\r\n\t * [getAnyRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param start [description]\r\n\t * @param end [description]\r\n\t * @param startLocation [description]\r\n\t * @param endLocation [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getAnyRangePath(start: string, end: string, startLocation?: AxisItemLocation, endLocation?: AxisItemLocation): string {\r\n\t\tlet startPos: number = this.categoryToPosition(start, startLocation);\r\n\t\tlet endPos: number = this.categoryToPosition(end, endLocation);\r\n\t\treturn this.getPositionRangePath(startPos, endPos); // Base class (Axis) gets range shape from AxisRenderer\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position (px) within axis and adjust it to a specific\r\n\t * `location` within category it corresponds to.\r\n\t *\r\n\t * @param position Source position (px)\r\n\t * @param location Location within category (0-1)\r\n\t * @return Adjusted position (px)\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.positionToIndex(position);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Finds and returns first series data item with specific category\r\n\t * @param series Target series\r\n\t * @param category Category\r\n\t * @return XYSeriesDataItem data item\r\n\t */\r\n\tpublic getFirstSeriesDataItem(series: XYSeries, category: string): XYSeriesDataItem {\r\n\r\n\t\tfor (let i = 0; i < series.dataItems.length; i++) {\r\n\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Finds and returns last series data item with specific category.\r\n\t * @param series Target series\r\n\t * @param category Category\r\n\t * @return XYSeriesDataItem data item\r\n\t */\r\n\tpublic getLastSeriesDataItem(series: XYSeries, category: string): XYSeriesDataItem {\r\n\r\n\t\tfor (let i = series.dataItems.length - 1; i >= 0; i--) {\r\n\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// todo: optimize\r\n\tpublic getSeriesDataItemByCategory(category: string, series: XYSeries): XYSeriesDataItem {\r\n\t\tlet seriesDataItem: XYSeriesDataItem;\r\n\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\tseriesDataItem = dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (series.yAxis == this) {\r\n\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\tseriesDataItem = dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn seriesDataItem;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a data item from Series that corresponds to a specific absolute\r\n\t * position on the Axis.\r\n\t *\r\n\t * @param series Target series\r\n\t * @param position Position (px)\r\n\t * @return XYSeriesDataItem data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\r\n\t\tif ($type.isNumber(position)) {\r\n\r\n\t\t\tlet index = this.positionToIndex(position);\r\n\r\n\t\t\tif (index >= this.dataItems.length) {\r\n\t\t\t\tindex--;\r\n\t\t\t}\r\n\r\n\t\t\tlet dataItem = this.dataItems.getIndex(index);\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet category = dataItem.category;\r\n\t\t\t\tlet sdi: XYSeriesDataItem;\r\n\r\n\t\t\t\tlet seriesDataItem = series.dataItems.getIndex(index);\r\n\t\t\t\tif (seriesDataItem) {\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryX == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryY == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\t\t\tif (!sdi) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (Math.abs(index - sdi.index) > Math.abs(index - dataItem.index)) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\t\t\tif (!sdi) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (Math.abs(index - sdi.index) > Math.abs(index - dataItem.index)) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\t//@todo\r\n\t\t\t\tif (findNearest) {\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn sdi;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key?: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet position = this.getPositionX(dataItem, key, location, stackKey, range);\r\n\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.x;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative position on axis for series' data item.\r\n\t *\r\n\t * @since 4.5.14\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic getPositionX(dataItem: XYSeriesDataItem, key?: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key?: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\r\n\t\tlet position = this.getPositionY(dataItem, key, location, stackKey, range);\r\n\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative position on axis for series' data item.\r\n\t *\r\n\t * @since 4.5.14\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic getPositionY(dataItem: XYSeriesDataItem, key?: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack key (?)\r\n\t * @param range Range to fit in\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet position = this.categoryToPosition(dataItem.categories[key], location);\r\n\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(position);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the start of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell start position (px)\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the end of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell end position (px)\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a category tooltip, based on specific position\r\n\t * within axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (px)\r\n\t * @return Label (category)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\r\n\t\tif (dataItem) {\r\n\t\t\tthis.tooltipDataItem = dataItem;\r\n\t\t\tthis.tooltip.dataItem = dataItem;\r\n\t\t\tif (this.tooltipText) {\r\n\t\t\t\treturn this.tooltipText;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._adapterO) {\r\n\t\t\t\treturn dataItem.category;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this._adapterO.apply(\"getTooltipText\", dataItem.category);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an index of the category that corresponds to specific pixel\r\n\t * position within axis.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Category index\r\n\t */\r\n\tpublic positionToIndex(position: number): number {\r\n\t\tposition = $math.round(position, 10);\r\n\t\tif (position < 0) {\r\n\t\t\tposition = 0;\r\n\t\t}\r\n\r\n\t\tif (position > 1) {\r\n\t\t\tposition = 1;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet difference: number = endIndex - startIndex - this.startLocation - (1 - this.endLocation);\r\n\r\n\t\tposition += 1 / difference * this.startLocation;\r\n\t\tlet index: number = null;\r\n\r\n\t\tif (this._axisBreaks) {\r\n\t\t\tlet axisBreaks = this._axisBreaks;\r\n\r\n\t\t\t// in case we have some axis breaks\r\n\t\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\tlet breakStartPosition: number = axisBreak.startPosition;\r\n\t\t\t\tlet breakEndPosition: number = axisBreak.endPosition;\r\n\r\n\t\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\t\tbreakStartIndex = $math.max(breakStartIndex, startIndex);\r\n\t\t\t\tbreakEndIndex = $math.min(breakEndIndex, endIndex);\r\n\r\n\t\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\t\tdifference -= (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\r\n\t\t\t\t// position to the right of break end\r\n\t\t\t\tif (position > breakEndPosition) {\r\n\t\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t\t}\r\n\t\t\t\t// position to the left of break start\r\n\t\t\t\telse if (position < breakStartPosition) {\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// value within break\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\r\n\t\t\t\t\tindex = breakStartIndex + Math.round(breakPosition * (breakEndIndex - breakStartIndex));\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = Math.floor(position * difference + startIndex);\r\n\t\t}\r\n\t\tif (index >= this.dataItems.length) {\r\n\t\t\tindex = this.dataItems.length - 1;\r\n\t\t}\r\n\t\t// not good, when panning out of bounds, each time one less item gets selected\r\n\t\t//if (index >= endIndex) {\r\n\t\t//\tindex--;\r\n\t\t//}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns category based on position.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * This is a synonim of `getPositionLabel()` implemented here for consistentcy.\r\n\t *\r\n\t * @since 4.3.8\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic positionToCategory(position: number): string {\r\n\t\treturn this.getPositionLabel(position);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns category based on position.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn dataItem.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\t// This makes base grid to be drawn at the end of the axis and adds extra\r\n\t\t// grid which we need to nicely close the chart.\r\n\t\treturn this.renderer.positionToPoint(1);\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes Axis' renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\r\n\t\tlet renderer = this.renderer;\r\n\t\trenderer.baseGrid.disabled = true;\r\n\t}\r\n\r\n\t/**\r\n\t * Current frequency of labels of the axis.\r\n\t *\r\n\t * Normally it would be 1, but when labels start to be hidden due\r\n\t * to `minGridDistance` this read-only property will increase.\r\n\t *\r\n\t * @readonly\r\n\t * @since 4.2.0\r\n\t * @return Label frequency\r\n\t */\r\n\tpublic get frequency(): number {\r\n\t\treturn this._frequency;\r\n\t}\r\n\r\n\t/**\r\n\t * If set to a reference of [[ColumnSeries]] the categories will be sorted\r\n\t * by actual values.\r\n\t *\r\n\t * The categories are ordered in descending order (from highest values to\r\n\t * lowest). To reverse the order, use axis renderer's `inversed` setting.\r\n\t * E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * categoryAxis.sortBySeries = series;\r\n\t * categoryAxis.renderer.inversed = true;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * categoryAxis.sortBySeries = series;\r\n\t * categoryAxis.renderer.inversed = true;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"xAxes\": [{\r\n\t * // ...\r\n\t * \"sortBySeries\": \"s1\",\r\n\t * \"renderer\": {\r\n\t * // ...\r\n\t * \"inversed\": true\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @since 4.8.7\r\n\t * @param value Sort categories?\r\n\t */\r\n\tpublic set sortBySeries(value: ColumnSeries) {\r\n\t\tthis.setPropertyValue(\"sortBySeries\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Sort categories?\r\n\t */\r\n\tpublic get sortBySeries(): ColumnSeries {\r\n\t\treturn this.getPropertyValue(\"sortBySeries\");\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\tif ($type.hasValue(config.sortBySeries) && $type.isString(config.sortBySeries)) {\r\n\t\t\t\tif (this.map.hasKey(config.sortBySeries)) {\r\n\t\t\t\t\tconfig.sortBySeries = this.map.getKey(config.sortBySeries);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.addDelayedMap(\"sortBySeries\", config.sortBySeries);\r\n\t\t\t\t\tdelete config.sortBySeries;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxis\"] = CategoryAxis;\r\nregistry.registeredClasses[\"CategoryAxisDataItem\"] = CategoryAxisDataItem;\r\n"]}
\No newline at end of file