@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.
@@ -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 { getRowText as Qe, getCellText as Ze } from "../../copy-text.es.js";
14
- import { InlineEditField as Pe } from "./InlineEditField.es.js";
15
- import { CELL_DEFAULT_RIGHT_OFFSET as Ee, CELL_INDENT_PER_LEVEL_PX as Z, CELL_STICKY_SHADOW_DARK as eo, CELL_STICKY_SHADOW_LIGHT as oo } from "../../constants.es.js";
16
- import { LoadingSpinnerIcon as P, KeyboardArrowDownIcon as to, KeyboardArrowRightFilledIcon as ro, LinkIcon as ao } from "../../../../icon/icons.generated.es.js";
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
- }, no = ({ children: e, withLink: o, linkTo: p, rowData: d, disableRowClick: u }) => o && !u ? /* @__PURE__ */ r(qe, { to: p?.(d?.id, d) || "", children: e }) : e, so = ({
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: uo,
46
+ is_read: so,
47
47
  is_modified: ee,
48
48
  is_row_modified: oe,
49
- is_deleted: I,
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: R,
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: io,
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, V = k === e.column.key && e?.column?.canEdit && !Y && !e?.column?.is_disabled, Se = Le === `${o}-${e?.column?.id}`, { theme: Oe } = Ue(), Re = Oe === "dark", Ve = C(() => O(o), [O, o]), Ie = C(() => O(null), [O]), _ = De?.formatDuration, [n, f] = D(
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 && !(I || y?.is_deleted) && !(z || y?.is_added),
95
- "bg-error-200 dark:bg-error-900": u === o && !l && !i && (I || y?.is_deleted),
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) && !R && u !== o && !l && !i,
100
- "bg-error-100 dark:bg-error-975": (I || y?.is_deleted) && !R && u !== o && !l && !i,
101
- "bg-success-50 dark:bg-success-900": (z || y?.is_added) && !R && u !== o && !l && !i,
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 && !R,
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 || V) return;
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: Ze(n, e?.value, t.currentTarget),
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, V, o, e, n]);
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 && !V ? "outline outline-2 outline-error-500 -outline-offset-2 z-[5]" : "",
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` : Ee, paddingLeft: b > 0 && h === 0 ? `${b * Z}px` : void 0 },
181
- onMouseEnter: Ve,
182
- onMouseLeave: Ie,
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(no, { 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: [
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(Pe, { cell: e, id: o, inlineEditing: k, cellRef: ye, handleCellValueChange: he, handleUpdateCellData: be, registerValidation: ve }) }) : /* @__PURE__ */ $(We, { children: [
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: Re ? eo : oo } : {},
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(to, { size: 20, className: "text-neutral-400 dark:text-neutral-400", onClick: (t) => {
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(ro, { size: 20, className: "text-neutral-400 dark:text-neutral-400", onClick: (t) => {
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(ao, { height: 16, width: 16 }) }),
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 && !V && /* @__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 }) }) }),
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
- }, Mo = g.memo(so);
269
+ }, Lo = g.memo(no);
271
270
  export {
272
- Mo as DataCell
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 c="[data-cell-content]",l=" ",S=`
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 COLUMN_SEPARATOR = '\\t';\nconst ROW_SEPARATOR = '\\n';\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/**\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\n/** Tab-separated text of the row the cell belongs to, taken from what is rendered so values keep their cell formatting. */\nexport const getRowText = (cellElement: HTMLElement | null): string => {\n const cells = cellElement?.closest('tr')?.querySelectorAll<HTMLElement>(CELL_CONTENT_SELECTOR);\n\n if (!cells?.length) return '';\n\n return Array.from(cells, readText).join(COLUMN_SEPARATOR);\n};\n\n/**\n * Tab-separated text of the checked rows, one row per line. Built from the data rather than\n * the DOM because a selected row may be scrolled out of the virtualized viewport.\n */\nexport const getSelectedRowsText = (\n rows: Record<string, unknown>[] | undefined,\n columns: IColumn[] | undefined,\n checkedIds: (string | number)[] | undefined,\n): string => {\n if (!rows?.length || !columns?.length || !checkedIds?.length) return '';\n\n const checked = new Set(checkedIds.map(String));\n const keys = columns.filter((column) => column.visible !== false && column.is_visible !== false).map((column) => column.key);\n\n return rows\n .filter((row) => checked.has(String(row.id)))\n .map((row) => keys.map((key) => (key && isPrimitive(row[key]) ? String(row[key]) : '')).join(COLUMN_SEPARATOR))\n .join(ROW_SEPARATOR);\n};\n"],"names":["CELL_CONTENT_SELECTOR","COLUMN_SEPARATOR","ROW_SEPARATOR","isPrimitive","value","readText","element","getCellText","displayValue","rawValue","cellElement","candidate","getRowText","cells","getSelectedRowsText","rows","columns","checkedIds","checked","keys","column","row","key"],"mappings":"gFAEA,MAAMA,EAAwB,sBACxBC,EAAmB,IACnBC,EAAgB;AAAA,EAEhBC,EAAeC,GAAuD,CAAC,SAAU,SAAU,SAAS,EAAE,SAAS,OAAOA,CAAK,EAG3HC,EAAYC,GAAyCA,GAAWA,EAAQ,WAAaA,EAAQ,aAAe,IAAI,KAAA,EAAS,GAMlHC,EAAc,CAACC,EAAuBC,EAAmBC,IAA4C,CAChH,MAAMC,EAAYR,EAAYK,CAAY,EAAIA,EAAeC,EAE7D,OAAIN,EAAYQ,CAAS,EAAU,OAAOA,CAAS,EAG5CN,EAASK,GAAa,cAA2BV,CAAqB,GAAKU,CAAW,CAC/F,EAGaE,EAAcF,GAA4C,CACrE,MAAMG,EAAQH,GAAa,QAAQ,IAAI,GAAG,iBAA8BV,CAAqB,EAE7F,OAAKa,GAAO,OAEL,MAAM,KAAKA,EAAOR,CAAQ,EAAE,KAAKJ,CAAgB,EAF7B,EAG7B,EAMaa,EAAsB,CACjCC,EACAC,EACAC,IACW,CACX,GAAI,CAACF,GAAM,QAAU,CAACC,GAAS,QAAU,CAACC,GAAY,OAAQ,MAAO,GAErE,MAAMC,EAAU,IAAI,IAAID,EAAW,IAAI,MAAM,CAAC,EACxCE,EAAOH,EAAQ,OAAQI,GAAWA,EAAO,UAAY,IAASA,EAAO,aAAe,EAAK,EAAE,IAAKA,GAAWA,EAAO,GAAG,EAE3H,OAAOL,EACJ,OAAQM,GAAQH,EAAQ,IAAI,OAAOG,EAAI,EAAE,CAAC,CAAC,EAC3C,IAAKA,GAAQF,EAAK,IAAKG,GAASA,GAAOnB,EAAYkB,EAAIC,CAAG,CAAC,EAAI,OAAOD,EAAIC,CAAG,CAAC,EAAI,EAAG,EAAE,KAAKrB,CAAgB,CAAC,EAC7G,KAAKC,CAAa,CACvB"}
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
- /** Tab-separated text of the row the cell belongs to, taken from what is rendered so values keep their cell formatting. */
8
- export declare const getRowText: (cellElement: HTMLElement | null) => string;
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
- * Tab-separated text of the checked rows, one row per line. Built from the data rather than
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 getSelectedRowsText: (rows: Record<string, unknown>[] | undefined, columns: IColumn[] | undefined, checkedIds: (string | number)[] | undefined) => string;
13
+ export declare const getSelectedRowsJson: (rows: Record<string, unknown>[] | undefined, columns: IColumn[] | undefined, checkedIds: (string | number)[] | undefined) => string;
@@ -1,19 +1,56 @@
1
- const c = "[data-cell-content]";
2
- const s = (t) => ["string", "number", "boolean"].includes(typeof t), l = (t) => t ? (t.innerText ?? t.textContent ?? "").trim() : "", S = (t, n, r) => {
3
- const i = s(t) ? t : n;
4
- return s(i) ? String(i) : l(r?.querySelector(c) ?? r);
5
- }, T = (t) => {
6
- const n = t?.closest("tr")?.querySelectorAll(c);
7
- return n?.length ? Array.from(n, l).join(" ") : "";
8
- }, a = (t, n, r) => {
9
- if (!t?.length || !n?.length || !r?.length) return "";
10
- const i = new Set(r.map(String)), R = n.filter((e) => e.visible !== !1 && e.is_visible !== !1).map((e) => e.key);
11
- return t.filter((e) => i.has(String(e.id))).map((e) => R.map((o) => o && s(e[o]) ? String(e[o]) : "").join(" ")).join(`
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
- S as getCellText,
16
- T as getRowText,
17
- a as getSelectedRowsText
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 COLUMN_SEPARATOR = '\\t';\nconst ROW_SEPARATOR = '\\n';\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/**\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\n/** Tab-separated text of the row the cell belongs to, taken from what is rendered so values keep their cell formatting. */\nexport const getRowText = (cellElement: HTMLElement | null): string => {\n const cells = cellElement?.closest('tr')?.querySelectorAll<HTMLElement>(CELL_CONTENT_SELECTOR);\n\n if (!cells?.length) return '';\n\n return Array.from(cells, readText).join(COLUMN_SEPARATOR);\n};\n\n/**\n * Tab-separated text of the checked rows, one row per line. Built from the data rather than\n * the DOM because a selected row may be scrolled out of the virtualized viewport.\n */\nexport const getSelectedRowsText = (\n rows: Record<string, unknown>[] | undefined,\n columns: IColumn[] | undefined,\n checkedIds: (string | number)[] | undefined,\n): string => {\n if (!rows?.length || !columns?.length || !checkedIds?.length) return '';\n\n const checked = new Set(checkedIds.map(String));\n const keys = columns.filter((column) => column.visible !== false && column.is_visible !== false).map((column) => column.key);\n\n return rows\n .filter((row) => checked.has(String(row.id)))\n .map((row) => keys.map((key) => (key && isPrimitive(row[key]) ? String(row[key]) : '')).join(COLUMN_SEPARATOR))\n .join(ROW_SEPARATOR);\n};\n"],"names":["CELL_CONTENT_SELECTOR","isPrimitive","value","readText","element","getCellText","displayValue","rawValue","cellElement","candidate","getRowText","cells","getSelectedRowsText","rows","columns","checkedIds","checked","keys","column","row","key"],"mappings":"AAEA,MAAMA,IAAwB;AAI9B,MAAMC,IAAc,CAACC,MAAuD,CAAC,UAAU,UAAU,SAAS,EAAE,SAAS,OAAOA,CAAK,GAG3HC,IAAW,CAACC,MAAyCA,KAAWA,EAAQ,aAAaA,EAAQ,eAAe,IAAI,KAAA,IAAS,IAMlHC,IAAc,CAACC,GAAuBC,GAAmBC,MAA4C;AAChH,QAAMC,IAAYR,EAAYK,CAAY,IAAIA,IAAeC;AAE7D,SAAIN,EAAYQ,CAAS,IAAU,OAAOA,CAAS,IAG5CN,EAASK,GAAa,cAA2BR,CAAqB,KAAKQ,CAAW;AAC/F,GAGaE,IAAa,CAACF,MAA4C;AACrE,QAAMG,IAAQH,GAAa,QAAQ,IAAI,GAAG,iBAA8BR,CAAqB;AAE7F,SAAKW,GAAO,SAEL,MAAM,KAAKA,GAAOR,CAAQ,EAAE,KAAK,GAAgB,IAF7B;AAG7B,GAMaS,IAAsB,CACjCC,GACAC,GACAC,MACW;AACX,MAAI,CAACF,GAAM,UAAU,CAACC,GAAS,UAAU,CAACC,GAAY,OAAQ,QAAO;AAErE,QAAMC,IAAU,IAAI,IAAID,EAAW,IAAI,MAAM,CAAC,GACxCE,IAAOH,EAAQ,OAAO,CAACI,MAAWA,EAAO,YAAY,MAASA,EAAO,eAAe,EAAK,EAAE,IAAI,CAACA,MAAWA,EAAO,GAAG;AAE3H,SAAOL,EACJ,OAAO,CAACM,MAAQH,EAAQ,IAAI,OAAOG,EAAI,EAAE,CAAC,CAAC,EAC3C,IAAI,CAACA,MAAQF,EAAK,IAAI,CAACG,MAASA,KAAOnB,EAAYkB,EAAIC,CAAG,CAAC,IAAI,OAAOD,EAAIC,CAAG,CAAC,IAAI,EAAG,EAAE,KAAK,GAAgB,CAAC,EAC7G,KAAK;AAAA,CAAa;AACvB;"}
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":";;AAKA,MAAMA,IAAwB,uBACxBC,IAAc,GAEdC,IAAc,CAACC,MAAuD,CAAC,UAAU,UAAU,SAAS,EAAE,SAAS,OAAOA,CAAK,GAG3HC,IAAW,CAACC,MAAyCA,KAAWA,EAAQ,aAAaA,EAAQ,eAAe,IAAI,KAAA,IAAS,IAGzHC,IAAc,CAACC,MAA0B;AAC7C,MAAIA,KAAS,QAA8B,OAAOA,KAAS,UAAW,QAAO;AAC7E,MAAIL,EAAYK,CAAI,EAAG,QAAO,OAAOA,CAAI;AACzC,MAAI,MAAM,QAAQA,CAAI,EAAG,QAAOA,EAAK,IAAID,CAAW,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE9E,MAAIE,EAAeD,CAAI,GAAG;AACxB,UAAME,IAAiBF,EAAK,OACtBG,IAAWD,KAAS,OAAOA,KAAU,YAAY,cAAcA,IAASA,EAAiC,WAAW;AAE1H,WAAOH,EAAYI,CAAQ;AAAA,EAC7B;AAEA,SAAO;AACT,GAGMC,IAAqB,CAACC,GAA8BC,MACpD,OAAOA,EAAO,YAAa,aAAmBA,EAAO,SAASD,CAAG,IACjE,OAAOC,EAAO,YAAa,WAAiBD,EAAIC,EAAO,QAAQ,IAE5DA,EAAO,MAAMD,EAAIC,EAAO,GAAG,IAAI,QAIlCC,IAAqB,CAACC,MAAwC;AAClE,QAAMC,wBAAe,IAAA;AAErB,SAAI,OAAO,WAAa,OAEL,SAAS,cAAc,IAAIC,CAAgB,KAAK,OAAOF,CAAK,EAAE,QAAQ,MAAM,KAAK,CAAC,IAAI,GAE7F,iBAA8B,IAAIG,CAAoB,GAAG,EAAE,QAAQ,CAACC,MAAS;AACvF,UAAMC,IAAMD,EAAK,aAAaD,CAAoB;AAElD,IAAIE,KAAKJ,EAAS,IAAII,GAAKhB,EAASe,EAAK,cAA2BnB,CAAqB,KAAKmB,CAAI,CAAC;AAAA,EACrG,CAAC,GAEMH;AACT,GAEMK,IAAc,CAAClB,GAAgBmB,MAAkC;AACrE,MAAInB,MAAU,QAAQD,EAAYC,CAAK,EAAG,QAAOA;AACjD,MAAIA,MAAU,OAAW,QAAOmB,KAAgB;AAChD,MAAId,EAAeL,CAAK,UAAUG,EAAYH,CAAK,KAAKmB,KAAgB;AAExE,MAAI;AACF,WAAO,KAAK,MAAM,KAAK,UAAUnB,CAAK,CAAC;AAAA,EACzC,QAAQ;AACN,WAAOG,EAAYH,CAAK,KAAKmB,KAAgB;AAAA,EAC/C;AACF,GAMaC,IAAc,CAACC,GAAuBC,GAAmBC,MAA4C;AAChH,QAAMC,IAAYzB,EAAYsB,CAAY,IAAIA,IAAeC;AAE7D,SAAIvB,EAAYyB,CAAS,IAAU,OAAOA,CAAS,IAG5CvB,EAASsB,GAAa,cAA2B1B,CAAqB,KAAK0B,CAAW;AAC/F,GAEME,IAAoB,CAACC,OACxBA,KAAW,CAAA,GAAI,OAAO,CAAChB,MAAWA,EAAO,YAAY,MAASA,EAAO,eAAe,MAAS,EAAQA,EAAO,GAAI,GAE7GiB,IAAc,CAAClB,GAA8BiB,MAAgD;AACjG,QAAMb,IAAWF,EAAmBF,EAAI,EAAE;AAE1C,SAAO,OAAO;AAAA,IACZiB,EAAQ,IAAI,CAAChB,MAAW;AACtB,YAAMO,IAAM,OAAOP,EAAO,GAAG;AAE7B,aAAO,CAACO,GAAKC,EAAYV,EAAmBC,GAAKC,CAAM,GAAGG,EAAS,IAAII,CAAG,KAAK,EAAE,CAAC;AAAA,IACpF,CAAC;AAAA,EAAA;AAEL,GAGaW,IAAa,CAACnB,GAA0CiB,MAA2C;AAC9G,QAAMG,IAAiBJ,EAAkBC,CAAO;AAEhD,SAAI,CAACjB,KAAOoB,EAAe,WAAW,IAAU,KAEzC,KAAK,UAAUF,EAAYlB,GAAKoB,CAAc,GAAG,MAAM/B,CAAW;AAC3E,GAMagC,IAAsB,CACjCC,GACAL,GACAM,MACW;AACX,QAAMH,IAAiBJ,EAAkBC,CAAO;AAEhD,MAAI,CAACK,GAAM,UAAUF,EAAe,WAAW,KAAK,CAACG,GAAY,OAAQ,QAAO;AAEhF,QAAMC,IAAU,IAAI,IAAID,EAAW,IAAI,MAAM,CAAC,GACxCE,IAAWH,EAAK,OAAO,CAACtB,MAAQwB,EAAQ,IAAI,OAAOxB,EAAI,EAAE,CAAC,CAAC;AAEjE,SAAIyB,EAAS,WAAW,IAAU,KAE3B,KAAK;AAAA,IACVA,EAAS,IAAI,CAACzB,MAAQkB,EAAYlB,GAAKoB,CAAc,CAAC;AAAA,IACtD;AAAA,IACA/B;AAAA,EAAA;AAEJ;"}