@svgrid/enterprise 3.1.26 → 3.1.28

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 (33) hide show
  1. package/dist/cdn/svgrid-enterprise.svelte-external.js +20195 -19732
  2. package/dist/designer/assets/{GridFooter-DKMfZpL4.js → GridFooter-EyLg77jG.js} +1 -1
  3. package/dist/designer/assets/{GridMenus-C8WqB-To.js → GridMenus-BAgfpDd-.js} +2 -2
  4. package/dist/designer/assets/SvGrid.helpers-DHkH3mHW.js +1 -0
  5. package/dist/designer/assets/{SvGridCellEditor-CC9UMdVq.js → SvGridCellEditor-BHxH4b5h.js} +1 -1
  6. package/dist/designer/assets/column-types-Bl5R-97G.js +1 -0
  7. package/dist/designer/assets/{index-PEFkd-5C.js → index-DPk7cZrl.js} +317 -317
  8. package/dist/designer/assets/src-sFRH_up7.js +60 -0
  9. package/dist/designer/index.html +8 -7
  10. package/dist/export-conditional.d.ts +2 -0
  11. package/dist/export-conditional.js +2 -0
  12. package/dist/export-pdf.d.ts +142 -7
  13. package/dist/export-pdf.js +368 -44
  14. package/dist/export.d.ts +22 -4
  15. package/dist/export.js +150 -53
  16. package/dist/import.js +4 -3
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/node/studio.js +2 -2
  20. package/dist/pdf-worker.d.ts +92 -0
  21. package/dist/pdf-worker.js +147 -0
  22. package/dist/sheet/ods-document.js +3 -1
  23. package/dist/sheet/open-file.js +4 -2
  24. package/dist/sheet/xlsx-document.d.ts +2 -2
  25. package/dist/sheet/xlsx-document.js +4 -3
  26. package/dist/version.d.ts +2 -2
  27. package/dist/version.js +2 -2
  28. package/dist/wc/sv-sheet-element.js +4768 -4712
  29. package/dist/xlsx-limits.d.ts +34 -0
  30. package/dist/xlsx-limits.js +68 -0
  31. package/package.json +7 -3
  32. package/dist/designer/assets/SvGrid.helpers-BF2QRcNt.js +0 -1
  33. package/dist/designer/assets/src-DC5nN4Q7.js +0 -58
