ods-ant 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/{AutoComplete-gOMQxLvY.cjs → AutoComplete-C9LcpBRs.cjs} +3 -3
- package/dist-lib/{AutoComplete-gOMQxLvY.cjs.map → AutoComplete-C9LcpBRs.cjs.map} +1 -1
- package/dist-lib/{AutoComplete-cpf8hCnK.js → AutoComplete-CCYcFqfs.js} +2 -2
- package/dist-lib/{AutoComplete-cpf8hCnK.js.map → AutoComplete-CCYcFqfs.js.map} +1 -1
- package/dist-lib/{DatePicker-DTVtamsX.cjs → DatePicker-CQgt-WoB.cjs} +2 -2
- package/dist-lib/{DatePicker-DTVtamsX.cjs.map → DatePicker-CQgt-WoB.cjs.map} +1 -1
- package/dist-lib/{DatePicker-BpjYibJF.js → DatePicker-LXjOxVN5.js} +87 -33
- package/dist-lib/{DatePicker-BpjYibJF.js.map → DatePicker-LXjOxVN5.js.map} +1 -1
- package/dist-lib/display/Table.cjs +1 -1
- package/dist-lib/display/Table.cjs.map +1 -1
- package/dist-lib/display/Table.js +1 -1
- package/dist-lib/display/Table.js.map +1 -1
- package/dist-lib/forms/AccessibleDatePicker.cjs +1 -1
- package/dist-lib/forms/AccessibleDatePicker.js +1 -1
- package/dist-lib/forms/AutoComplete.cjs +1 -1
- package/dist-lib/forms/AutoComplete.js +1 -1
- package/dist-lib/forms/Button.cjs +2 -2
- package/dist-lib/forms/Button.cjs.map +1 -1
- package/dist-lib/forms/Button.js +24 -48
- package/dist-lib/forms/Button.js.map +1 -1
- package/dist-lib/forms/Cascader.cjs +2 -2
- package/dist-lib/forms/Cascader.js +3 -3
- package/dist-lib/forms/ClearableAutoComplete.cjs +1 -1
- package/dist-lib/forms/ClearableAutoComplete.js +1 -1
- package/dist-lib/forms/ClearableDatePicker.cjs +1 -1
- package/dist-lib/forms/ClearableDatePicker.cjs.map +1 -1
- package/dist-lib/forms/ClearableDatePicker.js +6 -5
- package/dist-lib/forms/ClearableDatePicker.js.map +1 -1
- package/dist-lib/forms/ClearableTransfer.cjs +1 -1
- package/dist-lib/forms/ClearableTransfer.cjs.map +1 -1
- package/dist-lib/forms/ClearableTransfer.js +5 -0
- package/dist-lib/forms/ClearableTransfer.js.map +1 -1
- package/dist-lib/forms/DatePicker.cjs +1 -1
- package/dist-lib/forms/DatePicker.js +1 -1
- package/dist-lib/forms/Select.cjs +1 -1
- package/dist-lib/forms/Select.cjs.map +1 -1
- package/dist-lib/forms/Select.js +45 -43
- package/dist-lib/forms/Select.js.map +1 -1
- package/dist-lib/forms/TreeSelect.cjs +60 -1
- package/dist-lib/forms/TreeSelect.cjs.map +1 -1
- package/dist-lib/forms/TreeSelect.js +148 -36
- package/dist-lib/forms/TreeSelect.js.map +1 -1
- package/dist-lib/forms/index.cjs +1 -1
- package/dist-lib/forms/index.js +2 -2
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/index.js +2 -2
- package/dist-lib/{selectStyles-C8j5Vvgp.js → selectStyles-7f37TvzD.js} +182 -151
- package/dist-lib/selectStyles-7f37TvzD.js.map +1 -0
- package/dist-lib/{selectStyles-BFeXUMpO.cjs → selectStyles-KK5-1q0t.cjs} +180 -149
- package/dist-lib/selectStyles-KK5-1q0t.cjs.map +1 -0
- package/dist-lib/types/ds/accessibility.smoke.test.d.ts +2 -0
- package/dist-lib/types/ds/accessibility.smoke.test.d.ts.map +1 -0
- package/dist-lib/types/ds/forms/Button.d.ts +2 -3
- package/dist-lib/types/ds/forms/Button.d.ts.map +1 -1
- package/dist-lib/types/ds/forms/ClearableDatePicker.d.ts +8 -4
- package/dist-lib/types/ds/forms/ClearableDatePicker.d.ts.map +1 -1
- package/dist-lib/types/ds/forms/ClearableTransfer.d.ts.map +1 -1
- package/dist-lib/types/ds/forms/DatePicker.d.ts +6 -1
- package/dist-lib/types/ds/forms/DatePicker.d.ts.map +1 -1
- package/dist-lib/types/ds/forms/Select.d.ts +4 -1
- package/dist-lib/types/ds/forms/Select.d.ts.map +1 -1
- package/dist-lib/types/ds/forms/TreeSelect.d.ts +1 -1
- package/dist-lib/types/ds/forms/TreeSelect.d.ts.map +1 -1
- package/dist-lib/types/ds/forms/selectStyles.d.ts +1 -0
- package/dist-lib/types/ds/forms/selectStyles.d.ts.map +1 -1
- package/package.json +10 -2
- package/dist-lib/selectStyles-BFeXUMpO.cjs.map +0 -1
- package/dist-lib/selectStyles-C8j5Vvgp.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker-BpjYibJF.js","names":[],"sources":["../src/ds/forms/datePickerStyles.ts","../src/ds/forms/DatePicker.tsx"],"sourcesContent":["import { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { CORE_COLORS } from '../../tokens/core';\n\nconst STYLE_ID = 'ds-date-picker-styles';\n\nexport const DS_PICKER_CLASS = 'ds-date-picker';\nexport const DS_PICKER_PANEL_CLASS = 'ds-date-picker-panel';\n\nexport const mergePickerClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureDatePickerStyles = () => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const { button, input } = dsSemanticTokens;\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\n /* ── Trigger: base ───────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker {\n border-color: ${input.border.default} !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n border-radius: ${input.border.radius} !important;\n background-color: ${input.background.default} !important;\n box-shadow: none !important;\n min-height: ${input.height.middle} !important;\n height: ${input.height.middle} !important;\n padding: 0 ${input.padding.middle.x} !important;\n display: inline-flex !important;\n align-items: center !important;\n width: 100% !important;\n transition: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker:has(.ant-picker-input > input[readonly]:not(:disabled)) {\n background-color: ${input.background.readOnly} !important;\n border-color: ${input.border.default} !important;\n box-shadow: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined {\n border-color: ${input.border.default} !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: sizes ──────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-small {\n min-height: ${input.height.small} !important;\n height: ${input.height.small} !important;\n padding: 0 ${input.padding.small.x} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-large {\n min-height: ${input.height.large} !important;\n height: ${input.height.large} !important;\n padding: 0 ${input.padding.large.x} !important;\n }\n\n /* ── Trigger: hover ──────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker:not(.ant-picker-disabled):hover,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined:not(.ant-picker-disabled):hover {\n border-color: ${input.border.hover} !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: focus / open ───────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused:hover,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused:hover {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker:focus-within,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: status ─────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-error {\n border-color: ${input.border.error} !important;\n box-shadow: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-warning,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-warning {\n border-color: ${CORE_COLORS.status.warning} !important;\n box-shadow: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-success,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-success {\n border-color: ${input.border.success} !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: disabled ───────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled {\n background-color: ${input.background.disabled} !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n /* ── Input text ──────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input {\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n color: ${CORE_COLORS.text.strong} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input::placeholder {\n color: ${input.text.placeholder} !important;\n font-weight: 400 !important;\n opacity: 1 !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-input > input {\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-input > input {\n color: ${input.border.error} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-input > input {\n color: ${input.text.disabled} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input[readonly]:not(:disabled) {\n color: ${input.text.readOnly} !important;\n font-weight: 400 !important;\n }\n\n /* ── Suffix icon ─────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n font-size: 14px !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-suffix .anticon {\n color: ${input.text.disabled} !important;\n }\n\n /* ── Clear button ────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-clear {\n color: ${input.text.default} !important;\n background: ${input.background.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-clear:hover {\n color: ${input.text.focus} !important;\n }\n\n /* ── Calendar panel container ────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel-container {\n border: 1px solid ${input.text.focus} !important;\n border-radius: 4px !important;\n background: ${input.background.default} !important;\n box-shadow: 0 2px 4px color-mix(in srgb, ${CORE_COLORS.text.primary} 30%, transparent) !important;\n overflow: hidden !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel {\n border: 0 !important;\n border-radius: 0 !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-date-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel {\n width: 300px !important;\n padding: 16px !important;\n }\n\n /* ── Panel header ────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header {\n border-bottom: 0 !important;\n padding: 0 0 8px !important;\n color: ${input.text.focus} !important;\n display: flex !important;\n align-items: center !important;\n justify-content: flex-start !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header button {\n color: ${input.text.focus} !important;\n font-size: 14px !important;\n line-height: 18px !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n padding: 0 !important;\n margin: 0 !important;\n border: 0 !important;\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header button:hover {\n color: ${input.border.focus} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view {\n font-size: 16px !important;\n font-weight: 600 !important;\n line-height: 20px !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n color: ${button.primary.default} !important;\n display: inline-flex !important;\n align-items: center !important;\n gap: 2px !important;\n order: 1 !important;\n margin-right: auto !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view *,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button *,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button span {\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button {\n color: ${button.primary.default} !important;\n font-size: 16px !important;\n font-weight: 600 !important;\n line-height: 20px !important;\n letter-spacing: ${button.typography.middle.letterSpacing} !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n cursor: pointer !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:hover {\n color: ${button.primary.hover} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:active,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:focus-visible {\n color: ${button.primary.pressed} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-super-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-super-next-btn {\n display: none !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n width: 14px !important;\n height: 14px !important;\n min-width: 14px !important;\n min-height: 14px !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: ${input.text.focus} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n margin-left: 16px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn {\n order: 2 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n order: 3 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-icon,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-icon {\n width: 14px !important;\n height: 14px !important;\n font-size: 14px !important;\n }\n\n /* ── Day-of-week header row ──────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-content th {\n color: ${input.border.default} !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n text-transform: uppercase !important;\n letter-spacing: 0.48px !important;\n padding: 0 0 8px !important;\n }\n\n /* ── Day cells ───────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-body {\n padding: 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell {\n color: ${CORE_COLORS.text.strong} !important;\n padding: 2px 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-view {\n color: ${CORE_COLORS.text.strong} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-content tr {\n display: table-row !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-content td {\n display: table-cell !important;\n visibility: visible !important;\n opacity: 1 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell .ant-picker-cell-inner {\n font-size: 12px !important;\n font-weight: 400 !important;\n line-height: 16px !important;\n min-width: 28px !important;\n height: 28px !important;\n border-radius: 50% !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n\n /* ── Cell: hover ─────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown\n .ant-picker-cell:not(.ant-picker-cell-selected):not(.ant-picker-cell-disabled):not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end):not(.ant-picker-cell-range-hover):hover\n .ant-picker-cell-inner {\n background: ${CORE_COLORS.semantic.infoBg} !important;\n color: ${input.text.focus} !important;\n }\n\n /* ── Cell: today ─────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-today .ant-picker-cell-inner {\n font-weight: 400 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-today .ant-picker-cell-inner::before {\n border: 1px solid ${CORE_COLORS.text.strong} !important;\n border-radius: 50% !important;\n }\n\n /* ── Cell: selected ──────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner::before {\n border: 0 !important;\n }\n\n /* ── Month / year panel cell selected ────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-selected .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 16px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell .ant-picker-cell-inner {\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n border-radius: 16px !important;\n min-width: 56px !important;\n height: 28px !important;\n padding: 0 8px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-range-hover::before {\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell:hover::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-in-view.ant-picker-cell-in-range::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-in-view.ant-picker-cell-range-hover::before {\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner::before {\n border: 0 !important;\n background: transparent !important;\n }\n\n /* ── Footer ──────────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-footer {\n display: none !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-today-btn {\n color: ${input.border.focus} !important;\n font-size: 14px !important;\n font-weight: 400 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-today-btn:hover {\n color: ${CORE_COLORS.brand.primaryHover} !important;\n }\n\n /* ── Range picker ────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-range .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightBg} !important;\n color: ${CORE_COLORS.text.strong} !important;\n border-radius: 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-range::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end::before {\n background: ${CORE_COLORS.accent.highlightBg} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start.ant-picker-cell-range-hover-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end.ant-picker-cell-range-hover-end .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover-end .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightBg} !important;\n }\n\n `;\n\n};\n","import { DatePicker as AntDatePicker } from 'antd';\nimport type { DatePickerProps } from 'antd';\nimport { useEffect, useId } from 'react';\nimport type { ComponentProps } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { DSFieldShellProps } from './fieldProps';\nimport { joinDescribedByIds } from './fieldProps';\nimport {\n DS_PICKER_CLASS,\n DS_PICKER_PANEL_CLASS,\n ensureDatePickerStyles,\n mergePickerClassNames,\n} from './datePickerStyles';\n\nexport type DSDatePickerProps = DatePickerProps & DSFieldShellProps & {\n onValueChange?: (value: any) => void;\n};\nexport const DS_DATE_FORMAT = 'MM-DD-YYYY';\n\ntype DSRangePickerProps = ComponentProps<typeof AntDatePicker.RangePicker>;\n\nexport const DatePicker = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n fieldLabel,\n fieldRequired,\n fieldDescription,\n fieldError,\n fieldActions,\n containerStyle,\n clear,\n clearable = false,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n id,\n ...props\n}: DSDatePickerProps) => {\n const generatedId = useId();\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const shouldWrapInFieldShell = Boolean(\n fieldLabel ||\n fieldRequired ||\n fieldDescription ||\n fieldError ||\n fieldActions ||\n clearable ||\n clear ||\n onClear,\n );\n const controlId = id ?? (shouldWrapInFieldShell ? generatedId : undefined);\n const descriptionId = controlId ? `${controlId}-description` : undefined;\n const errorId = controlId ? `${controlId}-error` : undefined;\n const clearAction = clear?.onClear ?? onClear;\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DatePickerProps['classNames'];\n\n const resolvedFormat = props.format ?? DS_DATE_FORMAT;\n const resolvedPlaceholder = props.placeholder ?? DS_DATE_FORMAT;\n const describedBy = joinDescribedByIds(\n fieldDescription ? descriptionId : undefined,\n fieldError ? errorId : undefined,\n );\n\n const control = (\n <AntDatePicker\n {...props}\n id={controlId}\n format={resolvedFormat}\n placeholder={resolvedPlaceholder}\n className={mergedClassName}\n classNames={mergedClassNames}\n status={fieldError ? 'error' : props.status}\n aria-describedby={describedBy}\n aria-invalid={fieldError ? true : undefined}\n onChange={(date, dateString) => {\n props.onChange?.(date, dateString);\n onValueChange?.(date);\n }}\n />\n );\n\n if (!shouldWrapInFieldShell) {\n return control;\n }\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={controlId}\n description={fieldDescription}\n descriptionId={descriptionId}\n error={fieldError}\n errorId={errorId}\n clear={clear}\n clearable={clearable}\n clearLabel={clearLabel}\n clearVisibility={clearVisibility}\n clearValue={props.value}\n onClear={() => {\n clearAction?.();\n onValueChange?.(null);\n props.onChange?.(null, '');\n }}\n extraActions={fieldActions}\n style={containerStyle}\n >\n {control}\n </FieldShell>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n\nconst DSRangePicker = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...props\n}: DSRangePickerProps) => {\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DSRangePickerProps['classNames'];\n\n const resolvedFormat = props.format ?? DS_DATE_FORMAT;\n const resolvedPlaceholder = props.placeholder ?? [DS_DATE_FORMAT, DS_DATE_FORMAT];\n\n return (\n <AntDatePicker.RangePicker\n {...props}\n format={resolvedFormat}\n placeholder={resolvedPlaceholder}\n className={mergedClassName}\n classNames={mergedClassNames}\n />\n );\n};\n\nDSRangePicker.displayName = 'DatePicker.RangePicker';\n\n// Forward DS-wrapped sub-component so callers can do const { RangePicker } = DSDatePicker\n(DatePicker as typeof DatePicker & { RangePicker: typeof DSRangePicker }).RangePicker = DSRangePicker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePicker-LXjOxVN5.js","names":[],"sources":["../src/ds/forms/datePickerStyles.ts","../src/ds/forms/DatePicker.tsx"],"sourcesContent":["import { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { CORE_COLORS } from '../../tokens/core';\n\nconst STYLE_ID = 'ds-date-picker-styles';\n\nexport const DS_PICKER_CLASS = 'ds-date-picker';\nexport const DS_PICKER_PANEL_CLASS = 'ds-date-picker-panel';\n\nexport const mergePickerClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureDatePickerStyles = () => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const { button, input } = dsSemanticTokens;\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\n /* ── Trigger: base ───────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker {\n border-color: ${input.border.default} !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n border-radius: ${input.border.radius} !important;\n background-color: ${input.background.default} !important;\n box-shadow: none !important;\n min-height: ${input.height.middle} !important;\n height: ${input.height.middle} !important;\n padding: 0 ${input.padding.middle.x} !important;\n display: inline-flex !important;\n align-items: center !important;\n width: 100% !important;\n transition: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker:has(.ant-picker-input > input[readonly]:not(:disabled)) {\n background-color: ${input.background.readOnly} !important;\n border-color: ${input.border.default} !important;\n box-shadow: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined {\n border-color: ${input.border.default} !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: sizes ──────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-small {\n min-height: ${input.height.small} !important;\n height: ${input.height.small} !important;\n padding: 0 ${input.padding.small.x} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-large {\n min-height: ${input.height.large} !important;\n height: ${input.height.large} !important;\n padding: 0 ${input.padding.large.x} !important;\n }\n\n /* ── Trigger: hover ──────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker:not(.ant-picker-disabled):hover,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined:not(.ant-picker-disabled):hover {\n border-color: ${input.border.hover} !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: focus / open ───────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused:hover,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused:hover {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker:focus-within,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: status ─────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-error {\n border-color: ${input.border.error} !important;\n box-shadow: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-warning,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-warning {\n border-color: ${CORE_COLORS.status.warning} !important;\n box-shadow: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-success,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-success {\n border-color: ${input.border.success} !important;\n box-shadow: none !important;\n }\n\n /* ── Trigger: disabled ───────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled {\n background-color: ${input.background.disabled} !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n /* ── Input text ──────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input {\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n color: ${CORE_COLORS.text.strong} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input::placeholder {\n color: ${input.text.placeholder} !important;\n font-weight: 400 !important;\n opacity: 1 !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-input > input {\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-input > input {\n color: ${input.border.error} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-input > input {\n color: ${input.text.disabled} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input[readonly]:not(:disabled) {\n color: ${input.text.readOnly} !important;\n font-weight: 400 !important;\n }\n\n /* ── Suffix icon ─────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n font-size: 14px !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-suffix .anticon {\n color: ${input.text.disabled} !important;\n }\n\n /* ── Clear button ────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-clear {\n color: ${input.text.default} !important;\n background: ${input.background.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-clear:hover {\n color: ${input.text.focus} !important;\n }\n\n /* ── Calendar panel container ────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel-container {\n border: 1px solid ${input.text.focus} !important;\n border-radius: 4px !important;\n background: ${input.background.default} !important;\n box-shadow: 0 2px 4px color-mix(in srgb, ${CORE_COLORS.text.primary} 30%, transparent) !important;\n overflow: hidden !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel {\n border: 0 !important;\n border-radius: 0 !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-date-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel {\n width: 300px !important;\n padding: 16px !important;\n }\n\n /* ── Panel header ────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header {\n border-bottom: 0 !important;\n padding: 0 0 8px !important;\n color: ${input.text.focus} !important;\n display: flex !important;\n align-items: center !important;\n justify-content: flex-start !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header button {\n color: ${input.text.focus} !important;\n font-size: 14px !important;\n line-height: 18px !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n padding: 0 !important;\n margin: 0 !important;\n border: 0 !important;\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header button:hover {\n color: ${input.border.focus} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view {\n font-size: 16px !important;\n font-weight: 600 !important;\n line-height: 20px !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n color: ${button.primary.default} !important;\n display: inline-flex !important;\n align-items: center !important;\n gap: 2px !important;\n order: 1 !important;\n margin-right: auto !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view *,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button *,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button span {\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button {\n color: ${button.primary.default} !important;\n font-size: 16px !important;\n font-weight: 600 !important;\n line-height: 20px !important;\n letter-spacing: ${button.typography.middle.letterSpacing} !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n cursor: pointer !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:hover {\n color: ${button.primary.hover} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:active,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:focus-visible {\n color: ${button.primary.pressed} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-super-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-super-next-btn {\n display: none !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n width: 14px !important;\n height: 14px !important;\n min-width: 14px !important;\n min-height: 14px !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: ${input.text.focus} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n margin-left: 16px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn {\n order: 2 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n order: 3 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-icon,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-icon {\n width: 14px !important;\n height: 14px !important;\n font-size: 14px !important;\n }\n\n /* ── Day-of-week header row ──────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-content th {\n color: ${input.border.default} !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n text-transform: uppercase !important;\n letter-spacing: 0.48px !important;\n padding: 0 0 8px !important;\n }\n\n /* ── Day cells ───────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-body {\n padding: 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell {\n color: ${CORE_COLORS.text.strong} !important;\n padding: 2px 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-view {\n color: ${CORE_COLORS.text.strong} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-content tr {\n display: table-row !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-content td {\n display: table-cell !important;\n visibility: visible !important;\n opacity: 1 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell .ant-picker-cell-inner {\n font-size: 12px !important;\n font-weight: 400 !important;\n line-height: 16px !important;\n min-width: 28px !important;\n height: 28px !important;\n border-radius: 50% !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n\n /* ── Cell: hover ─────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown\n .ant-picker-cell:not(.ant-picker-cell-selected):not(.ant-picker-cell-disabled):not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end):not(.ant-picker-cell-range-hover):hover\n .ant-picker-cell-inner {\n background: ${CORE_COLORS.semantic.infoBg} !important;\n color: ${input.text.focus} !important;\n }\n\n /* ── Cell: today ─────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-today .ant-picker-cell-inner {\n font-weight: 400 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-today .ant-picker-cell-inner::before {\n border: 1px solid ${CORE_COLORS.text.strong} !important;\n border-radius: 50% !important;\n }\n\n /* ── Cell: selected ──────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner::before {\n border: 0 !important;\n }\n\n /* ── Month / year panel cell selected ────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-selected .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 16px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell .ant-picker-cell-inner {\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n border-radius: 16px !important;\n min-width: 56px !important;\n height: 28px !important;\n padding: 0 8px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-range-hover::before {\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell:hover::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-in-view.ant-picker-cell-in-range::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-in-view.ant-picker-cell-range-hover::before {\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner::before {\n border: 0 !important;\n background: transparent !important;\n }\n\n /* ── Footer ──────────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-footer {\n display: none !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-today-btn {\n color: ${input.border.focus} !important;\n font-size: 14px !important;\n font-weight: 400 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-today-btn:hover {\n color: ${CORE_COLORS.brand.primaryHover} !important;\n }\n\n /* ── Range picker ────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-range .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightBg} !important;\n color: ${CORE_COLORS.text.strong} !important;\n border-radius: 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-range::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end::before {\n background: ${CORE_COLORS.accent.highlightBg} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start.ant-picker-cell-range-hover-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end.ant-picker-cell-range-hover-end .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 700 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover-end .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover .ant-picker-cell-inner {\n background: ${CORE_COLORS.accent.highlightBg} !important;\n }\n\n `;\n\n};\n","import { DatePicker as AntDatePicker } from 'antd';\nimport type { DatePickerProps } from 'antd';\nimport { useEffect, useId } from 'react';\nimport type { ChangeEvent, ComponentProps, InputHTMLAttributes, KeyboardEvent } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { DSFieldShellProps } from './fieldProps';\nimport { joinDescribedByIds } from './fieldProps';\nimport {\n DS_PICKER_CLASS,\n DS_PICKER_PANEL_CLASS,\n ensureDatePickerStyles,\n mergePickerClassNames,\n} from './datePickerStyles';\n\nexport type DSDateSeparator = '/' | '-';\n\nexport type DSDatePickerProps = DatePickerProps & DSFieldShellProps & {\n onValueChange?: (value: any) => void;\n /** Enable numeric-only input with auto-inserted date separator. Only applies to single date picker. Default: true. */\n dsMaskEnabled?: boolean;\n /** Separator character inserted between MM, DD, and YYYY segments. Also sets the resolved format. Default: '-'. */\n dsMaskSeparator?: DSDateSeparator;\n};\nexport const DS_DATE_FORMAT = 'MM-DD-YYYY';\n\n// ── Input masking helpers ───────────────────────────────────────────────────\n\nfunction applyDateMask(raw: string, sep: DSDateSeparator): string {\n const digits = raw.replace(/\\D/g, '').slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}${sep}${digits.slice(2)}`;\n return `${digits.slice(0, 2)}${sep}${digits.slice(2, 4)}${sep}${digits.slice(4)}`;\n}\n\nconst MASK_CONTROL_KEYS = new Set([\n 'Backspace', 'Delete', 'Tab', 'Enter', 'Escape',\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Home', 'End',\n]);\n\nfunction makeMaskedDateInput(sep: DSDateSeparator) {\n function MaskedDateInput({ onKeyDown, onChange, ...rest }: InputHTMLAttributes<HTMLInputElement>) {\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (!MASK_CONTROL_KEYS.has(e.key) && !/^\\d$/.test(e.key) && !e.ctrlKey && !e.metaKey) {\n e.preventDefault();\n }\n onKeyDown?.(e);\n };\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const { value, selectionStart } = e.target;\n const isAppending = selectionStart == null || selectionStart === value.length;\n if (!isAppending) {\n onChange?.(e);\n return;\n }\n const masked = applyDateMask(value, sep);\n if (masked === value) {\n onChange?.(e);\n return;\n }\n // Provide a patched event so Ant reads the masked value from e.target.value\n const patchedEvent = Object.create(e) as ChangeEvent<HTMLInputElement>;\n Object.defineProperty(patchedEvent, 'target', {\n configurable: true,\n get: () => ({ ...e.target, value: masked }),\n });\n onChange?.(patchedEvent);\n };\n\n return <input {...rest} onKeyDown={handleKeyDown} onChange={handleChange} />;\n }\n MaskedDateInput.displayName = `MaskedDateInput(${sep})`;\n return MaskedDateInput;\n}\n\n// Stable module-level references – prevents component identity changes across renders\nconst MASKED_INPUT_DASH = makeMaskedDateInput('-');\nconst MASKED_INPUT_SLASH = makeMaskedDateInput('/');\n\ntype DSRangePickerProps = ComponentProps<typeof AntDatePicker.RangePicker>;\n\nexport const DatePicker = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n fieldLabel,\n fieldRequired,\n fieldDescription,\n fieldError,\n fieldActions,\n containerStyle,\n clear,\n clearable = false,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n dsMaskEnabled = true,\n dsMaskSeparator = '-',\n id,\n ...props\n}: DSDatePickerProps) => {\n const generatedId = useId();\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const shouldWrapInFieldShell = Boolean(\n fieldLabel ||\n fieldRequired ||\n fieldDescription ||\n fieldError ||\n fieldActions ||\n clearable ||\n clear ||\n onClear,\n );\n const controlId = id ?? (shouldWrapInFieldShell ? generatedId : undefined);\n const descriptionId = controlId ? `${controlId}-description` : undefined;\n const errorId = controlId ? `${controlId}-error` : undefined;\n const clearAction = clear?.onClear ?? onClear;\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DatePickerProps['classNames'];\n\n const isSingleDatePicker = !props.picker || props.picker === 'date';\n const shouldMask = dsMaskEnabled && isSingleDatePicker && !props.multiple && !props.inputReadOnly;\n const resolvedSep = dsMaskSeparator;\n const resolvedFormat = props.format ?? `MM${resolvedSep}DD${resolvedSep}YYYY`;\n const resolvedPlaceholder = props.placeholder ?? `MM${resolvedSep}DD${resolvedSep}YYYY`;\n const maskedInput = shouldMask ? (resolvedSep === '/' ? MASKED_INPUT_SLASH : MASKED_INPUT_DASH) : undefined;\n // Only inject masked input when the caller has not supplied their own input override\n const resolvedComponents = maskedInput && !(props.components as any)?.input\n ? { ...props.components, input: maskedInput }\n : props.components;\n const describedBy = joinDescribedByIds(\n fieldDescription ? descriptionId : undefined,\n fieldError ? errorId : undefined,\n );\n\n const control = (\n <AntDatePicker\n {...props}\n id={controlId}\n format={resolvedFormat}\n placeholder={resolvedPlaceholder}\n className={mergedClassName}\n classNames={mergedClassNames}\n components={resolvedComponents}\n status={fieldError ? 'error' : props.status}\n aria-describedby={describedBy}\n aria-invalid={fieldError ? true : undefined}\n onChange={(date, dateString) => {\n props.onChange?.(date, dateString);\n onValueChange?.(date);\n }}\n />\n );\n\n if (!shouldWrapInFieldShell) {\n return control;\n }\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={controlId}\n description={fieldDescription}\n descriptionId={descriptionId}\n error={fieldError}\n errorId={errorId}\n clear={clear}\n clearable={clearable}\n clearLabel={clearLabel}\n clearVisibility={clearVisibility}\n clearValue={props.value}\n onClear={() => {\n clearAction?.();\n onValueChange?.(null);\n props.onChange?.(null, '');\n }}\n extraActions={fieldActions}\n style={containerStyle}\n >\n {control}\n </FieldShell>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n\nconst DSRangePicker = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...props\n}: DSRangePickerProps) => {\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DSRangePickerProps['classNames'];\n\n const resolvedFormat = props.format ?? DS_DATE_FORMAT;\n const resolvedPlaceholder = props.placeholder ?? [DS_DATE_FORMAT, DS_DATE_FORMAT];\n\n return (\n <AntDatePicker.RangePicker\n {...props}\n format={resolvedFormat}\n placeholder={resolvedPlaceholder}\n className={mergedClassName}\n classNames={mergedClassNames}\n />\n );\n};\n\nDSRangePicker.displayName = 'DatePicker.RangePicker';\n\n// Forward DS-wrapped sub-component so callers can do const { RangePicker } = DSDatePicker\n(DatePicker as typeof DatePicker & { RangePicker: typeof DSRangePicker }).RangePicker = DSRangePicker;\n"],"mappings":"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"}
|
|
@@ -187,7 +187,7 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
|
|
|
187
187
|
padding: ${e.padding.compact.body} !important;
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
.ds-table.ds-table-size-small .ant-table-tbody > tr {
|
|
190
|
+
.ds-table.ds-table-size-small .ant-table-tbody > tr:not(.ant-table-measure-row) {
|
|
191
191
|
height: ${e.rowHeight.compact.body} !important;
|
|
192
192
|
min-height: ${e.rowHeight.compact.body} !important;
|
|
193
193
|
max-height: ${e.rowHeight.compact.body} !important;
|
|
@@ -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>;\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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"}
|
|
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:not(.ant-table-measure-row) {\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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"}
|
|
@@ -523,7 +523,7 @@ function fe() {
|
|
|
523
523
|
padding: ${t.padding.compact.body} !important;
|
|
524
524
|
}
|
|
525
525
|
|
|
526
|
-
.ds-table.ds-table-size-small .ant-table-tbody > tr {
|
|
526
|
+
.ds-table.ds-table-size-small .ant-table-tbody > tr:not(.ant-table-measure-row) {
|
|
527
527
|
height: ${t.rowHeight.compact.body} !important;
|
|
528
528
|
min-height: ${t.rowHeight.compact.body} !important;
|
|
529
529
|
max-height: ${t.rowHeight.compact.body} !important;
|