@toolbox-web/grid 2.1.1 → 2.3.0

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 (90) hide show
  1. package/all.js +2 -2
  2. package/all.js.map +1 -1
  3. package/custom-elements.json +21 -2
  4. package/index.js +1 -1
  5. package/index.js.map +1 -1
  6. package/lib/core/adapter-conformance.d.ts +23 -0
  7. package/lib/core/constants.d.ts +18 -0
  8. package/lib/core/grid.d.ts +13 -15
  9. package/lib/core/internal/value-accessor.d.ts +33 -0
  10. package/lib/core/types.d.ts +186 -12
  11. package/lib/plugins/clipboard/index.js +1 -1
  12. package/lib/plugins/clipboard/index.js.map +1 -1
  13. package/lib/plugins/column-virtualization/index.js.map +1 -1
  14. package/lib/plugins/context-menu/index.js.map +1 -1
  15. package/lib/plugins/editing/index.js +1 -1
  16. package/lib/plugins/editing/index.js.map +1 -1
  17. package/lib/plugins/export/index.js +1 -1
  18. package/lib/plugins/export/index.js.map +1 -1
  19. package/lib/plugins/filtering/FilteringPlugin.d.ts +19 -1
  20. package/lib/plugins/filtering/index.js +1 -1
  21. package/lib/plugins/filtering/index.js.map +1 -1
  22. package/lib/plugins/grouping-columns/index.js.map +1 -1
  23. package/lib/plugins/grouping-rows/index.js +2 -2
  24. package/lib/plugins/grouping-rows/index.js.map +1 -1
  25. package/lib/plugins/master-detail/index.js +1 -1
  26. package/lib/plugins/master-detail/index.js.map +1 -1
  27. package/lib/plugins/multi-sort/index.js +1 -1
  28. package/lib/plugins/multi-sort/index.js.map +1 -1
  29. package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts +1 -1
  30. package/lib/plugins/pinned-columns/index.js +1 -1
  31. package/lib/plugins/pinned-columns/index.js.map +1 -1
  32. package/lib/plugins/pinned-columns/types.d.ts +7 -0
  33. package/lib/plugins/pinned-rows/index.js +1 -1
  34. package/lib/plugins/pinned-rows/index.js.map +1 -1
  35. package/lib/plugins/pivot/index.js.map +1 -1
  36. package/lib/plugins/print/index.js +1 -1
  37. package/lib/plugins/print/index.js.map +1 -1
  38. package/lib/plugins/reorder-columns/ReorderPlugin.d.ts +13 -1
  39. package/lib/plugins/reorder-columns/column-drag.d.ts +7 -1
  40. package/lib/plugins/reorder-columns/index.js +1 -1
  41. package/lib/plugins/reorder-columns/index.js.map +1 -1
  42. package/lib/plugins/reorder-columns/types.d.ts +12 -0
  43. package/lib/plugins/reorder-rows/index.js +1 -1
  44. package/lib/plugins/reorder-rows/index.js.map +1 -1
  45. package/lib/plugins/responsive/index.js.map +1 -1
  46. package/lib/plugins/selection/index.js +1 -1
  47. package/lib/plugins/selection/index.js.map +1 -1
  48. package/lib/plugins/selection/types.d.ts +8 -0
  49. package/lib/plugins/server-side/ServerSidePlugin.d.ts +4 -0
  50. package/lib/plugins/server-side/index.js +1 -1
  51. package/lib/plugins/server-side/index.js.map +1 -1
  52. package/lib/plugins/server-side/types.d.ts +48 -0
  53. package/lib/plugins/tooltip/index.js.map +1 -1
  54. package/lib/plugins/tree/index.js.map +1 -1
  55. package/lib/plugins/undo-redo/index.js.map +1 -1
  56. package/lib/plugins/visibility/VisibilityPlugin.d.ts +11 -1
  57. package/lib/plugins/visibility/index.js +1 -1
  58. package/lib/plugins/visibility/index.js.map +1 -1
  59. package/package.json +1 -1
  60. package/public.d.ts +5 -1
  61. package/umd/grid.all.umd.js +1 -1
  62. package/umd/grid.all.umd.js.map +1 -1
  63. package/umd/grid.umd.js +1 -1
  64. package/umd/grid.umd.js.map +1 -1
  65. package/umd/plugins/clipboard.umd.js +1 -1
  66. package/umd/plugins/clipboard.umd.js.map +1 -1
  67. package/umd/plugins/editing.umd.js +1 -1
  68. package/umd/plugins/editing.umd.js.map +1 -1
  69. package/umd/plugins/export.umd.js +1 -1
  70. package/umd/plugins/export.umd.js.map +1 -1
  71. package/umd/plugins/filtering.umd.js +1 -1
  72. package/umd/plugins/filtering.umd.js.map +1 -1
  73. package/umd/plugins/multi-sort.umd.js +1 -1
  74. package/umd/plugins/multi-sort.umd.js.map +1 -1
  75. package/umd/plugins/pinned-columns.umd.js +1 -1
  76. package/umd/plugins/pinned-columns.umd.js.map +1 -1
  77. package/umd/plugins/pinned-rows.umd.js +1 -1
  78. package/umd/plugins/pinned-rows.umd.js.map +1 -1
  79. package/umd/plugins/print.umd.js +1 -1
  80. package/umd/plugins/print.umd.js.map +1 -1
  81. package/umd/plugins/reorder-columns.umd.js +1 -1
  82. package/umd/plugins/reorder-columns.umd.js.map +1 -1
  83. package/umd/plugins/reorder-rows.umd.js +1 -1
  84. package/umd/plugins/reorder-rows.umd.js.map +1 -1
  85. package/umd/plugins/selection.umd.js +1 -1
  86. package/umd/plugins/selection.umd.js.map +1 -1
  87. package/umd/plugins/server-side.umd.js +1 -1
  88. package/umd/plugins/server-side.umd.js.map +1 -1
  89. package/umd/plugins/visibility.umd.js +1 -1
  90. package/umd/plugins/visibility.umd.js.map +1 -1
