@kong-ui-public/table-data-grid 0.6.1-pr.3892.2ccd05c45.0 → 0.7.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.
@@ -1 +1 @@
1
- (function(k,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("ag-grid-vue3"),require("ag-grid-community"),require("@kong-ui-public/i18n")):typeof define=="function"&&define.amd?define(["exports","vue","ag-grid-vue3","ag-grid-community","@kong-ui-public/i18n"],e):(k=typeof globalThis<"u"?globalThis:k||self,e(k["kong-ui-public-table-data-grid"]={},k.Vue,k.AgGridVue,k.agGridCommunity,k["kong-ui-public-i18n"]))})(this,(function(k,e,U,O,M){"use strict";var K=(t=>(t.PENDING="PENDING",t.LOADING="LOADING",t.SUCCESS="SUCCESS",t.ERROR="ERROR",t))(K||{});const q=t=>!!t?.length;function L(t,r,o,l=q){const s=e.computed(()=>l(t.value)),c=e.computed(()=>{const h=t.value!==void 0,n=r.value!==void 0&&r.value!==null;return o.value?"LOADING":s.value?"SUCCESS":n?"ERROR":h?"SUCCESS":"PENDING"});return{fetchState:K,hasData:s,state:c}}const W=({emitState:t,fetchLifecycleState:r,hasData:o})=>{e.watch(()=>({hasData:o.value,state:r.value}),({hasData:l,state:s})=>{if(s!==K.PENDING){if(s===K.LOADING){t({hasData:l,state:"loading"});return}if(s===K.ERROR){t({hasData:l,state:"error"});return}t({hasData:l,state:"success"})}})},$=({startRow:t,endRow:r})=>{const o=r-t;return{blockIndex:o>0?Math.floor(t/o):0,pageSize:o}},j=({startRow:t,rowsLength:r,pageSize:o,total:l,hasMore:s})=>{if(typeof l=="number")return l;if(s!==!0&&(s===!1||r<o))return t+r},P=({fetcher:t,resetKey:r,sort:o})=>{const l=new Map,s=new Map,c=e.ref(0),a=e.shallowRef(),h=e.shallowRef(),n=e.shallowRef(),i=e.ref(0),p=e.ref(!1);let b,I;const S=d=>d===c.value&&b===t.value&&I===r?.value,w=()=>{p.value=i.value>0},g=()=>{n.value=void 0,i.value+=1,w()},E=()=>{i.value=Math.max(0,i.value-1),w()},T=d=>{const u=s.get(d);if(u)return u;let m;const f={promise:new Promise(y=>{m=y}),resolve:y=>m(y)};return s.set(d,f),f},v=(d,u)=>{u.resolve(!1),s.get(d)===u&&s.delete(d)},D=async({blockIndex:d,currentBlockCompletion:u,datasourceId:m})=>{if(d===0)return"ready";const f=s.get(d-1);if(!f)return v(d,u),"failed";const y=await f.promise;return S(m)?y?"ready":(v(d,u),"failed"):(v(d,u),"stale")},F=({blockIndex:d,currentBlockCompletion:u,getRowsParams:m,pageSize:f,result:y})=>{y.cursor!==void 0&&l.set(d,y.cursor),m.successCallback(y.data,j({startRow:m.startRow,rowsLength:y.data.length,pageSize:f,total:y.total,hasMore:y.hasMore})),m.startRow===0&&(h.value=y.data),u.resolve(!0)},N=({blockIndex:d,currentBlockCompletion:u,fetchError:m,getRowsParams:f})=>{n.value=m,f.failCallback(),v(d,u)},x=()=>{const d=t.value;if(!d)throw new Error("TableDataGrid requires a fetcher in infinite mode");b=d,I=r?.value;const u=c.value+1;return c.value=u,l.clear(),s.clear(),h.value=void 0,n.value=void 0,i.value=0,w(),{async getRows(m){if(!S(u)){m.failCallback();return}const{blockIndex:f,pageSize:y}=$({startRow:m.startRow,endRow:m.endRow}),R=T(f);if(await D({blockIndex:f,currentBlockCompletion:R,datasourceId:u})!=="ready"||!S(u)){m.failCallback(),v(f,R);return}g();try{const C=f>0?l.get(f-1):void 0,B=await d({mode:"infinite",pageSize:y,cursor:C,sort:o?.value});if(!S(u)){m.failCallback(),v(f,R);return}F({blockIndex:f,currentBlockCompletion:R,getRowsParams:m,pageSize:y,result:B})}catch(C){if(!S(u)){m.failCallback(),v(f,R);return}N({blockIndex:f,currentBlockCompletion:R,fetchError:C,getRowsParams:m})}finally{S(u)&&E()}}}},z=()=>{a.value=x()};return e.watch([t,()=>r?.value],()=>{z()},{immediate:!0}),{datasource:e.readonly(a),data:e.shallowReadonly(h),error:e.readonly(n),isFetching:e.readonly(p)}},H={key:1,class:"table-data-grid-cell-renderer"},Q=e.defineComponent({name:"TableDataGridCellRenderer",__name:"TableDataGridCellRenderer",props:{params:{}},setup(t,{expose:r}){const o=e.shallowRef(t.params),l=e.ref(null),s=e.ref(!1),c=e.computed(()=>o.value.valueFormatted??String(o.value.value??"")),a=e.computed(()=>{const g=o.value.colDef?.colId;return g?o.value.context?.cells?.slots?.[g]:void 0}),h=e.computed(()=>({column:o.value.headerDef,refreshCell:()=>{const g=o.value.node;g&&o.value.api.refreshCells({force:!0,rowNodes:[g]})},row:o.value.data??{},rowIndex:o.value.node?.rowIndex??0,rowValue:o.value.value,selected:o.value.node?.isSelected()??!1})),n=()=>a.value?.(h.value);let i,p,b=!1;const I=()=>{const g=l.value;s.value=!!g&&g.scrollWidth>g.clientWidth},S=()=>{b||(p!==void 0&&cancelAnimationFrame(p),p=requestAnimationFrame(()=>{p=void 0,I()}))},w=g=>{if(i?.disconnect(),g){i?.observe(g);const E=g.closest(".ag-cell");E&&i?.observe(E)}S()};return e.onMounted(()=>{i=new ResizeObserver(S),w(l.value)}),e.watch(l,w,{flush:"post"}),e.onUnmounted(()=>{b=!0,i?.disconnect(),p!==void 0&&cancelAnimationFrame(p)}),r({refresh(g){return o.value=g,e.nextTick(S),!0}}),(g,E)=>{const T=e.resolveComponent("KTooltip");return a.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n),{key:0})):(e.openBlock(),e.createElementBlock("span",H,[e.createVNode(T,{class:"table-data-grid-cell-tooltip",disabled:!s.value,"kpop-attributes":{popoverDelay:400},"max-width":"300",placement:"bottom-start",target:"body",text:c.value},{default:e.withCtx(()=>[e.createElementVNode("span",{ref_key:"contentElement",ref:l,class:"table-data-grid-cell-content"},e.toDisplayString(c.value),513)]),_:1},8,["disabled","text"])]))}}}),J=({headers:t,slots:r,initialSort:o})=>{const l=e.computed(()=>({cells:{slots:r}})),s=a=>{const h=o?.sortColumnKey===a.key;return{colId:a.key,flex:!a.width&&!a.maxWidth?1:void 0,headerName:a.label,maxWidth:a.maxWidth,minWidth:a.minWidth,sortable:a.sortable??!1,unSortIcon:a.showSortIcon,...h?{initialSort:o?.sortColumnOrder,initialSortIndex:0}:{},valueGetter:n=>n.data?.[a.key],width:a.width,cellRenderer:Q,cellRendererParams:{headerDef:a}}};return{columnDefs:e.computed(()=>t.value.map(s)),gridContext:l}},G=({config:t,headers:r,pageSize:o})=>{const l=new Set(r.filter(c=>c.sortable).map(c=>c.key)),s=t?.sortColumnKey&&l.has(t.sortColumnKey)?t.sortColumnKey:void 0;return{sortColumnKey:s,sortColumnOrder:s?t?.sortColumnOrder:void 0,pageSize:t?.pageSize??o}},A=(t,r)=>t.sortColumnKey===r.sortColumnKey&&t.sortColumnOrder===r.sortColumnOrder&&t.pageSize===r.pageSize,X=({headers:t,pageSize:r,tableConfig:o,emitTableConfigUpdate:l,onExternalConfigChange:s})=>{const c=e.computed(()=>o.value?G({config:o.value,headers:t.value,pageSize:r.value}):void 0),a=e.ref(c.value??G({config:void 0,headers:t.value,pageSize:r.value}));e.watch(c,p=>{p&&!A(p,a.value)&&(a.value=p,s?.(p))});const h=p=>{const b=G({config:{...a.value,...p},headers:t.value,pageSize:r.value});A(b,a.value)||(a.value=b,l(b))},n=e.computed(()=>({sortColumnKey:a.value.sortColumnKey,sortColumnOrder:a.value.sortColumnOrder})),i=e.computed(()=>o.value?.pageSize??r.value);return{activeTableConfig:e.readonly(a),activeSort:n,activePageSize:i,patchTableConfig:h}},Y=({cellClick:t,headers:r,rowClick:o})=>{const l=e.computed(()=>new Set(r.value.filter(n=>n.disableRowClick).map(n=>n.key))),s=n=>{const i=n.event?.target;return i instanceof Element?i.closest(".ag-cell")?.getAttribute("col-id")??void 0:void 0},c=n=>{const i=s(n);return!!(i&&l.value.has(i))};return{onCellClick:n=>{const i=n.colDef.colId;!n.data||!i||t({columnKey:i,row:n.data,value:n.value})},onRowClick:n=>{n.data&&!c(n)&&o(n.data,n)}}},Z=({activeSort:t,emitSort:r,patchTableConfig:o})=>{const l=(c,a)=>{c.applyColumnState({state:a.sortColumnKey?[{colId:a.sortColumnKey,sort:a.sortColumnOrder??null,sortIndex:0}]:[],defaultState:{sort:null,sortIndex:null}})};return{onSortChanged:c=>{const a=c.api.getColumnState().filter(i=>i.sort).sort((i,p)=>(i.sortIndex??0)-(p.sortIndex??0)),h=a[a.length-1],n=h?{sortColumnKey:h.colId,sortColumnOrder:h.sort}:{sortColumnKey:void 0,sortColumnOrder:void 0};n.sortColumnKey===t.value.sortColumnKey&&n.sortColumnOrder===t.value.sortColumnOrder||(r(n),o(n),a.length>1&&l(c.api,n))},applySortToGrid:l}},ee={emptyState:{title:"No Data",message:"There is no data to display."},errorState:{title:"An error occurred",message:"Data cannot be displayed due to an error."}};function te(){const t=M.createI18n("en-us",ee);return{i18n:t,i18nT:M.i18nTComponent(t)}}const oe={class:"kong-ui-public-table-data-grid","data-testid":"table-data-grid"},ae={key:0,class:"table-error-state","data-testid":"table-error-state"},ne={key:1,class:"table-empty-state","data-testid":"table-empty-state"},le=((t,r)=>{const o=t.__vccOpts||t;for(const[l,s]of r)o[l]=s;return o})(e.defineComponent({__name:"TableDataGrid",props:{headers:{},error:{type:Boolean,default:!1},tableConfig:{},fetcher:{type:Function},mode:{},pageSize:{default:25},refreshKey:{type:[String,Number,Boolean]},rows:{}},emits:["grid:ready","state","row:click","cell:click","sort","update:tableConfig"],setup(t,{emit:r}){O.ModuleRegistry.registerModules([O.AllCommunityModule,O.ClientSideRowModelModule,O.InfiniteRowModelModule]);const o=t.mode??"infinite",l=r,{i18n:{t:s}}=te(),c=e.useSlots(),a=e.shallowRef(),{activeTableConfig:h,activeSort:n,activePageSize:i,patchTableConfig:p}=X({headers:e.toRef(()=>t.headers),pageSize:e.toRef(()=>t.pageSize),tableConfig:e.toRef(()=>t.tableConfig),emitTableConfigUpdate:C=>l("update:tableConfig",C),onExternalConfigChange:C=>{a.value&&I(a.value,C)}}),{onSortChanged:b,applySortToGrid:I}=Z({activeSort:n,emitSort:C=>l("sort",C),patchTableConfig:p}),{onCellClick:S,onRowClick:w}=Y({cellClick:C=>l("cell:click",C),headers:e.toRef(()=>t.headers),rowClick:(C,B)=>l("row:click",C,B)}),g={resizable:!1,sortable:!1,suppressMovable:!0},E=e.computed(()=>h.value.sortColumnKey),T=e.computed(()=>h.value.sortColumnOrder),v=e.computed(()=>[i.value,t.refreshKey,E.value,T.value]),D=o==="infinite"?P({fetcher:e.toRef(()=>t.fetcher),resetKey:v,sort:n}):void 0,F=D?.datasource,N=e.computed(()=>D?D.data.value:t.rows),x=e.computed(()=>D?.isFetching.value??!1),z=e.computed(()=>t.rows?Array.from(t.rows):void 0),{columnDefs:d,gridContext:u}=J({headers:e.toRef(()=>t.headers),slots:c,initialSort:n.value}),{fetchState:m,hasData:f,state:y}=L(N,e.toRef(()=>D?.error.value),x),R=e.computed(()=>y.value===m.SUCCESS&&!f.value);D&&W({emitState:C=>l("state",C),fetchLifecycleState:y,hasData:f});const _=C=>{a.value=C.api,l("grid:ready",C.api)};return(C,B)=>{const V=e.resolveComponent("KEmptyState");return e.openBlock(),e.createElementBlock("div",oe,[t.error?(e.openBlock(),e.createElementBlock("div",ae,[e.renderSlot(C.$slots,"error-state",{},()=>[e.createVNode(V,{"icon-variant":"error",message:e.unref(s)("errorState.message"),title:e.unref(s)("errorState.title")},null,8,["message","title"])],!0)])):R.value?(e.openBlock(),e.createElementBlock("div",ne,[e.renderSlot(C.$slots,"empty-state",{},()=>[e.createVNode(V,{message:e.unref(s)("emptyState.message"),title:e.unref(s)("emptyState.title")},null,8,["message","title"])],!0)])):(e.openBlock(),e.createBlock(e.unref(U.AgGridVue),{key:2,"cache-block-size":e.unref(o)==="infinite"?e.unref(i):void 0,class:"table-data-grid-grid","column-defs":e.unref(d),context:e.unref(u),datasource:e.unref(o)==="infinite"?e.unref(F):void 0,"default-col-def":g,"infinite-initial-row-count":e.unref(o)==="infinite"?1:void 0,loading:x.value,"row-data":e.unref(o)==="unpaginated"?z.value:void 0,"row-model-type":e.unref(o)==="unpaginated"?"clientSide":"infinite","suppress-cell-focus":!0,"suppress-multi-sort":!0,theme:e.unref(O.themeQuartz),onCellClicked:e.unref(S),onGridReady:_,onRowClicked:e.unref(w),onSortChanged:e.unref(b)},null,8,["cache-block-size","column-defs","context","datasource","infinite-initial-row-count","loading","row-data","row-model-type","theme","onCellClicked","onRowClicked","onSortChanged"]))])}}}),[["__scopeId","data-v-17889e6a"]]);k.TableDataGrid=le,Object.defineProperty(k,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(E,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("ag-grid-vue3"),require("ag-grid-community"),require("@kong-ui-public/i18n")):typeof define=="function"&&define.amd?define(["exports","vue","ag-grid-vue3","ag-grid-community","@kong-ui-public/i18n"],e):(E=typeof globalThis<"u"?globalThis:E||self,e(E["kong-ui-public-table-data-grid"]={},E.Vue,E.AgGridVue,E.agGridCommunity,E["kong-ui-public-i18n"]))})(this,(function(E,e,J,I,G){"use strict";var F=(t=>(t.PENDING="PENDING",t.LOADING="LOADING",t.SUCCESS="SUCCESS",t.ERROR="ERROR",t))(F||{});const X=t=>!!t?.length;function Y(t,a,o,l=X){const r=e.computed(()=>l(t.value)),n=e.computed(()=>{const v=t.value!==void 0,s=a.value!==void 0&&a.value!==null;return o.value?"LOADING":r.value?"SUCCESS":s?"ERROR":v?"SUCCESS":"PENDING"});return{fetchState:F,hasData:r,state:n}}const Z=({emitState:t,fetchLifecycleState:a,hasData:o})=>{e.watch(()=>({hasData:o.value,state:a.value}),({hasData:l,state:r})=>{if(r!==F.PENDING){if(r===F.LOADING){t({hasData:l,state:"loading"});return}if(r===F.ERROR){t({hasData:l,state:"error"});return}t({hasData:l,state:"success"})}})},ee=({startRow:t,endRow:a})=>{const o=a-t;return{blockIndex:o>0?Math.floor(t/o):0,pageSize:o}},te=({startRow:t,rowsLength:a,pageSize:o,total:l,hasMore:r})=>{if(typeof l=="number")return l;if(r!==!0&&(r===!1||a<o))return t+a},oe=({fetcher:t,resetKey:a,sort:o})=>{const l=new Map,r=new Map,n=e.ref(0),u=e.shallowRef(),v=e.shallowRef(),s=e.shallowRef(),m=e.ref(0),h=e.ref(!1);let y,R;const k=g=>g===n.value&&y===t.value&&R===a?.value,N=()=>{h.value=m.value>0},c=()=>{s.value=void 0,m.value+=1,N()},f=()=>{m.value=Math.max(0,m.value-1),N()},S=g=>{const d=r.get(g);if(d)return d;let i;const p={promise:new Promise(C=>{i=C}),resolve:C=>i(C)};return r.set(g,p),p},w=(g,d)=>{d.resolve(!1),r.get(g)===d&&r.delete(g)},x=async({blockIndex:g,currentBlockCompletion:d,datasourceId:i})=>{if(g===0)return"ready";const p=r.get(g-1);if(!p)return w(g,d),"failed";const C=await p.promise;return k(i)?C?"ready":(w(g,d),"failed"):(w(g,d),"stale")},B=({blockIndex:g,currentBlockCompletion:d,getRowsParams:i,pageSize:p,result:C})=>{C.cursor!==void 0&&l.set(g,C.cursor),i.successCallback(C.data,te({startRow:i.startRow,rowsLength:C.data.length,pageSize:p,total:C.total,hasMore:C.hasMore})),i.startRow===0&&(v.value=C.data),d.resolve(!0)},T=({blockIndex:g,currentBlockCompletion:d,fetchError:i,getRowsParams:p})=>{s.value=i,p.failCallback(),w(g,d)},O=()=>{const g=t.value;if(!g)throw new Error("TableDataGrid requires a fetcher in infinite mode");y=g,R=a?.value;const d=n.value+1;return n.value=d,l.clear(),r.clear(),v.value=void 0,s.value=void 0,m.value=0,N(),{async getRows(i){if(!k(d)){i.failCallback();return}const{blockIndex:p,pageSize:C}=ee({startRow:i.startRow,endRow:i.endRow}),D=S(p);if(await x({blockIndex:p,currentBlockCompletion:D,datasourceId:d})!=="ready"||!k(d)){i.failCallback(),w(p,D);return}c();try{const K=p>0?l.get(p-1):void 0,V=await g({mode:"infinite",pageSize:C,cursor:K,sort:o?.value});if(!k(d)){i.failCallback(),w(p,D);return}B({blockIndex:p,currentBlockCompletion:D,getRowsParams:i,pageSize:C,result:V})}catch(K){if(!k(d)){i.failCallback(),w(p,D);return}T({blockIndex:p,currentBlockCompletion:D,fetchError:K,getRowsParams:i})}finally{k(d)&&f()}}}},z=()=>{u.value=O()};return e.watch([t,()=>a?.value],()=>{z()},{immediate:!0}),{datasource:e.readonly(u),data:e.shallowReadonly(v),error:e.readonly(s),isFetching:e.readonly(h)}},ae={emptyState:{title:"No Data",message:"There is no data to display."},errorState:{title:"An error occurred",message:"Data cannot be displayed due to an error."}};function A(){const t=G.createI18n("en-us",ae);return{i18n:t,i18nT:G.i18nTComponent(t)}}const{i18n:le}=A(),$=(t,a)=>{const o=Reflect.get(a,t.key);return t.valueFormatter?t.valueFormatter(o,a):String(o??"")},_=t=>typeof t!="number"?null:Number.isFinite(t)?t:null,ne=(t,a)=>t.reduce((o,l)=>{const r=_(Reflect.get(l,a.key));return r===null?o:{sum:o.sum+r,max:Math.max(o.max,r)}},{sum:0,max:0}),re=(t,a)=>{const o=(a??[]).filter(n=>Number.isFinite(n.value)&&t>=n.value);if(!o.length)return;const l=Math.max(...o.map(n=>n.value));return o.filter(n=>n.value===l).some(n=>n.type==="error")?"error":"warning"},se=(t,a,o)=>{if(t===null)return 0;const l=o==="relative"?a.sum:a.max;return l>0?Math.min(Math.max(t/l,0),1):0},ie=t=>{const a=o=>le.formatNumber(o,{maximumFractionDigits:2});return t>0&&t<.01?`< ${a(.01)} %`:`${a(t)} %`},L=({value:t,stats:a,header:o})=>{if(t===null||a.sum<=0)return;const l=t/a.sum*100;return o.percentageFormatter?.(l)??ie(l)},P=(t,a)=>a!==void 0&&a.length>(t?.length??-1)?a:t,ce=({rows:t,header:a,stats:o})=>t.reduce((l,r)=>({value:P(l.value,$(a,r))??"",relative:a.showPercentage?P(l.relative,L({value:_(Reflect.get(r,a.key)),stats:o,header:a})):void 0}),{value:""}),ue=["data-threshold"],de={class:"table-data-grid-cell-label-track"},me={class:"table-data-grid-cell-label"},fe={key:0,class:"table-data-grid-cell-relative","data-testid":"table-data-grid-cell-relative"},pe={key:0,"aria-hidden":"true",class:"table-data-grid-cell-label table-data-grid-cell-label-sizer"},ge=["data-text"],Ce=["data-text"],he=["data-threshold"],ve=e.defineComponent({name:"TableDataGridCellRenderer",__name:"TableDataGridCellRenderer",props:{params:{}},setup(t,{expose:a}){const o=e.shallowRef(t.params),l=e.ref(null),r=e.ref(!1),n=e.computed(()=>o.value.headerDef??{key:"",label:""}),u=e.computed(()=>o.value.context?.presentation),v=e.computed(()=>o.value.context?.cells?.tooltipTarget?.value??"body"),s=e.computed(()=>o.value.valueFormatted??String(o.value.value??"")),m=e.computed(()=>o.value.value),h=e.computed(()=>_(m.value)),y=e.computed(()=>u.value?.stats[n.value.key]),R=e.computed(()=>n.value.showPercentage&&y.value?L({value:h.value,stats:y.value,header:n.value}):void 0),k=e.computed(()=>!!n.value.bar&&!!y.value&&(h.value!==null||m.value===null||m.value===void 0)),N=e.computed(()=>k.value&&y.value?se(h.value,y.value,n.value.bar)*100:0),c=e.computed(()=>k.value?u.value?.labelSizers[n.value.key]:void 0),f=e.computed(()=>n.value.thresholds?.length&&h.value!==null?re(h.value,n.value.thresholds):void 0),S=e.computed(()=>({column:n.value,refreshCell:()=>{const i=o.value.node;i&&o.value.api.refreshCells({force:!0,rowNodes:[i]})},row:o.value.data??{},rowIndex:o.value.node?.rowIndex??0,rowValue:o.value.value,selected:o.value.node?.isSelected()??!1})),w=(i,{slots:p})=>{const C=o.value.colDef?.colId,D=o.value.context?.cells?.slots;return!C||C==="cell-icon"||!D?.[C]?p.default?.():e.h("span",{class:"table-data-grid-cell-slot-content"},e.renderSlot(D,C,S.value,()=>p.default?.()??[]))},x=()=>{const i=o.value.context?.cells?.slots;return i?.["cell-icon"]?e.renderSlot(i,"cell-icon",S.value):null};let B,T,O=!1;const z=()=>{const i=l.value;r.value=!!i&&i.scrollWidth>i.clientWidth},g=()=>{O||(T!==void 0&&cancelAnimationFrame(T),T=requestAnimationFrame(()=>{T=void 0,z()}))},d=i=>{if(B?.disconnect(),i){B?.observe(i);const p=i.closest(".ag-cell");p&&B?.observe(p)}g()};return e.onMounted(()=>{B=new ResizeObserver(g),d(l.value)}),e.watch(l,d),e.onUnmounted(()=>{O=!0,B?.disconnect(),T!==void 0&&cancelAnimationFrame(T)}),a({refresh(i){return o.value=i,e.nextTick(g),!0}}),(i,p)=>{const C=e.resolveComponent("KTooltip");return e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["table-data-grid-cell-renderer",{"table-data-grid-cell-renderer--bar":k.value,"table-data-grid-cell-renderer--percentage":!!R.value,[`table-data-grid-cell-renderer--text-${f.value}`]:!k.value&&!!f.value}]),"data-threshold":f.value},[e.createElementVNode("span",de,[e.createElementVNode("span",me,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(x))),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w),null,{default:e.withCtx(()=>[e.createVNode(C,{class:"table-data-grid-cell-tooltip",disabled:!r.value,"kpop-attributes":{popoverDelay:400},"max-width":"300",placement:"bottom-start",target:v.value,text:s.value},{default:e.withCtx(()=>[e.createElementVNode("span",{ref_key:"contentElement",ref:l,class:"table-data-grid-cell-content"},e.toDisplayString(s.value),513)]),_:1},8,["disabled","target","text"])]),_:1})),R.value?(e.openBlock(),e.createElementBlock("span",fe,"("+e.toDisplayString(R.value)+")",1)):e.createCommentVNode("",!0)]),c.value?(e.openBlock(),e.createElementBlock("span",pe,[e.createElementVNode("span",{class:"table-data-grid-cell-sizer-value","data-text":c.value.value},null,8,ge),c.value.relative?(e.openBlock(),e.createElementBlock("span",{key:0,class:"table-data-grid-cell-sizer-relative","data-text":`(${c.value.relative})`},null,8,Ce)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)]),k.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"table-data-grid-cell-bar","data-testid":"table-data-grid-cell-bar","data-threshold":f.value},[e.createElementVNode("span",{class:"table-data-grid-cell-bar-fill","data-testid":"table-data-grid-cell-bar-fill",style:e.normalizeStyle({width:`${N.value}%`})},null,4)],8,he)):e.createCommentVNode("",!0)],10,ue)}}}),be=({headers:t,slots:a,initialSort:o,mode:l,rows:r,tooltipTarget:n})=>{const u=l??"infinite",v=new Set,s=c=>!!(c.showPercentage||c.bar||c.thresholds?.length),m=()=>{t.value.forEach(c=>{if(!s(c))return;let f;if(u==="infinite"&&(c.showPercentage||c.bar)?f="percentage and bar presentation is only supported in unpaginated mode":u==="unpaginated"&&r?.value?.some(w=>{const x=Reflect.get(w,c.key);return x!=null&&_(x)===null})&&(f="contains non-finite or nonnumeric values; numeric presentation skips those values"),!f)return;const S=`${c.key}:${f}`;v.has(S)||(v.add(S),console.warn(`[TableDataGrid] Column "${c.key}" ${f}.`))})};e.watch([t,()=>r?.value],m,{immediate:!0});const h=e.computed(()=>{if(u!=="unpaginated")return{};const c=r?.value??[];return Object.fromEntries(t.value.filter(f=>f.showPercentage||f.bar).map(f=>[f.key,ne(c,f)]))}),y=e.computed(()=>{if(u!=="unpaginated")return{};const c=r?.value??[];return Object.fromEntries(t.value.filter(f=>f.bar).map(f=>[f.key,ce({rows:c,header:f,stats:h.value[f.key]})]))}),R=e.computed(()=>({cells:{slots:a,tooltipTarget:n},presentation:{stats:h.value,labelSizers:y.value}})),k=c=>{const f=o?.sortColumnKey===c.key;return{colId:c.key,flex:!c.width&&!c.maxWidth?1:void 0,headerName:c.label,maxWidth:c.maxWidth,minWidth:c.minWidth,sortable:c.sortable??!1,unSortIcon:c.showSortIcon,...f?{initialSort:o?.sortColumnOrder,initialSortIndex:0}:{},valueGetter:S=>S.data?.[c.key],valueFormatter:S=>S.data?$(c,S.data):String(S.value??""),width:c.width,cellRenderer:ve,cellRendererParams:{headerDef:c}}};return{columnDefs:e.computed(()=>t.value.map(k)),gridContext:R}},M=({config:t,headers:a,pageSize:o})=>{const l=new Set(a.filter(n=>n.sortable).map(n=>n.key)),r=t?.sortColumnKey&&l.has(t.sortColumnKey)?t.sortColumnKey:void 0;return{sortColumnKey:r,sortColumnOrder:r?t?.sortColumnOrder:void 0,pageSize:t?.pageSize??o,...t?.fitToContent!==void 0?{fitToContent:t.fitToContent}:{}}},U=(t,a)=>t.sortColumnKey===a.sortColumnKey&&t.sortColumnOrder===a.sortColumnOrder&&t.pageSize===a.pageSize&&t.fitToContent===a.fitToContent,ye=({headers:t,pageSize:a,tableConfig:o,emitTableConfigUpdate:l,onExternalConfigChange:r})=>{const n=e.computed(()=>o.value?M({config:o.value,headers:t.value,pageSize:a.value}):void 0),u=e.ref(n.value??M({config:void 0,headers:t.value,pageSize:a.value}));e.watch(n,h=>{h&&!U(h,u.value)&&(u.value=h,r?.(h))});const v=h=>{const y=M({config:{...u.value,...h},headers:t.value,pageSize:a.value});U(y,u.value)||(u.value=y,l(y))},s=e.computed(()=>({sortColumnKey:u.value.sortColumnKey,sortColumnOrder:u.value.sortColumnOrder})),m=e.computed(()=>o.value?.pageSize??a.value);return{activeTableConfig:e.readonly(u),activeSort:s,activePageSize:m,patchTableConfig:v}},ke=({cellClick:t,headers:a,rowClick:o})=>{const l=e.computed(()=>new Set(a.value.filter(s=>s.disableRowClick).map(s=>s.key))),r=s=>{const m=s.event?.target;return m instanceof Element?m.closest(".ag-cell")?.getAttribute("col-id")??void 0:void 0},n=s=>{const m=r(s);return!!(m&&l.value.has(m))};return{onCellClick:s=>{const m=s.colDef.colId;!s.data||!m||t({columnKey:m,row:s.data,value:s.value})},onRowClick:s=>{s.data&&!n(s)&&o(s.data,s)}}},Se=({activeSort:t,emitSort:a,patchTableConfig:o})=>{const l=(n,u)=>{n.applyColumnState({state:u.sortColumnKey?[{colId:u.sortColumnKey,sort:u.sortColumnOrder??null,sortIndex:0}]:[],defaultState:{sort:null,sortIndex:null}})};return{onSortChanged:n=>{const u=n.api.getColumnState().filter(m=>m.sort).sort((m,h)=>(m.sortIndex??0)-(h.sortIndex??0)),v=u[u.length-1],s=v?{sortColumnKey:v.colId,sortColumnOrder:v.sort}:{sortColumnKey:void 0,sortColumnOrder:void 0};s.sortColumnKey===t.value.sortColumnKey&&s.sortColumnOrder===t.value.sortColumnOrder||(a(s),o(s),u.length>1&&l(n.api,s))},applySortToGrid:l}},we={key:0,class:"table-error-state","data-testid":"table-error-state"},Re={key:1,class:"table-empty-state","data-testid":"table-empty-state"},De=((t,a)=>{const o=t.__vccOpts||t;for(const[l,r]of a)o[l]=r;return o})(e.defineComponent({__name:"TableDataGrid",props:{headers:{},error:{type:Boolean,default:!1},tableConfig:{},fetcher:{type:Function},mode:{},pageSize:{default:25},refreshKey:{type:[String,Number,Boolean]},rows:{}},emits:["grid:ready","state","row:click","cell:click","sort","update:tableConfig"],setup(t,{emit:a}){I.ModuleRegistry.registerModules([I.AllCommunityModule,I.ClientSideRowModelModule,I.InfiniteRowModelModule]);const o=t.mode??"infinite",l=a,{i18n:r}=A(),{t:n}=r,u=e.useSlots(),v=e.shallowRef(),s=e.useTemplateRef("rootElement"),m=e.shallowRef("body"),h=()=>{const b=document.fullscreenElement;m.value=b instanceof HTMLElement&&b.contains(s.value??null)?b:"body"};e.onMounted(()=>{h(),document.addEventListener("fullscreenchange",h)}),e.onBeforeUnmount(()=>{document.removeEventListener("fullscreenchange",h)});const{activeTableConfig:y,activeSort:R,activePageSize:k,patchTableConfig:N}=ye({headers:e.toRef(()=>t.headers),pageSize:e.toRef(()=>t.pageSize),tableConfig:e.toRef(()=>t.tableConfig),emitTableConfigUpdate:b=>l("update:tableConfig",b),onExternalConfigChange:b=>{v.value&&f(v.value,b)}}),{onSortChanged:c,applySortToGrid:f}=Se({activeSort:R,emitSort:b=>l("sort",b),patchTableConfig:N}),S=e.computed(()=>o==="unpaginated"&&!!y.value.fitToContent),w=I.themeQuartz.withParams({autoHeightMinBodyHeight:0}),{onCellClick:x,onRowClick:B}=ke({cellClick:b=>l("cell:click",b),headers:e.toRef(()=>t.headers),rowClick:(b,H)=>l("row:click",b,H)}),T={resizable:!1,sortable:!1,suppressMovable:!0},O=e.computed(()=>y.value.sortColumnKey),z=e.computed(()=>y.value.sortColumnOrder),g=e.computed(()=>[k.value,t.refreshKey,O.value,z.value]),d=o==="infinite"?oe({fetcher:e.toRef(()=>t.fetcher),resetKey:g,sort:R}):void 0,i=d?.datasource,p=e.computed(()=>d?d.data.value:t.rows),C=e.computed(()=>d?.isFetching.value??!1),D=e.computed(()=>t.rows?Array.from(t.rows):void 0),{columnDefs:W,gridContext:K}=be({headers:e.toRef(()=>t.headers),mode:o,rows:D,slots:u,tooltipTarget:m,initialSort:R.value}),{fetchState:V,hasData:q,state:j}=Y(p,e.toRef(()=>d?.error.value),C),Ee=e.computed(()=>j.value===V.SUCCESS&&!q.value);d&&Z({emitState:b=>l("state",b),fetchLifecycleState:j,hasData:q});const Te=b=>{v.value=b.api,l("grid:ready",b.api)};return(b,H)=>{const Q=e.resolveComponent("KEmptyState");return e.openBlock(),e.createElementBlock("div",{ref_key:"rootElement",ref:s,class:e.normalizeClass(["kong-ui-public-table-data-grid",{"fit-to-content":S.value}]),"data-testid":"table-data-grid"},[t.error?(e.openBlock(),e.createElementBlock("div",we,[e.renderSlot(b.$slots,"error-state",{},()=>[e.createVNode(Q,{"icon-variant":"error",message:e.unref(n)("errorState.message"),title:e.unref(n)("errorState.title")},null,8,["message","title"])],!0)])):Ee.value?(e.openBlock(),e.createElementBlock("div",Re,[e.renderSlot(b.$slots,"empty-state",{},()=>[e.createVNode(Q,{message:e.unref(n)("emptyState.message"),title:e.unref(n)("emptyState.title")},null,8,["message","title"])],!0)])):(e.openBlock(),e.createBlock(e.unref(J.AgGridVue),{key:2,"cache-block-size":e.unref(o)==="infinite"?e.unref(k):void 0,class:"table-data-grid-grid","column-defs":e.unref(W),context:e.unref(K),datasource:e.unref(o)==="infinite"?e.unref(i):void 0,"default-col-def":T,"dom-layout":S.value?"autoHeight":"normal","infinite-initial-row-count":e.unref(o)==="infinite"?1:void 0,loading:C.value,"row-data":e.unref(o)==="unpaginated"?D.value:void 0,"row-model-type":e.unref(o)==="unpaginated"?"clientSide":"infinite","suppress-cell-focus":!0,"suppress-multi-sort":!0,theme:e.unref(w),onCellClicked:e.unref(x),onGridReady:Te,onRowClicked:e.unref(B),onSortChanged:e.unref(c)},null,8,["cache-block-size","column-defs","context","datasource","dom-layout","infinite-initial-row-count","loading","row-data","row-model-type","theme","onCellClicked","onRowClicked","onSortChanged"]))],2)}}}),[["__scopeId","data-v-85f88484"]]);E.TableDataGrid=De,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})}));
@@ -17,6 +17,7 @@ declare const __VLS_export: <Row extends object>(__VLS_props: NonNullable<Awaite
17
17
  [columnKey: string]: (props: TableDataGridCellSlotProps<Row>) => unknown;
18
18
  'empty-state': () => unknown;
19
19
  'error-state': () => unknown;
20
+ 'cell-icon': (props: TableDataGridCellSlotProps<Row>) => unknown;
20
21
  };
