@toolbox-web/grid 2.9.0 → 2.11.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.
- package/README.md +15 -15
- package/all.js +2 -2
- package/all.js.map +1 -1
- package/custom-elements.json +10 -0
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/lib/core/grid.d.ts +13 -2
- package/lib/core/internal/shell-controller.d.ts +9 -2
- package/lib/core/internal/shell.d.ts +10 -0
- package/lib/core/plugin/index.d.ts +1 -0
- package/lib/core/plugin/types.d.ts +65 -1
- package/lib/core/types.d.ts +58 -3
- package/lib/plugins/clipboard/index.js.map +1 -1
- package/lib/plugins/column-virtualization/index.js.map +1 -1
- package/lib/plugins/context-menu/index.js.map +1 -1
- package/lib/plugins/editing/index.js.map +1 -1
- package/lib/plugins/export/index.js +1 -1
- package/lib/plugins/export/index.js.map +1 -1
- package/lib/plugins/export/types.d.ts +35 -5
- package/lib/plugins/filtering/index.js.map +1 -1
- package/lib/plugins/grouping-columns/index.js +1 -1
- package/lib/plugins/grouping-columns/index.js.map +1 -1
- package/lib/plugins/grouping-rows/index.js.map +1 -1
- package/lib/plugins/master-detail/index.js.map +1 -1
- package/lib/plugins/multi-sort/index.js.map +1 -1
- package/lib/plugins/pinned-columns/index.js.map +1 -1
- package/lib/plugins/pinned-rows/index.js.map +1 -1
- package/lib/plugins/pivot/index.js.map +1 -1
- package/lib/plugins/print/index.js.map +1 -1
- package/lib/plugins/reorder-columns/index.js.map +1 -1
- package/lib/plugins/reorder-rows/index.js.map +1 -1
- package/lib/plugins/responsive/index.js.map +1 -1
- package/lib/plugins/row-drag-drop/index.js.map +1 -1
- package/lib/plugins/selection/index.js.map +1 -1
- package/lib/plugins/server-side/index.js.map +1 -1
- package/lib/plugins/sticky-rows/index.js.map +1 -1
- package/lib/plugins/tooltip/index.js.map +1 -1
- package/lib/plugins/tree/index.js.map +1 -1
- package/lib/plugins/undo-redo/index.js.map +1 -1
- package/lib/plugins/visibility/index.js +1 -1
- package/lib/plugins/visibility/index.js.map +1 -1
- package/package.json +1 -1
- package/public.d.ts +1 -1
- package/umd/grid.all.umd.js +1 -1
- package/umd/grid.all.umd.js.map +1 -1
- package/umd/grid.umd.js +1 -1
- package/umd/grid.umd.js.map +1 -1
- package/umd/plugins/export.umd.js +1 -1
- package/umd/plugins/export.umd.js.map +1 -1
- package/umd/plugins/grouping-columns.umd.js +1 -1
- package/umd/plugins/grouping-columns.umd.js.map +1 -1
- package/umd/plugins/visibility.umd.js +1 -1
- package/umd/plugins/visibility.umd.js.map +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
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=t,s=r.field;let i=e.get(o);if(i){const e=i.get(s);if(void 0!==e)return e.v}else i=/* @__PURE__ */new Map,e.set(o,i);const l=r.valueAccessor({row:t,column:r,rowIndex:n});return i.set(s,{v:l}),l}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={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",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}mergeConfigsFrom(e){if(0===e.length)return;const t={...this.userConfig},r={};for(const n of Object.keys(t))r[n]=this;for(const o of e){const e=o.userConfig;for(const[s,i]of Object.entries(e)){if(void 0===i)continue;if(!(s in t)){t[s]=i,r[s]=o;continue}if(t[s]===i)continue;const e=r[s]?.constructor.name??this.constructor.name,l=o.constructor.name,a=n("TBW025",`Cannot merge plugin configs for "${this.name}": conflicting value for "${s}" supplied by both ${e} and ${l}. Pass the option on a single instance, or remove the duplicate.`,void 0,this.name);throw new Error(a)}}Object.assign(this.userConfig,t)}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{...u,...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 d(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}function m(e,t){return t?.length?[...t].sort((e,t)=>e-t).map(t=>e[t]).filter(e=>null!=e):e}function p(e,t=!0){return"string"==typeof e?t&&(e.includes(",")||e.includes('"')||e.includes("\n")||e.includes("\r"))?`"${e.replace(/"/g,'""')}"`:e:"number"==typeof e?String(e):"boolean"==typeof e?e?"true":"false":null==e?"":e instanceof Date?e.toISOString():"object"==typeof e?JSON.stringify(e):String(e)}function g(e,r,n,o={}){const s=o.delimiter??",",i=o.newline??"\n",l=o.quoteStrings??!0,a=[],c=o.bom?"\ufeff":"";if(!1!==n.includeHeaders){const e=r.map(e=>{const t=e.header||e.field;return p(n.processHeader?n.processHeader(t,e.field):t,l)});a.push(e.join(s))}for(const u of e){const e=r.map(e=>{let r=t(u,e);return n.processCell&&(r=n.processCell(r,e.field,u)),p(r,l)});a.push(e.join(s))}return c+a.join(i)}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 b(e){return JSON.stringify(y(e))}function y(e){if(null==e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(y);const t={};for(const r of Object.keys(e).sort())t[r]=y(e[r]);return t}class v{#r=/* @__PURE__ */new Map;#n=0;register(e){const t=b(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(b(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+=x("Top",t.borders.top)),t.borders.bottom&&(r+=x("Bottom",t.borders.bottom)),t.borders.left&&(r+=x("Left",t.borders.left)),t.borders.right&&(r+=x("Right",t.borders.right)),r+="</Borders>"),r+="</Style>",r}function x(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 w(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 C(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 E(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function $(e,r,n){const o=n.excelStyles,s=o?function(e){const t=new v;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=C(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">${E(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=E(String(r)):(l="Number",c=String(r));const u=s&&o?w(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 D 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}resolveExportData(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,mode:t?.mode??"raw",columns:t?.columns,rowIndices:t?.rowIndices,excelStyles:t?.excelStyles,fileExtension:t?.fileExtension},o=d(this.columns,t?.columns,r.onlyVisible);let s;if(t?.rowIndices)s=m(this.rows,t.rowIndices);else if(r.onlySelected){const e=this.getSelectionState();s=e?.selected?.size?m(this.rows,[...e.selected]):[...this.rows]}else s=[...this.rows];return{columns:o,rows:s,fullParams:n}}resolveCellOutput(e,t,r,n,o){let s=e;if("formatted"===n){const n=this.#o(t);if(n)try{const t=n(e,r);s=null==t?"":String(t)}catch{s=null==e?"":String(e)}else s="date"===t.type?function(e){if(null==e||""===e)return"";if(e instanceof Date)return isNaN(e.getTime())?"":e.toLocaleDateString();if("number"==typeof e||"string"==typeof e){const t=new Date(e);return isNaN(t.getTime())?"":t.toLocaleDateString()}return""}(e):"boolean"===t.type?!!e:e}return o&&(s=o(s,t.field,r)),s}performExport(e,t){const{columns:r,rows:n,fullParams:o}=this.resolveExportData(e,t);this.isExportingFlag=!0;let s=o.fileName??"export";const i=this.#s(r);try{switch(e){case"csv":{const e=g(this.#i(n,r,o),i,{...o,processCell:void 0},{bom:!0});s=s.endsWith(".csv")?s:`${s}.csv`,function(e,t){h(new Blob([e],{type:"text/csv;charset=utf-8;"}),t)}(e,s);break}case"excel":{const e=$(this.#i(n,r,o),i,{...o,processCell:void 0}),t=o.fileExtension??".xls",l=t.startsWith(".")?t:`.${t}`;s=s.endsWith(l)?s:`${s}${l}`,function(e,t){h(new Blob([e],{type:"application/vnd.ms-excel;charset=utf-8;"}),t)}(e,s);break}case"json":{const e=this.#i(n,r,o),t=JSON.stringify(e,null,2);s=s.endsWith(".json")?s:`${s}.json`;h(new Blob([t],{type:"application/json"}),s);break}}this.lastExportInfo={format:e,timestamp:/* @__PURE__ */new Date},this.emit("export-complete",{format:e,fileName:s,rowCount:n.length,columnCount:r.length})}finally{this.isExportingFlag=!1}}#i(e,r,n){const o=n.mode??"raw";return e.map(e=>{const s={};for(const i of r){const r=t(e,i);s[i.field]=this.resolveCellOutput(r,i,e,o,n.processCell)}return s})}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}export(e){const{columns:t,rows:r,fullParams:n}=this.resolveExportData("json",e);return this.#i(r,t,n)}getResolvedColumns(e){return d(this.columns,e?.columns,this.config.onlyVisible)}formatCsv(e,t,r){const{columns:n,fullParams:o}=this.resolveExportData("csv",t);return g(e,this.#s(n),o,r)}formatExcel(e,t){const{columns:r,fullParams:n}=this.resolveExportData("excel",t);return $(e,this.#s(r),n)}#s(e){return e.map(e=>e.valueAccessor?{...e,valueAccessor:void 0}:e)}#o(e){if(e.format)return e.format;if(!e.type)return;const t=this.grid,r=t?.__frameworkAdapter;if(!r?.getTypeDefault)return;const n=r.getTypeDefault(e.type,t?._hostElement);return n?.format}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{D as ExportPlugin};
|
|
1
|
+
const e=/* @__PURE__ */new WeakMap;function t(t,r,s=-1){if(!r.valueAccessor)return t?.[r.field];if("object"!=typeof t||null===t)return r.valueAccessor({row:t,column:r,rowIndex:s});const o=t,n=r.field;let i=e.get(o);if(i){const e=i.get(n);if(void 0!==e)return e.v}else i=/* @__PURE__ */new Map,e.set(o,i);const l=r.valueAccessor({row:t,column:r,rowIndex:s});return i.set(n,{v:l}),l}function r(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}function s(e,t,s,o){return`${r(s,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 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("|")),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 s of r){const e=s.tagName.toLowerCase();if(n.has(e)){t.push(s);continue}if("svg"===e||"http://www.w3.org/2000/svg"===s.namespaceURI){if(Array.from(s.attributes).some(e=>i.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(s);continue}}const r=[];for(const t of s.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=>s.removeAttribute(e))}t.forEach(e=>e.remove())}(t.content),t.innerHTML}const u={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:"",filterActive:"",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}mergeConfigsFrom(e){if(0===e.length)return;const t={...this.userConfig},r={};for(const s of Object.keys(t))r[s]=this;for(const o of e){const e=o.userConfig;for(const[n,i]of Object.entries(e)){if(void 0===i)continue;if(!(n in t)){t[n]=i,r[n]=o;continue}if(t[n]===i)continue;const e=r[n]?.constructor.name??this.constructor.name,l=o.constructor.name,a=s("TBW025",`Cannot merge plugin configs for "${this.name}": conflicting value for "${n}" supplied by both ${e} and ${l}. Pass the option on a single instance, or remove the duplicate.`,void 0,this.name);throw new Error(a)}}Object.assign(this.userConfig,t)}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{...u,...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 s=this.#t(t,r);void 0!==s?"string"==typeof s?e.innerHTML=c(s):s instanceof HTMLElement&&(e.innerHTML="",e.appendChild(s.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 s=e.querySelector(".tbw-filter-btn")??e.querySelector(".resize-handle");return s?e.insertBefore(r,s):e.appendChild(r),r}warn(e,t){void 0!==t?console.warn(s(e,t,this.gridElement.id,this.name)):console.warn(`${r(this.gridElement.id,this.name)} ${e}`)}throwDiagnostic(e,t){throw new Error(s(e,t,this.gridElement.id,this.name))}}function f(e,t,r=!0){let s=e;if(r&&(s=s.filter(e=>!e.hidden&&!e.field.startsWith("__")&&!0!==e.utility)),t?.length){const e=new Set(t);s=s.filter(t=>e.has(t.field))}return s}function h(e,t){return t?.length?[...t].sort((e,t)=>e-t).map(t=>e[t]).filter(e=>null!=e):e}function p(e,t=!0){return"string"==typeof e?t&&(e.includes(",")||e.includes('"')||e.includes("\n")||e.includes("\r"))?`"${e.replace(/"/g,'""')}"`:e:"number"==typeof e?String(e):"boolean"==typeof e?e?"true":"false":null==e?"":e instanceof Date?e.toISOString():"object"==typeof e?JSON.stringify(e):String(e)}function g(e,r,s,o={}){const n=o.delimiter??",",i=o.newline??"\n",l=o.quoteStrings??!0,a=[],c=o.bom?"\ufeff":"";if(!1!==s.includeHeaders){const e=r.map(e=>{const t=e.header||e.field;return p(s.processHeader?s.processHeader(t,e.field):t,l)});a.push(e.join(n))}for(const u of e){const e=r.map(e=>{let r=t(u,e);return s.processCell&&(r=s.processCell(r,e.field,u)),p(r,l)});a.push(e.join(n))}return c+a.join(i)}function m(e,t){const r=URL.createObjectURL(e),s=document.createElement("a");s.href=r,s.download=t,s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(r)}function b(e){return JSON.stringify(y(e))}function y(e){if(null==e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(y);const t={};for(const r of Object.keys(e).sort())t[r]=y(e[r]);return t}class w{#r=/* @__PURE__ */new Map;#s=0;register(e){const t=b(e),r=this.#r.get(t);if(r)return r.id;this.#s++;const s=`s${this.#s}`;return this.#r.set(t,{id:s,style:e}),s}getStyleId(e){return this.#r.get(b(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+=v("Top",t.borders.top)),t.borders.bottom&&(r+=v("Bottom",t.borders.bottom)),t.borders.left&&(r+=v("Left",t.borders.left)),t.borders.right&&(r+=v("Right",t.borders.right)),r+="</Borders>"),r+="</Style>",r}function v(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 x(e,t,r,s,o){if(t.cellStyle){const n=t.cellStyle(r,s,o);if(n)return e.register(n)}const n=t.columnStyles?.[s];return n?e.getStyleId(n):t.defaultStyle?e.getStyleId(t.defaultStyle):void 0}function C(e,t){const r=Math.min(t.length,50);let s=(e.header??e.field).length;for(let o=0;o<r;o++){const r=t[o][e.field],n=null==r?0:String(r).length;n>s&&(s=n)}return s+2}function E(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function R(e,r,s){const o=s.excelStyles,n=o?function(e){const t=new w;if(e.headerStyle&&t.register(e.headerStyle),e.groupHeaderStyle&&t.register(e.groupHeaderStyle),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(n){if(o.cellStyle)for(const s of e)for(const e of r){const r=t(s,e),i=o.cellStyle(r,e.field,s);i&&n.register(i)}i+=n.toXml()}i+='\n<Worksheet ss:Name="Sheet1">\n<Table>',o&&(i+=function(e,t,r){const s=r.columnWidths,o=r.autoFitColumns;if(!s&&!o)return"";let n="";for(const i of e){let e=s?.[i.field];null==e&&o&&(e=C(i,t)),n+=null!=e?`\n<Column ss:Width="${7*e}"/>`:"\n<Column/>"}return n}(r,e,o));const l=o?.headerStyle&&n?n.getStyleId(o.headerStyle):void 0,a=o?.groupHeaderStyle&&n?n.getStyleId(o.groupHeaderStyle):l;if(!1!==s.includeHeaders&&s.headerRows&&s.headerRows.length>0){const e=a?` ss:StyleID="${a}"`:"";for(const t of s.headerRows){i+="\n<Row>";for(const r of t.cells){const t=Math.max(1,0|r.span);i+=`<Cell${e}${t>1?` ss:MergeAcross="${t-1}"`:""}><Data ss:Type="String">${E(r.label??"")}</Data></Cell>`}i+="</Row>"}}if(!1!==s.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">${E(s.processHeader?s.processHeader(t,e.field):t)}</Data></Cell>`}i+="</Row>"}for(const c of e){i+="\n<Row>";for(const e of r){let r=t(c,e);s.processCell&&(r=s.processCell(r,e.field,c));let l="String",a="";null==r?a="":"number"!=typeof r||isNaN(r)?r instanceof Date?(l="DateTime",a=r.toISOString()):a=E(String(r)):(l="Number",a=String(r));const u=n&&o?x(n,o,r,e.field,c):void 0;i+=`<Cell${u?` ss:StyleID="${u}"`:""}><Data ss:Type="${l}">${a}</Data></Cell>`}i+="</Row>"}return i+="\n</Table>\n</Worksheet>\n</Workbook>",i}class $ 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}resolveExportData(e,t){const r=this.config,s={format:e,fileName:t?.fileName??r.fileName??"export",includeHeaders:t?.includeHeaders??r.includeHeaders,processCell:t?.processCell,processHeader:t?.processHeader,processHeaderRow:t?.processHeaderRow,mode:t?.mode??"raw",columns:t?.columns,rowIndices:t?.rowIndices,excelStyles:t?.excelStyles,fileExtension:t?.fileExtension,headerRows:t?.headerRows},o=f(this.columns,t?.columns,r.onlyVisible);let n;if(t?.rowIndices)n=h(this.rows,t.rowIndices);else if(r.onlySelected){const e=this.getSelectionState();n=e?.selected?.size?h(this.rows,[...e.selected]):[...this.rows]}else n=[...this.rows];if(!1===s.includeHeaders)s.headerRows=void 0;else{const e=s.headerRows??this.#o(o);s.headerRows=this.#n(e,o,s.processHeaderRow)}return{columns:o,rows:n,fullParams:s}}#o(e){if(0===e.length)return[];const t=this.grid;if(!t?.query)return[];const r=t.query("collectHeaderRows",{columns:e});if(!r||0===r.length)return[];const s=[];for(const o of r)if(o)if(Array.isArray(o))for(const e of o)e&&Array.isArray(e.cells)&&e.cells.length>0&&s.push(e);else Array.isArray(o.cells)&&o.cells.length>0&&s.push(o);return s}#n(e,t,r){if(!e||0===e.length)return;const s=t.length,o=[];for(let n=0;n<e.length;n++){const t=e[n];if(!t||!Array.isArray(t.cells)||0===t.cells.length)continue;const i=[];let l=!1,a=0,c=!1;for(const e of t.cells){const t=Math.max(1,0|e.span);if(a+t>s){c=!0;break}a+=t;const o=r?r(e,n):e;null===o?i.push({label:"",span:t}):(i.push({...o,span:t}),""!==(o.label??"")&&(l=!0))}c||(a<s&&i.push({label:"",span:s-a}),l&&o.push({cells:i}))}return o.length>0?o:void 0}resolveCellOutput(e,t,r,s,o){let n=e;if("formatted"===s){const s=this.#i(t);if(s)try{const t=s(e,r);n=null==t?"":String(t)}catch{n=null==e?"":String(e)}else n="date"===t.type?function(e){if(null==e||""===e)return"";if(e instanceof Date)return isNaN(e.getTime())?"":e.toLocaleDateString();if("number"==typeof e||"string"==typeof e){const t=new Date(e);return isNaN(t.getTime())?"":t.toLocaleDateString()}return""}(e):"boolean"===t.type?!!e:e}return o&&(n=o(n,t.field,r)),n}performExport(e,t){const{columns:r,rows:s,fullParams:o}=this.resolveExportData(e,t);this.isExportingFlag=!0;let n=o.fileName??"export";const i=this.#l(r);try{switch(e){case"csv":{const e=g(this.#a(s,r,o),i,{...o,processCell:void 0},{bom:!0});n=n.endsWith(".csv")?n:`${n}.csv`,function(e,t){m(new Blob([e],{type:"text/csv;charset=utf-8;"}),t)}(e,n);break}case"excel":{const e=R(this.#a(s,r,o),i,{...o,processCell:void 0}),t=o.fileExtension??".xls",l=t.startsWith(".")?t:`.${t}`;n=n.endsWith(l)?n:`${n}${l}`,function(e,t){m(new Blob([e],{type:"application/vnd.ms-excel;charset=utf-8;"}),t)}(e,n);break}case"json":{const e=this.#a(s,r,o),t=o.headerRows&&o.headerRows.length>0?{headerRows:o.headerRows,rows:e}:e,i=JSON.stringify(t,null,2);n=n.endsWith(".json")?n:`${n}.json`;m(new Blob([i],{type:"application/json"}),n);break}}this.lastExportInfo={format:e,timestamp:/* @__PURE__ */new Date},this.emit("export-complete",{format:e,fileName:n,rowCount:s.length,columnCount:r.length})}finally{this.isExportingFlag=!1}}#a(e,r,s){const o=s.mode??"raw";return e.map(e=>{const n={};for(const i of r){const r=t(e,i);n[i.field]=this.resolveCellOutput(r,i,e,o,s.processCell)}return n})}getSelectionState(){try{return this.grid?.getPluginState?.("selection")??null}catch{return null}}export(e){const{columns:t,rows:r,fullParams:s}=this.resolveExportData("json",e);return this.#a(r,t,s)}getResolvedColumns(e){return f(this.columns,e?.columns,this.config.onlyVisible)}formatCsv(e,t,r){const{columns:s,fullParams:o}=this.resolveExportData("csv",t);return g(e,this.#l(s),o,r)}formatExcel(e,t){const{columns:r,fullParams:s}=this.resolveExportData("excel",t);return R(e,this.#l(r),s)}#l(e){return e.map(e=>e.valueAccessor?{...e,valueAccessor:void 0}:e)}#i(e){if(e.format)return e.format;if(!e.type)return;const t=this.grid,r=t?.__frameworkAdapter;if(!r?.getTypeDefault)return;const s=r.getTypeDefault(e.type,t?._hostElement);return s?.format}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
|