katucharts.js 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/LICENSE +106 -0
  2. package/README.md +1100 -0
  3. package/dist/__vite-optional-peer-dep_jspdf_katucharts-BDMct_Gn.js +4 -0
  4. package/dist/accessibility/A11yModule.d.ts +26 -0
  5. package/dist/axis/Axis.d.ts +140 -0
  6. package/dist/axis/AxisCoordinator.d.ts +38 -0
  7. package/dist/bio.d.ts +22 -0
  8. package/dist/components/Credits.d.ts +38 -0
  9. package/dist/components/Crosshair.d.ts +15 -0
  10. package/dist/components/DataLabels.d.ts +7 -0
  11. package/dist/components/ExportButton.d.ts +27 -0
  12. package/dist/components/Legend.d.ts +53 -0
  13. package/dist/components/TitleRenderer.d.ts +19 -0
  14. package/dist/components/Tooltip.d.ts +61 -0
  15. package/dist/core/Chart.d.ts +156 -0
  16. package/dist/core/EventBus.d.ts +14 -0
  17. package/dist/core/InteractionController.d.ts +62 -0
  18. package/dist/core/OptionsParser.d.ts +61 -0
  19. package/dist/core/Registry.d.ts +27 -0
  20. package/dist/core/SVGRenderer.d.ts +48 -0
  21. package/dist/core/ScrollablePlotOverlay.d.ts +31 -0
  22. package/dist/core/StackComputer.d.ts +25 -0
  23. package/dist/core/StateManager.d.ts +21 -0
  24. package/dist/core/UpdateScheduler.d.ts +28 -0
  25. package/dist/core/animationConstants.d.ts +20 -0
  26. package/dist/core/chartTypes.d.ts +46 -0
  27. package/dist/core/registerAll.d.ts +4 -0
  28. package/dist/core/registerBio.d.ts +4 -0
  29. package/dist/core/registerCore.d.ts +4 -0
  30. package/dist/core/registerFinance.d.ts +4 -0
  31. package/dist/core/registerFinancial.d.ts +4 -0
  32. package/dist/core/registerFlow.d.ts +4 -0
  33. package/dist/core/registerGeneral.d.ts +4 -0
  34. package/dist/datatable/DataTable.d.ts +162 -0
  35. package/dist/datatable/DataTableDefaults.d.ts +7 -0
  36. package/dist/datatable/api/TableApi.d.ts +35 -0
  37. package/dist/datatable/columns/ColumnDef.d.ts +16 -0
  38. package/dist/datatable/columns/ColumnManager.d.ts +31 -0
  39. package/dist/datatable/data/DataProcessor.d.ts +46 -0
  40. package/dist/datatable/data/DataSource.d.ts +26 -0
  41. package/dist/datatable/editing/CellEditor.d.ts +29 -0
  42. package/dist/datatable/export/TableExport.d.ts +23 -0
  43. package/dist/datatable/locales/en.d.ts +9 -0
  44. package/dist/datatable/locales/es.d.ts +6 -0
  45. package/dist/datatable/locales/index.d.ts +22 -0
  46. package/dist/datatable/locales/pt-BR.d.ts +6 -0
  47. package/dist/datatable/locales/resolveLocale.d.ts +16 -0
  48. package/dist/datatable/locales/zh.d.ts +6 -0
  49. package/dist/datatable/render/CellRenderer.d.ts +24 -0
  50. package/dist/datatable/render/HeaderRenderer.d.ts +51 -0
  51. package/dist/datatable/render/PaginationRenderer.d.ts +26 -0
  52. package/dist/datatable/render/SearchRenderer.d.ts +21 -0
  53. package/dist/datatable/render/TableRenderer.d.ts +81 -0
  54. package/dist/datatable/render/ToolbarRenderer.d.ts +34 -0
  55. package/dist/datatable/render/icons.d.ts +24 -0
  56. package/dist/datatable/render/popover.d.ts +15 -0
  57. package/dist/datatable/selection/SelectionManager.d.ts +29 -0
  58. package/dist/datatable/themes/TableTheme.d.ts +36 -0
  59. package/dist/datatable/themes/styleSheet.d.ts +16 -0
  60. package/dist/datatable.d.ts +19 -0
  61. package/dist/export/ChartExporter.d.ts +50 -0
  62. package/dist/export/Export.d.ts +76 -0
  63. package/dist/finance.d.ts +49 -0
  64. package/dist/index.d.ts +67 -0
  65. package/dist/indicators/Indicator.d.ts +23 -0
  66. package/dist/indicators/expandIndicators.d.ts +18 -0
  67. package/dist/indicators/moving-averages/DEMA.d.ts +10 -0
  68. package/dist/indicators/moving-averages/EMA.d.ts +12 -0
  69. package/dist/indicators/moving-averages/SMA.d.ts +11 -0
  70. package/dist/indicators/moving-averages/TEMA.d.ts +10 -0
  71. package/dist/indicators/moving-averages/WMA.d.ts +12 -0
  72. package/dist/indicators/oscillators/CCI.d.ts +11 -0
  73. package/dist/indicators/oscillators/MACD.d.ts +20 -0
  74. package/dist/indicators/oscillators/Momentum.d.ts +10 -0
  75. package/dist/indicators/oscillators/ROC.d.ts +10 -0
  76. package/dist/indicators/oscillators/RSI.d.ts +11 -0
  77. package/dist/indicators/oscillators/Stochastic.d.ts +20 -0
  78. package/dist/indicators/registry.d.ts +9 -0
  79. package/dist/indicators/trend/ADX.d.ts +11 -0
  80. package/dist/indicators/trend/IchimokuCloud.d.ts +14 -0
  81. package/dist/indicators/trend/PSAR.d.ts +11 -0
  82. package/dist/indicators/util.d.ts +8 -0
  83. package/dist/indicators/volatility/ATR.d.ts +11 -0
  84. package/dist/indicators/volatility/BollingerBands.d.ts +11 -0
  85. package/dist/indicators/volume/OBV.d.ts +11 -0
  86. package/dist/indicators/volume/VBP.d.ts +12 -0
  87. package/dist/indicators/volume/VWAP.d.ts +12 -0
  88. package/dist/interaction/Drilldown.d.ts +29 -0
  89. package/dist/interaction/HoverManager.d.ts +47 -0
  90. package/dist/interaction/Zoom.d.ts +68 -0
  91. package/dist/katucharts-bio.es.js +5861 -0
  92. package/dist/katucharts-bio.umd.js +1 -0
  93. package/dist/katucharts-datatable.es.js +3363 -0
  94. package/dist/katucharts-datatable.umd.js +296 -0
  95. package/dist/katucharts-finance.es.js +4364 -0
  96. package/dist/katucharts-finance.umd.js +1 -0
  97. package/dist/katucharts-react.es.js +35 -0
  98. package/dist/katucharts-react.umd.js +1 -0
  99. package/dist/katucharts.es.js +20531 -0
  100. package/dist/katucharts.umd.js +9 -0
  101. package/dist/layout/LayoutEngine.d.ts +44 -0
  102. package/dist/license/LicenseManager.d.ts +63 -0
  103. package/dist/options/defaults.d.ts +5 -0
  104. package/dist/react/KatuChartsReact.d.ts +16 -0
  105. package/dist/react.d.ts +2 -0
  106. package/dist/responsive/ResponsiveEngine.d.ts +15 -0
  107. package/dist/series/BaseSeries.d.ts +186 -0
  108. package/dist/series/bioinformatics/CircosChart.d.ts +4 -0
  109. package/dist/series/bioinformatics/ClusteredHeatmapChart.d.ts +22 -0
  110. package/dist/series/bioinformatics/ForestPlotChart.d.ts +21 -0
  111. package/dist/series/bioinformatics/KaplanMeierChart.d.ts +22 -0
  112. package/dist/series/bioinformatics/ManhattanChart.d.ts +34 -0
  113. package/dist/series/bioinformatics/PCoAChart.d.ts +22 -0
  114. package/dist/series/bioinformatics/PhyloTreeChart.d.ts +27 -0
  115. package/dist/series/bioinformatics/SequenceLogoChart.d.ts +21 -0
  116. package/dist/series/bioinformatics/ViolinChart.d.ts +23 -0
  117. package/dist/series/bioinformatics/VolcanoChart.d.ts +28 -0
  118. package/dist/series/bioinformatics/circos/CircosChart.d.ts +20 -0
  119. package/dist/series/bioinformatics/circos/CircosColorScales.d.ts +6 -0
  120. package/dist/series/bioinformatics/circos/CircosComparativeChart.d.ts +41 -0
  121. package/dist/series/bioinformatics/circos/CircosHeatmapChart.d.ts +31 -0
  122. package/dist/series/bioinformatics/circos/CircosLayoutEngine.d.ts +37 -0
  123. package/dist/series/bioinformatics/circos/CircosRules.d.ts +6 -0
  124. package/dist/series/bioinformatics/circos/CircosSpiralChart.d.ts +39 -0
  125. package/dist/series/bioinformatics/circos/CircosTypes.d.ts +131 -0
  126. package/dist/series/bioinformatics/circos/tracks/AreaTrackRenderer.d.ts +7 -0
  127. package/dist/series/bioinformatics/circos/tracks/ConnectorTrackRenderer.d.ts +7 -0
  128. package/dist/series/bioinformatics/circos/tracks/GlyphTrackRenderer.d.ts +7 -0
  129. package/dist/series/bioinformatics/circos/tracks/HeatmapTrackRenderer.d.ts +7 -0
  130. package/dist/series/bioinformatics/circos/tracks/HighlightTrackRenderer.d.ts +6 -0
  131. package/dist/series/bioinformatics/circos/tracks/HistogramTrackRenderer.d.ts +7 -0
  132. package/dist/series/bioinformatics/circos/tracks/LineTrackRenderer.d.ts +7 -0
  133. package/dist/series/bioinformatics/circos/tracks/LinkTrackRenderer.d.ts +8 -0
  134. package/dist/series/bioinformatics/circos/tracks/LollipopTrackRenderer.d.ts +9 -0
  135. package/dist/series/bioinformatics/circos/tracks/RibbonTrackRenderer.d.ts +9 -0
  136. package/dist/series/bioinformatics/circos/tracks/ScatterTrackRenderer.d.ts +7 -0
  137. package/dist/series/bioinformatics/circos/tracks/StackTrackRenderer.d.ts +7 -0
  138. package/dist/series/bioinformatics/circos/tracks/TextTrackRenderer.d.ts +8 -0
  139. package/dist/series/bioinformatics/circos/tracks/TileTrackRenderer.d.ts +7 -0
  140. package/dist/series/bioinformatics/circos/tracks/TrackAxesRenderer.d.ts +6 -0
  141. package/dist/series/bioinformatics/circos/tracks/TrackBackgroundRenderer.d.ts +5 -0
  142. package/dist/series/cartesian/AreaChart.d.ts +33 -0
  143. package/dist/series/cartesian/BoxPlotChart.d.ts +24 -0
  144. package/dist/series/cartesian/BubbleChart.d.ts +34 -0
  145. package/dist/series/cartesian/ColumnChart.d.ts +37 -0
  146. package/dist/series/cartesian/LineChart.d.ts +28 -0
  147. package/dist/series/cartesian/ScatterChart.d.ts +20 -0
  148. package/dist/series/cartesian/SplineChart.d.ts +9 -0
  149. package/dist/series/cartesian/WaterfallChart.d.ts +25 -0
  150. package/dist/series/financial/AreaRangeChart.d.ts +24 -0
  151. package/dist/series/financial/BaselineChart.d.ts +20 -0
  152. package/dist/series/financial/CandlestickChart.d.ts +55 -0
  153. package/dist/series/financial/ColumnRangeChart.d.ts +16 -0
  154. package/dist/series/financial/FlagsChart.d.ts +34 -0
  155. package/dist/series/financial/HeikinAshiChart.d.ts +11 -0
  156. package/dist/series/financial/HollowCandlestickChart.d.ts +17 -0
  157. package/dist/series/financial/KagiChart.d.ts +23 -0
  158. package/dist/series/financial/LineBreakChart.d.ts +23 -0
  159. package/dist/series/financial/PointAndFigureChart.d.ts +24 -0
  160. package/dist/series/financial/RenkoChart.d.ts +22 -0
  161. package/dist/series/financial/VBPChart.d.ts +18 -0
  162. package/dist/series/financial/VolumeChart.d.ts +15 -0
  163. package/dist/series/flow/DependencyWheelChart.d.ts +23 -0
  164. package/dist/series/flow/NetworkGraphChart.d.ts +18 -0
  165. package/dist/series/flow/SankeyChart.d.ts +24 -0
  166. package/dist/series/gauge/GaugeChart.d.ts +40 -0
  167. package/dist/series/heatmap/HeatmapChart.d.ts +18 -0
  168. package/dist/series/hierarchical/SunburstChart.d.ts +44 -0
  169. package/dist/series/hierarchical/TreegraphChart.d.ts +19 -0
  170. package/dist/series/hierarchical/TreemapChart.d.ts +20 -0
  171. package/dist/series/hierarchical/WordcloudChart.d.ts +19 -0
  172. package/dist/series/index.d.ts +45 -0
  173. package/dist/series/map/FlowmapChart.d.ts +33 -0
  174. package/dist/series/map/MapChart.d.ts +53 -0
  175. package/dist/series/map/MapPointChart.d.ts +26 -0
  176. package/dist/series/map/mapProjection.d.ts +46 -0
  177. package/dist/series/pie/PieChart.d.ts +53 -0
  178. package/dist/series/polar/PolarChart.d.ts +18 -0
  179. package/dist/series/race/BarRaceChart.d.ts +44 -0
  180. package/dist/series/timeline/TimelineChart.d.ts +23 -0
  181. package/dist/series/venn/VennChart.d.ts +28 -0
  182. package/dist/stock/DataGrouping.d.ts +21 -0
  183. package/dist/stock/Navigator.d.ts +25 -0
  184. package/dist/stock/RangeSelector.d.ts +9 -0
  185. package/dist/stock/StockController.d.ts +47 -0
  186. package/dist/stockcharts.d.ts +8 -0
  187. package/dist/streaming/StreamAdapter.d.ts +36 -0
  188. package/dist/types/datatable-options.d.ts +633 -0
  189. package/dist/types/options.d.ts +1333 -0
  190. package/dist/utils/CircularBuffer.d.ts +24 -0
  191. package/dist/utils/chartText.d.ts +18 -0
  192. package/dist/utils/color.d.ts +23 -0
  193. package/dist/utils/decimation.d.ts +19 -0
  194. package/dist/utils/deepMerge.d.ts +5 -0
  195. package/dist/utils/dom.d.ts +10 -0
  196. package/dist/utils/format.d.ts +42 -0
  197. package/dist/utils/index.d.ts +7 -0
  198. package/dist/utils/math.d.ts +6 -0
  199. package/dist/utils/throttle.d.ts +2 -0
  200. package/package.json +95 -0
