@lax-wp/design-system 0.14.37 → 0.14.38
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/components/data-display/infinite-table/CellContextMenuPortal.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js +75 -75
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js +32 -33
- package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/copy-text.cjs.js +1 -2
- package/dist/components/data-display/infinite-table/copy-text.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/copy-text.d.ts +5 -5
- package/dist/components/data-display/infinite-table/copy-text.es.js +52 -15
- package/dist/components/data-display/infinite-table/copy-text.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/types.d.ts +2 -4
- package/package.json +1 -1
|
@@ -10,10 +10,10 @@ import x from "../../../../../_virtual/index.es.js";
|
|
|
10
10
|
import g, { useContext as Xe, useCallback as C, useState as D, useRef as Q, useEffect as v } from "react";
|
|
11
11
|
import { Link as qe } from "react-router-dom";
|
|
12
12
|
import { TableContext as Je } from "../../context.es.js";
|
|
13
|
-
import {
|
|
14
|
-
import { InlineEditField as
|
|
15
|
-
import { CELL_DEFAULT_RIGHT_OFFSET as
|
|
16
|
-
import { LoadingSpinnerIcon as P, KeyboardArrowDownIcon as
|
|
13
|
+
import { getCellText as Qe } from "../../copy-text.es.js";
|
|
14
|
+
import { InlineEditField as Ze } from "./InlineEditField.es.js";
|
|
15
|
+
import { CELL_DEFAULT_RIGHT_OFFSET as Pe, CELL_INDENT_PER_LEVEL_PX as Z, CELL_STICKY_SHADOW_DARK as Ee, CELL_STICKY_SHADOW_LIGHT as eo } from "../../constants.es.js";
|
|
16
|
+
import { LoadingSpinnerIcon as P, KeyboardArrowDownIcon as oo, KeyboardArrowRightFilledIcon as to, LinkIcon as ro } from "../../../../icon/icons.generated.es.js";
|
|
17
17
|
let E;
|
|
18
18
|
const fe = (e) => {
|
|
19
19
|
const o = Number(e);
|
|
@@ -32,7 +32,7 @@ const fe = (e) => {
|
|
|
32
32
|
return `${p}m ${d}s`;
|
|
33
33
|
}
|
|
34
34
|
return o >= 1e3 ? `${(o / 1e3).toFixed(2)}s` : `${o}ms`;
|
|
35
|
-
},
|
|
35
|
+
}, ao = ({ children: e, withLink: o, linkTo: p, rowData: d, disableRowClick: u }) => o && !u ? /* @__PURE__ */ r(qe, { to: p?.(d?.id, d) || "", children: e }) : e, no = ({
|
|
36
36
|
cell: e,
|
|
37
37
|
id: o,
|
|
38
38
|
nextWidthSum: p,
|
|
@@ -43,10 +43,10 @@ const fe = (e) => {
|
|
|
43
43
|
handleCellClick: we,
|
|
44
44
|
currentData: y,
|
|
45
45
|
highlightSubstring: S,
|
|
46
|
-
is_read:
|
|
46
|
+
is_read: so,
|
|
47
47
|
is_modified: ee,
|
|
48
48
|
is_row_modified: oe,
|
|
49
|
-
is_deleted:
|
|
49
|
+
is_deleted: R,
|
|
50
50
|
is_added: z,
|
|
51
51
|
level: b,
|
|
52
52
|
inlineEditing: k,
|
|
@@ -59,7 +59,7 @@ const fe = (e) => {
|
|
|
59
59
|
loadingExpand: ke,
|
|
60
60
|
toggleRowExpand: te,
|
|
61
61
|
isDraggingOver: xe,
|
|
62
|
-
isLoading:
|
|
62
|
+
isLoading: V,
|
|
63
63
|
is_incomplete: re,
|
|
64
64
|
pendingEdit: s,
|
|
65
65
|
hasPendingEdit: i,
|
|
@@ -69,7 +69,7 @@ const fe = (e) => {
|
|
|
69
69
|
cascadingTableConfig: ae,
|
|
70
70
|
originalsOnly: Ce,
|
|
71
71
|
maxLevel: ge,
|
|
72
|
-
showNewItem:
|
|
72
|
+
showNewItem: uo,
|
|
73
73
|
expandedRows: _e,
|
|
74
74
|
rowLinkConfig: F,
|
|
75
75
|
multiSelectConfig: Ne,
|
|
@@ -81,7 +81,7 @@ const fe = (e) => {
|
|
|
81
81
|
selectedRowId: j,
|
|
82
82
|
cellContextMenuConfig: W,
|
|
83
83
|
openCellContextMenu: U
|
|
84
|
-
} = Xe(Je), $e = j != null && String(j) === String(o), De = Be(), Y = (e?.column?.key ? e?.row?.original?.__cellMetadata?.[e.column.key] : void 0)?.is_locked ?? e?.column?.is_locked, B = (e?.column?.key ? Me?.[o]?.[e.column.key]?.validationError : null) || Te || null,
|
|
84
|
+
} = Xe(Je), $e = j != null && String(j) === String(o), De = Be(), Y = (e?.column?.key ? e?.row?.original?.__cellMetadata?.[e.column.key] : void 0)?.is_locked ?? e?.column?.is_locked, B = (e?.column?.key ? Me?.[o]?.[e.column.key]?.validationError : null) || Te || null, I = k === e.column.key && e?.column?.canEdit && !Y && !e?.column?.is_disabled, Se = Le === `${o}-${e?.column?.id}`, { theme: Oe } = Ue(), Ve = Oe === "dark", Ie = C(() => O(o), [O, o]), Re = C(() => O(null), [O]), _ = De?.formatDuration, [n, f] = D(
|
|
85
85
|
e?.column?.dataType === "duration" && e?.value ? _ ? _(e.value) : fe(e.value) : e.value
|
|
86
86
|
), [w, se] = D(null), [G, ze] = D(!1), [Fe, ue] = D(!1), [Ke, ie] = D(!1), N = Q(null), L = Q(), M = Q(), { selectedColumnIds: le = [] } = Ne || {}, ce = !Object.prototype.hasOwnProperty.call(e?.column?.meta ?? {}, "shouldHighlight") || e?.column?.meta?.shouldHighlight, me = C(() => {
|
|
87
87
|
N.current && ze(N.current.scrollWidth > N.current.clientWidth);
|
|
@@ -91,34 +91,33 @@ const fe = (e) => {
|
|
|
91
91
|
M.current && clearTimeout(M.current), t ? ie(!0) : M.current = setTimeout(() => ie(!1), 200);
|
|
92
92
|
}, []), T = x({
|
|
93
93
|
"bg-amber-100 dark:bg-amber-900/30": i,
|
|
94
|
-
"bg-neutral-100 dark:bg-black-600": u === o && !l && !i && !(
|
|
95
|
-
"bg-error-200 dark:bg-error-900": u === o && !l && !i && (
|
|
94
|
+
"bg-neutral-100 dark:bg-black-600": u === o && !l && !i && !(R || y?.is_deleted) && !(z || y?.is_added),
|
|
95
|
+
"bg-error-200 dark:bg-error-900": u === o && !l && !i && (R || y?.is_deleted),
|
|
96
96
|
"bg-success-100 dark:bg-success-800": u === o && !l && !i && (z || y?.is_added),
|
|
97
97
|
"bg-warning-100 dark:bg-warning-950": u === o && !l && !i && (re || ee || oe || y?.is_row_modified),
|
|
98
98
|
// 'bg-primary-50 dark:bg-black-700': !is_incomplete && !is_read && showNewItem && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,
|
|
99
|
-
"bg-warning-50 dark:bg-orange-900": (re || ee || oe || y?.is_row_modified) && !
|
|
100
|
-
"bg-error-100 dark:bg-error-975": (
|
|
101
|
-
"bg-success-50 dark:bg-success-900": (z || y?.is_added) && !
|
|
99
|
+
"bg-warning-50 dark:bg-orange-900": (re || ee || oe || y?.is_row_modified) && !V && u !== o && !l && !i,
|
|
100
|
+
"bg-error-100 dark:bg-error-975": (R || y?.is_deleted) && !V && u !== o && !l && !i,
|
|
101
|
+
"bg-success-50 dark:bg-success-900": (z || y?.is_added) && !V && u !== o && !l && !i,
|
|
102
102
|
"bg-primary-50 dark:bg-primary-900": (xe || l) && !i,
|
|
103
103
|
"bg-primary-50 dark:bg-primary-800": le?.includes(e.column.id) && !l && !i,
|
|
104
|
-
"bg-primary-50 dark:bg-primary-700": $e && u !== o && !l && !i && !
|
|
104
|
+
"bg-primary-50 dark:bg-primary-700": $e && u !== o && !l && !i && !V,
|
|
105
105
|
[Ye[e?.row?.original?.__rowBgStatus]]: e?.row?.original?.__rowBgStatus && !l && !i
|
|
106
106
|
}), Ae = (t) => {
|
|
107
107
|
e.column?.disableRowClick || we(t);
|
|
108
108
|
}, je = C((t) => {
|
|
109
|
-
if (W?.isEnabled === !1 || !U ||
|
|
109
|
+
if (W?.isEnabled === !1 || !U || I) return;
|
|
110
110
|
const a = {
|
|
111
111
|
rowId: o,
|
|
112
112
|
rowData: e?.row?.original ?? {},
|
|
113
113
|
columnKey: e?.column?.key ?? "",
|
|
114
114
|
column: e.column,
|
|
115
115
|
value: e?.value,
|
|
116
|
-
text:
|
|
117
|
-
rowText: Qe(t.currentTarget),
|
|
116
|
+
text: Qe(n, e?.value, t.currentTarget),
|
|
118
117
|
cell: e
|
|
119
118
|
};
|
|
120
119
|
W?.isDisabledForCell?.(a) || (t.preventDefault(), t.stopPropagation(), U({ x: t.clientX, y: t.clientY, target: a }));
|
|
121
|
-
}, [W, U,
|
|
120
|
+
}, [W, U, I, o, e, n]);
|
|
122
121
|
v(() => (e?.row?.original?.status === "running" && e.column?.dataType === "duration" && (E = setInterval(() => {
|
|
123
122
|
const a = new Date(q(e?.row?.original?.created_at || e?.row?.original?.executed_on, { withTime: !0, format: "yyyy-MM-dd HH:mm:ss" })), m = Math.abs((/* @__PURE__ */ new Date()).getTime() - new Date(a).getTime());
|
|
124
123
|
f(_ ? _(m) : fe(m));
|
|
@@ -174,21 +173,21 @@ const fe = (e) => {
|
|
|
174
173
|
"overflow-x-hidden overflow-y-visible": k !== e.column.key && c,
|
|
175
174
|
"overflow-hidden": k !== e.column.key && !c
|
|
176
175
|
},
|
|
177
|
-
B && !
|
|
176
|
+
B && !I ? "outline outline-2 outline-error-500 -outline-offset-2 z-[5]" : "",
|
|
178
177
|
`${T || "bg-white dark:bg-black-800"}`
|
|
179
178
|
),
|
|
180
|
-
style: { minWidth: `${e.column.width}px`, maxWidth: `${e.column.width}px`, right: e?.column?.sticky ? `${p}px` :
|
|
181
|
-
onMouseEnter:
|
|
182
|
-
onMouseLeave:
|
|
179
|
+
style: { minWidth: `${e.column.width}px`, maxWidth: `${e.column.width}px`, right: e?.column?.sticky ? `${p}px` : Pe, paddingLeft: b > 0 && h === 0 ? `${b * Z}px` : void 0 },
|
|
180
|
+
onMouseEnter: Ie,
|
|
181
|
+
onMouseLeave: Re,
|
|
183
182
|
onContextMenu: je,
|
|
184
183
|
children: [
|
|
185
|
-
/* @__PURE__ */ r(
|
|
184
|
+
/* @__PURE__ */ r(ao, { withLink: F?.isEnabled, linkTo: F?.linkTo || void 0, rowData: e?.row?.original, disableRowClick: e?.column?.disableRowClick, children: (Array.isArray(K) ? K.includes(`${o}-${e?.column?.id}`) : K === `${o}-${e?.column?.id}`) ? /* @__PURE__ */ $("div", { className: "h-row top-0 font-medium font-inter w-full absolute flex items-center px-4", children: [
|
|
186
185
|
/* @__PURE__ */ r("span", { className: "text-neutral-400 dark:text-black-400 truncate", children: (() => {
|
|
187
186
|
const t = `${o}-${e?.column?.id}`, a = typeof A == "object" ? A?.[t] : A, m = e?.column?.type?.toLowerCase();
|
|
188
187
|
return m === "boolean" ? a === !0 || a === "true" || a === "True" ? "Yes" : "No" : (m === "date" || m === "datetime") && a ? q(a, { withTime: m === "datetime", skipTimezone: !0 }) || String(a) : a != null ? String(a) : n;
|
|
189
188
|
})() }),
|
|
190
189
|
/* @__PURE__ */ r("div", { className: "ml-2 flex items-center gap-1.5", children: /* @__PURE__ */ r(P, { className: "spinner text-neutral-600 dark:text-white", size: 12 }) })
|
|
191
|
-
] }) : k === e.column.key && e?.column?.canEdit && !Y && !e?.column?.is_disabled ? /* @__PURE__ */ r("div", { className: "h-row w-full absolute top-0 left-0 flex items-center", style: { marginLeft: b > 0 && h === 0 ? `-${b * Z}px` : void 0, width: b > 0 && h === 0 ? `calc(100% + ${b * Z}px)` : "100%" }, children: /* @__PURE__ */ r(
|
|
190
|
+
] }) : k === e.column.key && e?.column?.canEdit && !Y && !e?.column?.is_disabled ? /* @__PURE__ */ r("div", { className: "h-row w-full absolute top-0 left-0 flex items-center", style: { marginLeft: b > 0 && h === 0 ? `-${b * Z}px` : void 0, width: b > 0 && h === 0 ? `calc(100% + ${b * Z}px)` : "100%" }, children: /* @__PURE__ */ r(Ze, { cell: e, id: o, inlineEditing: k, cellRef: ye, handleCellValueChange: he, handleUpdateCellData: be, registerValidation: ve }) }) : /* @__PURE__ */ $(We, { children: [
|
|
192
191
|
b > 0 && h === 0 && /* @__PURE__ */ r("div", { className: "h-row border-l border-neutral-300 dark:border-black-600 ml-2" }),
|
|
193
192
|
/* @__PURE__ */ r("div", { className: "min-h-6", children: /* @__PURE__ */ r(
|
|
194
193
|
J,
|
|
@@ -201,18 +200,18 @@ const fe = (e) => {
|
|
|
201
200
|
"div",
|
|
202
201
|
{
|
|
203
202
|
className: x(`h-row top-0 font-medium font-inter overflow-index-auto whitespace-nowrap text-ellipsis dark:text-black-200 w-full absolute flex items-center ${T || "bg-white dark:bg-black-800"}`, c ? "overflow-x-hidden overflow-y-visible" : "overflow-x-hidden", { "border border-b-0 border-t-0 border-primary-600 dark:border-blue-800": le?.includes(e.column.id) }),
|
|
204
|
-
style: e?.column?.sticky && pe ? { boxShadow:
|
|
203
|
+
style: e?.column?.sticky && pe ? { boxShadow: Ve ? Ee : eo } : {},
|
|
205
204
|
children: [
|
|
206
|
-
ae?.isCascading && !Ce && h === 0 && /* @__PURE__ */ r("div", { className: x("w-[22px] h-row flex items-center px-4", `${T || "bg-white dark:bg-black-800"}`), id: "cascading", children: ge > b && (e?.row?.original?.__has_children || ae?.showAllDropdown) && /* @__PURE__ */ r("div", { children: ke ? /* @__PURE__ */ r(P, { className: "text-neutral-600 dark:text-white", size: 8 }) : /* @__PURE__ */ r("div", { children: _e?.[o]?.isOpen ? /* @__PURE__ */ r(
|
|
205
|
+
ae?.isCascading && !Ce && h === 0 && /* @__PURE__ */ r("div", { className: x("w-[22px] h-row flex items-center px-4", `${T || "bg-white dark:bg-black-800"}`), id: "cascading", children: ge > b && (e?.row?.original?.__has_children || ae?.showAllDropdown) && /* @__PURE__ */ r("div", { children: ke ? /* @__PURE__ */ r(P, { className: "text-neutral-600 dark:text-white", size: 8 }) : /* @__PURE__ */ r("div", { children: _e?.[o]?.isOpen ? /* @__PURE__ */ r(oo, { size: 20, className: "text-neutral-400 dark:text-neutral-400", onClick: (t) => {
|
|
207
206
|
te(), t.stopPropagation();
|
|
208
|
-
} }) : /* @__PURE__ */ r(
|
|
207
|
+
} }) : /* @__PURE__ */ r(to, { size: 20, className: "text-neutral-400 dark:text-neutral-400", onClick: (t) => {
|
|
209
208
|
te(), t.stopPropagation();
|
|
210
209
|
} }) }) }) }),
|
|
211
210
|
e?.column?.type?.toLowerCase() === "url" && w ? /* @__PURE__ */ r(
|
|
212
211
|
J,
|
|
213
212
|
{
|
|
214
213
|
title: /* @__PURE__ */ r("div", { onMouseEnter: () => H(!0), onMouseLeave: () => H(!1), children: /* @__PURE__ */ r("a", { href: w, target: "_blank", rel: "noopener noreferrer", onClick: (t) => t.stopPropagation(), children: /* @__PURE__ */ $("div", { className: "flex gap-1 items-center w-full", children: [
|
|
215
|
-
/* @__PURE__ */ r("div", { className: "w-4 h-4", children: /* @__PURE__ */ r(
|
|
214
|
+
/* @__PURE__ */ r("div", { className: "w-4 h-4", children: /* @__PURE__ */ r(ro, { height: 16, width: 16 }) }),
|
|
216
215
|
/* @__PURE__ */ r(Ge, { variant: "medium", size: "small", className: "truncate", appearance: "custom", children: w }),
|
|
217
216
|
/* @__PURE__ */ r(He, { sx: { height: "16px", width: "16px", color: "#016DCF" } })
|
|
218
217
|
] }) }) }),
|
|
@@ -261,14 +260,14 @@ const fe = (e) => {
|
|
|
261
260
|
}
|
|
262
261
|
) })
|
|
263
262
|
] }) }),
|
|
264
|
-
B && !
|
|
263
|
+
B && !I && /* @__PURE__ */ r("div", { className: "absolute bottom-0 left-0 right-0 h-row flex items-end pointer-events-none z-[5]", children: /* @__PURE__ */ r("div", { className: "w-full bg-error-50 dark:bg-error-975 px-1.5 py-0.5 truncate", children: /* @__PURE__ */ r("span", { className: "text-error-600 text-2xs font-medium leading-none", children: B }) }) }),
|
|
265
264
|
Se && !(k === e.column.key && e?.column?.canEdit && !Y && !e?.column?.is_disabled) && /* @__PURE__ */ r("div", { className: "absolute top-0 right-0 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-10", children: /* @__PURE__ */ r(P, { className: "text-primary-600 dark:text-white", size: 8 }) })
|
|
266
265
|
]
|
|
267
266
|
},
|
|
268
267
|
h
|
|
269
268
|
);
|
|
270
|
-
},
|
|
269
|
+
}, Lo = g.memo(no);
|
|
271
270
|
export {
|
|
272
|
-
|
|
271
|
+
Lo as DataCell
|
|
273
272
|
};
|
|
274
273
|
//# sourceMappingURL=DataCell.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataCell.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/DataCell.tsx"],"sourcesContent":["import { useTheme } from '../../../../../hooks/useTheme';\nimport { formatCurrency } from '../../../../../utils/formatters';\nimport { formatDate } from '../../../../../utils/formatters';\nimport { getTableRowBgClassNamesByStatus } from '../../../../../constants/table';\nimport type { ICell, ICellContextMenuTarget, IPendingEdit, ValidateAndSaveResult } from '../../types';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\nimport Tooltip from '../../../../tooltip/Tooltip';\nimport { Typography } from '../../../../data-display/typography/Typography';\nimport { KeyboardArrowDownIcon, KeyboardArrowRightFilledIcon, LinkIcon, LoadingSpinnerIcon } from '../../../../icon';\nimport { OpenInNewRounded } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { TableContext } from '../../context';\nimport { getCellText, getRowText } from '../../copy-text';\nimport { InlineEditField } from './InlineEditField';\nimport { CELL_DEFAULT_RIGHT_OFFSET, CELL_INDENT_PER_LEVEL_PX, CELL_STICKY_SHADOW_DARK, CELL_STICKY_SHADOW_LIGHT } from '../../constants';\n\ntype CellProps = {\n cell: ICell;\n id: string | number;\n nextWidthSum: number;\n isLastCell: boolean;\n rowHovering: string | number | null;\n index: number;\n isFirstStickyCell: boolean;\n handleCellClick: (e?: React.MouseEvent) => void | null;\n currentData: { is_row_modified?: boolean; is_deleted?: boolean; is_added?: boolean };\n highlightSubstring?: (value: string) => JSX.Element;\n is_read: boolean;\n is_modified: boolean;\n is_row_modified: boolean;\n is_deleted: boolean;\n is_added: boolean;\n level: number;\n inlineEditing: string | null;\n isInlineEditing?: boolean;\n setRowHovering: (id: string | number | null) => void;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n cellRef: React.RefObject<HTMLDivElement>;\n handleUpdateCellData: (directValue?: string | boolean | null, meta?: { currency_code?: string | null; reference?: unknown | null;[key: string]: unknown | null } | null) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n loadingExpand: boolean;\n toggleRowExpand: () => void;\n isDraggingOver?: boolean;\n isLoading?: boolean;\n is_incomplete?: boolean;\n pendingEdit?: IPendingEdit;\n hasPendingEdit?: boolean;\n pendingValidationError?: string | null;\n};\n\nlet interval: ReturnType<typeof setInterval> | undefined;\n\nconst formatDurationFallback = (duration: unknown): string => {\n const durationInMs = Number(duration);\n\n if (Number.isNaN(durationInMs) || duration === null || duration === undefined) {\n return '0ms';\n }\n\n if (durationInMs >= 86400000) {\n const days = Math.floor(durationInMs / 86400000);\n const hours = Math.floor((durationInMs % 86400000) / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${days}d ${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 3600000) {\n const hours = Math.floor(durationInMs / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 60000) {\n const minutes = Math.floor(durationInMs / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 1000) {\n return `${(durationInMs / 1000).toFixed(2)}s`;\n }\n\n return `${durationInMs}ms`;\n};\n\nconst CellWrapper = ({ children, withLink, linkTo, rowData, disableRowClick }: { children: React.ReactNode; withLink?: boolean; linkTo?: (id: string, _rowData?: Record<string, unknown>) => string; rowData?: Record<string, unknown>; disableRowClick?: boolean }) => {\n return withLink && !disableRowClick ? <Link to={linkTo?.(rowData?.id as string, rowData) || ''}>{children}</Link> : children;\n};\n\nconst DataCellInner: React.FC<CellProps> = ({\n cell, id, nextWidthSum, isLastCell, rowHovering, index, isFirstStickyCell, handleCellClick, currentData, highlightSubstring,\n is_read, is_modified, is_row_modified, is_deleted, is_added, level, inlineEditing, isInlineEditing, setRowHovering,\n handleCellValueChange, cellRef, handleUpdateCellData, registerValidation, loadingExpand, toggleRowExpand,\n isDraggingOver, isLoading, is_incomplete, pendingEdit, hasPendingEdit, pendingValidationError,\n}) => {\n const {\n cascadingTableConfig, originalsOnly, maxLevel, showNewItem, expandedRows, rowLinkConfig, multiSelectConfig,\n cellEditing, cellEditingValue, allowInlineEdit, fieldOperationLoading, pendingEdits: contextPendingEdits,\n selectedRowId, cellContextMenuConfig, openCellContextMenu,\n } = useContext(TableContext);\n\n const isSelectedRow =\n selectedRowId !== null && selectedRowId !== undefined && String(selectedRowId) === String(id);\n\n const tableConfig = useTableConfig();\n\n const rowCellMeta = cell?.column?.key ? (cell?.row?.original?.__cellMetadata as Record<string, Record<string, unknown>> | undefined)?.[cell.column.key] : undefined;\n const isLocked = rowCellMeta?.is_locked ?? cell?.column?.is_locked;\n const cellValidationError = (cell?.column?.key ? contextPendingEdits?.[id]?.[cell.column.key]?.validationError : null) || pendingValidationError || null;\n const isActuallyInlineEditing = inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled;\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const { theme } = useTheme();\n const isDark = theme === 'dark';\n const onMouseEnter = useCallback(() => setRowHovering(id), [setRowHovering, id]);\n const onMouseLeave = useCallback(() => setRowHovering(null), [setRowHovering]);\n\n const getNodeExecutionDuration = tableConfig?.formatDuration;\n const [cellValue, setCellValue] = useState(\n cell?.column?.dataType === 'duration' && cell?.value\n ? getNodeExecutionDuration\n ? getNodeExecutionDuration(cell.value)\n : formatDurationFallback(cell.value)\n : cell.value,\n );\n const [tooltipText, setTooltipText] = useState<string | null>(null);\n const [isTruncated, setIsTruncated] = useState(false);\n const [urlTooltipOpen, setUrlTooltipOpen] = useState(false);\n const [truncateTooltipOpen, setTruncateTooltipOpen] = useState(false);\n const textRef = useRef<HTMLSpanElement>(null);\n const urlTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const truncateTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const { selectedColumnIds = [] } = multiSelectConfig || {};\n const shouldHighlight = !Object.prototype.hasOwnProperty.call(cell?.column?.meta ?? {}, 'shouldHighlight') || cell?.column?.meta?.shouldHighlight;\n\n const checkTruncation = useCallback(() => {\n if (textRef.current) {\n setIsTruncated(textRef.current.scrollWidth > textRef.current.clientWidth);\n }\n }, []);\n\n const handleUrlTooltipChange = useCallback((open: boolean) => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n\n if (open) {\n setUrlTooltipOpen(true);\n } else {\n urlTooltipTimer.current = setTimeout(() => setUrlTooltipOpen(false), 200);\n }\n }, []);\n\n const handleTruncateTooltipChange = useCallback((open: boolean) => {\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n\n if (open) {\n setTruncateTooltipOpen(true);\n } else {\n truncateTooltipTimer.current = setTimeout(() => setTruncateTooltipOpen(false), 200);\n }\n }, []);\n\n const bgColor = cn({\n 'bg-amber-100 dark:bg-amber-900/30': hasPendingEdit,\n 'bg-neutral-100 dark:bg-black-600': rowHovering === id && !isInlineEditing && !hasPendingEdit && !(is_deleted || currentData?.is_deleted) && !(is_added || currentData?.is_added),\n 'bg-error-200 dark:bg-error-900': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_deleted || currentData?.is_deleted),\n 'bg-success-100 dark:bg-success-800': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_added || currentData?.is_added),\n 'bg-warning-100 dark:bg-warning-950': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified),\n // 'bg-primary-50 dark:bg-black-700': !is_incomplete && !is_read && showNewItem && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-warning-50 dark:bg-orange-900': (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-error-100 dark:bg-error-975': (is_deleted || currentData?.is_deleted) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-success-50 dark:bg-success-900': (is_added || currentData?.is_added) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-900': (isDraggingOver || isInlineEditing) && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-800': selectedColumnIds?.includes(cell.column.id) && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-700': isSelectedRow && rowHovering !== id && !isInlineEditing && !hasPendingEdit && !isLoading,\n [getTableRowBgClassNamesByStatus[cell?.row?.original?.__rowBgStatus as string]]: cell?.row?.original?.__rowBgStatus && !isInlineEditing && !hasPendingEdit,\n });\n\n const onClick = (e: React.MouseEvent) => { if (cell.column?.disableRowClick) return; handleCellClick(e); };\n\n const handleContextMenu = useCallback((event: React.MouseEvent<HTMLTableCellElement>) => {\n // Keep the native menu when the table opted out, or while inline editing (cut/paste/undo).\n if (cellContextMenuConfig?.isEnabled === false || !openCellContextMenu || isActuallyInlineEditing) return;\n\n const target: ICellContextMenuTarget = {\n rowId: id,\n rowData: (cell?.row?.original ?? {}) as Record<string, unknown>,\n columnKey: cell?.column?.key ?? '',\n column: cell.column,\n value: cell?.value,\n text: getCellText(cellValue, cell?.value, event.currentTarget),\n rowText: getRowText(event.currentTarget),\n cell,\n };\n\n if (cellContextMenuConfig?.isDisabledForCell?.(target)) return;\n\n event.preventDefault();\n event.stopPropagation();\n openCellContextMenu({ x: event.clientX, y: event.clientY, target });\n }, [cellContextMenuConfig, openCellContextMenu, isActuallyInlineEditing, id, cell, cellValue]);\n\n useEffect(() => {\n const isRunning = cell?.row?.original?.status === 'running';\n if (isRunning && cell.column?.dataType === 'duration') {\n interval = setInterval(() => {\n const startedTime = new Date(formatDate((cell?.row?.original?.created_at || cell?.row?.original?.executed_on) as string | undefined, { withTime: true, format: 'yyyy-MM-dd HH:mm:ss' }) as unknown as Date);\n const timeDiff = Math.abs(new Date().getTime() - new Date(startedTime).getTime());\n setCellValue(getNodeExecutionDuration ? getNodeExecutionDuration(timeDiff) : formatDurationFallback(timeDiff));\n }, 500);\n }\n return () => { if (interval) clearInterval(interval); };\n }, [cellValue, cell.value, cell?.row?.original?.created_at, cell?.row?.original?.executed_on, cell?.row?.original?.status, cell.column?.dataType, getNodeExecutionDuration]);\n\n useEffect(() => {\n if (cell?.column?.tooltipCellKey || cell?.column?.type?.toLowerCase() === 'url') {\n if (cell?.column?.type?.toLowerCase() === 'url') setTooltipText(cell?.value as string | null);\n else setTooltipText(cell?.row?.original?.[String(cell?.column?.tooltipCellKey)] as string | null);\n }\n }, [cell?.column?.tooltipCellKey, cell?.row?.original, cell?.column?.type, cell?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'currency') {\n if (pendingEdit?.value !== undefined) {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n const currencyCode = pendingEdit?.meta?.currency_code || rawData?.[headerKey]?.currency_code || 'USD';\n setCellValue(formatCurrency(pendingEdit.value, currencyCode as string));\n } else {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n setCellValue(formatCurrency(cell?.value, (rawData?.[headerKey]?.currency_code as string) || 'USD'));\n }\n }\n }, [cell?.value, cell?.column?.type, cell?.column?.Header, cell?.row?.original?.__rawData, pendingEdit?.value, pendingEdit?.meta?.currency_code]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'percentage') {\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value?.toString() + '%' || '');\n else setCellValue(cell?.value?.toString() + '%' || '');\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['date', 'datetime'].includes(columnType)) {\n if (pendingEdit?.value !== undefined) {\n const hasTime = columnType === 'datetime';\n const formattedValue = formatDate(pendingEdit.value as string, { withTime: hasTime, skipTimezone: true });\n setCellValue(formattedValue || pendingEdit.value);\n } else setCellValue(cell.value);\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['currency', 'percentage', 'duration', 'boolean', 'date', 'datetime'].includes(columnType)) return;\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value);\n else if (cell?.column?.dataType !== 'duration') setCellValue(cell.value);\n }, [cell?.value, cell?.column?.type, cell?.column?.dataType, pendingEdit?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'boolean' && allowInlineEdit) {\n const rawValue = pendingEdit?.value !== undefined ? pendingEdit.value : cell?.value;\n const booleanValue = rawValue === true || rawValue === 'true' || rawValue === 'True' || rawValue === 'Yes' || rawValue === 1;\n setCellValue(booleanValue ? 'Yes' : 'No');\n }\n }, [cell?.value, cell?.column?.type, allowInlineEdit, pendingEdit?.value]);\n\n useEffect(() => {\n return () => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n };\n }, []);\n\n const isUiElementCell = React.isValidElement(cellValue);\n\n return (\n <td\n key={index} id={cell.value as string | undefined} data-column-key={cell?.column?.key} {...cell.getCellProps()}\n onClick={rowLinkConfig?.isEnabled ? undefined : onClick}\n className={cn('h-row', {\n 'sticky left-0': cell?.column?.sticky,\n relative: !cell?.column?.sticky,\n 'w-full': isLastCell,\n 'overflow-visible': inlineEditing === cell.column.key,\n /** Chips/badges: avoid vertical clip from overflow-x-hidden + truncate (see isUiElementCell branch below) */\n 'overflow-x-hidden overflow-y-visible': inlineEditing !== cell.column.key && isUiElementCell,\n 'overflow-hidden': inlineEditing !== cell.column.key && !isUiElementCell,\n },\n cellValidationError && !isActuallyInlineEditing ? 'outline outline-2 outline-error-500 -outline-offset-2 z-[5]' : '',\n `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`,\n )}\n style={{ minWidth: `${cell.column.width}px`, maxWidth: `${cell.column.width}px`, right: cell?.column?.sticky ? `${nextWidthSum}px` : CELL_DEFAULT_RIGHT_OFFSET, paddingLeft: level > 0 && index === 0 ? `${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined }}\n onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}\n onContextMenu={handleContextMenu}\n >\n <CellWrapper withLink={rowLinkConfig?.isEnabled} linkTo={rowLinkConfig?.linkTo || undefined} rowData={cell?.row?.original} disableRowClick={cell?.column?.disableRowClick}>\n {(Array.isArray(cellEditing) ? cellEditing.includes(`${id}-${cell?.column?.id}`) : cellEditing === `${id}-${cell?.column?.id}`) ? (\n <div className='h-row top-0 font-medium font-inter w-full absolute flex items-center px-4'>\n <span className='text-neutral-400 dark:text-black-400 truncate'>\n {(() => {\n const currentCellId = `${id}-${cell?.column?.id}`;\n const editValue = typeof cellEditingValue === 'object' ? cellEditingValue?.[currentCellId] : cellEditingValue;\n const columnType = cell?.column?.type?.toLowerCase();\n\n if (columnType === 'boolean') {\n return (editValue as unknown) === true || editValue === 'true' || editValue === 'True' ? 'Yes' : 'No';\n }\n\n if ((columnType === 'date' || columnType === 'datetime') && editValue) {\n const hasTime = columnType === 'datetime';\n return formatDate(editValue as string, { withTime: hasTime, skipTimezone: true }) || String(editValue);\n }\n\n return editValue !== undefined && editValue !== null ? String(editValue) : (cellValue as React.ReactNode);\n })()}\n </span>\n <div className='ml-2 flex items-center gap-1.5'><LoadingSpinnerIcon className='spinner text-neutral-600 dark:text-white' size={12} /></div>\n </div>\n ) : inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled ? (\n <div className='h-row w-full absolute top-0 left-0 flex items-center' style={{ marginLeft: level > 0 && index === 0 ? `-${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined, width: level > 0 && index === 0 ? `calc(100% + ${level * CELL_INDENT_PER_LEVEL_PX}px)` : '100%' }}>\n <InlineEditField cell={cell} id={id} inlineEditing={inlineEditing} cellRef={cellRef} handleCellValueChange={handleCellValueChange} handleUpdateCellData={handleUpdateCellData} registerValidation={registerValidation} />\n </div>\n ) : (\n <>\n {level > 0 && index === 0 && <div className='h-row border-l border-neutral-300 dark:border-black-600 ml-2' />}\n <div className='min-h-6'>\n <Tooltip\n title={tooltipText && cell?.column?.type?.toLowerCase() !== 'url' ? tooltipText : undefined}\n hideTooltip={!tooltipText || cell?.column?.type?.toLowerCase() === 'url'}\n delayShow\n placement='top'\n >\n <div className={cn(`h-row top-0 font-medium font-inter overflow-index-auto whitespace-nowrap text-ellipsis dark:text-black-200 w-full absolute flex items-center ${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`, isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-x-hidden', { 'border border-b-0 border-t-0 border-primary-600 dark:border-blue-800': selectedColumnIds?.includes(cell.column.id) })}\n style={cell?.column?.sticky && isFirstStickyCell ? { boxShadow: isDark ? CELL_STICKY_SHADOW_DARK : CELL_STICKY_SHADOW_LIGHT } : {}}>\n {cascadingTableConfig?.isCascading && !originalsOnly && index === 0 && (\n <div className={cn('w-[22px] h-row flex items-center px-4', `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`)} id='cascading'>\n {maxLevel! > level && (cell?.row?.original?.__has_children || cascadingTableConfig?.showAllDropdown) && (\n <div>{loadingExpand ? <LoadingSpinnerIcon className='text-neutral-600 dark:text-white' size={8} /> : <div>{expandedRows?.[id]?.isOpen ? <KeyboardArrowDownIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} /> : <KeyboardArrowRightFilledIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} />}</div>}</div>\n )}\n </div>\n )}\n\n {cell?.column?.type?.toLowerCase() === 'url' && tooltipText ? (\n <Tooltip\n title={(\n <div onMouseEnter={() => handleUrlTooltipChange(true)} onMouseLeave={() => handleUrlTooltipChange(false)}>\n <a href={tooltipText} target='_blank' rel='noopener noreferrer' onClick={(e) => e.stopPropagation()}>\n <div className='flex gap-1 items-center w-full'>\n <div className='w-4 h-4'>\n <LinkIcon height={16} width={16} />\n </div>\n <Typography variant='medium' size='small' className='truncate' appearance='custom'>{tooltipText}</Typography>\n <OpenInNewRounded sx={{ height: '16px', width: '16px', color: '#016DCF' }} />\n </div>\n </a>\n </div>\n )}\n placement='top'\n open={urlTooltipOpen}\n onOpenChange={handleUrlTooltipChange}\n className='block w-full min-w-0 overflow-hidden'\n >\n <div className='w-full h-row flex items-center px-4 min-w-0 overflow-hidden text-primary-400'>\n <span ref={textRef} data-cell-content onMouseEnter={checkTruncation} className='truncate w-full'>\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n ) : (\n <Tooltip\n title={\n isTruncated && cellValue && !isUiElementCell ? (\n <div\n onMouseEnter={() => handleTruncateTooltipChange(true)}\n onMouseLeave={() => handleTruncateTooltipChange(false)}\n className='max-h-96 overflow-y-auto whitespace-pre-wrap break-words no-scroll'\n >\n {String(cellValue)}\n </div>\n ) : undefined\n }\n placement='top'\n delayShow\n hideTooltip={!!tooltipText}\n open={isTruncated && !tooltipText && !isUiElementCell ? truncateTooltipOpen : undefined}\n onOpenChange={isTruncated && !tooltipText && !isUiElementCell ? handleTruncateTooltipChange : undefined}\n className={cn('block w-full min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}\n >\n <div className={cn('w-full h-row flex items-center px-4 min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}>\n <span\n ref={isUiElementCell ? undefined : textRef}\n data-cell-content\n onMouseEnter={isUiElementCell ? undefined : checkTruncation}\n className={cn(isUiElementCell ? 'flex min-w-0 max-w-full items-center justify-start gap-1' : 'truncate w-full')}\n >\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : React.isValidElement(cellValue)\n ? (typeof (cellValue as React.ReactElement<Record<string, unknown>>).type === 'string'\n ? cellValue\n : React.cloneElement(cellValue as React.ReactElement<Record<string, unknown>>, {\n ...((cellValue as React.ReactElement<Record<string, unknown>>).props as Record<string, unknown>),\n containerWidth: cell.column.width,\n }))\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n )}\n </div>\n </Tooltip>\n </div>\n </>\n )}\n </CellWrapper>\n {cellValidationError && !isActuallyInlineEditing && (\n <div className='absolute bottom-0 left-0 right-0 h-row flex items-end pointer-events-none z-[5]'>\n <div className='w-full bg-error-50 dark:bg-error-975 px-1.5 py-0.5 truncate'><span className='text-error-600 text-2xs font-medium leading-none'>{cellValidationError}</span></div>\n </div>\n )}\n {isFieldOperationLoading && !(inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled) && (\n <div className='absolute top-0 right-0 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-10'>\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n </div>\n )}\n </td>\n );\n};\n\nexport const DataCell = React.memo(DataCellInner);\n"],"names":["interval","formatDurationFallback","duration","durationInMs","days","hours","minutes","seconds","CellWrapper","children","withLink","linkTo","rowData","disableRowClick","jsx","Link","DataCellInner","cell","id","nextWidthSum","isLastCell","rowHovering","index","isFirstStickyCell","handleCellClick","currentData","highlightSubstring","is_read","is_modified","is_row_modified","is_deleted","is_added","level","inlineEditing","isInlineEditing","setRowHovering","handleCellValueChange","cellRef","handleUpdateCellData","registerValidation","loadingExpand","toggleRowExpand","isDraggingOver","isLoading","is_incomplete","pendingEdit","hasPendingEdit","pendingValidationError","cascadingTableConfig","originalsOnly","maxLevel","showNewItem","expandedRows","rowLinkConfig","multiSelectConfig","cellEditing","cellEditingValue","allowInlineEdit","fieldOperationLoading","contextPendingEdits","selectedRowId","cellContextMenuConfig","openCellContextMenu","useContext","TableContext","isSelectedRow","tableConfig","useTableConfig","isLocked","cellValidationError","isActuallyInlineEditing","isFieldOperationLoading","theme","useTheme","isDark","onMouseEnter","useCallback","onMouseLeave","getNodeExecutionDuration","cellValue","setCellValue","useState","tooltipText","setTooltipText","isTruncated","setIsTruncated","urlTooltipOpen","setUrlTooltipOpen","truncateTooltipOpen","setTruncateTooltipOpen","textRef","useRef","urlTooltipTimer","truncateTooltipTimer","selectedColumnIds","shouldHighlight","checkTruncation","handleUrlTooltipChange","open","handleTruncateTooltipChange","bgColor","cn","getTableRowBgClassNamesByStatus","onClick","e","handleContextMenu","event","target","getCellText","getRowText","useEffect","startedTime","formatDate","timeDiff","rawData","headerKey","currencyCode","formatCurrency","columnType","hasTime","formattedValue","rawValue","isUiElementCell","React","jsxs","CELL_DEFAULT_RIGHT_OFFSET","CELL_INDENT_PER_LEVEL_PX","currentCellId","editValue","LoadingSpinnerIcon","InlineEditField","Fragment","Tooltip","CELL_STICKY_SHADOW_DARK","CELL_STICKY_SHADOW_LIGHT","KeyboardArrowDownIcon","KeyboardArrowRightFilledIcon","LinkIcon","Typography","OpenInNewRounded","DataCell"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataCell.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/DataCell.tsx"],"sourcesContent":["import { useTheme } from '../../../../../hooks/useTheme';\nimport { formatCurrency } from '../../../../../utils/formatters';\nimport { formatDate } from '../../../../../utils/formatters';\nimport { getTableRowBgClassNamesByStatus } from '../../../../../constants/table';\nimport type { ICell, ICellContextMenuTarget, IPendingEdit, ValidateAndSaveResult } from '../../types';\nimport { useTableConfig } from '../../../../../providers/design-system-provider/hooks';\nimport Tooltip from '../../../../tooltip/Tooltip';\nimport { Typography } from '../../../../data-display/typography/Typography';\nimport { KeyboardArrowDownIcon, KeyboardArrowRightFilledIcon, LinkIcon, LoadingSpinnerIcon } from '../../../../icon';\nimport { OpenInNewRounded } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { TableContext } from '../../context';\nimport { getCellText } from '../../copy-text';\nimport { InlineEditField } from './InlineEditField';\nimport { CELL_DEFAULT_RIGHT_OFFSET, CELL_INDENT_PER_LEVEL_PX, CELL_STICKY_SHADOW_DARK, CELL_STICKY_SHADOW_LIGHT } from '../../constants';\n\ntype CellProps = {\n cell: ICell;\n id: string | number;\n nextWidthSum: number;\n isLastCell: boolean;\n rowHovering: string | number | null;\n index: number;\n isFirstStickyCell: boolean;\n handleCellClick: (e?: React.MouseEvent) => void | null;\n currentData: { is_row_modified?: boolean; is_deleted?: boolean; is_added?: boolean };\n highlightSubstring?: (value: string) => JSX.Element;\n is_read: boolean;\n is_modified: boolean;\n is_row_modified: boolean;\n is_deleted: boolean;\n is_added: boolean;\n level: number;\n inlineEditing: string | null;\n isInlineEditing?: boolean;\n setRowHovering: (id: string | number | null) => void;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n cellRef: React.RefObject<HTMLDivElement>;\n handleUpdateCellData: (directValue?: string | boolean | null, meta?: { currency_code?: string | null; reference?: unknown | null;[key: string]: unknown | null } | null) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n loadingExpand: boolean;\n toggleRowExpand: () => void;\n isDraggingOver?: boolean;\n isLoading?: boolean;\n is_incomplete?: boolean;\n pendingEdit?: IPendingEdit;\n hasPendingEdit?: boolean;\n pendingValidationError?: string | null;\n};\n\nlet interval: ReturnType<typeof setInterval> | undefined;\n\nconst formatDurationFallback = (duration: unknown): string => {\n const durationInMs = Number(duration);\n\n if (Number.isNaN(durationInMs) || duration === null || duration === undefined) {\n return '0ms';\n }\n\n if (durationInMs >= 86400000) {\n const days = Math.floor(durationInMs / 86400000);\n const hours = Math.floor((durationInMs % 86400000) / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${days}d ${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 3600000) {\n const hours = Math.floor(durationInMs / 3600000);\n const minutes = Math.floor((durationInMs % 3600000) / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 60000) {\n const minutes = Math.floor(durationInMs / 60000);\n const seconds = Math.floor((durationInMs % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n\n if (durationInMs >= 1000) {\n return `${(durationInMs / 1000).toFixed(2)}s`;\n }\n\n return `${durationInMs}ms`;\n};\n\nconst CellWrapper = ({ children, withLink, linkTo, rowData, disableRowClick }: { children: React.ReactNode; withLink?: boolean; linkTo?: (id: string, _rowData?: Record<string, unknown>) => string; rowData?: Record<string, unknown>; disableRowClick?: boolean }) => {\n return withLink && !disableRowClick ? <Link to={linkTo?.(rowData?.id as string, rowData) || ''}>{children}</Link> : children;\n};\n\nconst DataCellInner: React.FC<CellProps> = ({\n cell, id, nextWidthSum, isLastCell, rowHovering, index, isFirstStickyCell, handleCellClick, currentData, highlightSubstring,\n is_read, is_modified, is_row_modified, is_deleted, is_added, level, inlineEditing, isInlineEditing, setRowHovering,\n handleCellValueChange, cellRef, handleUpdateCellData, registerValidation, loadingExpand, toggleRowExpand,\n isDraggingOver, isLoading, is_incomplete, pendingEdit, hasPendingEdit, pendingValidationError,\n}) => {\n const {\n cascadingTableConfig, originalsOnly, maxLevel, showNewItem, expandedRows, rowLinkConfig, multiSelectConfig,\n cellEditing, cellEditingValue, allowInlineEdit, fieldOperationLoading, pendingEdits: contextPendingEdits,\n selectedRowId, cellContextMenuConfig, openCellContextMenu,\n } = useContext(TableContext);\n\n const isSelectedRow =\n selectedRowId !== null && selectedRowId !== undefined && String(selectedRowId) === String(id);\n\n const tableConfig = useTableConfig();\n\n const rowCellMeta = cell?.column?.key ? (cell?.row?.original?.__cellMetadata as Record<string, Record<string, unknown>> | undefined)?.[cell.column.key] : undefined;\n const isLocked = rowCellMeta?.is_locked ?? cell?.column?.is_locked;\n const cellValidationError = (cell?.column?.key ? contextPendingEdits?.[id]?.[cell.column.key]?.validationError : null) || pendingValidationError || null;\n const isActuallyInlineEditing = inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled;\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const { theme } = useTheme();\n const isDark = theme === 'dark';\n const onMouseEnter = useCallback(() => setRowHovering(id), [setRowHovering, id]);\n const onMouseLeave = useCallback(() => setRowHovering(null), [setRowHovering]);\n\n const getNodeExecutionDuration = tableConfig?.formatDuration;\n const [cellValue, setCellValue] = useState(\n cell?.column?.dataType === 'duration' && cell?.value\n ? getNodeExecutionDuration\n ? getNodeExecutionDuration(cell.value)\n : formatDurationFallback(cell.value)\n : cell.value,\n );\n const [tooltipText, setTooltipText] = useState<string | null>(null);\n const [isTruncated, setIsTruncated] = useState(false);\n const [urlTooltipOpen, setUrlTooltipOpen] = useState(false);\n const [truncateTooltipOpen, setTruncateTooltipOpen] = useState(false);\n const textRef = useRef<HTMLSpanElement>(null);\n const urlTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const truncateTooltipTimer = useRef<ReturnType<typeof setTimeout>>();\n const { selectedColumnIds = [] } = multiSelectConfig || {};\n const shouldHighlight = !Object.prototype.hasOwnProperty.call(cell?.column?.meta ?? {}, 'shouldHighlight') || cell?.column?.meta?.shouldHighlight;\n\n const checkTruncation = useCallback(() => {\n if (textRef.current) {\n setIsTruncated(textRef.current.scrollWidth > textRef.current.clientWidth);\n }\n }, []);\n\n const handleUrlTooltipChange = useCallback((open: boolean) => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n\n if (open) {\n setUrlTooltipOpen(true);\n } else {\n urlTooltipTimer.current = setTimeout(() => setUrlTooltipOpen(false), 200);\n }\n }, []);\n\n const handleTruncateTooltipChange = useCallback((open: boolean) => {\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n\n if (open) {\n setTruncateTooltipOpen(true);\n } else {\n truncateTooltipTimer.current = setTimeout(() => setTruncateTooltipOpen(false), 200);\n }\n }, []);\n\n const bgColor = cn({\n 'bg-amber-100 dark:bg-amber-900/30': hasPendingEdit,\n 'bg-neutral-100 dark:bg-black-600': rowHovering === id && !isInlineEditing && !hasPendingEdit && !(is_deleted || currentData?.is_deleted) && !(is_added || currentData?.is_added),\n 'bg-error-200 dark:bg-error-900': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_deleted || currentData?.is_deleted),\n 'bg-success-100 dark:bg-success-800': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_added || currentData?.is_added),\n 'bg-warning-100 dark:bg-warning-950': rowHovering === id && !isInlineEditing && !hasPendingEdit && (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified),\n // 'bg-primary-50 dark:bg-black-700': !is_incomplete && !is_read && showNewItem && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-warning-50 dark:bg-orange-900': (is_incomplete || is_modified || is_row_modified || currentData?.is_row_modified) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-error-100 dark:bg-error-975': (is_deleted || currentData?.is_deleted) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-success-50 dark:bg-success-900': (is_added || currentData?.is_added) && !isLoading && rowHovering !== id && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-900': (isDraggingOver || isInlineEditing) && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-800': selectedColumnIds?.includes(cell.column.id) && !isInlineEditing && !hasPendingEdit,\n 'bg-primary-50 dark:bg-primary-700': isSelectedRow && rowHovering !== id && !isInlineEditing && !hasPendingEdit && !isLoading,\n [getTableRowBgClassNamesByStatus[cell?.row?.original?.__rowBgStatus as string]]: cell?.row?.original?.__rowBgStatus && !isInlineEditing && !hasPendingEdit,\n });\n\n const onClick = (e: React.MouseEvent) => { if (cell.column?.disableRowClick) return; handleCellClick(e); };\n\n const handleContextMenu = useCallback((event: React.MouseEvent<HTMLTableCellElement>) => {\n // Keep the native menu when the table opted out, or while inline editing (cut/paste/undo).\n if (cellContextMenuConfig?.isEnabled === false || !openCellContextMenu || isActuallyInlineEditing) return;\n\n const target: ICellContextMenuTarget = {\n rowId: id,\n rowData: (cell?.row?.original ?? {}) as Record<string, unknown>,\n columnKey: cell?.column?.key ?? '',\n column: cell.column,\n value: cell?.value,\n text: getCellText(cellValue, cell?.value, event.currentTarget),\n cell,\n };\n\n if (cellContextMenuConfig?.isDisabledForCell?.(target)) return;\n\n event.preventDefault();\n event.stopPropagation();\n openCellContextMenu({ x: event.clientX, y: event.clientY, target });\n }, [cellContextMenuConfig, openCellContextMenu, isActuallyInlineEditing, id, cell, cellValue]);\n\n useEffect(() => {\n const isRunning = cell?.row?.original?.status === 'running';\n if (isRunning && cell.column?.dataType === 'duration') {\n interval = setInterval(() => {\n const startedTime = new Date(formatDate((cell?.row?.original?.created_at || cell?.row?.original?.executed_on) as string | undefined, { withTime: true, format: 'yyyy-MM-dd HH:mm:ss' }) as unknown as Date);\n const timeDiff = Math.abs(new Date().getTime() - new Date(startedTime).getTime());\n setCellValue(getNodeExecutionDuration ? getNodeExecutionDuration(timeDiff) : formatDurationFallback(timeDiff));\n }, 500);\n }\n return () => { if (interval) clearInterval(interval); };\n }, [cellValue, cell.value, cell?.row?.original?.created_at, cell?.row?.original?.executed_on, cell?.row?.original?.status, cell.column?.dataType, getNodeExecutionDuration]);\n\n useEffect(() => {\n if (cell?.column?.tooltipCellKey || cell?.column?.type?.toLowerCase() === 'url') {\n if (cell?.column?.type?.toLowerCase() === 'url') setTooltipText(cell?.value as string | null);\n else setTooltipText(cell?.row?.original?.[String(cell?.column?.tooltipCellKey)] as string | null);\n }\n }, [cell?.column?.tooltipCellKey, cell?.row?.original, cell?.column?.type, cell?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'currency') {\n if (pendingEdit?.value !== undefined) {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n const currencyCode = pendingEdit?.meta?.currency_code || rawData?.[headerKey]?.currency_code || 'USD';\n setCellValue(formatCurrency(pendingEdit.value, currencyCode as string));\n } else {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as unknown as string;\n setCellValue(formatCurrency(cell?.value, (rawData?.[headerKey]?.currency_code as string) || 'USD'));\n }\n }\n }, [cell?.value, cell?.column?.type, cell?.column?.Header, cell?.row?.original?.__rawData, pendingEdit?.value, pendingEdit?.meta?.currency_code]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'percentage') {\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value?.toString() + '%' || '');\n else setCellValue(cell?.value?.toString() + '%' || '');\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['date', 'datetime'].includes(columnType)) {\n if (pendingEdit?.value !== undefined) {\n const hasTime = columnType === 'datetime';\n const formattedValue = formatDate(pendingEdit.value as string, { withTime: hasTime, skipTimezone: true });\n setCellValue(formattedValue || pendingEdit.value);\n } else setCellValue(cell.value);\n }\n }, [cell?.value, cell?.column?.type, pendingEdit?.value]);\n\n useEffect(() => {\n const columnType = cell?.column?.type?.toLowerCase() || '';\n if (['currency', 'percentage', 'duration', 'boolean', 'date', 'datetime'].includes(columnType)) return;\n if (pendingEdit?.value !== undefined) setCellValue(pendingEdit.value);\n else if (cell?.column?.dataType !== 'duration') setCellValue(cell.value);\n }, [cell?.value, cell?.column?.type, cell?.column?.dataType, pendingEdit?.value]);\n\n useEffect(() => {\n if (cell?.column?.type?.toLowerCase() === 'boolean' && allowInlineEdit) {\n const rawValue = pendingEdit?.value !== undefined ? pendingEdit.value : cell?.value;\n const booleanValue = rawValue === true || rawValue === 'true' || rawValue === 'True' || rawValue === 'Yes' || rawValue === 1;\n setCellValue(booleanValue ? 'Yes' : 'No');\n }\n }, [cell?.value, cell?.column?.type, allowInlineEdit, pendingEdit?.value]);\n\n useEffect(() => {\n return () => {\n if (urlTooltipTimer.current) {\n clearTimeout(urlTooltipTimer.current);\n }\n if (truncateTooltipTimer.current) {\n clearTimeout(truncateTooltipTimer.current);\n }\n };\n }, []);\n\n const isUiElementCell = React.isValidElement(cellValue);\n\n return (\n <td\n key={index} id={cell.value as string | undefined} data-column-key={cell?.column?.key} {...cell.getCellProps()}\n onClick={rowLinkConfig?.isEnabled ? undefined : onClick}\n className={cn('h-row', {\n 'sticky left-0': cell?.column?.sticky,\n relative: !cell?.column?.sticky,\n 'w-full': isLastCell,\n 'overflow-visible': inlineEditing === cell.column.key,\n /** Chips/badges: avoid vertical clip from overflow-x-hidden + truncate (see isUiElementCell branch below) */\n 'overflow-x-hidden overflow-y-visible': inlineEditing !== cell.column.key && isUiElementCell,\n 'overflow-hidden': inlineEditing !== cell.column.key && !isUiElementCell,\n },\n cellValidationError && !isActuallyInlineEditing ? 'outline outline-2 outline-error-500 -outline-offset-2 z-[5]' : '',\n `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`,\n )}\n style={{ minWidth: `${cell.column.width}px`, maxWidth: `${cell.column.width}px`, right: cell?.column?.sticky ? `${nextWidthSum}px` : CELL_DEFAULT_RIGHT_OFFSET, paddingLeft: level > 0 && index === 0 ? `${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined }}\n onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}\n onContextMenu={handleContextMenu}\n >\n <CellWrapper withLink={rowLinkConfig?.isEnabled} linkTo={rowLinkConfig?.linkTo || undefined} rowData={cell?.row?.original} disableRowClick={cell?.column?.disableRowClick}>\n {(Array.isArray(cellEditing) ? cellEditing.includes(`${id}-${cell?.column?.id}`) : cellEditing === `${id}-${cell?.column?.id}`) ? (\n <div className='h-row top-0 font-medium font-inter w-full absolute flex items-center px-4'>\n <span className='text-neutral-400 dark:text-black-400 truncate'>\n {(() => {\n const currentCellId = `${id}-${cell?.column?.id}`;\n const editValue = typeof cellEditingValue === 'object' ? cellEditingValue?.[currentCellId] : cellEditingValue;\n const columnType = cell?.column?.type?.toLowerCase();\n\n if (columnType === 'boolean') {\n return (editValue as unknown) === true || editValue === 'true' || editValue === 'True' ? 'Yes' : 'No';\n }\n\n if ((columnType === 'date' || columnType === 'datetime') && editValue) {\n const hasTime = columnType === 'datetime';\n return formatDate(editValue as string, { withTime: hasTime, skipTimezone: true }) || String(editValue);\n }\n\n return editValue !== undefined && editValue !== null ? String(editValue) : (cellValue as React.ReactNode);\n })()}\n </span>\n <div className='ml-2 flex items-center gap-1.5'><LoadingSpinnerIcon className='spinner text-neutral-600 dark:text-white' size={12} /></div>\n </div>\n ) : inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled ? (\n <div className='h-row w-full absolute top-0 left-0 flex items-center' style={{ marginLeft: level > 0 && index === 0 ? `-${level * CELL_INDENT_PER_LEVEL_PX}px` : undefined, width: level > 0 && index === 0 ? `calc(100% + ${level * CELL_INDENT_PER_LEVEL_PX}px)` : '100%' }}>\n <InlineEditField cell={cell} id={id} inlineEditing={inlineEditing} cellRef={cellRef} handleCellValueChange={handleCellValueChange} handleUpdateCellData={handleUpdateCellData} registerValidation={registerValidation} />\n </div>\n ) : (\n <>\n {level > 0 && index === 0 && <div className='h-row border-l border-neutral-300 dark:border-black-600 ml-2' />}\n <div className='min-h-6'>\n <Tooltip\n title={tooltipText && cell?.column?.type?.toLowerCase() !== 'url' ? tooltipText : undefined}\n hideTooltip={!tooltipText || cell?.column?.type?.toLowerCase() === 'url'}\n delayShow\n placement='top'\n >\n <div className={cn(`h-row top-0 font-medium font-inter overflow-index-auto whitespace-nowrap text-ellipsis dark:text-black-200 w-full absolute flex items-center ${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`, isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-x-hidden', { 'border border-b-0 border-t-0 border-primary-600 dark:border-blue-800': selectedColumnIds?.includes(cell.column.id) })}\n style={cell?.column?.sticky && isFirstStickyCell ? { boxShadow: isDark ? CELL_STICKY_SHADOW_DARK : CELL_STICKY_SHADOW_LIGHT } : {}}>\n {cascadingTableConfig?.isCascading && !originalsOnly && index === 0 && (\n <div className={cn('w-[22px] h-row flex items-center px-4', `${bgColor ? bgColor : 'bg-white dark:bg-black-800'}`)} id='cascading'>\n {maxLevel! > level && (cell?.row?.original?.__has_children || cascadingTableConfig?.showAllDropdown) && (\n <div>{loadingExpand ? <LoadingSpinnerIcon className='text-neutral-600 dark:text-white' size={8} /> : <div>{expandedRows?.[id]?.isOpen ? <KeyboardArrowDownIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} /> : <KeyboardArrowRightFilledIcon size={20} className='text-neutral-400 dark:text-neutral-400' onClick={(e) => { toggleRowExpand(); e.stopPropagation(); }} />}</div>}</div>\n )}\n </div>\n )}\n\n {cell?.column?.type?.toLowerCase() === 'url' && tooltipText ? (\n <Tooltip\n title={(\n <div onMouseEnter={() => handleUrlTooltipChange(true)} onMouseLeave={() => handleUrlTooltipChange(false)}>\n <a href={tooltipText} target='_blank' rel='noopener noreferrer' onClick={(e) => e.stopPropagation()}>\n <div className='flex gap-1 items-center w-full'>\n <div className='w-4 h-4'>\n <LinkIcon height={16} width={16} />\n </div>\n <Typography variant='medium' size='small' className='truncate' appearance='custom'>{tooltipText}</Typography>\n <OpenInNewRounded sx={{ height: '16px', width: '16px', color: '#016DCF' }} />\n </div>\n </a>\n </div>\n )}\n placement='top'\n open={urlTooltipOpen}\n onOpenChange={handleUrlTooltipChange}\n className='block w-full min-w-0 overflow-hidden'\n >\n <div className='w-full h-row flex items-center px-4 min-w-0 overflow-hidden text-primary-400'>\n <span ref={textRef} data-cell-content onMouseEnter={checkTruncation} className='truncate w-full'>\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n ) : (\n <Tooltip\n title={\n isTruncated && cellValue && !isUiElementCell ? (\n <div\n onMouseEnter={() => handleTruncateTooltipChange(true)}\n onMouseLeave={() => handleTruncateTooltipChange(false)}\n className='max-h-96 overflow-y-auto whitespace-pre-wrap break-words no-scroll'\n >\n {String(cellValue)}\n </div>\n ) : undefined\n }\n placement='top'\n delayShow\n hideTooltip={!!tooltipText}\n open={isTruncated && !tooltipText && !isUiElementCell ? truncateTooltipOpen : undefined}\n onOpenChange={isTruncated && !tooltipText && !isUiElementCell ? handleTruncateTooltipChange : undefined}\n className={cn('block w-full min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}\n >\n <div className={cn('w-full h-row flex items-center px-4 min-w-0', isUiElementCell ? 'overflow-x-hidden overflow-y-visible' : 'overflow-hidden')}>\n <span\n ref={isUiElementCell ? undefined : textRef}\n data-cell-content\n onMouseEnter={isUiElementCell ? undefined : checkTruncation}\n className={cn(isUiElementCell ? 'flex min-w-0 max-w-full items-center justify-start gap-1' : 'truncate w-full')}\n >\n {highlightSubstring && shouldHighlight && !React.isValidElement(cellValue) && typeof cellValue !== 'object'\n ? highlightSubstring(cellValue as string)\n : React.isValidElement(cellValue)\n ? (typeof (cellValue as React.ReactElement<Record<string, unknown>>).type === 'string'\n ? cellValue\n : React.cloneElement(cellValue as React.ReactElement<Record<string, unknown>>, {\n ...((cellValue as React.ReactElement<Record<string, unknown>>).props as Record<string, unknown>),\n containerWidth: cell.column.width,\n }))\n : cellValue as React.ReactNode}\n </span>\n </div>\n </Tooltip>\n )}\n </div>\n </Tooltip>\n </div>\n </>\n )}\n </CellWrapper>\n {cellValidationError && !isActuallyInlineEditing && (\n <div className='absolute bottom-0 left-0 right-0 h-row flex items-end pointer-events-none z-[5]'>\n <div className='w-full bg-error-50 dark:bg-error-975 px-1.5 py-0.5 truncate'><span className='text-error-600 text-2xs font-medium leading-none'>{cellValidationError}</span></div>\n </div>\n )}\n {isFieldOperationLoading && !(inlineEditing === cell.column.key && cell?.column?.canEdit && !isLocked && !cell?.column?.is_disabled) && (\n <div className='absolute top-0 right-0 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-10'>\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n </div>\n )}\n </td>\n );\n};\n\nexport const DataCell = React.memo(DataCellInner);\n"],"names":["interval","formatDurationFallback","duration","durationInMs","days","hours","minutes","seconds","CellWrapper","children","withLink","linkTo","rowData","disableRowClick","jsx","Link","DataCellInner","cell","id","nextWidthSum","isLastCell","rowHovering","index","isFirstStickyCell","handleCellClick","currentData","highlightSubstring","is_read","is_modified","is_row_modified","is_deleted","is_added","level","inlineEditing","isInlineEditing","setRowHovering","handleCellValueChange","cellRef","handleUpdateCellData","registerValidation","loadingExpand","toggleRowExpand","isDraggingOver","isLoading","is_incomplete","pendingEdit","hasPendingEdit","pendingValidationError","cascadingTableConfig","originalsOnly","maxLevel","showNewItem","expandedRows","rowLinkConfig","multiSelectConfig","cellEditing","cellEditingValue","allowInlineEdit","fieldOperationLoading","contextPendingEdits","selectedRowId","cellContextMenuConfig","openCellContextMenu","useContext","TableContext","isSelectedRow","tableConfig","useTableConfig","isLocked","cellValidationError","isActuallyInlineEditing","isFieldOperationLoading","theme","useTheme","isDark","onMouseEnter","useCallback","onMouseLeave","getNodeExecutionDuration","cellValue","setCellValue","useState","tooltipText","setTooltipText","isTruncated","setIsTruncated","urlTooltipOpen","setUrlTooltipOpen","truncateTooltipOpen","setTruncateTooltipOpen","textRef","useRef","urlTooltipTimer","truncateTooltipTimer","selectedColumnIds","shouldHighlight","checkTruncation","handleUrlTooltipChange","open","handleTruncateTooltipChange","bgColor","cn","getTableRowBgClassNamesByStatus","onClick","e","handleContextMenu","event","target","getCellText","useEffect","startedTime","formatDate","timeDiff","rawData","headerKey","currencyCode","formatCurrency","columnType","hasTime","formattedValue","rawValue","isUiElementCell","React","jsxs","CELL_DEFAULT_RIGHT_OFFSET","CELL_INDENT_PER_LEVEL_PX","currentCellId","editValue","LoadingSpinnerIcon","InlineEditField","Fragment","Tooltip","CELL_STICKY_SHADOW_DARK","CELL_STICKY_SHADOW_LIGHT","KeyboardArrowDownIcon","KeyboardArrowRightFilledIcon","LinkIcon","Typography","OpenInNewRounded","DataCell"],"mappings":"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"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
`,s=t=>["string","number","boolean"].includes(typeof t),g=t=>t?(t.innerText??t.textContent??"").trim():"",T=(t,n,r)=>{const i=s(t)?t:n;return s(i)?String(i):g(r?.querySelector(c)??r)},f=t=>{const n=t?.closest("tr")?.querySelectorAll(c);return n?.length?Array.from(n,g).join(l):""},u=(t,n,r)=>{if(!t?.length||!n?.length||!r?.length)return"";const i=new Set(r.map(String)),a=n.filter(e=>e.visible!==!1&&e.is_visible!==!1).map(e=>e.key);return t.filter(e=>i.has(String(e.id))).map(e=>a.map(o=>o&&s(e[o])?String(e[o]):"").join(l)).join(S)};exports.getCellText=T;exports.getRowText=f;exports.getSelectedRowsText=u;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),l=require("./constants.cjs.js"),g="[data-cell-content]",a=2,s=t=>["string","number","boolean"].includes(typeof t),y=t=>t?(t.innerText??t.textContent??"").trim():"",o=t=>{if(t==null||typeof t=="boolean")return"";if(s(t))return String(t);if(Array.isArray(t))return t.map(o).filter(Boolean).join(" ");if(f.isValidElement(t)){const e=t.props,r=e&&typeof e=="object"&&"children"in e?e.children:void 0;return o(r)}return""},T=(t,e)=>typeof e.accessor=="function"?e.accessor(t):typeof e.accessor=="string"?t[e.accessor]:e.key?t[e.key]:void 0,p=t=>{const e=new Map;return typeof document>"u"||document.querySelector(`[${l.DATA_ROW_ID_ATTR}="${String(t).replace(/"/g,'\\"')}"]`)?.querySelectorAll(`[${l.DATA_COLUMN_KEY_ATTR}]`).forEach(n=>{const i=n.getAttribute(l.DATA_COLUMN_KEY_ATTR);i&&e.set(i,y(n.querySelector(g)??n))}),e},R=(t,e)=>{if(t===null||s(t))return t;if(t===void 0)return e||null;if(f.isValidElement(t))return o(t)||e||null;try{return JSON.parse(JSON.stringify(t))}catch{return o(t)||e||null}},b=(t,e,r)=>{const n=s(t)?t:e;return s(n)?String(n):y(r?.querySelector(g)??r)},S=t=>(t??[]).filter(e=>e.visible!==!1&&e.is_visible!==!1&&!!e.key),d=(t,e)=>{const r=p(t.id);return Object.fromEntries(e.map(n=>{const i=String(n.key);return[i,R(T(t,n),r.get(i)??"")]}))},A=(t,e)=>{const r=S(e);return!t||r.length===0?"":JSON.stringify(d(t,r),null,a)},_=(t,e,r)=>{const n=S(e);if(!t?.length||n.length===0||!r?.length)return"";const i=new Set(r.map(String)),u=t.filter(c=>i.has(String(c.id)));return u.length===0?"":JSON.stringify(u.map(c=>d(c,n)),null,a)};exports.getCellText=b;exports.getRowJson=A;exports.getSelectedRowsJson=_;
|
|
3
2
|
//# sourceMappingURL=copy-text.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-text.cjs.js","sources":["../../../../src/components/data-display/infinite-table/copy-text.ts"],"sourcesContent":["import type { IColumn } from './types';\n\nconst CELL_CONTENT_SELECTOR = '[data-cell-content]';\nconst
|
|
1
|
+
{"version":3,"file":"copy-text.cjs.js","sources":["../../../../src/components/data-display/infinite-table/copy-text.ts"],"sourcesContent":["import { isValidElement } from 'react';\n\nimport { DATA_COLUMN_KEY_ATTR, DATA_ROW_ID_ATTR } from './constants';\nimport type { IColumn } from './types';\n\nconst CELL_CONTENT_SELECTOR = '[data-cell-content]';\nconst JSON_INDENT = 2;\n\nconst isPrimitive = (value: unknown): value is string | number | boolean => ['string', 'number', 'boolean'].includes(typeof value);\n\n/** innerText keeps the on-screen spacing between chips; textContent covers non-rendering hosts. */\nconst readText = (element: HTMLElement | null): string => (element ? (element.innerText ?? element.textContent ?? '').trim() : '');\n\n/** Text carried by a rendered cell node — avatars, chips and links keep their label in children. */\nconst getNodeText = (node: unknown): string => {\n if (node === null || node === undefined || typeof node === 'boolean') return '';\n if (isPrimitive(node)) return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).filter(Boolean).join(' ');\n\n if (isValidElement(node)) {\n const props: unknown = node.props;\n const children = props && typeof props === 'object' && 'children' in props ? (props as { children?: unknown }).children : undefined;\n\n return getNodeText(children);\n }\n\n return '';\n};\n\n/** A column's value can be computed by a react-table accessor rather than living on the row under `key`. */\nconst resolveColumnValue = (row: Record<string, unknown>, column: IColumn): unknown => {\n if (typeof column.accessor === 'function') return column.accessor(row);\n if (typeof column.accessor === 'string') return row[column.accessor];\n\n return column.key ? row[column.key] : undefined;\n};\n\n/** What the row currently shows, keyed by column — the last resort for a value that has no serializable form. */\nconst getRenderedRowText = (rowId: unknown): Map<string, string> => {\n const rendered = new Map<string, string>();\n\n if (typeof document === 'undefined') return rendered;\n\n const rowElement = document.querySelector(`[${DATA_ROW_ID_ATTR}=\"${String(rowId).replace(/\"/g, '\\\\\"')}\"]`);\n\n rowElement?.querySelectorAll<HTMLElement>(`[${DATA_COLUMN_KEY_ATTR}]`).forEach((cell) => {\n const key = cell.getAttribute(DATA_COLUMN_KEY_ATTR);\n\n if (key) rendered.set(key, readText(cell.querySelector<HTMLElement>(CELL_CONTENT_SELECTOR) ?? cell));\n });\n\n return rendered;\n};\n\nconst toJsonValue = (value: unknown, renderedText: string): unknown => {\n if (value === null || isPrimitive(value)) return value;\n if (value === undefined) return renderedText || null;\n if (isValidElement(value)) return getNodeText(value) || renderedText || null;\n\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return getNodeText(value) || renderedText || null;\n }\n};\n\n/**\n * Clipboard text for a cell: the formatted value, else the raw value, else what is on\n * screen — chips and custom cell renderers only exist as rendered nodes.\n */\nexport const getCellText = (displayValue: unknown, rawValue: unknown, cellElement: HTMLElement | null): string => {\n const candidate = isPrimitive(displayValue) ? displayValue : rawValue;\n\n if (isPrimitive(candidate)) return String(candidate);\n\n // The value span only — the cell also holds overlays (validation error, spinner).\n return readText(cellElement?.querySelector<HTMLElement>(CELL_CONTENT_SELECTOR) ?? cellElement);\n};\n\nconst getVisibleColumns = (columns: IColumn[] | undefined): IColumn[] =>\n (columns ?? []).filter((column) => column.visible !== false && column.is_visible !== false && Boolean(column.key));\n\nconst toRowRecord = (row: Record<string, unknown>, columns: IColumn[]): Record<string, unknown> => {\n const rendered = getRenderedRowText(row.id);\n\n return Object.fromEntries(\n columns.map((column) => {\n const key = String(column.key);\n\n return [key, toJsonValue(resolveColumnValue(row, column), rendered.get(key) ?? '')];\n }),\n );\n};\n\n/** The row as pretty-printed JSON, limited to the visible columns so internal `__` fields stay out. */\nexport const getRowJson = (row: Record<string, unknown> | undefined, columns: IColumn[] | undefined): string => {\n const visibleColumns = getVisibleColumns(columns);\n\n if (!row || visibleColumns.length === 0) return '';\n\n return JSON.stringify(toRowRecord(row, visibleColumns), null, JSON_INDENT);\n};\n\n/**\n * The checked rows as a pretty-printed JSON array, in table order. Built from the data rather\n * than the DOM because a selected row may be scrolled out of the virtualized viewport.\n */\nexport const getSelectedRowsJson = (\n rows: Record<string, unknown>[] | undefined,\n columns: IColumn[] | undefined,\n checkedIds: (string | number)[] | undefined,\n): string => {\n const visibleColumns = getVisibleColumns(columns);\n\n if (!rows?.length || visibleColumns.length === 0 || !checkedIds?.length) return '';\n\n const checked = new Set(checkedIds.map(String));\n const selected = rows.filter((row) => checked.has(String(row.id)));\n\n if (selected.length === 0) return '';\n\n return JSON.stringify(\n selected.map((row) => toRowRecord(row, visibleColumns)),\n null,\n JSON_INDENT,\n );\n};\n"],"names":["CELL_CONTENT_SELECTOR","JSON_INDENT","isPrimitive","value","readText","element","getNodeText","node","isValidElement","props","children","resolveColumnValue","row","column","getRenderedRowText","rowId","rendered","DATA_ROW_ID_ATTR","DATA_COLUMN_KEY_ATTR","cell","key","toJsonValue","renderedText","getCellText","displayValue","rawValue","cellElement","candidate","getVisibleColumns","columns","toRowRecord","getRowJson","visibleColumns","getSelectedRowsJson","rows","checkedIds","checked","selected"],"mappings":"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"}
|
|
@@ -4,10 +4,10 @@ import type { IColumn } from './types';
|
|
|
4
4
|
* screen — chips and custom cell renderers only exist as rendered nodes.
|
|
5
5
|
*/
|
|
6
6
|
export declare const getCellText: (displayValue: unknown, rawValue: unknown, cellElement: HTMLElement | null) => string;
|
|
7
|
-
/**
|
|
8
|
-
export declare const
|
|
7
|
+
/** The row as pretty-printed JSON, limited to the visible columns so internal `__` fields stay out. */
|
|
8
|
+
export declare const getRowJson: (row: Record<string, unknown> | undefined, columns: IColumn[] | undefined) => string;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
* the DOM because a selected row may be scrolled out of the virtualized viewport.
|
|
10
|
+
* The checked rows as a pretty-printed JSON array, in table order. Built from the data rather
|
|
11
|
+
* than the DOM because a selected row may be scrolled out of the virtualized viewport.
|
|
12
12
|
*/
|
|
13
|
-
export declare const
|
|
13
|
+
export declare const getSelectedRowsJson: (rows: Record<string, unknown>[] | undefined, columns: IColumn[] | undefined, checkedIds: (string | number)[] | undefined) => string;
|
|
@@ -1,19 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
|
|
1
|
+
import { isValidElement as u } from "react";
|
|
2
|
+
import { DATA_ROW_ID_ATTR as d, DATA_COLUMN_KEY_ATTR as l } from "./constants.es.js";
|
|
3
|
+
const g = "[data-cell-content]", a = 2, o = (t) => ["string", "number", "boolean"].includes(typeof t), y = (t) => t ? (t.innerText ?? t.textContent ?? "").trim() : "", s = (t) => {
|
|
4
|
+
if (t == null || typeof t == "boolean") return "";
|
|
5
|
+
if (o(t)) return String(t);
|
|
6
|
+
if (Array.isArray(t)) return t.map(s).filter(Boolean).join(" ");
|
|
7
|
+
if (u(t)) {
|
|
8
|
+
const e = t.props, r = e && typeof e == "object" && "children" in e ? e.children : void 0;
|
|
9
|
+
return s(r);
|
|
10
|
+
}
|
|
11
|
+
return "";
|
|
12
|
+
}, T = (t, e) => typeof e.accessor == "function" ? e.accessor(t) : typeof e.accessor == "string" ? t[e.accessor] : e.key ? t[e.key] : void 0, b = (t) => {
|
|
13
|
+
const e = /* @__PURE__ */ new Map();
|
|
14
|
+
return typeof document > "u" || document.querySelector(`[${d}="${String(t).replace(/"/g, '\\"')}"]`)?.querySelectorAll(`[${l}]`).forEach((n) => {
|
|
15
|
+
const i = n.getAttribute(l);
|
|
16
|
+
i && e.set(i, y(n.querySelector(g) ?? n));
|
|
17
|
+
}), e;
|
|
18
|
+
}, h = (t, e) => {
|
|
19
|
+
if (t === null || o(t)) return t;
|
|
20
|
+
if (t === void 0) return e || null;
|
|
21
|
+
if (u(t)) return s(t) || e || null;
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(JSON.stringify(t));
|
|
24
|
+
} catch {
|
|
25
|
+
return s(t) || e || null;
|
|
26
|
+
}
|
|
27
|
+
}, A = (t, e, r) => {
|
|
28
|
+
const n = o(t) ? t : e;
|
|
29
|
+
return o(n) ? String(n) : y(r?.querySelector(g) ?? r);
|
|
30
|
+
}, p = (t) => (t ?? []).filter((e) => e.visible !== !1 && e.is_visible !== !1 && !!e.key), S = (t, e) => {
|
|
31
|
+
const r = b(t.id);
|
|
32
|
+
return Object.fromEntries(
|
|
33
|
+
e.map((n) => {
|
|
34
|
+
const i = String(n.key);
|
|
35
|
+
return [i, h(T(t, n), r.get(i) ?? "")];
|
|
36
|
+
})
|
|
37
|
+
);
|
|
38
|
+
}, C = (t, e) => {
|
|
39
|
+
const r = p(e);
|
|
40
|
+
return !t || r.length === 0 ? "" : JSON.stringify(S(t, r), null, a);
|
|
41
|
+
}, E = (t, e, r) => {
|
|
42
|
+
const n = p(e);
|
|
43
|
+
if (!t?.length || n.length === 0 || !r?.length) return "";
|
|
44
|
+
const i = new Set(r.map(String)), f = t.filter((c) => i.has(String(c.id)));
|
|
45
|
+
return f.length === 0 ? "" : JSON.stringify(
|
|
46
|
+
f.map((c) => S(c, n)),
|
|
47
|
+
null,
|
|
48
|
+
a
|
|
49
|
+
);
|
|
13
50
|
};
|
|
14
51
|
export {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
52
|
+
A as getCellText,
|
|
53
|
+
C as getRowJson,
|
|
54
|
+
E as getSelectedRowsJson
|
|
18
55
|
};
|
|
19
56
|
//# sourceMappingURL=copy-text.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-text.es.js","sources":["../../../../src/components/data-display/infinite-table/copy-text.ts"],"sourcesContent":["import type { IColumn } from './types';\n\nconst CELL_CONTENT_SELECTOR = '[data-cell-content]';\nconst
|
|
1
|
+
{"version":3,"file":"copy-text.es.js","sources":["../../../../src/components/data-display/infinite-table/copy-text.ts"],"sourcesContent":["import { isValidElement } from 'react';\n\nimport { DATA_COLUMN_KEY_ATTR, DATA_ROW_ID_ATTR } from './constants';\nimport type { IColumn } from './types';\n\nconst CELL_CONTENT_SELECTOR = '[data-cell-content]';\nconst JSON_INDENT = 2;\n\nconst isPrimitive = (value: unknown): value is string | number | boolean => ['string', 'number', 'boolean'].includes(typeof value);\n\n/** innerText keeps the on-screen spacing between chips; textContent covers non-rendering hosts. */\nconst readText = (element: HTMLElement | null): string => (element ? (element.innerText ?? element.textContent ?? '').trim() : '');\n\n/** Text carried by a rendered cell node — avatars, chips and links keep their label in children. */\nconst getNodeText = (node: unknown): string => {\n if (node === null || node === undefined || typeof node === 'boolean') return '';\n if (isPrimitive(node)) return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).filter(Boolean).join(' ');\n\n if (isValidElement(node)) {\n const props: unknown = node.props;\n const children = props && typeof props === 'object' && 'children' in props ? (props as { children?: unknown }).children : undefined;\n\n return getNodeText(children);\n }\n\n return '';\n};\n\n/** A column's value can be computed by a react-table accessor rather than living on the row under `key`. */\nconst resolveColumnValue = (row: Record<string, unknown>, column: IColumn): unknown => {\n if (typeof column.accessor === 'function') return column.accessor(row);\n if (typeof column.accessor === 'string') return row[column.accessor];\n\n return column.key ? row[column.key] : undefined;\n};\n\n/** What the row currently shows, keyed by column — the last resort for a value that has no serializable form. */\nconst getRenderedRowText = (rowId: unknown): Map<string, string> => {\n const rendered = new Map<string, string>();\n\n if (typeof document === 'undefined') return rendered;\n\n const rowElement = document.querySelector(`[${DATA_ROW_ID_ATTR}=\"${String(rowId).replace(/\"/g, '\\\\\"')}\"]`);\n\n rowElement?.querySelectorAll<HTMLElement>(`[${DATA_COLUMN_KEY_ATTR}]`).forEach((cell) => {\n const key = cell.getAttribute(DATA_COLUMN_KEY_ATTR);\n\n if (key) rendered.set(key, readText(cell.querySelector<HTMLElement>(CELL_CONTENT_SELECTOR) ?? cell));\n });\n\n return rendered;\n};\n\nconst toJsonValue = (value: unknown, renderedText: string): unknown => {\n if (value === null || isPrimitive(value)) return value;\n if (value === undefined) return renderedText || null;\n if (isValidElement(value)) return getNodeText(value) || renderedText || null;\n\n try {\n return JSON.parse(JSON.stringify(value));\n } catch {\n return getNodeText(value) || renderedText || null;\n }\n};\n\n/**\n * Clipboard text for a cell: the formatted value, else the raw value, else what is on\n * screen — chips and custom cell renderers only exist as rendered nodes.\n */\nexport const getCellText = (displayValue: unknown, rawValue: unknown, cellElement: HTMLElement | null): string => {\n const candidate = isPrimitive(displayValue) ? displayValue : rawValue;\n\n if (isPrimitive(candidate)) return String(candidate);\n\n // The value span only — the cell also holds overlays (validation error, spinner).\n return readText(cellElement?.querySelector<HTMLElement>(CELL_CONTENT_SELECTOR) ?? cellElement);\n};\n\nconst getVisibleColumns = (columns: IColumn[] | undefined): IColumn[] =>\n (columns ?? []).filter((column) => column.visible !== false && column.is_visible !== false && Boolean(column.key));\n\nconst toRowRecord = (row: Record<string, unknown>, columns: IColumn[]): Record<string, unknown> => {\n const rendered = getRenderedRowText(row.id);\n\n return Object.fromEntries(\n columns.map((column) => {\n const key = String(column.key);\n\n return [key, toJsonValue(resolveColumnValue(row, column), rendered.get(key) ?? '')];\n }),\n );\n};\n\n/** The row as pretty-printed JSON, limited to the visible columns so internal `__` fields stay out. */\nexport const getRowJson = (row: Record<string, unknown> | undefined, columns: IColumn[] | undefined): string => {\n const visibleColumns = getVisibleColumns(columns);\n\n if (!row || visibleColumns.length === 0) return '';\n\n return JSON.stringify(toRowRecord(row, visibleColumns), null, JSON_INDENT);\n};\n\n/**\n * The checked rows as a pretty-printed JSON array, in table order. Built from the data rather\n * than the DOM because a selected row may be scrolled out of the virtualized viewport.\n */\nexport const getSelectedRowsJson = (\n rows: Record<string, unknown>[] | undefined,\n columns: IColumn[] | undefined,\n checkedIds: (string | number)[] | undefined,\n): string => {\n const visibleColumns = getVisibleColumns(columns);\n\n if (!rows?.length || visibleColumns.length === 0 || !checkedIds?.length) return '';\n\n const checked = new Set(checkedIds.map(String));\n const selected = rows.filter((row) => checked.has(String(row.id)));\n\n if (selected.length === 0) return '';\n\n return JSON.stringify(\n selected.map((row) => toRowRecord(row, visibleColumns)),\n null,\n JSON_INDENT,\n );\n};\n"],"names":["CELL_CONTENT_SELECTOR","JSON_INDENT","isPrimitive","value","readText","element","getNodeText","node","isValidElement","props","children","resolveColumnValue","row","column","getRenderedRowText","rowId","rendered","DATA_ROW_ID_ATTR","DATA_COLUMN_KEY_ATTR","cell","key","toJsonValue","renderedText","getCellText","displayValue","rawValue","cellElement","candidate","getVisibleColumns","columns","toRowRecord","getRowJson","visibleColumns","getSelectedRowsJson","rows","checkedIds","checked","selected"],"mappings":"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"}
|