@@ -1,2 +1,2 @@
1
- function e(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}function t(t,r,n,s){return`${e(n,s)} ${t}: ${r}\n\n → More info: ${function(e){return`https://toolboxjs.com/grid/errors#${e.toLowerCase()}`}(t)}`}const r="__otorp__|__retteGenifed__|__retteSenifed__|rotcurtsnoc|wodniw|sihTlabolg|labolg|ssecorp|noitcnuF|tropmi|lave|tcelfeR|yxorP|rorrE|stnemugra|tnemucod|noitacol|eikooc|egarotSlacol|egarotSnoisses|BDdexedni|hctef|tseuqeRpttHLMX|tekcoSbeW|rekroW|rekroWderahS|rekroWecivreS|renepo|tnerap|pot|semarf|fles".split("|").map(e=>e.split("").reverse().join(""));new RegExp(`__(proto|defineGetter|defineSetter)|${r.slice(3).join("|")}|this\\b`);const n=new Set("script|iframe|object|embed|form|input|button|textarea|select|link|meta|base|style|template|slot|portal|frame|frameset|applet|noscript|noembed|plaintext|xmp|listing".split("|")),s=/^on\w+$/i,o=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),i=/^\s*(javascript|vbscript|data|blob):/i;function l(e){if(!e||"string"!=typeof e)return"";if(-1===e.indexOf("<"))return e;const t=document.createElement("template");return t.innerHTML=e,function(e){const t=[],r=e.querySelectorAll("*");for(const l of r){const e=l.tagName.toLowerCase();if(n.has(e)){t.push(l);continue}if("svg"===e||"http://www.w3.org/2000/svg"===l.namespaceURI){if(Array.from(l.attributes).some(e=>s.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(l);continue}}const r=[];for(const t of l.attributes){const e=t.name.toLowerCase();s.test(e)?r.push(t.name):(o.has(e)&&i.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&r.push(t.name)}r.forEach(e=>l.removeAttribute(e))}t.forEach(e=>e.remove())}(t.content),t.innerHTML}const a='<svg viewBox="0 0 16 16" width="12" height="12"><path fill="currentColor" d="M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>',c={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:a,filterActive:a,print:"🖨️"};class d{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#e;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}attach(e){this.#e?.abort(),this.#e=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#e?.abort(),this.#e=void 0}getPlugin(e){return this.grid?.getPlugin(e)}emit(e,t){this.grid?.dispatchEvent?.(new CustomEvent(e,{detail:t,bubbles:!0}))}emitCancelable(e,t){const r=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(r),r.defaultPrevented}on(e,t){this.grid?._pluginManager?.subscribe(this,e,t)}off(e){this.grid?._pluginManager?.unsubscribe(this,e)}emitPluginEvent(e,t){this.grid?._pluginManager?.emitPluginEvent(e,t)}broadcast(e,t){this.emitPluginEvent(e,t),this.emit(e,t)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid?._hostElement}get disconnectSignal(){return this.#e?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...c,...e}}get isAnimationEnabled(){const e=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===e||"off"===e)return!1;if(!0===e||"on"===e)return!0;const t=this.gridElement;if(t){return"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),r=parseInt(t,10);if(!isNaN(r))return r}return 200}setIcon(e,t,r){e.dataset.icon=t.replace(/([A-Z])/g,"-$1").toLowerCase(),"collapse"===t?e.dataset.expanded="":"expand"===t&&delete e.dataset.expanded;const n=this.#t(t,r);void 0!==n?"string"==typeof n?e.innerHTML=l(n):n instanceof HTMLElement&&(e.innerHTML="",e.appendChild(n.cloneNode(!0))):e.innerHTML=""}#t(e,t){return void 0!==t?t:this.grid?.gridConfig?.icons?.[e]}updateSortIndicator(e,t){e.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const r=document.createElement("span");r.setAttribute("part","sort-indicator"),r.className="sort-indicator",t?(e.setAttribute("aria-sort","asc"===t?"ascending":"descending"),e.setAttribute("data-sort",t),this.setIcon(r,"asc"===t?"sortAsc":"sortDesc")):(e.setAttribute("aria-sort","none"),e.removeAttribute("data-sort"),this.setIcon(r,"sortNone"));const n=e.querySelector(".tbw-filter-btn")??e.querySelector(".resize-handle");return n?e.insertBefore(r,n):e.appendChild(r),r}warn(r,n){void 0!==n?console.warn(t(r,n,this.gridElement.id,this.name)):console.warn(`${e(this.gridElement.id,this.name)} ${r}`)}throwDiagnostic(e,r){throw new Error(t(e,r,this.gridElement.id,this.name))}}function u(e,t){return t?.length?[...t].sort((e,t)=>e-t).map(t=>e[t]).filter(e=>null!=e):e}function f(e,t=!0){if(null==e)return"";if(e instanceof Date)return e.toISOString();if("object"==typeof e)return JSON.stringify(e);const r=String(e);return t&&(r.includes(",")||r.includes('"')||r.includes("\n")||r.includes("\r"))?`"${r.replace(/"/g,'""')}"`:r}function h(e,t){const r=URL.createObjectURL(e),n=document.createElement("a");n.href=r,n.download=t,n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(r)}function g(e){return JSON.stringify(m(e))}function m(e){if(null==e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(m);const t={};for(const r of Object.keys(e).sort())t[r]=m(e[r]);return t}class p{#r=/* @__PURE__ */new Map;#n=0;register(e){const t=g(e),r=this.#r.get(t);if(r)return r.id;this.#n++;const n=`s${this.#n}`;return this.#r.set(t,{id:n,style:e}),n}getStyleId(e){return this.#r.get(g(e))?.id}get size(){return this.#r.size}toXml(){if(0===this.#r.size)return"";let e="\n<Styles>";for(const{id:t,style:r}of this.#r.values())e+=b(t,r);return e+="\n</Styles>",e}}function b(e,t){let r=`\n<Style ss:ID="${e}">`;if(t.font&&(r+="<Font",t.font.name&&(r+=` ss:FontName="${t.font.name}"`),t.font.size&&(r+=` ss:Size="${t.font.size}"`),t.font.bold&&(r+=' ss:Bold="1"'),t.font.italic&&(r+=' ss:Italic="1"'),t.font.color&&(r+=` ss:Color="${t.font.color}"`),r+="/>"),t.fill){const e=t.fill.pattern??"Solid";r+=`<Interior ss:Color="${t.fill.color}" ss:Pattern="${e}"/>`}return t.numberFormat&&(r+=`<NumberFormat ss:Format="${t.numberFormat}"/>`),t.alignment&&(r+="<Alignment",t.alignment.horizontal&&(r+=` ss:Horizontal="${t.alignment.horizontal}"`),t.alignment.vertical&&(r+=` ss:Vertical="${t.alignment.vertical}"`),t.alignment.wrapText&&(r+=' ss:WrapText="1"'),r+="/>"),t.borders&&(r+="<Borders>",t.borders.top&&(r+=y("Top",t.borders.top)),t.borders.bottom&&(r+=y("Bottom",t.borders.bottom)),t.borders.left&&(r+=y("Left",t.borders.left)),t.borders.right&&(r+=y("Right",t.borders.right)),r+="</Borders>"),r+="</Style>",r}function y(e,t){let r=`<Border ss:Position="${e}" ss:LineStyle="Continuous" ss:Weight="${function(e){switch(e){case"Thin":return 1;case"Medium":return 2;case"Thick":return 3}}(t.style)}"`;return t.color&&(r+=` ss:Color="${t.color}"`),r+="/>",r}function S(e,t,r,n,s){if(t.cellStyle){const o=t.cellStyle(r,n,s);if(o)return e.register(o)}const o=t.columnStyles?.[n];return o?e.getStyleId(o):t.defaultStyle?e.getStyleId(t.defaultStyle):void 0}function x(e,t){const r=Math.min(t.length,50);let n=(e.header??e.field).length;for(let s=0;s<r;s++){const r=t[s][e.field],o=null==r?0:String(r).length;o>n&&(n=o)}return n+2}function v(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function w(e,t,r){const n=r.excelStyles,s=n?function(e){const t=new p;if(e.headerStyle&&t.register(e.headerStyle),e.defaultStyle&&t.register(e.defaultStyle),e.columnStyles)for(const r of Object.values(e.columnStyles))t.register(r);return t}(n):void 0;let o='<?xml version="1.0" encoding="UTF-8"?>\n<?mso-application progid="Excel.Sheet"?>\n<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"\n xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">';if(s){if(n.cellStyle)for(const r of e)for(const e of t){const t=r[e.field],o=n.cellStyle(t,e.field,r);o&&s.register(o)}o+=s.toXml()}o+='\n<Worksheet ss:Name="Sheet1">\n<Table>',n&&(o+=function(e,t,r){const n=r.columnWidths,s=r.autoFitColumns;if(!n&&!s)return"";let o="";for(const i of e){let e=n?.[i.field];null==e&&s&&(e=x(i,t)),o+=null!=e?`\n<Column ss:Width="${7*e}"/>`:"\n<Column/>"}return o}(t,e,n));const i=n?.headerStyle&&s?s.getStyleId(n.headerStyle):void 0;if(!1!==r.includeHeaders){o+="\n<Row>";for(const e of t){const t=e.header||e.field;o+=`<Cell${i?` ss:StyleID="${i}"`:""}><Data ss:Type="String">${v(r.processHeader?r.processHeader(t,e.field):t)}</Data></Cell>`}o+="</Row>"}for(const l of e){o+="\n<Row>";for(const e of t){let t=l[e.field];r.processCell&&(t=r.processCell(t,e.field,l));let i="String",a="";null==t?a="":"number"!=typeof t||isNaN(t)?t instanceof Date?(i="DateTime",a=t.toISOString()):a=v(String(t)):(i="Number",a=String(t));const c=s&&n?S(s,n,t,e.field,l):void 0;o+=`<Cell${c?` ss:StyleID="${c}"`:""}><Data ss:Type="${i}">${a}</Data></Cell>`}o+="</Row>"}return o+="\n</Table>\n</Worksheet>\n</Workbook>",o}class C extends d{static manifest={queries:[{type:"export:csv",description:"Triggers a CSV export"}]};name="export";get defaultConfig(){return{fileName:"export",includeHeaders:!0,onlyVisible:!0,onlySelected:!1}}isExportingFlag=!1;lastExportInfo=null;handleQuery(e){if("export:csv"===e.type)return this.exportCsv(),!0}performExport(e,t){const r=this.config,n={format:e,fileName:t?.fileName??r.fileName??"export",includeHeaders:t?.includeHeaders??r.includeHeaders,processCell:t?.processCell,processHeader:t?.processHeader,columns:t?.columns,rowIndices:t?.rowIndices,excelStyles:t?.excelStyles,fileExtension:t?.fileExtension},s=function(e,t,r=!0){let n=e;if(r&&(n=n.filter(e=>!e.hidden&&!e.field.startsWith("__")&&!0!==e.meta?.utility)),t?.length){const e=new Set(t);n=n.filter(t=>e.has(t.field))}return n}(this.columns,t?.columns,r.onlyVisible);let o;if(t?.rowIndices)o=u(this.rows,t.rowIndices);else if(r.onlySelected){const e=this.getSelectionState();o=e?.selected?.size?u(this.rows,[...e.selected]):[...this.rows]}else o=[...this.rows];this.isExportingFlag=!0;let i=n.fileName;try{switch(e){case"csv":{const e=function(e,t,r,n={}){const s=n.delimiter??",",o=n.newline??"\n",i=[],l=n.bom?"\ufeff":"";if(!1!==r.includeHeaders){const e=t.map(e=>{const t=e.header||e.field;return f(r.processHeader?r.processHeader(t,e.field):t)});i.push(e.join(s))}for(const a of e){const e=t.map(e=>{let t=a[e.field];return r.processCell&&(t=r.processCell(t,e.field,a)),f(t)});i.push(e.join(s))}return l+i.join(o)}(o,s,n,{bom:!0});i=i.endsWith(".csv")?i:`${i}.csv`,function(e,t){h(new Blob([e],{type:"text/csv;charset=utf-8;"}),t)}(e,i);break}case"excel":{const e=w(o,s,n),t=n.fileExtension??".xls",r=t.startsWith(".")?t:`.${t}`;i=i.endsWith(r)?i:`${i}${r}`,function(e,t){h(new Blob([e],{type:"application/vnd.ms-excel;charset=utf-8;"}),t)}(e,i);break}case"json":{const e=o.map(e=>{const t={};for(const r of s){let s=e[r.field];n.processCell&&(s=n.processCell(s,r.field,e)),t[r.field]=s}return t}),t=JSON.stringify(e,null,2);i=i.endsWith(".json")?i:`${i}.json`;h(new Blob([t],{type:"application/json"}),i);break}}this.lastExportInfo={format:e,timestamp:/* @__PURE__ */new Date},this.emit("export-complete",{format:e,fileName:i,rowCount:o.length,columnCount:s.length})}finally{this.isExportingFlag=!1}}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}exportCsv(e){this.performExport("csv",e)}exportExcel(e){this.performExport("excel",e)}exportJson(e){this.performExport("json",e)}isExporting(){return this.isExportingFlag}getLastExport(){return this.lastExportInfo}}export{C as ExportPlugin};
1
+ const e=/* @__PURE__ */new WeakMap;function t(t,r,n=-1){if(!r.valueAccessor)return t?.[r.field];if("object"!=typeof t||null===t)return r.valueAccessor({row:t,column:r,rowIndex:n});const o=r.field;let s=e.get(t);if(s){if(s.has(o))return s.get(o)}else s=/* @__PURE__ */new Map,e.set(t,s);const i=r.valueAccessor({row:t,column:r,rowIndex:n});return s.set(o,i),i}function r(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}function n(e,t,n,o){return`${r(n,o)} ${e}: ${t}\n\n → More info: ${function(e){return`https://toolboxjs.com/grid/errors#${e.toLowerCase()}`}(e)}`}const o="__otorp__|__retteGenifed__|__retteSenifed__|rotcurtsnoc|wodniw|sihTlabolg|labolg|ssecorp|noitcnuF|tropmi|lave|tcelfeR|yxorP|rorrE|stnemugra|tnemucod|noitacol|eikooc|egarotSlacol|egarotSnoisses|BDdexedni|hctef|tseuqeRpttHLMX|tekcoSbeW|rekroW|rekroWderahS|rekroWecivreS|renepo|tnerap|pot|semarf|fles".split("|").map(e=>e.split("").reverse().join(""));new RegExp(`__(proto|defineGetter|defineSetter)|${o.slice(3).join("|")}|this\\b`);const s=new Set("script|iframe|object|embed|form|input|button|textarea|select|link|meta|base|style|template|slot|portal|frame|frameset|applet|noscript|noembed|plaintext|xmp|listing".split("|")),i=/^on\w+$/i,l=new Set("href|src|action|formaction|data|srcdoc|xlink:href|poster|srcset".split("|")),a=/^\s*(javascript|vbscript|data|blob):/i;function c(e){if(!e||"string"!=typeof e)return"";if(-1===e.indexOf("<"))return e;const t=document.createElement("template");return t.innerHTML=e,function(e){const t=[],r=e.querySelectorAll("*");for(const n of r){const e=n.tagName.toLowerCase();if(s.has(e)){t.push(n);continue}if("svg"===e||"http://www.w3.org/2000/svg"===n.namespaceURI){if(Array.from(n.attributes).some(e=>i.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(n);continue}}const r=[];for(const t of n.attributes){const e=t.name.toLowerCase();i.test(e)?r.push(t.name):(l.has(e)&&a.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&r.push(t.name)}r.forEach(e=>n.removeAttribute(e))}t.forEach(e=>e.remove())}(t.content),t.innerHTML}const u='<svg viewBox="0 0 16 16" width="12" height="12"><path fill="currentColor" d="M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>',d={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:u,filterActive:u,print:"🖨️"};class f{static dependencies;static manifest;aliases;version="undefined"!=typeof __GRID_VERSION__?__GRID_VERSION__:"dev";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#e;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}attach(e){this.#e?.abort(),this.#e=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#e?.abort(),this.#e=void 0}getPlugin(e){return this.grid?.getPlugin(e)}emit(e,t){this.grid?.dispatchEvent?.(new CustomEvent(e,{detail:t,bubbles:!0}))}emitCancelable(e,t){const r=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(r),r.defaultPrevented}on(e,t){this.grid?._pluginManager?.subscribe(this,e,t)}off(e){this.grid?._pluginManager?.unsubscribe(this,e)}emitPluginEvent(e,t){this.grid?._pluginManager?.emitPluginEvent(e,t)}broadcast(e,t){this.emitPluginEvent(e,t),this.emit(e,t)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid?._hostElement}get disconnectSignal(){return this.#e?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...d,...e}}get isAnimationEnabled(){const e=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===e||"off"===e)return!1;if(!0===e||"on"===e)return!0;const t=this.gridElement;if(t){return"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),r=parseInt(t,10);if(!isNaN(r))return r}return 200}setIcon(e,t,r){e.dataset.icon=t.replace(/([A-Z])/g,"-$1").toLowerCase(),"collapse"===t?e.dataset.expanded="":"expand"===t&&delete e.dataset.expanded;const n=this.#t(t,r);void 0!==n?"string"==typeof n?e.innerHTML=c(n):n instanceof HTMLElement&&(e.innerHTML="",e.appendChild(n.cloneNode(!0))):e.innerHTML=""}#t(e,t){return void 0!==t?t:this.grid?.gridConfig?.icons?.[e]}updateSortIndicator(e,t){e.querySelector('[part~="sort-indicator"], .sort-indicator')?.remove();const r=document.createElement("span");r.setAttribute("part","sort-indicator"),r.className="sort-indicator",t?(e.setAttribute("aria-sort","asc"===t?"ascending":"descending"),e.setAttribute("data-sort",t),this.setIcon(r,"asc"===t?"sortAsc":"sortDesc")):(e.setAttribute("aria-sort","none"),e.removeAttribute("data-sort"),this.setIcon(r,"sortNone"));const n=e.querySelector(".tbw-filter-btn")??e.querySelector(".resize-handle");return n?e.insertBefore(r,n):e.appendChild(r),r}warn(e,t){void 0!==t?console.warn(n(e,t,this.gridElement.id,this.name)):console.warn(`${r(this.gridElement.id,this.name)} ${e}`)}throwDiagnostic(e,t){throw new Error(n(e,t,this.gridElement.id,this.name))}}function g(e,t){return t?.length?[...t].sort((e,t)=>e-t).map(t=>e[t]).filter(e=>null!=e):e}function h(e,t=!0){if(null==e)return"";if(e instanceof Date)return e.toISOString();if("object"==typeof e)return JSON.stringify(e);const r=String(e);return t&&(r.includes(",")||r.includes('"')||r.includes("\n")||r.includes("\r"))?`"${r.replace(/"/g,'""')}"`:r}function m(e,t){const r=URL.createObjectURL(e),n=document.createElement("a");n.href=r,n.download=t,n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(r)}function p(e){return JSON.stringify(b(e))}function b(e){if(null==e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(b);const t={};for(const r of Object.keys(e).sort())t[r]=b(e[r]);return t}class y{#r=/* @__PURE__ */new Map;#n=0;register(e){const t=p(e),r=this.#r.get(t);if(r)return r.id;this.#n++;const n=`s${this.#n}`;return this.#r.set(t,{id:n,style:e}),n}getStyleId(e){return this.#r.get(p(e))?.id}get size(){return this.#r.size}toXml(){if(0===this.#r.size)return"";let e="\n<Styles>";for(const{id:t,style:r}of this.#r.values())e+=S(t,r);return e+="\n</Styles>",e}}function S(e,t){let r=`\n<Style ss:ID="${e}">`;if(t.font&&(r+="<Font",t.font.name&&(r+=` ss:FontName="${t.font.name}"`),t.font.size&&(r+=` ss:Size="${t.font.size}"`),t.font.bold&&(r+=' ss:Bold="1"'),t.font.italic&&(r+=' ss:Italic="1"'),t.font.color&&(r+=` ss:Color="${t.font.color}"`),r+="/>"),t.fill){const e=t.fill.pattern??"Solid";r+=`<Interior ss:Color="${t.fill.color}" ss:Pattern="${e}"/>`}return t.numberFormat&&(r+=`<NumberFormat ss:Format="${t.numberFormat}"/>`),t.alignment&&(r+="<Alignment",t.alignment.horizontal&&(r+=` ss:Horizontal="${t.alignment.horizontal}"`),t.alignment.vertical&&(r+=` ss:Vertical="${t.alignment.vertical}"`),t.alignment.wrapText&&(r+=' ss:WrapText="1"'),r+="/>"),t.borders&&(r+="<Borders>",t.borders.top&&(r+=w("Top",t.borders.top)),t.borders.bottom&&(r+=w("Bottom",t.borders.bottom)),t.borders.left&&(r+=w("Left",t.borders.left)),t.borders.right&&(r+=w("Right",t.borders.right)),r+="</Borders>"),r+="</Style>",r}function w(e,t){let r=`<Border ss:Position="${e}" ss:LineStyle="Continuous" ss:Weight="${function(e){switch(e){case"Thin":return 1;case"Medium":return 2;case"Thick":return 3}}(t.style)}"`;return t.color&&(r+=` ss:Color="${t.color}"`),r+="/>",r}function v(e,t,r,n,o){if(t.cellStyle){const s=t.cellStyle(r,n,o);if(s)return e.register(s)}const s=t.columnStyles?.[n];return s?e.getStyleId(s):t.defaultStyle?e.getStyleId(t.defaultStyle):void 0}function x(e,t){const r=Math.min(t.length,50);let n=(e.header??e.field).length;for(let o=0;o<r;o++){const r=t[o][e.field],s=null==r?0:String(r).length;s>n&&(n=s)}return n+2}function C(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function E(e,r,n){const o=n.excelStyles,s=o?function(e){const t=new y;if(e.headerStyle&&t.register(e.headerStyle),e.defaultStyle&&t.register(e.defaultStyle),e.columnStyles)for(const r of Object.values(e.columnStyles))t.register(r);return t}(o):void 0;let i='<?xml version="1.0" encoding="UTF-8"?>\n<?mso-application progid="Excel.Sheet"?>\n<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"\n xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">';if(s){if(o.cellStyle)for(const n of e)for(const e of r){const r=t(n,e),i=o.cellStyle(r,e.field,n);i&&s.register(i)}i+=s.toXml()}i+='\n<Worksheet ss:Name="Sheet1">\n<Table>',o&&(i+=function(e,t,r){const n=r.columnWidths,o=r.autoFitColumns;if(!n&&!o)return"";let s="";for(const i of e){let e=n?.[i.field];null==e&&o&&(e=x(i,t)),s+=null!=e?`\n<Column ss:Width="${7*e}"/>`:"\n<Column/>"}return s}(r,e,o));const l=o?.headerStyle&&s?s.getStyleId(o.headerStyle):void 0;if(!1!==n.includeHeaders){i+="\n<Row>";for(const e of r){const t=e.header||e.field;i+=`<Cell${l?` ss:StyleID="${l}"`:""}><Data ss:Type="String">${C(n.processHeader?n.processHeader(t,e.field):t)}</Data></Cell>`}i+="</Row>"}for(const a of e){i+="\n<Row>";for(const e of r){let r=t(a,e);n.processCell&&(r=n.processCell(r,e.field,a));let l="String",c="";null==r?c="":"number"!=typeof r||isNaN(r)?r instanceof Date?(l="DateTime",c=r.toISOString()):c=C(String(r)):(l="Number",c=String(r));const u=s&&o?v(s,o,r,e.field,a):void 0;i+=`<Cell${u?` ss:StyleID="${u}"`:""}><Data ss:Type="${l}">${c}</Data></Cell>`}i+="</Row>"}return i+="\n</Table>\n</Worksheet>\n</Workbook>",i}class $ extends f{static manifest={queries:[{type:"export:csv",description:"Triggers a CSV export"}]};name="export";get defaultConfig(){return{fileName:"export",includeHeaders:!0,onlyVisible:!0,onlySelected:!1}}isExportingFlag=!1;lastExportInfo=null;handleQuery(e){if("export:csv"===e.type)return this.exportCsv(),!0}performExport(e,r){const n=this.config,o={format:e,fileName:r?.fileName??n.fileName??"export",includeHeaders:r?.includeHeaders??n.includeHeaders,processCell:r?.processCell,processHeader:r?.processHeader,columns:r?.columns,rowIndices:r?.rowIndices,excelStyles:r?.excelStyles,fileExtension:r?.fileExtension},s=function(e,t,r=!0){let n=e;if(r&&(n=n.filter(e=>!e.hidden&&!e.field.startsWith("__")&&!0!==e.utility)),t?.length){const e=new Set(t);n=n.filter(t=>e.has(t.field))}return n}(this.columns,r?.columns,n.onlyVisible);let i;if(r?.rowIndices)i=g(this.rows,r.rowIndices);else if(n.onlySelected){const e=this.getSelectionState();i=e?.selected?.size?g(this.rows,[...e.selected]):[...this.rows]}else i=[...this.rows];this.isExportingFlag=!0;let l=o.fileName;try{switch(e){case"csv":{const e=function(e,r,n,o={}){const s=o.delimiter??",",i=o.newline??"\n",l=[],a=o.bom?"\ufeff":"";if(!1!==n.includeHeaders){const e=r.map(e=>{const t=e.header||e.field;return h(n.processHeader?n.processHeader(t,e.field):t)});l.push(e.join(s))}for(const c of e){const e=r.map(e=>{let r=t(c,e);return n.processCell&&(r=n.processCell(r,e.field,c)),h(r)});l.push(e.join(s))}return a+l.join(i)}(i,s,o,{bom:!0});l=l.endsWith(".csv")?l:`${l}.csv`,function(e,t){m(new Blob([e],{type:"text/csv;charset=utf-8;"}),t)}(e,l);break}case"excel":{const e=E(i,s,o),t=o.fileExtension??".xls",r=t.startsWith(".")?t:`.${t}`;l=l.endsWith(r)?l:`${l}${r}`,function(e,t){m(new Blob([e],{type:"application/vnd.ms-excel;charset=utf-8;"}),t)}(e,l);break}case"json":{const e=i.map(e=>{const r={};for(const n of s){let s=t(e,n);o.processCell&&(s=o.processCell(s,n.field,e)),r[n.field]=s}return r}),r=JSON.stringify(e,null,2);l=l.endsWith(".json")?l:`${l}.json`;m(new Blob([r],{type:"application/json"}),l);break}}this.lastExportInfo={format:e,timestamp:/* @__PURE__ */new Date},this.emit("export-complete",{format:e,fileName:l,rowCount:i.length,columnCount:s.length})}finally{this.isExportingFlag=!1}}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}exportCsv(e){this.performExport("csv",e)}exportExcel(e){this.performExport("excel",e)}exportJson(e){this.performExport("json",e)}isExporting(){return this.isExportingFlag}getLastExport(){return this.lastExportInfo}}export{$ as ExportPlugin};
2
2
  //# sourceMappingURL=index.js.map