21
22
  emit: {
22
23
  (e: "grid:ready", api: GridReadyEvent<Row>["api"]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"TableDataGrid.vue.d.ts","sourceRoot":"","sources":["../../../src/components/TableDataGrid.vue"],"names":[],"mappings":"AA2QA,OAAO,KAAK,EACV,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAEV,OAAO,EACP,cAAc,EACd,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAmB1B,QAAA,MAAM,YAAY,GAAK,GAAG,SAAS,MAAM,EACxC,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAuSO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;;;;;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI;WACtB,GAAG;;qCApRoB,0BAA0B,CAAC,GAAG,CAAC,KAAK,OAAO;uBAFzD,MAAM,OAAO;uBACb,MAAM,OAAO;;;YAMxB,YAAY,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;YACpD,OAAO,WAAW,yBAAyB,GAAG,IAAI;YAClD,WAAW,OAAO,GAAG,SAAS,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI;YACzD,YAAY,WAAW,6BAA6B,CAAC,GAAG,CAAC,GAAG,IAAI;YAChE,MAAM,WAAW,iBAAiB,GAAG,IAAI;YACzC,oBAAoB,WAAW,mBAAmB,GAAG,IAAI;;EA8Q3D,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"TableDataGrid.vue.d.ts","sourceRoot":"","sources":["../../../src/components/TableDataGrid.vue"],"names":[],"mappings":"AA6SA,OAAO,KAAK,EACV,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAEV,OAAO,EACP,cAAc,EACd,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAmB1B,QAAA,MAAM,YAAY,GAAK,GAAG,SAAS,MAAM,EACxC,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WA4UO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;;;;;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI;WACtB,GAAG;;qCAxToB,0BAA0B,CAAC,GAAG,CAAC,KAAK,OAAO;uBAHzD,MAAM,OAAO;uBACb,MAAM,OAAO;qBACf,CAAC,KAAK,EAAE,0BAA0B,CAAC,GAAG,CAAC,KAAK,OAAO;;;YAM5D,YAAY,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;YACpD,OAAO,WAAW,yBAAyB,GAAG,IAAI;YAClD,WAAW,OAAO,GAAG,SAAS,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI;YACzD,YAAY,WAAW,6BAA6B,CAAC,GAAG,CAAC,GAAG,IAAI;YAChE,MAAM,WAAW,iBAAiB,GAAG,IAAI;YACzC,oBAAoB,WAAW,mBAAmB,GAAG,IAAI;;EAkT3D,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { TableDataGridHeader } from '../types';
2
2
  import type { ICellRendererParams } from 'ag-grid-community';
3
- import type { Slots } from 'vue';
3
+ import type { Ref, Slots } from 'vue';
4
+ import { type TableDataGridPresentationContext } from '../utils/tableDataGridPresentation';
4
5
  type CellRendererParams = ICellRendererParams<Record<string, unknown>> & {
5
6
  /** Set internally via `cellRendererParams` so the renderer can resolve the
6
7
  * host slot and build its payload without leaking AG Grid's own `column`. */
@@ -8,7 +9,9 @@ type CellRendererParams = ICellRendererParams<Record<string, unknown>> & {
8
9
  context?: {
9
10
  cells?: {
10
11
  slots?: Slots;
12
+ tooltipTarget?: Readonly<Ref<string | HTMLElement>>;
11
13
  };
14
+ presentation?: TableDataGridPresentationContext;
12
15
  };
13
16
  };
14
17
  type __VLS_Props = {
@@ -1 +1 @@
1
- {"version":3,"file":"TableDataGridCellRenderer.vue.d.ts","sourceRoot":"","sources":["../../../src/components/TableDataGridCellRenderer.vue"],"names":[],"mappings":"AAyKA,OAAO,KAAK,EAA8B,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,CAAA;AAGhC,KAAK,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG;IACvE;iFAC6E;IAC7E,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,KAAK,CAAA;SAAE,CAAA;KAAE,CAAA;CACxC,CAAA;AAMD,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,kBAAkB,CAAA;CAC3B,CAAC;AAsLF,QAAA,MAAM,YAAY;wBArFI,kBAAkB;oPAwFtC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"TableDataGridCellRenderer.vue.d.ts","sourceRoot":"","sources":["../../../src/components/TableDataGridCellRenderer.vue"],"names":[],"mappings":"AA2YA,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAuB,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,CAAA;AAY1D,OAAO,EAKL,KAAK,gCAAgC,EACtC,MAAM,oCAAoC,CAAA;AAE3C,KAAK,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG;IACvE;iFAC6E;IAC7E,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,KAAK,CAAC;YAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAA;SAAE,CAAA;QAC9E,YAAY,CAAC,EAAE,gCAAgC,CAAA;KAChD,CAAA;CACF,CAAA;AAMD,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,kBAAkB,CAAA;CAC3B,CAAC;AA6SF,QAAA,MAAM,YAAY;wBA7JI,kBAAkB;oPAgKtC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1,14 +1,18 @@
1
1
  import type { TableDataGridHeader, TableDataGridRow, TableDataGridSort } from '../types';
2
2
  import type { ColDef } from 'ag-grid-community';
3
3
  import type { Ref, Slots } from 'vue';
4
+ import { type TableDataGridColumnStats, type TableDataGridLabelSizer } from '../utils/tableDataGridPresentation';
4
5
  /**
5
6
  * Converts `headers` into what AG Grid needs to render the table's columns:
6
7
  * the column definitions themselves, and the shared grid `context`.
7
8
  */
8
- export declare const useTableDataGridColumnDefs: <Row extends object = TableDataGridRow>({ headers, slots, initialSort, }: {
9
+ export declare const useTableDataGridColumnDefs: <Row extends object = TableDataGridRow>({ headers, slots, initialSort, mode, rows, tooltipTarget, }: {
9
10
  headers: Readonly<Ref<Array<TableDataGridHeader<Row>>>>;
10
11
  slots: Slots;
11
12
  initialSort?: TableDataGridSort;
13
+ mode?: "infinite" | "unpaginated";
14
+ rows?: Readonly<Ref<readonly Row[] | undefined>>;
15
+ tooltipTarget?: Readonly<Ref<string | HTMLElement>>;
12
16
  }) => {
13
17
  columnDefs: import("vue").ComputedRef<ColDef<Row, any>[]>;
14
18
  gridContext: import("vue").ComputedRef<{
@@ -16,6 +20,11 @@ export declare const useTableDataGridColumnDefs: <Row extends object = TableData
16
20
  slots: Readonly<{
17
21
  [name: string]: import("vue").Slot<any> | undefined;
18
22
  }>;
23
+ tooltipTarget: Readonly<Ref<string | HTMLElement, string | HTMLElement>> | undefined;
24
+ };
25
+ presentation: {
26
+ stats: Record<string, TableDataGridColumnStats>;
27
+ labelSizers: Record<string, TableDataGridLabelSizer>;
19
28
  };
20
29
  }>;
21
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useTableDataGridColumnDefs.d.ts","sourceRoot":"","sources":["../../../src/composables/useTableDataGridColumnDefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,CAAA;AAIrC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,GAAG,SAAS,MAAM,GAAG,gBAAgB,EAAE,kCAI/E;IACD,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;;;;;;;;;CAiCA,CAAA"}
1
+ {"version":3,"file":"useTableDataGridColumnDefs.d.ts","sourceRoot":"","sources":["../../../src/composables/useTableDataGridColumnDefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,CAAA;AAGrC,OAAO,EAKL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC7B,MAAM,oCAAoC,CAAA;AAE3C;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,GAAG,SAAS,MAAM,GAAG,gBAAgB,EAAE,6DAO/E;IACD,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,CAAA;IACjC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAA;IAChD,aAAa,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAA;CACpD;;;;;;;;;;;;;;CAkHA,CAAA"}
@@ -22,10 +22,12 @@ export declare const useTableDataGridConfig: <Row extends object = TableDataGrid
22
22
  readonly sortColumnKey?: string | undefined;
23
23
  readonly sortColumnOrder?: import("..").TableDataGridSortDirection | undefined;
24
24
  readonly pageSize?: number | undefined;
25
+ readonly fitToContent?: boolean | undefined;
25
26
  }, {
26
27
  readonly sortColumnKey?: string | undefined;
27
28
  readonly sortColumnOrder?: import("..").TableDataGridSortDirection | undefined;
28
29
  readonly pageSize?: number | undefined;
30
+ readonly fitToContent?: boolean | undefined;
29
31
  }>>;
30
32
  activeSort: import("vue").ComputedRef<TableDataGridSort>;
31
33
  activePageSize: import("vue").ComputedRef<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"useTableDataGridConfig.d.ts","sourceRoot":"","sources":["../../../src/composables/useTableDataGridConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC7G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAI9B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,GAAI,GAAG,SAAS,MAAM,GAAG,gBAAgB,EAAE,qGAM3E;IACD,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAC/B,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAA;IAC3D,qBAAqB,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAC5D,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAC/D;;;;;;;;;;;;8BAsBkC,OAAO,CAAC,mBAAmB,CAAC;CA8B9D,CAAA"}
1
+ {"version":3,"file":"useTableDataGridConfig.d.ts","sourceRoot":"","sources":["../../../src/composables/useTableDataGridConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC7G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAI9B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,GAAI,GAAG,SAAS,MAAM,GAAG,gBAAgB,EAAE,qGAM3E;IACD,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAC/B,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAA;IAC3D,qBAAqB,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAC5D,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAC/D;;;;;;;;;;;;;;8BAsBkC,OAAO,CAAC,mBAAmB,CAAC;CA8B9D,CAAA"}
@@ -21,6 +21,10 @@ export type TableDataGridCellSlotProps<Row extends object = TableDataGridRow> =
21
21
  /** Forces AG Grid to re-render this cell. */
22
22
  refreshCell: () => void;
23
23
  };
24
+ export type TableDataGridThreshold = {
25
+ value: number;
26
+ type: 'warning' | 'error';
27
+ };
24
28
  export type TableDataGridHeader<Row extends object = TableDataGridRow> = {
25
29
  key: Extract<keyof Row, string>;
26
30
  label: string;
@@ -41,6 +45,20 @@ export type TableDataGridHeader<Row extends object = TableDataGridRow> = {
41
45
  * when `sortable` is true.
42
46
  */
43
47
  showSortIcon?: boolean;
48
+ /** Formats the raw cell value for display. */
49
+ valueFormatter?: (value: unknown, row: Row) => string;
50
+ /** Shows the row's share of the full returned column total. */
51
+ showPercentage?: boolean;
52
+ /** Formats percentage points, e.g. 50 for a 50% share (not the 0–1 ratio). */
53
+ percentageFormatter?: (percentage: number) => string;
54
+ /** Renders a bar using the column total or maximum as its denominator. */
55
+ bar?: 'relative' | 'absolute';
56
+ /**
57
+ * Colors the bar when rendered, or the value text otherwise.
58
+ * Compares the raw numeric value with each threshold independently of `bar`
59
+ * and works in both infinite and unpaginated modes.
60
+ */
61
+ thresholds?: TableDataGridThreshold[];
44
62
  };
45
63
  export type TableDataGridSortDirection = 'asc' | 'desc';
46
64
  export type TableDataGridSort = {
@@ -49,6 +67,8 @@ export type TableDataGridSort = {
49
67
  };
50
68
  export type TableDataGridConfig = TableDataGridSort & {
51
69
  pageSize?: number;
70
+ /** Size to all returned rows in unpaginated mode. Ignored in infinite mode. */
71
+ fitToContent?: boolean;
52
72
  };
53
73
  export type TableDataGridProps<Row extends object = TableDataGridRow> = {
54
74
  headers: Array<TableDataGridHeader<Row>>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tableConfig.d.ts","sourceRoot":"","sources":["../../../src/utils/tableConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE1F;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,SAAS,MAAM,GAAG,gBAAgB,EAAE,gCAIvE;IACD,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAA;IACvC,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACxC,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,mBAWH,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,KAAG,OAIlF,CAAA"}
1
+ {"version":3,"file":"tableConfig.d.ts","sourceRoot":"","sources":["../../../src/utils/tableConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE1F;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,SAAS,MAAM,GAAG,gBAAgB,EAAE,gCAIvE;IACD,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAA;IACvC,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACxC,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,mBAYH,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,KAAG,OAKlF,CAAA"}
@@ -0,0 +1,87 @@
1
+ import type { TableDataGridHeader, TableDataGridThreshold } from '../types';
2
+ export type TableDataGridColumnStats = {
3
+ sum: number;
4
+ max: number;
5
+ };
6
+ /** Longest value and percentage text in a bar column, used to size a shared label track. */
7
+ export type TableDataGridLabelSizer = {
8
+ value: string;
9
+ relative?: string;
10
+ };
11
+ /** Stats and label sizers are only present for unpaginated columns with percentage or bar presentation. */
12
+ export type TableDataGridPresentationContext = {
13
+ stats: Record<string, TableDataGridColumnStats>;
14
+ labelSizers: Record<string, TableDataGridLabelSizer>;
15
+ };
16
+ /**
17
+ * Return the text a cell displays: the header's `valueFormatter` output, or the raw value as a string.
18
+ * Shared by the AG Grid column formatter and the label sizer so both measure the same text.
19
+ *
20
+ * @param header - Column whose optional value formatter applies.
21
+ * @param row - Row that owns the value.
22
+ * @returns Display text for the cell.
23
+ */
24
+ export declare const formatCellValue: <Row extends object>(header: Pick<TableDataGridHeader<Row>, "key" | "valueFormatter">, row: Row) => string;
25
+ /**
26
+ * Accept numeric values only; generic grid cells must not coerce strings or booleans.
27
+ *
28
+ * @param value - Raw cell value.
29
+ * @returns The finite number unchanged, or null without coercion.
30
+ */
31
+ export declare const toFiniteNumber: (value: unknown) => number | null;
32
+ /**
33
+ * Calculate sum and maximum from the complete returned result, ignoring missing or invalid values.
34
+ *
35
+ * @param rows - Complete result for the current query.
36
+ * @param header - Column key to aggregate.
37
+ * @returns Column sum and maximum, with the maximum floored at zero.
38
+ */
39
+ export declare const getColumnStats: (rows: readonly object[], header: Pick<TableDataGridHeader, "key">) => TableDataGridColumnStats;
40
+ /**
41
+ * Preserve TopN threshold precedence: highest crossed value wins, with error winning ties.
42
+ *
43
+ * @param value - Numeric cell value.
44
+ * @param thresholds - Optional warning and error thresholds.
45
+ * @returns The highest crossed threshold type, or undefined.
46
+ */
47
+ export declare const getThresholdType: (value: number, thresholds: readonly TableDataGridThreshold[] | undefined) => TableDataGridThreshold["type"] | undefined;
48
+ /**
49
+ * Return a clamped 0–1 ratio: relative uses the column sum; absolute uses its maximum.
50
+ *
51
+ * @param value - Numeric cell value, or null when missing.
52
+ * @param stats - Sum and maximum of the complete column.
53
+ * @param mode - Relative (sum) or absolute (maximum) scaling.
54
+ * @returns A ratio between zero and one; zero for missing values or nonpositive denominators.
55
+ */
56
+ export declare const getBarRatio: (value: number | null, stats: TableDataGridColumnStats, mode: TableDataGridHeader["bar"]) => number;
57
+ /**
58
+ * Format a value as its share of the column total.
59
+ *
60
+ * @param value - Numeric cell value, or null when missing.
61
+ * @param stats - Sum and maximum of the complete column.
62
+ * @param header - Column whose optional percentage formatter applies.
63
+ * @returns Percentage text, or undefined when the share is undefined.
64
+ */
65
+ export declare const formatRelativeValue: ({ value, stats, header, }: {
66
+ value: number | null;
67
+ stats: TableDataGridColumnStats;
68
+ header: Pick<TableDataGridHeader, "percentageFormatter">;
69
+ }) => string | undefined;
70
+ /**
71
+ * Find the longest value and percentage text in the complete result.
72
+ *
73
+ * Every bar cell reserves this text's width, so bars start at the same offset across rows.
74
+ * Length approximates rendered width, which holds for numeric text. Host slot content and
75
+ * cell icons are not measured.
76
+ *
77
+ * @param rows - Complete result for the current query.
78
+ * @param header - Bar column to measure.
79
+ * @param stats - Sum and maximum of the complete column.
80
+ * @returns The longest value text and, when percentages show, the longest percentage text.
81
+ */
82
+ export declare const getLabelSizer: <Row extends object>({ rows, header, stats, }: {
83
+ rows: readonly Row[];
84
+ header: TableDataGridHeader<Row>;
85
+ stats: TableDataGridColumnStats;
86
+ }) => TableDataGridLabelSizer;
87
+ //# sourceMappingURL=tableDataGridPresentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableDataGridPresentation.d.ts","sourceRoot":"","sources":["../../../src/utils/tableDataGridPresentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,UAAU,CAAA;AAKjB,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,4FAA4F;AAC5F,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,2GAA2G;AAC3G,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;CACrD,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,GAAG,SAAS,MAAM,EAChD,QAAQ,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,EAChE,KAAK,GAAG,KACP,MAMF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,IAMxD,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,SAAS,MAAM,EAAE,EACvB,QAAQ,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,KACvC,wBAcF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,YAAY,SAAS,sBAAsB,EAAE,GAAG,SAAS,KACxD,sBAAsB,CAAC,MAAM,CAAC,GAAG,SAanC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,MAAM,GAAG,IAAI,EACpB,OAAO,wBAAwB,EAC/B,MAAM,mBAAmB,CAAC,KAAK,CAAC,KAC/B,MAYF,CAAA;AAgBD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAAI,2BAIjC;IACD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,wBAAwB,CAAA;IAC/B,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAA;CACzD,KAAG,MAAM,GAAG,SAQZ,CAAA;AAMD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GAAI,GAAG,SAAS,MAAM,EAAE,0BAI/C;IACD,IAAI,EAAE,SAAS,GAAG,EAAE,CAAA;IACpB,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAA;IAChC,KAAK,EAAE,wBAAwB,CAAA;CAChC,KAAG,uBAYH,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kong-ui-public/table-data-grid",
3
- "version": "0.6.1-pr.3892.2ccd05c45.0",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "main": "./dist/table-data-grid.umd.js",
6
6
  "module": "./dist/table-data-grid.es.js",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "devDependencies": {
24
24
  "@kong-ui-public/i18n": "^2.5.1",
25
- "@kong/kongponents": "9.64.21-pr.3445.a302c28.0",
25
+ "@kong/kongponents": "9.64.18",
26
26
  "vue": "^3.5.41"
27
27
  },
28
28
  "repository": {