@@ -0,0 +1,296 @@
1
+ (function(x,C){typeof exports=="object"&&typeof module<"u"?C(exports):typeof define=="function"&&define.amd?define(["exports"],C):(x=typeof globalThis<"u"?globalThis:x||self,C(x.KatuChartsDataTable={}))})(this,function(x){"use strict";class C{constructor(){this.listeners=new Map}on(e,t){return this.listeners.has(e)||this.listeners.set(e,[]),this.listeners.get(e).push({callback:t,once:!1}),this}once(e,t){return this.listeners.has(e)||this.listeners.set(e,[]),this.listeners.get(e).push({callback:t,once:!0}),this}off(e,t){if(!t)return this.listeners.delete(e),this;const i=this.listeners.get(e);return i&&this.listeners.set(e,i.filter(s=>s.callback!==t)),this}emit(e,...t){const i=this.listeners.get(e);if(!i)return this;const s=[];for(const r of i)r.callback(...t),r.once&&s.push(r);return s.length&&this.listeners.set(e,i.filter(r=>!s.includes(r))),this}removeAllListeners(){this.listeners.clear()}static mapEvent(e,t){return`${e}:${t.toLowerCase()}`}}function U(c){if(typeof c=="string"){const e=document.getElementById(c);if(!e)throw new Error(`KatuCharts: container element "${c}" not found`);return e}return c}function T(c,e){const t=document.createElement("div");return c&&(t.className=c),e&&e.appendChild(t),t}function L(c){c&&c.parentNode&&c.parentNode.removeChild(c)}const q=20;function N(c){return typeof c=="object"&&c!==null&&!Array.isArray(c)&&Object.getPrototypeOf(c)===Object.prototype}function P(c,...e){return z(c,e,0)}function z(c,e,t){if(t>q)return c;const i={...c};for(const s of e)if(s)for(const r of Object.keys(s)){if(r==="__proto__"||r==="constructor"||r==="prototype")continue;const n=s[r],a=i[r];n!==void 0&&(n===null?i[r]=null:N(n)&&N(a)?i[r]=z(a,[n],t+1):Array.isArray(n)?i[r]=[...n]:i[r]=n)}return i}function K(c,e){let t=0,i=null;return function(...s){const r=Date.now(),n=e-(r-t);n<=0?(i&&(clearTimeout(i),i=null),t=r,c.apply(this,s)):i||(i=setTimeout(()=>{t=Date.now(),i=null,c.apply(this,s)},n))}}function I(c,e){let t=null;return function(...i){t&&clearTimeout(t),t=setTimeout(()=>{c.apply(this,i)},e)}}const Y={data:[],responsive:!0,sorting:{enabled:!0,multiSort:!1,defaultSort:[]},filtering:{enabled:!0,position:"header"},search:{enabled:!1,placeholder:"Search...",debounceMs:300,caseSensitive:!1},pagination:{enabled:!0,pageSize:25,pageSizes:[10,25,50,100],position:"bottom",showPageSizeSelector:!0,showPageInfo:!0,showFirstLast:!0},selection:{mode:"none",checkbox:!1,selectAll:!0,preserveOnFilter:!1},editing:{enabled:!1,mode:"cell",saveOnBlur:!0},columnPinning:{enabled:!1},columnResizing:{enabled:!0},columnReordering:{enabled:!1},columnVisibility:{enabled:!0},grouping:{enabled:!1,expanded:!0,showCount:!0},virtualScroll:{enabled:!1,rowHeight:36,overscan:10,threshold:1e3},masterDetail:{enabled:!1,expandOnRowClick:!1,singleExpand:!1,expandIcon:"▶",collapseIcon:"▼"},treeData:{enabled:!1,childrenField:"children",expandAll:!1,indent:20},contextMenu:{enabled:!1},toolbar:{enabled:!0,position:"top",items:["search","columnToggle","export"]},exporting:{enabled:!0,formats:["csv","json","clipboard"],csv:{delimiter:",",lineDelimiter:`
2
+ `,decimalPoint:".",includeHeaders:!0,onlyVisible:!0},json:{indent:2,onlyVisible:!0}},serverSide:{enabled:!1,method:"GET",debounceMs:300,loadingText:"Loading..."},style:{density:"normal",stripedRows:!1,showBorders:"horizontal"},lang:{}},X={compact:34,normal:44,comfortable:56},Q={compact:36,normal:44,comfortable:52};function Z(c){let e=0,t=0,i=0,s=0;for(const n of c)if(!(n==null||n==="")){if(s++,typeof n=="boolean"){t++;continue}if(typeof n=="number"||typeof n=="string"&&!isNaN(Number(n))&&n.trim()!==""){e++;continue}if(n instanceof Date){i++;continue}if(typeof n=="string"){const a=Date.parse(n);if(!isNaN(a)&&n.length>=8&&/\d/.test(n)&&/[-/T]/.test(n)){i++;continue}}}if(s===0)return"string";const r=.7;return t/s>=r?"boolean":i/s>=r?"date":e/s>=r?"number":"string"}function ee(c){if(!c.length)return[];const e=c[0];if(Array.isArray(e))return e.map((n,a)=>({field:String(a),title:`Column ${a+1}`}));const t=Object.keys(e),i=Math.min(c.length,100),s=c.slice(0,i),r=[];for(const n of t){const a=e[n];if(a!==null&&typeof a=="object"&&!Array.isArray(a)&&!(a instanceof Date))continue;const o=s.map(d=>d[n]),l=Z(o);r.push({field:n,title:O(n),type:l})}return r}function O(c){return c.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/[_-]/g," ").replace(/\b\w/g,e=>e.toUpperCase()).trim()}function te(c){switch(c){case"number":return"right";case"boolean":return"center";default:return"left"}}function S(c,e){return e.accessorFn?e.accessorFn(c):c==null?void 0:c[e.field]}const _={number:{min:80,ideal:100,cap:170},boolean:{min:64,ideal:84,cap:120},date:{min:100,ideal:128,cap:190},string:{min:96,ideal:140,cap:320},html:{min:96,ideal:160,cap:360}},ie=7.4,se=34;function re(c,e,t){const i=_[e]??_.string,s=c.sortable===!1?0:18;let r=String(c.title??c.field??"").length;const n=t.length>30?t.slice(0,30):t;for(const o of n){const l=S(o,c);if(l==null)continue;const d=String(l).length;d>r&&(r=d)}let a=Math.round(r*ie+se+s);return(c.cell||c.formatter||e==="number"||e==="boolean")&&(a=Math.max(a,i.ideal)),Math.min(i.cap,Math.max(i.min,a))}function ne(c,e,t=[],i=0){const s=c.map((r,n)=>{var R;const a=r.field??r.accessorKey??r.id??String(n),o=r.id??r.accessorKey??r.field??String(n),l=r.title??(typeof r.header=="string"?r.header:void 0)??O(a),d=r.type??"string",h=r.width??(r.size!=null?r.size:void 0),u=r.minWidth??r.minSize,g=r.maxWidth??r.maxSize,p=h!==void 0,m=p?oe(h,((R=_[d])==null?void 0:R.ideal)??140,e):Math.min(g??1/0,Math.max(u??0,re(r,d,t))),w=r.sortable??r.enableSorting??!0,y=r.filterable??r.enableColumnFilter??!0,k=r.enableHiding??!0;return{...r,field:a,id:o,title:l,type:d,width:h,minWidth:u,maxWidth:g,align:r.align??te(d),visible:r.visible!==!1,sortable:w!==!1,filterable:y!==!1,enableHiding:k,resizable:r.resizable!==!1,reorderable:r.reorderable!==!1,pinned:r.pinned??null,_index:n,_computedWidth:m,_explicitWidth:p,_visible:r.visible!==!1,_sortDirection:null,_sortPriority:-1,_filterValue:null,_pinnedOffset:0}});return ae(s,e,i),s}function ae(c,e,t){const i=c.filter(d=>d._visible);if(!i.length||e<=0)return;const s=e-t-2,r=i.reduce((d,h)=>d+h._computedWidth,0);let n=s-r;if(n<=0)return;const a=i.filter(d=>!d._explicitWidth&&(d.type==="string"||d.type==="html")&&d.align!=="right");let o=a.length?a:i.filter(d=>!d._explicitWidth);if(!o.length)return;const l=new Map(o.map(d=>[d,Math.max(160,d._computedWidth)]));for(;n>1&&o.length;){const d=o.reduce((g,p)=>g+(l.get(p)||0),0);if(d<=0)break;let h=0;const u=[];if(o.forEach(g=>{const p=Math.round(n*((l.get(g)||0)/d)),m=Math.min(p,l.get(g)||0);g._computedWidth+=m,l.set(g,(l.get(g)||0)-m),h+=m,(l.get(g)||0)>0&&u.push(g)}),h<=0)break;n-=h,o=u}}function oe(c,e,t){if(c===void 0)return e;if(typeof c=="number")return c;if(c.endsWith("%")){const i=parseFloat(c)/100;return Math.floor(t*i)}return c.endsWith("px")?parseFloat(c):e}function le(c){return c.filter(e=>e._visible)}function H(c){const e=le(c);let t=0;for(const s of e)s.pinned==="left"&&(s._pinnedOffset=t,t+=s._computedWidth);let i=0;for(let s=e.length-1;s>=0;s--){const r=e[s];r.pinned==="right"&&(r._pinnedOffset=i,i+=r._computedWidth)}}class V{constructor(e,t){this.responsiveHidden=new Set,this.columns=e,this.events=t}getColumns(){return this.columns}setColumns(e){this.columns=e}getVisibleColumns(){return this.columns.filter(e=>e._visible)}showColumn(e){const t=this.find(e);t&&(t._visible=!0,t.visible=!0,this.responsiveHidden.delete(e),this.recalcPinning(),this.events.emit("column:show",{field:e}))}hideColumn(e){const t=this.find(e);t&&(t._visible=!1,t.visible=!1,this.recalcPinning(),this.events.emit("column:hide",{field:e}))}toggleColumn(e,t){t?this.showColumn(e):this.hideColumn(e)}pinColumn(e,t){const i=this.find(e);i&&(i.pinned=t,this.recalcPinning(),this.events.emit("column:pin",{field:e,direction:t}))}reorderColumn(e,t){const i=this.columns.findIndex(r=>r.field===e);if(i<0||t<0||t>=this.columns.length)return;const[s]=this.columns.splice(i,1);this.columns.splice(t,0,s),this.columns.forEach((r,n)=>{r._index=n}),this.recalcPinning(),this.events.emit("column:reorder",{field:e,fromIndex:i,toIndex:t})}resizeColumn(e,t){const i=this.find(e);i&&(i._computedWidth=Math.max(i.minWidth??40,Math.min(i.maxWidth??2e3,t)),this.recalcPinning())}updateColumn(e,t){const i=this.find(e);i&&(Object.assign(i,t),t.visible!==void 0&&(i._visible=t.visible),this.recalcPinning())}applyResponsiveHiding(e){const t=this.columns.filter(r=>r._visible&&!this.responsiveHidden.has(r.field)),i=t.reduce((r,n)=>r+n._computedWidth,0),s=[];if(i>e){const r=[...t].filter(a=>a.priority!==void 0).sort((a,o)=>(a.priority??1/0)-(o.priority??1/0));let n=i;for(const a of r){if(n<=e)break;a._visible=!1,this.responsiveHidden.add(a.field),n-=a._computedWidth,s.push(a.field)}}else for(const r of this.responsiveHidden){const n=this.find(r);n&&n.visible!==!1&&(n._visible=!0,this.responsiveHidden.delete(r))}return s.length&&this.recalcPinning(),s}setSortState(e){for(const t of this.columns)t._sortDirection=null,t._sortPriority=-1;e.forEach(({column:t,direction:i},s)=>{const r=this.find(t);r&&(r._sortDirection=i,r._sortPriority=e.length>1?s:-1)})}setFilterValue(e,t){const i=this.find(e);i&&(i._filterValue=t)}clearFilters(){for(const e of this.columns)e._filterValue=null}find(e){return this.columns.find(t=>t.field===e)}recalcPinning(){H(this.columns)}destroy(){this.columns=[],this.responsiveHidden.clear()}}class ce{constructor(e){this.rawData=[],this.options=e}loadSync(){return this.options.chart?this.rawData=this.extractChartData(this.options.chart):Array.isArray(this.options.data)&&(this.rawData=this.normalizeData(this.options.data)),{data:this.rawData,total:this.rawData.length}}async load(){var e,t;return(e=this.options.serverSide)!=null&&e.enabled&&this.options.serverSide.url?this.loadServerSide({page:1,pageSize:((t=this.options.pagination)==null?void 0:t.pageSize)??25,sort:[],filters:{},search:""}):this.loadSync()}async loadServerSide(e){const t=this.options.serverSide,i=t.url,s=t.method??"GET",r={"Content-Type":"application/json",...t.headers??{}},n=t.requestMapper?t.requestMapper(e):e;let a;if(s==="GET"){const l=new URLSearchParams;for(const[d,h]of Object.entries(n))l.set(d,typeof h=="object"?JSON.stringify(h):String(h));a=await fetch(`${i}?${l.toString()}`,{method:s,headers:r})}else a=await fetch(i,{method:s,headers:r,body:JSON.stringify(n)});if(!a.ok)throw new Error(`DataTable: server request failed with status ${a.status}`);const o=await a.json();return t.responseMapper?t.responseMapper(o):{data:o.data??o,total:o.total??o.length??0}}setData(e){return this.rawData=this.normalizeData(e),{data:this.rawData,total:this.rawData.length}}getData(){return this.rawData}addRow(e,t){const i=this.normalizeRow(e);t!==void 0&&t>=0&&t<=this.rawData.length?this.rawData.splice(t,0,i):this.rawData.push(i)}removeRow(e){if(e>=0&&e<this.rawData.length)return this.rawData.splice(e,1)[0]}updateRow(e,t){e>=0&&e<this.rawData.length&&Object.assign(this.rawData[e],t)}updateCell(e,t,i){e>=0&&e<this.rawData.length&&(this.rawData[e][t]=i)}normalizeData(e){return e.length?Array.isArray(e[0])?e.map((t,i)=>{const s={};return t.forEach((r,n)=>{s[String(n)]=r}),s}):e.map(t=>({...t})):[]}normalizeRow(e){if(Array.isArray(e)){const t={};return e.forEach((i,s)=>{t[String(s)]=i}),t}return{...e}}extractChartData(e){var t,i;try{if(typeof e.getDataRows=="function"){const s=e.getDataRows();if(s.length<2)return[];const r=s[0];return s.slice(1).map(n=>{const a={};return r.forEach((o,l)=>{a[o]=n[l]}),a})}if(e.series){const s=typeof e.series=="function"?e.series():e.series,r=[];for(const n of s){const a=n.data??((t=n.options)==null?void 0:t.data)??[],o=n.name??((i=n.options)==null?void 0:i.name)??"Series";for(const l of a)typeof l=="object"&&l!==null?r.push({series:o,...l}):r.push({series:o,value:l})}return r}}catch{}return[]}updateOptions(e){this.options=e}}const M=["search","filter","group","sort","aggregate","paginate","window"];class de{constructor(){this.caches=new Map,this.dirtyFrom=0}invalidate(e){const t=M.indexOf(e);t>=0&&t<this.dirtyFrom?this.dirtyFrom=t:t>=0&&(this.dirtyFrom=Math.min(this.dirtyFrom,t))}invalidateAll(){this.dirtyFrom=0,this.caches.clear()}process(e,t,i){var u;let s=e;this.shouldRun("search")?(s=this.applySearch(s,t,i),this.caches.set("search",s)):s=this.caches.get("search")??s,this.shouldRun("filter")?(s=this.applyFilters(s,t,i),this.caches.set("filter",s)):s=this.caches.get("filter")??s;const r=s.length;let n;this.shouldRun("group")||this.shouldRun("sort")?((u=i.treeData)!=null&&u.enabled?n=this.flattenTree(s,i.treeData):i.groupBy.length>0?n=this.applyGrouping(s,i):n=s.map((g,p)=>this.makeDataRow(g,p)),n=this.applySorting(n,t,i),this.caches.set("sort",n)):n=this.caches.get("sort")??s.map((g,p)=>this.makeDataRow(g,p));const a=this.computeAggregates(s,t),o=this.extractGroups(n);let l,d=i.page,h=1;if(i.paginationEnabled&&!i.virtualEnabled){h=Math.max(1,Math.ceil(r/i.pageSize)),d>h&&(d=h);const g=(d-1)*i.pageSize;l=this.applyPagination(n,g,i.pageSize)}else i.virtualEnabled?l=this.applyVirtualWindow(n,i):l=n;return this.dirtyFrom=M.length,{rows:l,totalFiltered:r,totalAll:e.length,aggregates:a,groups:o}}shouldRun(e){return M.indexOf(e)>=this.dirtyFrom}applySearch(e,t,i){const s=i.search.trim();if(!s)return e;const r=i.searchColumns?t.filter(a=>i.searchColumns.includes(a.field)):t.filter(a=>a._visible&&a.type!=="html"),n=i.caseSensitive?s:s.toLowerCase();return e.filter(a=>{for(const o of r){const l=S(a,o);if(l==null)continue;if((i.caseSensitive?String(l):String(l).toLowerCase()).includes(n))return!0}return!1})}applyFilters(e,t,i){const s=Object.entries(i.filters).filter(([r,n])=>n!=null&&n!=="");return s.length?e.filter(r=>{for(const[n,a]of s){const o=t.find(d=>d.field===n);if(!o)continue;if(o.filterFn){if(!o.filterFn(r,n,a))return!1;continue}const l=S(r,o);if(!this.matchesFilter(l,a,o))return!1}return!0}):e}matchesFilter(e,t,i){if(t==null||t==="")return!0;switch(i.filterType??this.inferFilterType(i)){case"text":return e==null?!1:String(e).toLowerCase().includes(String(t).toLowerCase());case"number":{const r=Number(e);if(isNaN(r))return!1;if(typeof t=="object"&&t!==null){const{min:n,max:a}=t;return!(n!=null&&r<Number(n)||a!=null&&r>Number(a))}return r===Number(t)}case"boolean":return typeof t=="boolean"?!!e===t:String(e)===String(t);case"multiselect":case"faceted":return Array.isArray(t)?t.length===0||t.map(String).includes(String(e)):String(e)===String(t);case"select":return Array.isArray(t)?t.length===0||t.includes(e):String(e)===String(t);case"date":case"daterange":{const r=new Date(e).getTime();if(isNaN(r))return!1;if(typeof t=="object"&&t!==null){const{from:n,to:a}=t;return!(n&&r<new Date(n).getTime()||a&&r>new Date(a).getTime())}return new Date(e).toDateString()===new Date(t).toDateString()}case"numberrange":{const r=Number(e);if(isNaN(r))return!1;const{min:n,max:a}=t;return!(n!=null&&r<Number(n)||a!=null&&r>Number(a))}default:return!0}}inferFilterType(e){switch(e.type){case"number":return"number";case"date":return"date";case"boolean":return"boolean";default:return"text"}}applySorting(e,t,i){if(!i.sort.length)return e;const s=e.filter(n=>n._type==="data"),r=e.filter(n=>n._type!=="data");return s.sort((n,a)=>{for(const{column:o,direction:l}of i.sort){if(!l)continue;const d=t.find(m=>m.field===o),h=l==="asc"?1:-1,u=d?S(n._data,d):n._data[o],g=d?S(a._data,d):a._data[o];let p;if(d!=null&&d.comparator?p=d.comparator(u,g):p=this.defaultCompare(u,g,d==null?void 0:d.type),p!==0)return p*h}return 0}),r.length===0?s:this.reinterlaceGrouped(s,r,i)}defaultCompare(e,t,i){if(e==null&&t==null)return 0;if(e==null)return-1;if(t==null)return 1;switch(i){case"number":return Number(e)-Number(t);case"date":return new Date(e).getTime()-new Date(t).getTime();case"boolean":return e===t?0:e?-1:1;default:return String(e).localeCompare(String(t))}}reinterlaceGrouped(e,t,i){if(t.length===0)return e;const s=[],r=new Map;for(const a of t)if(a._type==="group-header"){const o=`${a._groupColumn}:${a._groupValue}`;r.set(o,a)}let n=null;for(const a of e){for(const[o,l]of r){const[d]=o.split(":"),h=a._data[d],u=`${d}:${h}`;u!==n&&r.has(u)&&(s.push(r.get(u)),n=u)}s.push(a)}return s}applyGrouping(e,t){const i=t.groupBy[0];if(!i)return e.map((a,o)=>this.makeDataRow(a,o));const s=new Map;for(const a of e){const o=a[i];s.has(o)||s.set(o,[]),s.get(o).push(a)}const r=[];let n=0;for(const[a,o]of s){const l=`${i}:${a}`,d=t.groupExpanded.has(l)?t.groupExpanded.get(l):!0;if(r.push({_type:"group-header",_index:n++,_originalIndex:-1,_data:{},_depth:0,_groupValue:a,_groupColumn:i,_groupCount:o.length,_expanded:d,_visible:!0}),d)for(const h of o)r.push(this.makeDataRow(h,n++))}return r}flattenTree(e,t){const i=t.childrenField??"children",s=[];let r=0;const n=(a,o,l)=>{for(const d of a){const h=d[i],u=Array.isArray(h)&&h.length>0,g=t.expandAll!==!1,p={_type:"data",_index:r++,_originalIndex:r-1,_data:d,_depth:o,_expanded:u?g:void 0,_visible:!0,_parentKey:l};s.push(p),u&&g&&n(h,o+1,`${l}:${r-1}`)}};return n(e,0,""),s}applyPagination(e,t,i){return e.slice(t,t+i)}applyVirtualWindow(e,t){const{scrollTop:i,viewportHeight:s,virtualRowHeight:r,virtualOverscan:n}=t,a=Math.max(0,Math.floor(i/r)-n),o=Math.ceil(s/r)+n*2;return e.slice(a,a+o)}computeAggregates(e,t){const i={};for(const s of t){if(!s.aggregate)continue;const r=e.map(o=>S(o,s)).filter(o=>o!=null),n=r.map(Number).filter(o=>!isNaN(o));let a;if(typeof s.aggregate=="function")a=s.aggregate(r);else switch(s.aggregate){case"sum":a=n.reduce((o,l)=>o+l,0);break;case"avg":a=n.length?n.reduce((o,l)=>o+l,0)/n.length:0;break;case"count":a=r.length;break;case"min":a=n.length?Math.min(...n):null;break;case"max":a=n.length?Math.max(...n):null;break}i[s.field]={value:a,type:s.aggregate}}return i}extractGroups(e){const t=[];for(const i of e)i._type==="group-header"&&t.push({column:i._groupColumn,value:i._groupValue,count:i._groupCount,expanded:i._expanded,rows:[],aggregates:{}});return t}makeDataRow(e,t){return{_type:"data",_index:t,_originalIndex:t,_data:e,_depth:0,_visible:!0}}}const j={default:{},bordered:{dataset:{"data-borders":"both"}},minimal:{dataset:{"data-borders":"none"},vars:{"--kdt-header-bg":"transparent"}},"striped-dark":{dataset:{"data-theme":"dark","data-striped":"true"}}};class he{constructor(e={}){this.style={...e},this.layout=e.layout??"default"}get density(){return this.style.density??"normal"}get rowHeight(){return this.style.rowHeight??X[this.density]}get headerHeight(){return this.style.headerHeight??Q[this.density]}getLayout(){return this.layout}cssVariables(e,t){var a;const i=this.style,s={},r=(o,l)=>{l!=null&&l!==!1&&l!==""&&(s[o]=String(l))};r("--kdt-font-family",i.fontFamily),r("--kdt-font-size",i.fontSize),r("--kdt-header-font-size",i.headerFontSize),r("--kdt-header-font-weight",i.headerFontWeight),i.borderColor&&(r("--kdt-border",i.borderColor),r("--kdt-input",i.borderColor)),r("--kdt-bg",i.background),r("--kdt-fg",i.foreground),r("--kdt-muted",i.mutedColor),r("--kdt-muted-fg",i.mutedForeground),r("--kdt-accent",i.accentColor),r("--kdt-primary",i.primaryColor),r("--kdt-radius",typeof i.radius=="number"?`${i.radius}px`:i.radius),i.stripedRows&&i.alternateRowColor&&r("--kdt-stripe-bg",i.alternateRowColor),i.hoverRowColor&&r("--kdt-hover-bg",i.hoverRowColor),i.selectedRowColor&&r("--kdt-selected-bg",i.selectedRowColor),i.rowHeight&&r("--kdt-row-height",`${i.rowHeight}px`),i.headerHeight&&r("--kdt-header-height",`${i.headerHeight}px`);const n=(a=j[this.layout])==null?void 0:a.vars;return n&&Object.assign(s,n),i.cssVars&&Object.assign(s,i.cssVars),typeof e=="number"?s.width=`${e}px`:typeof e=="string"&&(s.width=e),typeof t=="number"?s.height=`${t}px`:typeof t=="string"&&(s.height=t),s}rootDataset(){var s;const e={"data-density":this.density},t=this.style.showBorders;t===!1||t==="none"?e["data-borders"]="none":t==="vertical"?e["data-borders"]="vertical":t==="both"?e["data-borders"]="both":e["data-borders"]="horizontal",this.style.stripedRows&&(e["data-striped"]="true"),this.style.theme&&(e["data-theme"]=this.style.theme);const i=(s=j[this.layout])==null?void 0:s.dataset;return i&&Object.assign(e,i),e}get userContainerStyle(){return this.style.containerStyle}get userTableStyle(){return this.style.tableStyle}get userHeaderRowStyle(){return this.style.headerStyle}get userHeaderCellStyle(){return this.style.headerCellStyle}get userBodyStyle(){return this.style.bodyStyle}get userCellStyle(){return this.style.cellStyle}rowStyle(e){const t=this.style.rowStyle;if(t)return typeof t=="function"?t.call(e):t}update(e){e.layout&&(this.layout=e.layout),Object.assign(this.style,e)}}const $="katucharts-datatable-styles",ue=`
3
+ .katucharts-datatable {
4
+ --kdt-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
5
+ --kdt-font-size: 14px;
6
+ --kdt-radius: 8px;
7
+
8
+ --kdt-bg: #ffffff;
9
+ --kdt-popover-bg: #ffffff;
10
+ --kdt-fg: #09090b;
11
+ --kdt-muted: #f4f4f5;
12
+ --kdt-muted-fg: #71717a;
13
+ --kdt-border: #e4e4e7;
14
+ --kdt-input: #e4e4e7;
15
+ --kdt-accent: #f4f4f5;
16
+ --kdt-accent-fg: #18181b;
17
+ --kdt-primary: #18181b;
18
+ --kdt-primary-fg: #fafafa;
19
+ --kdt-ring: #a1a1aa;
20
+
21
+ --kdt-header-bg: transparent;
22
+ --kdt-header-fg: var(--kdt-muted-fg);
23
+ --kdt-header-font-size: 13px;
24
+ --kdt-header-font-weight: 500;
25
+ --kdt-hover-bg: var(--kdt-muted);
26
+ --kdt-selected-bg: var(--kdt-muted);
27
+ --kdt-stripe-bg: transparent;
28
+
29
+ --kdt-row-height: 44px;
30
+ --kdt-header-height: 44px;
31
+ --kdt-cell-px: 16px;
32
+ --kdt-cell-py: 10px;
33
+
34
+ position: relative;
35
+ box-sizing: border-box;
36
+ width: 100%;
37
+ font-family: var(--kdt-font-family);
38
+ font-size: var(--kdt-font-size);
39
+ color: var(--kdt-fg);
40
+ background: var(--kdt-bg);
41
+ border: 1px solid var(--kdt-border);
42
+ border-radius: var(--kdt-radius);
43
+ overflow: hidden;
44
+ }
45
+ .katucharts-datatable *,
46
+ .katucharts-datatable *::before,
47
+ .katucharts-datatable *::after { box-sizing: border-box; }
48
+
49
+ /* ── density ───────────────────────────────────────────────── */
50
+ .katucharts-datatable[data-density="compact"] {
51
+ --kdt-row-height: 34px; --kdt-header-height: 36px; --kdt-cell-px: 12px; --kdt-cell-py: 4px;
52
+ }
53
+ .katucharts-datatable[data-density="comfortable"] {
54
+ --kdt-row-height: 56px; --kdt-header-height: 52px; --kdt-cell-px: 20px; --kdt-cell-py: 14px;
55
+ }
56
+
57
+ /* ── dark theme ────────────────────────────────────────────── */
58
+ .katucharts-datatable[data-theme="dark"] {
59
+ --kdt-bg: #09090b;
60
+ --kdt-popover-bg: #18181b;
61
+ --kdt-fg: #fafafa;
62
+ --kdt-muted: #27272a;
63
+ --kdt-muted-fg: #a1a1aa;
64
+ --kdt-border: #27272a;
65
+ --kdt-input: #27272a;
66
+ --kdt-accent: #27272a;
67
+ --kdt-accent-fg: #fafafa;
68
+ --kdt-primary: #fafafa;
69
+ --kdt-primary-fg: #18181b;
70
+ --kdt-ring: #52525b;
71
+ }
72
+
73
+ /* ── toolbar ───────────────────────────────────────────────── */
74
+ .katucharts-dt-toolbar {
75
+ display: flex; align-items: center; justify-content: space-between;
76
+ gap: 12px; flex-wrap: wrap;
77
+ padding: 12px;
78
+ background: var(--kdt-bg);
79
+ border-bottom: 1px solid var(--kdt-border);
80
+ }
81
+ .katucharts-dt-toolbar-group { display: flex; align-items: center; gap: 8px; }
82
+ .katucharts-dt-toolbar-group--left { flex: 1 1 auto; }
83
+
84
+ /* ── title ─────────────────────────────────────────────────── */
85
+ .katucharts-dt-title {
86
+ padding: 16px 16px 4px; font-size: 16px; font-weight: 600; color: var(--kdt-fg);
87
+ }
88
+
89
+ /* ── search ────────────────────────────────────────────────── */
90
+ .katucharts-dt-search { position: relative; display: flex; align-items: center; }
91
+ .katucharts-dt-search-icon {
92
+ position: absolute; left: 10px; display: flex; pointer-events: none; color: var(--kdt-muted-fg);
93
+ }
94
+ .katucharts-dt-search-icon svg { width: 15px; height: 15px; }
95
+ .katucharts-dt-search .katucharts-dt-input { padding-left: 32px; min-width: 220px; }
96
+
97
+ /* ── inputs / selects ──────────────────────────────────────── */
98
+ .katucharts-dt-input,
99
+ .katucharts-dt-select {
100
+ height: 36px;
101
+ padding: 0 10px;
102
+ font-family: inherit;
103
+ font-size: 13px;
104
+ color: var(--kdt-fg);
105
+ background: var(--kdt-bg);
106
+ border: 1px solid var(--kdt-input);
107
+ border-radius: calc(var(--kdt-radius) - 2px);
108
+ outline: none;
109
+ transition: border-color .15s ease, box-shadow .15s ease;
110
+ }
111
+ .katucharts-dt-input::placeholder { color: var(--kdt-muted-fg); }
112
+ .katucharts-dt-input:focus,
113
+ .katucharts-dt-select:focus { border-color: var(--kdt-ring); box-shadow: 0 0 0 2px color-mix(in srgb, var(--kdt-ring) 35%, transparent); }
114
+ .katucharts-dt-select { cursor: pointer; padding-right: 24px; }
115
+
116
+ /* ── buttons ───────────────────────────────────────────────── */
117
+ .katucharts-dt-btn {
118
+ display: inline-flex; align-items: center; justify-content: center; gap: 6px;
119
+ height: 36px; min-width: 36px; padding: 0 12px;
120
+ font-family: inherit; font-size: 13px; font-weight: 500; line-height: 1;
121
+ color: var(--kdt-fg); background: var(--kdt-bg);
122
+ border: 1px solid var(--kdt-border); border-radius: calc(var(--kdt-radius) - 2px);
123
+ cursor: pointer; user-select: none; white-space: nowrap;
124
+ transition: background-color .15s ease, color .15s ease, border-color .15s ease, opacity .15s ease;
125
+ }
126
+ .katucharts-dt-btn:hover:not(:disabled) { background: var(--kdt-accent); color: var(--kdt-accent-fg); }
127
+ .katucharts-dt-btn:disabled { opacity: .45; cursor: default; }
128
+ .katucharts-dt-btn.is-active { background: var(--kdt-primary); color: var(--kdt-primary-fg); border-color: var(--kdt-primary); }
129
+ .katucharts-dt-btn svg { width: 15px; height: 15px; }
130
+
131
+ /* ── dropdown menus ────────────────────────────────────────── */
132
+ .katucharts-dt-menu {
133
+ position: absolute; top: calc(100% + 4px); right: 0; z-index: 100;
134
+ min-width: 180px; max-height: 320px; overflow: auto; padding: 4px;
135
+ background: var(--kdt-popover-bg, #fff); color: var(--kdt-fg);
136
+ border: 1px solid var(--kdt-border); border-radius: var(--kdt-radius);
137
+ box-shadow: 0 10px 24px -8px rgba(0,0,0,.25), 0 2px 6px -2px rgba(0,0,0,.12);
138
+ }
139
+ .katucharts-dt-menu-label { padding: 6px 8px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .05em; color: var(--kdt-muted-fg); }
140
+ .katucharts-dt-menu-sep { height: 1px; margin: 4px 0; background: var(--kdt-border); border: 0; }
141
+ .katucharts-dt-menu-item {
142
+ display: flex; align-items: center; gap: 8px;
143
+ padding: 7px 8px; font-size: 13px; border-radius: calc(var(--kdt-radius) - 4px);
144
+ cursor: pointer; white-space: nowrap; color: var(--kdt-fg);
145
+ }
146
+ .katucharts-dt-menu-item:hover,
147
+ .katucharts-dt-menu-item.is-active { background: var(--kdt-accent); color: var(--kdt-accent-fg); }
148
+ .katucharts-dt-menu-item input { cursor: pointer; }
149
+
150
+ /* ── table scaffold ────────────────────────────────────────── */
151
+ .katucharts-dt-table-area { position: relative; }
152
+ .katucharts-dt-table-container { position: relative; }
153
+ .katucharts-dt-header-scroll { overflow: hidden; }
154
+ .katucharts-dt-body-scroll { overflow: auto; position: relative; }
155
+ .katucharts-datatable table { width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; }
156
+
157
+ /* ── header ────────────────────────────────────────────────── */
158
+ .katucharts-dt-header-row { background: var(--kdt-header-bg); }
159
+ .katucharts-dt-th {
160
+ position: relative;
161
+ height: var(--kdt-header-height);
162
+ padding: 0 var(--kdt-cell-px);
163
+ font-size: var(--kdt-header-font-size);
164
+ font-weight: var(--kdt-header-font-weight);
165
+ color: var(--kdt-header-fg);
166
+ text-align: left; vertical-align: middle;
167
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
168
+ user-select: none;
169
+ border-bottom: 1px solid var(--kdt-border);
170
+ }
171
+ .katucharts-dt-th.is-sortable { cursor: pointer; }
172
+ .katucharts-dt-th.is-sortable:hover { color: var(--kdt-fg); }
173
+ .katucharts-dt-th-inner { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; }
174
+ .katucharts-dt-th-custom { display: block; width: 100%; }
175
+ .katucharts-dt-th[data-align="right"] { text-align: right; }
176
+ .katucharts-dt-th[data-align="right"] .katucharts-dt-th-inner { flex-direction: row-reverse; }
177
+ .katucharts-dt-th[data-align="center"] { text-align: center; }
178
+ .katucharts-dt-th[data-align="center"] .katucharts-dt-th-inner { justify-content: center; }
179
+
180
+ .katucharts-dt-sort-icon { display: inline-flex; flex: none; color: var(--kdt-muted-fg); opacity: .55; transition: opacity .15s ease, color .15s ease; }
181
+ .katucharts-dt-sort-icon svg { width: 14px; height: 14px; }
182
+ .katucharts-dt-th.is-sorted .katucharts-dt-sort-icon { opacity: 1; color: var(--kdt-fg); }
183
+ .katucharts-dt-sort-badge { font-size: 9px; line-height: 1; padding: 1px 3px; border-radius: 6px; background: var(--kdt-muted); color: var(--kdt-muted-fg); }
184
+
185
+ /* ── filter row ────────────────────────────────────────────── */
186
+ .katucharts-dt-filter-row > td { padding: 6px var(--kdt-cell-px) 10px; border-bottom: 1px solid var(--kdt-border); }
187
+ .katucharts-dt-filter-input { height: 32px; width: 100%; font-size: 12px; }
188
+ .katucharts-dt-filter-range { display: flex; gap: 6px; }
189
+ .katucharts-dt-filter-range .katucharts-dt-input { width: 50%; }
190
+
191
+ /* ── body rows / cells ─────────────────────────────────────── */
192
+ .katucharts-dt-row { height: var(--kdt-row-height); transition: background-color .12s ease; }
193
+ .katucharts-dt-row > td { border-bottom: 1px solid var(--kdt-border); }
194
+ .katucharts-datatable[data-borders="none"] .katucharts-dt-row > td,
195
+ .katucharts-datatable[data-borders="none"] .katucharts-dt-th { border-bottom-color: transparent; }
196
+ .katucharts-datatable[data-borders="vertical"] .katucharts-dt-td:not(:last-child),
197
+ .katucharts-datatable[data-borders="vertical"] .katucharts-dt-th:not(:last-child),
198
+ .katucharts-datatable[data-borders="both"] .katucharts-dt-td:not(:last-child),
199
+ .katucharts-datatable[data-borders="both"] .katucharts-dt-th:not(:last-child) { border-right: 1px solid var(--kdt-border); }
200
+ .katucharts-datatable[data-striped="true"] .katucharts-dt-row:nth-child(even) { background: var(--kdt-stripe-bg); }
201
+ .katucharts-dt-row:hover { background: var(--kdt-hover-bg); }
202
+ .katucharts-dt-row.is-selected,
203
+ .katucharts-dt-row.is-selected:hover { background: var(--kdt-selected-bg); }
204
+ .katucharts-dt-td {
205
+ padding: var(--kdt-cell-py) var(--kdt-cell-px);
206
+ vertical-align: middle;
207
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
208
+ }
209
+ .katucharts-dt-td[data-align="right"] { text-align: right; }
210
+ .katucharts-dt-td[data-align="center"] { text-align: center; }
211
+
212
+ /* ── selection checkbox cells ──────────────────────────────── */
213
+ .katucharts-dt-checkbox-cell { width: 44px; padding: 0; text-align: center; }
214
+ .katucharts-dt-checkbox { width: 16px; height: 16px; cursor: pointer; accent-color: var(--kdt-primary); }
215
+
216
+ /* ── group header rows ─────────────────────────────────────── */
217
+ .katucharts-dt-group-header > td {
218
+ padding: var(--kdt-cell-py) var(--kdt-cell-px);
219
+ font-weight: 600; cursor: pointer; user-select: none;
220
+ background: var(--kdt-muted); border-bottom: 1px solid var(--kdt-border);
221
+ }
222
+
223
+ /* ── detail rows ───────────────────────────────────────────── */
224
+ .katucharts-dt-detail > td { padding: 12px var(--kdt-cell-px); background: var(--kdt-muted); }
225
+
226
+ /* ── empty / loading ───────────────────────────────────────── */
227
+ .katucharts-dt-nodata { padding: 48px 20px; text-align: center; color: var(--kdt-muted-fg); font-size: 14px; }
228
+ .katucharts-dt-loading {
229
+ position: absolute; inset: 0; z-index: 10;
230
+ display: flex; align-items: center; justify-content: center; gap: 8px;
231
+ background: color-mix(in srgb, var(--kdt-bg) 75%, transparent);
232
+ color: var(--kdt-muted-fg); font-size: 14px;
233
+ }
234
+ .katucharts-dt-spinner {
235
+ width: 16px; height: 16px; border-radius: 50%;
236
+ border: 2px solid var(--kdt-border); border-top-color: var(--kdt-fg);
237
+ animation: katucharts-dt-spin .7s linear infinite;
238
+ }
239
+ @keyframes katucharts-dt-spin { to { transform: rotate(360deg); } }
240
+
241
+ /* ── resize handle ─────────────────────────────────────────── */
242
+ .katucharts-dt-resize-handle {
243
+ position: absolute; top: 0; right: 0; bottom: 0; width: 6px;
244
+ cursor: col-resize; user-select: none; touch-action: none; z-index: 1;
245
+ }
246
+ .katucharts-dt-resize-handle::after {
247
+ content: ""; position: absolute; top: 25%; bottom: 25%; right: 2px; width: 2px;
248
+ background: var(--kdt-border); border-radius: 2px; opacity: 0; transition: opacity .15s ease;
249
+ }
250
+ .katucharts-dt-resize-handle:hover::after { opacity: 1; background: var(--kdt-ring); }
251
+
252
+ /* ── pinned columns ────────────────────────────────────────── */
253
+ .katucharts-dt-th.is-pinned,
254
+ .katucharts-dt-td.is-pinned { position: sticky; z-index: 2; background: var(--kdt-bg); }
255
+ .katucharts-dt-th.is-pinned { z-index: 3; }
256
+
257
+ /* ── pagination / footer ───────────────────────────────────── */
258
+ .katucharts-dt-footer {
259
+ display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
260
+ padding: 12px; border-top: 1px solid var(--kdt-border);
261
+ font-size: 13px; color: var(--kdt-muted-fg); background: var(--kdt-bg);
262
+ }
263
+ .katucharts-dt-footer-section { display: flex; align-items: center; gap: 8px; }
264
+ .katucharts-dt-page-size { display: flex; align-items: center; gap: 8px; }
265
+ .katucharts-dt-page-size-btn { height: 32px; padding: 0 8px; gap: 4px; font-weight: 500; }
266
+ .katucharts-dt-page-size-btn svg { width: 14px; height: 14px; color: var(--kdt-muted-fg); }
267
+ .katucharts-dt-pagination { display: flex; align-items: center; gap: 4px; }
268
+ .katucharts-dt-ellipsis { padding: 0 4px; color: var(--kdt-muted-fg); }
269
+ .katucharts-dt-pagination .katucharts-dt-btn { height: 32px; min-width: 32px; padding: 0 8px; }
270
+
271
+ /* ── faceted filter badges ─────────────────────────────────── */
272
+ .katucharts-dt-facet-count {
273
+ display: inline-flex; align-items: center; height: 18px; padding: 0 6px; margin-left: 2px;
274
+ font-size: 11px; font-weight: 600; border-radius: 6px;
275
+ background: var(--kdt-muted); color: var(--kdt-accent-fg);
276
+ }
277
+
278
+ /* ── floating layers (rendered at <body>, so unscoped) ─────── */
279
+ .katucharts-dt-context-menu {
280
+ position: fixed; z-index: 1000; min-width: 180px; padding: 4px;
281
+ font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px;
282
+ background: #fff; color: #18181b;
283
+ border: 1px solid #e4e4e7; border-radius: 8px;
284
+ box-shadow: 0 10px 24px -8px rgba(0,0,0,.25), 0 2px 6px -2px rgba(0,0,0,.12);
285
+ }
286
+ .katucharts-dt-context-menu-item {
287
+ display: flex; align-items: center; gap: 8px;
288
+ padding: 7px 8px; border-radius: 4px; cursor: pointer;
289
+ }
290
+ .katucharts-dt-context-menu-item:hover { background: #f4f4f5; }
291
+ .katucharts-dt-context-menu-item.is-disabled { color: #a1a1aa; opacity: .6; cursor: default; }
292
+ .katucharts-dt-context-menu-item.is-disabled:hover { background: transparent; }
293
+ .katucharts-dt-context-menu-sep { height: 1px; margin: 4px 0; background: #e4e4e7; border: 0; }
294
+ `;function pe(c=document){if(c.getElementById($))return;const e=c.createElement("style");e.id=$,e.textContent=ue,c.head.appendChild(e)}function B(c,e){const t=e.field;return{id:e.id??t,columnDef:e,getCanSort:()=>e.sortable!==!1,getCanHide:()=>e.enableHiding!==!1,getIsSorted:()=>c.getSortDirection(t)??!1,toggleSorting:i=>c.toggleSort(t,i),clearSorting:()=>c.clearColumnSort(t),getIsVisible:()=>c.isColumnVisible(t),toggleVisibility:i=>c.setColumnVisible(t,i??!c.isColumnVisible(t)),getFilterValue:()=>c.getFilterValue(t),setFilterValue:i=>c.setColumnFilter(t,i)}}function ge(c,e){return{id:String(e._originalIndex),index:e._originalIndex,original:e._data,getValue:t=>e._data[t],renderValue:t=>e._data[t],getIsSelected:()=>c.isRowSelected(e._originalIndex),toggleSelected:t=>c.setRowSelected(e._originalIndex,t??!c.isRowSelected(e._originalIndex))}}function fe(c){const e=()=>c.getInternalColumns().map(t=>B(c,t));return{getColumn:t=>{const i=c.getInternalColumns().find(s=>(s.id??s.field)===t||s.field===t);return i?B(c,i):void 0},getAllColumns:e,getAllLeafColumns:e,getIsAllPageRowsSelected:()=>c.isAllPageSelected(),getIsSomePageRowsSelected:()=>c.isSomePageSelected(),toggleAllPageRowsSelected:t=>c.toggleAllPageSelected(t??!c.isAllPageSelected()),getState:()=>{const t=c.getPageInfo();return{pagination:{pageIndex:t.page-1,pageSize:t.pageSize}}},nextPage:()=>c.goToPage(c.getPageInfo().page+1),previousPage:()=>c.goToPage(c.getPageInfo().page-1),setPageIndex:t=>c.goToPage(t+1),setPageSize:t=>c.setPageSizeValue(t),getCanNextPage:()=>c.getPageInfo().page<c.getPageInfo().totalPages,getCanPreviousPage:()=>c.getPageInfo().page>1,getPageCount:()=>c.getPageInfo().totalPages}}class me{constructor(e,t){this.api=null,this.host=null,this.theme=e,this.formatters=t??{}}setApi(e,t){this.api=e,this.host=t}createCell(e,t,i,s,r){const n=document.createElement("td");n.className="katucharts-dt-td",s.align&&n.setAttribute("data-align",s.align),s._computedWidth&&(n.style.width=`${s._computedWidth}px`),s.pinned&&(n.classList.add("is-pinned"),s.pinned==="left"?n.style.left=`${s._pinnedOffset}px`:n.style.right=`${s._pinnedOffset}px`);const a=this.theme.userCellStyle;if(a&&Object.assign(n.style,a),s.cellStyle){const h=typeof s.cellStyle=="function"?s.cellStyle.call({value:t,row:i._data,column:s,rowIndex:r}):s.cellStyle;Object.assign(n.style,h)}const o=this.computeClass(t,i._data,s);o&&(n.className+=` ${o}`);const l=this.computeTooltip(t,i._data,s);if(l&&(n.title=l),s.cell&&this.api){const h={row:ge(this.host,i),column:this.api.getColumn(s.id??s.field),table:this.api,getValue:()=>t,renderValue:()=>t},u=s.cell(h);return u instanceof Node?n.appendChild(u):n.innerHTML=String(u??""),e.appendChild(n),n}const d=this.formatValue(t,i._data,s,r);return s.type==="html"?n.innerHTML=d:n.textContent=d,e.appendChild(n),n}formatValue(e,t,i,s){if(e==null)return"";if(i.formatter){const r={value:e,row:t,column:i,rowIndex:s};return i.formatter.call(r)}if(i.type&&this.formatters[i.type])return this.formatters[i.type](e);switch(i.type){case"number":return this.defaultNumberFormat(e);case"date":return this.defaultDateFormat(e);case"boolean":return this.defaultBooleanFormat(e);default:return typeof e=="object"&&e!==null?Array.isArray(e)?`[${e.length} items]`:JSON.stringify(e):String(e)}}defaultNumberFormat(e){const t=Number(e);return isNaN(t)?String(e):Number.isInteger(t)?t.toLocaleString():t.toLocaleString(void 0,{minimumFractionDigits:0,maximumFractionDigits:2})}defaultDateFormat(e){const t=e instanceof Date?e:new Date(e);return isNaN(t.getTime())?String(e):t.toLocaleDateString()}defaultBooleanFormat(e){return this.formatters.boolean?this.formatters.boolean(e):e?"✔":"✘"}computeClass(e,t,i){return i.cellClass?typeof i.cellClass=="function"?i.cellClass.call({value:e,row:t}):i.cellClass:""}computeTooltip(e,t,i){return i.cellTooltip?i.cellTooltip===!0?e!=null?String(e):"":typeof i.cellTooltip=="function"?i.cellTooltip.call({value:e,row:t}):"":""}updateFormatters(e){this.formatters=e}resolveValue(e,t){return S(e,t)}}const b=c=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${c}</svg>`,v={sortAsc:b('<path d="m18 15-6-6-6 6"/>'),sortDesc:b('<path d="m6 9 6 6 6-6"/>'),sortNone:b('<path d="m8 9 4-4 4 4"/><path d="m16 15-4 4-4-4"/>'),search:b('<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>'),columns:b('<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M9 3v18"/><path d="M15 3v18"/>'),download:b('<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/>'),sliders:b('<line x1="4" x2="4" y1="21" y2="14"/><line x1="4" x2="4" y1="10" y2="3"/><line x1="12" x2="12" y1="21" y2="12"/><line x1="12" x2="12" y1="8" y2="3"/><line x1="20" x2="20" y1="21" y2="16"/><line x1="20" x2="20" y1="12" y2="3"/><line x1="2" x2="6" y1="14" y2="14"/><line x1="10" x2="14" y1="8" y2="8"/><line x1="18" x2="22" y1="16" y2="16"/>'),expand:b('<path d="M8 3H5a2 2 0 0 0-2 2v3"/><path d="M21 8V5a2 2 0 0 0-2-2h-3"/><path d="M3 16v3a2 2 0 0 0 2 2h3"/><path d="M16 21h3a2 2 0 0 0 2-2v-3"/>'),x:b('<path d="M18 6 6 18"/><path d="m6 6 12 12"/>'),chevronLeft:b('<path d="m15 18-6-6 6-6"/>'),chevronRight:b('<path d="m9 18 6-6-6-6"/>'),chevronDown:b('<path d="m6 9 6 6 6-6"/>'),chevronsUpDown:b('<path d="m7 15 5 5 5-5"/><path d="m7 9 5-5 5 5"/>'),chevronsLeft:b('<path d="m11 17-5-5 5-5"/><path d="m18 17-5-5 5-5"/>'),chevronsRight:b('<path d="m6 17 5-5-5-5"/><path d="m13 17 5-5-5-5"/>'),plusCircle:b('<circle cx="12" cy="12" r="10"/><path d="M8 12h8"/><path d="M12 8v8"/>')},be=["--kdt-font-family","--kdt-font-size","--kdt-radius","--kdt-bg","--kdt-popover-bg","--kdt-fg","--kdt-muted","--kdt-muted-fg","--kdt-border","--kdt-accent","--kdt-accent-fg","--kdt-primary"];function E(c,e,t={}){const i=c.closest(".katucharts-datatable");if(i){const a=getComputedStyle(i);for(const o of be){const l=a.getPropertyValue(o);l&&e.style.setProperty(o,l)}}e.style.position="fixed",e.style.zIndex="1000",document.body.appendChild(e);const s=()=>{const a=c.getBoundingClientRect();e.style.top=`${a.bottom+4}px`,(t.align??"left")==="right"?(e.style.left="auto",e.style.right=`${window.innerWidth-a.right}px`):(e.style.right="auto",e.style.left=`${a.left}px`)};s();const r=a=>{!e.contains(a.target)&&!c.contains(a.target)&&n.close()},n={element:e,close(){e.remove(),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s),document.removeEventListener("mousedown",r)}};return setTimeout(()=>{window.addEventListener("scroll",s,!0),window.addEventListener("resize",s),document.addEventListener("mousedown",r)},0),n}class ve{constructor(e,t,i={}){this.thead=null,this.filterRow=null,this.resizing=!1,this.api=null,this.host=null,this.theme=e,this.events=t,this.lang=i}setLang(e){this.lang=e}render(e,t,i){var n;this.thead&&this.thead.remove(),this.thead=document.createElement("thead"),this.thead.className="katucharts-dt-header",this.api=i.api??null,this.host=i.host??null,(n=i.headerGroups)!=null&&n.length&&this.renderHeaderGroups(i.headerGroups,t);const s=document.createElement("tr");s.className="katucharts-dt-header-row",this.theme.userHeaderRowStyle&&Object.assign(s.style,this.theme.userHeaderRowStyle);const r=t.filter(a=>a._visible);i.selectionCheckbox&&s.appendChild(this.createCheckboxHeader());for(const a of r)s.appendChild(this.createHeaderCell(a,i));return this.thead.appendChild(s),i.filteringEnabled&&i.filterPosition==="header"&&(this.filterRow=this.createFilterRow(r,i.selectionCheckbox),this.thead.appendChild(this.filterRow)),e.appendChild(this.thead),this.thead}createHeaderCell(e,t){const i=document.createElement("th");i.className="katucharts-dt-th",i.setAttribute("data-field",e.field),e.align&&i.setAttribute("data-align",e.headerAlign??e.align),e._computedWidth&&(i.style.width=`${e._computedWidth}px`),this.theme.userHeaderCellStyle&&Object.assign(i.style,this.theme.userHeaderCellStyle),e.headerStyle&&Object.assign(i.style,e.headerStyle),e.pinned&&(i.classList.add("is-pinned"),e.pinned==="left"?i.style.left=`${e._pinnedOffset}px`:i.style.right=`${e._pinnedOffset}px`);const s=t.sortingEnabled&&e.sortable;if(e._sortDirection&&i.classList.add("is-sorted"),typeof e.header=="function"&&this.api&&this.host){const r={column:this.api.getColumn(e.id??e.field),table:this.api},n=e.header(r),a=document.createElement("div");a.className="katucharts-dt-th-custom",n instanceof Node?a.appendChild(n):a.innerHTML=String(n??""),i.appendChild(a)}else{const r=document.createElement("span");r.className="katucharts-dt-th-inner";const n=document.createElement("span");e.headerFormatter?n.innerHTML=e.headerFormatter.call({column:e}):n.textContent=e.title??e.field,r.appendChild(n),s&&r.appendChild(this.createSortIcon(e)),i.appendChild(r),s&&(i.classList.add("is-sortable"),i.addEventListener("click",a=>{if(this.resizing)return;const o=a.target;o.tagName==="INPUT"||o.tagName==="SELECT"||this.events.emit("header:sort",{field:e.field,shiftKey:a.shiftKey})}))}return e.headerTooltip&&(i.title=e.headerTooltip),t.resizingEnabled&&e.resizable&&i.appendChild(this.createResizeHandle(e,i)),i}createSortIcon(e){const t=document.createElement("span");if(t.className="katucharts-dt-sort-icon",e._sortDirection==="asc"?t.innerHTML=v.sortAsc:e._sortDirection==="desc"?t.innerHTML=v.sortDesc:t.innerHTML=v.sortNone,e._sortPriority>=0&&e._sortDirection){const i=document.createElement("span");i.className="katucharts-dt-sort-badge",i.textContent=String(e._sortPriority+1),t.appendChild(i)}return t}createResizeHandle(e,t){const i=document.createElement("div");return i.className="katucharts-dt-resize-handle",i.addEventListener("mousedown",s=>{s.preventDefault(),s.stopPropagation(),this.resizing=!0;const r=s.clientX,n=e._computedWidth,a=l=>{const d=l.clientX-r,h=Math.max(e.minWidth??40,Math.min(e.maxWidth??2e3,n+d));e._computedWidth=h,t.style.width=`${h}px`,this.events.emit("column:resizing",{field:e.field,width:h})},o=()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",o),setTimeout(()=>{this.resizing=!1},50),this.events.emit("column:resize",{field:e.field,width:e._computedWidth})};document.addEventListener("mousemove",a),document.addEventListener("mouseup",o)}),i}createCheckboxHeader(){const e=document.createElement("th");e.className="katucharts-dt-th katucharts-dt-checkbox-cell";const t=document.createElement("input");return t.type="checkbox",t.className="katucharts-dt-checkbox",t.setAttribute("aria-label",this.lang.selectAllRows??"Select all rows"),t.addEventListener("change",()=>{this.events.emit("selection:toggleAll",{checked:t.checked})}),e.appendChild(t),e}createFilterRow(e,t){const i=document.createElement("tr");if(i.className="katucharts-dt-filter-row",t){const s=document.createElement("td");s.className="katucharts-dt-checkbox-cell",i.appendChild(s)}for(const s of e){const r=document.createElement("td");s.filterable&&r.appendChild(this.createFilterInput(s)),i.appendChild(r)}return i}createFilterInput(e){switch(e.filterType??this.inferFilterType(e)){case"select":return this.createSelectFilter(e);case"multiselect":case"faceted":return this.createFacetedFilter(e);case"boolean":return this.createBooleanFilter(e);case"number":case"numberrange":return this.createNumberFilter(e);case"date":case"daterange":return this.createDateFilter(e);default:return this.createTextFilter(e)}}createTextFilter(e){const t=document.createElement("input");return t.type="text",t.className="katucharts-dt-input katucharts-dt-filter-input",t.placeholder=this.lang.filterPlaceholder??"Filter…",e._filterValue&&(t.value=e._filterValue),t.addEventListener("input",()=>{this.events.emit("filter:input",{field:e.field,value:t.value||null})}),t}createNumberFilter(e){const t=document.createElement("div");t.className="katucharts-dt-filter-range";const i=document.createElement("input");i.type="number",i.placeholder=this.lang.rangeMin??"Min",i.className="katucharts-dt-input katucharts-dt-filter-input";const s=document.createElement("input");s.type="number",s.placeholder=this.lang.rangeMax??"Max",s.className="katucharts-dt-input katucharts-dt-filter-input",e._filterValue&&typeof e._filterValue=="object"&&(e._filterValue.min!=null&&(i.value=String(e._filterValue.min)),e._filterValue.max!=null&&(s.value=String(e._filterValue.max)));const r=()=>{const n=i.value||s.value?{min:i.value?Number(i.value):null,max:s.value?Number(s.value):null}:null;this.events.emit("filter:input",{field:e.field,value:n})};return i.addEventListener("input",r),s.addEventListener("input",r),t.appendChild(i),t.appendChild(s),t}createDateFilter(e){const t=document.createElement("input");return t.type="date",t.className="katucharts-dt-input katucharts-dt-filter-input",e._filterValue&&(t.value=e._filterValue),t.addEventListener("change",()=>{this.events.emit("filter:input",{field:e.field,value:t.value||null})}),t}createSelectFilter(e){const t=[{label:this.lang.filterAll??"All",value:null}];for(const i of e.filterOptions??[])t.push({label:String(i),value:i});return this.createSingleSelectFilter(e,t)}createBooleanFilter(e){return this.createSingleSelectFilter(e,[{label:this.lang.filterAll??"All",value:null},{label:this.lang.filterTrue??"True",value:!0},{label:this.lang.filterFalse??"False",value:!1}])}createSingleSelectFilter(e,t){const i=document.createElement("div");i.style.position="relative";const s=document.createElement("button");s.type="button",s.className="katucharts-dt-btn katucharts-dt-filter-input",s.style.width="100%",s.style.justifyContent="space-between";const r=()=>t.find(l=>l.value===e._filterValue||String(l.value)===String(e._filterValue))??t[0],n=()=>{s.innerHTML=`<span>${r().label}</span>${v.chevronDown}`};n();let a=null;const o=()=>{a==null||a.close(),a=null};return s.addEventListener("click",l=>{if(l.stopPropagation(),a){o();return}const d=document.createElement("div");d.className="katucharts-dt-menu";for(const h of t){const u=document.createElement("div");u.className="katucharts-dt-menu-item",h===r()&&u.classList.add("is-active"),u.textContent=h.label,u.addEventListener("click",()=>{e._filterValue=h.value,n(),o(),this.events.emit("filter:input",{field:e.field,value:h.value})}),d.appendChild(u)}a=E(s,d,{align:"left"})}),i.appendChild(s),i}createFacetedFilter(e){const t=document.createElement("div");t.style.position="relative";const i=new Set(Array.isArray(e._filterValue)?e._filterValue.map(String):[]),s=document.createElement("button");s.type="button",s.className="katucharts-dt-btn katucharts-dt-filter-input",s.style.width="100%",s.style.justifyContent="space-between";const r=()=>{if(s.innerHTML=`<span style="display:inline-flex;align-items:center;gap:6px">${v.plusCircle}<span>${e.title??e.field}</span></span>`,i.size){const o=document.createElement("span");o.className="katucharts-dt-facet-count",o.textContent=String(i.size),s.appendChild(o)}};r();let n=null;const a=()=>{n==null||n.close(),n=null};return s.addEventListener("click",o=>{if(o.stopPropagation(),n){a();return}const l=document.createElement("div");l.className="katucharts-dt-menu";for(const d of e.filterOptions??[]){const h=String(d),u=document.createElement("label");u.className="katucharts-dt-menu-item",i.has(h)&&u.classList.add("is-active");const g=document.createElement("input");g.type="checkbox",g.checked=i.has(h),g.addEventListener("change",()=>{g.checked?(i.add(h),u.classList.add("is-active")):(i.delete(h),u.classList.remove("is-active")),r(),this.events.emit("filter:input",{field:e.field,value:i.size?[...i]:null})});const p=document.createElement("span");p.textContent=h,u.appendChild(g),u.appendChild(p),l.appendChild(u)}n=E(s,l,{align:"left"})}),t.appendChild(s),t}renderHeaderGroups(e,t){if(!this.thead)return;const i=document.createElement("tr");i.className="katucharts-dt-header-row";const s=t.filter(n=>n._visible),r=new Set;for(const n of e){const a=n.columns.filter(l=>s.some(d=>d.field===l)).length;if(a===0)continue;const o=document.createElement("th");o.className="katucharts-dt-th",o.colSpan=a,o.style.textAlign="center",o.textContent=n.title,n.style&&Object.assign(o.style,n.style),i.appendChild(o),n.columns.forEach(l=>r.add(l))}for(const n of s)if(!r.has(n.field)){const a=document.createElement("th");a.className="katucharts-dt-th",i.appendChild(a)}this.thead.appendChild(i)}inferFilterType(e){switch(e.type){case"number":return"number";case"date":return"date";case"boolean":return"boolean";default:return"text"}}updateSelectAllCheckbox(e,t){if(!this.thead)return;const i=this.thead.querySelector('input[type="checkbox"]');i&&(i.checked=e,i.indeterminate=!e&&t)}destroy(){this.thead&&(this.thead.remove(),this.thead=null),this.filterRow=null}}class ke{constructor(e,t,i,s={}){this.tableContainer=null,this.headerScrollContainer=null,this.bodyScrollContainer=null,this.headerTable=null,this.bodyTable=null,this.tbody=null,this.colgroup=null,this.headerColgroup=null,this.spacer=null,this.loadingOverlay=null,this.currentRows=[],this.virtualEnabled=!1,this.virtualRowHeight=44,this.virtualOverscan=10,this.totalRows=0,this.theme=e,this.events=t,this.lang=s,this.cellRenderer=new me(e,i),this.headerRenderer=new ve(e,t,s)}setLang(e){this.lang=e,this.headerRenderer.setLang(e)}render(e,t,i,s){var n,a,o,l;this.cleanup(),this.cellRenderer.setApi(s.api??null,s.host??null),this.tableContainer=document.createElement("div"),this.tableContainer.className="katucharts-dt-table-container",this.virtualEnabled=((n=s.virtualScroll)==null?void 0:n.enabled)===!0||((a=s.virtualScroll)==null?void 0:a.threshold)!=null&&i.totalFiltered>=s.virtualScroll.threshold,this.virtualRowHeight=((o=s.virtualScroll)==null?void 0:o.rowHeight)??this.theme.rowHeight,this.virtualOverscan=((l=s.virtualScroll)==null?void 0:l.overscan)??10,this.totalRows=i.totalFiltered;const r=(s.selectionCheckbox?44:0)+t.filter(d=>d._visible).reduce((d,h)=>d+h._computedWidth,0);if(this.headerScrollContainer=document.createElement("div"),this.headerScrollContainer.className="katucharts-dt-header-scroll",this.headerTable=document.createElement("table"),this.headerTable.style.width=`${r}px`,s.tableClass&&(this.headerTable.className=s.tableClass),this.theme.userTableStyle&&Object.assign(this.headerTable.style,this.theme.userTableStyle),this.headerColgroup=this.createColgroup(t,s.selectionCheckbox),this.headerTable.appendChild(this.headerColgroup),this.headerRenderer.render(this.headerTable,t,{sortingEnabled:s.sortingEnabled,filteringEnabled:s.filteringEnabled,filterPosition:s.filterPosition,resizingEnabled:s.resizingEnabled,selectionCheckbox:s.selectionCheckbox,headerGroups:s.headerGroups,api:s.api,host:s.host}),this.headerScrollContainer.appendChild(this.headerTable),this.tableContainer.appendChild(this.headerScrollContainer),this.bodyScrollContainer=document.createElement("div"),this.bodyScrollContainer.className="katucharts-dt-body-scroll",s.bodyClass&&(this.bodyScrollContainer.className+=` ${s.bodyClass}`),this.theme.userBodyStyle&&Object.assign(this.bodyScrollContainer.style,this.theme.userBodyStyle),s.height!=null&&(this.bodyScrollContainer.style.maxHeight=typeof s.height=="number"?`${s.height}px`:s.height),this.virtualEnabled&&(this.spacer=document.createElement("div"),this.spacer.style.height=`${this.totalRows*this.virtualRowHeight}px`,this.spacer.style.width=`${r}px`,this.spacer.style.position="relative",this.bodyScrollContainer.appendChild(this.spacer)),this.bodyTable=document.createElement("table"),this.bodyTable.style.width=`${r}px`,s.tableClass&&(this.bodyTable.className=s.tableClass),this.theme.userTableStyle&&Object.assign(this.bodyTable.style,this.theme.userTableStyle),this.virtualEnabled&&(this.bodyTable.style.position="absolute",this.bodyTable.style.top="0",this.bodyTable.style.left="0"),this.colgroup=this.createColgroup(t,s.selectionCheckbox),this.bodyTable.appendChild(this.colgroup),this.tbody=document.createElement("tbody"),i.rows.length===0?this.renderNoData(s.noDataText,t,s):this.renderRows(i.rows,t,s),this.bodyTable.appendChild(this.tbody),this.virtualEnabled&&this.spacer?this.spacer.appendChild(this.bodyTable):this.bodyScrollContainer.appendChild(this.bodyTable),this.tableContainer.appendChild(this.bodyScrollContainer),this.bodyScrollContainer.addEventListener("scroll",()=>{this.headerScrollContainer&&(this.headerScrollContainer.scrollLeft=this.bodyScrollContainer.scrollLeft),this.events.emit("scroll",{scrollTop:this.bodyScrollContainer.scrollTop,scrollLeft:this.bodyScrollContainer.scrollLeft})}),this.virtualEnabled){const d=K(()=>{this.events.emit("virtual:scroll",{scrollTop:this.bodyScrollContainer.scrollTop,viewportHeight:this.bodyScrollContainer.clientHeight})},16);this.bodyScrollContainer.addEventListener("scroll",d)}this.loadingOverlay=document.createElement("div"),this.loadingOverlay.className="katucharts-dt-loading",this.loadingOverlay.style.display="none",this.loadingOverlay.innerHTML=`<span class="katucharts-dt-spinner"></span><span>${s.loadingText}</span>`,this.tableContainer.appendChild(this.loadingOverlay),e.appendChild(this.tableContainer),this.currentRows=i.rows}updateRows(e,t,i){this.tbody&&(this.cellRenderer.setApi(i.api??null,i.host??null),this.tbody.innerHTML="",this.totalRows=e.totalFiltered,this.virtualEnabled&&this.spacer&&(this.spacer.style.height=`${this.totalRows*this.virtualRowHeight}px`),e.rows.length===0?this.renderNoData(i.noDataText,t,i):this.renderRows(e.rows,t,i),this.currentRows=e.rows)}renderRows(e,t,i){var r,n,a;const s=t.filter(o=>o._visible);for(let o=0;o<e.length;o++){const l=e[o];if(l._type==="group-header"){this.renderGroupHeader(l,s.length,i);continue}if(l._type!=="data")continue;const d=document.createElement("tr");d.className="katucharts-dt-row";const h=i.selectedIndices.has(l._originalIndex);h&&d.classList.add("is-selected"),this.virtualEnabled&&(d.style.height=`${this.virtualRowHeight}px`);const u=this.theme.rowStyle({row:l._data,rowIndex:l._originalIndex});if(u&&Object.assign(d.style,u),d.addEventListener("mouseenter",()=>this.events.emit("row:mouseenter",{row:l._data,rowIndex:l._originalIndex})),d.addEventListener("mouseleave",()=>this.events.emit("row:mouseleave",{row:l._data,rowIndex:l._originalIndex})),i.selectionCheckbox&&i.selectionMode!=="none"){const p=document.createElement("td");p.className="katucharts-dt-td katucharts-dt-checkbox-cell";const m=document.createElement("input");m.type="checkbox",m.className="katucharts-dt-checkbox",m.checked=h,m.setAttribute("aria-label",this.lang.selectRow??"Select row"),m.addEventListener("click",w=>w.stopPropagation()),m.addEventListener("change",()=>{this.events.emit("selection:checkbox",{rowIndex:l._originalIndex,row:l._data,checked:m.checked})}),p.appendChild(m),d.appendChild(p)}const g=(r=i.treeData)!=null&&r.enabled&&l._depth>0?l._depth*(i.treeData.indent??20):0;for(let p=0;p<s.length;p++){const m=s[p],w=this.cellRenderer.resolveValue(l._data,m),y=this.cellRenderer.createCell(d,w,l,m,o);if(p===0&&g>0&&(y.style.paddingLeft=`${g+16}px`),p===0&&((n=i.treeData)!=null&&n.enabled)&&l._expanded!==void 0){const k=document.createElement("span");k.textContent=l._expanded?"▼ ":"▶ ",k.style.cursor="pointer",k.style.marginRight="4px",k.addEventListener("click",R=>{R.stopPropagation(),this.events.emit("tree:toggle",{rowIndex:l._originalIndex,expanded:!l._expanded})}),y.insertBefore(k,y.firstChild)}y.addEventListener("click",k=>{this.events.emit("cell:click",{value:w,row:l._data,column:m,rowIndex:l._originalIndex,colIndex:p,originalEvent:k})}),y.addEventListener("dblclick",k=>{this.events.emit("cell:dblclick",{value:w,row:l._data,column:m,rowIndex:l._originalIndex,colIndex:p,originalEvent:k,td:y})})}d.addEventListener("click",p=>this.events.emit("row:click",{row:l._data,rowIndex:l._originalIndex,originalEvent:p})),d.addEventListener("dblclick",p=>this.events.emit("row:dblclick",{row:l._data,rowIndex:l._originalIndex,originalEvent:p})),d.addEventListener("contextmenu",p=>this.events.emit("row:contextmenu",{row:l._data,rowIndex:l._originalIndex,originalEvent:p})),d.setAttribute("data-row-index",String(l._originalIndex)),this.tbody.appendChild(d),(a=i.masterDetail)!=null&&a.enabled&&l._expanded&&this.renderDetailRow(l,s.length+(i.selectionCheckbox?1:0),i.masterDetail)}}renderGroupHeader(e,t,i){var o,l;const s=document.createElement("tr");s.className="katucharts-dt-group-header";const r=document.createElement("td");r.colSpan=t+(i.selectionCheckbox?1:0);const n=e._expanded?"▼":"▶",a=((o=i.grouping)==null?void 0:o.showCount)!==!1?` (${e._groupCount})`:"";(l=i.grouping)!=null&&l.headerFormatter?r.innerHTML=i.grouping.headerFormatter.call({value:e._groupValue,column:e._groupColumn,count:e._groupCount}):r.textContent=`${n} ${e._groupColumn}: ${e._groupValue}${a}`,r.addEventListener("click",()=>{this.events.emit("group:toggle",{groupValue:e._groupValue,groupColumn:e._groupColumn,expanded:!e._expanded})}),s.appendChild(r),this.tbody.appendChild(s)}renderDetailRow(e,t,i){const s=document.createElement("tr");s.className="katucharts-dt-detail";const r=document.createElement("td");if(r.colSpan=t,i.height&&i.height!=="auto"&&(r.style.height=`${i.height}px`,r.style.overflow="auto"),i.renderer){const n=i.renderer(e._data,r);n instanceof HTMLElement&&r.appendChild(n)}s.appendChild(r),this.tbody.appendChild(s)}renderNoData(e,t,i){const s=document.createElement("tr"),r=document.createElement("td");r.className="katucharts-dt-nodata",r.colSpan=t.filter(n=>n._visible).length+(i.selectionCheckbox?1:0)||1,r.textContent=e,s.appendChild(r),this.tbody.appendChild(s)}createColgroup(e,t){const i=document.createElement("colgroup");if(t){const s=document.createElement("col");s.style.width="44px",i.appendChild(s)}for(const s of e){if(!s._visible)continue;const r=document.createElement("col");r.style.width=`${s._computedWidth}px`,i.appendChild(r)}return i}updateVirtualPosition(e){if(!this.virtualEnabled||!this.bodyTable)return;const t=Math.max(0,Math.floor(e/this.virtualRowHeight)-this.virtualOverscan);this.bodyTable.style.top=`${t*this.virtualRowHeight}px`}showLoading(e){if(this.loadingOverlay&&(this.loadingOverlay.style.display="flex",e)){const t=this.loadingOverlay.querySelector("span:last-child");t&&(t.textContent=e)}}hideLoading(){this.loadingOverlay&&(this.loadingOverlay.style.display="none")}scrollToRow(e){var t;if(this.bodyScrollContainer)if(this.virtualEnabled)this.bodyScrollContainer.scrollTop=e*this.virtualRowHeight;else{const i=(t=this.tbody)==null?void 0:t.querySelector(`[data-row-index="${e}"]`);i&&i.scrollIntoView({block:"center",behavior:"smooth"})}}getHeaderRenderer(){return this.headerRenderer}getBodyScrollContainer(){return this.bodyScrollContainer}cleanup(){this.headerRenderer.destroy(),this.tableContainer&&(this.tableContainer.remove(),this.tableContainer=null),this.headerTable=null,this.bodyTable=null,this.tbody=null,this.colgroup=null,this.headerColgroup=null,this.spacer=null,this.bodyScrollContainer=null,this.headerScrollContainer=null,this.loadingOverlay=null}destroy(){this.cleanup(),this.currentRows=[]}}class xe{constructor(e,t,i={}){this.container=null,this.pageSizePopover=null,this.theme=e,this.events=t,this.lang=i}setLang(e){this.lang=e}render(e,t,i){var n;this.container&&this.container.remove(),this.closePageSizeMenu(),this.container=document.createElement("div"),this.container.className="katucharts-dt-footer";const s=document.createElement("div");if(s.className="katucharts-dt-footer-section",i.showPageInfo!==!1){const a=document.createElement("span");a.className="katucharts-dt-page-info",a.textContent=this.formatPageInfo(t),s.appendChild(a)}i.showPageSizeSelector!==!1&&((n=i.pageSizes)!=null&&n.length)&&s.appendChild(this.createPageSizeSelector(t.pageSize,i.pageSizes));const r=document.createElement("div");r.className="katucharts-dt-pagination",i.showFirstLast!==!1&&r.appendChild(this.createIconButton(v.chevronsLeft,1,t.page<=1,"First page")),r.appendChild(this.createIconButton(v.chevronLeft,t.page-1,t.page<=1,"Previous page"));for(const a of this.getPageNumbers(t.page,t.totalPages))if(a===-1){const o=document.createElement("span");o.className="katucharts-dt-ellipsis",o.textContent="…",r.appendChild(o)}else r.appendChild(this.createTextButton(String(a),a,!1,a===t.page));return r.appendChild(this.createIconButton(v.chevronRight,t.page+1,t.page>=t.totalPages,"Next page")),i.showFirstLast!==!1&&r.appendChild(this.createIconButton(v.chevronsRight,t.totalPages,t.page>=t.totalPages,"Last page")),this.container.appendChild(s),this.container.appendChild(r),e.appendChild(this.container),this.container}createButton(e,t,i,s){const r=document.createElement("button");return r.type="button",r.className="katucharts-dt-btn",i&&r.classList.add("is-active"),r.disabled=t,s&&r.setAttribute("aria-label",s),t||r.addEventListener("click",()=>this.events.emit("page:change",{page:e})),r}createIconButton(e,t,i,s){const r=this.createButton(t,i,!1,s);return r.innerHTML=e,r}createTextButton(e,t,i,s){const r=this.createButton(t,i,s);return r.textContent=e,r}createPageSizeSelector(e,t){const i=document.createElement("div");i.className="katucharts-dt-page-size";const s=document.createElement("span");s.textContent=this.lang.pageSizeLabel??"Rows per page:",i.appendChild(s);const r=document.createElement("button");return r.type="button",r.className="katucharts-dt-btn katucharts-dt-page-size-btn",r.setAttribute("aria-label",this.lang.pageSizeLabel??"Rows per page"),r.innerHTML=`<span>${e}</span>${v.chevronsUpDown}`,r.addEventListener("click",()=>{if(this.pageSizePopover){this.closePageSizeMenu();return}const n=document.createElement("div");n.className="katucharts-dt-menu",n.style.minWidth="72px";for(const a of t){const o=document.createElement("div");o.className="katucharts-dt-menu-item",a===e&&o.classList.add("is-active"),o.textContent=String(a),o.addEventListener("click",()=>{this.closePageSizeMenu(),this.events.emit("page:sizechange",{pageSize:a})}),n.appendChild(o)}this.pageSizePopover=E(r,n,{align:"left"})}),i.appendChild(r),i}closePageSizeMenu(){this.pageSizePopover&&(this.pageSizePopover.close(),this.pageSizePopover=null)}getPageNumbers(e,t){if(t<=7)return Array.from({length:t},(n,a)=>a+1);const i=[1];e>3&&i.push(-1);const s=Math.max(2,e-1),r=Math.min(t-1,e+1);for(let n=s;n<=r;n++)i.push(n);return e<t-2&&i.push(-1),i.push(t),i}formatPageInfo(e){return(this.lang.pageInfo??"Showing {from}-{to} of {total}").replace("{from}",String(e.from)).replace("{to}",String(e.to)).replace("{total}",String(e.totalRows))}update(e,t,i){this.render(i,e,t)}destroy(){this.closePageSizeMenu(),this.container&&(this.container.remove(),this.container=null)}}class ye{constructor(e,t,i={}){this.input=null,this.container=null,this.theme=e,this.events=t,this.lang=i}setLang(e){this.lang=e}render(e,t){this.container&&this.container.remove(),this.container=document.createElement("div"),this.container.className="katucharts-dt-search";const i=document.createElement("span");i.className="katucharts-dt-search-icon",i.innerHTML=v.search,this.container.appendChild(i),this.input=document.createElement("input"),this.input.type="text",this.input.className="katucharts-dt-input",this.input.placeholder=t.placeholder??this.lang.search??"Search…",t.inputStyle&&Object.assign(this.input.style,t.inputStyle);const s=I(r=>{this.events.emit("search:change",{query:r})},t.debounceMs??300);return this.input.addEventListener("input",()=>s(this.input.value)),this.input.addEventListener("keydown",r=>{r.key==="Escape"&&(this.input.value="",this.events.emit("search:change",{query:""}))}),this.container.appendChild(this.input),e.appendChild(this.container),this.container}setValue(e){this.input&&(this.input.value=e)}getValue(){var e;return((e=this.input)==null?void 0:e.value)??""}focus(){var e;(e=this.input)==null||e.focus()}destroy(){this.container&&(this.container.remove(),this.container=null),this.input=null}}class Se{constructor(e,t,i={}){this.container=null,this.popover=null,this.hasActiveFilters=!1,this.resetButton=null,this.theme=e,this.events=t,this.searchRenderer=new ye(e,t,i),this.lang=i}setLang(e){this.lang=e,this.searchRenderer.setLang(e)}setActiveFilters(e){this.hasActiveFilters=e}setResetVisible(e){this.hasActiveFilters=e,this.resetButton&&(this.resetButton.style.display=e?"":"none")}render(e,t,i,s,r){this.container&&this.container.remove(),this.closeDropdown(),this.container=document.createElement("div"),this.container.className="katucharts-dt-toolbar";const n=document.createElement("div");n.className="katucharts-dt-toolbar-group katucharts-dt-toolbar-group--left";const a=document.createElement("div");a.className="katucharts-dt-toolbar-group";const o=t.items??["search","columnToggle","export"];for(const l of o)switch(l){case"search":i.enabled!==!1&&this.searchRenderer.render(n,i);break;case"reset":n.appendChild(this.createResetButton());break;case"columnToggle":a.appendChild(this.createColumnToggle(r));break;case"export":s.enabled!==!1&&a.appendChild(this.createExportDropdown(s));break;case"density":a.appendChild(this.createDensityToggle());break;case"fullscreen":a.appendChild(this.createFullscreenButton());break}if(t.customItems)for(const l of t.customItems){const d=document.createElement("button");d.className="katucharts-dt-btn",d.innerHTML=l.content,l.style&&Object.assign(d.style,l.style),l.onClick&&d.addEventListener("click",l.onClick),(l.position==="left"?n:a).appendChild(d)}return this.container.appendChild(n),this.container.appendChild(a),e.appendChild(this.container),this.container}button(e,t){const i=document.createElement("button");return i.type="button",i.className="katucharts-dt-btn",i.innerHTML=`${t??""}<span>${e}</span>`,i}createResetButton(){const e=this.button(this.lang.resetFilters??"Reset",v.x);return e.addEventListener("click",()=>this.events.emit("filters:reset")),e.style.display=this.hasActiveFilters?"":"none",this.resetButton=e,e}toggleMenu(e,t){if(this.popover){this.closeDropdown();return}this.popover=E(e,t(),{align:"right"})}createColumnToggle(e){const t=document.createElement("div");t.style.position="relative";const i=this.button(this.lang.columns??"Columns",v.columns);return i.addEventListener("click",()=>this.toggleMenu(i,()=>{const s=document.createElement("div");s.className="katucharts-dt-menu";const r=document.createElement("div");r.className="katucharts-dt-menu-label",r.textContent=this.lang.toggleColumns??"Toggle columns",s.appendChild(r);for(const n of e){if(n.enableHiding===!1)continue;const a=document.createElement("label");a.className="katucharts-dt-menu-item";const o=document.createElement("input");o.type="checkbox",o.checked=n._visible,o.addEventListener("change",()=>{this.events.emit("column:visibility",{field:n.field,visible:o.checked})});const l=document.createElement("span");l.textContent=n.title??n.field,a.appendChild(o),a.appendChild(l),s.appendChild(a)}return s})),t.appendChild(i),t}createExportDropdown(e){const t=document.createElement("div");t.style.position="relative";const i=this.button(this.lang.exportButton??"Export",v.download);return i.addEventListener("click",()=>this.toggleMenu(i,()=>{const s=document.createElement("div");s.className="katucharts-dt-menu";const r=e.formats??["csv","json","clipboard"],n={csv:this.lang.exportCSV??"Export CSV",json:this.lang.exportJSON??"Export JSON",clipboard:this.lang.copyClipboard??"Copy to clipboard",html:this.lang.exportHTML??"Export HTML"};for(const a of r){const o=document.createElement("div");o.className="katucharts-dt-menu-item",o.textContent=n[a]??a,o.addEventListener("click",()=>{this.events.emit("export:trigger",{format:a}),this.closeDropdown()}),s.appendChild(o)}return s})),t.appendChild(i),t}createDensityToggle(){const e=document.createElement("div");e.style.position="relative";const t=this.button(this.lang.density??"Density",v.sliders);return t.addEventListener("click",()=>this.toggleMenu(t,()=>{const i=document.createElement("div");i.className="katucharts-dt-menu";const s=["compact","normal","comfortable"],r={compact:this.lang.densityCompact??"Compact",normal:this.lang.densityNormal??"Normal",comfortable:this.lang.densityComfortable??"Comfortable"};for(const n of s){const a=document.createElement("div");a.className="katucharts-dt-menu-item",n===this.theme.density&&a.classList.add("is-active"),a.textContent=r[n],a.addEventListener("click",()=>{this.events.emit("density:change",{density:n}),this.closeDropdown()}),i.appendChild(a)}return i})),e.appendChild(t),e}createFullscreenButton(){const e=this.button("",v.expand);return e.addEventListener("click",()=>this.events.emit("fullscreen:toggle")),e}closeDropdown(){this.popover&&(this.popover.close(),this.popover=null)}getSearchRenderer(){return this.searchRenderer}destroy(){this.closeDropdown(),this.searchRenderer.destroy(),this.container&&(this.container.remove(),this.container=null)}}class we{constructor(e,t,i=!1){this.selectedIndices=new Set,this.lastClickedIndex=-1,this.mode=e,this.events=t,this.preserveOnFilter=i}handleRowClick(e,t,i){if(this.mode==="none")return;const s=this.selectedIndices.has(e),r=[],n=[];if(this.mode==="single"){for(const a of this.selectedIndices)a!==e&&n.push(a);this.selectedIndices.clear(),s?n.push(t):(this.selectedIndices.add(e),r.push(t))}else if(this.mode==="multi")if(i.shiftKey&&this.lastClickedIndex>=0){const a=Math.min(this.lastClickedIndex,e),o=Math.max(this.lastClickedIndex,e);for(let l=a;l<=o;l++)this.selectedIndices.has(l)||this.selectedIndices.add(l)}else if(i.ctrlKey||i.metaKey)s?(this.selectedIndices.delete(e),n.push(t)):(this.selectedIndices.add(e),r.push(t));else{for(const a of this.selectedIndices)a!==e&&n.push(a);this.selectedIndices.clear(),s||(this.selectedIndices.add(e),r.push(t))}this.lastClickedIndex=e,this.emitChange(r,n)}handleCheckboxToggle(e,t,i){i?(this.selectedIndices.add(e),this.emitChange([t],[])):(this.selectedIndices.delete(e),this.emitChange([],[t]))}selectAll(e){const t=[];for(const i of e)i._type==="data"&&!this.selectedIndices.has(i._originalIndex)&&(this.selectedIndices.add(i._originalIndex),t.push(i._data));t.length&&this.emitChange(t,[])}deselectAll(){const e=Array.from(this.selectedIndices);this.selectedIndices.clear(),e.length&&this.emitChange([],e)}selectRow(e){const t=Array.isArray(e)?e:[e],i=[];for(const s of t)this.selectedIndices.has(s)||(this.selectedIndices.add(s),i.push(s));i.length&&this.emitChange(i,[])}deselectRow(e){const t=Array.isArray(e)?e:[e],i=[];for(const s of t)this.selectedIndices.delete(s)&&i.push(s);i.length&&this.emitChange([],i)}isSelected(e){return this.selectedIndices.has(e)}getSelectedIndices(){return Array.from(this.selectedIndices).sort((e,t)=>e-t)}getSelectedData(e){return this.getSelectedIndices().filter(t=>t>=0&&t<e.length).map(t=>e[t])}getCount(){return this.selectedIndices.size}isAllSelected(e){return e>0&&this.selectedIndices.size>=e}isSomeSelected(){return this.selectedIndices.size>0}clearOnFilter(){this.preserveOnFilter||this.selectedIndices.clear()}setMode(e){if(this.mode=e,e==="none"&&this.selectedIndices.clear(),e==="single"&&this.selectedIndices.size>1){const t=this.selectedIndices.values().next().value;this.selectedIndices.clear(),t!==void 0&&this.selectedIndices.add(t)}}emitChange(e,t){this.events.emit("selection:change",{selected:Array.from(this.selectedIndices),added:e,removed:t})}destroy(){this.selectedIndices.clear()}}class f{static exportCSV(e,t,i,s){const r=f.toCSV(e,t,i),n=new Blob([r],{type:"text/csv;charset=utf-8;"});f.downloadBlob(n,(s??"export")+".csv")}static exportJSON(e,t,i,s){const r=f.toJSON(e,t,i),n=new Blob([r],{type:"application/json;charset=utf-8;"});f.downloadBlob(n,(s??"export")+".json")}static copyToClipboard(e,t){const i=f.toCSV(e,t,{delimiter:" "});navigator.clipboard?navigator.clipboard.writeText(i).catch(()=>{f.fallbackCopy(i)}):f.fallbackCopy(i)}static exportHTML(e,t,i){const s=f.toHTML(e,t),r=new Blob([s],{type:"text/html;charset=utf-8;"});f.downloadBlob(r,(i??"export")+".html")}static toCSV(e,t,i){const s=(i==null?void 0:i.delimiter)??",",r=(i==null?void 0:i.lineDelimiter)??`
295
+ `,n=(i==null?void 0:i.includeHeaders)!==!1,a=t.filter(l=>l._visible),o=[];n&&o.push(a.map(l=>f.escapeCSV(l.title??l.field,s)).join(s));for(const l of e){const d=a.map(h=>{const u=l[h.field];return f.escapeCSV(u!=null?String(u):"",s)});o.push(d.join(s))}return o.join(r)}static toJSON(e,t,i){const s=(i==null?void 0:i.indent)??2,r=t.filter(a=>a._visible),n=e.map(a=>{const o={};for(const l of r)o[l.field]=a[l.field];return o});return JSON.stringify(n,null,s)}static toHTML(e,t){const i=t.filter(r=>r._visible),s=['<!DOCTYPE html><html><head><meta charset="utf-8">',"<style>table{border-collapse:collapse;width:100%;font-family:sans-serif;font-size:13px}","th,td{border:1px solid #ddd;padding:6px 10px;text-align:left}","th{background:#f5f5f5;font-weight:600}tr:nth-child(even){background:#fafafa}</style>","</head><body><table>","<thead><tr>"];for(const r of i)s.push(`<th>${f.escapeHTML(r.title??r.field)}</th>`);s.push("</tr></thead><tbody>");for(const r of e){s.push("<tr>");for(const n of i){const a=r[n.field];s.push(`<td>${f.escapeHTML(a!=null?String(a):"")}</td>`)}s.push("</tr>")}return s.push("</tbody></table></body></html>"),s.join("")}static escapeCSV(e,t){let i=e;return/^[=+\-@\t\r]/.test(i)&&!/^-?\d+(?:[.,]\d+)?$/.test(i)&&(i="'"+i),i.includes(t)||i.includes('"')||i.includes(`
296
+ `)||i.includes("\r")?'"'+i.replace(/"/g,'""')+'"':i}static escapeHTML(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}static downloadBlob(e,t){const i=URL.createObjectURL(e),s=document.createElement("a");s.href=i,s.download=t,s.style.display="none",document.body.appendChild(s),s.click(),setTimeout(()=>{document.body.removeChild(s),URL.revokeObjectURL(i)},100)}static fallbackCopy(e){const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}class Ce{constructor(e,t,i){this.activeEditor=null,this.events=e,this.theme=t,this.options=i}startEditing(e,t,i,s,r){if(!this.options.enabled||s.editable===!1)return;this.activeEditor&&this.commitOrCancel();const n=this.createEditor(e,t,i,s);n&&(this.activeEditor={td:e,column:s,rowIndex:r,row:i,originalValue:t,element:n.element,getValue:n.getValue,destroy:n.destroy},e.textContent="",e.appendChild(n.element),(n.element instanceof HTMLInputElement||n.element instanceof HTMLSelectElement)&&n.element.focus(),this.events.emit("cell:edit:start",{row:i,column:s.field,value:t,rowIndex:r}))}createEditor(e,t,i,s){const r=s.editor??this.inferEditorType(s);if(typeof r=="function"){const n=r(e,t,i,s);return{element:e.lastElementChild??e,getValue:n.getValue,destroy:n.destroy}}switch(r){case"text":return this.createTextEditor(t);case"number":return this.createNumberEditor(t);case"select":return this.createSelectEditor(t,s);case"date":return this.createDateEditor(t);case"checkbox":return this.createCheckboxEditor(t);default:return this.createTextEditor(t)}}createTextEditor(e){const t=document.createElement("input");return t.type="text",t.value=e!=null?String(e):"",this.styleEditorInput(t),this.attachEditorEvents(t),{element:t,getValue:()=>t.value,destroy:()=>t.remove()}}createNumberEditor(e){const t=document.createElement("input");return t.type="number",t.value=e!=null?String(e):"",this.styleEditorInput(t),this.attachEditorEvents(t),{element:t,getValue:()=>t.value?Number(t.value):null,destroy:()=>t.remove()}}createSelectEditor(e,t){const i=document.createElement("select");this.styleEditorInput(i);const s=t.editorOptions??t.filterOptions??[];for(const r of s){const n=document.createElement("option");n.value=String(r),n.textContent=String(r),String(r)===String(e)&&(n.selected=!0),i.appendChild(n)}return i.addEventListener("change",()=>this.commit()),i.addEventListener("keydown",r=>{r.key==="Escape"&&this.cancel()}),i.addEventListener("blur",()=>{this.options.saveOnBlur!==!1?this.commit():this.cancel()}),{element:i,getValue:()=>i.value,destroy:()=>i.remove()}}createDateEditor(e){const t=document.createElement("input");if(t.type="date",e){const i=new Date(e);isNaN(i.getTime())||(t.value=i.toISOString().split("T")[0])}return this.styleEditorInput(t),this.attachEditorEvents(t),{element:t,getValue:()=>t.value,destroy:()=>t.remove()}}createCheckboxEditor(e){const t=document.createElement("input");return t.type="checkbox",t.checked=!!e,t.style.cursor="pointer",t.addEventListener("change",()=>this.commit()),t.addEventListener("keydown",i=>{i.key==="Escape"&&this.cancel()}),{element:t,getValue:()=>t.checked,destroy:()=>t.remove()}}styleEditorInput(e){Object.assign(e.style,{width:"100%",padding:"2px 4px",border:"2px solid #3b82f6",borderRadius:"3px",fontSize:"inherit",fontFamily:"inherit",boxSizing:"border-box",outline:"none",backgroundColor:"#fff"})}attachEditorEvents(e){e.addEventListener("keydown",t=>{t.key==="Enter"?(t.preventDefault(),this.commit()):t.key==="Escape"?this.cancel():t.key==="Tab"&&(t.preventDefault(),this.commit(),this.events.emit("cell:edit:tab",{shiftKey:t.shiftKey}))}),e.addEventListener("blur",()=>{setTimeout(()=>{this.activeEditor&&this.activeEditor.element===e&&(this.options.saveOnBlur!==!1?this.commit():this.cancel())},100)})}commit(){if(!this.activeEditor)return;const{column:e,rowIndex:t,row:i,originalValue:s,td:r}=this.activeEditor,n=this.activeEditor.getValue();if(e.validator){const a=e.validator(n,i);if(a!==!0){const o=typeof a=="string"?a:"Validation failed";this.showValidationError(r,o);return}}this.activeEditor.destroy(),r.textContent=n!=null?String(n):"",n!==s&&this.events.emit("cell:edit:commit",{row:i,column:e.field,oldValue:s,newValue:n,rowIndex:t}),this.activeEditor=null}cancel(){if(!this.activeEditor)return;const{column:e,row:t,originalValue:i,td:s}=this.activeEditor;this.activeEditor.destroy(),s.textContent=i!=null?String(i):"",this.events.emit("cell:edit:cancel",{row:t,column:e.field,value:i}),this.activeEditor=null}commitOrCancel(){this.options.saveOnBlur!==!1?this.commit():this.cancel()}showValidationError(e,t){e.style.outline="2px solid #ef4444",e.title=t,setTimeout(()=>{e.style.outline="",e.title=""},2e3)}isEditing(){return this.activeEditor!==null}inferEditorType(e){switch(e.type){case"number":return"number";case"date":return"date";case"boolean":return"checkbox";default:return"text"}}destroy(){this.activeEditor&&(this.activeEditor.destroy(),this.activeEditor=null)}}const W={search:"Search...",noData:"No data available",loading:"Loading...",pageInfo:"Showing {from}-{to} of {total}",pageSizeLabel:"Rows per page:",firstPage:"«",lastPage:"»",previousPage:"‹",nextPage:"›",selectAll:"Select all",columns:"Columns",exportCSV:"Export CSV",exportJSON:"Export JSON",copyClipboard:"Copy to clipboard",resetFilters:"Reset filters",of:"of",rows:"rows",showing:"Showing",filterPlaceholder:"Filter…",filterAll:"All",filterTrue:"True",filterFalse:"False",rangeMin:"Min",rangeMax:"Max",selectAllRows:"Select all rows",selectRow:"Select row",toggleColumns:"Toggle columns",exportButton:"Export",exportHTML:"Export HTML",density:"Density",densityCompact:"Compact",densityNormal:"Normal",densityComfortable:"Comfortable"},G={search:"Pesquisar...",noData:"Nenhum dado disponível",loading:"Carregando...",pageInfo:"Exibindo {from}-{to} de {total}",pageSizeLabel:"Linhas por página:",selectAll:"Selecionar tudo",columns:"Colunas",exportCSV:"Exportar CSV",exportJSON:"Exportar JSON",copyClipboard:"Copiar para a área de transferência",resetFilters:"Redefinir filtros",of:"de",rows:"linhas",showing:"Exibindo",filterPlaceholder:"Filtrar…",filterAll:"Todos",filterTrue:"Verdadeiro",filterFalse:"Falso",rangeMin:"Mín",rangeMax:"Máx",selectAllRows:"Selecionar todas as linhas",selectRow:"Selecionar linha",toggleColumns:"Alternar colunas",exportButton:"Exportar",exportHTML:"Exportar HTML",density:"Densidade",densityCompact:"Compacto",densityNormal:"Normal",densityComfortable:"Confortável"},J={en:W,"pt-BR":G,pt:G,es:{search:"Buscar...",noData:"Sin datos disponibles",loading:"Cargando...",pageInfo:"Mostrando {from}-{to} de {total}",pageSizeLabel:"Filas por página:",selectAll:"Seleccionar todo",columns:"Columnas",exportCSV:"Exportar CSV",exportJSON:"Exportar JSON",copyClipboard:"Copiar al portapapeles",resetFilters:"Restablecer filtros",of:"de",rows:"filas",showing:"Mostrando",filterPlaceholder:"Filtrar…",filterAll:"Todos",filterTrue:"Verdadero",filterFalse:"Falso",rangeMin:"Mín",rangeMax:"Máx",selectAllRows:"Seleccionar todas las filas",selectRow:"Seleccionar fila",toggleColumns:"Alternar columnas",exportButton:"Exportar",exportHTML:"Exportar HTML",density:"Densidad",densityCompact:"Compacto",densityNormal:"Normal",densityComfortable:"Cómodo"},zh:{search:"搜索...",noData:"暂无数据",loading:"加载中...",pageInfo:"显示第 {from}-{to} 项,共 {total} 项",pageSizeLabel:"每页行数:",selectAll:"全选",columns:"列",exportCSV:"导出 CSV",exportJSON:"导出 JSON",copyClipboard:"复制到剪贴板",resetFilters:"重置筛选",of:"/",rows:"行",showing:"显示",filterPlaceholder:"筛选…",filterAll:"全部",filterTrue:"是",filterFalse:"否",rangeMin:"最小",rangeMax:"最大",selectAllRows:"全选所有行",selectRow:"选择行",toggleColumns:"切换列",exportButton:"导出",exportHTML:"导出 HTML",density:"密度",densityCompact:"紧凑",densityNormal:"正常",densityComfortable:"宽松"}};function Ee(c,e){J[c]=e}function D(c){return J[c]}function A(c={}){const e=c.locale&&c.locale!=="auto"?c.locale:Re(),t=e?D(e):void 0;return{...W,...t??{},...c.langOverrides??{}}}function Re(){if(typeof navigator>"u")return"en";const c=[];Array.isArray(navigator.languages)&&c.push(...navigator.languages),navigator.language&&c.push(navigator.language);for(const e of c){if(!e)continue;if(D(e))return e;const t=e.split("-")[0];if(t!==e&&D(t))return t}return"en"}class F{constructor(e,t={}){var s,r,n,a,o,l,d;this.columns=[],this.currentResult=null,this.currentPage=1,this.searchQuery="",this.sortState=[],this.filterState={},this.groupExpanded=new Map,this.resizeObserver=null,this.destroyed=!1,this.lastResponsiveWidth=0,this.refreshing=!1,this.serverTotal=0,this.initialVisibility=null,this.container=U(e),this.options=P(Y,t),this.resolvedLang=A({locale:this.options.locale,langOverrides:this.options.lang}),this.events=new C,pe(this.container.ownerDocument??document),this.applyInitialState(),this.currentPageSize=((r=(s=this.options.initialState)==null?void 0:s.pagination)==null?void 0:r.pageSize)??((n=this.options.pagination)==null?void 0:n.pageSize)??25,this.theme=new he(this.options.style),this.tableApi=fe(this),this.dataSource=new ce(this.options),this.processor=new de;const i={};if(this.options.formatters)for(const[h,u]of Object.entries(this.options.formatters))u&&(i[h]=u);this.tableRenderer=new ke(this.theme,this.events,i,this.resolvedLang),this.paginationRenderer=new xe(this.theme,this.events,this.resolvedLang),this.toolbarRenderer=new Se(this.theme,this.events,this.resolvedLang),this.selectionManager=new we(((a=this.options.selection)==null?void 0:a.mode)??"none",this.events,(o=this.options.selection)==null?void 0:o.preserveOnFilter),this.cellEditor=new Ce(this.events,this.theme,this.options.editing??{enabled:!1}),this.rootEl=T("katucharts-datatable",this.container),this.applyRootStyling(),this.tableArea=T("katucharts-dt-table-area",this.rootEl),this.columnManager=new V([],this.events),this.wireEvents(),(d=(l=this.options.sorting)==null?void 0:l.defaultSort)!=null&&d.length&&(this.sortState=this.options.sorting.defaultSort.map(h=>({column:h.column,direction:h.direction}))),this.init()}applyInitialState(){var t,i;const e=this.options.initialState;if(e&&(((t=e.pagination)==null?void 0:t.pageSize)!=null&&(this.options.pagination={...this.options.pagination,pageSize:e.pagination.pageSize}),(i=e.sorting)!=null&&i.length&&(this.options.sorting={...this.options.sorting,defaultSort:e.sorting.map(s=>({column:s.column??s.id,direction:s.direction??(s.desc?"desc":"asc")}))}),e.columnVisibility&&(this.initialVisibility=e.columnVisibility),e.columnFilters)){const s=Array.isArray(e.columnFilters)?Object.fromEntries(e.columnFilters.map(r=>[r.id,r.value])):e.columnFilters;this.filterState={...s}}}applyRootStyling(){const e=this.options.classNames;e!=null&&e.root&&(this.rootEl.className+=` ${e.root}`);const t=this.theme.cssVariables(this.options.width,this.options.height);for(const[i,s]of Object.entries(t))this.rootEl.style.setProperty(i,s);for(const[i,s]of Object.entries(this.theme.rootDataset()))this.rootEl.setAttribute(i,s);this.theme.userContainerStyle&&Object.assign(this.rootEl.style,this.theme.userContainerStyle)}init(){var t;if((t=this.options.serverSide)!=null&&t.enabled&&this.options.serverSide.url){this.initAsync();return}const{data:e}=this.dataSource.loadSync();this.initColumns(e),this.renderFull(),this.setupResponsive(),this.bindUserEvents(),this.events.emit("datatable:load",{})}async initAsync(){try{this.showLoading();const{data:e,total:t}=await this.dataSource.load();this.serverTotal=t,this.initColumns(e),this.renderFull(),this.setupResponsive(),this.bindUserEvents(),this.hideLoading(),this.events.emit("datatable:load",{})}catch(e){this.hideLoading(),console.error("DataTable: initialization failed",e)}}initColumns(e){var n;const t=this.options.columns,i=t&&t.length>0?t:ee(e),s=this.rootEl.clientWidth||800,r=((n=this.options.selection)==null?void 0:n.checkbox)===!0?44:0;this.columns=ne(i,s,e,r);for(const a of this.columns)if((a.type==="boolean"||a.filterType==="select"||a.filterType==="multiselect"||a.filterType==="faceted")&&!a.filterOptions){const l=[...new Set(e.map(d=>d[a.field]).filter(d=>d!=null))];a.filterOptions=l.sort()}if(this.initialVisibility)for(const a of this.columns){const o=this.initialVisibility[a.id??a.field];o!==void 0&&(a._visible=o,a.visible=o)}H(this.columns),this.columnManager=new V(this.columns,this.events),this.columnManager.setSortState(this.sortState)}renderFull(){var i,s,r,n,a,o,l,d;this.rootEl.innerHTML="",this.tableArea=T("katucharts-dt-table-area",this.rootEl);const e=this.options.classNames;if((i=this.options.title)!=null&&i.text){const h=document.createElement("div");h.className="katucharts-dt-title",e!=null&&e.title&&(h.className+=` ${e.title}`),h.textContent=this.options.title.text,this.options.title.style&&Object.assign(h.style,this.options.title.style),this.rootEl.insertBefore(h,this.tableArea)}if(((s=this.options.toolbar)==null?void 0:s.enabled)!==!1){this.toolbarRenderer.setActiveFilters(Object.keys(this.filterState).length>0),this.toolbarRenderer.render(this.rootEl,{...this.options.toolbar,items:this.resolveToolbarItems()},this.options.search??{},this.options.exporting??{},this.columns);const h=this.rootEl.querySelector(".katucharts-dt-toolbar");e!=null&&e.toolbar&&(h.className+=` ${e.toolbar}`),this.rootEl.insertBefore(h,this.tableArea)}const t=this.processData();if(this.currentResult=t,this.tableRenderer.render(this.tableArea,this.columns,t,{height:this.computeBodyHeight(),sortingEnabled:((r=this.options.sorting)==null?void 0:r.enabled)!==!1,filteringEnabled:this.isFilteringEnabled(),filterPosition:((n=this.options.filtering)==null?void 0:n.position)??"header",resizingEnabled:((a=this.options.columnResizing)==null?void 0:a.enabled)!==!1,selectionMode:((o=this.options.selection)==null?void 0:o.mode)??"none",selectionCheckbox:((l=this.options.selection)==null?void 0:l.checkbox)===!0,grouping:this.options.grouping,masterDetail:this.options.masterDetail,treeData:this.options.treeData,virtualScroll:this.options.virtualScroll,headerGroups:this.options.headerGroups,selectedIndices:new Set(this.selectionManager.getSelectedIndices()),noDataText:this.resolvedLang.noData,loadingText:this.resolvedLang.loading,api:this.tableApi,host:this,bodyClass:e==null?void 0:e.body,tableClass:e==null?void 0:e.table}),((d=this.options.pagination)==null?void 0:d.enabled)!==!1&&!this.isVirtualEnabled()){const h=this.getPageInfo();this.paginationRenderer.render(this.rootEl,h,this.options.pagination);const u=this.rootEl.querySelector(".katucharts-dt-footer");u&&(e!=null&&e.footer)&&(u.className+=` ${e.footer}`)}}isFilteringEnabled(){var e,t;return((e=this.options.filtering)==null?void 0:e.enabled)===!1?!1:((t=this.options.filtering)==null?void 0:t.showFilterRow)!==!1}resolveToolbarItems(){var s,r,n,a,o;let e=[...((s=this.options.toolbar)==null?void 0:s.items)??["search","columnToggle","export"]];return((r=this.options.columnVisibility)==null?void 0:r.enabled)===!1&&(e=e.filter(l=>l!=="columnToggle")),((n=this.options.exporting)==null?void 0:n.enabled)===!1&&(e=e.filter(l=>l!=="export")),((a=this.options.filtering)==null?void 0:a.enabled)!==!1&&((o=this.options.filtering)==null?void 0:o.showReset)!==!1&&!e.includes("reset")&&e.push("reset"),e}processData(){var t,i,s,r,n,a,o;const e={search:this.searchQuery,searchColumns:(t=this.options.search)==null?void 0:t.columns,caseSensitive:((i=this.options.search)==null?void 0:i.caseSensitive)??!1,filters:this.filterState,sort:this.sortState,groupBy:(s=this.options.grouping)!=null&&s.enabled?this.options.grouping.columns??[]:[],groupExpanded:this.groupExpanded,page:this.currentPage,pageSize:this.currentPageSize,paginationEnabled:((r=this.options.pagination)==null?void 0:r.enabled)!==!1,scrollTop:0,viewportHeight:0,virtualEnabled:this.isVirtualEnabled(),virtualRowHeight:((n=this.options.virtualScroll)==null?void 0:n.rowHeight)??this.theme.rowHeight,virtualOverscan:((a=this.options.virtualScroll)==null?void 0:a.overscan)??10,treeData:(o=this.options.treeData)!=null&&o.enabled?this.options.treeData:void 0};return this.processor.process(this.dataSource.getData(),this.columns,e)}isVirtualEnabled(){var t,i;if((t=this.options.virtualScroll)!=null&&t.enabled)return!0;const e=((i=this.options.virtualScroll)==null?void 0:i.threshold)??1e3;return this.dataSource.getData().length>=e}computeBodyHeight(){if(this.options.height){const e=typeof this.options.height=="number"?this.options.height:void 0;if(e)return Math.max(100,e-120)}if(this.isVirtualEnabled())return 400}wireEvents(){this.events.on("header:sort",({field:e,shiftKey:t})=>{this.handleSort(e,t)}),this.events.on("filter:input",({field:e,value:t})=>{this.handleFilter(e,t)}),this.events.on("search:change",({query:e})=>{this.handleSearch(e)}),this.events.on("page:change",({page:e})=>{this.goToPage(e)}),this.events.on("page:sizechange",({pageSize:e})=>{this.setPageSize(e)}),this.events.on("row:click",e=>{var t;((t=this.options.selection)==null?void 0:t.mode)!=="none"&&this.selectionManager.handleRowClick(e.rowIndex,e.row,e.originalEvent)}),this.events.on("selection:checkbox",({rowIndex:e,row:t,checked:i})=>{this.selectionManager.handleCheckboxToggle(e,t,i)}),this.events.on("selection:toggleAll",({checked:e})=>{e&&this.currentResult?this.selectionManager.selectAll(this.currentResult.rows):this.selectionManager.deselectAll(),this.refreshRows()}),this.events.on("selection:change",()=>{var t;if(this.refreshing)return;this.refreshRows();const e=this.tableRenderer.getHeaderRenderer();e&&e.updateSelectAllCheckbox(this.selectionManager.isAllSelected(((t=this.currentResult)==null?void 0:t.totalFiltered)??0),this.selectionManager.isSomeSelected())}),this.events.on("column:visibility",({field:e,visible:t})=>{this.columnManager.toggleColumn(e,t),this.renderFull()}),this.events.on("column:resize",({field:e,width:t})=>{this.columnManager.resizeColumn(e,t)}),this.events.on("export:trigger",({format:e})=>{var t;switch(e){case"csv":this.exportCSV();break;case"json":this.exportJSON();break;case"clipboard":this.copyToClipboard();break;case"html":f.exportHTML(this.getExportData(),this.columns,(t=this.options.exporting)==null?void 0:t.filename);break}}),this.events.on("density:change",({density:e})=>{this.theme.update({density:e}),this.rootEl.setAttribute("data-density",e),this.renderFull()}),this.events.on("filters:reset",()=>{this.clearFilter(),this.renderFull()}),this.events.on("cell:dblclick",e=>{var t;(t=this.options.editing)!=null&&t.enabled&&this.cellEditor.startEditing(e.td,e.value,e.row,e.column,e.rowIndex)}),this.events.on("cell:edit:commit",({row:e,column:t,oldValue:i,newValue:s,rowIndex:r})=>{this.dataSource.updateCell(r,t,s),this.processor.invalidateAll(),this.refreshRows()}),this.events.on("group:toggle",({groupValue:e,groupColumn:t,expanded:i})=>{const s=`${t}:${e}`;this.groupExpanded.set(s,i),this.processor.invalidate("group"),this.refreshRows()}),this.events.on("virtual:scroll",({scrollTop:e,viewportHeight:t})=>{this.tableRenderer.updateVirtualPosition(e)}),this.events.on("fullscreen:toggle",()=>{var e,t;document.fullscreenElement===this.rootEl?document.exitFullscreen():(t=(e=this.rootEl).requestFullscreen)==null||t.call(e)}),this.events.on("row:contextmenu",e=>{var t,i;(t=this.options.contextMenu)!=null&&t.enabled&&((i=this.options.contextMenu.items)!=null&&i.length)&&(e.originalEvent.preventDefault(),this.showContextMenu(e))})}bindUserEvents(){const e=this.options.events;if(!e)return;const t={load:"datatable:load",dataLoad:"datatable:dataload",rowClick:"row:click",cellClick:"cell:click",rowDblClick:"row:dblclick",selectionChange:"selection:change",sortChange:"sort:change",filterChange:"filter:change",pageChange:"page:changed",columnResize:"column:resize",columnReorder:"column:reorder",cellEdit:"cell:edit:commit",cellEditCancel:"cell:edit:cancel",groupToggle:"group:toggle",searchChange:"search:changed",scroll:"scroll",destroy:"datatable:destroy"};for(const[i,s]of Object.entries(t)){const r=e[i];r&&this.events.on(s,r.bind(this))}}handleSort(e,t){var i,s;if(t&&((i=this.options.sorting)!=null&&i.multiSort)){const r=this.sortState.findIndex(n=>n.column===e);if(r>=0){const n=this.sortState[r].direction;n==="asc"?this.sortState[r].direction="desc":n==="desc"&&this.sortState.splice(r,1)}else this.sortState.push({column:e,direction:"asc"})}else{const r=this.sortState.length===1&&this.sortState[0].column===e?this.sortState[0].direction:null;r===null?this.sortState=[{column:e,direction:"asc"}]:r==="asc"?this.sortState=[{column:e,direction:"desc"}]:this.sortState=[]}this.columnManager.setSortState(this.sortState),this.processor.invalidate("sort"),this.currentPage=1,this.refreshRows(),this.events.emit("sort:change",{column:e,direction:((s=this.sortState.find(r=>r.column===e))==null?void 0:s.direction)??null,multiSort:[...this.sortState]})}handleFilter(e,t){t==null||t===""?delete this.filterState[e]:this.filterState[e]=t,this.columnManager.setFilterValue(e,t),this.selectionManager.clearOnFilter(),this.processor.invalidate("filter"),this.currentPage=1,this.refreshRows(),this.toolbarRenderer.setResetVisible(Object.keys(this.filterState).length>0),this.events.emit("filter:change",{column:e,value:t,allFilters:{...this.filterState}})}handleSearch(e){this.searchQuery=e,this.selectionManager.clearOnFilter(),this.processor.invalidate("search"),this.currentPage=1,this.refreshRows(),this.events.emit("search:changed",{query:e})}refreshRows(){var t,i,s;if(this.refreshing)return;this.refreshing=!0;const e=this.processData();this.currentResult=e,this.tableRenderer.updateRows(e,this.columns,{selectionMode:((t=this.options.selection)==null?void 0:t.mode)??"none",selectionCheckbox:((i=this.options.selection)==null?void 0:i.checkbox)===!0,grouping:this.options.grouping,masterDetail:this.options.masterDetail,treeData:this.options.treeData,selectedIndices:new Set(this.selectionManager.getSelectedIndices()),noDataText:this.resolvedLang.noData,api:this.tableApi,host:this}),((s=this.options.pagination)==null?void 0:s.enabled)!==!1&&!this.isVirtualEnabled()&&this.paginationRenderer.update(this.getPageInfo(),this.options.pagination,this.rootEl),this.refreshing=!1}getExportData(){var t,i,s;return((i=(t=this.options.exporting)==null?void 0:t.csv)==null?void 0:i.onlyVisible)??!0?((s=this.currentResult)==null?void 0:s.rows.filter(r=>r._type==="data").map(r=>r._data))??[]:this.dataSource.getData()}setupResponsive(){this.options.responsive!==!1&&(this.lastResponsiveWidth=this.rootEl.clientWidth,this.resizeObserver=new ResizeObserver(I(()=>{if(this.destroyed)return;const e=this.rootEl.clientWidth;Math.abs(e-this.lastResponsiveWidth)<2||(this.lastResponsiveWidth=e,this.columnManager.applyResponsiveHiding(e),this.renderFull())},250)),this.resizeObserver.observe(this.container))}showContextMenu(e){const t=this.options.contextMenu.items,i=document.createElement("div");i.className="katucharts-dt-context-menu",i.style.left=`${e.originalEvent.clientX}px`,i.style.top=`${e.originalEvent.clientY}px`;for(const r of t){if(r.separator){const o=document.createElement("hr");o.className="katucharts-dt-context-menu-sep",i.appendChild(o);continue}if(r.visible&&!r.visible(e.row,e.column))continue;const n=document.createElement("div"),a=r.disabled?r.disabled(e.row,e.column):!1;n.className="katucharts-dt-context-menu-item",a&&n.classList.add("is-disabled"),n.textContent=r.label,a||n.addEventListener("click",()=>{r.action(e.row,e.column,e.originalEvent),L(i)}),i.appendChild(n)}document.body.appendChild(i);const s=r=>{i.contains(r.target)||(L(i),document.removeEventListener("click",s))};setTimeout(()=>document.addEventListener("click",s),0)}getInternalColumns(){return this.columns}getRawData(){return this.dataSource.getData()}toggleSort(e,t){t===void 0?this.handleSort(e,!1):this.sort(e,t?"desc":"asc")}setSort(e,t){this.sort(e,t)}clearColumnSort(e){this.sortState=this.sortState.filter(t=>t.column!==e),this.columnManager.setSortState(this.sortState),this.processor.invalidate("sort"),this.refreshRows()}getSortDirection(e){var t;return((t=this.sortState.find(i=>i.column===e))==null?void 0:t.direction)??null}getFilterValue(e){return this.filterState[e]??null}setColumnFilter(e,t){this.handleFilter(e,t)}isColumnVisible(e){var t;return((t=this.columns.find(i=>i.field===e||i.id===e))==null?void 0:t._visible)??!0}setColumnVisible(e,t){this.columnManager.toggleColumn(e,t),this.renderFull()}isRowSelected(e){return this.selectionManager.isSelected(e)}setRowSelected(e,t){t?this.selectRow(e):this.deselectRow(e)}isAllPageSelected(){var e;return this.selectionManager.isAllSelected(((e=this.currentResult)==null?void 0:e.totalFiltered)??0)}isSomePageSelected(){return this.selectionManager.isSomeSelected()}toggleAllPageSelected(e){e?this.selectAll():this.deselectAll()}setPageSizeValue(e){this.setPageSize(e)}getTableApi(){return this.tableApi}setData(e){this.dataSource.setData(e),this.initColumns(e),this.processor.invalidateAll(),this.currentPage=1,this.renderFull(),this.events.emit("datatable:dataload",{data:e})}async loadFromUrl(e,t){this.showLoading();try{const i=(t==null?void 0:t.method)??"GET",s={"Content-Type":"application/json",...(t==null?void 0:t.headers)??{}},r={method:i,headers:s};i==="POST"&&(t!=null&&t.body)&&(r.body=JSON.stringify(t.body));const n=await fetch(e,r);if(!n.ok)throw new Error(`HTTP ${n.status}`);const a=await n.json();let o,l;if(t!=null&&t.responseMapper){const d=t.responseMapper(a);o=d.data,l=d.total}else Array.isArray(a)?o=a:a.data&&Array.isArray(a.data)?(o=a.data,l=a.total??a.count??a.data.length):a.results&&Array.isArray(a.results)?(o=a.results,l=a.total??a.count??a.results.length):o=[a];l!==void 0&&(this.serverTotal=l),this.setData(o),this.hideLoading()}catch(i){this.hideLoading(),console.error("DataTable: loadFromUrl failed",i),this.events.emit("datatable:error",{error:i,url:e})}}getData(){return this.dataSource.getData()}getFilteredData(){var e;return((e=this.currentResult)==null?void 0:e.rows.filter(t=>t._type==="data").map(t=>t._data))??[]}getSelectedData(){return this.selectionManager.getSelectedData(this.dataSource.getData())}addRow(e,t){this.dataSource.addRow(e,t),this.processor.invalidateAll(),this.refreshRows()}removeRow(e){if(typeof e=="function"){const t=this.dataSource.getData();for(let i=t.length-1;i>=0;i--)e(t[i])&&this.dataSource.removeRow(i)}else this.dataSource.removeRow(e);this.processor.invalidateAll(),this.refreshRows()}updateRow(e,t){this.dataSource.updateRow(e,t),this.processor.invalidateAll(),this.refreshRows()}updateCell(e,t,i){this.dataSource.updateCell(e,t,i),this.processor.invalidateAll(),this.refreshRows()}getRow(e){return this.dataSource.getData()[e]}getRowCount(){return this.dataSource.getData().length}getFilteredRowCount(){var e;return((e=this.currentResult)==null?void 0:e.totalFiltered)??0}getColumns(){return this.columns.map(e=>({field:e.field,title:e.title,type:e.type,width:e._computedWidth,visible:e._visible,pinned:e.pinned,align:e.align}))}updateColumn(e,t){this.columnManager.updateColumn(e,t),this.renderFull()}showColumn(e){this.columnManager.showColumn(e),this.renderFull()}hideColumn(e){this.columnManager.hideColumn(e),this.renderFull()}pinColumn(e,t){this.columnManager.pinColumn(e,t),this.renderFull()}sort(e,t){if(t)this.sortState=[{column:e,direction:t}];else{this.handleSort(e,!1);return}this.columnManager.setSortState(this.sortState),this.processor.invalidate("sort"),this.currentPage=1,this.refreshRows()}clearSort(){this.sortState=[],this.columnManager.setSortState([]),this.processor.invalidate("sort"),this.refreshRows()}getSortState(){return[...this.sortState]}setFilter(e,t){this.handleFilter(e,t)}clearFilter(e){e?(delete this.filterState[e],this.columnManager.setFilterValue(e,null)):(this.filterState={},this.columnManager.clearFilters()),this.processor.invalidate("filter"),this.currentPage=1,this.refreshRows(),this.toolbarRenderer.setResetVisible(Object.keys(this.filterState).length>0)}getFilterState(){return{...this.filterState}}search(e){this.handleSearch(e),this.toolbarRenderer.getSearchRenderer().setValue(e)}clearSearch(){this.search("")}goToPage(e){const t=this.getPageInfo();this.currentPage=Math.max(1,Math.min(e,t.totalPages)),this.processor.invalidate("paginate"),this.refreshRows(),this.events.emit("page:changed",{page:this.currentPage,pageSize:this.currentPageSize,totalPages:t.totalPages})}setPageSize(e){this.currentPageSize=e,this.currentPage=1,this.processor.invalidateAll(),this.refreshRows()}getPageInfo(){var r;const e=((r=this.currentResult)==null?void 0:r.totalFiltered)??0,t=Math.max(1,Math.ceil(e/this.currentPageSize)),i=e>0?(this.currentPage-1)*this.currentPageSize+1:0,s=Math.min(this.currentPage*this.currentPageSize,e);return{page:this.currentPage,pageSize:this.currentPageSize,totalPages:t,totalRows:e,from:i,to:s}}selectRow(e){this.selectionManager.selectRow(e),this.refreshRows()}deselectRow(e){this.selectionManager.deselectRow(e),this.refreshRows()}selectAll(){this.currentResult&&(this.selectionManager.selectAll(this.currentResult.rows),this.refreshRows())}deselectAll(){this.selectionManager.deselectAll(),this.refreshRows()}getSelectedRows(){return this.selectionManager.getSelectedData(this.dataSource.getData())}getSelectedIndices(){return this.selectionManager.getSelectedIndices()}groupBy(e){this.options.grouping={...this.options.grouping,enabled:!0,columns:e},this.processor.invalidateAll(),this.renderFull()}ungroup(){this.options.grouping={...this.options.grouping,enabled:!1,columns:[]},this.groupExpanded.clear(),this.processor.invalidateAll(),this.renderFull()}expandGroup(e){for(const[t]of this.groupExpanded)t.endsWith(`:${e}`)&&this.groupExpanded.set(t,!0);this.processor.invalidate("group"),this.refreshRows()}collapseGroup(e){for(const[t]of this.groupExpanded)t.endsWith(`:${e}`)&&this.groupExpanded.set(t,!1);this.processor.invalidate("group"),this.refreshRows()}expandAll(){for(const[e]of this.groupExpanded)this.groupExpanded.set(e,!0);this.processor.invalidate("group"),this.refreshRows()}collapseAll(){for(const[e]of this.groupExpanded)this.groupExpanded.set(e,!1);this.processor.invalidate("group"),this.refreshRows()}exportCSV(e){var t,i;f.exportCSV(this.getExportData(),this.columns,{...(t=this.options.exporting)==null?void 0:t.csv,...e},(i=this.options.exporting)==null?void 0:i.filename),this.events.emit("export:csv")}exportJSON(e){var t,i;f.exportJSON(this.getExportData(),this.columns,{...(t=this.options.exporting)==null?void 0:t.json,...e},(i=this.options.exporting)==null?void 0:i.filename),this.events.emit("export:json")}copyToClipboard(){f.copyToClipboard(this.getExportData(),this.columns),this.events.emit("export:clipboard")}getCSV(){var e;return f.toCSV(this.getExportData(),this.columns,(e=this.options.exporting)==null?void 0:e.csv)}getJSON(){var e;return f.toJSON(this.getExportData(),this.columns,(e=this.options.exporting)==null?void 0:e.json)}getHTML(){return f.toHTML(this.getExportData(),this.columns)}update(e){this.options=P(this.options,e),(e.locale!==void 0||e.lang!==void 0)&&(this.resolvedLang=A({locale:this.options.locale,langOverrides:this.options.lang}),this.tableRenderer.setLang(this.resolvedLang),this.paginationRenderer.setLang(this.resolvedLang),this.toolbarRenderer.setLang(this.resolvedLang)),e.style&&this.theme.update(e.style),e.data&&(this.dataSource.setData(e.data),this.initColumns(e.data)),this.processor.invalidateAll(),this.renderFull()}setLocale(e){this.update({locale:e})}redraw(){this.processor.invalidateAll(),this.renderFull()}showLoading(e){this.tableRenderer.showLoading(e)}hideLoading(){this.tableRenderer.hideLoading()}scrollToRow(e){this.tableRenderer.scrollToRow(e)}trigger(e,t){switch(e){case"sort":t!=null&&t.column&&this.sort(t.column,t.direction);break;case"filter":t!=null&&t.column&&this.setFilter(t.column,t.value);break;case"clearFilters":this.clearFilter();break;case"search":this.search((t==null?void 0:t.query)??"");break;case"clearSearch":this.clearSearch();break;case"goToPage":t!=null&&t.page&&this.goToPage(t.page);break;case"nextPage":this.goToPage(this.currentPage+1);break;case"prevPage":this.goToPage(this.currentPage-1);break;case"firstPage":this.goToPage(1);break;case"lastPage":this.goToPage(this.getPageInfo().totalPages);break;case"setPageSize":t!=null&&t.size&&this.setPageSize(t.size);break;case"selectAll":this.selectAll();break;case"deselectAll":this.deselectAll();break;case"selectRow":(t==null?void 0:t.index)!=null&&this.selectRow(t.index);break;case"deselectRow":(t==null?void 0:t.index)!=null&&this.deselectRow(t.index);break;case"addRow":t!=null&&t.row&&this.addRow(t.row,t.index);break;case"removeRow":(t==null?void 0:t.index)!=null&&this.removeRow(t.index);break;case"updateRow":(t==null?void 0:t.index)!=null&&(t!=null&&t.data)&&this.updateRow(t.index,t.data);break;case"updateCell":(t==null?void 0:t.rowIndex)!=null&&(t!=null&&t.column)&&this.updateCell(t.rowIndex,t.column,t.value);break;case"exportCSV":this.exportCSV(t);break;case"exportJSON":this.exportJSON(t);break;case"copyToClipboard":this.copyToClipboard();break;case"showColumn":t!=null&&t.field&&this.showColumn(t.field);break;case"hideColumn":t!=null&&t.field&&this.hideColumn(t.field);break;case"pinColumn":t!=null&&t.field&&this.pinColumn(t.field,t.direction??null);break;case"groupBy":t!=null&&t.columns&&this.groupBy(t.columns);break;case"ungroup":this.ungroup();break;case"expandAll":this.expandAll();break;case"collapseAll":this.collapseAll();break;case"showLoading":this.showLoading(t==null?void 0:t.text);break;case"hideLoading":this.hideLoading();break;case"scrollToRow":(t==null?void 0:t.index)!=null&&this.scrollToRow(t.index);break;case"redraw":this.redraw();break;case"setDensity":t!=null&&t.density&&(this.theme.update({density:t.density}),this.renderFull());break;case"setData":t!=null&&t.data&&this.setData(t.data);break;case"loadFromUrl":t!=null&&t.url&&this.loadFromUrl(t.url,t);break;default:this.events.emit(`action:${e}`,t);break}return this}on(e,t){return this.events.on(e,t),this}off(e,t){return this.events.off(e,t),this}destroy(){this.destroyed=!0,this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.cellEditor.destroy(),this.selectionManager.destroy(),this.tableRenderer.destroy(),this.paginationRenderer.destroy(),this.toolbarRenderer.destroy(),this.columnManager.destroy(),this.events.emit("datatable:destroy",{}),this.events.removeAllListeners(),L(this.rootEl)}}const Te={name:"datatable",init(c){c.dataTable=(e,t)=>new F(e,t),c._DataTable=F}};x.DataTable=F,x.DataTableModule=Te,x.registerLocale=Ee,x.resolveLocale=A,Object.defineProperty(x,Symbol.toStringTag,{value:"Module"})});