ods-ant 0.4.0 → 0.4.1

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,4 +1,4 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`../chunk-Bmb41Sf3.cjs`),t=require(`../theme.cjs`),n=require(`../useCustomIcon-DbSB56Pd.cjs`),r=require(`./Tooltip.cjs`),i=require(`../navigation/Pagination.cjs`);let a=require(`antd`),o=require(`react`);o=e.t(o,1);let s=require(`react/jsx-runtime`);var c=`ds-table-styles`,l=e=>typeof e==`string`||typeof e==`number`,u=({value:e,withTooltip:t,tooltipDelay:n,tooltipSize:i,tooltipTitle:a})=>{let c=o.default.useRef(null),[l,u]=o.default.useState(!1),d=String(e),f=o.default.useCallback(()=>{let e=c.current;if(!e)return;let t=e.scrollWidth>e.clientWidth;u(e=>e===t?e:t)},[]);o.default.useEffect(()=>{let e=c.current;if(!e)return;f();let t=requestAnimationFrame(()=>{f(),requestAnimationFrame(f)}),n=window.setTimeout(f,120),r=typeof ResizeObserver<`u`?new ResizeObserver(f):null;return r?r.observe(e):typeof window<`u`&&window.addEventListener(`resize`,f),()=>{r?r.disconnect():typeof window<`u`&&window.removeEventListener(`resize`,f),cancelAnimationFrame(t),window.clearTimeout(n)}},[d,f]);let p=(0,s.jsx)(`span`,{ref:c,className:`ds-table-cell-truncate`,onMouseOverCapture:f,onFocus:f,children:d});return t?(0,s.jsx)(r.Tooltip,{title:l?void 0:null,dsSize:i,dsTitle:a,dsBody:d,mouseEnterDelay:n,trigger:`hover`,children:p}):p};function d(...e){return e.filter(Boolean).join(` `)}function f(e){if(e===!1)return!1;let{tooltip:n}=t.dsSemanticTokens,r=e&&typeof e==`object`?e:void 0;return{...r,color:r?.color??n.surface.background,arrow:r?.arrow??!0,classNames:{...r?.classNames,root:d(`ds-tooltip-overlay`,`ds-tooltip-size-normal`,r?.classNames?.root,r?.overlayClassName)},styles:{...r?.styles,container:{borderRadius:n.radius,color:n.surface.body,letterSpacing:0,minWidth:n.width.normal.min,maxWidth:n.width.normal.max,padding:n.padding.normal,...r?.styles?.container}}}}function p(e,t){return e&&e.map(e=>{let r={...e};return Array.isArray(r.children)&&r.children.length>0&&(r.children=p(r.children,t)),r.sorter&&(r.showSorterTooltip=f(r.showSorterTooltip===void 0?t:r.showSorterTooltip)),r.sorter&&!r.sortIcon&&(r.sortIcon=({sortOrder:e})=>(0,s.jsx)(`span`,{className:`ds-table-sort-icon`,"aria-hidden":`true`,children:(0,s.jsx)(n.t,{name:e===`ascend`?`arrowThickUp`:`arrowThickDown`,size:10,style:{color:`inherit`}})})),r})}function m(e,t,n){if(!e||t===`none`||e.length===0)return e;let r=t===`first`||t===`both`,i=t===`last`||t===`both`,a=e.length-1;return e.map((e,t)=>{let o={...e},s=r&&t===0,c=i&&t===a;return s&&(o.fixed=`left`,o.width??=n),c&&(o.fixed=`right`,o.width??=n),o})}function h(e,t,n,r,i){return e&&e.map(e=>{let a={...e};if(Array.isArray(a.children)&&a.children.length>0)return a.children=h(a.children,t,n,r,i),a;let o=a.render;return a.ellipsis==null||a.ellipsis===!0?a.ellipsis={showTitle:!1}:typeof a.ellipsis==`object`&&(a.ellipsis={...a.ellipsis,showTitle:!1}),a.render=(e,a,c)=>{let d=o?o(e,a,c):e;return l(d)?(0,s.jsx)(u,{value:d,withTooltip:t,tooltipDelay:n,tooltipSize:r,tooltipTitle:i}):!o&&l(e)?(0,s.jsx)(u,{value:e,withTooltip:t,tooltipDelay:n,tooltipSize:r,tooltipTitle:i}):d},a})}function g(e){if(typeof e?.key==`string`)return e.key;if(typeof e?.dataIndex==`string`)return e.dataIndex;if(typeof e?.dataIndex==`number`)return String(e.dataIndex)}function _(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`&&e.endsWith(`px`)){let t=Number(e.slice(0,-2));return Number.isFinite(t)?t:void 0}}function ee(e,t,n){let r=Math.max(t,Math.round(e));return typeof n==`number`?Math.min(n,r):r}function v(e,t,n={}){if(!e)return n;let r={...n},i=e=>{e.forEach(e=>{if(Array.isArray(e.children)&&e.children.length>0){i(e.children);return}let n=g(e);!n||r[n]!=null||(r[n]=_(e.width)??t)})};return i(e),r}function y(e,t){if(Array.isArray(t))return t.reduce((e,t)=>{if(e&&typeof e==`object`)return e[String(t)]},e);if(typeof t==`string`||typeof t==`number`)return e[String(t)]}function te(e,t,n){if(Array.isArray(t)&&t.length>0){let r={...e},i=r;for(let e=0;e<t.length-1;e+=1){let n=String(t[e]),r=i[n],a=r&&typeof r==`object`?{...r}:{};i[n]=a,i=a}return i[String(t[t.length-1])]=n,r}return typeof t==`string`||typeof t==`number`?{...e,[String(t)]:n}:e}function ne(e,t,n){return e&&e.map(e=>{let r={...e};if(Array.isArray(r.children)&&r.children.length>0)return r.children=ne(r.children,t,n),r;let i=g(r);return!(i&&t.has(i))||r.dataIndex==null||(r.render=(e,t,i)=>{let o=y(t,r.dataIndex),c=typeof o==`number`;return(0,s.jsx)(a.Input,{className:`ds-table-edit-input`,type:c?`number`:`text`,size:`small`,value:o==null?``:String(o),onChange:e=>{let t=e.target.value,a=c?t===``?null:Number(t):t;n(i,r.dataIndex,a)}})}),r})}function re(e,t){return e&&e.map(e=>{let n={...e};if(Array.isArray(n.children)&&n.children.length>0)return n.children=re(n.children,t),n;let r=g(n);return!r||t.has(r)?n:null}).filter(e=>e!==null)}var ie=({columns:e,visibleColumns:t,onToggle:n})=>{let r=o.default.useMemo(()=>{let t=[],n=e=>{e.forEach(e=>{if(Array.isArray(e.children)&&e.children.length>0)n(e.children);else{let n=g(e),r=e.title||(typeof e.dataIndex==`string`?e.dataIndex:`Column`);n&&t.push({key:n,label:String(r)})}})};return n(e),t},[e]);return(0,s.jsxs)(`div`,{className:`ds-table-column-visibility-control`,children:[(0,s.jsx)(`label`,{className:`ds-table-control-label`,children:`Columns:`}),(0,s.jsx)(`div`,{className:`ds-table-control-checkboxes`,children:r.map(({key:e,label:r})=>(0,s.jsxs)(`label`,{className:`ds-table-control-checkbox`,children:[(0,s.jsx)(`input`,{type:`checkbox`,checked:t.has(e),onChange:t=>n(e,t.target.checked)}),(0,s.jsx)(`span`,{children:r})]},e))})]})},ae=({width:e,minWidth:t=96,maxWidth:n,onResize:r,children:i,className:a,style:c,...l})=>{let u=o.default.useRef(0),f=o.default.useRef(0),p=o.default.useCallback(e=>{r&&r(ee(e,t,n))},[n,t,r]),m=o.default.useCallback(n=>{if(!r||typeof document>`u`)return;n.preventDefault(),n.stopPropagation(),f.current=n.clientX,u.current=e??n.currentTarget.parentElement?.getBoundingClientRect().width??t;let i=e=>{let t=e.clientX-f.current;p(u.current+t)},a=()=>{document.removeEventListener(`mousemove`,i),document.removeEventListener(`mouseup`,a),document.body.style.cursor=``,document.body.style.userSelect=``};document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,document.addEventListener(`mousemove`,i),document.addEventListener(`mouseup`,a)},[t,r,p,e]),h=o.default.useCallback(t=>{!r||e==null||t.key!==`ArrowLeft`&&t.key!==`ArrowRight`||(t.preventDefault(),t.stopPropagation(),p(e+(t.key===`ArrowLeft`?-1:1)*(t.shiftKey?24:8)))},[r,p,e]);return(0,s.jsxs)(`th`,{...l,className:d(a,r?`ds-table-resizable-header-cell`:void 0),style:{...c,width:e},children:[i,r?(0,s.jsx)(`button`,{type:`button`,className:`ds-table-resize-handle`,"aria-label":`Resize column`,onClick:e=>e.stopPropagation(),onMouseDown:m,onKeyDown:h}):null]})};function oe(e,t,n,r,i,a){return e&&e.map(e=>{let o={...e};if(Array.isArray(o.children)&&o.children.length>0)return o.children=oe(o.children,t,n,r,i,a),o;let s=g(o);if(!s)return o;let c=t[s]??_(o.width)??a,l=o.onHeaderCell;return o.width=c,o.onHeaderCell=e=>{let t=l?.(e)??{};return{...t,width:c,minWidth:r,maxWidth:i,onResize:e=>n(s,e),className:d(t.className,`ds-table-resizable-header`)}},o})}function se(){if(typeof document>`u`)return;let{table:e,checkbox:n}=t.dsSemanticTokens,r=document.getElementById(c);r||(r=document.createElement(`style`),r.id=c,document.head.appendChild(r)),r.textContent=`
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`../chunk-Bmb41Sf3.cjs`),t=require(`../theme.cjs`),n=require(`../useCustomIcon-DbSB56Pd.cjs`),r=require(`./Tooltip.cjs`),i=require(`../navigation/Pagination.cjs`);let a=require(`antd`),o=require(`react`);o=e.t(o,1);let s=require(`react/jsx-runtime`);var c=`ds-table-styles`,l=e=>typeof e==`string`||typeof e==`number`,u=({value:e,withTooltip:t,tooltipDelay:n,tooltipSize:i,tooltipTitle:a})=>{let c=o.default.useRef(null),[l,u]=o.default.useState(!1),d=String(e),f=o.default.useCallback(()=>{let e=c.current;if(!e)return;let t=e.scrollWidth>e.clientWidth;u(e=>e===t?e:t)},[]);o.default.useEffect(()=>{let e=c.current;if(!e)return;f();let t=requestAnimationFrame(()=>{f(),requestAnimationFrame(f)}),n=window.setTimeout(f,120),r=typeof ResizeObserver<`u`?new ResizeObserver(f):null;return r?r.observe(e):typeof window<`u`&&window.addEventListener(`resize`,f),()=>{r?r.disconnect():typeof window<`u`&&window.removeEventListener(`resize`,f),cancelAnimationFrame(t),window.clearTimeout(n)}},[d,f]);let p=(0,s.jsx)(`span`,{ref:c,className:`ds-table-cell-truncate`,onMouseOverCapture:f,onFocus:f,children:d});return t?(0,s.jsx)(r.Tooltip,{title:l?void 0:null,dsSize:i,dsTitle:a,dsBody:d,mouseEnterDelay:n,trigger:`hover`,children:p}):p};function d(...e){return e.filter(Boolean).join(` `)}function f(e){if(e===!1)return!1;let{tooltip:n}=t.dsSemanticTokens,r=e&&typeof e==`object`?e:void 0;return{...r,color:r?.color??n.surface.background,arrow:r?.arrow??!0,classNames:{...r?.classNames,root:d(`ds-tooltip-overlay`,`ds-tooltip-size-normal`,r?.classNames?.root,r?.overlayClassName)},styles:{...r?.styles,container:{borderRadius:n.radius,color:n.surface.body,letterSpacing:0,minWidth:n.width.normal.min,maxWidth:n.width.normal.max,padding:n.padding.normal,...r?.styles?.container}}}}function p(e,t){return e&&e.map(e=>{let r={...e};return Array.isArray(r.children)&&r.children.length>0&&(r.children=p(r.children,t)),r.sorter&&(r.showSorterTooltip=f(r.showSorterTooltip===void 0?t:r.showSorterTooltip)),r.sorter&&!r.sortIcon&&(r.sortIcon=({sortOrder:e})=>(0,s.jsx)(`span`,{className:`ds-table-sort-icon`,"aria-hidden":`true`,children:(0,s.jsx)(n.t,{name:e===`ascend`?`arrowThickUp`:`arrowThickDown`,size:10,style:{color:`inherit`}})})),r})}function ee(e,t,n){if(!e||t===`none`||e.length===0)return e;let r=t===`first`||t===`both`,i=t===`last`||t===`both`,a=e.length-1;return e.map((e,t)=>{let o={...e},s=r&&t===0,c=i&&t===a;return s&&(o.fixed=`left`,o.width??=n),c&&(o.fixed=`right`,o.width??=n),o})}function m(e,t,n,r,i){return e&&e.map(e=>{let a={...e};if(Array.isArray(a.children)&&a.children.length>0)return a.children=m(a.children,t,n,r,i),a;let o=a.render;return a.ellipsis==null||a.ellipsis===!0?a.ellipsis={showTitle:!1}:typeof a.ellipsis==`object`&&(a.ellipsis={...a.ellipsis,showTitle:!1}),a.render=(e,a,c)=>{let d=o?o(e,a,c):e;return l(d)?(0,s.jsx)(u,{value:d,withTooltip:t,tooltipDelay:n,tooltipSize:r,tooltipTitle:i}):!o&&l(e)?(0,s.jsx)(u,{value:e,withTooltip:t,tooltipDelay:n,tooltipSize:r,tooltipTitle:i}):d},a})}function h(e){if(typeof e?.key==`string`)return e.key;if(typeof e?.dataIndex==`string`)return e.dataIndex;if(typeof e?.dataIndex==`number`)return String(e.dataIndex)}function g(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`&&e.endsWith(`px`)){let t=Number(e.slice(0,-2));return Number.isFinite(t)?t:void 0}}function _(e,t,n){let r=Math.max(t,Math.round(e));return typeof n==`number`?Math.min(n,r):r}function te(e,t,n={}){if(!e)return n;let r={...n},i=e=>{e.forEach(e=>{if(Array.isArray(e.children)&&e.children.length>0){i(e.children);return}let t=h(e);if(!t||r[t]!=null)return;let n=g(e.width);n!=null&&(r[t]=n)})};return i(e),r}function v(e){let t=e==null?``:String(e);return t?t.length*8:0}function y(e){return typeof e==`string`||typeof e==`number`?String(e):``}function ne(e,t,n){if(!e)return e;let r=t.slice(0,Math.max(0,n.sampleSize)),i=e=>{let t={...e};if(Array.isArray(t.children)&&t.children.length>0)return t.children=t.children.map(i),t;if(t.width!=null)return t;let a=h(t);if(n.enabledColumnKeys&&(!a||!n.enabledColumnKeys.has(a)))return t;let o=v(y(t.title)),s=r.reduce((e,n,r)=>{let i=b(n,t.dataIndex),a=typeof t.render==`function`?t.render(i,n,r):i,o=l(a)?v(a):v(i);return Math.max(e,o)},0);return t.width=_(Math.max(o,s)+n.cellPadding,n.minWidth,n.maxWidth),t};return e.map(i)}function re(e){if(!(e===!0||e===!1||e==null)){if(Array.isArray(e))return new Set(e.map(String));if(typeof e==`string`)return new Set(e.split(`,`).map(e=>e.trim()).filter(Boolean));if(typeof e==`object`)return new Set(Object.entries(e).filter(([,e])=>!!e).map(([e])=>e))}}function b(e,t){if(Array.isArray(t))return t.reduce((e,t)=>{if(e&&typeof e==`object`)return e[String(t)]},e);if(typeof t==`string`||typeof t==`number`)return e[String(t)]}function ie(e,t,n){if(Array.isArray(t)&&t.length>0){let r={...e},i=r;for(let e=0;e<t.length-1;e+=1){let n=String(t[e]),r=i[n],a=r&&typeof r==`object`?{...r}:{};i[n]=a,i=a}return i[String(t[t.length-1])]=n,r}return typeof t==`string`||typeof t==`number`?{...e,[String(t)]:n}:e}function ae(e,t,n){return e&&e.map(e=>{let r={...e};if(Array.isArray(r.children)&&r.children.length>0)return r.children=ae(r.children,t,n),r;let i=h(r);return!(i&&t.has(i))||r.dataIndex==null||(r.render=(e,t,i)=>{let o=b(t,r.dataIndex),c=typeof o==`number`;return(0,s.jsx)(a.Input,{className:`ds-table-edit-input`,type:c?`number`:`text`,size:`small`,value:o==null?``:String(o),onChange:e=>{let t=e.target.value,a=c?t===``?null:Number(t):t;n(i,r.dataIndex,a)}})}),r})}function oe(e,t){return e&&e.map(e=>{let n={...e};if(Array.isArray(n.children)&&n.children.length>0)return n.children=oe(n.children,t),n;let r=h(n);return!r||t.has(r)?n:null}).filter(e=>e!==null)}var se=({columns:e,visibleColumns:t,onToggle:n})=>{let r=o.default.useMemo(()=>{let t=[],n=e=>{e.forEach(e=>{if(Array.isArray(e.children)&&e.children.length>0)n(e.children);else{let n=h(e),r=e.title||(typeof e.dataIndex==`string`?e.dataIndex:`Column`);n&&t.push({key:n,label:String(r)})}})};return n(e),t},[e]);return(0,s.jsxs)(`div`,{className:`ds-table-column-visibility-control`,children:[(0,s.jsx)(`label`,{className:`ds-table-control-label`,children:`Columns:`}),(0,s.jsx)(`div`,{className:`ds-table-control-checkboxes`,children:r.map(({key:e,label:r})=>(0,s.jsxs)(`label`,{className:`ds-table-control-checkbox`,children:[(0,s.jsx)(`input`,{type:`checkbox`,checked:t.has(e),onChange:t=>n(e,t.target.checked)}),(0,s.jsx)(`span`,{children:r})]},e))})]})},ce=({width:e,minWidth:t=96,maxWidth:n,onResize:r,children:i,className:a,style:c,...l})=>{let u=o.default.useRef(0),f=o.default.useRef(0),p=o.default.useCallback(e=>{r&&r(_(e,t,n))},[n,t,r]),ee=o.default.useCallback(n=>{if(!r||typeof document>`u`)return;n.preventDefault(),n.stopPropagation(),f.current=n.clientX,u.current=e??n.currentTarget.parentElement?.getBoundingClientRect().width??t;let i=e=>{let t=e.clientX-f.current;p(u.current+t)},a=()=>{document.removeEventListener(`mousemove`,i),document.removeEventListener(`mouseup`,a),document.body.style.cursor=``,document.body.style.userSelect=``};document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,document.addEventListener(`mousemove`,i),document.addEventListener(`mouseup`,a)},[t,r,p,e]),m=o.default.useCallback(t=>{!r||e==null||t.key!==`ArrowLeft`&&t.key!==`ArrowRight`||(t.preventDefault(),t.stopPropagation(),p(e+(t.key===`ArrowLeft`?-1:1)*(t.shiftKey?24:8)))},[r,p,e]);return(0,s.jsxs)(`th`,{...l,className:d(a,r?`ds-table-resizable-header-cell`:void 0),style:{...c,width:e},children:[i,r?(0,s.jsx)(`button`,{type:`button`,className:`ds-table-resize-handle`,"aria-label":`Resize column`,onClick:e=>e.stopPropagation(),onMouseDown:ee,onKeyDown:m}):null]})};function le(e,t,n,r,i,a){return e&&e.map(e=>{let o={...e};if(Array.isArray(o.children)&&o.children.length>0)return o.children=le(o.children,t,n,r,i,a),o;let s=h(o);if(!s)return o;let c=t[s]??g(o.width)??a,l=o.onHeaderCell;return o.width=c,o.onHeaderCell=e=>{let t=l?.(e)??{};return{...t,width:c,minWidth:r,maxWidth:i,onResize:e=>n(s,e),className:d(t.className,`ds-table-resizable-header`)}},o})}function ue(e,t){if(!e||e.length===0)return t;let n=e=>e.flatMap(e=>Array.isArray(e?.children)&&e.children.length>0?n(e.children):[g(e?.width)??t]),r=n(e);return r.length===0?t:r.reduce((e,t)=>e+t,0)}function de(){if(typeof document>`u`)return;let{table:e,checkbox:n}=t.dsSemanticTokens,r=document.getElementById(c);r||(r=document.createElement(`style`),r.id=c,document.head.appendChild(r)),r.textContent=`
2
2
  .ds-table {
3
3
  font-family: "Nunito", sans-serif;
4
4
  color: ${e.text.body};
@@ -28,7 +28,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
28
28
  display: none !important;
29
29
  }
30
30
 
31
- .ds-table .ant-table-tbody > tr > td {
31
+ .ds-table .ant-table-tbody > tr:not(.ant-table-measure-row) > td {
32
32
  color: ${e.text.body} !important;
33
33
  font-weight: ${e.typography.body.fontWeight} !important;
34
34
  font-size: ${e.typography.body.fontSize} !important;
@@ -162,7 +162,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
162
162
  }
163
163
 
164
164
  .ds-table.ds-table-size-small .ant-table-thead > tr > th,
165
- .ds-table.ds-table-size-small .ant-table-tbody > tr > td {
165
+ .ds-table.ds-table-size-small .ant-table-tbody > tr:not(.ant-table-measure-row) > td {
166
166
  vertical-align: middle !important;
167
167
  }
168
168
 
@@ -176,7 +176,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
176
176
  border-bottom: ${e.border.headerDividerWidth} solid ${e.border.container} !important;
177
177
  }
178
178
 
179
- .ds-table.ds-table-size-small .ant-table-tbody > tr > td {
179
+ .ds-table.ds-table-size-small .ant-table-tbody > tr:not(.ant-table-measure-row) > td {
180
180
  font-size: ${e.typography.compactBody.fontSize} !important;
181
181
  line-height: ${e.typography.compactBody.lineHeight} !important;
182
182
  font-weight: ${e.typography.compactBody.fontWeight} !important;
@@ -205,7 +205,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
205
205
  }
206
206
 
207
207
  .ds-table.ds-table-size-middle .ant-table-thead > tr > th,
208
- .ds-table.ds-table-size-middle .ant-table-tbody > tr > td {
208
+ .ds-table.ds-table-size-middle .ant-table-tbody > tr:not(.ant-table-measure-row) > td {
209
209
  padding: 0 16px !important;
210
210
  vertical-align: middle !important;
211
211
  }
@@ -218,7 +218,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
218
218
  font-weight: ${e.typography.header.fontWeight} !important;
219
219
  }
220
220
 
221
- .ds-table.ds-table-size-middle .ant-table-tbody > tr > td {
221
+ .ds-table.ds-table-size-middle .ant-table-tbody > tr:not(.ant-table-measure-row) > td {
222
222
  font-size: ${e.typography.body.fontSize} !important;
223
223
  line-height: ${e.typography.body.lineHeight} !important;
224
224
  letter-spacing: ${e.typography.body.letterSpacing} !important;
@@ -226,7 +226,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
226
226
  }
227
227
 
228
228
  .ds-table.ds-table-size-large .ant-table-thead > tr > th,
229
- .ds-table.ds-table-size-large .ant-table-tbody > tr > td {
229
+ .ds-table.ds-table-size-large .ant-table-tbody > tr:not(.ant-table-measure-row) > td {
230
230
  padding: 0 16px !important;
231
231
  vertical-align: middle !important;
232
232
  }
@@ -239,7 +239,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
239
239
  font-weight: 600 !important;
240
240
  }
241
241
 
242
- .ds-table.ds-table-size-large .ant-table-tbody > tr > td {
242
+ .ds-table.ds-table-size-large .ant-table-tbody > tr:not(.ant-table-measure-row) > td {
243
243
  font-size: 16px !important;
244
244
  line-height: 20px !important;
245
245
  letter-spacing: -0.016px !important;
@@ -506,5 +506,5 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
506
506
  .ds-table.ds-table-styleB.ds-table-header-white .ant-table-thead > tr > th {
507
507
  background: ${e.surface.headerWhite} !important;
508
508
  }
509
- `}var b=({dsStyle:e=`styleA`,dsHeaderVariant:t=`default`,dsFrozenColumns:n=`none`,dsFrozenBreakpoint:c=768,dsFrozenColumnWidth:l=180,dsTruncateCellText:u=!1,dsTruncateTooltip:d=!0,dsTruncateTooltipDelay:_=.25,dsTruncateTooltipSize:y=`normal`,dsTruncateTooltipTitle:b=`Title Heading`,dsEditableColumns:x=[],dsOnEditableDataChange:S,dsCustomizable:ce=!1,dsVisibleColumns:C,dsOnVisibleColumnsChange:w,dsFixedBodyHeight:T=320,dsResizableColumns:le=!1,dsColumnWidths:E,dsOnColumnWidthsChange:D,dsResizableColumnMinWidth:O=96,dsResizableColumnMaxWidth:k,dsResizableDefaultColumnWidth:A=180,size:ue=`middle`,className:de,columns:j,dataSource:M,pagination:N,...fe})=>{let[pe,me]=o.default.useState(!1),[P,F]=o.default.useState(Array.isArray(M)?M:[]),[I,L]=o.default.useState(()=>Array.isArray(C)?new Set(C.map(String)):j&&Array.isArray(j)?new Set(j.map(e=>g(e)).filter(e=>!!e)):new Set),[R,z]=o.default.useState(()=>E??v(j,A));(0,o.useEffect)(()=>{se(),r.ensureTooltipStyles()},[]),(0,o.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>{me(window.innerWidth<=c)};return e(),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[c]),(0,o.useEffect)(()=>{e===`styleAEditable`&&F(Array.isArray(M)?M:[])},[M,e]);let{scroll:B,tableLayout:V,showSorterTooltip:H,components:U,...he}=fe,W=n!==`none`&&pe,G=e===`styleAEditable`,K=e===`styleACustomizable`&&ce,q=e===`styleAFixedHeaderFooter`,J=e===`styleAResizable`||le,Y=N&&typeof N==`object`?N:void 0,[ge,_e]=o.default.useState(Y?.defaultCurrent??1),[ve,ye]=o.default.useState(Y?.defaultPageSize??Y?.pageSize??10);(0,o.useEffect)(()=>{K&&Array.isArray(C)&&L(new Set(C.map(String)))},[C,K]),(0,o.useEffect)(()=>{if(J){if(E){z(E);return}z(e=>v(j,A,e))}},[j,E,A,J]);let be=o.default.useCallback((e,t)=>{L(n=>{let r=new Set(n);t?r.add(e):r.delete(e);let i=Array.from(r);return w?.(i),r})},[w]),xe=o.default.useMemo(()=>Array.isArray(x)?x.map(String):typeof x==`string`?x.split(`,`).map(e=>e.trim()).filter(Boolean):x&&typeof x==`object`?Object.entries(x).filter(([,e])=>!!e).map(([e])=>e):[],[x]),Se=o.default.useCallback((e,t,n)=>{F(r=>{if(!Array.isArray(r)||!r[e])return r;let i=[...r],a=i[e];return i[e]=te(a,t,n),S?.(i),i})},[S]),Ce=o.default.useCallback((e,t)=>{let n=ee(t,O,k);z(t=>{let r={...t,[e]:n};return D?.(r),r})},[D,k,O]),we=o.default.useMemo(()=>{let e=p(j,H),t=W?m(e,n,l):e,r=K?re(t,I):t,i=new Set(xe),a=G?ne(r,i,Se):r,o=J?oe(a,R,Ce,O,k,A):a;return!u||G?o:h(o,d,_,y,b)},[j,H,l,n,u,d,_,y,b,xe,Se,J,R,Ce,O,k,A,W,G,I,K,be]),Te=o.default.useMemo(()=>{if(q){let e=B&&typeof B==`object`?B:{};return{...e,y:e.y??T}}return J||W?!B||typeof B!=`object`?{x:`max-content`}:{...B,x:B.x??`max-content`}:B},[B,T,W,q,J]),Ee=G||J?V??`fixed`:V,De=o.default.useMemo(()=>J?{...U,header:{...U?.header,cell:ae}}:U,[U,J]),Oe=Y?.total??(Array.isArray(M)?M.length:0),X=Y?.current??ge,Z=Y?.pageSize??ve,ke=o.default.useMemo(()=>{let e=G?P:M;if(!q||!Array.isArray(e)||Y?.total!=null&&Y.total>e.length)return e;let t=(X-1)*Z;return e.slice(t,t+Z)},[M,P,X,Z,Y?.total,G,q]),Ae={...Y,current:X,pageSize:Z,total:Oe,showSizeChanger:Y?.showSizeChanger??!1,onChange:(e,t)=>{_e(e),ye(t),Y?.onChange?.(e,t)},onShowSizeChange:(e,t)=>{_e(e),ye(t),Y?.onShowSizeChange?.(e,t)}},Q=[`ds-table`,`ds-table-${e}`,`ds-table-size-${ue}`,t===`white`?`ds-table-header-white`:``,de||``].filter(Boolean).join(` `),$=(0,s.jsx)(a.Table,{...he,columns:we,dataSource:ke,pagination:q?!1:N,scroll:Te,tableLayout:Ee,components:De,size:ue,className:Q,showSorterTooltip:f(H)});return q?(0,s.jsxs)(`div`,{className:`${Q} ds-table-fixed-frame`,children:[$,(0,s.jsx)(`div`,{className:`ds-table-fixed-footer`,children:(0,s.jsx)(i.Pagination,{...Ae})})]}):K?(0,s.jsxs)(`div`,{className:Q,children:[(0,s.jsx)(ie,{columns:j,visibleColumns:I,onToggle:be}),$]}):$};exports.Table=b,exports.default=b;
509
+ `}var x=({dsStyle:e=`styleA`,dsHeaderVariant:t=`default`,dsFrozenColumns:n=`none`,dsFrozenBreakpoint:c=768,dsFrozenColumnWidth:l=180,dsTruncateCellText:u=!1,dsTruncateTooltip:d=!0,dsTruncateTooltipDelay:g=.25,dsTruncateTooltipSize:v=`normal`,dsTruncateTooltipTitle:y=`Title Heading`,dsEditableColumns:b=[],dsOnEditableDataChange:x,dsCustomizable:fe=!1,dsVisibleColumns:S,dsOnVisibleColumnsChange:pe,dsFixedBodyHeight:me=320,dsResizableColumns:he=!1,dsColumnWidths:C,dsOnColumnWidthsChange:ge,dsResizableColumnMinWidth:w=96,dsResizableColumnMaxWidth:T,dsResizableDefaultColumnWidth:E=180,dsResponsive:D=!0,dsResponsiveMinColumnWidth:_e=160,dsDensity:ve=`comfortable`,dsStickyHeader:ye=!1,dsStickyOffsetHeader:be=0,dsRowsPerPageOptions:O,dsAutoSizeColumns:k=!1,dsAutoSizeMinWidth:xe=96,dsAutoSizeMaxWidth:A=520,dsAutoSizeSampleSize:Se=50,dsAutoSizeCellPadding:Ce=32,size:we,className:Te,columns:j,dataSource:M,pagination:N,...Ee})=>{let[De,Oe]=o.default.useState(!1),[P,ke]=o.default.useState(Array.isArray(M)?M:[]),[F,Ae]=o.default.useState(()=>Array.isArray(S)?new Set(S.map(String)):j&&Array.isArray(j)?new Set(j.map(e=>h(e)).filter(e=>!!e)):new Set),[je,I]=o.default.useState(()=>C??te(j,E));(0,o.useEffect)(()=>{de(),r.ensureTooltipStyles()},[]),(0,o.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>{Oe(window.innerWidth<=c)};return e(),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e)}},[c]),(0,o.useEffect)(()=>{e===`styleAEditable`&&ke(Array.isArray(M)?M:[])},[M,e]);let{scroll:L,tableLayout:Me,showSorterTooltip:R,components:z,sticky:Ne,...Pe}=Ee,B=n!==`none`&&De,V=e===`styleAEditable`,H=e===`styleACustomizable`&&fe,U=e===`styleAFixedHeaderFooter`,W=e===`styleAResizable`||he,G=N&&typeof N==`object`?N:void 0,K=o.default.useMemo(()=>!G||!O||O.length===0?G:{...G,pageSizeOptions:G.pageSizeOptions??O,showSizeChanger:G.showSizeChanger??!0},[O,G]),Fe=we??(ve===`compact`?`small`:`middle`),[Ie,Le]=o.default.useState(G?.defaultCurrent??1),[Re,ze]=o.default.useState(G?.defaultPageSize??G?.pageSize??10);(0,o.useEffect)(()=>{H&&Array.isArray(S)&&Ae(new Set(S.map(String)))},[S,H]),(0,o.useEffect)(()=>{if(W){if(C){I(C);return}I(e=>te(j,E,e))}},[j,C,E,W]);let Be=o.default.useCallback((e,t)=>{Ae(n=>{let r=new Set(n);t?r.add(e):r.delete(e);let i=Array.from(r);return pe?.(i),r})},[pe]),Ve=o.default.useMemo(()=>Array.isArray(b)?b.map(String):typeof b==`string`?b.split(`,`).map(e=>e.trim()).filter(Boolean):b&&typeof b==`object`?Object.entries(b).filter(([,e])=>!!e).map(([e])=>e):[],[b]),He=o.default.useCallback((e,t,n)=>{ke(r=>{if(!Array.isArray(r)||!r[e])return r;let i=[...r],a=i[e];return i[e]=ie(a,t,n),x?.(i),i})},[x]),Ue=o.default.useCallback((e,t)=>{let n=_(t,w,T);I(t=>{let r={...t,[e]:n};return ge?.(r),r})},[ge,T,w]),q=o.default.useMemo(()=>{let e=p(j,R),t=B?ee(e,n,l):e,r=H?oe(t,F):t,i=new Set(Ve),a=V?ae(r,i,He):r,o=V?P:Array.isArray(M)?M:[],s=re(k),c=k===!0||s?.size?ne(a,o,{minWidth:xe,maxWidth:A,sampleSize:Se,cellPadding:Ce,enabledColumnKeys:s}):a,f=W?le(c,je,Ue,w,T,E):c;return!u||V?f:m(f,d,g,v,y)},[j,R,l,n,u,d,g,v,y,Ve,He,W,je,Ue,w,T,E,k,xe,A,Se,Ce,B,V,P,M,F,H,Be]),J=o.default.useMemo(()=>ue(q,_e),[q,_e]),Y=o.default.useCallback(e=>D?!e||typeof e!=`object`?{x:J}:{...e,x:e.x??J}:e,[D,J]),We=o.default.useMemo(()=>{if(U){let e=L&&typeof L==`object`?L:{};return Y({...e,y:e.y??me})}return Y(L)},[L,Y,me,B,U,W]),Ge=V||W||D?Me??`fixed`:Me,Ke=Ne??(ye?{offsetHeader:be}:void 0),qe=o.default.useMemo(()=>W?{...z,header:{...z?.header,cell:ce}}:z,[z,W]),Je=K?.total??(Array.isArray(M)?M.length:0),X=K?.current??Ie,Z=K?.pageSize??Re,Ye=o.default.useMemo(()=>{let e=V?P:M;if(!U||!Array.isArray(e)||K?.total!=null&&K.total>e.length)return e;let t=(X-1)*Z;return e.slice(t,t+Z)},[M,P,X,Z,K?.total,V,U]),Xe={...K,current:X,pageSize:Z,total:Je,showSizeChanger:K?.showSizeChanger??!1,onChange:(e,t)=>{Le(e),ze(t),K?.onChange?.(e,t)},onShowSizeChange:(e,t)=>{Le(e),ze(t),K?.onShowSizeChange?.(e,t)}},Q=[`ds-table`,`ds-table-${e}`,`ds-table-size-${Fe}`,D?`ds-table-responsive`:``,t===`white`?`ds-table-header-white`:``,Te||``].filter(Boolean).join(` `),$=(0,s.jsx)(a.Table,{...Pe,columns:q,dataSource:Ye,pagination:U?!1:K??N,scroll:We,tableLayout:Ge,components:qe,size:Fe,className:Q,sticky:Ke,showSorterTooltip:f(R)});return U?(0,s.jsxs)(`div`,{className:`${Q} ds-table-fixed-frame`,children:[$,(0,s.jsx)(`div`,{className:`ds-table-fixed-footer`,children:(0,s.jsx)(i.Pagination,{...Xe})})]}):H?(0,s.jsxs)(`div`,{className:Q,children:[(0,s.jsx)(se,{columns:j,visibleColumns:F,onToggle:Be}),$]}):$};exports.Table=x,exports.default=x;
510
510
  //# sourceMappingURL=Table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.cjs","names":[],"sources":["../../src/ds/display/Table.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { Table as AntTable, type TableProps as AntTableProps } from 'antd';\nimport { Input } from 'antd';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { Icon } from '../../utils/icons';\nimport { Pagination as DSPagination } from '../navigation/Pagination';\nimport type { DSPaginationProps } from '../navigation/Pagination';\nimport { ensureTooltipStyles, Tooltip as DSTooltip } from './Tooltip';\nimport type { DSTooltipSize } from './Tooltip';\n\nexport type DSTableStyle = 'styleA' | 'styleAEditable' | 'styleACustomizable' | 'styleAFixedHeaderFooter' | 'styleAResizable' | 'styleB';\nexport type DSTableHeaderVariant = 'default' | 'white';\nexport type DSTableFrozenColumns = 'none' | 'first' | 'last' | 'both';\nexport type DSTableColumnWidths = Record<string, number>;\n\nexport type DSTableProps<RecordType = Record<string, unknown>> = AntTableProps<RecordType> & {\n /**\n * DS table style from Figma documentation.\n * styleA: full-width, white header, thicker header divider, no container border.\n * styleAEditable: styleA base with inline editable cells for selected columns.\n * styleB: warm layout background, cool header, 1px container border with 4px radius.\n */\n dsStyle?: DSTableStyle;\n /**\n * Header background variant for styleB.\n * default: cool gray header\n * white: white header (allowed alternative in Figma docs)\n */\n dsHeaderVariant?: DSTableHeaderVariant;\n /**\n * DS responsive frozen-column mode.\n * none: no DS freezing behavior\n * first: freeze first column on small screens\n * last: freeze last column on small screens\n * both: freeze first and last columns on small screens\n */\n dsFrozenColumns?: DSTableFrozenColumns;\n /**\n * Breakpoint (px) at or below which DS frozen columns become active.\n */\n dsFrozenBreakpoint?: number;\n /**\n * Default width for DS-frozen columns when column width is not defined.\n */\n dsFrozenColumnWidth?: number;\n /**\n * Truncates cell text based on available cell width.\n */\n dsTruncateCellText?: boolean;\n /**\n * Shows DS tooltip with the full value when truncated text is hovered.\n */\n dsTruncateTooltip?: boolean;\n /**\n * Delay (seconds) before showing the truncation tooltip on hover.\n */\n dsTruncateTooltipDelay?: number;\n /**\n * DS tooltip size variant used for truncation tooltips.\n */\n dsTruncateTooltipSize?: DSTooltipSize;\n /**\n * DS tooltip title used for truncation tooltips when using normal tooltip size.\n */\n dsTruncateTooltipTitle?: string;\n /**\n * Column keys or dataIndex values that are editable when dsStyle is styleAEditable.\n */\n dsEditableColumns?: string[] | string | Record<string, boolean>;\n /**\n * Called whenever editable table data changes.\n */\n dsOnEditableDataChange?: (nextData: RecordType[]) => void;\n /**\n * When true, enables column visibility controls above the table for dsStyle=\"styleACustomizable\".\n */\n dsCustomizable?: boolean;\n /**\n * Column keys or dataIndex values that are currently visible.\n * Only used when dsStyle=\"styleACustomizable\".\n */\n dsVisibleColumns?: string[];\n /**\n * Called when user toggles column visibility.\n */\n dsOnVisibleColumnsChange?: (nextVisible: string[]) => void;\n /**\n * Scrollable body height for dsStyle=\"styleAFixedHeaderFooter\".\n */\n dsFixedBodyHeight?: number | string;\n /**\n * Enables column resizing. Automatically enabled for dsStyle=\"styleAResizable\".\n */\n dsResizableColumns?: boolean;\n /**\n * Controlled column widths by column key or dataIndex.\n */\n dsColumnWidths?: DSTableColumnWidths;\n /**\n * Called whenever a resizable column width changes.\n */\n dsOnColumnWidthsChange?: (nextWidths: DSTableColumnWidths) => void;\n /**\n * Minimum resizable column width in px.\n */\n dsResizableColumnMinWidth?: number;\n /**\n * Maximum resizable column width in px.\n */\n dsResizableColumnMaxWidth?: number;\n /**\n * Default width in px for resizable columns without an explicit width.\n */\n dsResizableDefaultColumnWidth?: number;\n};\n\nconst STYLE_ID = 'ds-table-styles';\n\nconst isTextValue = (value: unknown): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\nconst DSTruncatedCell: React.FC<{\n value: string | number;\n withTooltip: boolean;\n tooltipDelay: number;\n tooltipSize: DSTooltipSize;\n tooltipTitle?: string;\n}> = ({ value, withTooltip, tooltipDelay, tooltipSize, tooltipTitle }) => {\n const cellRef = React.useRef<HTMLSpanElement>(null);\n const [isTruncated, setIsTruncated] = React.useState(false);\n const text = String(value);\n\n const updateTruncation = React.useCallback(() => {\n const cell = cellRef.current;\n if (!cell) return;\n const nextValue = cell.scrollWidth > cell.clientWidth;\n setIsTruncated((prev) => (prev === nextValue ? prev : nextValue));\n }, []);\n\n React.useEffect(() => {\n const cell = cellRef.current;\n if (!cell) return;\n\n updateTruncation();\n\n // Styles for truncation can be injected shortly after first render.\n // Re-check on subsequent frames so measurement reflects final layout.\n const rafId = requestAnimationFrame(() => {\n updateTruncation();\n requestAnimationFrame(updateTruncation);\n });\n const timeoutId = window.setTimeout(updateTruncation, 120);\n\n const resizeObserver = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(updateTruncation) : null;\n if (resizeObserver) {\n resizeObserver.observe(cell);\n } else if (typeof window !== 'undefined') {\n window.addEventListener('resize', updateTruncation);\n }\n\n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n } else if (typeof window !== 'undefined') {\n window.removeEventListener('resize', updateTruncation);\n }\n cancelAnimationFrame(rafId);\n window.clearTimeout(timeoutId);\n };\n }, [text, updateTruncation]);\n\n const content = (\n <span\n ref={cellRef}\n className=\"ds-table-cell-truncate\"\n onMouseOverCapture={updateTruncation}\n onFocus={updateTruncation}\n >\n {text}\n </span>\n );\n\n if (!withTooltip) {\n return content;\n }\n\n return (\n <DSTooltip\n title={isTruncated ? undefined : null}\n dsSize={tooltipSize}\n dsTitle={tooltipTitle}\n dsBody={text}\n mouseEnterDelay={tooltipDelay}\n trigger=\"hover\"\n >\n {content}\n </DSTooltip>\n );\n};\n\ntype DSTableSorterTooltip = Exclude<AntTableProps['showSorterTooltip'], boolean | undefined>;\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nfunction getDSSorterTooltipProps(showSorterTooltip?: AntTableProps['showSorterTooltip']): AntTableProps['showSorterTooltip'] {\n if (showSorterTooltip === false) {\n return false;\n }\n\n const { tooltip } = dsSemanticTokens;\n const provided = showSorterTooltip && typeof showSorterTooltip === 'object'\n ? showSorterTooltip as DSTableSorterTooltip\n : undefined;\n\n return {\n ...provided,\n color: provided?.color ?? tooltip.surface.background,\n arrow: provided?.arrow ?? true,\n classNames: {\n ...provided?.classNames,\n root: mergeClassNames('ds-tooltip-overlay', 'ds-tooltip-size-normal', provided?.classNames?.root, provided?.overlayClassName),\n },\n styles: {\n ...provided?.styles,\n container: {\n borderRadius: tooltip.radius,\n color: tooltip.surface.body,\n letterSpacing: 0,\n minWidth: tooltip.width.normal.min,\n maxWidth: tooltip.width.normal.max,\n padding: tooltip.padding.normal,\n ...provided?.styles?.container,\n },\n },\n };\n}\n\nfunction withDSSortIcons(\n columns: any[] | undefined,\n tableShowSorterTooltip?: AntTableProps['showSorterTooltip'],\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSSortIcons(nextColumn.children, tableShowSorterTooltip);\n }\n\n if (nextColumn.sorter) {\n const columnShowSorterTooltip = nextColumn.showSorterTooltip === undefined\n ? tableShowSorterTooltip\n : nextColumn.showSorterTooltip;\n nextColumn.showSorterTooltip = getDSSorterTooltipProps(columnShowSorterTooltip);\n }\n\n if (nextColumn.sorter && !nextColumn.sortIcon) {\n nextColumn.sortIcon = ({ sortOrder }: { sortOrder?: 'ascend' | 'descend' }) => (\n <span className=\"ds-table-sort-icon\" aria-hidden=\"true\">\n <Icon\n name={sortOrder === 'ascend' ? 'arrowThickUp' : 'arrowThickDown'}\n size={10}\n style={{ color: 'inherit' }}\n />\n </span>\n );\n }\n\n return nextColumn;\n });\n}\n\nfunction withDSFrozenColumns(\n columns: any[] | undefined,\n mode: DSTableFrozenColumns,\n defaultFrozenWidth: number\n): any[] | undefined {\n if (!columns || mode === 'none' || columns.length === 0) return columns;\n\n const freezeFirst = mode === 'first' || mode === 'both';\n const freezeLast = mode === 'last' || mode === 'both';\n const lastIndex = columns.length - 1;\n\n return columns.map((column, index) => {\n const nextColumn = { ...column };\n\n const shouldFreezeLeft = freezeFirst && index === 0;\n const shouldFreezeRight = freezeLast && index === lastIndex;\n\n if (shouldFreezeLeft) {\n nextColumn.fixed = 'left';\n if (nextColumn.width == null) {\n nextColumn.width = defaultFrozenWidth;\n }\n }\n\n if (shouldFreezeRight) {\n nextColumn.fixed = 'right';\n if (nextColumn.width == null) {\n nextColumn.width = defaultFrozenWidth;\n }\n }\n\n return nextColumn;\n });\n}\n\nfunction withDSTruncatedCells(\n columns: any[] | undefined,\n withTooltip: boolean,\n tooltipDelay: number,\n tooltipSize: DSTooltipSize,\n tooltipTitle?: string\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSTruncatedCells(nextColumn.children, withTooltip, tooltipDelay, tooltipSize, tooltipTitle);\n return nextColumn;\n }\n\n const originalRender = nextColumn.render;\n\n if (nextColumn.ellipsis == null) {\n nextColumn.ellipsis = { showTitle: false };\n } else if (nextColumn.ellipsis === true) {\n nextColumn.ellipsis = { showTitle: false };\n } else if (typeof nextColumn.ellipsis === 'object') {\n nextColumn.ellipsis = { ...nextColumn.ellipsis, showTitle: false };\n }\n\n nextColumn.render = (value: unknown, record: unknown, index: number) => {\n const rendered = originalRender ? originalRender(value, record, index) : value;\n\n if (isTextValue(rendered)) {\n return <DSTruncatedCell value={rendered} withTooltip={withTooltip} tooltipDelay={tooltipDelay} tooltipSize={tooltipSize} tooltipTitle={tooltipTitle} />;\n }\n\n if (!originalRender && isTextValue(value)) {\n return <DSTruncatedCell value={value} withTooltip={withTooltip} tooltipDelay={tooltipDelay} tooltipSize={tooltipSize} tooltipTitle={tooltipTitle} />;\n }\n\n return rendered;\n };\n\n return nextColumn;\n });\n}\n\nfunction getColumnIdentity(column: any): string | undefined {\n if (typeof column?.key === 'string') return column.key;\n if (typeof column?.dataIndex === 'string') return column.dataIndex;\n if (typeof column?.dataIndex === 'number') return String(column.dataIndex);\n return undefined;\n}\n\nfunction getNumericColumnWidth(width: unknown): number | undefined {\n if (typeof width === 'number' && Number.isFinite(width)) return width;\n if (typeof width === 'string' && width.endsWith('px')) {\n const parsedWidth = Number(width.slice(0, -2));\n return Number.isFinite(parsedWidth) ? parsedWidth : undefined;\n }\n return undefined;\n}\n\nfunction clampColumnWidth(width: number, minWidth: number, maxWidth?: number): number {\n const widthWithMin = Math.max(minWidth, Math.round(width));\n return typeof maxWidth === 'number' ? Math.min(maxWidth, widthWithMin) : widthWithMin;\n}\n\nfunction getInitialColumnWidths(\n columns: any[] | undefined,\n defaultWidth: number,\n existingWidths: DSTableColumnWidths = {},\n): DSTableColumnWidths {\n if (!columns) return existingWidths;\n\n const nextWidths = { ...existingWidths };\n\n const traverse = (cols: any[]) => {\n cols.forEach((column) => {\n if (Array.isArray(column.children) && column.children.length > 0) {\n traverse(column.children);\n return;\n }\n\n const identity = getColumnIdentity(column);\n if (!identity || nextWidths[identity] != null) return;\n\n nextWidths[identity] = getNumericColumnWidth(column.width) ?? defaultWidth;\n });\n };\n\n traverse(columns);\n return nextWidths;\n}\n\nfunction getValueByDataIndex(record: Record<string, unknown>, dataIndex: unknown): unknown {\n if (Array.isArray(dataIndex)) {\n return dataIndex.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object') {\n return (acc as Record<string, unknown>)[String(key)];\n }\n return undefined;\n }, record);\n }\n\n if (typeof dataIndex === 'string' || typeof dataIndex === 'number') {\n return record[String(dataIndex)];\n }\n\n return undefined;\n}\n\nfunction setValueByDataIndex(record: Record<string, unknown>, dataIndex: unknown, value: unknown): Record<string, unknown> {\n if (Array.isArray(dataIndex) && dataIndex.length > 0) {\n const next = { ...record };\n let cursor: Record<string, unknown> = next;\n\n for (let i = 0; i < dataIndex.length - 1; i += 1) {\n const key = String(dataIndex[i]);\n const current = cursor[key];\n const cloned = current && typeof current === 'object' ? { ...(current as Record<string, unknown>) } : {};\n cursor[key] = cloned;\n cursor = cloned;\n }\n\n cursor[String(dataIndex[dataIndex.length - 1])] = value;\n return next;\n }\n\n if (typeof dataIndex === 'string' || typeof dataIndex === 'number') {\n return { ...record, [String(dataIndex)]: value };\n }\n\n return record;\n}\n\nfunction withDSEditableCells(\n columns: any[] | undefined,\n editableColumnKeys: Set<string>,\n onValueChange: (rowIndex: number, dataIndex: unknown, nextValue: unknown) => void,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSEditableCells(nextColumn.children, editableColumnKeys, onValueChange);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n const isEditable = Boolean(identity && editableColumnKeys.has(identity));\n\n if (!isEditable || nextColumn.dataIndex == null) {\n return nextColumn;\n }\n\n nextColumn.render = (_value: unknown, record: Record<string, unknown>, rowIndex: number) => {\n const currentValue = getValueByDataIndex(record, nextColumn.dataIndex);\n const isNumberValue = typeof currentValue === 'number';\n const inputValue = currentValue == null ? '' : String(currentValue);\n\n return (\n <Input\n className=\"ds-table-edit-input\"\n type={isNumberValue ? 'number' : 'text'}\n size=\"small\"\n value={inputValue}\n onChange={(event) => {\n const raw = event.target.value;\n const nextValue = isNumberValue ? (raw === '' ? null : Number(raw)) : raw;\n onValueChange(rowIndex, nextColumn.dataIndex, nextValue);\n }}\n />\n );\n };\n\n return nextColumn;\n });\n}\n\nfunction withDSVisibleColumnsFilter(\n columns: any[] | undefined,\n visibleColumnKeys: Set<string>,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSVisibleColumnsFilter(nextColumn.children, visibleColumnKeys);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n if (!identity || visibleColumnKeys.has(identity)) {\n return nextColumn;\n }\n\n return null;\n }).filter((col) => col !== null);\n}\n\nconst DSColumnVisibilityControl: React.FC<{\n columns: any[];\n visibleColumns: Set<string>;\n onToggle: (colKey: string, visible: boolean) => void;\n}> = ({ columns, visibleColumns, onToggle }) => {\n const columnOptions = React.useMemo(() => {\n const opts: Array<{ key: string; label: string }> = [];\n\n const traverse = (cols: any[]) => {\n cols.forEach((col) => {\n if (Array.isArray(col.children) && col.children.length > 0) {\n traverse(col.children);\n } else {\n const identity = getColumnIdentity(col);\n const label = col.title || (typeof col.dataIndex === 'string' ? col.dataIndex : 'Column');\n if (identity) {\n opts.push({ key: identity, label: String(label) });\n }\n }\n });\n };\n\n traverse(columns);\n return opts;\n }, [columns]);\n\n return (\n <div className=\"ds-table-column-visibility-control\">\n <label className=\"ds-table-control-label\">Columns:</label>\n <div className=\"ds-table-control-checkboxes\">\n {columnOptions.map(({ key, label }) => (\n <label key={key} className=\"ds-table-control-checkbox\">\n <input\n type=\"checkbox\"\n checked={visibleColumns.has(key)}\n onChange={(e) => onToggle(key, e.target.checked)}\n />\n <span>{label}</span>\n </label>\n ))}\n </div>\n </div>\n );\n};\n\ntype DSResizableHeaderCellProps = React.ThHTMLAttributes<HTMLTableCellElement> & {\n width?: number;\n minWidth?: number;\n maxWidth?: number;\n onResize?: (nextWidth: number) => void;\n};\n\nconst DSResizableHeaderCell: React.FC<DSResizableHeaderCellProps> = ({\n width,\n minWidth = 96,\n maxWidth,\n onResize,\n children,\n className,\n style,\n ...restProps\n}) => {\n const startWidthRef = React.useRef(0);\n const startXRef = React.useRef(0);\n\n const updateWidth = React.useCallback((nextWidth: number) => {\n if (!onResize) return;\n onResize(clampColumnWidth(nextWidth, minWidth, maxWidth));\n }, [maxWidth, minWidth, onResize]);\n\n const handleMouseDown = React.useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n if (!onResize || typeof document === 'undefined') return;\n\n event.preventDefault();\n event.stopPropagation();\n startXRef.current = event.clientX;\n startWidthRef.current = width ?? event.currentTarget.parentElement?.getBoundingClientRect().width ?? minWidth;\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = moveEvent.clientX - startXRef.current;\n updateWidth(startWidthRef.current + delta);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }, [minWidth, onResize, updateWidth, width]);\n\n const handleKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (!onResize || width == null) return;\n\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n\n event.preventDefault();\n event.stopPropagation();\n const direction = event.key === 'ArrowLeft' ? -1 : 1;\n updateWidth(width + direction * (event.shiftKey ? 24 : 8));\n }, [onResize, updateWidth, width]);\n\n return (\n <th\n {...restProps}\n className={mergeClassNames(className, onResize ? 'ds-table-resizable-header-cell' : undefined)}\n style={{ ...style, width }}\n >\n {children}\n {onResize ? (\n <button\n type=\"button\"\n className=\"ds-table-resize-handle\"\n aria-label=\"Resize column\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n />\n ) : null}\n </th>\n );\n};\n\nfunction withDSResizableColumns(\n columns: any[] | undefined,\n widths: DSTableColumnWidths,\n onColumnResize: (columnKey: string, nextWidth: number) => void,\n minWidth: number,\n maxWidth: number | undefined,\n defaultWidth: number,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSResizableColumns(nextColumn.children, widths, onColumnResize, minWidth, maxWidth, defaultWidth);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n if (!identity) return nextColumn;\n\n const width = widths[identity] ?? getNumericColumnWidth(nextColumn.width) ?? defaultWidth;\n const originalOnHeaderCell = nextColumn.onHeaderCell;\n nextColumn.width = width;\n nextColumn.onHeaderCell = (columnInstance: unknown) => {\n const providedHeaderCellProps = originalOnHeaderCell?.(columnInstance) ?? {};\n return {\n ...providedHeaderCellProps,\n width,\n minWidth,\n maxWidth,\n onResize: (nextWidth: number) => onColumnResize(identity, nextWidth),\n className: mergeClassNames(providedHeaderCellProps.className, 'ds-table-resizable-header'),\n };\n };\n\n return nextColumn;\n });\n}\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n const { table, checkbox } = dsSemanticTokens;\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-table {\n font-family: \"Nunito\", sans-serif;\n color: ${table.text.body};\n }\n\n .ds-table .ant-table {\n font-family: \"Nunito\", sans-serif;\n color: ${table.text.body};\n background: ${table.surface.container};\n }\n\n .ds-table .ant-table-thead > tr > th {\n color: ${table.text.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n font-size: ${table.typography.header.fontSize} !important;\n line-height: ${table.typography.header.lineHeight} !important;\n letter-spacing: ${table.typography.header.letterSpacing} !important;\n background: ${table.surface.container} !important;\n border-bottom: ${table.border.headerDividerWidth} solid ${table.border.container} !important;\n padding: ${table.padding.normal.header} !important;\n height: ${table.rowHeight.normal.header} !important;\n vertical-align: middle !important;\n box-sizing: border-box !important;\n }\n\n .ds-table .ant-table-thead > tr > th::before {\n display: none !important;\n }\n\n .ds-table .ant-table-tbody > tr > td {\n color: ${table.text.body} !important;\n font-weight: ${table.typography.body.fontWeight} !important;\n font-size: ${table.typography.body.fontSize} !important;\n line-height: ${table.typography.body.lineHeight} !important;\n letter-spacing: ${table.typography.body.letterSpacing} !important;\n border-bottom: 1px solid ${table.border.bodyDivider} !important;\n background: transparent !important;\n padding: ${table.padding.normal.body} !important;\n height: ${table.rowHeight.normal.body} !important;\n vertical-align: middle !important;\n transition: none !important;\n box-sizing: border-box !important;\n }\n\n .ds-table .ant-table-tbody > tr:hover > td {\n background: ${table.surface.rowHover} !important;\n }\n\n .ds-table .ant-table-tbody > tr.ant-table-row-selected > td,\n .ds-table .ant-table-tbody > tr.ant-table-row-selected:hover > td {\n background: ${table.surface.rowSelected} !important;\n }\n\n .ds-table .ant-table-selection-column .ant-checkbox.ant-checkbox-indeterminate {\n border-color: ${checkbox.border.checked} !important;\n background-color: ${checkbox.background.checked} !important;\n }\n\n .ds-table .ant-table-selection-column .ant-checkbox.ant-checkbox-indeterminate::after {\n content: '' !important;\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n margin: 0 !important;\n border: 0 !important;\n border-radius: 1px !important;\n background: ${checkbox.mark.indeterminate} !important;\n width: ${checkbox.indeterminate.sm.width}px !important;\n height: ${checkbox.indeterminate.sm.height}px !important;\n transform: translate(-50%, -50%) !important;\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort:hover {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters,\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-sorters {\n justify-content: flex-start !important;\n gap: 6px !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-title {\n flex: none !important;\n font-weight: 600 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-sorter {\n opacity: 0 !important;\n transition: none !important;\n margin-inline-start: 0 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ds-table-sort-icon {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 10px !important;\n height: 10px !important;\n opacity: 0 !important;\n transition: none !important;\n color: inherit !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ant-table-column-sorter,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ant-table-column-sorter {\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ds-table-sort-icon,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ds-table-sort-icon {\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-column-sorter,\n .ds-table .ant-table-column-sorter-up,\n .ds-table .ant-table-column-sorter-down {\n color: ${table.text.sorterMuted} !important;\n }\n\n .ds-table .ant-table-column-sorter-up.active,\n .ds-table .ant-table-column-sorter-down.active {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-pagination.ant-pagination {\n margin-top: 16px !important;\n margin-bottom: 0 !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell {\n vertical-align: middle !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell .ds-table-expand-toggle {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin: 0 auto !important;\n line-height: 0 !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell .ds-table-expand-toggle svg {\n display: block !important;\n width: 16px !important;\n height: 16px !important;\n }\n\n .ds-table .ds-table-cell-truncate {\n display: block !important;\n width: 100% !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n text-overflow: ellipsis !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-thead > tr > th,\n .ds-table.ds-table-size-small .ant-table-tbody > tr > td {\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-thead > tr > th {\n font-size: ${table.typography.compactHeader.fontSize} !important;\n line-height: ${table.typography.compactHeader.lineHeight} !important;\n font-weight: ${table.typography.compactHeader.fontWeight} !important;\n letter-spacing: ${table.typography.compactHeader.letterSpacing} !important;\n height: ${table.rowHeight.compact.header} !important;\n padding: ${table.padding.compact.header} !important;\n border-bottom: ${table.border.headerDividerWidth} solid ${table.border.container} !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-tbody > tr > td {\n font-size: ${table.typography.compactBody.fontSize} !important;\n line-height: ${table.typography.compactBody.lineHeight} !important;\n font-weight: ${table.typography.compactBody.fontWeight} !important;\n letter-spacing: ${table.typography.compactBody.letterSpacing} !important;\n height: ${table.rowHeight.compact.body} !important;\n min-height: ${table.rowHeight.compact.body} !important;\n max-height: ${table.rowHeight.compact.body} !important;\n padding: ${table.padding.compact.body} !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-tbody > tr {\n height: ${table.rowHeight.compact.body} !important;\n min-height: ${table.rowHeight.compact.body} !important;\n max-height: ${table.rowHeight.compact.body} !important;\n }\n\n .ds-table.ds-table-size-small .ant-tag {\n margin-inline-end: 0 !important;\n padding: 0 4px !important;\n height: 16px !important;\n line-height: 16px !important;\n font-size: 10px !important;\n border-radius: 2px !important;\n display: inline-flex !important;\n align-items: center !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-thead > tr > th,\n .ds-table.ds-table-size-middle .ant-table-tbody > tr > td {\n padding: 0 16px !important;\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-thead > tr > th {\n font-size: ${table.typography.header.fontSize} !important;\n line-height: ${table.typography.header.lineHeight} !important;\n letter-spacing: ${table.typography.header.letterSpacing} !important;\n height: ${table.rowHeight.normal.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-tbody > tr > td {\n font-size: ${table.typography.body.fontSize} !important;\n line-height: ${table.typography.body.lineHeight} !important;\n letter-spacing: ${table.typography.body.letterSpacing} !important;\n height: ${table.rowHeight.normal.body} !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-thead > tr > th,\n .ds-table.ds-table-size-large .ant-table-tbody > tr > td {\n padding: 0 16px !important;\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-thead > tr > th {\n font-size: 18px !important;\n line-height: 22px !important;\n letter-spacing: -0.036px !important;\n height: 50px !important;\n font-weight: 600 !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-tbody > tr > td {\n font-size: 16px !important;\n line-height: 20px !important;\n letter-spacing: -0.016px !important;\n height: 46px !important;\n }\n\n .ds-table .ant-table-thead > tr > th,\n .ds-table .ant-table-thead > tr > th:hover {\n color: ${table.text.body} !important;\n font-weight: ${table.typography.body.fontWeight} !important;\n }\n\n .ds-table .ant-table-thead > tr > th .ant-table-column-title {\n color: inherit !important;\n font-weight: inherit !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters,\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort:hover {\n color: ${table.text.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-title,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ant-table-column-title {\n font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table.ds-table-styleA .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleA .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleA .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAResizable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAResizable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAResizable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table .ds-table-resizable-header-cell {\n position: relative !important;\n }\n\n .ds-table .ds-table-resize-handle {\n position: absolute !important;\n top: 8px !important;\n inset-inline-end: 0 !important;\n bottom: 8px !important;\n width: 12px !important;\n padding: 0 !important;\n border: 0 !important;\n border-radius: 0 !important;\n background: transparent !important;\n cursor: col-resize !important;\n touch-action: none !important;\n z-index: 2 !important;\n }\n\n .ds-table .ds-table-resize-handle::after {\n content: '' !important;\n position: absolute !important;\n top: 0 !important;\n bottom: 0 !important;\n inset-inline-end: 5px !important;\n width: 1px !important;\n background: ${table.border.bodyDivider} !important;\n opacity: 0 !important;\n transition: opacity 120ms ease !important;\n }\n\n .ds-table .ds-table-resizable-header-cell:hover .ds-table-resize-handle::after,\n .ds-table .ds-table-resize-handle:focus-visible::after {\n opacity: 1 !important;\n background: ${table.text.header} !important;\n }\n\n .ds-table .ds-table-resize-handle:focus-visible {\n outline: 2px solid ${table.text.header} !important;\n outline-offset: -2px !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table-fixed-frame {\n display: flex !important;\n flex-direction: column !important;\n width: 100% !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table-fixed-frame > .ds-table.ant-table-wrapper,\n .ds-table-fixed-frame > .ant-table-wrapper {\n flex: 1 1 auto !important;\n min-height: 0 !important;\n }\n\n .ds-table-fixed-frame .ant-table-body {\n overflow-y: auto !important;\n }\n\n .ds-table-fixed-footer {\n flex: 0 0 auto !important;\n min-height: 56px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: flex-end !important;\n padding: 12px 16px !important;\n border-top: 1px solid ${table.border.bodyDivider} !important;\n background: ${table.surface.container} !important;\n box-sizing: border-box !important;\n }\n\n .ds-table-column-visibility-control {\n display: flex !important;\n align-items: center !important;\n gap: 12px !important;\n margin-bottom: 16px !important;\n padding: 12px 0 !important;\n flex-wrap: wrap !important;\n }\n\n .ds-table-control-label {\n font-weight: 600 !important;\n font-size: 14px !important;\n color: ${table.text.body} !important;\n margin: 0 !important;\n }\n\n .ds-table-control-checkboxes {\n display: flex !important;\n gap: 12px !important;\n flex-wrap: wrap !important;\n }\n\n .ds-table-control-checkbox {\n display: inline-flex !important;\n align-items: center !important;\n gap: 6px !important;\n font-size: 14px !important;\n color: ${table.text.body} !important;\n cursor: pointer !important;\n user-select: none !important;\n margin: 0 !important;\n }\n\n .ds-table-control-checkbox input[type='checkbox'] {\n width: 16px !important;\n height: 16px !important;\n cursor: pointer !important;\n margin: 0 !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper {\n height: 26px !important;\n min-height: 26px !important;\n width: 100% !important;\n min-width: 0 !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n border-radius: 4px !important;\n border: 1px solid ${dsSemanticTokens.input.border.default} !important;\n background: ${dsSemanticTokens.input.background.default} !important;\n color: ${dsSemanticTokens.input.text.focus} !important;\n padding: 3px 8px !important;\n font-size: 12px !important;\n line-height: 16px !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input:hover,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper:hover {\n border-color: ${dsSemanticTokens.input.border.hover} !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input:focus,\n .ds-table .ds-table-edit-input.ant-input-focused,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper-focused {\n border-color: ${dsSemanticTokens.input.border.focus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-table.ds-table-styleB {\n background: ${table.surface.layout};\n padding: 0;\n }\n\n .ds-table.ds-table-styleB .ant-table {\n background: ${table.surface.layout} !important;\n }\n\n .ds-table.ds-table-styleB .ant-table-container {\n border: 1px solid ${table.border.container} !important;\n border-radius: ${table.border.radius} !important;\n overflow: hidden !important;\n background: ${table.surface.layout} !important;\n }\n\n .ds-table.ds-table-styleB .ant-table-thead > tr > th {\n border-bottom-width: ${table.border.headerDividerWidth} !important;\n background: ${table.surface.headerDefault} !important;\n }\n\n\n .ds-table.ds-table-styleB.ds-table-header-white .ant-table-thead > tr > th {\n background: ${table.surface.headerWhite} !important;\n }\n `;\n}\n\nexport const Table: React.FC<DSTableProps> = ({\n dsStyle = 'styleA',\n dsHeaderVariant = 'default',\n dsFrozenColumns = 'none',\n dsFrozenBreakpoint = 768,\n dsFrozenColumnWidth = 180,\n dsTruncateCellText = false,\n dsTruncateTooltip = true,\n dsTruncateTooltipDelay = 0.25,\n dsTruncateTooltipSize = 'normal',\n dsTruncateTooltipTitle = 'Title Heading',\n dsEditableColumns = [],\n dsOnEditableDataChange,\n dsCustomizable = false,\n dsVisibleColumns,\n dsOnVisibleColumnsChange,\n dsFixedBodyHeight = 320,\n dsResizableColumns = false,\n dsColumnWidths,\n dsOnColumnWidthsChange,\n dsResizableColumnMinWidth = 96,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth = 180,\n size = 'middle',\n className,\n columns,\n dataSource,\n pagination,\n ...antProps\n}) => {\n const [isAtOrBelowFrozenBreakpoint, setIsAtOrBelowFrozenBreakpoint] = React.useState(false);\n const [editableData, setEditableData] = React.useState<Record<string, unknown>[]>(\n Array.isArray(dataSource) ? (dataSource as Record<string, unknown>[]) : [],\n );\n const [localVisibleColumns, setLocalVisibleColumns] = React.useState<Set<string>>(() => {\n if (Array.isArray(dsVisibleColumns)) {\n return new Set(dsVisibleColumns.map(String));\n }\n if (columns && Array.isArray(columns)) {\n return new Set(\n columns\n .map((col) => getColumnIdentity(col))\n .filter((id) => Boolean(id)) as string[],\n );\n }\n return new Set();\n });\n const [localColumnWidths, setLocalColumnWidths] = React.useState<DSTableColumnWidths>(() => (\n dsColumnWidths ?? getInitialColumnWidths(columns as any[], dsResizableDefaultColumnWidth)\n ));\n\n useEffect(() => {\n injectStyles();\n ensureTooltipStyles();\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const onResize = () => {\n setIsAtOrBelowFrozenBreakpoint(window.innerWidth <= dsFrozenBreakpoint);\n };\n\n onResize();\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, [dsFrozenBreakpoint]);\n\n useEffect(() => {\n if (dsStyle !== 'styleAEditable') return;\n setEditableData(Array.isArray(dataSource) ? (dataSource as Record<string, unknown>[]) : []);\n }, [dataSource, dsStyle]);\n\n const {\n scroll: antScroll,\n tableLayout: antTableLayout,\n showSorterTooltip: antShowSorterTooltip,\n components: antComponents,\n ...restAntProps\n } = antProps;\n const useDSFrozenColumns = dsFrozenColumns !== 'none' && isAtOrBelowFrozenBreakpoint;\n const useEditableVariant = dsStyle === 'styleAEditable';\n const useCustomizableVariant = dsStyle === 'styleACustomizable' && dsCustomizable;\n const useFixedHeaderFooterVariant = dsStyle === 'styleAFixedHeaderFooter';\n const useResizableVariant = dsStyle === 'styleAResizable' || dsResizableColumns;\n const paginationConfig = pagination && typeof pagination === 'object' ? pagination : undefined;\n const [localCurrentPage, setLocalCurrentPage] = React.useState(paginationConfig?.defaultCurrent ?? 1);\n const [localPageSize, setLocalPageSize] = React.useState(paginationConfig?.defaultPageSize ?? paginationConfig?.pageSize ?? 10);\n\n useEffect(() => {\n if (!useCustomizableVariant) return;\n if (Array.isArray(dsVisibleColumns)) {\n setLocalVisibleColumns(new Set(dsVisibleColumns.map(String)));\n }\n }, [dsVisibleColumns, useCustomizableVariant]);\n\n useEffect(() => {\n if (!useResizableVariant) return;\n\n if (dsColumnWidths) {\n setLocalColumnWidths(dsColumnWidths);\n return;\n }\n\n setLocalColumnWidths((prev) => getInitialColumnWidths(columns as any[], dsResizableDefaultColumnWidth, prev));\n }, [columns, dsColumnWidths, dsResizableDefaultColumnWidth, useResizableVariant]);\n\n const handleColumnVisibilityToggle = React.useCallback(\n (colKey: string, visible: boolean) => {\n setLocalVisibleColumns((prev) => {\n const next = new Set(prev);\n if (visible) {\n next.add(colKey);\n } else {\n next.delete(colKey);\n }\n const nextArray = Array.from(next);\n dsOnVisibleColumnsChange?.(nextArray);\n return next;\n });\n },\n [dsOnVisibleColumnsChange],\n );\n const normalizedEditableColumns = React.useMemo(() => {\n if (Array.isArray(dsEditableColumns)) {\n return dsEditableColumns.map(String);\n }\n\n if (typeof dsEditableColumns === 'string') {\n return dsEditableColumns\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n\n if (dsEditableColumns && typeof dsEditableColumns === 'object') {\n return Object.entries(dsEditableColumns)\n .filter(([, enabled]) => Boolean(enabled))\n .map(([key]) => key);\n }\n\n return [] as string[];\n }, [dsEditableColumns]);\n\n const handleEditableCellChange = React.useCallback((rowIndex: number, dataIndex: unknown, nextValue: unknown) => {\n setEditableData((prev) => {\n if (!Array.isArray(prev) || !prev[rowIndex]) {\n return prev;\n }\n\n const nextRows = [...prev];\n const currentRow = nextRows[rowIndex] as Record<string, unknown>;\n nextRows[rowIndex] = setValueByDataIndex(currentRow, dataIndex, nextValue);\n dsOnEditableDataChange?.(nextRows as unknown[] as Record<string, unknown>[]);\n return nextRows;\n });\n }, [dsOnEditableDataChange]);\n\n const handleColumnResize = React.useCallback((columnKey: string, nextWidth: number) => {\n const clampedWidth = clampColumnWidth(nextWidth, dsResizableColumnMinWidth, dsResizableColumnMaxWidth);\n\n setLocalColumnWidths((prev) => {\n const next = { ...prev, [columnKey]: clampedWidth };\n dsOnColumnWidthsChange?.(next);\n return next;\n });\n }, [dsOnColumnWidthsChange, dsResizableColumnMaxWidth, dsResizableColumnMinWidth]);\n\n const columnsWithDSBehavior = React.useMemo(() => {\n const withSortIcons = withDSSortIcons(columns as any[], antShowSorterTooltip);\n const withFrozenColumns = useDSFrozenColumns\n ? withDSFrozenColumns(withSortIcons, dsFrozenColumns, dsFrozenColumnWidth)\n : withSortIcons;\n\n const withVisibilityFilter = useCustomizableVariant\n ? withDSVisibleColumnsFilter(withFrozenColumns, localVisibleColumns)\n : withFrozenColumns;\n\n const editableColumnKeys = new Set(normalizedEditableColumns);\n const withEditableColumns = useEditableVariant\n ? withDSEditableCells(withVisibilityFilter, editableColumnKeys, handleEditableCellChange)\n : withVisibilityFilter;\n\n const withResizableColumns = useResizableVariant\n ? withDSResizableColumns(\n withEditableColumns,\n localColumnWidths,\n handleColumnResize,\n dsResizableColumnMinWidth,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth,\n )\n : withEditableColumns;\n\n if (!dsTruncateCellText || useEditableVariant) {\n return withResizableColumns;\n }\n\n return withDSTruncatedCells(\n withResizableColumns,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle\n );\n }, [\n columns,\n antShowSorterTooltip,\n dsFrozenColumnWidth,\n dsFrozenColumns,\n dsTruncateCellText,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle,\n normalizedEditableColumns,\n handleEditableCellChange,\n useResizableVariant,\n localColumnWidths,\n handleColumnResize,\n dsResizableColumnMinWidth,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth,\n useDSFrozenColumns,\n useEditableVariant,\n localVisibleColumns,\n useCustomizableVariant,\n handleColumnVisibilityToggle,\n ]);\n\n const effectiveScroll = React.useMemo(() => {\n if (useFixedHeaderFooterVariant) {\n const scrollBase = antScroll && typeof antScroll === 'object' ? antScroll : {};\n return {\n ...scrollBase,\n y: scrollBase.y ?? dsFixedBodyHeight,\n };\n }\n\n if (useResizableVariant) {\n if (!antScroll || typeof antScroll !== 'object') {\n return { x: 'max-content' as const };\n }\n\n return {\n ...antScroll,\n x: antScroll.x ?? ('max-content' as const),\n };\n }\n\n if (!useDSFrozenColumns) {\n return antScroll;\n }\n\n if (!antScroll || typeof antScroll !== 'object') {\n return { x: 'max-content' as const };\n }\n\n return {\n ...antScroll,\n x: antScroll.x ?? ('max-content' as const),\n };\n }, [antScroll, dsFixedBodyHeight, useDSFrozenColumns, useFixedHeaderFooterVariant, useResizableVariant]);\n\n const effectiveTableLayout = (useEditableVariant || useResizableVariant) ? (antTableLayout ?? 'fixed') : antTableLayout;\n const effectiveComponents = React.useMemo(() => {\n if (!useResizableVariant) return antComponents;\n\n return {\n ...antComponents,\n header: {\n ...antComponents?.header,\n cell: DSResizableHeaderCell,\n },\n };\n }, [antComponents, useResizableVariant]);\n\n const fixedPaginationTotal = paginationConfig?.total ?? (Array.isArray(dataSource) ? dataSource.length : 0);\n const fixedCurrentPage = paginationConfig?.current ?? localCurrentPage;\n const fixedPageSize = paginationConfig?.pageSize ?? localPageSize;\n const fixedDataSource = React.useMemo(() => {\n const source = useEditableVariant ? editableData : dataSource;\n if (!useFixedHeaderFooterVariant || !Array.isArray(source)) {\n return source;\n }\n\n if (paginationConfig?.total != null && paginationConfig.total > source.length) {\n return source;\n }\n\n const start = (fixedCurrentPage - 1) * fixedPageSize;\n return source.slice(start, start + fixedPageSize);\n }, [dataSource, editableData, fixedCurrentPage, fixedPageSize, paginationConfig?.total, useEditableVariant, useFixedHeaderFooterVariant]);\n\n const fixedFooterPaginationProps: DSPaginationProps = {\n ...paginationConfig,\n current: fixedCurrentPage,\n pageSize: fixedPageSize,\n total: fixedPaginationTotal,\n showSizeChanger: paginationConfig?.showSizeChanger ?? false,\n onChange: (page, pageSize) => {\n setLocalCurrentPage(page);\n setLocalPageSize(pageSize);\n paginationConfig?.onChange?.(page, pageSize);\n },\n onShowSizeChange: (page, pageSize) => {\n setLocalCurrentPage(page);\n setLocalPageSize(pageSize);\n paginationConfig?.onShowSizeChange?.(page, pageSize);\n },\n };\n\n const dsClassName = [\n 'ds-table',\n `ds-table-${dsStyle}`,\n `ds-table-size-${size}`,\n dsHeaderVariant === 'white' ? 'ds-table-header-white' : '',\n className || '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const tableElement = (\n <AntTable\n {...restAntProps}\n columns={columnsWithDSBehavior}\n dataSource={fixedDataSource}\n pagination={useFixedHeaderFooterVariant ? false : pagination}\n scroll={effectiveScroll}\n tableLayout={effectiveTableLayout}\n components={effectiveComponents}\n size={size}\n className={dsClassName}\n showSorterTooltip={getDSSorterTooltipProps(antShowSorterTooltip)}\n />\n );\n\n if (useFixedHeaderFooterVariant) {\n return (\n <div className={`${dsClassName} ds-table-fixed-frame`}>\n {tableElement}\n <div className=\"ds-table-fixed-footer\">\n <DSPagination {...fixedFooterPaginationProps} />\n </div>\n </div>\n );\n }\n\n return useCustomizableVariant ? (\n <div className={dsClassName}>\n <DSColumnVisibilityControl\n columns={columns as any[]}\n visibleColumns={localVisibleColumns}\n onToggle={handleColumnVisibilityToggle}\n />\n {tableElement}\n </div>\n ) : (\n tableElement\n );\n};\n\nexport default Table;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Table.cjs","names":[],"sources":["../../src/ds/display/Table.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { Table as AntTable, type TableProps as AntTableProps } from 'antd';\nimport { Input } from 'antd';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { Icon } from '../../utils/icons';\nimport { Pagination as DSPagination } from '../navigation/Pagination';\nimport type { DSPaginationProps } from '../navigation/Pagination';\nimport { ensureTooltipStyles, Tooltip as DSTooltip } from './Tooltip';\nimport type { DSTooltipSize } from './Tooltip';\n\nexport type DSTableStyle = 'styleA' | 'styleAEditable' | 'styleACustomizable' | 'styleAFixedHeaderFooter' | 'styleAResizable' | 'styleB';\nexport type DSTableHeaderVariant = 'default' | 'white';\nexport type DSTableFrozenColumns = 'none' | 'first' | 'last' | 'both';\nexport type DSTableColumnWidths = Record<string, number>;\nexport type DSTableDensity = 'comfortable' | 'compact';\n\ntype DSAutoSizeConfig = {\n minWidth: number;\n maxWidth: number;\n sampleSize: number;\n cellPadding: number;\n enabledColumnKeys?: Set<string>;\n};\n\nexport type DSTableProps<RecordType = Record<string, unknown>> = AntTableProps<RecordType> & {\n /**\n * DS table style from Figma documentation.\n * styleA: full-width, white header, thicker header divider, no container border.\n * styleAEditable: styleA base with inline editable cells for selected columns.\n * styleB: warm layout background, cool header, 1px container border with 4px radius.\n */\n dsStyle?: DSTableStyle;\n /**\n * Header background variant for styleB.\n * default: cool gray header\n * white: white header (allowed alternative in Figma docs)\n */\n dsHeaderVariant?: DSTableHeaderVariant;\n /**\n * DS responsive frozen-column mode.\n * none: no DS freezing behavior\n * first: freeze first column on small screens\n * last: freeze last column on small screens\n * both: freeze first and last columns on small screens\n */\n dsFrozenColumns?: DSTableFrozenColumns;\n /**\n * Breakpoint (px) at or below which DS frozen columns become active.\n */\n dsFrozenBreakpoint?: number;\n /**\n * Default width for DS-frozen columns when column width is not defined.\n */\n dsFrozenColumnWidth?: number;\n /**\n * Truncates cell text based on available cell width.\n */\n dsTruncateCellText?: boolean;\n /**\n * Shows DS tooltip with the full value when truncated text is hovered.\n */\n dsTruncateTooltip?: boolean;\n /**\n * Delay (seconds) before showing the truncation tooltip on hover.\n */\n dsTruncateTooltipDelay?: number;\n /**\n * DS tooltip size variant used for truncation tooltips.\n */\n dsTruncateTooltipSize?: DSTooltipSize;\n /**\n * DS tooltip title used for truncation tooltips when using normal tooltip size.\n */\n dsTruncateTooltipTitle?: string;\n /**\n * Column keys or dataIndex values that are editable when dsStyle is styleAEditable.\n */\n dsEditableColumns?: string[] | string | Record<string, boolean>;\n /**\n * Called whenever editable table data changes.\n */\n dsOnEditableDataChange?: (nextData: RecordType[]) => void;\n /**\n * When true, enables column visibility controls above the table for dsStyle=\"styleACustomizable\".\n */\n dsCustomizable?: boolean;\n /**\n * Column keys or dataIndex values that are currently visible.\n * Only used when dsStyle=\"styleACustomizable\".\n */\n dsVisibleColumns?: string[];\n /**\n * Called when user toggles column visibility.\n */\n dsOnVisibleColumnsChange?: (nextVisible: string[]) => void;\n /**\n * Scrollable body height for dsStyle=\"styleAFixedHeaderFooter\".\n */\n dsFixedBodyHeight?: number | string;\n /**\n * Enables column resizing. Automatically enabled for dsStyle=\"styleAResizable\".\n */\n dsResizableColumns?: boolean;\n /**\n * Controlled column widths by column key or dataIndex.\n */\n dsColumnWidths?: DSTableColumnWidths;\n /**\n * Called whenever a resizable column width changes.\n */\n dsOnColumnWidthsChange?: (nextWidths: DSTableColumnWidths) => void;\n /**\n * Minimum resizable column width in px.\n */\n dsResizableColumnMinWidth?: number;\n /**\n * Maximum resizable column width in px.\n */\n dsResizableColumnMaxWidth?: number;\n /**\n * Default width in px for resizable columns without an explicit width.\n */\n dsResizableDefaultColumnWidth?: number;\n /**\n * Enables responsive table behavior by default.\n * When enabled, DS ensures horizontal scrolling is available for narrow layouts.\n */\n dsResponsive?: boolean;\n /**\n * Minimum width in px used per leaf column when deriving responsive table width.\n */\n dsResponsiveMinColumnWidth?: number;\n /**\n * DS density alias aligned with Material UI table density concepts.\n * comfortable -> Ant middle, compact -> Ant small.\n */\n dsDensity?: DSTableDensity;\n /**\n * Sticky header alias aligned with Material UI table behavior.\n */\n dsStickyHeader?: boolean;\n /**\n * Optional top offset for sticky header.\n */\n dsStickyOffsetHeader?: number;\n /**\n * Material UI-style rows-per-page options for pagination controls.\n */\n dsRowsPerPageOptions?: Array<number | string>;\n /**\n * Automatically sizes columns to fit content for DS leaf columns.\n * - true: auto-size all eligible leaf columns\n * - string[] / comma-separated string: auto-size only listed column keys/dataIndex values\n * - Record<string, boolean>: per-column on/off map by key/dataIndex\n */\n dsAutoSizeColumns?: boolean | string[] | string | Record<string, boolean>;\n /**\n * Minimum column width in px when using dsAutoSizeColumns.\n */\n dsAutoSizeMinWidth?: number;\n /**\n * Maximum column width in px when using dsAutoSizeColumns.\n */\n dsAutoSizeMaxWidth?: number;\n /**\n * Number of rows sampled for auto-sizing calculations.\n */\n dsAutoSizeSampleSize?: number;\n /**\n * Horizontal padding in px added to measured text width.\n */\n dsAutoSizeCellPadding?: number;\n};\n\nconst STYLE_ID = 'ds-table-styles';\n\nconst isTextValue = (value: unknown): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\nconst DSTruncatedCell: React.FC<{\n value: string | number;\n withTooltip: boolean;\n tooltipDelay: number;\n tooltipSize: DSTooltipSize;\n tooltipTitle?: string;\n}> = ({ value, withTooltip, tooltipDelay, tooltipSize, tooltipTitle }) => {\n const cellRef = React.useRef<HTMLSpanElement>(null);\n const [isTruncated, setIsTruncated] = React.useState(false);\n const text = String(value);\n\n const updateTruncation = React.useCallback(() => {\n const cell = cellRef.current;\n if (!cell) return;\n const nextValue = cell.scrollWidth > cell.clientWidth;\n setIsTruncated((prev) => (prev === nextValue ? prev : nextValue));\n }, []);\n\n React.useEffect(() => {\n const cell = cellRef.current;\n if (!cell) return;\n\n updateTruncation();\n\n // Styles for truncation can be injected shortly after first render.\n // Re-check on subsequent frames so measurement reflects final layout.\n const rafId = requestAnimationFrame(() => {\n updateTruncation();\n requestAnimationFrame(updateTruncation);\n });\n const timeoutId = window.setTimeout(updateTruncation, 120);\n\n const resizeObserver = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(updateTruncation) : null;\n if (resizeObserver) {\n resizeObserver.observe(cell);\n } else if (typeof window !== 'undefined') {\n window.addEventListener('resize', updateTruncation);\n }\n\n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n } else if (typeof window !== 'undefined') {\n window.removeEventListener('resize', updateTruncation);\n }\n cancelAnimationFrame(rafId);\n window.clearTimeout(timeoutId);\n };\n }, [text, updateTruncation]);\n\n const content = (\n <span\n ref={cellRef}\n className=\"ds-table-cell-truncate\"\n onMouseOverCapture={updateTruncation}\n onFocus={updateTruncation}\n >\n {text}\n </span>\n );\n\n if (!withTooltip) {\n return content;\n }\n\n return (\n <DSTooltip\n title={isTruncated ? undefined : null}\n dsSize={tooltipSize}\n dsTitle={tooltipTitle}\n dsBody={text}\n mouseEnterDelay={tooltipDelay}\n trigger=\"hover\"\n >\n {content}\n </DSTooltip>\n );\n};\n\ntype DSTableSorterTooltip = Exclude<AntTableProps['showSorterTooltip'], boolean | undefined>;\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nfunction getDSSorterTooltipProps(showSorterTooltip?: AntTableProps['showSorterTooltip']): AntTableProps['showSorterTooltip'] {\n if (showSorterTooltip === false) {\n return false;\n }\n\n const { tooltip } = dsSemanticTokens;\n const provided = showSorterTooltip && typeof showSorterTooltip === 'object'\n ? showSorterTooltip as DSTableSorterTooltip\n : undefined;\n\n return {\n ...provided,\n color: provided?.color ?? tooltip.surface.background,\n arrow: provided?.arrow ?? true,\n classNames: {\n ...provided?.classNames,\n root: mergeClassNames('ds-tooltip-overlay', 'ds-tooltip-size-normal', provided?.classNames?.root, provided?.overlayClassName),\n },\n styles: {\n ...provided?.styles,\n container: {\n borderRadius: tooltip.radius,\n color: tooltip.surface.body,\n letterSpacing: 0,\n minWidth: tooltip.width.normal.min,\n maxWidth: tooltip.width.normal.max,\n padding: tooltip.padding.normal,\n ...provided?.styles?.container,\n },\n },\n };\n}\n\nfunction withDSSortIcons(\n columns: any[] | undefined,\n tableShowSorterTooltip?: AntTableProps['showSorterTooltip'],\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSSortIcons(nextColumn.children, tableShowSorterTooltip);\n }\n\n if (nextColumn.sorter) {\n const columnShowSorterTooltip = nextColumn.showSorterTooltip === undefined\n ? tableShowSorterTooltip\n : nextColumn.showSorterTooltip;\n nextColumn.showSorterTooltip = getDSSorterTooltipProps(columnShowSorterTooltip);\n }\n\n if (nextColumn.sorter && !nextColumn.sortIcon) {\n nextColumn.sortIcon = ({ sortOrder }: { sortOrder?: 'ascend' | 'descend' }) => (\n <span className=\"ds-table-sort-icon\" aria-hidden=\"true\">\n <Icon\n name={sortOrder === 'ascend' ? 'arrowThickUp' : 'arrowThickDown'}\n size={10}\n style={{ color: 'inherit' }}\n />\n </span>\n );\n }\n\n return nextColumn;\n });\n}\n\nfunction withDSFrozenColumns(\n columns: any[] | undefined,\n mode: DSTableFrozenColumns,\n defaultFrozenWidth: number\n): any[] | undefined {\n if (!columns || mode === 'none' || columns.length === 0) return columns;\n\n const freezeFirst = mode === 'first' || mode === 'both';\n const freezeLast = mode === 'last' || mode === 'both';\n const lastIndex = columns.length - 1;\n\n return columns.map((column, index) => {\n const nextColumn = { ...column };\n\n const shouldFreezeLeft = freezeFirst && index === 0;\n const shouldFreezeRight = freezeLast && index === lastIndex;\n\n if (shouldFreezeLeft) {\n nextColumn.fixed = 'left';\n if (nextColumn.width == null) {\n nextColumn.width = defaultFrozenWidth;\n }\n }\n\n if (shouldFreezeRight) {\n nextColumn.fixed = 'right';\n if (nextColumn.width == null) {\n nextColumn.width = defaultFrozenWidth;\n }\n }\n\n return nextColumn;\n });\n}\n\nfunction withDSTruncatedCells(\n columns: any[] | undefined,\n withTooltip: boolean,\n tooltipDelay: number,\n tooltipSize: DSTooltipSize,\n tooltipTitle?: string\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSTruncatedCells(nextColumn.children, withTooltip, tooltipDelay, tooltipSize, tooltipTitle);\n return nextColumn;\n }\n\n const originalRender = nextColumn.render;\n\n if (nextColumn.ellipsis == null) {\n nextColumn.ellipsis = { showTitle: false };\n } else if (nextColumn.ellipsis === true) {\n nextColumn.ellipsis = { showTitle: false };\n } else if (typeof nextColumn.ellipsis === 'object') {\n nextColumn.ellipsis = { ...nextColumn.ellipsis, showTitle: false };\n }\n\n nextColumn.render = (value: unknown, record: unknown, index: number) => {\n const rendered = originalRender ? originalRender(value, record, index) : value;\n\n if (isTextValue(rendered)) {\n return <DSTruncatedCell value={rendered} withTooltip={withTooltip} tooltipDelay={tooltipDelay} tooltipSize={tooltipSize} tooltipTitle={tooltipTitle} />;\n }\n\n if (!originalRender && isTextValue(value)) {\n return <DSTruncatedCell value={value} withTooltip={withTooltip} tooltipDelay={tooltipDelay} tooltipSize={tooltipSize} tooltipTitle={tooltipTitle} />;\n }\n\n return rendered;\n };\n\n return nextColumn;\n });\n}\n\nfunction getColumnIdentity(column: any): string | undefined {\n if (typeof column?.key === 'string') return column.key;\n if (typeof column?.dataIndex === 'string') return column.dataIndex;\n if (typeof column?.dataIndex === 'number') return String(column.dataIndex);\n return undefined;\n}\n\nfunction getNumericColumnWidth(width: unknown): number | undefined {\n if (typeof width === 'number' && Number.isFinite(width)) return width;\n if (typeof width === 'string' && width.endsWith('px')) {\n const parsedWidth = Number(width.slice(0, -2));\n return Number.isFinite(parsedWidth) ? parsedWidth : undefined;\n }\n return undefined;\n}\n\nfunction clampColumnWidth(width: number, minWidth: number, maxWidth?: number): number {\n const widthWithMin = Math.max(minWidth, Math.round(width));\n return typeof maxWidth === 'number' ? Math.min(maxWidth, widthWithMin) : widthWithMin;\n}\n\nfunction getInitialColumnWidths(\n columns: any[] | undefined,\n defaultWidth: number,\n existingWidths: DSTableColumnWidths = {},\n): DSTableColumnWidths {\n if (!columns) return existingWidths;\n\n const nextWidths = { ...existingWidths };\n\n const traverse = (cols: any[]) => {\n cols.forEach((column) => {\n if (Array.isArray(column.children) && column.children.length > 0) {\n traverse(column.children);\n return;\n }\n\n const identity = getColumnIdentity(column);\n if (!identity || nextWidths[identity] != null) return;\n const explicitWidth = getNumericColumnWidth(column.width);\n if (explicitWidth != null) {\n nextWidths[identity] = explicitWidth;\n }\n });\n };\n\n traverse(columns);\n return nextWidths;\n}\n\nfunction estimateTextWidth(value: unknown): number {\n const text = value == null ? '' : String(value);\n if (!text) return 0;\n return text.length * 8;\n}\n\nfunction getColumnTitleText(title: unknown): string {\n if (typeof title === 'string' || typeof title === 'number') {\n return String(title);\n }\n return '';\n}\n\nfunction withDSAutoSizedColumns(\n columns: any[] | undefined,\n data: Array<Record<string, unknown>>,\n config: DSAutoSizeConfig,\n): any[] | undefined {\n if (!columns) return columns;\n\n const sampledRows = data.slice(0, Math.max(0, config.sampleSize));\n\n const autoSizeColumn = (column: any): any => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = nextColumn.children.map(autoSizeColumn);\n return nextColumn;\n }\n\n if (nextColumn.width != null) {\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n if (config.enabledColumnKeys && (!identity || !config.enabledColumnKeys.has(identity))) {\n return nextColumn;\n }\n\n const titleWidth = estimateTextWidth(getColumnTitleText(nextColumn.title));\n const contentWidth = sampledRows.reduce((maxWidth, row, rowIndex) => {\n const rawValue = getValueByDataIndex(row, nextColumn.dataIndex);\n const rendered = typeof nextColumn.render === 'function'\n ? nextColumn.render(rawValue, row, rowIndex)\n : rawValue;\n const measured = isTextValue(rendered) ? estimateTextWidth(rendered) : estimateTextWidth(rawValue);\n return Math.max(maxWidth, measured);\n }, 0);\n\n const targetWidth = Math.max(titleWidth, contentWidth) + config.cellPadding;\n nextColumn.width = clampColumnWidth(targetWidth, config.minWidth, config.maxWidth);\n return nextColumn;\n };\n\n return columns.map(autoSizeColumn);\n}\n\nfunction normalizeAutoSizeColumnsSelection(selection: DSTableProps['dsAutoSizeColumns']): Set<string> | undefined {\n if (selection === true || selection === false || selection == null) {\n return undefined;\n }\n\n if (Array.isArray(selection)) {\n return new Set(selection.map(String));\n }\n\n if (typeof selection === 'string') {\n return new Set(\n selection\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean),\n );\n }\n\n if (typeof selection === 'object') {\n return new Set(\n Object.entries(selection)\n .filter(([, enabled]) => Boolean(enabled))\n .map(([key]) => key),\n );\n }\n\n return undefined;\n}\n\nfunction getValueByDataIndex(record: Record<string, unknown>, dataIndex: unknown): unknown {\n if (Array.isArray(dataIndex)) {\n return dataIndex.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object') {\n return (acc as Record<string, unknown>)[String(key)];\n }\n return undefined;\n }, record);\n }\n\n if (typeof dataIndex === 'string' || typeof dataIndex === 'number') {\n return record[String(dataIndex)];\n }\n\n return undefined;\n}\n\nfunction setValueByDataIndex(record: Record<string, unknown>, dataIndex: unknown, value: unknown): Record<string, unknown> {\n if (Array.isArray(dataIndex) && dataIndex.length > 0) {\n const next = { ...record };\n let cursor: Record<string, unknown> = next;\n\n for (let i = 0; i < dataIndex.length - 1; i += 1) {\n const key = String(dataIndex[i]);\n const current = cursor[key];\n const cloned = current && typeof current === 'object' ? { ...(current as Record<string, unknown>) } : {};\n cursor[key] = cloned;\n cursor = cloned;\n }\n\n cursor[String(dataIndex[dataIndex.length - 1])] = value;\n return next;\n }\n\n if (typeof dataIndex === 'string' || typeof dataIndex === 'number') {\n return { ...record, [String(dataIndex)]: value };\n }\n\n return record;\n}\n\nfunction withDSEditableCells(\n columns: any[] | undefined,\n editableColumnKeys: Set<string>,\n onValueChange: (rowIndex: number, dataIndex: unknown, nextValue: unknown) => void,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSEditableCells(nextColumn.children, editableColumnKeys, onValueChange);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n const isEditable = Boolean(identity && editableColumnKeys.has(identity));\n\n if (!isEditable || nextColumn.dataIndex == null) {\n return nextColumn;\n }\n\n nextColumn.render = (_value: unknown, record: Record<string, unknown>, rowIndex: number) => {\n const currentValue = getValueByDataIndex(record, nextColumn.dataIndex);\n const isNumberValue = typeof currentValue === 'number';\n const inputValue = currentValue == null ? '' : String(currentValue);\n\n return (\n <Input\n className=\"ds-table-edit-input\"\n type={isNumberValue ? 'number' : 'text'}\n size=\"small\"\n value={inputValue}\n onChange={(event) => {\n const raw = event.target.value;\n const nextValue = isNumberValue ? (raw === '' ? null : Number(raw)) : raw;\n onValueChange(rowIndex, nextColumn.dataIndex, nextValue);\n }}\n />\n );\n };\n\n return nextColumn;\n });\n}\n\nfunction withDSVisibleColumnsFilter(\n columns: any[] | undefined,\n visibleColumnKeys: Set<string>,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSVisibleColumnsFilter(nextColumn.children, visibleColumnKeys);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n if (!identity || visibleColumnKeys.has(identity)) {\n return nextColumn;\n }\n\n return null;\n }).filter((col) => col !== null);\n}\n\nconst DSColumnVisibilityControl: React.FC<{\n columns: any[];\n visibleColumns: Set<string>;\n onToggle: (colKey: string, visible: boolean) => void;\n}> = ({ columns, visibleColumns, onToggle }) => {\n const columnOptions = React.useMemo(() => {\n const opts: Array<{ key: string; label: string }> = [];\n\n const traverse = (cols: any[]) => {\n cols.forEach((col) => {\n if (Array.isArray(col.children) && col.children.length > 0) {\n traverse(col.children);\n } else {\n const identity = getColumnIdentity(col);\n const label = col.title || (typeof col.dataIndex === 'string' ? col.dataIndex : 'Column');\n if (identity) {\n opts.push({ key: identity, label: String(label) });\n }\n }\n });\n };\n\n traverse(columns);\n return opts;\n }, [columns]);\n\n return (\n <div className=\"ds-table-column-visibility-control\">\n <label className=\"ds-table-control-label\">Columns:</label>\n <div className=\"ds-table-control-checkboxes\">\n {columnOptions.map(({ key, label }) => (\n <label key={key} className=\"ds-table-control-checkbox\">\n <input\n type=\"checkbox\"\n checked={visibleColumns.has(key)}\n onChange={(e) => onToggle(key, e.target.checked)}\n />\n <span>{label}</span>\n </label>\n ))}\n </div>\n </div>\n );\n};\n\ntype DSResizableHeaderCellProps = React.ThHTMLAttributes<HTMLTableCellElement> & {\n width?: number;\n minWidth?: number;\n maxWidth?: number;\n onResize?: (nextWidth: number) => void;\n};\n\nconst DSResizableHeaderCell: React.FC<DSResizableHeaderCellProps> = ({\n width,\n minWidth = 96,\n maxWidth,\n onResize,\n children,\n className,\n style,\n ...restProps\n}) => {\n const startWidthRef = React.useRef(0);\n const startXRef = React.useRef(0);\n\n const updateWidth = React.useCallback((nextWidth: number) => {\n if (!onResize) return;\n onResize(clampColumnWidth(nextWidth, minWidth, maxWidth));\n }, [maxWidth, minWidth, onResize]);\n\n const handleMouseDown = React.useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n if (!onResize || typeof document === 'undefined') return;\n\n event.preventDefault();\n event.stopPropagation();\n startXRef.current = event.clientX;\n startWidthRef.current = width ?? event.currentTarget.parentElement?.getBoundingClientRect().width ?? minWidth;\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = moveEvent.clientX - startXRef.current;\n updateWidth(startWidthRef.current + delta);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }, [minWidth, onResize, updateWidth, width]);\n\n const handleKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (!onResize || width == null) return;\n\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n\n event.preventDefault();\n event.stopPropagation();\n const direction = event.key === 'ArrowLeft' ? -1 : 1;\n updateWidth(width + direction * (event.shiftKey ? 24 : 8));\n }, [onResize, updateWidth, width]);\n\n return (\n <th\n {...restProps}\n className={mergeClassNames(className, onResize ? 'ds-table-resizable-header-cell' : undefined)}\n style={{ ...style, width }}\n >\n {children}\n {onResize ? (\n <button\n type=\"button\"\n className=\"ds-table-resize-handle\"\n aria-label=\"Resize column\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n />\n ) : null}\n </th>\n );\n};\n\nfunction withDSResizableColumns(\n columns: any[] | undefined,\n widths: DSTableColumnWidths,\n onColumnResize: (columnKey: string, nextWidth: number) => void,\n minWidth: number,\n maxWidth: number | undefined,\n defaultWidth: number,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSResizableColumns(nextColumn.children, widths, onColumnResize, minWidth, maxWidth, defaultWidth);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n if (!identity) return nextColumn;\n\n const width = widths[identity] ?? getNumericColumnWidth(nextColumn.width) ?? defaultWidth;\n const originalOnHeaderCell = nextColumn.onHeaderCell;\n nextColumn.width = width;\n nextColumn.onHeaderCell = (columnInstance: unknown) => {\n const providedHeaderCellProps = originalOnHeaderCell?.(columnInstance) ?? {};\n return {\n ...providedHeaderCellProps,\n width,\n minWidth,\n maxWidth,\n onResize: (nextWidth: number) => onColumnResize(identity, nextWidth),\n className: mergeClassNames(providedHeaderCellProps.className, 'ds-table-resizable-header'),\n };\n };\n\n return nextColumn;\n });\n}\n\nfunction getResponsiveScrollWidth(columns: any[] | undefined, minColumnWidth: number): number {\n if (!columns || columns.length === 0) return minColumnWidth;\n\n const collectLeafWidths = (cols: any[]): number[] => cols.flatMap((column) => {\n if (Array.isArray(column?.children) && column.children.length > 0) {\n return collectLeafWidths(column.children);\n }\n\n const width = getNumericColumnWidth(column?.width);\n return [width ?? minColumnWidth];\n });\n\n const widths = collectLeafWidths(columns);\n if (widths.length === 0) return minColumnWidth;\n return widths.reduce((sum, width) => sum + width, 0);\n}\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n const { table, checkbox } = dsSemanticTokens;\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-table {\n font-family: \"Nunito\", sans-serif;\n color: ${table.text.body};\n }\n\n .ds-table .ant-table {\n font-family: \"Nunito\", sans-serif;\n color: ${table.text.body};\n background: ${table.surface.container};\n }\n\n .ds-table .ant-table-thead > tr > th {\n color: ${table.text.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n font-size: ${table.typography.header.fontSize} !important;\n line-height: ${table.typography.header.lineHeight} !important;\n letter-spacing: ${table.typography.header.letterSpacing} !important;\n background: ${table.surface.container} !important;\n border-bottom: ${table.border.headerDividerWidth} solid ${table.border.container} !important;\n padding: ${table.padding.normal.header} !important;\n height: ${table.rowHeight.normal.header} !important;\n vertical-align: middle !important;\n box-sizing: border-box !important;\n }\n\n .ds-table .ant-table-thead > tr > th::before {\n display: none !important;\n }\n\n .ds-table .ant-table-tbody > tr:not(.ant-table-measure-row) > td {\n color: ${table.text.body} !important;\n font-weight: ${table.typography.body.fontWeight} !important;\n font-size: ${table.typography.body.fontSize} !important;\n line-height: ${table.typography.body.lineHeight} !important;\n letter-spacing: ${table.typography.body.letterSpacing} !important;\n border-bottom: 1px solid ${table.border.bodyDivider} !important;\n background: transparent !important;\n padding: ${table.padding.normal.body} !important;\n height: ${table.rowHeight.normal.body} !important;\n vertical-align: middle !important;\n transition: none !important;\n box-sizing: border-box !important;\n }\n\n .ds-table .ant-table-tbody > tr:hover > td {\n background: ${table.surface.rowHover} !important;\n }\n\n .ds-table .ant-table-tbody > tr.ant-table-row-selected > td,\n .ds-table .ant-table-tbody > tr.ant-table-row-selected:hover > td {\n background: ${table.surface.rowSelected} !important;\n }\n\n .ds-table .ant-table-selection-column .ant-checkbox.ant-checkbox-indeterminate {\n border-color: ${checkbox.border.checked} !important;\n background-color: ${checkbox.background.checked} !important;\n }\n\n .ds-table .ant-table-selection-column .ant-checkbox.ant-checkbox-indeterminate::after {\n content: '' !important;\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n margin: 0 !important;\n border: 0 !important;\n border-radius: 1px !important;\n background: ${checkbox.mark.indeterminate} !important;\n width: ${checkbox.indeterminate.sm.width}px !important;\n height: ${checkbox.indeterminate.sm.height}px !important;\n transform: translate(-50%, -50%) !important;\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort:hover {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters,\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-sorters {\n justify-content: flex-start !important;\n gap: 6px !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-title {\n flex: none !important;\n font-weight: 600 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-sorter {\n opacity: 0 !important;\n transition: none !important;\n margin-inline-start: 0 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ds-table-sort-icon {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 10px !important;\n height: 10px !important;\n opacity: 0 !important;\n transition: none !important;\n color: inherit !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ant-table-column-sorter,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ant-table-column-sorter {\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ds-table-sort-icon,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ds-table-sort-icon {\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-column-sorter,\n .ds-table .ant-table-column-sorter-up,\n .ds-table .ant-table-column-sorter-down {\n color: ${table.text.sorterMuted} !important;\n }\n\n .ds-table .ant-table-column-sorter-up.active,\n .ds-table .ant-table-column-sorter-down.active {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-pagination.ant-pagination {\n margin-top: 16px !important;\n margin-bottom: 0 !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell {\n vertical-align: middle !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell .ds-table-expand-toggle {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin: 0 auto !important;\n line-height: 0 !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell .ds-table-expand-toggle svg {\n display: block !important;\n width: 16px !important;\n height: 16px !important;\n }\n\n .ds-table .ds-table-cell-truncate {\n display: block !important;\n width: 100% !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n text-overflow: ellipsis !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-thead > tr > th,\n .ds-table.ds-table-size-small .ant-table-tbody > tr:not(.ant-table-measure-row) > td {\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-thead > tr > th {\n font-size: ${table.typography.compactHeader.fontSize} !important;\n line-height: ${table.typography.compactHeader.lineHeight} !important;\n font-weight: ${table.typography.compactHeader.fontWeight} !important;\n letter-spacing: ${table.typography.compactHeader.letterSpacing} !important;\n height: ${table.rowHeight.compact.header} !important;\n padding: ${table.padding.compact.header} !important;\n border-bottom: ${table.border.headerDividerWidth} solid ${table.border.container} !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-tbody > tr:not(.ant-table-measure-row) > td {\n font-size: ${table.typography.compactBody.fontSize} !important;\n line-height: ${table.typography.compactBody.lineHeight} !important;\n font-weight: ${table.typography.compactBody.fontWeight} !important;\n letter-spacing: ${table.typography.compactBody.letterSpacing} !important;\n height: ${table.rowHeight.compact.body} !important;\n min-height: ${table.rowHeight.compact.body} !important;\n max-height: ${table.rowHeight.compact.body} !important;\n padding: ${table.padding.compact.body} !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-tbody > tr {\n height: ${table.rowHeight.compact.body} !important;\n min-height: ${table.rowHeight.compact.body} !important;\n max-height: ${table.rowHeight.compact.body} !important;\n }\n\n .ds-table.ds-table-size-small .ant-tag {\n margin-inline-end: 0 !important;\n padding: 0 4px !important;\n height: 16px !important;\n line-height: 16px !important;\n font-size: 10px !important;\n border-radius: 2px !important;\n display: inline-flex !important;\n align-items: center !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-thead > tr > th,\n .ds-table.ds-table-size-middle .ant-table-tbody > tr:not(.ant-table-measure-row) > td {\n padding: 0 16px !important;\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-thead > tr > th {\n font-size: ${table.typography.header.fontSize} !important;\n line-height: ${table.typography.header.lineHeight} !important;\n letter-spacing: ${table.typography.header.letterSpacing} !important;\n height: ${table.rowHeight.normal.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-tbody > tr:not(.ant-table-measure-row) > td {\n font-size: ${table.typography.body.fontSize} !important;\n line-height: ${table.typography.body.lineHeight} !important;\n letter-spacing: ${table.typography.body.letterSpacing} !important;\n height: ${table.rowHeight.normal.body} !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-thead > tr > th,\n .ds-table.ds-table-size-large .ant-table-tbody > tr:not(.ant-table-measure-row) > td {\n padding: 0 16px !important;\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-thead > tr > th {\n font-size: 18px !important;\n line-height: 22px !important;\n letter-spacing: -0.036px !important;\n height: 50px !important;\n font-weight: 600 !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-tbody > tr:not(.ant-table-measure-row) > td {\n font-size: 16px !important;\n line-height: 20px !important;\n letter-spacing: -0.016px !important;\n height: 46px !important;\n }\n\n .ds-table .ant-table-thead > tr > th,\n .ds-table .ant-table-thead > tr > th:hover {\n color: ${table.text.body} !important;\n font-weight: ${table.typography.body.fontWeight} !important;\n }\n\n .ds-table .ant-table-thead > tr > th .ant-table-column-title {\n color: inherit !important;\n font-weight: inherit !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters,\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort:hover {\n color: ${table.text.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-title,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ant-table-column-title {\n font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table.ds-table-styleA .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleA .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleA .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAResizable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAResizable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAResizable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table .ds-table-resizable-header-cell {\n position: relative !important;\n }\n\n .ds-table .ds-table-resize-handle {\n position: absolute !important;\n top: 8px !important;\n inset-inline-end: 0 !important;\n bottom: 8px !important;\n width: 12px !important;\n padding: 0 !important;\n border: 0 !important;\n border-radius: 0 !important;\n background: transparent !important;\n cursor: col-resize !important;\n touch-action: none !important;\n z-index: 2 !important;\n }\n\n .ds-table .ds-table-resize-handle::after {\n content: '' !important;\n position: absolute !important;\n top: 0 !important;\n bottom: 0 !important;\n inset-inline-end: 5px !important;\n width: 1px !important;\n background: ${table.border.bodyDivider} !important;\n opacity: 0 !important;\n transition: opacity 120ms ease !important;\n }\n\n .ds-table .ds-table-resizable-header-cell:hover .ds-table-resize-handle::after,\n .ds-table .ds-table-resize-handle:focus-visible::after {\n opacity: 1 !important;\n background: ${table.text.header} !important;\n }\n\n .ds-table .ds-table-resize-handle:focus-visible {\n outline: 2px solid ${table.text.header} !important;\n outline-offset: -2px !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table-fixed-frame {\n display: flex !important;\n flex-direction: column !important;\n width: 100% !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table-fixed-frame > .ds-table.ant-table-wrapper,\n .ds-table-fixed-frame > .ant-table-wrapper {\n flex: 1 1 auto !important;\n min-height: 0 !important;\n }\n\n .ds-table-fixed-frame .ant-table-body {\n overflow-y: auto !important;\n }\n\n .ds-table-fixed-footer {\n flex: 0 0 auto !important;\n min-height: 56px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: flex-end !important;\n padding: 12px 16px !important;\n border-top: 1px solid ${table.border.bodyDivider} !important;\n background: ${table.surface.container} !important;\n box-sizing: border-box !important;\n }\n\n .ds-table-column-visibility-control {\n display: flex !important;\n align-items: center !important;\n gap: 12px !important;\n margin-bottom: 16px !important;\n padding: 12px 0 !important;\n flex-wrap: wrap !important;\n }\n\n .ds-table-control-label {\n font-weight: 600 !important;\n font-size: 14px !important;\n color: ${table.text.body} !important;\n margin: 0 !important;\n }\n\n .ds-table-control-checkboxes {\n display: flex !important;\n gap: 12px !important;\n flex-wrap: wrap !important;\n }\n\n .ds-table-control-checkbox {\n display: inline-flex !important;\n align-items: center !important;\n gap: 6px !important;\n font-size: 14px !important;\n color: ${table.text.body} !important;\n cursor: pointer !important;\n user-select: none !important;\n margin: 0 !important;\n }\n\n .ds-table-control-checkbox input[type='checkbox'] {\n width: 16px !important;\n height: 16px !important;\n cursor: pointer !important;\n margin: 0 !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper {\n height: 26px !important;\n min-height: 26px !important;\n width: 100% !important;\n min-width: 0 !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n border-radius: 4px !important;\n border: 1px solid ${dsSemanticTokens.input.border.default} !important;\n background: ${dsSemanticTokens.input.background.default} !important;\n color: ${dsSemanticTokens.input.text.focus} !important;\n padding: 3px 8px !important;\n font-size: 12px !important;\n line-height: 16px !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input:hover,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper:hover {\n border-color: ${dsSemanticTokens.input.border.hover} !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input:focus,\n .ds-table .ds-table-edit-input.ant-input-focused,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper-focused {\n border-color: ${dsSemanticTokens.input.border.focus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-table.ds-table-styleB {\n background: ${table.surface.layout};\n padding: 0;\n }\n\n .ds-table.ds-table-styleB .ant-table {\n background: ${table.surface.layout} !important;\n }\n\n .ds-table.ds-table-styleB .ant-table-container {\n border: 1px solid ${table.border.container} !important;\n border-radius: ${table.border.radius} !important;\n overflow: hidden !important;\n background: ${table.surface.layout} !important;\n }\n\n .ds-table.ds-table-styleB .ant-table-thead > tr > th {\n border-bottom-width: ${table.border.headerDividerWidth} !important;\n background: ${table.surface.headerDefault} !important;\n }\n\n\n .ds-table.ds-table-styleB.ds-table-header-white .ant-table-thead > tr > th {\n background: ${table.surface.headerWhite} !important;\n }\n `;\n}\n\nexport const Table: React.FC<DSTableProps> = ({\n dsStyle = 'styleA',\n dsHeaderVariant = 'default',\n dsFrozenColumns = 'none',\n dsFrozenBreakpoint = 768,\n dsFrozenColumnWidth = 180,\n dsTruncateCellText = false,\n dsTruncateTooltip = true,\n dsTruncateTooltipDelay = 0.25,\n dsTruncateTooltipSize = 'normal',\n dsTruncateTooltipTitle = 'Title Heading',\n dsEditableColumns = [],\n dsOnEditableDataChange,\n dsCustomizable = false,\n dsVisibleColumns,\n dsOnVisibleColumnsChange,\n dsFixedBodyHeight = 320,\n dsResizableColumns = false,\n dsColumnWidths,\n dsOnColumnWidthsChange,\n dsResizableColumnMinWidth = 96,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth = 180,\n dsResponsive = true,\n dsResponsiveMinColumnWidth = 160,\n dsDensity = 'comfortable',\n dsStickyHeader = false,\n dsStickyOffsetHeader = 0,\n dsRowsPerPageOptions,\n dsAutoSizeColumns = false,\n dsAutoSizeMinWidth = 96,\n dsAutoSizeMaxWidth = 520,\n dsAutoSizeSampleSize = 50,\n dsAutoSizeCellPadding = 32,\n size,\n className,\n columns,\n dataSource,\n pagination,\n ...antProps\n}) => {\n const [isAtOrBelowFrozenBreakpoint, setIsAtOrBelowFrozenBreakpoint] = React.useState(false);\n const [editableData, setEditableData] = React.useState<Record<string, unknown>[]>(\n Array.isArray(dataSource) ? (dataSource as Record<string, unknown>[]) : [],\n );\n const [localVisibleColumns, setLocalVisibleColumns] = React.useState<Set<string>>(() => {\n if (Array.isArray(dsVisibleColumns)) {\n return new Set(dsVisibleColumns.map(String));\n }\n if (columns && Array.isArray(columns)) {\n return new Set(\n columns\n .map((col) => getColumnIdentity(col))\n .filter((id) => Boolean(id)) as string[],\n );\n }\n return new Set();\n });\n const [localColumnWidths, setLocalColumnWidths] = React.useState<DSTableColumnWidths>(() => (\n dsColumnWidths ?? getInitialColumnWidths(columns as any[], dsResizableDefaultColumnWidth)\n ));\n\n useEffect(() => {\n injectStyles();\n ensureTooltipStyles();\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const onResize = () => {\n setIsAtOrBelowFrozenBreakpoint(window.innerWidth <= dsFrozenBreakpoint);\n };\n\n onResize();\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, [dsFrozenBreakpoint]);\n\n useEffect(() => {\n if (dsStyle !== 'styleAEditable') return;\n setEditableData(Array.isArray(dataSource) ? (dataSource as Record<string, unknown>[]) : []);\n }, [dataSource, dsStyle]);\n\n const {\n scroll: antScroll,\n tableLayout: antTableLayout,\n showSorterTooltip: antShowSorterTooltip,\n components: antComponents,\n sticky: antSticky,\n ...restAntProps\n } = antProps;\n const useDSFrozenColumns = dsFrozenColumns !== 'none' && isAtOrBelowFrozenBreakpoint;\n const useEditableVariant = dsStyle === 'styleAEditable';\n const useCustomizableVariant = dsStyle === 'styleACustomizable' && dsCustomizable;\n const useFixedHeaderFooterVariant = dsStyle === 'styleAFixedHeaderFooter';\n const useResizableVariant = dsStyle === 'styleAResizable' || dsResizableColumns;\n const paginationConfig = pagination && typeof pagination === 'object' ? pagination : undefined;\n const resolvedPaginationConfig = React.useMemo(() => {\n if (!paginationConfig) return paginationConfig;\n if (!dsRowsPerPageOptions || dsRowsPerPageOptions.length === 0) return paginationConfig;\n\n return {\n ...paginationConfig,\n pageSizeOptions: paginationConfig.pageSizeOptions ?? dsRowsPerPageOptions,\n showSizeChanger: paginationConfig.showSizeChanger ?? true,\n };\n }, [dsRowsPerPageOptions, paginationConfig]);\n\n const effectiveSize = size ?? (dsDensity === 'compact' ? 'small' : 'middle');\n const [localCurrentPage, setLocalCurrentPage] = React.useState(paginationConfig?.defaultCurrent ?? 1);\n const [localPageSize, setLocalPageSize] = React.useState(paginationConfig?.defaultPageSize ?? paginationConfig?.pageSize ?? 10);\n\n useEffect(() => {\n if (!useCustomizableVariant) return;\n if (Array.isArray(dsVisibleColumns)) {\n setLocalVisibleColumns(new Set(dsVisibleColumns.map(String)));\n }\n }, [dsVisibleColumns, useCustomizableVariant]);\n\n useEffect(() => {\n if (!useResizableVariant) return;\n\n if (dsColumnWidths) {\n setLocalColumnWidths(dsColumnWidths);\n return;\n }\n\n setLocalColumnWidths((prev) => getInitialColumnWidths(columns as any[], dsResizableDefaultColumnWidth, prev));\n }, [columns, dsColumnWidths, dsResizableDefaultColumnWidth, useResizableVariant]);\n\n const handleColumnVisibilityToggle = React.useCallback(\n (colKey: string, visible: boolean) => {\n setLocalVisibleColumns((prev) => {\n const next = new Set(prev);\n if (visible) {\n next.add(colKey);\n } else {\n next.delete(colKey);\n }\n const nextArray = Array.from(next);\n dsOnVisibleColumnsChange?.(nextArray);\n return next;\n });\n },\n [dsOnVisibleColumnsChange],\n );\n const normalizedEditableColumns = React.useMemo(() => {\n if (Array.isArray(dsEditableColumns)) {\n return dsEditableColumns.map(String);\n }\n\n if (typeof dsEditableColumns === 'string') {\n return dsEditableColumns\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n\n if (dsEditableColumns && typeof dsEditableColumns === 'object') {\n return Object.entries(dsEditableColumns)\n .filter(([, enabled]) => Boolean(enabled))\n .map(([key]) => key);\n }\n\n return [] as string[];\n }, [dsEditableColumns]);\n\n const handleEditableCellChange = React.useCallback((rowIndex: number, dataIndex: unknown, nextValue: unknown) => {\n setEditableData((prev) => {\n if (!Array.isArray(prev) || !prev[rowIndex]) {\n return prev;\n }\n\n const nextRows = [...prev];\n const currentRow = nextRows[rowIndex] as Record<string, unknown>;\n nextRows[rowIndex] = setValueByDataIndex(currentRow, dataIndex, nextValue);\n dsOnEditableDataChange?.(nextRows as unknown[] as Record<string, unknown>[]);\n return nextRows;\n });\n }, [dsOnEditableDataChange]);\n\n const handleColumnResize = React.useCallback((columnKey: string, nextWidth: number) => {\n const clampedWidth = clampColumnWidth(nextWidth, dsResizableColumnMinWidth, dsResizableColumnMaxWidth);\n\n setLocalColumnWidths((prev) => {\n const next = { ...prev, [columnKey]: clampedWidth };\n dsOnColumnWidthsChange?.(next);\n return next;\n });\n }, [dsOnColumnWidthsChange, dsResizableColumnMaxWidth, dsResizableColumnMinWidth]);\n\n const columnsWithDSBehavior = React.useMemo(() => {\n const withSortIcons = withDSSortIcons(columns as any[], antShowSorterTooltip);\n const withFrozenColumns = useDSFrozenColumns\n ? withDSFrozenColumns(withSortIcons, dsFrozenColumns, dsFrozenColumnWidth)\n : withSortIcons;\n\n const withVisibilityFilter = useCustomizableVariant\n ? withDSVisibleColumnsFilter(withFrozenColumns, localVisibleColumns)\n : withFrozenColumns;\n\n const editableColumnKeys = new Set(normalizedEditableColumns);\n const withEditableColumns = useEditableVariant\n ? withDSEditableCells(withVisibilityFilter, editableColumnKeys, handleEditableCellChange)\n : withVisibilityFilter;\n\n const autoSizeSource = useEditableVariant\n ? editableData\n : (Array.isArray(dataSource) ? (dataSource as Array<Record<string, unknown>>) : []);\n\n const enabledAutoSizeColumns = normalizeAutoSizeColumnsSelection(dsAutoSizeColumns);\n const useAutoSizeColumns = dsAutoSizeColumns === true || Boolean(enabledAutoSizeColumns?.size);\n\n const withAutoSizedColumns = useAutoSizeColumns\n ? withDSAutoSizedColumns(withEditableColumns, autoSizeSource, {\n minWidth: dsAutoSizeMinWidth,\n maxWidth: dsAutoSizeMaxWidth,\n sampleSize: dsAutoSizeSampleSize,\n cellPadding: dsAutoSizeCellPadding,\n enabledColumnKeys: enabledAutoSizeColumns,\n })\n : withEditableColumns;\n\n const withResizableColumns = useResizableVariant\n ? withDSResizableColumns(\n withAutoSizedColumns,\n localColumnWidths,\n handleColumnResize,\n dsResizableColumnMinWidth,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth,\n )\n : withAutoSizedColumns;\n\n if (!dsTruncateCellText || useEditableVariant) {\n return withResizableColumns;\n }\n\n return withDSTruncatedCells(\n withResizableColumns,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle\n );\n }, [\n columns,\n antShowSorterTooltip,\n dsFrozenColumnWidth,\n dsFrozenColumns,\n dsTruncateCellText,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle,\n normalizedEditableColumns,\n handleEditableCellChange,\n useResizableVariant,\n localColumnWidths,\n handleColumnResize,\n dsResizableColumnMinWidth,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth,\n dsAutoSizeColumns,\n dsAutoSizeMinWidth,\n dsAutoSizeMaxWidth,\n dsAutoSizeSampleSize,\n dsAutoSizeCellPadding,\n useDSFrozenColumns,\n useEditableVariant,\n editableData,\n dataSource,\n localVisibleColumns,\n useCustomizableVariant,\n handleColumnVisibilityToggle,\n ]);\n\n const responsiveScrollX = React.useMemo(\n () => getResponsiveScrollWidth(columnsWithDSBehavior, dsResponsiveMinColumnWidth),\n [columnsWithDSBehavior, dsResponsiveMinColumnWidth],\n );\n\n const applyResponsiveDefaults = React.useCallback((scrollValue: AntTableProps['scroll']) => {\n if (!dsResponsive) {\n return scrollValue;\n }\n\n if (!scrollValue || typeof scrollValue !== 'object') {\n return { x: responsiveScrollX };\n }\n\n return {\n ...scrollValue,\n x: scrollValue.x ?? responsiveScrollX,\n };\n }, [dsResponsive, responsiveScrollX]);\n\n const effectiveScroll = React.useMemo(() => {\n if (useFixedHeaderFooterVariant) {\n const scrollBase = antScroll && typeof antScroll === 'object' ? antScroll : {};\n return applyResponsiveDefaults({\n ...scrollBase,\n y: scrollBase.y ?? dsFixedBodyHeight,\n });\n }\n\n if (useResizableVariant) {\n return applyResponsiveDefaults(antScroll);\n }\n\n if (!useDSFrozenColumns) {\n return applyResponsiveDefaults(antScroll);\n }\n return applyResponsiveDefaults(antScroll);\n }, [antScroll, applyResponsiveDefaults, dsFixedBodyHeight, useDSFrozenColumns, useFixedHeaderFooterVariant, useResizableVariant]);\n\n const effectiveTableLayout = (useEditableVariant || useResizableVariant || dsResponsive) ? (antTableLayout ?? 'fixed') : antTableLayout;\n const effectiveSticky = antSticky ?? (dsStickyHeader ? { offsetHeader: dsStickyOffsetHeader } : undefined);\n const effectiveComponents = React.useMemo(() => {\n if (!useResizableVariant) return antComponents;\n\n return {\n ...antComponents,\n header: {\n ...antComponents?.header,\n cell: DSResizableHeaderCell,\n },\n };\n }, [antComponents, useResizableVariant]);\n\n const fixedPaginationTotal = resolvedPaginationConfig?.total ?? (Array.isArray(dataSource) ? dataSource.length : 0);\n const fixedCurrentPage = resolvedPaginationConfig?.current ?? localCurrentPage;\n const fixedPageSize = resolvedPaginationConfig?.pageSize ?? localPageSize;\n const fixedDataSource = React.useMemo(() => {\n const source = useEditableVariant ? editableData : dataSource;\n if (!useFixedHeaderFooterVariant || !Array.isArray(source)) {\n return source;\n }\n\n if (resolvedPaginationConfig?.total != null && resolvedPaginationConfig.total > source.length) {\n return source;\n }\n\n const start = (fixedCurrentPage - 1) * fixedPageSize;\n return source.slice(start, start + fixedPageSize);\n }, [dataSource, editableData, fixedCurrentPage, fixedPageSize, resolvedPaginationConfig?.total, useEditableVariant, useFixedHeaderFooterVariant]);\n\n const fixedFooterPaginationProps: DSPaginationProps = {\n ...resolvedPaginationConfig,\n current: fixedCurrentPage,\n pageSize: fixedPageSize,\n total: fixedPaginationTotal,\n showSizeChanger: resolvedPaginationConfig?.showSizeChanger ?? false,\n onChange: (page, pageSize) => {\n setLocalCurrentPage(page);\n setLocalPageSize(pageSize);\n resolvedPaginationConfig?.onChange?.(page, pageSize);\n },\n onShowSizeChange: (page, pageSize) => {\n setLocalCurrentPage(page);\n setLocalPageSize(pageSize);\n resolvedPaginationConfig?.onShowSizeChange?.(page, pageSize);\n },\n };\n\n const dsClassName = [\n 'ds-table',\n `ds-table-${dsStyle}`,\n `ds-table-size-${effectiveSize}`,\n dsResponsive ? 'ds-table-responsive' : '',\n dsHeaderVariant === 'white' ? 'ds-table-header-white' : '',\n className || '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const tableElement = (\n <AntTable\n {...restAntProps}\n columns={columnsWithDSBehavior}\n dataSource={fixedDataSource}\n pagination={useFixedHeaderFooterVariant ? false : resolvedPaginationConfig ?? pagination}\n scroll={effectiveScroll}\n tableLayout={effectiveTableLayout}\n components={effectiveComponents}\n size={effectiveSize}\n className={dsClassName}\n sticky={effectiveSticky}\n showSorterTooltip={getDSSorterTooltipProps(antShowSorterTooltip)}\n />\n );\n\n if (useFixedHeaderFooterVariant) {\n return (\n <div className={`${dsClassName} ds-table-fixed-frame`}>\n {tableElement}\n <div className=\"ds-table-fixed-footer\">\n <DSPagination {...fixedFooterPaginationProps} />\n </div>\n </div>\n );\n }\n\n return useCustomizableVariant ? (\n <div className={dsClassName}>\n <DSColumnVisibilityControl\n columns={columns as any[]}\n visibleColumns={localVisibleColumns}\n onToggle={handleColumnVisibilityToggle}\n />\n {tableElement}\n </div>\n ) : (\n tableElement\n );\n};\n\nexport default Table;\n"],"mappings":"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"}