@verifiedinc-public/shared-ui-elements 12.20.0 → 12.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -60,6 +60,7 @@ export interface DataTableContextValue<TData extends DataTableData> {
60
60
  exportRowDetails?: DataTableExportRowDetails<TData>;
61
61
  exportRecord?: (row: TData) => unknown;
62
62
  enableJsonExport?: boolean;
63
+ cspNonce?: string;
63
64
  disablePagination: boolean;
64
65
  pageSizeOptions: number[];
65
66
  footerLeft?: ReactNode;
@@ -5,4 +5,4 @@ import { DataTableData, DataTableProps } from './DataTable.types';
5
5
  * footer, floating panels) through DataTableProvider, and renders the
6
6
  * layout shell around them.
7
7
  */
8
- export declare function DataTable<TData extends DataTableData>({ data, columns, getRowId, renderRow, initialSorting, sorting: controlledSorting, onSortingChange, manualSorting, initialPageSize, pageSizeOptions, pagination: controlledPagination, onPaginationChange, manualPagination, rowCount, disableSorting, disablePagination, bidirectionalScroll, enableColumnResizing, enableColumnMenu, enableColumnPinning, pinFirstColumn, showToolbar, enableExport, exportFilename, additionalExportColumns, exportRowDetails, exportRecord, enableJsonExport, manualFiltering, filterFields, initialFilterState, filterState: controlledFilterState, onFilterStateChange, initialSearch, search: controlledSearch, onSearchChange, initialColumnVisibility, columnVisibility: controlledColumnVisibility, onColumnVisibilityChange, initialColumnPinning, columnPinning: controlledColumnPinning, onColumnPinningChange, footerLeft, estimateRowHeight, minWidth, maxHeight, tableLayout, icons, emptyMessage, isLoading, renderLoading, }: Readonly<DataTableProps<TData>>): import("react").JSX.Element;
8
+ export declare function DataTable<TData extends DataTableData>({ data, columns, getRowId, renderRow, initialSorting, sorting: controlledSorting, onSortingChange, manualSorting, initialPageSize, pageSizeOptions, pagination: controlledPagination, onPaginationChange, manualPagination, rowCount, disableSorting, disablePagination, bidirectionalScroll, enableColumnResizing, enableColumnMenu, enableColumnPinning, pinFirstColumn, showToolbar, enableExport, exportFilename, additionalExportColumns, exportRowDetails, exportRecord, enableJsonExport, cspNonce, manualFiltering, filterFields, initialFilterState, filterState: controlledFilterState, onFilterStateChange, initialSearch, search: controlledSearch, onSearchChange, initialColumnVisibility, columnVisibility: controlledColumnVisibility, onColumnVisibilityChange, initialColumnPinning, columnPinning: controlledColumnPinning, onColumnPinningChange, footerLeft, estimateRowHeight, minWidth, maxHeight, tableLayout, icons, emptyMessage, isLoading, renderLoading, }: Readonly<DataTableProps<TData>>): import("react").JSX.Element;
@@ -79,8 +79,15 @@ export declare function exportDataTableToJson(model: DataTableExportModel, filen
79
79
  /** Downloads the export snapshot as `<filename>.xlsx`. */
80
80
  export declare function exportDataTableToExcel(model: DataTableExportModel, filename: string): void;
81
81
  /**
82
- * Opens the browser print dialog with a print-friendly rendering of the
83
- * export snapshot (via a hidden iframe, so the page itself never
84
- * navigates). The title becomes the printed document name.
82
+ * Opens the browser print dialog with a print-friendly rendering of the export snapshot (via a
83
+ * hidden iframe, so the page itself never navigates). The title becomes the printed document
84
+ * name.
85
+ *
86
+ * The iframe inherits the page's Content Security Policy. Under a nonce-based `style-src` the
87
+ * document's stylesheet needs that nonce, which is taken from the page unless `options.nonce`
88
+ * supplies it; the markup carries presentational attributes either way, so a refused stylesheet
89
+ * still prints a legible table.
85
90
  */
86
- export declare function printDataTable(model: DataTableExportModel, title: string): void;
91
+ export declare function printDataTable(model: DataTableExportModel, title: string, options?: {
92
+ nonce?: string;
93
+ }): void;
@@ -1,6 +1,6 @@
1
- "use strict";import{getColumnLabel as w}from"./DataTable.utils.mjs";function g(e){return e==null?"":typeof e=="number"||typeof e=="boolean"?e:e instanceof Date?e.toLocaleString():typeof e=="object"?JSON.stringify(e):String(e)}function U(e,n=[],{rowDetails:t,toRecord:r}={}){const a=e.getVisibleLeafColumns().filter(o=>o.accessorFn!==void 0),m=n.filter(o=>o.position==="start"),i=n.filter(o=>o.position!=="start"),l=a.map(o=>{var s;const f=(s=o.parent)==null?void 0:s.columnDef.header;return typeof f=="string"?f:""}),c=l.some(o=>o!=="")?m.map(()=>"").concat(l.map((o,s)=>s>0&&l[s-1]===o?"":o),i.map(()=>"")):void 0,p=e.getPrePaginationRowModel().rows;return{groupHeader:c,rowDetails:t?p.map(o=>t(o.original)):void 0,records:p.map(o=>r?r(o.original):o.original),header:[...m.map(o=>o.header),...a.map(o=>w(o)),...i.map(o=>o.header)],rows:p.map(o=>[...m.map(s=>g(s.value(o.original))),...a.map(s=>g(o.getValue(s.id))),...i.map(s=>g(s.value(o.original)))])}}function x(e,n){const t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download=n,r.click(),URL.revokeObjectURL(t)}const v=/^[=+\-@\t\r]/;function k(e){let n=String(e);return typeof e=="string"&&n.length>1&&v.test(n)&&(n=`'${n}`),/[",\n\r]/.test(n)?`"${n.replace(/"/g,'""')}"`:n}function $(e){return e.rows.length>0?e.rows:e.emptyMessage?[[e.emptyMessage]]:[]}function D(e){return e.lines??e.rows.map(n=>n.map(String).filter(Boolean).join(" "))}function T(e){const n=[],t=new Set;for(const r of e.rowDetails??[])for(const a of r)n.includes(a.title)||n.push(a.title),a.rows.length>0&&t.add(a.title);return n.filter(r=>t.has(r))}function b(e){const n=T(e),t=e.rows.map((a,m)=>{var i;const l=((i=e.rowDetails)==null?void 0:i[m])??[];return[...a,...n.map(c=>{const p=l.find(o=>o.title===c);return p?D(p).join(`
2
- `):""})]}),r=e.groupHeader?[...e.groupHeader,...n.map(()=>"")]:void 0;return[...r?[r]:[],[...e.header,...n],...t]}function j(e,n){const t=b(e).map(a=>a.map(k).join(",")),r=new Blob(["\uFEFF",t.join(`
3
- `)],{type:"text/csv;charset=utf-8;"});x(r,`${n}.csv`)}function R(e,n){const t=new Blob([JSON.stringify(e.records??[],null,2)],{type:"application/json;charset=utf-8;"});x(t,`${n}.json`)}function u(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function S(e){let n="",t=e+1;for(;t>0;)n=String.fromCharCode(65+(t-1)%26)+n,t=Math.floor((t-1)/26);return n}function C(e){return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>${b(e).map((n,t)=>{const r=n.map((a,m)=>{const i=`${S(m)}${t+1}`;return typeof a=="number"&&Number.isFinite(a)?`<c r="${i}"><v>${a}</v></c>`:typeof a=="boolean"?`<c r="${i}" t="b"><v>${a?1:0}</v></c>`:`<c r="${i}" t="inlineStr"><is><t xml:space="preserve">${u(String(a))}</t></is></c>`}).join("");return`<row r="${t+1}">${r}</row>`}).join("")}</sheetData></worksheet>`}const A=[{name:"[Content_Types].xml",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><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"/></Types>'},{name:"_rels/.rels",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><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>'},{name:"xl/workbook.xml",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets><sheet name="Data" sheetId="1" r:id="rId1"/></sheets></workbook>'},{name:"xl/_rels/workbook.xml.rels",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><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"/></Relationships>'}],F=(()=>{const e=new Uint32Array(256);for(let n=0;n<256;n++){let t=n;for(let r=0;r<8;r++)t=t&1?3988292384^t>>>1:t>>>1;e[n]=t>>>0}return e})();function E(e){let n=4294967295;for(let t=0;t<e.length;t++)n=F[(n^e[t])&255]^n>>>8;return(n^4294967295)>>>0}function B(e){const n=new TextEncoder,t=[],r=[];let a=0;for(const o of e){const s=n.encode(o.name),f=n.encode(o.content),y=E(f),h=new DataView(new ArrayBuffer(30));h.setUint32(0,67324752,!0),h.setUint16(4,20,!0),h.setUint16(6,2048,!0),h.setUint16(8,0,!0),h.setUint16(10,0,!0),h.setUint16(12,33,!0),h.setUint32(14,y,!0),h.setUint32(18,f.length,!0),h.setUint32(22,f.length,!0),h.setUint16(26,s.length,!0),h.setUint16(28,0,!0),t.push(new Uint8Array(h.buffer),s,f);const d=new DataView(new ArrayBuffer(46));d.setUint32(0,33639248,!0),d.setUint16(4,20,!0),d.setUint16(6,20,!0),d.setUint16(8,2048,!0),d.setUint16(10,0,!0),d.setUint16(12,0,!0),d.setUint16(14,33,!0),d.setUint32(16,y,!0),d.setUint32(20,f.length,!0),d.setUint32(24,f.length,!0),d.setUint16(28,s.length,!0),d.setUint32(42,a,!0),r.push(new Uint8Array(d.buffer),s),a+=30+s.length+f.length}const m=r.reduce((o,s)=>o+s.length,0),i=new DataView(new ArrayBuffer(22));i.setUint32(0,101010256,!0),i.setUint16(8,e.length,!0),i.setUint16(10,e.length,!0),i.setUint32(12,m,!0),i.setUint32(16,a,!0);const l=new Uint8Array(i.buffer),c=new Uint8Array(a+m+l.length);let p=0;for(const o of[...t,...r,l])c.set(o,p),p+=o.length;return c.buffer}function L(e,n){const t=B([...A,{name:"xl/worksheets/sheet1.xml",content:C(e)}]);x(new Blob([t],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),`${n}.xlsx`)}function I(e,n){const t=(l,c)=>`<tr>${l.map(p=>`<${c}${typeof p=="number"?' class="num"':""}>${u(String(p))}</${c}>`).join("")}</tr>`,r=[...e.groupHeader?[t(e.groupHeader,"th")]:[],t(e.header,"th")].join(""),a=(l,c)=>{const p=$(l);if(p.length===0)return"";const o=l.header&&l.rows.length>0?`<thead>${t(l.header,"th")}</thead>`:"";return`<tr class="detail"><td colspan="${c}"><div class="section"><h2>${u(l.title)}</h2><table class="nested">${o}<tbody>${p.map(s=>t(s,"td")).join("")}</tbody></table></div></td></tr>`},m=e.header.length,i=e.rows.map((l,c)=>{var p;return t(l,"td")+(((p=e.rowDetails)==null?void 0:p[c])??[]).map(o=>a(o,m)).join("")}).join("");return`<!doctype html><html><head><meta charset="utf-8"><title>${u(n)}</title><style>
1
+ "use strict";import{getColumnLabel as w}from"./DataTable.utils.mjs";function x(t){return t==null?"":typeof t=="number"||typeof t=="boolean"?t:t instanceof Date?t.toLocaleString():typeof t=="object"?JSON.stringify(t):String(t)}function U(t,e=[],{rowDetails:o,toRecord:n}={}){const s=t.getVisibleLeafColumns().filter(r=>r.accessorFn!==void 0),d=e.filter(r=>r.position==="start"),i=e.filter(r=>r.position!=="start"),f=s.map(r=>{var a;const c=(a=r.parent)==null?void 0:a.columnDef.header;return typeof c=="string"?c:""}),h=f.some(r=>r!=="")?d.map(()=>"").concat(f.map((r,a)=>a>0&&f[a-1]===r?"":r),i.map(()=>"")):void 0,l=t.getPrePaginationRowModel().rows;return{groupHeader:h,rowDetails:o?l.map(r=>o(r.original)):void 0,records:l.map(r=>n?n(r.original):r.original),header:[...d.map(r=>r.header),...s.map(r=>w(r)),...i.map(r=>r.header)],rows:l.map(r=>[...d.map(a=>x(a.value(r.original))),...s.map(a=>x(r.getValue(a.id))),...i.map(a=>x(a.value(r.original)))])}}function y(t,e){const o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download=e,n.click(),URL.revokeObjectURL(o)}const v=/^[=+\-@\t\r]/;function k(t){let e=String(t);return typeof t=="string"&&e.length>1&&v.test(e)&&(e=`'${e}`),/[",\n\r]/.test(e)?`"${e.replace(/"/g,'""')}"`:e}function $(t){return t.rows.length>0?t.rows:t.emptyMessage?[[t.emptyMessage]]:[]}function D(t){return t.lines??t.rows.map(e=>e.map(String).filter(Boolean).join(" "))}function T(t){const e=[],o=new Set;for(const n of t.rowDetails??[])for(const s of n)e.includes(s.title)||e.push(s.title),s.rows.length>0&&o.add(s.title);return e.filter(n=>o.has(n))}function b(t){const e=T(t),o=t.rows.map((s,d)=>{var i;const f=((i=t.rowDetails)==null?void 0:i[d])??[];return[...s,...e.map(h=>{const l=f.find(r=>r.title===h);return l?D(l).join(`
2
+ `):""})]}),n=t.groupHeader?[...t.groupHeader,...e.map(()=>"")]:void 0;return[...n?[n]:[],[...t.header,...e],...o]}function _(t,e){const o=b(t).map(s=>s.map(k).join(",")),n=new Blob(["\uFEFF",o.join(`
3
+ `)],{type:"text/csv;charset=utf-8;"});y(n,`${e}.csv`)}function j(t,e){const o=new Blob([JSON.stringify(t.records??[],null,2)],{type:"application/json;charset=utf-8;"});y(o,`${e}.json`)}function u(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function S(t){let e="",o=t+1;for(;o>0;)e=String.fromCharCode(65+(o-1)%26)+e,o=Math.floor((o-1)/26);return e}function R(t){return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>${b(t).map((e,o)=>{const n=e.map((s,d)=>{const i=`${S(d)}${o+1}`;return typeof s=="number"&&Number.isFinite(s)?`<c r="${i}"><v>${s}</v></c>`:typeof s=="boolean"?`<c r="${i}" t="b"><v>${s?1:0}</v></c>`:`<c r="${i}" t="inlineStr"><is><t xml:space="preserve">${u(String(s))}</t></is></c>`}).join("");return`<row r="${o+1}">${n}</row>`}).join("")}</sheetData></worksheet>`}const A=[{name:"[Content_Types].xml",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><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"/></Types>'},{name:"_rels/.rels",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><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>'},{name:"xl/workbook.xml",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets><sheet name="Data" sheetId="1" r:id="rId1"/></sheets></workbook>'},{name:"xl/_rels/workbook.xml.rels",content:'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><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"/></Relationships>'}],C=(()=>{const t=new Uint32Array(256);for(let e=0;e<256;e++){let o=e;for(let n=0;n<8;n++)o=o&1?3988292384^o>>>1:o>>>1;t[e]=o>>>0}return t})();function F(t){let e=4294967295;for(let o=0;o<t.length;o++)e=C[(e^t[o])&255]^e>>>8;return(e^4294967295)>>>0}function B(t){const e=new TextEncoder,o=[],n=[];let s=0;for(const r of t){const a=e.encode(r.name),c=e.encode(r.content),g=F(c),m=new DataView(new ArrayBuffer(30));m.setUint32(0,67324752,!0),m.setUint16(4,20,!0),m.setUint16(6,2048,!0),m.setUint16(8,0,!0),m.setUint16(10,0,!0),m.setUint16(12,33,!0),m.setUint32(14,g,!0),m.setUint32(18,c.length,!0),m.setUint32(22,c.length,!0),m.setUint16(26,a.length,!0),m.setUint16(28,0,!0),o.push(new Uint8Array(m.buffer),a,c);const p=new DataView(new ArrayBuffer(46));p.setUint32(0,33639248,!0),p.setUint16(4,20,!0),p.setUint16(6,20,!0),p.setUint16(8,2048,!0),p.setUint16(10,0,!0),p.setUint16(12,0,!0),p.setUint16(14,33,!0),p.setUint32(16,g,!0),p.setUint32(20,c.length,!0),p.setUint32(24,c.length,!0),p.setUint16(28,a.length,!0),p.setUint32(42,s,!0),n.push(new Uint8Array(p.buffer),a),s+=30+a.length+c.length}const d=n.reduce((r,a)=>r+a.length,0),i=new DataView(new ArrayBuffer(22));i.setUint32(0,101010256,!0),i.setUint16(8,t.length,!0),i.setUint16(10,t.length,!0),i.setUint32(12,d,!0),i.setUint32(16,s,!0);const f=new Uint8Array(i.buffer),h=new Uint8Array(s+d+f.length);let l=0;for(const r of[...o,...n,f])h.set(r,l),l+=r.length;return h.buffer}function E(t,e){const o=B([...A,{name:"xl/worksheets/sheet1.xml",content:R(t)}]);y(new Blob([o],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),`${e}.xlsx`)}function L(){if(typeof document>"u")return;const t=window;if(t.__nonce__)return t.__nonce__;if(t.__webpack_nonce__)return t.__webpack_nonce__;const e=document.querySelector('meta[name="csp-nonce"], meta[property="csp-nonce"]');if(e!=null&&e.content)return e.content;const o=document.querySelectorAll("style[nonce], link[nonce], script[nonce]");for(const n of o){const s=n.nonce??n.getAttribute("nonce");if(s)return s}}function I(t,e,o){const n=(l,r)=>`<tr>${l.map(a=>`<${r}${typeof a=="number"?' class="num" align="right"':""}>${u(String(a))}</${r}>`).join("")}</tr>`,s=[...t.groupHeader?[n(t.groupHeader,"th")]:[],n(t.header,"th")].join(""),d=(l,r)=>{const a=$(l);if(a.length===0)return"";const c=l.header&&l.rows.length>0?`<thead>${n(l.header,"th")}</thead>`:"";return`<tr class="detail"><td colspan="${r}"><div class="section"><p class="section-title"><b>${u(l.title)}</b></p><table class="nested" cellpadding="4" cellspacing="0">${c}<tbody>${a.map(g=>n(g,"td")).join("")}</tbody></table></div></td></tr>`},i=t.header.length,f=t.rows.map((l,r)=>{var a;return n(l,"td")+(((a=t.rowDetails)==null?void 0:a[r])??[]).map(c=>d(c,i)).join("")}).join(""),h=o?` nonce="${u(o)}"`:"";return`<!doctype html><html><head><meta charset="utf-8"><title>${u(e)}</title><style${h}>
4
4
  body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; margin: 16px; }
5
5
  table { border-collapse: collapse; width: 100%; font-size: 12px; }
6
6
  th, td { padding: 6px 8px; border-bottom: 1px solid #ddd; text-align: left; }
@@ -10,10 +10,10 @@ th { text-transform: uppercase; font-size: 10px; }
10
10
  tbody > tr:not(.detail) > td { font-weight: 600; }
11
11
  tr.detail > td { padding: 0 8px 10px 24px; border-bottom: 1px solid #ddd; }
12
12
  tr.detail .section { margin-top: 8px; }
13
- tr.detail h2 { margin: 0 0 4px; font-size: 10px; text-transform: uppercase; color: #555; }
13
+ tr.detail .section-title { margin: 0 0 4px; font-size: 10px; text-transform: uppercase; color: #555; }
14
14
  table.nested { width: auto; min-width: 60%; font-size: 11px; }
15
15
  table.nested th, table.nested td { padding: 3px 8px; border-bottom: 1px solid #eee; }
16
16
  /* A rule and its details stay on one page where they fit. */
17
17
  tbody > tr:not(.detail) { page-break-inside: avoid; }
18
18
  tr.detail { page-break-inside: avoid; }
19
- </style></head><body><table><thead>${r}</thead><tbody>${i}</tbody></table></body></html>`}function H(e,n){const t=document.createElement("iframe");t.style.position="fixed",t.style.right="0",t.style.bottom="0",t.style.width="0",t.style.height="0",t.style.border="0",t.onload=()=>{const r=t.contentWindow;if(!r){t.remove();return}r.addEventListener("afterprint",()=>t.remove()),r.focus(),r.print()},t.srcdoc=I(e,n),document.body.appendChild(t)}export{j as exportDataTableToCsv,L as exportDataTableToExcel,R as exportDataTableToJson,U as getDataTableExportModel,H as printDataTable};
19
+ </style></head><body><table cellpadding="6" cellspacing="0"><thead>${s}</thead><tbody>${f}</tbody></table></body></html>`}function H(t,e,o={}){const n=document.createElement("iframe");n.style.position="fixed",n.style.right="0",n.style.bottom="0",n.style.width="0",n.style.height="0",n.style.border="0",n.onload=()=>{const s=n.contentWindow;if(!s){n.remove();return}s.addEventListener("afterprint",()=>n.remove()),s.focus(),s.print()},n.srcdoc=I(t,e,o.nonce??L()),document.body.appendChild(n)}export{_ as exportDataTableToCsv,E as exportDataTableToExcel,j as exportDataTableToJson,U as getDataTableExportModel,H as printDataTable};
@@ -1 +1 @@
1
- "use strict";import{useRef as x,useMemo as V,useState as ie,useEffect as ct}from"react";import{useReactTable as ht,getPaginationRowModel as pt,getSortedRowModel as bt,getCoreRowModel as Ct}from"@tanstack/react-table";import{useVirtualizer as Rt}from"@tanstack/react-virtual";import{Box as wt,TableContainer as St,Table as xt}from"@mui/material";import{useBidirectionalScroll as Pt}from"../../hooks/useBidirectionalScroll.mjs";import{DataTableProvider as vt}from"./DataTable.context.mjs";import{useControllableState as m,useHeaderRowTops as yt,useStickyHeaderHeight as Lt,usePinnedOffsets as zt}from"./DataTable.hooks.mjs";import{getLeafAccessorsById as Tt,applySearch as Mt}from"./DataTable.filters.mjs";import{buildInitialFilterState as Ht,applyFieldFilters as Ft}from"./DataTable.filterState.mjs";import{inferColumns as ae,applyMetaWidthsToSizes as Dt,getColumnMeta as le,measureRowGroup as Ot}from"./DataTable.utils.mjs";import{DataTableBody as Vt}from"./DataTableBody.mjs";import{DataTableFooter as Et}from"./DataTableFooter.mjs";import{DataTableHead as It}from"./DataTableHead.mjs";import{DataTablePanels as Bt}from"./DataTablePanels.mjs";import{DataTableToolbar as Nt}from"./DataTableToolbar.mjs";import{jsx as d,jsxs as re}from"react/jsx-runtime";const kt=100,Kt=[10,25,50,100],Wt=53,jt={},se={left:[],right:[]},de=()=>{};function ue(i){for(const l of i??[]){const u=l.columns;if(u!=null&&u.length){const p=ue(u);if(p)return p;continue}if(l.enablePinning===!1)continue;const c=l.accessorKey,h=l.id??(typeof c=="string"?c:void 0);if(h)return h}}function $t({data:i,columns:l,getRowId:u,renderRow:c,initialSorting:h=[],sorting:p,onSortingChange:ge,manualSorting:E=!1,initialPageSize:me=kt,pageSizeOptions:fe=Kt,pagination:ce,onPaginationChange:he,manualPagination:b=!1,rowCount:P,disableSorting:v=!1,disablePagination:y=!1,bidirectionalScroll:n,enableColumnResizing:g=!1,enableColumnMenu:pe=!1,enableColumnPinning:I=!1,pinFirstColumn:be=!0,showToolbar:Ce=!1,enableExport:Re=!1,exportFilename:we="data",additionalExportColumns:Se,exportRowDetails:xe,exportRecord:Pe,enableJsonExport:ve,manualFiltering:B=!1,filterFields:C,initialFilterState:ye,filterState:Le,onFilterStateChange:ze,initialSearch:Te="",search:Me,onSearchChange:He,initialColumnVisibility:N={},columnVisibility:Fe,onColumnVisibilityChange:De,initialColumnPinning:k=se,columnPinning:K,onColumnPinningChange:Oe,footerLeft:Ve,estimateRowHeight:Ee=Wt,minWidth:Ie=650,maxHeight:W=800,tableLayout:L="auto",icons:Be=jt,emptyMessage:Ne="No data to display.",isLoading:ke=!1,renderLoading:Ke}){var j,$;const[We,je]=m(h,p,ge),[$e,Je]=m({pageIndex:0,pageSize:me},ce,he),[z,Ue]=m(ye??Ht(C??[]),Le,ze),qe=x(new Map),[T,Ge]=m(Te,Me,He),[Qe,Xe]=m(N,Fe,De),J=V(()=>ue(l??ae(i)),[l,i]),Ye=K===void 0&&k===se&&be&&J?{left:[J],right:[]}:k,[M,Ze]=m(Ye,K,Oe),H=I||(((j=M.left)==null?void 0:j.length)??0)>0||((($=M.right)==null?void 0:$.length)??0)>0,[F,Ae]=ie({}),U=g&&Object.keys(F).length>0,[_e,R]=ie(null),et=()=>{R(null)},q=x(null),G=x(null),Q=(e,t)=>{if(t){const r=t.getBoundingClientRect();return{anchorPosition:{top:r.bottom,left:r.right},transformHorizontal:"right"}}const o=e.getBoundingClientRect();return{anchorPosition:{top:o.bottom,left:o.left},transformHorizontal:"left"}},tt=(e,t)=>{R({type:"filter",columnId:e,...Q(t,q.current)})},nt=e=>{R({type:"manageColumns",...Q(e,G.current)})},w=x(null),s=V(()=>{const e=l??ae(i);return g?Dt(e):e},[l,i,g]),ot=V(()=>{if(B)return i;const e=Tt(s);return Mt(Ft(i,C??[],z,(t,o,r)=>{const f=e[o];return f?f(t,r):t[o]}),T,s)},[i,C,z,T,B,s]),a=ht({data:ot,columns:s,state:{...v?{}:{sorting:We},...y?{}:{pagination:$e},...H?{columnPinning:M}:{},columnVisibility:Qe,columnSizing:F},initialState:{columnVisibility:N},onSortingChange:je,onPaginationChange:Je,onColumnVisibilityChange:Xe,onColumnPinningChange:Ze,onColumnSizingChange:Ae,enableColumnPinning:I,columnResizeMode:"onChange",enableColumnResizing:g,getCoreRowModel:Ct(),defaultColumn:{enableSorting:!1},enableSorting:!v,manualSorting:E,...v||E?{}:{getSortedRowModel:bt()},manualPagination:b,...b&&P!==void 0?{rowCount:P}:{},getRowCanExpand:()=>!0,...y||b?{}:{getPaginationRowModel:pt()},...u?{getRowId:u}:{}}),D=a.getRowModel().rows,it=b?P??i.length:a.getPrePaginationRowModel().rows.length,at=a.getVisibleLeafColumns().length||1,lt=g&&a.getVisibleLeafColumns().some(e=>{var t;return typeof((t=le(e.columnDef.meta))==null?void 0:t.width)=="number"}),rt=U||lt,O=H?a.getLeftVisibleLeafColumns().map(e=>e.id):[],X=H?a.getRightVisibleLeafColumns().map(e=>e.id):[],Y=a.getHeaderGroups().length,{headerRowRefs:Z,headerRowTops:st}=yt(Y,s),A=n!==void 0,dt=Lt(A,Z,Y,s),{headerCellRefs:_,pinnedOffsets:ee}=zt(O,X,s),ut=(e,t)=>{var o;for(const r of a.getVisibleLeafColumns())if(F[r.id]===void 0){const f=(o=_.current[r.id])==null?void 0:o.getBoundingClientRect().width;f&&(r.columnDef.size=Math.round(f))}e.getResizeHandler()(t)},te=(e,t)=>e==="left"?O[O.length-1]===t:X[0]===t,ne=(e,t)=>{if(e==="left")return{left:ee.left[t]??0};if(e==="right")return{right:ee.right[t]??0}},oe=L==="fixed"?{overflow:"hidden",textOverflow:"ellipsis"}:void 0,gt=(e,t)=>e?o=>({...oe,position:"sticky",zIndex:1,bgcolor:"background.paper",".MuiTableRow-hover:hover > &":{backgroundImage:`linear-gradient(${o.palette.action.hover}, ${o.palette.action.hover})`},...te(e,t)?{boxShadow:`inset ${e==="left"?-1:1}px 0 0 ${o.palette.divider}`}:{}}):oe,mt=e=>{var t;const o=e.column.getIsPinned();return{align:(t=le(e.column.columnDef.meta))==null?void 0:t.align,style:ne(o,e.column.id),sx:gt(o,e.column.id)}},S=Rt({count:D.length,getScrollElement:()=>w.current,estimateSize:()=>Ee,overscan:5,measureElement:Ot});Pt({enabled:A,scrollContainerRef:w,virtualizer:S,rowCount:D.length,hasNewer:n?.hasNewer,hasOlder:n?.hasOlder,isLoadingNewer:n?.isLoadingNewer,isLoadingOlder:n?.isLoadingOlder,onLoadNewer:n?.onLoadNewer??de,onLoadOlder:n?.onLoadOlder??de,resetKey:n?.resetKey});const{pageIndex:ft}=a.getState().pagination;return ct(()=>{S.scrollToOffset(0)},[ft,S]),d(vt,{value:{table:a,data:i,rows:D,totalRowCount:it,columnCount:at,icons:Be,isLoading:ke,emptyMessage:Ne,tableLayout:L,enableColumnResizing:g,enableColumnMenu:pe,enableExport:Re,exportFilename:we,additionalExportColumns:Se,exportRowDetails:xe,exportRecord:Pe,enableJsonExport:ve,disablePagination:y,pageSizeOptions:fe,footerLeft:Ve,bidirectionalScroll:n,renderLoading:Ke,renderRow:c,filterFields:C,pickedFilterOptions:qe,filterState:z,onFilterStateChange:Ue,search:T,onSearchChange:Ge,columnPanel:_e,setColumnPanel:R,closeColumnPanel:et,openFilterPanel:tt,openManageColumnsPanel:nt,toolbarFilterButtonRef:q,toolbarManageColumnsButtonRef:G,headerRowRefs:Z,headerCellRefs:_,headerRowTops:st,headerHeight:dt,isPinnedEdge:te,getPinnedOffsetStyle:ne,getCellProps:mt,hasResizedColumns:U,startColumnResize:ut,virtualizer:S,scrollContainerRef:w},children:re(wt,{sx:{width:"100%",...W==="100%"?{height:"100%",minHeight:0,display:"flex",flexDirection:"column"}:{}},children:[Ce&&d(Nt,{}),d(St,{ref:w,sx:{maxHeight:W,width:0,minWidth:"100%",flex:"1 1 auto",minHeight:0},children:re(xt,{stickyHeader:!0,sx:{minWidth:Ie,tableLayout:L},style:rt?{width:`max(${a.getTotalSize()}px, 100%)`}:void 0,"aria-label":"data table",children:[d(It,{}),d(Vt,{})]})}),d(Bt,{}),d(Et,{})]})})}export{$t as DataTable};
1
+ "use strict";import{useRef as x,useMemo as V,useState as ie,useEffect as ht}from"react";import{useReactTable as pt,getPaginationRowModel as bt,getSortedRowModel as Ct,getCoreRowModel as Rt}from"@tanstack/react-table";import{useVirtualizer as wt}from"@tanstack/react-virtual";import{Box as St,TableContainer as xt,Table as Pt}from"@mui/material";import{useBidirectionalScroll as vt}from"../../hooks/useBidirectionalScroll.mjs";import{DataTableProvider as yt}from"./DataTable.context.mjs";import{useControllableState as m,useHeaderRowTops as Lt,useStickyHeaderHeight as zt,usePinnedOffsets as Tt}from"./DataTable.hooks.mjs";import{getLeafAccessorsById as Mt,applySearch as Ht}from"./DataTable.filters.mjs";import{buildInitialFilterState as Ft,applyFieldFilters as Dt}from"./DataTable.filterState.mjs";import{inferColumns as ae,applyMetaWidthsToSizes as Ot,getColumnMeta as le,measureRowGroup as Vt}from"./DataTable.utils.mjs";import{DataTableBody as Et}from"./DataTableBody.mjs";import{DataTableFooter as It}from"./DataTableFooter.mjs";import{DataTableHead as Nt}from"./DataTableHead.mjs";import{DataTablePanels as Bt}from"./DataTablePanels.mjs";import{DataTableToolbar as kt}from"./DataTableToolbar.mjs";import{jsx as u,jsxs as re}from"react/jsx-runtime";const jt=100,Wt=[10,25,50,100],Kt=53,$t={},se={left:[],right:[]},ue=()=>{};function de(i){for(const l of i??[]){const d=l.columns;if(d!=null&&d.length){const p=de(d);if(p)return p;continue}if(l.enablePinning===!1)continue;const f=l.accessorKey,h=l.id??(typeof f=="string"?f:void 0);if(h)return h}}function Jt({data:i,columns:l,getRowId:d,renderRow:f,initialSorting:h=[],sorting:p,onSortingChange:ge,manualSorting:E=!1,initialPageSize:me=jt,pageSizeOptions:ce=Wt,pagination:fe,onPaginationChange:he,manualPagination:b=!1,rowCount:P,disableSorting:v=!1,disablePagination:y=!1,bidirectionalScroll:n,enableColumnResizing:g=!1,enableColumnMenu:pe=!1,enableColumnPinning:I=!1,pinFirstColumn:be=!0,showToolbar:Ce=!1,enableExport:Re=!1,exportFilename:we="data",additionalExportColumns:Se,exportRowDetails:xe,exportRecord:Pe,enableJsonExport:ve,cspNonce:ye,manualFiltering:N=!1,filterFields:C,initialFilterState:Le,filterState:ze,onFilterStateChange:Te,initialSearch:Me="",search:He,onSearchChange:Fe,initialColumnVisibility:B={},columnVisibility:De,onColumnVisibilityChange:Oe,initialColumnPinning:k=se,columnPinning:j,onColumnPinningChange:Ve,footerLeft:Ee,estimateRowHeight:Ie=Kt,minWidth:Ne=650,maxHeight:W=800,tableLayout:L="auto",icons:Be=$t,emptyMessage:ke="No data to display.",isLoading:je=!1,renderLoading:We}){var K,$;const[Ke,$e]=m(h,p,ge),[Je,Ue]=m({pageIndex:0,pageSize:me},fe,he),[z,qe]=m(Le??Ft(C??[]),ze,Te),Ge=x(new Map),[T,Qe]=m(Me,He,Fe),[Xe,Ye]=m(B,De,Oe),J=V(()=>de(l??ae(i)),[l,i]),Ze=j===void 0&&k===se&&be&&J?{left:[J],right:[]}:k,[M,Ae]=m(Ze,j,Ve),H=I||(((K=M.left)==null?void 0:K.length)??0)>0||((($=M.right)==null?void 0:$.length)??0)>0,[F,_e]=ie({}),U=g&&Object.keys(F).length>0,[et,R]=ie(null),tt=()=>{R(null)},q=x(null),G=x(null),Q=(e,t)=>{if(t){const r=t.getBoundingClientRect();return{anchorPosition:{top:r.bottom,left:r.right},transformHorizontal:"right"}}const o=e.getBoundingClientRect();return{anchorPosition:{top:o.bottom,left:o.left},transformHorizontal:"left"}},nt=(e,t)=>{R({type:"filter",columnId:e,...Q(t,q.current)})},ot=e=>{R({type:"manageColumns",...Q(e,G.current)})},w=x(null),s=V(()=>{const e=l??ae(i);return g?Ot(e):e},[l,i,g]),it=V(()=>{if(N)return i;const e=Mt(s);return Ht(Dt(i,C??[],z,(t,o,r)=>{const c=e[o];return c?c(t,r):t[o]}),T,s)},[i,C,z,T,N,s]),a=pt({data:it,columns:s,state:{...v?{}:{sorting:Ke},...y?{}:{pagination:Je},...H?{columnPinning:M}:{},columnVisibility:Xe,columnSizing:F},initialState:{columnVisibility:B},onSortingChange:$e,onPaginationChange:Ue,onColumnVisibilityChange:Ye,onColumnPinningChange:Ae,onColumnSizingChange:_e,enableColumnPinning:I,columnResizeMode:"onChange",enableColumnResizing:g,getCoreRowModel:Rt(),defaultColumn:{enableSorting:!1},enableSorting:!v,manualSorting:E,...v||E?{}:{getSortedRowModel:Ct()},manualPagination:b,...b&&P!==void 0?{rowCount:P}:{},getRowCanExpand:()=>!0,...y||b?{}:{getPaginationRowModel:bt()},...d?{getRowId:d}:{}}),D=a.getRowModel().rows,at=b?P??i.length:a.getPrePaginationRowModel().rows.length,lt=a.getVisibleLeafColumns().length||1,rt=g&&a.getVisibleLeafColumns().some(e=>{var t;return typeof((t=le(e.columnDef.meta))==null?void 0:t.width)=="number"}),st=U||rt,O=H?a.getLeftVisibleLeafColumns().map(e=>e.id):[],X=H?a.getRightVisibleLeafColumns().map(e=>e.id):[],Y=a.getHeaderGroups().length,{headerRowRefs:Z,headerRowTops:ut}=Lt(Y,s),A=n!==void 0,dt=zt(A,Z,Y,s),{headerCellRefs:_,pinnedOffsets:ee}=Tt(O,X,s),gt=(e,t)=>{var o;for(const r of a.getVisibleLeafColumns())if(F[r.id]===void 0){const c=(o=_.current[r.id])==null?void 0:o.getBoundingClientRect().width;c&&(r.columnDef.size=Math.round(c))}e.getResizeHandler()(t)},te=(e,t)=>e==="left"?O[O.length-1]===t:X[0]===t,ne=(e,t)=>{if(e==="left")return{left:ee.left[t]??0};if(e==="right")return{right:ee.right[t]??0}},oe=L==="fixed"?{overflow:"hidden",textOverflow:"ellipsis"}:void 0,mt=(e,t)=>e?o=>({...oe,position:"sticky",zIndex:1,bgcolor:"background.paper",".MuiTableRow-hover:hover > &":{backgroundImage:`linear-gradient(${o.palette.action.hover}, ${o.palette.action.hover})`},...te(e,t)?{boxShadow:`inset ${e==="left"?-1:1}px 0 0 ${o.palette.divider}`}:{}}):oe,ct=e=>{var t;const o=e.column.getIsPinned();return{align:(t=le(e.column.columnDef.meta))==null?void 0:t.align,style:ne(o,e.column.id),sx:mt(o,e.column.id)}},S=wt({count:D.length,getScrollElement:()=>w.current,estimateSize:()=>Ie,overscan:5,measureElement:Vt});vt({enabled:A,scrollContainerRef:w,virtualizer:S,rowCount:D.length,hasNewer:n?.hasNewer,hasOlder:n?.hasOlder,isLoadingNewer:n?.isLoadingNewer,isLoadingOlder:n?.isLoadingOlder,onLoadNewer:n?.onLoadNewer??ue,onLoadOlder:n?.onLoadOlder??ue,resetKey:n?.resetKey});const{pageIndex:ft}=a.getState().pagination;return ht(()=>{S.scrollToOffset(0)},[ft,S]),u(yt,{value:{table:a,data:i,rows:D,totalRowCount:at,columnCount:lt,icons:Be,isLoading:je,emptyMessage:ke,tableLayout:L,enableColumnResizing:g,enableColumnMenu:pe,enableExport:Re,exportFilename:we,additionalExportColumns:Se,exportRowDetails:xe,exportRecord:Pe,enableJsonExport:ve,cspNonce:ye,disablePagination:y,pageSizeOptions:ce,footerLeft:Ee,bidirectionalScroll:n,renderLoading:We,renderRow:f,filterFields:C,pickedFilterOptions:Ge,filterState:z,onFilterStateChange:qe,search:T,onSearchChange:Qe,columnPanel:et,setColumnPanel:R,closeColumnPanel:tt,openFilterPanel:nt,openManageColumnsPanel:ot,toolbarFilterButtonRef:q,toolbarManageColumnsButtonRef:G,headerRowRefs:Z,headerCellRefs:_,headerRowTops:ut,headerHeight:dt,isPinnedEdge:te,getPinnedOffsetStyle:ne,getCellProps:ct,hasResizedColumns:U,startColumnResize:gt,virtualizer:S,scrollContainerRef:w},children:re(St,{sx:{width:"100%",...W==="100%"?{height:"100%",minHeight:0,display:"flex",flexDirection:"column"}:{}},children:[Ce&&u(kt,{}),u(xt,{ref:w,sx:{maxHeight:W,width:0,minWidth:"100%",flex:"1 1 auto",minHeight:0},children:re(Pt,{stickyHeader:!0,sx:{minWidth:Ne,tableLayout:L},style:st?{width:`max(${a.getTotalSize()}px, 100%)`}:void 0,"aria-label":"data table",children:[u(Nt,{}),u(Et,{})]})}),u(Bt,{}),u(It,{})]})})}export{Jt as DataTable};
@@ -480,6 +480,13 @@ export interface DataTableProps<TData extends DataTableData> {
480
480
  * object can carry fields a table never meant to hand out.
481
481
  */
482
482
  enableJsonExport?: boolean;
483
+ /**
484
+ * The page's CSP nonce, for the print document's stylesheet: printing renders into a `srcdoc`
485
+ * iframe, which inherits the page's policy, so under a nonce-based `style-src` the stylesheet
486
+ * is dropped without it. Taken from the page (a `__nonce__` global, a `csp-nonce` meta tag, or
487
+ * a nonced element) when not given.
488
+ */
489
+ cspNonce?: string;
483
490
  /**
484
491
  * Base filename (no extension) for the exported files; also the printed
485
492
  * document title. Defaults to 'data'.
@@ -13,6 +13,8 @@ interface DataTableExportMenuProps<TData extends DataTableData> {
13
13
  exportRecord?: (row: TData) => unknown;
14
14
  /** Adds the "Download as JSON" item. */
15
15
  enableJsonExport?: boolean;
16
+ /** The page's CSP nonce, for the print document's stylesheet. */
17
+ cspNonce?: string;
16
18
  }
17
19
  /**
18
20
  * Toolbar Export button opening a menu with Print / Download as CSV / Download as Excel, like
@@ -20,5 +22,5 @@ interface DataTableExportMenuProps<TData extends DataTableData> {
20
22
  * exports the displayed table: the filtered + sorted rows across every page. Print and the sheet
21
23
  * formats write the visible accessor columns in display order; JSON writes the rows themselves.
22
24
  */
23
- export declare function DataTableExportMenu<TData extends DataTableData>({ table, filename, icons, additionalExportColumns, exportRowDetails, exportRecord, enableJsonExport, }: Readonly<DataTableExportMenuProps<TData>>): import("react").JSX.Element;
25
+ export declare function DataTableExportMenu<TData extends DataTableData>({ table, filename, icons, additionalExportColumns, exportRowDetails, exportRecord, enableJsonExport, cspNonce, }: Readonly<DataTableExportMenuProps<TData>>): import("react").JSX.Element;
24
26
  export {};
@@ -1 +1 @@
1
- "use strict";import{useState as C}from"react";import{Tooltip as E,IconButton as S,Menu as z,MenuItem as a,ListItemIcon as n,ListItemText as t}from"@mui/material";import{DataObject as O,FileDownloadOutlined as k,Print as I,DescriptionOutlined as J,GridOnOutlined as M}from"@mui/icons-material";import{getDataTableExportModel as g,printDataTable as j,exportDataTableToCsv as v,exportDataTableToExcel as F,exportDataTableToJson as P}from"./DataTable.export.mjs";import{jsxs as e,Fragment as R,jsx as o}from"react/jsx-runtime";function B({table:c,filename:d,icons:m,additionalExportColumns:p,exportRowDetails:x,exportRecord:h,enableJsonExport:u=!1}){const{export:D=k,print:f=I,downloadCsv:T=J,downloadExcel:b=M,downloadJson:w=O}=m,[s,r]=C(null),l=i=>{i(g(c,p,{rowDetails:x,toRecord:h}),d),r(null)};return e(R,{children:[o(E,{title:"Export",placement:"bottom",arrow:!0,children:o(S,{size:"small","aria-label":"Export",onClick:i=>r(i.currentTarget),children:o(D,{fontSize:"small"})})}),e(z,{anchorEl:s,open:!!s,onClose:()=>r(null),children:[e(a,{onClick:()=>l(j),children:[o(n,{children:o(f,{fontSize:"small"})}),o(t,{children:"Print"})]}),e(a,{onClick:()=>l(v),children:[o(n,{children:o(T,{fontSize:"small"})}),o(t,{children:"Download as CSV"})]}),e(a,{onClick:()=>l(F),children:[o(n,{children:o(b,{fontSize:"small"})}),o(t,{children:"Download as Excel"})]}),u&&e(a,{onClick:()=>l(P),children:[o(n,{children:o(w,{fontSize:"small"})}),o(t,{children:"Download as JSON"})]})]})]})}export{B as DataTableExportMenu};
1
+ "use strict";import{useState as S}from"react";import{Tooltip as z,IconButton as O,Menu as k,MenuItem as n,ListItemIcon as t,ListItemText as r}from"@mui/material";import{DataObject as I,FileDownloadOutlined as J,Print as M,DescriptionOutlined as g,GridOnOutlined as j}from"@mui/icons-material";import{getDataTableExportModel as v,printDataTable as F,exportDataTableToCsv as L,exportDataTableToExcel as P,exportDataTableToJson as R}from"./DataTable.export.mjs";import{jsxs as e,Fragment as B,jsx as o}from"react/jsx-runtime";function N({table:c,filename:d,icons:p,additionalExportColumns:m,exportRowDetails:x,exportRecord:h,enableJsonExport:u=!1,cspNonce:D}){const{export:f=J,print:T=M,downloadCsv:b=g,downloadExcel:w=j,downloadJson:C=I}=p,[s,i]=S(null),l=a=>{a(v(c,m,{rowDetails:x,toRecord:h}),d),i(null)};return e(B,{children:[o(z,{title:"Export",placement:"bottom",arrow:!0,children:o(O,{size:"small","aria-label":"Export",onClick:a=>i(a.currentTarget),children:o(f,{fontSize:"small"})})}),e(k,{anchorEl:s,open:!!s,onClose:()=>i(null),children:[e(n,{onClick:()=>l((a,E)=>F(a,E,{nonce:D})),children:[o(t,{children:o(T,{fontSize:"small"})}),o(r,{children:"Print"})]}),e(n,{onClick:()=>l(L),children:[o(t,{children:o(b,{fontSize:"small"})}),o(r,{children:"Download as CSV"})]}),e(n,{onClick:()=>l(P),children:[o(t,{children:o(w,{fontSize:"small"})}),o(r,{children:"Download as Excel"})]}),u&&e(n,{onClick:()=>l(R),children:[o(t,{children:o(C,{fontSize:"small"})}),o(r,{children:"Download as JSON"})]})]})]})}export{N as DataTableExportMenu};
@@ -1 +1 @@
1
- "use strict";import{useRef as y,useState as B}from"react";import{Stack as P,Tooltip as l,IconButton as n,Badge as j,Divider as p,TextField as A,InputAdornment as h}from"@mui/material";import{Close as O,FilterList as J,ViewColumn as K,Search as L}from"@mui/icons-material";import{useDataTableContext as V}from"./DataTable.context.mjs";import{effectiveFilterFieldCount as q}from"./DataTable.filterState.mjs";import{DataTableExportMenu as G}from"./DataTableExportMenu.mjs";import{jsxs as H,jsx as e}from"react/jsx-runtime";function $(){const{table:f,icons:s,search:o,onSearchChange:r,enableExport:c,exportFilename:b,additionalExportColumns:x,exportRowDetails:C,exportRecord:g,enableJsonExport:v,filterFields:i,filterState:S,toolbarFilterButtonRef:w,toolbarManageColumnsButtonRef:F,openFilterPanel:z,openManageColumnsPanel:I}=V(),{openFilterPanel:R=J,manageColumns:T=K,search:D=L,close:E=O}=s,a=y(null),[M,m]=B(!1),u=M||o!=="",k=i?q(i,S):0;return H(P,{direction:"row",alignItems:"center",justifyContent:"flex-end",spacing:.5,sx:{mb:.5},children:[e(l,{title:"Manage columns",placement:"bottom",arrow:!0,children:e(n,{ref:F,size:"small","aria-label":"Manage columns",onClick:t=>I(t.currentTarget),children:e(T,{fontSize:"small"})})}),i!==void 0&&e(l,{title:"Filters",placement:"bottom",arrow:!0,children:e(n,{ref:w,size:"small","aria-label":"Show filters",onClick:t=>z("",t.currentTarget),children:e(j,{badgeContent:k,color:"primary",children:e(R,{fontSize:"small"})})})}),c&&e(p,{orientation:"vertical",variant:"middle",flexItem:!0,sx:{height:14,alignSelf:"center"}}),c&&e(G,{table:f,filename:b,icons:s,additionalExportColumns:x,exportRowDetails:C,exportRecord:g,enableJsonExport:v}),e(p,{orientation:"vertical",variant:"middle",flexItem:!0,sx:{height:14,alignSelf:"center"}}),e(A,{size:"small",variant:"outlined",value:o,placeholder:"Search\u2026",inputRef:a,onChange:t=>r(t.target.value),onFocus:()=>m(!0),onBlur:()=>m(!1),onKeyDown:t=>{var d;t.key==="Escape"&&(r(""),(d=a.current)==null||d.blur())},inputProps:{"aria-label":"Search"},InputProps:{startAdornment:e(h,{position:"start",children:e(l,{title:"Search",placement:"bottom",arrow:!0,children:e(n,{size:"small","aria-label":"Show search",onClick:()=>{var t;return(t=a.current)==null?void 0:t.focus()},children:e(D,{fontSize:"small"})})})}),endAdornment:o===""?void 0:e(h,{position:"end",children:e(l,{title:"Clear",placement:"bottom",arrow:!0,children:e(n,{size:"small","aria-label":"Clear search",onClick:()=>{var t;r(""),(t=a.current)==null||t.focus()},children:e(E,{fontSize:"small"})})})})},sx:{width:u?220:34,transition:"width .2s",overflow:"hidden","& .MuiOutlinedInput-root":{pl:.5,pr:.5},"& .MuiOutlinedInput-notchedOutline":{opacity:u?1:0,transition:"opacity .2s"}}})]})}export{$ as DataTableToolbar};
1
+ "use strict";import{useRef as B,useState as P}from"react";import{Stack as j,Tooltip as n,IconButton as o,Badge as A,Divider as p,TextField as O,InputAdornment as h}from"@mui/material";import{Close as J,FilterList as N,ViewColumn as K,Search as L}from"@mui/icons-material";import{useDataTableContext as V}from"./DataTable.context.mjs";import{effectiveFilterFieldCount as q}from"./DataTable.filterState.mjs";import{DataTableExportMenu as G}from"./DataTableExportMenu.mjs";import{jsxs as H,jsx as e}from"react/jsx-runtime";function Q(){const{table:f,icons:s,search:l,onSearchChange:r,enableExport:c,exportFilename:b,additionalExportColumns:x,exportRowDetails:C,exportRecord:g,enableJsonExport:v,cspNonce:S,filterFields:i,filterState:w,toolbarFilterButtonRef:F,toolbarManageColumnsButtonRef:z,openFilterPanel:I,openManageColumnsPanel:R}=V(),{openFilterPanel:T=N,manageColumns:D=K,search:E=L,close:M=J}=s,a=B(null),[k,m]=P(!1),u=k||l!=="",y=i?q(i,w):0;return H(j,{direction:"row",alignItems:"center",justifyContent:"flex-end",spacing:.5,sx:{mb:.5},children:[e(n,{title:"Manage columns",placement:"bottom",arrow:!0,children:e(o,{ref:z,size:"small","aria-label":"Manage columns",onClick:t=>R(t.currentTarget),children:e(D,{fontSize:"small"})})}),i!==void 0&&e(n,{title:"Filters",placement:"bottom",arrow:!0,children:e(o,{ref:F,size:"small","aria-label":"Show filters",onClick:t=>I("",t.currentTarget),children:e(A,{badgeContent:y,color:"primary",children:e(T,{fontSize:"small"})})})}),c&&e(p,{orientation:"vertical",variant:"middle",flexItem:!0,sx:{height:14,alignSelf:"center"}}),c&&e(G,{table:f,filename:b,icons:s,additionalExportColumns:x,exportRowDetails:C,exportRecord:g,enableJsonExport:v,cspNonce:S}),e(p,{orientation:"vertical",variant:"middle",flexItem:!0,sx:{height:14,alignSelf:"center"}}),e(O,{size:"small",variant:"outlined",value:l,placeholder:"Search\u2026",inputRef:a,onChange:t=>r(t.target.value),onFocus:()=>m(!0),onBlur:()=>m(!1),onKeyDown:t=>{var d;t.key==="Escape"&&(r(""),(d=a.current)==null||d.blur())},inputProps:{"aria-label":"Search"},InputProps:{startAdornment:e(h,{position:"start",children:e(n,{title:"Search",placement:"bottom",arrow:!0,children:e(o,{size:"small","aria-label":"Show search",onClick:()=>{var t;return(t=a.current)==null?void 0:t.focus()},children:e(E,{fontSize:"small"})})})}),endAdornment:l===""?void 0:e(h,{position:"end",children:e(n,{title:"Clear",placement:"bottom",arrow:!0,children:e(o,{size:"small","aria-label":"Clear search",onClick:()=>{var t;r(""),(t=a.current)==null||t.focus()},children:e(M,{fontSize:"small"})})})})},sx:{width:u?220:34,transition:"width .2s",overflow:"hidden","& .MuiOutlinedInput-root":{pl:.5,pr:.5},"& .MuiOutlinedInput-notchedOutline":{opacity:u?1:0,transition:"opacity .2s"}}})]})}export{Q as DataTableToolbar};
@@ -5,7 +5,7 @@ import { NetworkRuleRowHandlers } from './NetworkRuleExpandedPanel';
5
5
  * Paging, filtering, search and sorting state, passed through to the DataTable. With the `manual*`
6
6
  * flags the consumer fetches in response; `buildNetworkRulesListQuery` maps the state to the query.
7
7
  */
8
- type ListStateProps = Pick<DataTableProps<NetworkRule>, 'pagination' | 'onPaginationChange' | 'manualPagination' | 'rowCount' | 'pageSizeOptions' | 'manualFiltering' | 'filterState' | 'onFilterStateChange' | 'search' | 'onSearchChange' | 'manualSorting' | 'sorting' | 'onSortingChange'>;
8
+ type ListStateProps = Pick<DataTableProps<NetworkRule>, 'pagination' | 'onPaginationChange' | 'manualPagination' | 'rowCount' | 'pageSizeOptions' | 'manualFiltering' | 'filterState' | 'onFilterStateChange' | 'search' | 'onSearchChange' | 'manualSorting' | 'sorting' | 'onSortingChange' | 'cspNonce'>;
9
9
  export interface NetworkRulesTableProps extends NetworkRuleRowHandlers, ListStateProps {
10
10
  rules: NetworkRule[];
11
11
  isLoading?: boolean;
@@ -21,5 +21,5 @@ export interface NetworkRulesTableProps extends NetworkRuleRowHandlers, ListStat
21
21
  /** Defaults to 900. */
22
22
  minWidth?: number | string;
23
23
  }
24
- export declare function NetworkRulesTable({ rules, isLoading, readOnly, emptyMessage, maxHeight, minWidth, pagination, onPaginationChange, manualPagination, rowCount, pageSizeOptions, manualFiltering, filterState, onFilterStateChange, search, onSearchChange, manualSorting, sorting, onSortingChange, enableExport, exportFilename, ...handlers }: Readonly<NetworkRulesTableProps>): import("react").JSX.Element;
24
+ export declare function NetworkRulesTable({ rules, isLoading, readOnly, emptyMessage, maxHeight, minWidth, pagination, onPaginationChange, manualPagination, rowCount, pageSizeOptions, manualFiltering, filterState, onFilterStateChange, search, onSearchChange, manualSorting, sorting, onSortingChange, enableExport, exportFilename, cspNonce, ...handlers }: Readonly<NetworkRulesTableProps>): import("react").JSX.Element;
25
25
  export {};
@@ -1 +1 @@
1
- "use strict";import{useMemo as u,useCallback as T}from"react";import{Alert as I,Button as U,Box as _}from"@mui/material";import{DataTable as H}from"../../DataTable/DataTable.mjs";import{EXPAND_COLUMN_ID as W}from"../../DataTable/DataTableExpandRow.mjs";import{DataTableLoadingRows as A}from"../../DataTable/DataTableLoadingRows.mjs";import{useNetworkRulesServices as B,useNetworkRuleStatuses as j}from"../NetworkRules.context.mjs";import{useNetworkRulesCatalog as J}from"../hooks/useNetworkRulesCatalog.mjs";import{buildNetworkRulesColumns as K,NETWORK_RULES_COLUMN_IDS as m}from"./columns.mjs";import{buildNetworkRuleExportSections as X}from"./export.mjs";import{buildNetworkRulesFilterFields as q}from"./filters.mjs";import{NetworkRuleRow as G}from"./NetworkRuleRow.mjs";import{jsx as a}from"react/jsx-runtime";const Q=[{header:"Rule UUID",value:t=>t.uuid,position:"start"}];function V({rules:t,isLoading:g=!1,readOnly:d=!1,emptyMessage:p="No network rules yet",maxHeight:r=640,minWidth:h=900,pagination:c,onPaginationChange:C,manualPagination:f,rowCount:w,pageSizeOptions:b,manualFiltering:R,filterState:S,onFilterStateChange:x,search:N,onSearchChange:k,manualSorting:F,sorting:y,onSortingChange:E,enableExport:P=!0,exportFilename:L="network-rules",...O}){const{sources:l}=B(),n=J(),e=n.data,s=j()??e?.statuses??[],i=e!==void 0,v=u(()=>K(),[]),D=u(()=>q(e,s,l),[e,s,l]),M=r==="100%",z=T(o=>X(o,e),[e]);return!i&&n.isError?a(I,{severity:"error",action:a(U,{color:"inherit",size:"small",onClick:()=>{n.refetch()},children:"Retry"}),children:"The rule catalog could not be loaded, so rules cannot be shown."}):a(_,{sx:M?{height:"100%",minHeight:0}:void 0,children:a(H,{data:i?t:[],columns:v,getRowId:o=>o.uuid,isLoading:g||!i,initialPageSize:10,pagination:c,onPaginationChange:C,manualPagination:f,rowCount:w,pageSizeOptions:b,manualFiltering:R,filterState:S,onFilterStateChange:x,search:N,onSearchChange:k,manualSorting:F,sorting:y,onSortingChange:E,showToolbar:!0,enableExport:P,enableJsonExport:!0,exportFilename:L,additionalExportColumns:Q,exportRowDetails:z,enableColumnMenu:!0,enableColumnResizing:!0,enableColumnPinning:!0,initialColumnPinning:{left:[W,m.enabled,m.name],right:[]},filterFields:D,tableLayout:"fixed",minWidth:h,maxHeight:r,emptyMessage:p,renderRow:o=>a(G,{...o,catalog:e,readOnly:d,...O}),renderLoading:o=>a(A,{columnCount:o})})})}export{V as NetworkRulesTable};
1
+ "use strict";import{useMemo as u,useCallback as I}from"react";import{Alert as U,Button as _,Box as H}from"@mui/material";import{DataTable as W}from"../../DataTable/DataTable.mjs";import{EXPAND_COLUMN_ID as A}from"../../DataTable/DataTableExpandRow.mjs";import{DataTableLoadingRows as B}from"../../DataTable/DataTableLoadingRows.mjs";import{useNetworkRulesServices as j,useNetworkRuleStatuses as J}from"../NetworkRules.context.mjs";import{useNetworkRulesCatalog as K}from"../hooks/useNetworkRulesCatalog.mjs";import{buildNetworkRulesColumns as X,NETWORK_RULES_COLUMN_IDS as m}from"./columns.mjs";import{buildNetworkRuleExportSections as q}from"./export.mjs";import{buildNetworkRulesFilterFields as G}from"./filters.mjs";import{NetworkRuleRow as Q}from"./NetworkRuleRow.mjs";import{jsx as a}from"react/jsx-runtime";const V=[{header:"Rule UUID",value:t=>t.uuid,position:"start"}];function Y({rules:t,isLoading:g=!1,readOnly:d=!1,emptyMessage:p="No network rules yet",maxHeight:r=640,minWidth:h=900,pagination:c,onPaginationChange:C,manualPagination:f,rowCount:w,pageSizeOptions:b,manualFiltering:R,filterState:S,onFilterStateChange:x,search:N,onSearchChange:k,manualSorting:F,sorting:y,onSortingChange:E,enableExport:P=!0,exportFilename:L="network-rules",cspNonce:O,...D}){const{sources:l}=j(),n=K(),e=n.data,s=J()??e?.statuses??[],i=e!==void 0,M=u(()=>X(),[]),v=u(()=>G(e,s,l),[e,s,l]),z=r==="100%",T=I(o=>q(o,e),[e]);return!i&&n.isError?a(U,{severity:"error",action:a(_,{color:"inherit",size:"small",onClick:()=>{n.refetch()},children:"Retry"}),children:"The rule catalog could not be loaded, so rules cannot be shown."}):a(H,{sx:z?{height:"100%",minHeight:0}:void 0,children:a(W,{data:i?t:[],columns:M,getRowId:o=>o.uuid,isLoading:g||!i,initialPageSize:10,pagination:c,onPaginationChange:C,manualPagination:f,rowCount:w,pageSizeOptions:b,manualFiltering:R,filterState:S,onFilterStateChange:x,search:N,onSearchChange:k,manualSorting:F,sorting:y,onSortingChange:E,showToolbar:!0,enableExport:P,enableJsonExport:!0,exportFilename:L,cspNonce:O,additionalExportColumns:V,exportRowDetails:T,enableColumnMenu:!0,enableColumnResizing:!0,enableColumnPinning:!0,initialColumnPinning:{left:[A,m.enabled,m.name],right:[]},filterFields:v,tableLayout:"fixed",minWidth:h,maxHeight:r,emptyMessage:p,renderRow:o=>a(Q,{...o,catalog:e,readOnly:d,...D}),renderLoading:o=>a(B,{columnCount:o})})})}export{Y as NetworkRulesTable};
@@ -21,7 +21,7 @@ export type NetworkRulesMetricsTableRow = {
21
21
  * Paging, search and sorting state, passed through to the DataTable. With the `manual*` flags the
22
22
  * consumer fetches in response.
23
23
  */
24
- type ListStateProps = Pick<DataTableProps<NetworkRulesMetricsTableRow>, 'pagination' | 'onPaginationChange' | 'manualPagination' | 'rowCount' | 'pageSizeOptions' | 'manualFiltering' | 'search' | 'onSearchChange' | 'manualSorting' | 'sorting' | 'onSortingChange' | 'enableExport' | 'exportFilename' | 'footerLeft'>;
24
+ type ListStateProps = Pick<DataTableProps<NetworkRulesMetricsTableRow>, 'pagination' | 'onPaginationChange' | 'manualPagination' | 'rowCount' | 'pageSizeOptions' | 'manualFiltering' | 'search' | 'onSearchChange' | 'manualSorting' | 'sorting' | 'onSortingChange' | 'enableExport' | 'exportFilename' | 'footerLeft' | 'cspNonce'>;
25
25
  export interface NetworkRulesMetricsTableProps extends ListStateProps {
26
26
  data: NetworkRulesMetricsTableRow[];
27
27
  isLoading?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verifiedinc-public/shared-ui-elements",
3
- "version": "12.20.0",
3
+ "version": "12.21.0",
4
4
  "description": "A set of UI components, utilities that is shareable with the core apps.",
5
5
  "private": false,
6
6
  "sideEffects": false,