@@ -0,0 +1,60 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./jszip.min-CX2fPs3O.js","./rolldown-runtime-Dd_uD5pT.js","./pdfmake-BpIYFHoG.js","./vfs_fonts-BV-Ul9v2.js","./src-D23PPsK1.js","./chart-export-Dqq_eHRq.js","./csv-injection-C4a0uulO.js"])))=>i.map(i=>d[i]);
2
+ import{i as e,n as t}from"./rolldown-runtime-Dd_uD5pT.js";import{i as n,r,t as i}from"./conditional-formatting-MDWbF8_Y.js";import{a,c as o,d as s,i as c,l,n as u,o as d,s as f,t as p,u as m}from"./export-format-NYxEY-0Y.js";import{n as h,t as g}from"./column-types-Bl5R-97G.js";import{t as _}from"./preload-helper-HclGiUj8.js";function v(e,t,n,r){return e.id??e.field??`${t??`col`}_${n}_${r}`}function y(e,t,n){if(e===`count`)return n.length;if(e===`first`)return n.length?n[0].getCellValueByColumnId(t):void 0;if(e===`countDistinct`){let e=new Set;for(let r of n)e.add(String(r.getCellValueByColumnId(t)??``));return e.size}if(typeof e==`function`){let r=[];for(let e of n){let n=Number(e.getCellValueByColumnId(t));Number.isFinite(n)&&r.push(n)}return e(r,n.map(e=>e.original))}let r=0,i=0,a=1/0,o=-1/0;for(let e of n){let n=Number(e.getCellValueByColumnId(t));Number.isFinite(n)&&(r++,i+=n,a=Math.min(a,n),o=Math.max(o,n))}if(r)switch(e){case`sum`:return i;case`avg`:return i/r;case`min`:return a;case`max`:return o;case`extent`:return`${a} – ${o}`;default:return}}function b(e){let t=e,n=new Set;return{get state(){return t},setState(e){t=e(t),n.forEach(e=>e())},subscribe(e){return n.add(e),()=>n.delete(e)}}}var x={key:`rowSortingFeature`},S={key:`columnFilteringFeature`},ee={key:`columnGroupingFeature`};function te(e){return e}var C={auto:(e,t)=>re(e,t),number:(e,t)=>H(T(e),T(t)),date:(e,t)=>H(ne(e),ne(t))};function w(e){return e==null||e===``}function T(e){if(w(e))return-1/0;let t=Number(e);return Number.isNaN(t)?-1/0:t}function ne(e){if(w(e))return-1/0;let t=new Date(e).getTime();return Number.isNaN(t)?-1/0:t}function re(e,t){let n=w(e),r=w(t);if(n||r)return n===r?0:n?-1:1;let i=typeof e==`number`,a=typeof t==`number`;return i&&a?H(T(e),T(t)):i===a?ve(String(e),String(t)):i?-1:1}var ie={includesString:(e,t)=>String(e).toLowerCase().includes(t.toLowerCase()),equals:(e,t)=>e===t},E=Symbol(`svgrid.row.ctx`),D=Symbol(`svgrid.row.values`),O=Symbol(`svgrid.row.cells`),k=Symbol(`svgrid.row.filterGen`),A=Symbol(`svgrid.row.filterPos`),j=Symbol(`svgrid.row.sortDropped`),M=Symbol(`svgrid.row.sortKey`),ae=0,N=Symbol(`svgrid.lazyRows`),P=Symbol(`svgrid.lazyRows.fill`);function F(e,t){let n=Array(e),r=t=>{if(typeof t!=`string`)return-1;let n=t.charCodeAt(0);if(n<48||n>57)return-1;let r=+t;return r<e&&(r|0)===r?r:-1},i=()=>{for(let r=0;r<e;r++)n[r]===void 0&&(n[r]=t(r));return n};return new Proxy(n,{get(e,n,a){if(n===N)return e;if(n===P)return i;let o=r(n);if(o<0)return Reflect.get(e,n,a);let s=e[o];return s===void 0&&(e[o]=s=t(o)),s},has(e,t){return t===N||r(t)>=0||Reflect.has(e,t)},getOwnPropertyDescriptor(e,n){let i=r(n);if(i<0)return Reflect.getOwnPropertyDescriptor(e,n);let a=e[i];return a===void 0&&(e[i]=a=t(i)),{value:a,writable:!0,enumerable:!0,configurable:!0}}})}function I(e){let t=e[P];return t?t():e}function L(e){return e?e[N]??null:null}var R={getCanExpand(){return!1},getIsExpanded(){return!!(this[E].store.state.expanded??{})[this.id]},toggleExpanded(){let e=this.id;this[E].grid.setExpanded(t=>({...t,[e]:!t[e]}))},getIsSelected(){return!!(this[E].store.state.rowSelection??{})[this.id]},toggleSelected(){let e=this.id;this[E].grid.setRowSelection(t=>({...t,[e]:!t[e]}))},getAllCells(){return this[O]??z(this)},getCellValueByColumnId(e){let t=this[E].columnIndexById.get(e);if(t!==void 0)return this[D]||(this[D]=B(this)),this[D][t]}};function z(e){let{columns:t,columnCount:n,grid:r}=e[E],i=Array(n);for(let a=0;a<n;a++){let n=t[a],o=a,s={id:`${e.id}_${n.id}`,row:e,column:n,getValue:()=>(e[D]||(e[D]=B(e)),e[D][o]),getContext:()=>({cell:s,row:e,column:n,table:r,getValue:()=>s.getValue()})};i[a]=s}return e[O]=i,i}function B(e){let{columns:t,columnCount:n}=e[E],r=e.original,i=Array(n);for(let e=0;e<n;e++){let n=t[e].columnDef;n.fieldFn?i[e]=n.fieldFn(r):n.field?i[e]=r[n.field]:i[e]=void 0}return i}function V(){return({rows:e})=>e}function oe(){let e=null,t=0;return({table:n,rows:r})=>{let i=n.getState().columnFilters??[];if(!i.length)return e=null,r;let a=n.getAllColumns(),o=i.map(e=>({id:e.id,value:e.value,fn:e.fn?ie[e.fn]:ie.includesString})),s=e=>{for(let t=0;t<o.length;t++){let n=o[t];if(!n.fn(e.getCellValueByColumnId(n.id),n.value))return!1}return!0};if(e&&e.filters===i&&e.columns===a){if(e.input===r)return e.output;let t=de(n);if(t&&r.length===e.input.length){let n=null,i=!0;for(let a=0;a<r.length&&i;a++){let o=e.input[a],c=r[a];if(c===o)continue;if(t.get(o)!==c){i=!1;break}let l=o[k]===e.gen,u=s(c);if(l!==u){i=!1;break}if(!u)continue;n??=e.output.slice();let d=o[A];n[d]=c,c[k]=e.gen,c[A]=d}if(i){let t=n??e.output;return e={...e,input:r,output:t},t}}}let c=++t,l=[];for(let e=0;e<r.length;e++){let t=r[e];s(t)&&(t[k]=c,t[A]=l.length,l.push(t))}return e={input:r,output:l,filters:i,columns:a,gen:c},l}}function se(){return({table:e,rows:t})=>{let n=e.getState().grouping??[];if(!n.length)return t;let r=e.getAllColumns();function i(t,a,o,s,c){if(a>=n.length)return t.map(e=>({...e,depth:o}));let l=n[a];if(!l)return t;let u=new Map;for(let e of t){let t=e.getCellValueByColumnId(l),n=String(t??``),r=u.get(n);r?(r.rows.push(e),!r.mixed&&r.raw!==t&&(r.mixed=!0)):u.set(n,{rows:[e],raw:t,mixed:!1})}let d=[],f=0;return u.forEach((t,u)=>{let p=t.rows,m=`${s}_${l}_${u}`,h=t.mixed?c:new Map(c).set(l,t.raw),g=i(p,a+1,o+1,m,h),_=a+1>=n.length?g.length:g.reduce((e,t)=>e+(t.leafCount??0),0),v=e=>{if(e===l)return u;if(c.has(e))return c.get(e);let t,n=!1;for(let r of p){let i=r.getCellValueByColumnId(e);if(!n)t=i,n=!0;else if(i!==t)return}return t},b={};r.forEach(e=>{let t=e.columnDef.field;if(!t)return;let n=e.columnDef.aggregate;b[t]=n?y(n,e.id,p):v(e.id)});let x={id:m,index:f++,original:b,depth:o,subRows:g,leafCount:_,getCanExpand:()=>!0,getIsExpanded:()=>!!(e.getState().expanded??{})[m],toggleExpanded:()=>{e.setExpanded(e=>({...e,[m]:!e[m]}))},getIsSelected:()=>!!(e.getState().rowSelection??{})[m],toggleSelected:()=>{e.setRowSelection(e=>({...e,[m]:!e[m]}))},getAllCells:()=>[],getCellValueByColumnId:e=>{let t=r.find(t=>t.id===e)?.columnDef.field;return t&&t in b?b[t]:v(e)}};d.push(x)}),d}return i(t,0,0,`group`,new Map)}}function ce(e){let{parentField:t,idField:n=`id`}=e;return({table:e,rows:r})=>{if(!r.length)return r;let i=e=>e.original?.[n],a=e=>e.original?.[t],o=new Set;for(let e of r)o.add(i(e));let s=new Map,c=[];for(let e of r){let t=a(e);if(t==null||t===i(e)||!o.has(t)){c.push(e);continue}let n=s.get(t)??[];n.push(e),s.set(t,n)}let l=new Set,u=(t,n)=>{let r=i(t),a=t.id;if(l.has(r))return{...t,depth:n,subRows:[],getCanExpand:()=>!1};l.add(r);let o=(s.get(r)??[]).map(e=>u(e,n+1));return{...t,depth:n,subRows:o,leafCount:o.reduce((e,t)=>e+1+(t.leafCount??0),0),__treeRow:!0,getCanExpand:()=>o.length>0,getIsExpanded:()=>!!(e.getState().expanded??{})[a],toggleExpanded:()=>{e.setExpanded(e=>({...e,[a]:!e[a]}))}}};return c.map(e=>u(e,0))}}function le(){return({table:e,rows:t})=>{let n=e.getState().expanded??{},r=!1;for(let e in n)if(n[e]){r=!0;break}if(!r)return t;let i=[],a=e=>{if(i.push(e),e.subRows?.length&&n[e.id])for(let t of e.subRows)a(t)};for(let e of t)a(e);return i}}var ue=new WeakMap;function de(e){return ue.get(e)??null}function fe(e=C){let t=null,n=Symbol(`svgrid.sort.missing-key`);function r(t,r,i){let a=[];for(let o of r){let r=i.find(e=>e.id===o.id);if(!r)continue;let s=g(r.columnDef),c=r.columnDef.sortComparator,l=c?(e,t)=>c(e,t,o.desc):s===`number`?e.number:h(s)?e.date:e.auto,u=r.id,d=t.length,f=Array(d),p,m,_,v,y=r.columnDef.sortValue;if(typeof y==`function`){m=e=>T(y(e.getCellValueByColumnId(u)));for(let e=0;e<d;e++)f[e]=m(t[e]);p=H}else if(l===C.number){m=e=>T(e.getCellValueByColumnId(u));for(let e=0;e<d;e++)f[e]=m(t[e]);p=H}else if(l===C.date){m=e=>ne(e.getCellValueByColumnId(u));for(let e=0;e<d;e++)f[e]=m(t[e]);p=H}else if(l===C.auto&&(_=pe(t,u))===`number`){m=e=>{let t=e.getCellValueByColumnId(u);return typeof t==`number`||w(t)?T(t):n};for(let e=0;e<d;e++)f[e]=m(t[e]);p=H}else if(_===`mixed`){m=e=>e.getCellValueByColumnId(u);for(let e=0;e<d;e++)f[e]=m(t[e]);p=re}else if(l===C.auto){let e=Array(d),r=d>>1,i=null;if(d>0){let e=Math.max(1,Math.floor(d/Math.min(d,2048))),n=new Set,a=0;for(let r=0;r<d;r+=e)n.add(U(t[r].getCellValueByColumnId(u))),a++;let o=a-n.size;(e===1?n.size<=r:o*d>=a*a)&&(i=new Map)}let a=i?new Int32Array(d):null;for(let n=0;n<d;n++){let o=U(t[n].getCellValueByColumnId(u));if(e[n]=o,i){let e=i.get(o);if(e===void 0&&(e=i.size,i.set(o,e),i.size>r)){i=null;continue}a[n]=e}}if(i){let e=Array.from(i.keys()),t=e.map((e,t)=>t).sort((t,n)=>ve(e[t],e[n])),r=new Int32Array(e.length);for(let e=0;e<t.length;e++)r[t[e]]=e;for(let e=0;e<d;e++)f[e]=r[a[e]];let o=i;v=e.length,p=H,m=e=>{let t=e.getCellValueByColumnId(u);if(typeof t==`number`)return n;let i=o.get(U(t));return i===void 0?n:r[i]}}else f=e,p=ve,m=e=>{let t=e.getCellValueByColumnId(u);return typeof t==`number`?n:U(t)}}else{m=e=>e.getCellValueByColumnId(u);for(let e=0;e<d;e++)f[e]=m(t[e]);p=l}a.push({keys:f,desc:o.desc,compare:p,keyOf:m,rankCount:v})}if(!a.length)return null;let o=Array(t.length);for(let e=0;e<o.length;e++)o[e]=e;if(a.length===1){let{keys:e,compare:n,desc:r,rankCount:i}=a[0];i!==void 0&&t.length>=me?o=he(e,i,r):n===H&&t.length>=me?o=_e(e,r):n===H?o.sort(r?function(t,n){return e[n]-e[t]}:function(t,n){return e[t]-e[n]}):o.sort(r?function(t,r){return-n(e[t],e[r])}:function(t,r){return n(e[t],e[r])})}else o.sort(function(e,t){for(let n=0;n<a.length;n++){let r=a[n],i=r.compare(r.keys[e],r.keys[t]);if(i!==0)return r.desc?-i:i}return 0});let s=Array(t.length);for(let e=0;e<o.length;e++)s[e]=t[o[e]];if(a.length===1){let e=a[0].keys;for(let n=0;n<t.length;n++)t[n][M]=e[n]}else for(let e=0;e<t.length;e++){let n=Array(a.length);for(let t=0;t<a.length;t++)n[t]=a[t].keys[e];t[e][M]=n}return{sorted:s,clauses:a.map(({desc:e,compare:t,keyOf:n})=>({desc:e,compare:t,keyOf:n}))}}function i(e,r){let i=t;if(e.length!==i.input.length)return null;let a=++ae,o=[];for(let t=0;t<e.length;t++){let n=i.input[t],s=e[t];if(s!==n){if(r.get(n)!==s)return null;n[j]=a,o.push(s)}}if(!o.length)return i.output;let s=i.clauses,c=s.length===1;for(let e=0;e<o.length;e++){let t=o[e];if(c){let e=s[0].keyOf(t);if(e===n)return null;t[M]=e}else{let e=Array(s.length);for(let r=0;r<s.length;r++){let i=s[r].keyOf(t);if(i===n)return null;e[r]=i}t[M]=e}}let l=i.output,u=c?(()=>{let{compare:e,desc:t}=s[0];return(n,r)=>{let i=e(n[M],r[M]);return i===0?n.index-r.index:t?-i:i}})():(e,t)=>{let n=e[M],r=t[M];for(let e=0;e<s.length;e++){let t=s[e],i=t.compare(n[e],r[e]);if(i!==0)return t.desc?-i:i}return e.index-t.index};o.sort(u);let d=l.length,f=Array(o.length),p=0;for(let e=0;e<o.length;e++){let t=o[e],n=d;for(;p<n;){let e=p+n>>>1;u(t,l[e])<0?n=e:p=e+1}f[e]=p}let m=Array(e.length),h=0,g=0,_=f[0]??-1;for(let e=0;e<d;e++){for(;_===e;)m[h++]=o[g++],_=g<o.length?f[g]:-1;let t=l[e];t[j]!==a&&(m[h++]=t)}for(;g<o.length;)m[h++]=o[g++];return m}return function({table:e,rows:n}){let a=e.getState().sorting??[];if(!a.length)return t=null,n;let o=e.getAllColumns();if(t&&t.sorting===a&&t.columns===o){if(t.input===n)return t.output;let r=de(e);if(r){let e=i(n,r);if(e)return t={...t,input:n,output:e},e}}let s=r(n,a,o);return s?(t={input:n,output:s.sorted,sorting:a,columns:o,clauses:s.clauses},s.sorted):(t=null,n)}}function H(e,t){return e===t?0:e-t}function U(e){return w(e)?``:String(e)}function pe(e,t){let n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i].getCellValueByColumnId(t);if(!w(a)&&(typeof a==`number`?n=!0:r=!0,n&&r))return`mixed`}return n?`number`:`text`}var me=2e4;function he(e,t,n){let r=e.length,i=new Uint32Array(t+1);for(let a=0;a<r;a++)i[(n?t-1-e[a]:e[a])+1]++;for(let e=0;e<t;e++)i[e+1]+=i[e];let a=new Uint32Array(r);for(let o=0;o<r;o++)a[i[n?t-1-e[o]:e[o]]++]=o;return a}var ge=new Uint8Array(new Uint32Array([1]).buffer)[0]===1;function _e(e,t){let n=e.length,r=new Float64Array(n);for(let t=0;t<n;t++)r[t]=e[t]+0;let i=new Uint32Array(r.buffer),a=new Uint32Array(n),o=new Uint32Array(n),s=+!ge,c=1-s;for(let e=0;e<n;e++){let n=i[2*e+c],r=i[2*e+s];n&2147483648?(n=~n>>>0,r=~r>>>0):n=(n|2147483648)>>>0,t&&(n=~n>>>0,r=~r>>>0),o[e]=n,a[e]=r}let l=new Uint32Array(n);for(let e=0;e<n;e++)l[e]=e;let u=new Uint32Array(n),d=new Uint32Array(65536);for(let e=0;e<4;e++){let t=e<2?a:o,r=e%2==0?0:16;d.fill(0);for(let e=0;e<n;e++)d[t[e]>>>r&65535]++;if(d[t[l[0]]>>>r&65535]===n)continue;let i=0;for(let e=0;e<65536;e++){let t=d[e];d[e]=i,i+=t}for(let e=0;e<n;e++){let n=l[e];u[d[t[n]>>>r&65535]++]=n}let s=l;l=u,u=s}return l}function ve(e,t){return e.localeCompare(t)}function ye(e){let t=b({sorting:[],columnFilters:[],pagination:{pageIndex:0,pageSize:e.data.length||10},grouping:[],expanded:{},rowSelection:{},activeCell:{rowIndex:0,colIndex:0,cellId:null},...e.state??{}}),n=b(e),r=null,i=[],a=[],o=null,s=null,c=[],l=null,u=null,d=null,f=null,p=e._rowModels,m=null,h={store:t,optionsStore:n,get state(){return t.state},getState(){return t.state},setOptions(e){n.setState(t=>typeof e==`function`?e(t):e)},setColumnFilters(n){t.setState(e=>({...e,columnFilters:typeof n==`function`?n(e.columnFilters??[]):n})),e.onColumnFiltersChange?.(n)},setPagination(n){t.setState(e=>({...e,pagination:typeof n==`function`?n(e.pagination??{pageIndex:0,pageSize:10}):n})),e.onPaginationChange?.(n)},setGrouping(n){t.setState(e=>({...e,grouping:typeof n==`function`?n(e.grouping??[]):n})),e.onGroupingChange?.(n)},setExpanded(n){t.setState(e=>({...e,expanded:typeof n==`function`?n(e.expanded??{}):n})),e.onExpandedChange?.(n)},setRowSelection(n){t.setState(e=>({...e,rowSelection:typeof n==`function`?n(e.rowSelection??{}):n})),e.onRowSelectionChange?.(n)},setActiveCell(n){t.setState(e=>{let t=e.activeCell??{rowIndex:0,colIndex:0,cellId:null},r=typeof n==`function`?n(t):n;return{...e,activeCell:r}}),e.onActiveCellChange?.(n)},moveActiveCell(e){let t=h.getRowModel().rows,n=h.getAllColumns(),r=Math.max(t.length-1,0),i=Math.max(n.length-1,0),a=h.getState().activeCell??{rowIndex:0,colIndex:0,cellId:null},o=Math.min(Math.max(a.rowIndex+(e.rowDelta??0),0),r),s=Math.min(Math.max(a.colIndex+(e.colDelta??0),0),i),c=n[s]?.id??`col_0`;h.setActiveCell({rowIndex:o,colIndex:s,cellId:`${o}_${c}`})},getAllColumns(){if(r===e.columns&&i.length)return i;if(r&&e.columns.length===r.length&&i.length===e.columns.length&&e.columns.every((e,t)=>{let n=r[t];return e.field===n.field&&e.id===n.id&&e.header===n.header&&e.editorType===n.editorType&&e.fieldType===n.fieldType&&e.fieldProps===n.fieldProps}))return r=e.columns,e.columns.some(e=>e.columns?.length)||i.forEach((t,n)=>t.columnDef=e.columns[n]),i;r=e.columns,a=[];let n=(r,i,a)=>{let o=[];return r.forEach((r,s)=>{let c=v(r,a,i,s);if(r.columns?.length){o.push(...n(r.columns,i+1,c));return}let l={id:c,depth:i,parentId:a,columnDef:r,getCanSort:()=>!!e._features.rowSortingFeature&&l.columnDef.sortable!==!1,getCanFilter:()=>!!e._features.columnFilteringFeature&&l.columnDef.filterable!==!1,getIsSorted:()=>{let e=t.state.sorting?.find(e=>e.id===c);return e?e.desc?`desc`:`asc`:!1},getToggleSortingHandler:()=>()=>{let n=t.state.sorting??[],r=n.find(e=>e.id===c),i=r?r.desc?n.filter(e=>e.id!==c):n.map(e=>e.id===c?{...e,desc:!0}:e):[...n,{id:c,desc:!1}];t.setState(e=>({...e,sorting:i})),e.onSortingChange?.(i)}};o.push(l)}),o};return i=n(e.columns,0),i},getHeaderGroups(){return a.length||(a=[{id:`header_group_0`,headers:h.getAllColumns().map(e=>{let t={id:e.id,isPlaceholder:!1,colSpan:1,column:e,getContext:()=>({header:t,column:e,table:h})};return t})}]),a},getFooterGroups(){return h.getHeaderGroups()},getRowModel(){let n=h.getAllColumns(),r=e.data;if(o!==r||s!==n){let i=s===n&&u?L(c)??c:null,a=o;l=i&&i.length===r.length?new Map:null,o=r,s=n;let d;if(i&&u)d=u;else{let e=new Map;for(let t=0;t<n.length;t++)e.set(n[t].id,t);d={grid:h,store:t,columns:n,columnCount:n.length,columnIndexById:e},u=d}let f=e.getRowId,p=R,m=e=>{let t=r[e];return{id:f?f(t,e):String(e),index:e,original:t,depth:0,[E]:d,[D]:null,[O]:null,[k]:0,[A]:-1,[j]:0,[M]:void 0,getCanExpand:p.getCanExpand,getIsExpanded:p.getIsExpanded,toggleExpanded:p.toggleExpanded,getIsSelected:p.getIsSelected,toggleSelected:p.toggleSelected,getAllCells:p.getAllCells,getCellValueByColumnId:p.getCellValueByColumnId}};c=i?Array(r.length):F(r.length,m);for(let e=0;i&&e<r.length;e++){let t=r[e],n=i[e];if(n&&n.original===t){n[D]!==null&&(n[D]=null),n[O]!==null&&(n[O]=null),c[e]=n;continue}l&&l.size*4>=r.length&&(l=null);let o=m(e);n===void 0&&a?.[e]===t&&(i[e]=o),c[e]=o,l&&n&&l.set(n,o)}l&&l.size===0&&(l=null)}let i={sorting:t.state.sorting,columnFilters:t.state.columnFilters,pagination:t.state.pagination,grouping:t.state.grouping,expanded:t.state.expanded};if(d&&f===c&&p===e._rowModels&&m?.sorting===i.sorting&&m?.columnFilters===i.columnFilters&&m?.pagination===i.pagination&&m?.grouping===i.grouping&&m?.expanded===i.expanded)return d;let a=(i.sorting?.length??0)>0||(i.columnFilters?.length??0)>0||(i.grouping?.length??0)>0||i.expanded===!0||Object.keys(i.expanded??{}).length>0?I(c):c,g=e._rowModels??{},_=[g.coreRowModel,g.filteredRowModel,g.sortedRowModel,g.groupedRowModel,g.expandedRowModel,g.paginatedRowModel];ue.set(h,l);try{_.forEach(e=>{e&&(a=e({table:h,rows:a}))})}finally{ue.set(h,null),l=null}return p=e._rowModels,m=i,f=c,d={rows:a},d}};return h}var be=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),W=(e,t)=>e>>>t|e<<32-t;function xe(e){let t=new TextEncoder().encode(e),n=t.length*8,r=Math.ceil((t.length+9)/64)*64,i=new Uint8Array(r);i.set(t),i[t.length]=128;let a=new DataView(i.buffer);a.setUint32(r-8,Math.floor(n/4294967296)),a.setUint32(r-4,n>>>0);let o=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),s=new Uint32Array(64);for(let e=0;e<r;e+=64){for(let t=0;t<16;t++)s[t]=a.getUint32(e+t*4);for(let e=16;e<64;e++){let t=W(s[e-15],7)^W(s[e-15],18)^s[e-15]>>>3,n=W(s[e-2],17)^W(s[e-2],19)^s[e-2]>>>10;s[e]=s[e-16]+t+s[e-7]+n>>>0}let t=o[0],n=o[1],r=o[2],i=o[3],c=o[4],l=o[5],u=o[6],d=o[7];for(let e=0;e<64;e++){let a=W(c,6)^W(c,11)^W(c,25),o=c&l^~c&u,f=d+a+o+be[e]+s[e]>>>0,p=(W(t,2)^W(t,13)^W(t,22))+(t&n^t&r^n&r)>>>0;d=u,u=l,l=c,c=i+f>>>0,i=r,r=n,n=t,t=f+p>>>0}o[0]=o[0]+t>>>0,o[1]=o[1]+n>>>0,o[2]=o[2]+r>>>0,o[3]=o[3]+i>>>0,o[4]=o[4]+c>>>0,o[5]=o[5]+l>>>0,o[6]=o[6]+u>>>0,o[7]=o[7]+d>>>0}let c=``;for(let e of o)c+=e.toString(16).padStart(8,`0`);return c}function Se(e,t){return e===`suite`||t===`grid`}function Ce(e,t=new Date){return e==null||e.trim()===``?{status:`unset`,valid:!1,edition:`suite`}:xe(e.trim().toLowerCase())===`dabe98638cdc5760637bb2a741e65680a6ff0fb590d8b1018c9597650486cb10`?{status:`licensed`,valid:!0,edition:`suite`}:{status:`invalid`,valid:!1,edition:`suite`}}var we=new Set([`svgrid.com`,`www.svgrid.com`]);function Te(){let e=globalThis.location?.hostname;return typeof e==`string`&&we.has(e.toLowerCase())}var Ee=`data-svgrid-enterprise-watermark`,De=`data-svgrid-enterprise-nudged`,Oe=`https://svgrid.com/pricing/?utm_source=svgrid-enterprise&utm_medium=watermark`,ke=`www.svgrid.com`,Ae=5e3,je=700,Me=!1,Ne=null;function G(){Te()||(Le(),!(typeof document>`u`||typeof window>`u`)&&(queueMicrotask(()=>Re()),Ne||(Ne=new MutationObserver(Fe),Ne.observe(document.body,{childList:!0,subtree:!0}))))}var Pe=!1;function Fe(e){for(let t of e){let e=t.target;if(!(e.nodeType===1&&e.closest?.(`.sv-grid-root[${De}]`))){Ie();return}}}function Ie(){if(Pe)return;Pe=!0;let e=()=>{Pe=!1,Re()};typeof requestAnimationFrame==`function`?requestAnimationFrame(e):setTimeout(e,16)}function Le(){Me||(Me=!0,!(typeof console>`u`)&&console.log(`%c @svgrid/enterprise %c User is using a Commercial version which requires a license.
3
+ Contact sales@jqwidgets.com for details or visit the license page: https://svgrid.com/pricing/?utm_source=svgrid-enterprise&utm_medium=console`,`background:#4f46e5;color:#fff;padding:2px 6px;border-radius:3px;font-weight:600`,`color:inherit`))}function Re(){if(typeof document>`u`)return;let e=document.querySelectorAll(`.sv-grid-root, [role="grid"]`);if(e.length===0){Ve();return}document.querySelectorAll(`[${Ee}="fixed"]`).forEach(e=>e.remove());let t=new Set;e.forEach(e=>{let n=ze(e);n&&t.add(n)}),t.forEach(Be)}function ze(e){let t=e.closest(`.sv-grid-root`);if(t)return t;let n=e;for(;n&&/^(TABLE|THEAD|TBODY|TFOOT|TR|COLGROUP)$/.test(n.tagName);)n=n.parentElement;return n}function Be(e){if(e.hasAttribute(De))return;e.setAttribute(De,`1`),getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let t=He(`grid`);We(t,!1),e.appendChild(t),Ue(t)}function Ve(){if(typeof document>`u`||document.querySelector(`[${Ee}="fixed"]`))return;let e=He(`fixed`);We(e,!0),document.body.appendChild(e),Ue(e)}function He(e){let t=document.createElement(`a`);return t.setAttribute(Ee,e),t.href=Oe,t.target=`_blank`,t.rel=`noopener noreferrer`,t.textContent=ke,t.title=`Unlicensed @svgrid/enterprise. Contact sales@jqwidgets.com or visit www.svgrid.com.`,t}function Ue(e){if(typeof window>`u`){e.remove();return}window.setTimeout(()=>{if(typeof window>`u`){e.remove();return}e.style.opacity=`0`,window.setTimeout(()=>e.remove(),je)},Ae)}function We(e,t){Object.assign(e.style,{position:t?`fixed`:`absolute`,bottom:t?`12px`:`6px`,right:t?`12px`:`8px`,zIndex:`2147483647`,background:`rgba(15,23,42,0.85)`,color:`#fff`,padding:t?`6px 10px`:`4px 8px`,borderRadius:t?`4px`:`3px`,fontFamily:`-apple-system, "Segoe UI", Roboto, sans-serif`,fontSize:t?`11px`:`10px`,lineHeight:`1.2`,textDecoration:`none`,boxShadow:t?`0 2px 12px rgba(0,0,0,0.35)`:`0 1px 4px rgba(0,0,0,0.3)`,border:`1px solid rgba(255,255,255,0.18)`,pointerEvents:`auto`,letterSpacing:`0.02em`,opacity:`1`,transition:`opacity ${je}ms ease`})}var Ge=`data-svgrid-enterprise-upgrade`,Ke=`https://svgrid.com/pricing?ref=in-app&utm_source=svgrid-enterprise&utm_medium=upgrade-prompt`,qe=`https://svgrid.com/docs/enterprise/evaluation/?utm_source=svgrid-enterprise&utm_medium=upgrade-prompt`,Je=!1;function K(e,t){if(Je||typeof document>`u`||typeof window>`u`||Te()||document.querySelector(`[${Ge}]`))return;Je=!0;let n=Xe(e,t?.expired===!0);document.body.appendChild(n),requestAnimationFrame(()=>{n.style.opacity=`1`,n.style.transform=`translateY(0)`})}function Ye(e){e.style.opacity=`0`,e.style.transform=`translateY(8px)`,window.setTimeout(()=>e.remove(),220)}function Xe(e,t=!1){let n=document.createElement(`div`);n.setAttribute(Ge,`1`),n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-label`,t?`Your evaluation has ended`:`SvGrid Enterprise`),Object.assign(n.style,{position:`fixed`,bottom:`16px`,right:`16px`,zIndex:`2147483646`,width:`320px`,maxWidth:`calc(100vw - 32px)`,boxSizing:`border-box`,padding:`16px 16px 14px`,background:`#0f172a`,color:`#e2e8f0`,borderRadius:`12px`,border:`1px solid rgba(99,102,241,0.4)`,boxShadow:`0 12px 40px rgba(0,0,0,0.45)`,fontFamily:`-apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,fontSize:`13px`,lineHeight:`1.45`,opacity:`0`,transform:`translateY(8px)`,transition:`opacity 220ms ease, transform 220ms ease`});let r=e?`<strong style="color:#fff">${Ze(e?String(e):`This`)}</strong> is part of SvGrid Enterprise.`:`You just used a <strong style="color:#fff">SvGrid Enterprise</strong> feature.`,i=t?`EVALUATION ENDED`:`ENTERPRISE`,a=t?`Your evaluation has ended`:`SvGrid Enterprise`,o=t?`${r} Everything still works, but this notice stays until a
4
+ license key is set.`:`${r} It keeps working as it is, here and in production. A
5
+ license key removes the watermark and this notice.`;return n.innerHTML=`
6
+ <button type="button" data-act="x" aria-label="Dismiss"
7
+ style="position:absolute;top:8px;right:8px;width:24px;height:24px;display:flex;
8
+ align-items:center;justify-content:center;background:transparent;border:0;
9
+ color:#94a3b8;font-size:18px;line-height:1;cursor:pointer;border-radius:6px;">&times;</button>
10
+ <div style="display:flex;align-items:center;gap:8px;margin-bottom:8px;">
11
+ <span style="display:inline-block;background:${t?`#b45309`:`#4f46e5`};color:#fff;font-size:10px;
12
+ font-weight:700;letter-spacing:0.06em;padding:2px 7px;border-radius:999px;">${i}</span>
13
+ <span style="font-weight:700;color:#fff;">${a}</span>
14
+ </div>
15
+ <p style="margin:0 0 12px;color:#cbd5e1;">
16
+ ${o}
17
+ </p>
18
+ <div style="display:flex;gap:8px;align-items:center;">
19
+ <a data-act="plans" href="${Ke}" target="_blank" rel="noopener noreferrer"
20
+ style="flex:1;text-align:center;background:#6366f1;color:#fff;font-weight:600;
21
+ text-decoration:none;padding:8px 12px;border-radius:8px;">${t?`Buy a license`:`See plans`}</a>
22
+ <a data-act="evaluation" href="${qe}" target="_blank" rel="noopener noreferrer"
23
+ style="color:#a5b4fc;text-decoration:none;padding:8px 6px;font-weight:600;">How evaluation works</a>
24
+ </div>
25
+ <p style="margin:10px 0 0;font-size:11px;color:#64748b;">
26
+ Already licensed? Call <code style="color:#94a3b8;">setLicenseKey()</code> at startup to hide this.
27
+ </p>
28
+ `,n.querySelector(`[data-act="x"]`)?.addEventListener(`click`,()=>Ye(n)),n.querySelector(`[data-act="plans"]`)?.addEventListener(`click`,()=>Ye(n)),n.querySelector(`[data-act="evaluation"]`)?.addEventListener(`click`,()=>Ye(n)),n}function Ze(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}var Qe=null,$e=!1,et=!1,tt=new Set;function nt(e){if(et)return;et=!0;let t=e.expiresAt?` on ${e.expiresAt.toISOString().slice(0,10)}`:``;console.info(`@svgrid/enterprise: your evaluation license expired${t}. Everything still works, but the watermark and upgrade notice stay until a license key is set. Contact sales@jqwidgets.com or see https://svgrid.com/pricing/?utm_source=svgrid-enterprise&utm_medium=console`)}function rt(e){return e.status===`dev`||e.status===`eval`}var it=!1;function at(e){it||e.status!==`invalid`&&e.status!==`revoked`||Te()||(it=!0,console.warn(`@svgrid/enterprise: the license key passed to setLicenseKey() is not valid, so the watermark stays. Copy the key from your order email, or contact sales@jqwidgets.com.`))}function ot(){return Ce(Qe).valid}function st(e){let t=Ce(Qe),n=rt(t)&&t.expired===!0;t.valid&&!n||(at(t),G(),n&&nt(t),K(e,{expired:n}))}var ct={grid:`the enterprise grid`,spreadsheet:`the spreadsheet`,base:`SvGrid Base`,studio:`the Studio`};function lt(e){tt.has(e)||(tt.add(e),console.info(`@svgrid/enterprise: your Grid license does not cover ${ct[e]}. Everything still works, but the watermark and upgrade notice stay until the license is upgraded to Suite. Contact sales@jqwidgets.com or see https://svgrid.com/pricing/?utm_source=svgrid-enterprise&utm_medium=console`))}function ut(e,t){let n=Ce(Qe),r=n.valid&&Se(n.edition,e),i=rt(n)&&n.expired===!0;if(r&&!i)return;at(n);let a=n.valid&&!i&&!r;G(),a?lt(e):i&&nt(n),K(t,{expired:i})}function dt(e){let t=Ce(Qe);switch(t.status){case`unset`:G(),K(e);return;case`invalid`:case`revoked`:at(t),G(),K(e);return;case`dev`:case`eval`:if(t.expired){G(),nt(t),K(e,{expired:!0});return}$e||=(console.info(`@svgrid/enterprise: using a development / evaluation license. Not for production use.`),!0);return;case`licensed`:return}}var ft=!1;function pt(){if(ft)return;if(typeof window>`u`)throw Error(`@svgrid/enterprise: installSmartShim() requires a browser environment`);let e=window.Smart??{Utilities:{}};e.Utilities=e.Utilities??{},typeof e.Utilities.Assign!=`function`&&(e.Utilities.Assign=(t,n)=>{e.Utilities[t]=n}),(!e.Utilities.Core||typeof e.Utilities.Core.toDash!=`function`)&&(e.Utilities.Core={toDash:e=>e.replace(/[A-Z]/g,e=>`-`+e.toLowerCase())}),window.Smart=e,ft=!0}var mt=/[\x00-\x08\x0B\x0C\x0E-\x1F]/g;function ht(e){return e.replace(mt,``).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function gt(e){let t=(e,t=2)=>String(e).padStart(t,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}:${t(e.getSeconds())}.000`}async function _t(e,t,n,r={}){let i=Math.max(1,r.chunkRows??5e3),a=n.length,o=r.rawValues===!0,l=r.cellVisual,u=r.precisionSafe===!0,d=new Map,f=[`<Style ss:ID="sHeader"><Font ss:Bold="1"/><Interior ss:Color="#F2F2F2" ss:Pattern="Solid"/></Style>`],p=e=>e===`right`?`Right`:e===`center`?`Center`:`Left`,h=e=>{let t=e.align&&e.align!==`left`;if(!e.numFmt&&!e.fill&&!e.color&&!e.bold&&!t)return;let n=`${e.numFmt??``}|${e.fill??``}|${e.color??``}|${e.bold?`b`:``}|${e.align??``}`,r=d.get(n);if(r)return r;let i=`s${d.size+1}`,a=[];return t&&a.push(`<Alignment ss:Horizontal="${p(e.align)}"/>`),(e.color||e.bold)&&a.push(`<Font${e.color?` ss:Color="${e.color}"`:``}${e.bold?` ss:Bold="1"`:``}/>`),e.fill&&a.push(`<Interior ss:Color="${e.fill}" ss:Pattern="Solid"/>`),e.numFmt&&a.push(`<NumberFormat ss:Format="${ht(e.numFmt)}"/>`),f.push(`<Style ss:ID="${i}">${a.join(``)}</Style>`),d.set(n,i),i};function g(e,t,n,r){let i=e.link?.(t)||void 0,a=l?.(n,r),d=t=>h({numFmt:t,fill:a?.fill,color:a?.color,bold:a?.bold,align:e.align});if(e.exportValue){let n=e.exportValue(t),r=n==null?``:String(n);return{type:`String`,value:a?.icon?`${a.icon} ${r}`:r,styleId:d(),href:i}}let f=t[e.field];if(a?.icon){let t=o?String(f??``):c(f,e.format);return{type:`String`,value:`${a.icon} ${t}`,styleId:d(),href:i}}let p=e=>u&&Math.abs(e)>=0x38d7ea4c68000;if(o){let e=f==null?``:String(f);return typeof f==`number`&&Number.isFinite(f)&&!p(f)?{type:`Number`,value:e,styleId:d(),href:i}:{type:`String`,value:e,styleId:d(),href:i}}let g=s(f,e.format);if(g.ok){let t=m(e.format);return g.value instanceof Date?{type:`DateTime`,value:gt(g.value),styleId:d(t),href:i}:p(g.value)?{type:`String`,value:String(g.value),styleId:d(),href:i}:{type:`Number`,value:String(g.value),styleId:d(t),href:i}}return{type:`String`,value:c(f,e.format),styleId:d(),href:i}}let _=e=>`<Cell${e.styleId?` ss:StyleID="${e.styleId}"`:``}${e.href?` ss:HRef="${ht(e.href)}"`:``}><Data ss:Type="${e.type}">${ht(e.value)}</Data></Cell>`,v=r.widths?r.widths.map(e=>`<Column ss:Width="${Math.round(e*.75)}"/>`).join(``):``,y=Math.max(0,Math.floor(r.freezeColumns??0)),b=r.freezeHeader||y>0?`<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"><FreezePanes/><FrozenNoSplit/>`+(r.freezeHeader?`<SplitHorizontal>1</SplitHorizontal><TopRowBottomPane>1</TopRowBottomPane>`:``)+(y>0?`<SplitVertical>${y}</SplitVertical><LeftColumnRightPane>${y}</LeftColumnRightPane>`:``)+`<ActivePane>2</ActivePane></WorksheetOptions>`:``,x=[`<Row>${t.map(e=>`<Cell ss:StyleID="sHeader"><Data ss:Type="String">${ht(e.header??e.field)}</Data></Cell>`).join(``)}</Row>`];for(let e=0;e<a;e++){if(r.signal?.aborted)throw new DOMException(`Export aborted`,`AbortError`);let o=n[e],s=t.map((t,n)=>_(g(t,o,e,n))).join(``);x.push(`<Row>${s}</Row>`),e>0&&e%i===0&&(r.onProgress?.({phase:`serialize`,ratio:e/a,row:e,total:a}),await new Promise(e=>setTimeout(e,0)))}return r.onProgress?.({phase:`serialize`,ratio:1,row:a,total:a}),`<?xml version="1.0"?>
29
+ <?mso-application progid="Excel.Sheet"?>
30
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"><Styles>${f.join(``)}</Styles><Worksheet ss:Name="${ht(e.slice(0,31)||`Sheet1`)}"><Table>${v}${x.join(``)}</Table>`+b+`</Worksheet></Workbook>`}var vt={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&apos;`},yt=/[\x00-\x08\x0B\x0C\x0E-\x1F]/g;function q(e){return e.replace(yt,``).replace(/[&<>"']/g,e=>vt[e])}function J(e){let t=e,n=``;do n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26)-1;while(t>=0);return n}function bt(e){if(!e)return null;let t=/^#?([0-9a-f]{6})$/i.exec(e.trim());return t?`FF`+t[1].toUpperCase():null}function xt(e){return(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())-Date.UTC(1899,11,30))/864e5}function St(e){if(e instanceof Date)return e;let t=String(e).trim(),n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(t);return n?new Date(Number(n[1]),Number(n[2])-1,Number(n[3])):new Date(t)}var Ct=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
31
+ <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/></Types>`,wt=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
32
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>`;function Tt(e){return e.replace(/[\\/?*[\]:]/g,` `).trim().slice(0,31)||`Sheet1`}function Et(e){return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
33
+ <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets><sheet name="${q(Tt(e))}" sheetId="1" r:id="rId1"/></sheets></workbook>`}var Dt=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
34
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>`;function Ot(e,t){let n=new Map,r=164,i=e=>{if(!e)return 0;let t=n.get(e);if(t!=null)return t;let i=r++;return n.set(e,i),i},a=[`<font><sz val="11"/><name val="Calibri"/></font>`,`<font><b/><sz val="11"/><name val="Calibri"/></font>`],o=new Map,s=(e,t)=>{let n=bt(t);if(!e&&!n)return 0;let r=`${e?`b`:``}|${n??``}`,i=o.get(r);if(i!=null)return i;let s=a.length;return a.push(`<font>${e?`<b/>`:``}<sz val="11"/><name val="Calibri"/>${n?`<color rgb="${n}"/>`:``}</font>`),o.set(r,s),s},c=[`<fill><patternFill patternType="none"/></fill>`,`<fill><patternFill patternType="gray125"/></fill>`],l=new Map,u=e=>{let t=bt(e);if(!t)return 0;let n=l.get(t);if(n!=null)return n;let r=c.length;return c.push(`<fill><patternFill patternType="solid"><fgColor rgb="${t}"/><bgColor indexed="64"/></patternFill></fill>`),l.set(t,r),r},d=[`<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>`,`<xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1"/>`],f=new Map,p=(e,t,n,r)=>{let i=`${e}|${t}|${n}|${r??``}`,a=f.get(i);if(a!=null)return a;let o=d.length,s=r&&r!==`left`?`<alignment horizontal="${r}"/>`:``;return d.push(`<xf numFmtId="${e}" fontId="${t}" fillId="${n}" borderId="0" xfId="0"${e?` applyNumberFormat="1"`:``}${t?` applyFont="1"`:``}${n?` applyFill="1"`:``}${s?` applyAlignment="1"`:``}>${s}</xf>`),f.set(i,o),o},m=e=>{let t=i(e.numFmt),n=s(e.bold===!0,e.color),r=u(e.fill);return t===0&&n===0&&r===0&&(!e.align||e.align===`left`)?0:p(t,n,r,e.align)};for(let e of t)for(let t of e)m(t);return{styleIndexOf:m,build:()=>`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
35
+ <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">`+(n.size>0?`<numFmts count="${n.size}">${[...n.entries()].map(([e,t])=>`<numFmt numFmtId="${t}" formatCode="${q(e)}"/>`).join(``)}</numFmts>`:``)+`<fonts count="${a.length}">${a.join(``)}</fonts><fills count="${c.length}">${c.join(``)}</fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="${d.length}">${d.join(``)}</cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles></styleSheet>`}}function kt(e){let{header:t,rows:n}=e,r=Ot(t,n),i=[],a=[`<row r="1">${t.map((e,t)=>`<c r="${J(t)}1" s="1" t="inlineStr"><is><t xml:space="preserve">${q(e)}</t></is></c>`).join(``)}</row>`];for(let e=0;e<n.length;e++){let t=e+2,o=n[e],s=[];for(let e=0;e<o.length;e++){let n=o[e],a=`${J(e)}${t}`,c=r.styleIndexOf(n),l=c?` s="${c}"`:``;if(n.link&&i.push({ref:a,url:n.link,id:`rId${i.length+1}`}),n.value==null||n.value===``)s.push(`<c r="${a}"${l}/>`);else if(n.t===`n`)s.push(`<c r="${a}"${l}><v>${Number(n.value)}</v></c>`);else if(n.t===`d`){let e=St(n.value);s.push(`<c r="${a}"${l}><v>${xt(e)}</v></c>`)}else n.t===`b`?s.push(`<c r="${a}"${l} t="b"><v>${+!!n.value}</v></c>`):s.push(`<c r="${a}"${l} t="inlineStr"><is><t xml:space="preserve">${q(String(n.value))}</t></is></c>`)}a.push(`<row r="${t}">${s.join(``)}</row>`)}let o=e.widths?`<cols>${e.widths.map((e,t)=>`<col min="${t+1}" max="${t+1}" width="${Math.max(4,Math.round(e/7*100)/100)}" customWidth="1"/>`).join(``)}</cols>`:``,s=Math.max(0,Math.floor(e.freezeColumns??0)),c=+!!e.freezeHeader,l=`<sheetView workbookViewId="0"/>`;if(c>0||s>0){let e=`${J(s)}${c+1}`,t=s>0&&c>0?`bottomRight`:s>0?`topRight`:`bottomLeft`;l=`<sheetView workbookViewId="0"><pane${s>0?` xSplit="${s}"`:``}${c>0?` ySplit="${c}"`:``} topLeftCell="${e}" activePane="${t}" state="frozen"/><selection pane="${t}" activeCell="${e}" sqref="${e}"/></sheetView>`}let u=n.length>0?(e.condFormats??[]).map((e,t)=>{let r=J(e.colIdx),i=`${r}2:${r}${n.length+1}`;if(e.kind===`dataBar`){let n=bt(e.color)??`FF638EC6`;return`<conditionalFormatting sqref="${i}"><cfRule type="dataBar" priority="${t+1}"><dataBar><cfvo type="min"/><cfvo type="max"/><color rgb="${n}"/></dataBar></cfRule></conditionalFormatting>`}let a=e.colors.map(e=>bt(e)??`FFFFFFFF`),o=a.length>=3?`<cfvo type="min"/><cfvo type="percentile" val="50"/><cfvo type="max"/>`:`<cfvo type="min"/><cfvo type="max"/>`,s=a.map(e=>`<color rgb="${e}"/>`).join(``);return`<conditionalFormatting sqref="${i}"><cfRule type="colorScale" priority="${t+1}"><colorScale>${o}${s}</colorScale></cfRule></conditionalFormatting>`}).join(``):``,d=i.length?`<hyperlinks>${i.map(e=>`<hyperlink ref="${e.ref}" r:id="${e.id}"/>`).join(``)}</hyperlinks>`:``,f=``,p=``,m=``;if(e.table&&t.length>0){let o=e.table,s=new Set,c=t.map((e,t)=>{let n=(e??``).trim()||`Column${t+1}`,r=n,i=1;for(;s.has(r.toLowerCase());)r=`${n}${++i}`;return s.add(r.toLowerCase()),r}),l=J(t.length-1),u=n.length+1,d=u+1,h=o.totalsRow&&n.length>0,g=o.totalsFns.findIndex(e=>!e);if(h){let e=t.map((e,t)=>{let i=`${J(t)}${d}`,a=o.totalsFns[t];if(a){let e=0;for(let r of n){let n=r[t];n?.t===`n`&&typeof n.value==`number`&&(e+=n.value)}let s=n.find(e=>e[t]?.t===`n`)?.[t]?.numFmt,l=r.styleIndexOf({t:`n`,value:e,numFmt:s,bold:!0}),u=a===`average`?101:a===`count`?103:109,d=a===`count`?n.length:e;return`<c r="${i}"${l?` s="${l}"`:``}><f>SUBTOTAL(${u},${o.name}[${q(c[t])}])</f><v>${d}</v></c>`}if(t===g){let e=r.styleIndexOf({t:`s`,value:`Total`,bold:!0});return`<c r="${i}"${e?` s="${e}"`:``} t="inlineStr"><is><t>Total</t></is></c>`}return`<c r="${i}"/>`});a.push(`<row r="${d}">${e.join(``)}</row>`)}let _=c.map((e,t)=>{let n=h?o.totalsFns[t]:void 0,r=h?n?` totalsRowFunction="${n}"`:t===g?` totalsRowLabel="Total"`:``:``;return`<tableColumn id="${t+1}" name="${q(e)}"${r}/>`}).join(``);f=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
36
+ <table xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" id="1" name="${q(o.name)}" displayName="${q(o.name)}" ref="A1:${l}${h?d:u}"${h?` totalsRowCount="1"`:` totalsRowShown="0"`}><autoFilter ref="A1:${l}${u}"/><tableColumns count="${t.length}">${_}</tableColumns><tableStyleInfo name="${q(o.style??`TableStyleMedium2`)}" showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0"/></table>`,m=`rId${i.length+1}`,p=`<tableParts count="1"><tablePart r:id="${m}"/></tableParts>`}let h=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
37
+ <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheetViews>${l}</sheetViews><sheetFormatPr defaultRowHeight="15"/>`+o+`<sheetData>${a.join(``)}</sheetData>`+u+d+p+`</worksheet>`,g={"[Content_Types].xml":f?Ct.replace(`</Types>`,`<Override PartName="/xl/tables/table1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"/></Types>`):Ct,"_rels/.rels":wt,"xl/workbook.xml":Et(e.sheetName),"xl/_rels/workbook.xml.rels":Dt,"xl/styles.xml":r.build(),"xl/worksheets/sheet1.xml":h};if(f&&(g[`xl/tables/table1.xml`]=f),i.length||m){let e=i.map(e=>`<Relationship Id="${e.id}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="${q(e.url)}" TargetMode="External"/>`);m&&e.push(`<Relationship Id="${m}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/table" Target="../tables/table1.xml"/>`),g[`xl/worksheets/_rels/sheet1.xml.rels`]=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
38
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">`+e.join(``)+`</Relationships>`}return g}async function At(e,t){let n=new t;for(let[t,r]of Object.entries(e))n.file(t,r);return n.generateAsync({type:`blob`,mimeType:`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`})}function jt(e){let t=e=>!!e&&typeof e==`object`&&Object.keys(e).some(e=>/\.(ttf|otf)$/i.test(e))&&Object.values(e).every(e=>typeof e==`string`),n=new Set,r=e=>{if(!e||typeof e!=`object`||n.has(e))return null;if(n.add(e),t(e))return e;let i=e;return r(i.pdfMake?.vfs)??r(i.vfs)??r(i.default)};return r(e)}function Mt(e){return new Promise((t,n)=>{let r=e.getBlob(t);r&&typeof r.then==`function`&&r.then(t,n)})}function Nt(e,t){let n=jt(t);return n?(typeof e.addVirtualFileSystem==`function`&&e.addVirtualFileSystem(n),e.vfs=n,!0):!1}var Pt={normal:`Roboto-Regular.ttf`,bold:`Roboto-Medium.ttf`,italics:`Roboto-Italic.ttf`,bolditalics:`Roboto-MediumItalic.ttf`};function Ft(e,t){let n={},r=e=>/^(https?:|blob:|data:|\/|\.\.?\/)/i.test(e),i=(e,i)=>{if(!i)return;if(r(i))return i;let a=`svgrid-${t.name}-${e}.ttf`;return n[a]=i,a},a=i(`normal`,t.normal),o=i(`bold`,t.bold)??a,s={normal:a,bold:o,italics:i(`italics`,t.italics)??a,bolditalics:i(`bolditalics`,t.bolditalics)??o};if(Object.keys(n).length){let t={...e.vfs??{},...n};typeof e.addVirtualFileSystem==`function`&&e.addVirtualFileSystem(t),e.vfs=t}let c={Roboto:Pt,...e.fonts??{},[t.name]:s};typeof e.addFonts==`function`&&e.addFonts(c),e.fonts=c}var It=/[֐-ࣿऀ-෿฀-๿ᄀ-ᇿ☀-➿⺀-鿿가-힯豈-﫿＀-￯\u{1f000}-\u{1faff}]/u;function Lt(e){if(!e)return null;let t=e.trim(),n=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(t);if(n){let e=n[1];return`#`+(e.length===3?e.split(``).map(e=>e+e).join(``):e).toLowerCase()}let r=/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:[\s,/]+([\d.]+%?))?\s*\)$/i.exec(t);if(!r||!((r[4]===void 0?1:r[4].endsWith(`%`)?Number(r[4].slice(0,-1))/100:Number(r[4]))>.05))return null;let i=e=>Math.max(0,Math.min(255,Math.round(Number(e)))).toString(16).padStart(2,`0`);return`#`+i(r[1])+i(r[2])+i(r[3])}function Rt(e){let t=parseInt(e.slice(1),16),n=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*n(t>>16&255)+.7152*n(t>>8&255)+.0722*n(t&255)}function zt(e){if(!e||typeof getComputedStyle!=`function`)return{};let t=t=>e.querySelector(t),n=(e,t)=>e?Lt(getComputedStyle(e).getPropertyValue(t)):null,r=e=>{for(let t=e;t;t=t.parentElement){let e=n(t,`background-color`);if(e)return e}return null},i=`:not([class*="row-number"]):not([class*="selection"])`,a=t(`.sv-grid-head .sv-grid-column${i}`)??t(`.sv-grid-header-cell`)??t(`thead th`),o=t(`.sv-grid-body .sv-grid-row:not(.sv-grid-row-alt):not(.sv-grid-header-row) .sv-grid-cell${i}`)??t(`tbody td`),s=t(`.sv-grid-body .sv-grid-row-alt .sv-grid-cell${i}`),c=t(`.sv-grid-group-row .sv-grid-cell`),l={},u=r(a),d=n(a,`color`);u&&(l.headerColor=u),d&&(l.headerTextColor=d);let f=r(o?o.parentElement:t(`.sv-grid-container`)??e),p=n(o,`color`);if(f&&Rt(f)<.4||p&&Rt(p)>.5)return l;p&&(l.textColor=p);let m=n(o,`border-bottom-color`)??n(a,`border-bottom-color`);m&&(l.borderColor=m);let h=n(s,`background-color`);h&&h!==f&&(l.zebraColor=h);let g=n(c,`background-color`),_=n(c,`color`);return g&&g!==f&&(l.groupColor=g),_&&(l.groupTextColor=_),l}var Bt={A4:[595.28,841.89],A3:[841.89,1190.55],A5:[419.53,595.28],LETTER:[612,792],LEGAL:[612,1008]};async function Vt(e,t){if(!e?.length)return[];let n=[];for(let r of e){if(`image`in r){n.push(r);continue}let e=await t(r.element),i=await new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result)),r.onerror=()=>n(r.error??Error(`could not read the chart image`)),r.readAsDataURL(e)});n.push({image:i,title:r.title,caption:r.caption,width:r.width})}return n}var Ht=`#dc2626`,Ut=`#d97706`,Wt=`#eab308`,Gt=`#16a34a`,Y=(e,t)=>({type:`polyline`,points:e,closePath:!0,lineWidth:.1,lineColor:t,color:t}),Kt=e=>[{x:e/2,y:0},{x:e,y:e*.5},{x:e*.68,y:e*.5},{x:e*.68,y:e},{x:e*.32,y:e},{x:e*.32,y:e*.5},{x:0,y:e*.5}],qt={"↑":e=>[Y(Kt(e),Gt)],"↓":e=>[Y(Kt(e).map(t=>({x:t.x,y:e-t.y})),Ht)],"→":e=>[Y(Kt(e).map(t=>({x:e-t.y,y:t.x})),Ut)],"▲":e=>[Y([{x:0,y:e},{x:e/2,y:0},{x:e,y:e}],Gt)],"▼":e=>[Y([{x:0,y:0},{x:e,y:0},{x:e/2,y:e}],Ht)],"◆":e=>[Y([{x:e/2,y:0},{x:e,y:e/2},{x:e/2,y:e},{x:0,y:e/2}],Ut)],"🔴":e=>[{type:`ellipse`,x:e/2,y:e/2,r1:e/2,r2:e/2,color:Ht}],"🟡":e=>[{type:`ellipse`,x:e/2,y:e/2,r1:e/2,r2:e/2,color:Wt}],"🟢":e=>[{type:`ellipse`,x:e/2,y:e/2,r1:e/2,r2:e/2,color:Gt}],"✓":e=>[{type:`polyline`,points:[{x:0,y:e*.55},{x:e*.38,y:e*.92},{x:e,y:e*.08}],lineWidth:Math.max(1,e*.16),lineColor:`#334155`}]};function Jt(e){let{columns:t}=e,n=e.opts??{},r=e.styles??{},i=e.theme??{},a=e.now??new Date(0),o=n.fontSize??8,s=n.headerColor??r.headerRow?.backgroundColor??i.headerColor??`#334155`,c=n.headerTextColor??r.headerRow?.color??i.headerTextColor??`#ffffff`,l=n.zebra??!0,u=n.zebraColor??r.rowAlternate?.backgroundColor??i.zebraColor??`#f1f5f9`,d=n.groupColor??i.groupColor??`#e2e8f0`,f=n.groupTextColor??i.groupTextColor??`#0f172a`,p=n.subtotalColor??i.subtotalColor??`#f8fafc`,m=n.textColor??r.rows?.color??i.textColor,h=n.borderColor??i.borderColor??`#e2e8f0`,g=n.repeatHeader??!0,_=e=>e===`bold`||typeof e==`number`&&e>=600,v=e=>{if(e===void 0)return;let t=typeof e==`number`?e:parseFloat(e);return Number.isFinite(t)&&t>0?t:void 0},y=(e,t)=>{if(!t)return;t.backgroundColor&&(e.fillColor=t.backgroundColor),t.color&&(e.color=t.color),_(t.fontWeight)?e.bold=!0:t.fontWeight===`normal`&&(e.bold=!1),t.fontStyle===`italic`&&(e.italics=!0);let n=v(t.fontSize);n&&(e.fontSize=n),t.textAlign&&(e.alignment=t.textAlign)},b=new Map;for(let[e,t]of Object.entries(r.cells??{})){let n=/^([A-Z]+)(\d+)$/i.exec(e.trim());if(!n)continue;let r=0;for(let e of n[1].toUpperCase())r=r*26+(e.charCodeAt(0)-64);b.set(`${Number(n[2])-1}:${r-1}`,t)}let x=n.pageOrientation??(t.length>(n.autoLandscapeThreshold??8)?`landscape`:`portrait`),S=n.margins??[28,34,28,34],[ee,te]=Bt[n.pageSize??`A4`],C=(x===`landscape`?te:ee)-S[0]-S[2],w=(x===`landscape`?ee:te)-S[1]-S[3],T=t.map((e,t)=>{let n={text:e.header,bold:!0,alignment:e.align??`left`,color:c,fillColor:s};return y(n,r.headerRow?{...r.headerRow,backgroundColor:void 0,color:void 0}:void 0),y(n,b.get(`0:${t}`)),n}),ne=e.body??(e.rows??[]).map(e=>({kind:`data`,cells:e})),re=e.dataCellStyle,ie=e.dataCellLink,E=0,D=new Set,O=new Set,k=[],A=[T];if(ne.forEach((e,n)=>{let i=n+1;if(e.kind===`group`){let n={text:e.label,bold:!0,color:f,fillColor:d,colSpan:t.length,margin:[(e.level??0)*12,2,0,2]},r=Array.from({length:Math.max(0,t.length-1)},()=>({text:``}));O.add(i),A.push([n,...r])}else if(e.kind===`subtotal`)A.push(t.map((t,n)=>({text:e.cells[n]??``,bold:!0,alignment:t.align??`left`,fillColor:p})));else{D.add(i);let n=E++;A.push(t.map((t,a)=>{let o={text:e.cells[a]??``,alignment:t.align??`left`};m&&(o.color=m),y(o,r.rows?{...r.rows,backgroundColor:void 0}:void 0),l&&n%2==1&&r.rowAlternate?.color&&(o.color=r.rowAlternate.color),y(o,b.get(`${n+1}:${a}`));let s=re?.(n,a);s&&(s.fill&&(o.fillColor=s.fill),s.color&&(o.color=s.color),s.bold&&(o.bold=!0),s.icon&&s.iconOnly&&(o.text=``),s.icon&&qt[s.icon]?k.push([i,a,s.icon]):s.icon&&(o.text=s.iconOnly?s.icon:`${s.icon} ${o.text??``}`));let c=ie?.(n,a);return c&&(o.link=c,o.decoration=`underline`,s?.color||(o.color=`#2563eb`)),o}))}}),e.merges?.length&&!e.body){let n=[...D].sort((e,t)=>e-t);for(let r of e.merges){let e=Math.max(1,Math.floor(r.rowSpan??1)),i=Math.max(1,Math.floor(r.colSpan??1));if(e===1&&i===1)continue;let a=n[r.row];if(a===void 0||r.col<0||r.col>=t.length)continue;let o=A[a]?.[r.col];if(o){e>1&&(o.rowSpan=Math.min(e,A.length-a)),i>1&&(o.colSpan=Math.min(i,t.length-r.col));for(let e=0;e<(o.rowSpan??1);e+=1)for(let t=0;t<(o.colSpan??1);t+=1){if(e===0&&t===0)continue;let n=A[a+e]?.[r.col+t];n&&(n.text=``)}}}}let j=t.length,M=e=>e?.62:.56,ae=new Set(k.map(([e,t])=>`${e}:${t}`)),N=Array(j).fill(0),P=Array(j).fill(0);A.forEach((e,t)=>{O.has(t)||e.forEach((e,n)=>{if((e.colSpan??1)>1||n>=j)return;let r=M(e.bold)*(e.fontSize??o)/o,i=ae.has(`${t}:${n}`)?2:0,a=0,s=0;for(let t of(e.text??``).split(`
39
+ `)){s=Math.max(s,t.length);for(let e of t.split(/\s+/))a=Math.max(a,e.length)}N[n]=Math.max(N[n],(Math.min(a,28)+i)*r),P[n]=Math.max(P[n],(s+i)*r)})});let F=e=>C-e*10.5-2,I=(e,t)=>e.reduce((e,n)=>e+Math.max(N[n]*t,t),0),L=n.fit??`auto`,R=Array.isArray(n.columnWidths)?n.columnWidths:null,z=t.map((e,t)=>t),B=o,V=[z];if(L!==`none`&&!R&&j>0&&I(z,o)>F(j)){let e=F(j),t=e>0?o*e/I(z,o):0,r=L===`shrink`?4:Math.max(5,o*.75);if(L!==`split`&&t>=r)B=Math.floor(t*10)/10;else if(L===`shrink`)B=r;else{let e=Math.max(0,Math.min(n.repeatColumns??1,j-1)),t=z.slice(0,e);V=[];let r=[];for(let n=e;n<j;n++)r.length&&I([...t,...r,n],o)>F(t.length+r.length+1)&&(V.push([...t,...r]),r=[]),r.push(n);r.length&&V.push([...t,...r])}}let oe=e=>{if(R){let e=R.filter(e=>typeof e==`number`).reduce((e,t)=>e+t,0),t=F(R.length);return e>t&&L!==`none`?R.map(n=>typeof n==`number`?Math.floor(n*t/e):n):R}if(L===`none`)return e.map(()=>n.columnWidths===`auto`?`auto`:`*`);let t=e.map(e=>Math.max(N[e]*B,B)),r=e.map((e,n)=>Math.max(t[n],P[e]*B)),i=F(e.length),a=r.reduce((e,t)=>e+t,0),o;if(n.columnWidths===`auto`&&a<=i)o=r;else if(a<=i)o=r.map(t=>t+(i-a)/e.length);else{let n=t.reduce((e,t)=>e+t,0),a=Math.max(0,i-n),s=r.reduce((e,n,r)=>e+(n-t[r]),0);o=t.map((t,n)=>t+(s>0?a*(r[n]-t)/s:a/e.length))}return o.map(e=>Math.floor(e*100)/100)},se=B*1.25,ce=(e,t,n)=>{let r=0;return t.forEach((t,i)=>{let a=e[t],o=n[i];if(!a||(a.rowSpan??1)>1||typeof o!=`number`)return;let s=M(a.bold)*(a.fontSize??B),c=0;for(let e of(a.text??``).split(`
40
+ `))c+=Math.max(1,Math.ceil(e.length*s/Math.max(o,1)));r=Math.max(r,c*se*((a.fontSize??B)/B))}),r+6};for(let[e,t,n]of k){let r=A[e]?.[t];if(!r)continue;let i=B*.8,{text:a,alignment:o,color:s,bold:c,italics:l,fontSize:u,link:d,decoration:f}=r;delete r.text;let p={width:i+3,canvas:qt[n](i),margin:[0,B*.2,0,0]},m={width:`*`,text:``};r.columns=a?[p,{width:`*`,text:a,alignment:o,color:s,bold:c,italics:l,fontSize:u,link:d,decoration:f}]:o===`center`?[m,p,m]:o===`right`?[m,p]:[p,m],r.columnGap=0;for(let e of[`alignment`,`color`,`bold`,`italics`,`fontSize`,`link`,`decoration`])delete r[e]}let le=(e,t,n)=>n.length===j&&n.every((e,t)=>e===t)?e:O.has(t)?[{...e[0],colSpan:n.length},...n.slice(1).map(()=>({text:``}))]:n.map((t,r)=>{let i=e[t],a=i.colSpan??1;if(a<=1)return i;let o=1;for(;o<a&&n[r+o]===t+o;)o+=1;return{...i,colSpan:o}}),ue={kind:`table`,stripes:l?[...D].filter(e=>e>0&&e%2==0):[],zebraColor:u,lineColor:h},de=V.map((e,t)=>{let n=oe(e),r=A.map((t,n)=>le(t,n,e)),i=g?ce(r[0],e.map((e,t)=>t),n):0,a=w-i,s=r.some((t,r)=>r>0&&!O.has(r)&&ce(t,e.map((e,t)=>t),n)>a*.7);return{...t>0?{pageBreak:`before`}:{},...B===o?{}:{fontSize:B},table:{headerRows:+!!g,dontBreakRows:!s,widths:n,body:r},svgridLayout:ue}}),fe=(e,t)=>(e??[]).map(e=>{if(`image`in e)return{image:e.image,...e.width?{width:e.width}:{},...e.height?{height:e.height}:{},margin:t};if(`text`in e){let n={text:e.text};return y(n,e.style),{...n,margin:t}}return{columns:[{text:e.left??``,alignment:`left`},{text:e.center??``,alignment:`center`},{text:e.right??``,alignment:`right`}],margin:t}}),H=[];if(H.push(...fe(e.headerLines,[0,0,0,4])),n.logo&&H.push({image:n.logo,width:n.logoWidth??90,margin:[0,0,0,8]}),n.title&&H.push({text:n.title,fontSize:o+8,bold:!0,margin:[0,0,0,2]}),n.subtitle&&H.push({text:n.subtitle,fontSize:o+1,color:`#64748b`,margin:[0,0,0,8]}),n.kpis?.length){let e=n.kpiColor??`#f8fafc`;H.push({table:{widths:n.kpis.map(()=>`*`),body:[n.kpis.map(t=>({fillColor:e,margin:[8,6,8,6],stack:[{text:t.label,fontSize:o,color:`#64748b`},{text:t.value,fontSize:o+10,bold:!0,margin:[0,2,0,0]},...t.delta?[{text:t.delta,fontSize:o,color:t.color??`#64748b`,margin:[0,2,0,0]}]:[]]}))]},svgridLayout:{kind:`kpi`},margin:[0,0,0,10]})}let U=(e.charts??(n.charts??[]).filter(e=>`image`in e)).map(e=>({stack:[...e.title?[{text:e.title,fontSize:o+3,bold:!0,margin:[0,0,0,4]}]:[],{image:e.image,width:Math.min(e.width??C,C)},...e.caption?[{text:e.caption,fontSize:o,color:`#64748b`,margin:[0,3,0,0]}]:[]],margin:[0,0,0,12],unbreakable:!0}));n.chartsPosition!==`below`&&H.push(...U),H.push(...de),n.chartsPosition===`below`&&(U.length&&H.push({text:``,margin:[0,0,0,12]}),H.push(...U)),H.push(...fe(e.footerLines,[0,4,0,0]));let pe={pageSize:n.pageSize??`A4`,pageOrientation:x,pageMargins:S,defaultStyle:n.font?{fontSize:o,font:n.font.name}:{fontSize:o},content:H,info:{...n.title?{title:n.title}:{},...n.author?{author:n.author}:{},...n.subtitle?{subject:n.subtitle}:{},creator:`SvGrid`,creationDate:a}};if(n.watermark){let e=typeof n.watermark==`string`?{text:n.watermark}:n.watermark;pe.watermark={text:e.text,color:e.color??`#94a3b8`,opacity:e.opacity??.15,bold:!0}}if(n.showPageNumbers??!0){let e=e=>String(e).padStart(2,`0`),t=n.labels?.date?.(a)??`${a.getFullYear()}-${e(a.getMonth()+1)}-${e(a.getDate())}`,r=`Page {page} of {pages}`;if(n.labels?.page){let e=n.labels.page(Yt,Xt);e.includes(String(Yt))&&e.includes(String(Xt))&&(r=e.split(String(Yt)).join(`{page}`).split(String(Xt)).join(`{pages}`))}pe.svgridFooter={margin:[S[0],6,S[2],0],date:t,page:r}}return pe}var Yt=86421,Xt=97531;function Zt(e){return Qt(Jt(e),{page:e.opts?.labels?.page})}function Qt(e,t={}){let n=e=>{if(Array.isArray(e)){e.forEach(n);return}if(!e||typeof e!=`object`)return;let t=e;t.svgridLayout&&(t.layout=$t(t.svgridLayout)),t.stack&&n(t.stack)};n(e.content);let r=e,i=e.svgridFooter;if(i){let e=t.page??((e,t)=>i.page.split(`{page}`).join(String(e)).split(`{pages}`).join(String(t)));r.footer=(t,n)=>({margin:i.margin,columns:[{text:i.date,alignment:`left`,fontSize:7,color:`#94a3b8`},{text:e(t,n),alignment:`right`,fontSize:7,color:`#94a3b8`}]})}return r}function $t(e){if(e.kind===`kpi`)return{hLineWidth:()=>0,vLineWidth:()=>4,vLineColor:()=>`#ffffff`,paddingLeft:()=>0,paddingRight:()=>0,paddingTop:()=>0,paddingBottom:()=>0};let t=new Set(e.stripes);return{fillColor:n=>t.has(n)?e.zebraColor:null,hLineWidth:()=>.5,vLineWidth:()=>.5,hLineColor:()=>e.lineColor,vLineColor:()=>e.lineColor,paddingTop:()=>3,paddingBottom:()=>3,paddingLeft:()=>5,paddingRight:()=>5}}var en=`svgrid-pdf`,tn=1;function nn(e,t,n={}){let r=e(),i=tn++;return new Promise((e,a)=>{let o=()=>{n.signal?.removeEventListener(`abort`,s),r.terminate()},s=()=>{o(),a(new DOMException(`Export aborted`,`AbortError`))};if(n.signal?.aborted)return s();n.signal?.addEventListener(`abort`,s,{once:!0}),r.addEventListener(`message`,t=>{let r=t.data;if(!(!r||r.channel!==`svgrid-pdf`||r.id!==i)){if(`progress`in r)return n.onProgress?.(r.progress);o(),`pdf`in r?e(new Blob([r.pdf],{type:`application/pdf`})):a(Error(`@svgrid/enterprise: the PDF worker failed: ${r.error}`))}}),r.addEventListener(`error`,e=>{o(),a(Error(`@svgrid/enterprise: the PDF worker failed to start or crashed: ${e.message||`no message`}. Check that it calls servePdfWorker().`))});let c={channel:en,id:i,doc:t,...n.font?{font:n.font}:{}};r.postMessage(c)})}function rn(e,t){let n=/^#?([0-9a-f]{6})$/i.exec(e.trim());if(!n)return e;let r=parseInt(n[1],16);return`#`+[r>>16&255,r>>8&255,r&255].map(e=>Math.round(e+(255-e)*t).toString(16).padStart(2,`0`)).join(``)}function an(e){let t={};return e.background&&(t.fill=e.background),!t.fill&&e.dataBar&&(t.fill=rn(e.dataBar.color,.72)),e.color&&e.color!==`transparent`&&(t.color=e.color),(e.fontWeight===`bold`||typeof e.fontWeight==`number`&&e.fontWeight>=600)&&(t.bold=!0),e.icon&&(t.icon=e.icon),e.icon&&e.iconOnly&&(t.iconOnly=!0),Object.keys(t).length>0?t:void 0}function X(e,t,a){if(!a||a.length===0)return()=>void 0;let o=new Map;if(r(a))for(let n of e)o.set(n.field,i(t.map(e=>e[n.field])));return(r,i)=>{let s=e[i],c=t[r];if(!s||!c)return;let l=c[s.field];return an(n(l,c,s.field,a,o.get(s.field)??null))}}var on=2e3,sn=[`csv`,`tsv`,`html`,`json`,`xml`,`md`],cn=null;async function ln(){if(typeof window>`u`)throw Error(`@svgrid/enterprise: export requires a browser environment`);return cn||=(async()=>{pt(),await _(()=>import(`./smart.export-CDCwbFH4.js`),[],import.meta.url);let e=window.Smart?.Utilities?.DataExporter;if(!e)throw Error(`@svgrid/enterprise: failed to load Smart.Utilities.DataExporter`);return e})(),cn}async function un(t){let n=globalThis;if(t===`xlsx`&&n.JSZip==null){let t;try{t=await _(()=>import(`./jszip.min-CX2fPs3O.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url)}catch{throw Error(`@svgrid/enterprise: xlsx export requires the "jszip" peer dependency. Install it with: pnpm add jszip`)}n.JSZip=t.default??t}if(t===`pdf`&&n.pdfMake==null){let t,r;try{t=await _(()=>import(`./pdfmake-BpIYFHoG.js`).then(t=>e(t.default,1)),__vite__mapDeps([2,1]),import.meta.url),r=await _(()=>import(`./vfs_fonts-BV-Ul9v2.js`).then(t=>e(t.default,1)),__vite__mapDeps([3,1]),import.meta.url)}catch{throw Error(`@svgrid/enterprise: pdf export requires the "pdfmake" peer dependency. Install it with: pnpm add pdfmake`)}let i=t.default??t;if(!Nt(i,r))throw Error(`@svgrid/enterprise: "pdfmake/build/vfs_fonts" did not contain a font map; the installed pdfmake is not one this export knows.`);n.pdfMake=i}}function Z(e,t){if(Array.isArray(t))return t;switch(t){case`selected`:return e.getSelectedRows();case`all`:return e.getData();case`displayed`:case void 0:default:return e.getDisplayedRows()}}function Q(e,t,n){if(t.columns&&t.columns.length>0)return t.columns;let r=e.getColumns().filter(e=>e.visible&&e.field);return r.length>0?r.map(e=>({field:e.field,header:e.header,format:e.format,align:e.align,aggregate:e.aggregate})):n.length>0?Object.keys(n[0]).filter(e=>!e.startsWith(`_`)).map(e=>({field:e})):[]}function dn(e,t,n){if(e.exportValue)return e.exportValue(t)??``;let r=t[e.field];return n?r:c(r,e.format)}async function fn(e,t,n){let r=n.rawValues===!0,i={};for(let e of t)i[e.field]=e.header??e.field;let a=[i],o=e.length;for(let i=0;i<o;i++){if(n.signal?.aborted)throw new DOMException(`Export aborted`,`AbortError`);let s=e[i],c={};for(let e of t)c[e.field]=dn(e,s,r);a.push(c),i>0&&i%5e3==0&&(n.onProgress?.({phase:`project`,ratio:i/o,row:i,total:o}),await new Promise(e=>setTimeout(e,0)))}return n.onProgress?.({phase:`project`,ratio:1,row:o,total:o}),a}function pn(e){if(!e)return;let t={};e.headerRow&&(t.header={...e.headerRow});let n=e.rows?{...e.rows}:{};return e.rowAlternate&&(n.alternationCount=2,n.alternationStart=0,e.rowAlternate.backgroundColor&&(n.alternationIndex1BackgroundColor=e.rowAlternate.backgroundColor),e.rowAlternate.color&&(n.alternationIndex1Color=e.rowAlternate.color)),Object.keys(n).length>0&&(t.rows=n),e.cells&&(t.cells=e.cells),t}var mn=0,hn=new Map;function gn(e){let t=hn.get(e);if(t)return t;let n=`img${++mn}`;return hn.set(e,n),n}function _n(e,t=64,n=64){let r=/^data:image\/([a-zA-Z0-9+]+);/i.exec(e)?.[1]?.toLowerCase()??`png`,i=r===`jpg`?`jpeg`:r===`svg+xml`?`svg`:r;return{id:gn(e),base64:e,imageType:i,width:t,height:n}}function vn(e,t){if(!e||e.length===0||t.length===0)return;let n=t[0],r=[];for(let i of e){let e={},a;if(`image`in i)e[n]=i.image,a={mergeAcross:!0,textAlign:`left`};else if(`text`in i)e[n]=i.text,a={mergeAcross:!0,...i.style??{}};else{let r=t[Math.floor(t.length/2)],o=t[t.length-1];i.left!==void 0&&(e[n]=i.left),i.center!==void 0&&(e[r]=i.center),i.right!==void 0&&(e[o]=i.right),a={textAlign:`left`}}r.push({cells:e,style:a})}return r}function yn(e,t){let n=e&&e.length>0?new Set(e):null;return(e,r,i)=>typeof i!=`string`||!/^data:image\//i.test(i)?null:n&&!n.has(r)?{image:_n(i,96,96),value:``}:{image:_n(i,t.width,t.height),value:``}}function bn(e){let t={exportHeader:!0,pageOrientation:e.pageOrientation??`portrait`};e.freezeHeader!==!1&&(t.freezeHeader=!0),e.freezeColumns&&e.freezeColumns>0&&(t.freezeColumnsCount=Math.floor(e.freezeColumns));let n=pn(e.styles);if(n&&(t.style=n),e.hierarchical&&(t.hierarchical=!0),e.merges?.length&&!e.groupBy?.length&&!e.hierarchical){let n=e.merges.map(e=>({cell:[e.row,e.col],rowspan:Math.max(1,Math.floor(e.rowSpan??1)),colspan:Math.max(1,Math.floor(e.colSpan??1))})).filter(e=>e.rowspan>1||e.colspan>1);n.length&&(t.mergedCells=n)}return t}function xn(e,t,n){let r=vn(t.header,n),i=vn(t.footer,n);r&&(e.headerContent=r),i&&(e.footerContent=i);let a=(t.header?.some(e=>`image`in e)??!1)||(t.footer?.some(e=>`image`in e)??!1);if(t.imageFields?.length||a){let n=t.imageSize??{width:32,height:32};e.addImageToCell=yn(t.imageFields,n)}return e}function Sn(e,t){return e.toLowerCase().endsWith(`.`+t)?e:`${e}.${t}`}function Cn(e,t,n,r,i){return i!==!1&&p(e,t),{blob:e,filename:t,mime:n,rowCount:r,byteSize:e.size}}function wn(e,t,n,r,i){i!==!1&&u(e,t,n);let a=new Blob([e],{type:n});return{blob:a,filename:t,mime:n,rowCount:r,byteSize:a.size}}function Tn(e,t,n){let r=Math.min(t.length,200);return e.map(e=>{if(typeof e.width==`number`)return e.width;let i=String(e.header??e.field).length;for(let a=0;a<r;a++){let r=dn(e,t[a],n),o=r==null?0:String(r).length;o>i&&(i=o)}return Math.max(48,Math.min(400,i*7+14))})}function En(e,t,n){if(typeof t.freezeColumns==`number`)return t.freezeColumns;let r=e.getColumnPinning().left;if(!r||r.length===0)return;let i=new Set(r),a=0;for(let e of n)if(i.has(e.field))a++;else break;return a>0?a:void 0}function Dn(e){let t=e,n=``;do n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26)-1;while(t>=0);return n}function On(e,t){if(e.some(e=>e.link))return(n,r)=>{let i=e[r],a=t[n];if(!(!i?.link||!a))return i.link(a)||void 0}}function kn(e){let t={};for(let n of e)n.align&&(t[n.field]=n.align);return t}async function An(e,t,n,r,i,s){let c=n.map(e=>e.field),u={onProgress:r.onProgress,signal:r.signal};switch(e){case`html`:return{text:await d(t,c,{...u,title:(r.filename??`grid`).trim()||`grid`,align:kn(n),cellStyle:i,cellLink:s}),mime:`text/html;charset=utf-8`,ext:`html`};case`json`:return{text:await f(t,c,u),mime:`application/json;charset=utf-8`,ext:`json`};case`xml`:return{text:await l(t,c,u),mime:`application/xml;charset=utf-8`,ext:`xml`};case`md`:return{text:await o(t,c,{...u,align:kn(n)}),mime:`text/markdown;charset=utf-8`,ext:`md`};case`tsv`:return{text:await a(t,c,{...u,csv:{...r.csv,delimiter:` `}}),mime:`text/tab-separated-values;charset=utf-8`,ext:`tsv`};default:{let e=r.csv?.delimiter??`,`;return{text:await a(t,c,{...u,csv:{...r.csv,delimiter:e}}),mime:`text/csv;charset=utf-8`,ext:`csv`}}}}async function jn(e,t){if(t.sheets&&t.sheets.length>0)throw Error(`@svgrid/enterprise: multi-sheet export requires format 'xlsx', got '${t.format}'`);let n=Z(e,t.rows);if(n.length===0)throw Error(`@svgrid/enterprise: nothing to export - the grid has no rows`);let r=Q(e,t,n),i=await fn(n,r,t.format===`json`?{...t,rawValues:t.rawValues??!0}:t),a=(t.filename??`grid`).trim()||`grid`,o=t.format===`html`?X(r,n,t.conditionalFormats):void 0,s=t.format===`html`?On(r,n):void 0,{text:c,mime:l,ext:u}=await An(t.format,i,r,t,o,s);return wn(c,Sn(a,u),l,n.length,t.download)}async function Mn(e,t){if(t.sheets&&t.sheets.length>0)throw Error(`@svgrid/enterprise: multi-sheet export requires format 'xlsx'. Use 'xls' for a single legacy sheet.`);let n=Z(e,t.rows);if(n.length===0)throw Error(`@svgrid/enterprise: nothing to export - the grid has no rows`);let r=Q(e,t,n),i=(t.filename??`grid`).trim()||`grid`,a=X(r,n,t.conditionalFormats);return wn(await _t(i,r,n,{rawValues:t.rawValues,onProgress:t.onProgress,signal:t.signal,freezeHeader:t.freezeHeader!==!1,freezeColumns:En(e,t,r),widths:t.autoFitColumns===!1?void 0:Tn(r,n,t.rawValues===!0),cellVisual:t.conditionalFormats?.length?a:void 0,precisionSafe:t.precisionSafe}),Sn(i,`xls`),`application/vnd.ms-excel;charset=utf-8`,n.length,t.download)}function Nn(e){return e.format?.type===`number`||e.format?.type===`currency`}function Pn(e,t,n,r={}){let i=[],a=t=>e.find(e=>e.field===t),o=e=>e.aggregate??(Nn(e)?`sum`:void 0),s=e.some(e=>o(e)!==void 0),l=e.findIndex(e=>o(e)===void 0),u=new Map;t.forEach((e,t)=>u.set(e,t));let d=(e,t)=>e[t],f=(e,t)=>{let n=o(e);if(n===void 0)return``;let r=y(n,e.field,t.map(t=>({original:t,getCellValueByColumnId:()=>d(t,e.field)})));return r==null||typeof r==`number`&&!Number.isFinite(r)?``:n===`count`||n===`countDistinct`?String(r):Array.isArray(r)?r.map(t=>c(t,e.format)).join(` - `):c(r,e.format)},p=(t,n)=>{let r=e.map(e=>f(e,t));return l>=0&&(r[l]=n),{kind:`subtotal`,cells:r}},m=(t,o)=>{if(o>=n.length){for(let n of t)i.push({kind:`data`,cells:e.map(e=>String(dn(e,n,!1)??``)),source:u.get(n)});return}let c=n[o],l=a(c),f=new Map;for(let e of t){let t=String(d(e,c)??``),n=f.get(t);n?n.push(e):f.set(t,[e])}for(let[e,t]of f){let n=l?String(dn(l,t[0],!1)??e):e;i.push({kind:`group`,label:`${l?.header??c}: ${n} (${t.length})`,level:o}),m(t,o+1),s&&i.push(p(t,r.labels?.subtotal?.(n)??`Subtotal (${n})`))}};return m(t,0),s&&r.grandTotal!==!1&&t.length&&i.push(p(t,r.labels?.total??`Total`)),i}function Fn(e){let t=e.find(e=>It.test(e));t!==void 0&&console.warn(`@svgrid/enterprise: the PDF has text its default font (Roboto) cannot draw, such as "${t.slice(0,40)}"; it prints as empty boxes. Pass pdf.font with a font that covers it (Noto Sans CJK, Noto Sans Arabic, ...).`)}async function In(e,t){let n=Z(e,t.rows);if(n.length===0)throw Error(`@svgrid/enterprise: nothing to export - the grid has no rows`);let r=Q(e,t,n),i=r.map(e=>e.field),a=e=>e.align??(e.format&&[`number`,`currency`,`percent`,`date`,`datetime`,`time`].includes(String(e.format.type))?`right`:void 0),o=r.map(e=>({header:e.header??e.field,align:a(e)})),s=t.autoGroup!==!1&&!t.groupBy?.length&&!t.hierarchical?(e.getState().grouping??[]).filter(e=>!!e).map(e=>String(e)):[],c=t.groupBy?.length?t.groupBy:s.length>0?s:void 0;if(t.signal?.aborted)throw new DOMException(`Export aborted`,`AbortError`);t.onProgress?.({phase:`write`,ratio:0,total:n.length});let l={...t.pdf,pageOrientation:t.pdf?.pageOrientation??t.pageOrientation},u=l.matchTheme===!1?{}:zt(e.getElement?.()??null),d={headerLines:t.header,footerLines:t.footer},f=await Vt(l.charts,async e=>{let{chartToPngBlob:t}=await _(async()=>{let{chartToPngBlob:e}=await import(`./src-D23PPsK1.js`).then(e=>e.t);return{chartToPngBlob:e}},__vite__mapDeps([4,1,5,6]),import.meta.url);return t(e,{scale:2})}),p=new Date,m,h=(e,t)=>{let i=r[t];if(!i||i.exportValue||i.format)return;let a=n[e]?.[i.field];return typeof a==`boolean`?a:void 0},g=(e,t)=>{let n=e?.icon??(t?`✓`:void 0);return e||n?{fill:e?.fill,color:e?.color,bold:e?.bold,icon:n,iconOnly:e?.iconOnly}:void 0};if(c?.length){let e=Pn(r,n,c,{grandTotal:l.grandTotal,labels:l.labels}).map(e=>e.kind===`data`&&e.source!==void 0?{...e,cells:e.cells.map((t,n)=>h(e.source,n)===void 0?t:``)}:e);l.font||Fn(e.flatMap(e=>e.kind===`group`?[e.label]:e.cells));let i=e.flatMap(e=>e.kind===`data`?[e.source??-1]:[]),a=X(r,n,t.conditionalFormats),s=On(r,n);m={columns:o,body:e,dataCellStyle:(e,t)=>{let n=i[e]??-1;return n>=0?g(a(n,t),h(n,t)):void 0},dataCellLink:s?(e,t)=>{let n=i[e]??-1;return n>=0?s(n,t):void 0}:void 0,opts:l,styles:t.styles,theme:u,...d,charts:f,now:p}}else{let e=(await fn(n,r,t)).slice(1).map((e,t)=>i.map((n,r)=>h(t,r)===void 0?String(e[n]??``):``)),a=X(r,n,t.conditionalFormats),s=On(r,n);l.font||Fn([...o.map(e=>e.header),...e.flat()]),m={columns:o,rows:e,dataCellStyle:(e,t)=>g(a(e,t),h(e,t)),dataCellLink:s,opts:l,styles:t.styles,theme:u,...d,merges:t.merges,charts:f,now:p}}let v=(t.filename??`grid`).trim()||`grid`,y=n.length,b;if(l.worker)b=await nn(l.worker,Jt(m),{font:l.font,signal:t.signal,onProgress:e=>t.onProgress?.({phase:`write`,ratio:e,total:y})});else{y>on&&console.warn(`@svgrid/enterprise: rendering a ${y.toLocaleString(`en-US`)}-row PDF on the page; pdfmake blocks it until done (about a second per thousand rows). Pass pdf.worker to render in a worker instead.`),await un(`pdf`);let e=globalThis.pdfMake;if(!e)throw Error(`@svgrid/enterprise: pdf export requires the "pdfmake" peer dependency.`);l.font&&Ft(e,l.font),b=await Mt(e.createPdf(Zt(m)))}return t.onProgress?.({phase:`write`,ratio:1,total:y}),Cn(b,Sn(v,`pdf`),`application/pdf`,n.length,t.download)}async function Ln(e,t,n,r,i,a){let o=e.map(e=>e.header??e.field),l=a?.precisionSafe===!0,u=(e,t,n)=>l&&Math.abs(e)>=0x38d7ea4c68000?{t:`s`,value:String(e),...t}:{t:`n`,value:e,numFmt:n,...t},d=(t,a,o)=>{let l=e[o],d=r(a,o),f={align:l.align,fill:d?.fill,color:d?.color,bold:d?.bold,link:i?.(a,o)};if(l.exportValue){let e=l.exportValue(t);return typeof e==`number`&&Number.isFinite(e)?u(e,f,m(l.format)):e instanceof Date?{t:`d`,value:e,numFmt:m(l.format)??`yyyy-mm-dd`,...f}:{t:`s`,value:e==null?``:String(e),...f}}let p=t[l.field];if(d?.icon){let e=n?String(p??``):c(p,l.format);return{t:`s`,value:`${d.icon} ${e}`,...f}}if(n)return typeof p==`number`&&Number.isFinite(p)?u(p,f):{t:`s`,value:p==null?``:String(p),...f};let h=s(p,l.format);return h.ok?h.value instanceof Date?{t:`d`,value:h.value,numFmt:m(l.format)??`yyyy-mm-dd`,...f}:u(h.value,f,m(l.format)):{t:`s`,value:c(p,l.format),...f}},f=[],p=t.length;for(let n=0;n<p;n++){if(a?.signal?.aborted)throw new DOMException(`Export aborted`,`AbortError`);let r=t[n];f.push(e.map((e,t)=>d(r,n,t))),n>0&&n%2e3==0&&(a?.onProgress?.({phase:`project`,ratio:n/p,row:n,total:p}),await new Promise(e=>setTimeout(e,0)))}return{header:o,cells:f}}async function Rn(e,t){await un(`xlsx`);let n=globalThis.JSZip;if(!n)throw Error(`@svgrid/enterprise: xlsx export requires the "jszip" peer dependency.`);let r=Z(e,t.rows);if(r.length===0)throw Error(`@svgrid/enterprise: nothing to export - the grid has no rows`);let i=Q(e,t,r),a=t.rawValues===!0,o=t.conditionalFormats??[],s=X(i,r,o.filter(e=>e.type===`rule`||e.type===`iconSet`)),c=On(i,r),l=[];for(let e of o){if(e.type!==`colorScale`&&e.type!==`dataBar`)continue;let t=e.columns&&e.columns.length>0?i.map((t,n)=>e.columns.includes(t.field)?n:-1).filter(e=>e>=0):i.map((e,t)=>t);for(let n of t)if(e.type===`dataBar`)l.push({kind:`dataBar`,colIdx:n,color:e.color});else{let t=e.min??`#ffffff`,r=e.max??`#000000`;l.push({kind:`colorScale`,colIdx:n,colors:e.mid?[t,e.mid,r]:[t,r]})}}if(t.signal?.aborted)throw new DOMException(`Export aborted`,`AbortError`);t.onProgress?.({phase:`write`,ratio:0,total:r.length});let{header:u,cells:d}=await Ln(i,r,a,s,c,{onProgress:t.onProgress,signal:t.signal,precisionSafe:t.precisionSafe}),f=t.autoFitColumns===!1?void 0:Tn(i,r,a),p=(t.filename??`grid`).trim()||`grid`,m;t.excelTable&&(m={name:`Table1`,totalsRow:typeof t.excelTable==`object`&&t.excelTable.totalsRow===!0,style:typeof t.excelTable==`object`?t.excelTable.style:void 0,totalsFns:i.map(e=>Nn(e)?`sum`:void 0)});let h=await At(kt({sheetName:p,header:u,rows:d,widths:f,freezeHeader:t.freezeHeader!==!1,freezeColumns:En(e,t,i),condFormats:l,table:m}),n);return t.onProgress?.({phase:`write`,ratio:1,total:r.length}),Cn(h,Sn(p,`xlsx`),`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,r.length,t.download)}async function zn(e,t){if(dt(`Export`),sn.includes(t.format))return jn(e,t);if(t.format===`xls`)return Mn(e,t);if(t.format===`pdf`)return In(e,t);if(t.format===`xlsx`){let n=t.autoGroup===!1?[]:(e.getState().grouping??[]).filter(e=>!!e),r=(t.groupBy?.length??0)>0||n.length>0,i=!!t.styles&&!t.conditionalFormats?.length;if(!t.sheets?.length&&!r&&!t.hierarchical&&!t.merges?.length&&!t.header?.length&&!t.footer?.length&&!t.imageFields?.length&&!i)return Rn(e,t)}await un(t.format);let n=await ln();if(t.sheets&&t.sheets.length>0){if(t.format!==`xlsx`)throw Error(`@svgrid/enterprise: multi-sheet export requires format 'xlsx', got '${t.format}'`);let r=t.rawValues===!0,i=t.sheets.map(n=>{let i=Q(e,{columns:n.columns??t.columns},n.rows),a=n.rows.map(e=>{let t={};for(let n of i)t[n.field]=dn(n,e,r);return t}),o=t.autoFitColumns===!1?null:Tn(i,n.rows,r);return{label:n.label,dataSource:a,columns:i.map((e,t)=>o?{dataField:e.field,label:e.header??e.field,width:o[t]}:{dataField:e.field,label:e.header??e.field}),dataFields:i.map(e=>e.field),style:pn(n.styles??t.styles)}}),a=(t.filename??`grid`).trim()||`grid`,o=bn(t),s=i[0],c=new n(o);c.spreadsheets=i,xn(c,t,s.dataFields);let l={};for(let e of s.columns)l[e.dataField]=e.label;let u=[l,...s.dataSource];if(t.download===!1)throw Error(`@svgrid/enterprise: download:false is not supported for multi-sheet xlsx.`);c.exportData(u,t.format,a);return}let r=Z(e,t.rows);if(r.length===0)throw Error(`@svgrid/enterprise: nothing to export - the grid has no rows`);let i=Q(e,t,r),a=await fn(r,i,t),o=(t.filename??`grid`).trim()||`grid`,s=i.map(e=>e.field),c=t.autoGroup!==!1&&!t.groupBy?.length&&!t.hierarchical?(e.getState().grouping??[]).filter(e=>!!e).map(e=>String(e)):[],l=t.groupBy?.length?t.groupBy:c.length>0?c:void 0,u=!t.hierarchical&&l?.length?l:void 0,d=bn(t);if(t.conditionalFormats?.length){let e=X(i,r,t.conditionalFormats),n={};for(let t=0;t<r.length;t++)for(let r=0;r<i.length;r++){let o=e(t,r);if(!o)continue;let s={};if(o.fill&&(s.backgroundColor=o.fill),o.color&&(s.color=o.color),o.bold&&(s.fontWeight=`bold`),Object.keys(s).length&&(n[Dn(r)+(t+2)]=s),o.icon){let e=a[t+1],n=i[r].field;e&&(e[n]=`${o.icon} ${e[n]??``}`)}}if(Object.keys(n).length){let e=d.style??{};d.style={...e,cells:{...e.cells??{},...n}}}}if(t.download===!1)throw Error(`@svgrid/enterprise: download:false is not supported for this xlsx export (grouped / merges / header / footer / images). Use a plain xlsx, xls, pdf, or a text format.`);if(t.signal?.aborted)throw new DOMException(`Export aborted`,`AbortError`);t.onProgress?.({phase:`write`,ratio:0,total:a.length-1});let f=new n(d,u);xn(f,t,s),f.exportData(a,t.format,o),t.onProgress?.({phase:`write`,ratio:1,total:a.length-1})}var Bn={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`};function $(e){return(e==null?``:String(e)).replace(/[&<>"']/g,e=>Bn[e])}function Vn(e){let{columns:t,rows:n}=e,r=e.cellStyle,i=e.cellLink,a=e.opts??{},o=a.orientation??`portrait`,s=a.pageSize?`${a.pageSize} ${o}`:o,c=a.margin??`14mm`,l=a.zebra??!0,u=a.zebraColor??`#f6f8fa`,d=a.headerColor??`#f1f5f9`,f=a.headerTextColor??`#0f172a`,p=a.fontSize??9,m=e=>e&&e!==`left`?` style="text-align:${e}"`:``,h=`<thead><tr>`+t.map(e=>`<th${m(e.align)}>${$(e.header)}</th>`).join(``)+`</tr></thead>`,g=(e,t,n,a)=>{let o=[];e.align&&e.align!==`left`&&o.push(`text-align:${e.align}`);let s=r?.(n,a);s?.fill&&o.push(`background:${s.fill}`),s?.color&&o.push(`color:${s.color}`),s?.bold&&o.push(`font-weight:700`);let c=o.length?` style="${o.join(`;`)}"`:``,l=s?.icon?`${$(s.icon)} ${$(t)}`:$(t),u=i?.(n,a);return u&&(l=`<a href="${$(u)}">${l}</a>`),`<td${c}>${l}</td>`},_=`<tbody>`+n.map((e,n)=>`<tr>`+t.map((t,r)=>g(t,e[r]??``,n,r)).join(``)+`</tr>`).join(``)+`</tbody>`,v=[];return a.logo&&v.push(`<img class="logo" src="${$(a.logo)}" alt="" />`),a.title&&v.push(`<h1>${$(a.title)}</h1>`),a.subtitle&&v.push(`<p class="subtitle">${$(a.subtitle)}</p>`),`<!DOCTYPE html>
41
+ <html><head><meta charset="utf-8"><title>${$(a.title??`Grid`)}</title>
42
+ <style>
43
+ @page { size: ${s}; margin: ${c}; }
44
+ @media print { body { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }
45
+ body { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; color: #111; margin: 0; }
46
+ .logo { max-height: ${a.logoWidth?``:`48px`}; width: ${a.logoWidth?`${a.logoWidth}px`:`auto`}; display: block; margin-bottom: 8px; }
47
+ h1 { font-size: 16pt; margin: 0 0 2px 0; }
48
+ .subtitle { font-size: 10pt; color: #64748b; margin: 0 0 10px 0; }
49
+ table { border-collapse: collapse; width: 100%; font-size: ${p}pt; }
50
+ thead { display: table-header-group; }
51
+ tr { break-inside: avoid; }
52
+ th, td { border: 1px solid #cbd5e1; padding: 4px 7px; text-align: left; }
53
+ th { background: ${d}; color: ${f}; font-weight: 700; }
54
+ ${l?`tbody tr:nth-child(even) { background: ${u}; }`:``}
55
+ </style></head>
56
+ <body>
57
+ ${v.join(`
58
+ `)}
59
+ <table>${h}${_}</table>
60
+ </body></html>`}async function Hn(e,t){if(dt(`Print`),typeof window>`u`)throw Error(`@svgrid/enterprise: print requires a browser environment`);let n=Z(e,t?.rows);if(n.length===0)throw Error(`@svgrid/enterprise: nothing to print - the grid has no rows`);let r=Q(e,{columns:t?.columns},n),i=r.map(e=>e.field),a=(await fn(n,r,{rawValues:t?.rawValues})).slice(1).map(e=>i.map(t=>String(e[t]??``))),o=r.map(e=>({header:e.header??e.field,align:e.align})),s={title:t?.title??`Grid`,subtitle:t?.subtitle,logo:t?.logo,orientation:t?.orientation??`portrait`,pageSize:t?.pageSize,margin:t?.margin,zebra:t?.zebra,headerColor:t?.headerColor},c=X(r,n,t?.conditionalFormats),l=Vn({columns:o,rows:a,cellStyle:(e,t)=>c(e,t),cellLink:On(r,n),opts:s}),u=window.open(``,`_blank`,`width=900,height=700`);if(!u)throw Error(`@svgrid/enterprise: print() could not open a window - the browser blocked the popup`);u.document.open(),u.document.write(l),u.document.close(),u.focus(),u.addEventListener(`load`,()=>{setTimeout(()=>u.print(),50)}),setTimeout(()=>{try{u.print()}catch{}},300)}var Un=t({ALL_VALUES:()=>ALL_VALUES,DATA_BAR_COLOR:()=>DATA_BAR_COLOR,DATA_BAR_NEGATIVE_COLOR:()=>DATA_BAR_NEGATIVE_COLOR,DEFAULT_ALERT_MESSAGE:()=>DEFAULT_ALERT_MESSAGE,DEFAULT_TABLE_STYLE:()=>DEFAULT_TABLE_STYLE,GRAND_TOTAL_ROW_ID:()=>GRAND_TOTAL_ROW_ID,GROUP_TOTAL_ROW_ID_PREFIX:()=>GROUP_TOTAL_ROW_ID_PREFIX,NO_TABLE_STYLE:()=>NO_TABLE_STYLE,PROTECTED_MESSAGE:()=>PROTECTED_MESSAGE,countReducer:()=>countReducer,exportGrid:()=>zn,printGrid:()=>Hn});export{x as _,G as a,v as b,ee as c,oe as d,se as f,I as g,ce as h,ut as i,V as l,ye as m,ot as n,y as o,fe as p,st as r,S as s,Un as t,le as u,C as v,te as y};
@@ -4,19 +4,24 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>SvGrid Studio - Designer</title>
7
- <script type="module" crossorigin src="./assets/index-PEFkd-5C.js"></script>
7
+ <script type="module" crossorigin src="./assets/index-DPk7cZrl.js"></script>
8
8
  <link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-Dd_uD5pT.js">
9
9
  <link rel="modulepreload" crossorigin href="./assets/disclose-version-CIm4S9xS.js">
10
10
  <link rel="modulepreload" crossorigin href="./assets/cell-formatting-JoxA0t65.js">
11
- <link rel="modulepreload" crossorigin href="./assets/SvGrid.helpers-BF2QRcNt.js">
11
+ <link rel="modulepreload" crossorigin href="./assets/conditional-formatting-MDWbF8_Y.js">
12
+ <link rel="modulepreload" crossorigin href="./assets/csv-injection-C4a0uulO.js">
13
+ <link rel="modulepreload" crossorigin href="./assets/export-format-NYxEY-0Y.js">
14
+ <link rel="modulepreload" crossorigin href="./assets/column-types-Bl5R-97G.js">
15
+ <link rel="modulepreload" crossorigin href="./assets/preload-helper-HclGiUj8.js">
16
+ <link rel="modulepreload" crossorigin href="./assets/src-sFRH_up7.js">
12
17
  <link rel="modulepreload" crossorigin href="./assets/sv-grid-scrollbar-B9N6Wuj0.js">
13
18
  <link rel="modulepreload" crossorigin href="./assets/grid-extension.svelte-G1ng0xd2.js">
19
+ <link rel="modulepreload" crossorigin href="./assets/SvGrid.helpers-DHkH3mHW.js">
14
20
  <link rel="modulepreload" crossorigin href="./assets/editor-contract-Bpoa7A5g.js">
15
21
  <link rel="modulepreload" crossorigin href="./assets/date-format-B8JbEtIG.js">
16
22
  <link rel="modulepreload" crossorigin href="./assets/list-option-BP_dWS66.js">
17
23
  <link rel="modulepreload" crossorigin href="./assets/SvListBox-fn160gSB.js">
18
24
  <link rel="modulepreload" crossorigin href="./assets/editor-registry-BjP16H0v.js">
19
- <link rel="modulepreload" crossorigin href="./assets/preload-helper-HclGiUj8.js">
20
25
  <link rel="modulepreload" crossorigin href="./assets/popover-CUkLsvRX.js">
21
26
  <link rel="modulepreload" crossorigin href="./assets/SvGridDropdown-Cjz0H-fI.js">
22
27
  <link rel="modulepreload" crossorigin href="./assets/dismissable-ChWRPkoa.js">
@@ -27,16 +32,12 @@
27
32
  <link rel="modulepreload" crossorigin href="./assets/SvMenuList-Dgq2D5VN.js">
28
33
  <link rel="modulepreload" crossorigin href="./assets/chart-trend-_gDVw3bP.js">
29
34
  <link rel="modulepreload" crossorigin href="./assets/chart-Bmu-KAet.js">
30
- <link rel="modulepreload" crossorigin href="./assets/csv-injection-C4a0uulO.js">
31
35
  <link rel="modulepreload" crossorigin href="./assets/chart-export-Dqq_eHRq.js">
32
36
  <link rel="modulepreload" crossorigin href="./assets/SvGridChart-DzCeEdlb.js">
33
37
  <link rel="modulepreload" crossorigin href="./assets/chart-panel-messages-B3y8y3kL.js">
34
38
  <link rel="modulepreload" crossorigin href="./assets/SvGridChartPanel-Dj3IxTS2.js">
35
39
  <link rel="modulepreload" crossorigin href="./assets/sparkline-C-NcnB2i.js">
36
40
  <link rel="modulepreload" crossorigin href="./assets/server-block-cache-CXJKkJpy.js">
37
- <link rel="modulepreload" crossorigin href="./assets/conditional-formatting-MDWbF8_Y.js">
38
- <link rel="modulepreload" crossorigin href="./assets/export-format-NYxEY-0Y.js">
39
- <link rel="modulepreload" crossorigin href="./assets/src-DC5nN4Q7.js">
40
41
  <link rel="stylesheet" crossorigin href="./assets/date-format-DKS-z0xS.css">
41
42
  <link rel="stylesheet" crossorigin href="./assets/SvListBox-BXfyqy4a.css">
42
43
  <link rel="stylesheet" crossorigin href="./assets/SvGridDropdown-CcidB3rm.css">
@@ -21,6 +21,8 @@ export type ExportCellVisual = {
21
21
  bold?: boolean;
22
22
  /** Icon-set glyph to prepend to the cell text. */
23
23
  icon?: string;
24
+ /** The icon set's `iconOnly`: show the icon instead of the value. */
25
+ iconOnly?: boolean;
24
26
  };
25
27
  export type ExportCellVisualFn = (rowIdx: number, colIdx: number) => ExportCellVisual | undefined;
26
28
  /**
@@ -37,6 +37,8 @@ function toVisual(resolved) {
37
37
  }
38
38
  if (resolved.icon)
39
39
  v.icon = resolved.icon;
40
+ if (resolved.icon && resolved.iconOnly)
41
+ v.iconOnly = true;
40
42
  return Object.keys(v).length > 0 ? v : undefined;
41
43
  }
42
44
  /**
@@ -123,7 +123,86 @@ export type PdfExportOptions = {
123
123
  * read.
124
124
  */
125
125
  matchTheme?: boolean;
126
+ /**
127
+ * What to do when the columns do not fit across the page.
128
+ * - `'auto'` (default): shrink the table text, down to three quarters of
129
+ * `fontSize`; past that, split the columns over several pages.
130
+ * - `'shrink'`: only shrink, down to 4 pt.
131
+ * - `'split'`: only split.
132
+ * - `'none'`: leave it to pdfmake, which lets a wide table run off the page.
133
+ */
134
+ fit?: 'auto' | 'shrink' | 'split' | 'none';
135
+ /** When the columns are split over pages, how many leading columns repeat on every page. Default 1. */
136
+ repeatColumns?: number;
137
+ /** A grouped export ends with a total row over every row. Default true. */
138
+ grandTotal?: boolean;
139
+ /**
140
+ * The words the PDF prints itself, for another language or house style:
141
+ * the page footer, the footer date, a group's subtotal label, and the total
142
+ * row's label.
143
+ */
144
+ labels?: {
145
+ page?: (page: number, pages: number) => string;
146
+ date?: (now: Date) => string;
147
+ subtotal?: (group: string) => string;
148
+ total?: string;
149
+ };
150
+ /** Text printed large and faint across every page: "DRAFT", "CONFIDENTIAL". */
151
+ watermark?: string | {
152
+ text: string;
153
+ color?: string;
154
+ opacity?: number;
155
+ };
156
+ /** Author recorded in the PDF's document properties. */
157
+ author?: string;
158
+ /**
159
+ * Render in a worker instead of on the page: a function returning a new
160
+ * Worker whose script calls `servePdfWorker()` from
161
+ * `@svgrid/enterprise/pdf-worker`. A large export then keeps the page
162
+ * responsive and reports progress. A `labels.page` function reaches the
163
+ * worker as a template: it is called once with stand-in numbers, so it must
164
+ * print them as given.
165
+ */
166
+ worker?: () => PdfWorkerLike;
167
+ /**
168
+ * A font to print with instead of Roboto, which has no Chinese, Japanese,
169
+ * Korean, Arabic, Hebrew, Thai or Indic characters (they print as empty
170
+ * boxes). Each file is the font's base64 data or a URL pdfmake can fetch.
171
+ * It must cover Latin too: the whole document uses it.
172
+ */
173
+ font?: PdfFont;
174
+ };
175
+ /** What `pdf.worker` returns: a Worker, or anything that talks like one. */
176
+ export type PdfWorkerLike = {
177
+ postMessage(message: unknown): void;
178
+ addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
179
+ addEventListener(type: 'error', listener: (event: ErrorEvent) => void): void;
180
+ terminate(): void;
181
+ };
182
+ /** A TrueType / OpenType font for the PDF. Missing styles fall back to `normal`. */
183
+ export type PdfFont = {
184
+ name: string;
185
+ normal: string;
186
+ bold?: string;
187
+ italics?: string;
188
+ bolditalics?: string;
126
189
  };
190
+ /**
191
+ * Register `font` with pdfmake next to Roboto. Base64 files go into the
192
+ * virtual file system, merged with what is there (`addVirtualFileSystem`
193
+ * replaces the map rather than adding to it); URLs are passed through for
194
+ * pdfmake to fetch.
195
+ */
196
+ export declare function registerPdfFont(pdfMake: PdfMakeLike & {
197
+ fonts?: Record<string, unknown>;
198
+ addFonts?: (fonts: Record<string, unknown>) => void;
199
+ }, font: PdfFont): void;
200
+ /**
201
+ * Text Roboto has no glyphs for: CJK, Hangul, Arabic, Hebrew, Thai, the Indic
202
+ * scripts, dingbats (check marks, stars) and emoji. Exported so an export can
203
+ * warn that it needs `pdf.font`.
204
+ */
205
+ export declare const PDF_ROBOTO_MISSING: RegExp;
127
206
  /** One cell's look, the same keys `ExportCellStyle` has. */
128
207
  export type PdfCellStyle = {
129
208
  color?: string;
@@ -217,7 +296,8 @@ export declare function resolvePdfCharts(charts: ReadonlyArray<PdfChart> | undef
217
296
  */
218
297
  export type PdfBodyRow = {
219
298
  kind: 'data';
220
- cells: ReadonlyArray<string>;
299
+ cells: ReadonlyArray<string>; /** The row's index in the exported rows. */
300
+ source?: number;
221
301
  } | {
222
302
  kind: 'group';
223
303
  label: string;
@@ -226,21 +306,52 @@ export type PdfBodyRow = {
226
306
  kind: 'subtotal';
227
307
  cells: ReadonlyArray<string>;
228
308
  };
229
- export type PdfDocDefinition = {
309
+ /** A table's look, as data; {@link hydratePdfDoc} turns it into pdfmake's layout callbacks. */
310
+ export type PdfLayoutSpec = {
311
+ kind: 'table';
312
+ stripes: number[];
313
+ zebraColor: string;
314
+ lineColor: string;
315
+ } | {
316
+ kind: 'kpi';
317
+ };
318
+ /** The document as plain data, safe to post to a worker. */
319
+ export type PdfDocData = {
230
320
  pageSize: PdfPageSize;
231
321
  pageOrientation: 'portrait' | 'landscape';
232
322
  pageMargins: [number, number, number, number];
233
323
  defaultStyle: {
234
324
  fontSize: number;
325
+ font?: string;
235
326
  };
236
327
  content: unknown[];
328
+ watermark?: {
329
+ text: string;
330
+ color: string;
331
+ opacity: number;
332
+ bold: boolean;
333
+ };
334
+ /** The PDF's document properties, which a viewer shows in place of the file name. */
335
+ info?: {
336
+ title?: string;
337
+ author?: string;
338
+ subject?: string;
339
+ creator: string;
340
+ creationDate: Date;
341
+ };
342
+ /** The footer, as data: margins, the date text, and a page template with `{page}` / `{pages}`. */
343
+ svgridFooter?: {
344
+ margin: number[];
345
+ date: string;
346
+ page: string;
347
+ };
348
+ };
349
+ /** The document pdfmake renders: the data with its layouts and footer as functions. */
350
+ export type PdfDocDefinition = PdfDocData & {
237
351
  footer?: (currentPage: number, pageCount: number) => unknown;
238
352
  };
239
- /**
240
- * Build a pdfmake docDefinition from resolved columns + formatted string rows.
241
- * `now` is injected for a deterministic footer date in tests.
242
- */
243
- export declare function buildPdfDocDefinition(params: {
353
+ /** What the PDF table is built from. `now` is injected for a deterministic footer date in tests. */
354
+ export type PdfDocParams = {
244
355
  columns: ReadonlyArray<{
245
356
  header: string;
246
357
  align?: 'left' | 'center' | 'right';
@@ -257,6 +368,8 @@ export declare function buildPdfDocDefinition(params: {
257
368
  fill?: string;
258
369
  color?: string;
259
370
  bold?: boolean;
371
+ icon?: string;
372
+ iconOnly?: boolean;
260
373
  } | undefined;
261
374
  /** Per-data-cell hyperlink URL. */
262
375
  dataCellLink?: (dataRowIdx: number, colIdx: number) => string | undefined;
@@ -276,4 +389,26 @@ export declare function buildPdfDocDefinition(params: {
276
389
  /** Merged data cells; ignored with a structured `body`, whose rows own the layout. */
277
390
  merges?: ReadonlyArray<PdfMerge>;
278
391
  now?: Date;
392
+ };
393
+ /**
394
+ * Build the pdfmake document from resolved columns + formatted string rows,
395
+ * as plain data: no functions, so it can be posted to a worker. Hand it to
396
+ * {@link hydratePdfDoc} before pdfmake sees it, or use
397
+ * {@link buildPdfDocDefinition}, which does both.
398
+ */
399
+ export declare function buildPdfDocData(params: PdfDocParams): PdfDocData;
400
+ /**
401
+ * Build the pdfmake document for a table and hand it over ready to render.
402
+ * Same as {@link buildPdfDocData}, with its layouts and footer turned into
403
+ * the functions pdfmake calls.
404
+ */
405
+ export declare function buildPdfDocDefinition(params: PdfDocParams): PdfDocDefinition;
406
+ /**
407
+ * Give a document from {@link buildPdfDocData} the functions pdfmake calls:
408
+ * each table's fill and line callbacks and the page footer. Runs where the
409
+ * PDF is rendered, which may be a worker the functions could not be sent to.
410
+ * `page` overrides the footer's page template with the caller's own function.
411
+ */
412
+ export declare function hydratePdfDoc(doc: PdfDocData, opts?: {
413
+ page?: (page: number, pages: number) => string;
279
414
  }): PdfDocDefinition;