/*! FixedColumns 6.1.1 for DataTables
 * Copyright (c) SpryMedia Ltd - datatables.net/license
 */
import DataTable,{util,Dom}from"datatables.net";if(!DataTable||!DataTable.versionCheck("3.1"))throw"Warning: FixedColumns requires DataTables 3.1 or newer";class FixedColumns{constructor(t,s){t=new DataTable.Api(t);this.classes=util.object.assignDeep({},FixedColumns.classes),this.c=util.object.assignDeep({},FixedColumns.defaults,s),this.s={dt:t,rtl:"rtl"===Dom.s(t.table().node()).css("direction")},s&&void 0!==s.leftColumns&&(s.left=s.leftColumns),s&&void 0!==s.left&&(this.c[this.s.rtl?"end":"start"]=s.left),s&&void 0!==s.rightColumns&&(s.right=s.rightColumns),s&&void 0!==s.right&&(this.c[this.s.rtl?"start":"end"]=s.right),this.dom={bottomBlocker:Dom.c("div").classAdd(this.classes.bottomBlocker),topBlocker:Dom.c("div").classAdd(this.classes.topBlocker),scroller:Dom.s(this.s.dt.table().container()).find("div.dt-scroll-body")},this.s.dt.settings()[0].initDone?(this._addStyles(),this._setKeyTableListener()):t.one("init.dt.dtfc",()=>{this._addStyles(),this._setKeyTableListener()}),t.on("column-sizing.dt.dtfc column-reorder.dt.dtfc draw.dt.dtfc",()=>this._addStyles());let e=DataTable.util.debounce(()=>{this._addStyles()},50);return t.on("column-visibility.dt.dtfc",()=>{e()}),this.dom.scroller.on("scroll.dtfc",()=>this._scroll()),this._scroll(),t.settings()[0]._fixedColumns=this,t.on("destroy",()=>this._destroy()),this}end(t){return void 0!==t?(0<=t&&t<=this.s.dt.columns().count()&&(this.c.end=t,this._addStyles()),this):this.c.end}left(t){return this.s.rtl?this.end(t):this.start(t)}right(t){return this.s.rtl?this.start(t):this.end(t)}start(t){return void 0!==t?(0<=t&&t<=this.s.dt.columns().count()&&(this.c.start=t,this._addStyles()),this):this.c.start}_addStyles(){let e=this.s.dt,i=this,l=this.s.dt.columns(":visible").count(),o=e.table().header.structure(":visible"),d=e.table().footer.structure(":visible"),n=e.columns(":visible").widths().toArray();var t=Dom.s(e.table().node()).closest("div.dt-scroll"),s=Dom.s(e.table().node()).closest("div.dt-scroll-body").get(0),a=this.s.rtl;let r=this.c.start,c=this.c.end;var h=a?c:r,a=a?r:c;let f=e.settings()[0].browser.barWidth;if(0===t.count())return this;s.offsetWidth===s.clientWidth&&(f=0),e.columns().every(function(t){t=e.column.index("toVisible",t);let s;null!==t&&(t<r?(s=i._sum(n,t),i._fixColumn(t,s,"start",o,d,f)):t>=l-c?(s=i._sum(n,l-t-1,!0),i._fixColumn(t,s,"end",o,d,f)):i._fixColumn(t,0,"none",o,d,f))}),Dom.s(e.table().node()).classToggle(i.classes.tableFixedStart,0<r).classToggle(i.classes.tableFixedEnd,0<c).classToggle(i.classes.tableFixedLeft,0<h).classToggle(i.classes.tableFixedRight,0<a);s=e.table().header(),h=e.table().footer(),a=Dom.s(s).height("outer"),s=Dom.s(h).height("outer");this.dom.topBlocker.appendTo(t).css("top","0").css(this.s.rtl?"left":"right","0").css("height",a+"px").css("width",f+1+"px").css("display",f?"block":"none"),h&&this.dom.bottomBlocker.appendTo(t).css("bottom","0").css(this.s.rtl?"left":"right","0").css("height",s+"px").css("width",f+1+"px").css("display",f?"block":"none")}_destroy(){this.s.dt.off(".dtfc"),this.dom.scroller.off(".dtfc"),Dom.s(this.s.dt.table().node()).classRemove(this.classes.tableScrollingEnd+" "+this.classes.tableScrollingLeft+" "+this.classes.tableScrollingStart+" "+this.classes.tableScrollingRight),this.dom.bottomBlocker.remove(),this.dom.topBlocker.remove()}_fixColumn(s,l,o,t,e,d){var i=this.s.dt;let n=(s,e)=>{if("none"===o)s.css("position","").css("left","").css("right","").classRemove(this.classes.fixedEnd+" "+this.classes.fixedLeft+" "+this.classes.fixedRight+" "+this.classes.fixedStart);else{let t="start"===o?"left":"right";this.s.rtl&&(t="start"===o?"right":"left");var i=l;"end"!==o||"header"!==e&&"footer"!==e||(i+=d),s.css("position","sticky").css(t,i+"px").classAdd("start"===o?this.classes.fixedStart:this.classes.fixedEnd).classAdd("left"===t?this.classes.fixedLeft:this.classes.fixedRight)}};t.forEach(t=>{t[s]&&n(Dom.s(t[s].cell),"header")}),n(Dom.s(i.column(s+":visible",{page:"current"}).nodes().toArray()),"body"),e&&e.forEach(t=>{t[s]&&n(Dom.s(t[s].cell),"footer")})}_scroll(){var t,s,e,i,l=this.dom.scroller.get(0);l&&(t=Dom.s(this.s.dt.table().node()).add(this.s.dt.table().header().parentNode).add(this.s.dt.table().footer().parentNode).add(Dom.s(this.s.dt.table().container()).find("div.dt-scroll-headInner table").get(0)).add(Dom.s(this.s.dt.table().container()).find("div.dt-scroll-footInner table").get(0)),s=l.scrollLeft,e=!this.s.rtl,i=0!==s,l=l.scrollWidth>l.clientWidth+Math.abs(s)+1,t.classToggle(this.classes.tableScrollingStart,i),t.classToggle(this.classes.tableScrollingEnd,l),t.classToggle(this.classes.tableScrollingLeft,i&&e||l&&!e),t.classToggle(this.classes.tableScrollingRight,l&&e||i&&!e))}_setKeyTableListener(){this.s.dt.on("key-focus.dt.dtfc",(t,s,e)=>{let i;var l,o,d=Dom.s(e.node()).offset(),n=this.dom.scroller.get(0),a=Dom.s(this.s.dt.table().node()).closest("div.dt-scroll-body");0<this.c.start&&(o=(l=Dom.s(this.s.dt.column(this.c.start-1).header())).offset(),l=l.width("outer"),Dom.s(e.node()).classHas(this.classes.fixedLeft)?a.scrollLeft(0):d.left<o.left+l&&(i=a.scrollLeft(),a.scrollLeft(i-(o.left+l-d.left)))),0<this.c.end&&(o=this.s.dt.columns().data().toArray().length,l=Dom.s(e.node()).width("outer"),o=Dom.s(this.s.dt.column(o-this.c.end).header()).offset(),Dom.s(e.node()).classHas(this.classes.fixedRight)?a.scrollLeft(n.scrollWidth-n.clientWidth):d.left+l>o.left&&(i=a.scrollLeft(),a.scrollLeft(i-(o.left-(d.left+l)))))})}_sum(t,s,e=!1){return(t=e?t.slice().reverse():t).slice(0,s).reduce((t,s)=>t+s,0)}}FixedColumns.version="6.1.1",FixedColumns.classes={bottomBlocker:"dtfc-bottom-blocker",fixedEnd:"dtfc-fixed-end",fixedLeft:"dtfc-fixed-left",fixedRight:"dtfc-fixed-right",fixedStart:"dtfc-fixed-start",tableFixedEnd:"dtfc-has-end",tableFixedLeft:"dtfc-has-left",tableFixedRight:"dtfc-has-right",tableFixedStart:"dtfc-has-start",tableScrollingEnd:"dtfc-scrolling-end",tableScrollingLeft:"dtfc-scrolling-left",tableScrollingRight:"dtfc-scrolling-right",tableScrollingStart:"dtfc-scrolling-start",topBlocker:"dtfc-top-blocker"},FixedColumns.defaults={i18n:{button:"FixedColumns"},start:1,end:0},DataTable.FixedColumns=FixedColumns;let apiRegister=DataTable.Api.register;function _init(t,s=null){t=new DataTable.Api(t),s=s||t.init().fixedColumns||DataTable.defaults.fixedColumns;return new FixedColumns(t,s)}apiRegister("fixedColumns()",function(){return this.inst(this.context)}),apiRegister("fixedColumns().start()",function(t){var s=this.context[0];return void 0!==t?(s._fixedColumns.start(t),this):s._fixedColumns.start()}),apiRegister("fixedColumns().end()",function(t){var s=this.context[0];return void 0!==t?(s._fixedColumns.end(t),this):s._fixedColumns.end()}),apiRegister("fixedColumns().left()",function(t){var s=this.context[0];return void 0!==t?(s._fixedColumns.left(t),this):s._fixedColumns.left()}),apiRegister("fixedColumns().right()",function(t){var s=this.context[0];return void 0!==t?(s._fixedColumns.right(t),this):s._fixedColumns.right()}),DataTable.ext.buttons.fixedColumns={action(t,s,e,i){Dom.s(e).attr("active")?(Dom.s(e).attrRemove("active").classRemove("active"),s.fixedColumns().start(0),s.fixedColumns().end(0)):(Dom.s(e).attr("active","true").classAdd("active"),s.fixedColumns().start(i.config.start),s.fixedColumns().end(i.config.end))},config:{start:1,end:0},init(t,s,e){void 0===t.settings()[0]._fixedColumns&&_init(t.settings(),e.config),Dom.s(s).attr("active","true").classAdd("active"),t.button(s).text(e.text||t.i18n("buttons.fixedColumns",t.settings()[0]._fixedColumns.c.i18n.button))},text:null},Dom.on("plugin-init.dt",function(t,s){"dt"!==t.namespace||!s.init.fixedColumns&&!DataTable.defaults.fixedColumns||s._fixedColumns||_init(s,null)});export default DataTable;